shithub: aubio

Download patch

ref: dddf1f5c839a1e984c3365718e6f47f34dab85e3
parent: 66a1b955247902b19a3838d17d0fc729c161629f
parent: 6c7d49b35493f7802c7834335f47b82f243ea6fa
author: Paul Brossier <[email protected]>
date: Thu Nov 29 12:34:18 EST 2007

merge with main branch

--- a/doc/Makefile.am
+++ b/doc/Makefile.am
@@ -27,12 +27,10 @@
 doc-examples: 
 	(echo PROJECT_NUMBER = $(PROJECT_NUMBER) ; cat $(srcdir)/examples.cfg)	| doxygen -
 
-%.sgml: 
-
-%.1:	%.sgml
+.sgml.1:
 	docbook-to-man $< > $*.1
 
-%.html: %.sgml
+.sgml.html:
 	docbook2html $< && mv index.html $*.html
 
 clean:
--- a/examples/Makefile.am
+++ b/examples/Makefile.am
@@ -6,7 +6,8 @@
 bin_PROGRAMS = \
 	aubioonset \
 	aubiotrack \
-	aubionotes
+	aubionotes \
+	aubiomfcc
 
 noinst_PROGRAMS = \
 	aubioquiet
@@ -18,8 +19,10 @@
 aubionotes_SOURCES = aubionotes.c utils.c
 aubiotrack_SOURCES = aubiotrack.c utils.c
 aubioquiet_SOURCES = aubioquiet.c utils.c
+aubiomfcc_SOURCES = aubiomfcc.c utils.c
 
 aubioonset_LDADD = @JACK_LIBS@
 aubionotes_LDADD = @JACK_LIBS@
 aubiotrack_LDADD = @JACK_LIBS@
 aubioquiet_LDADD = @JACK_LIBS@
+aubiomfcc_LDADD = @JACK_LIBS@
--- /dev/null
+++ b/examples/aubiomfcc.c
@@ -1,0 +1,112 @@
+/*
+   Copyright (C) 2007 Amaury Hazan <[email protected]>
+                  and Paul Brossier <[email protected]>
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "utils.h"
+
+/* mfcc objects */
+fvec_t * mfcc_out;
+aubio_mfcc_t * mfcc;
+
+uint_t n_filters = 40;
+uint_t n_coefs = 11;
+
+unsigned int pos = 0; /*frames%dspblocksize*/
+uint_t usepitch = 0;
+
+int aubio_process(float **input, float **output, int nframes);
+int aubio_process(float **input, float **output, int nframes) {
+  unsigned int i;       /*channels*/
+  unsigned int j;       /*frames*/
+  
+  for (j=0;j<(unsigned)nframes;j++) {
+    if(usejack) {
+      for (i=0;i<channels;i++) {
+        /* write input to datanew */
+        fvec_write_sample(ibuf, input[i][j], i, pos);
+        /* put synthnew in output */
+        output[i][j] = fvec_read_sample(obuf, i, pos);
+      }
+    }
+    /*time for fft*/
+    if (pos == overlap_size-1) {         
+      /* block loop */
+      
+      //compute mag spectrum
+      aubio_pvoc_do (pv,ibuf, fftgrain);
+     
+      //compute mfccs
+      aubio_mfcc_do(mfcc, fftgrain, mfcc_out);
+      
+      /* end of block loop */
+      pos = -1; /* so it will be zero next j loop */
+    }
+    pos++;
+  }
+  return 1;
+}
+
+void process_print (void);
+void process_print (void) {
+      /* output times in seconds
+         write extracted mfccs
+      */
+      
+      uint_t coef_cnt;
+      if (output_filename == NULL) {
+         if(frames >= 4) {
+           outmsg("%f\t",(frames-4)*overlap_size/(float)samplerate);
+         } 
+         else if (frames < 4) {
+           outmsg("%f\t",0.);
+         }
+        for (coef_cnt = 0; coef_cnt < n_coefs; coef_cnt++) {
+            outmsg("%f ",mfcc_out->data[0][coef_cnt]);
+        }
+        outmsg("\n");
+      }
+}
+
+int main(int argc, char **argv) {
+  // params
+  buffer_size  = 1024;
+  overlap_size = 512;
+  
+  examples_common_init(argc,argv);
+  smpl_t lowfreq = 133.333f;
+  smpl_t highfreq = 44100.f;
+  mfcc_out = new_fvec(n_coefs,channels);
+  
+  
+  //populating the filter
+  mfcc = new_aubio_mfcc(buffer_size, samplerate, n_filters, n_coefs , lowfreq, highfreq, channels);
+  
+  //process
+  examples_common_process(aubio_process,process_print);
+  
+  //destroying mfcc 
+  del_aubio_mfcc(mfcc);
+  del_fvec(mfcc_out);
+
+  examples_common_del();
+  debug("End of program.\n");
+  fflush(stderr);
+  
+  return 0;
+}
+
--- a/examples/utils.c
+++ b/examples/utils.c
@@ -173,6 +173,8 @@
                                         type_onset = aubio_onset_mkl;
                                 else if (strcmp(optarg,"kl") == 0) 
                                         type_onset = aubio_onset_kl;
+                                else if (strcmp(optarg,"specflux") == 0) 
+                                        type_onset = aubio_onset_specflux;
                                 else {
                                         errmsg("unknown onset type.\n");
                                         abort();
--- a/ext/sndfileio.c
+++ b/ext/sndfileio.c
@@ -22,7 +22,7 @@
 #include <sndfile.h>
 
 #include "aubio_priv.h"
-#include "sample.h"
+#include "fvec.h"
 #include "sndfileio.h"
 #include "mathutils.h"
 
--- a/python/aubio/aubioclass.py
+++ b/python/aubio/aubioclass.py
@@ -73,7 +73,7 @@
     def do(self,tc,tf):
         aubio_onsetdetection(self.od,tc(),tf())
     def __del__(self):
-        aubio_onsetdetection_free(self.od)
+        del_aubio_onsetdetection(self.od)
 
 class peakpick:
     """ class for aubio_peakpicker """
--- a/python/aubio/task/utils.py
+++ b/python/aubio/task/utils.py
@@ -16,11 +16,13 @@
 		 return aubio_onset_kl
 	elif nvalue == 'mkl'           :
 		 return aubio_onset_mkl
+	elif nvalue == 'specflux'      :
+		 return aubio_onset_specflux
 	elif nvalue == 'dual'          :
 		 return 'dual'
 	else:
 		 import sys
-		 print "unknown onset detection function selected"
+		 print "unknown onset detection function selected: %s" % nvalue
 		 sys.exit(1)
 
 def get_pitch_mode(nvalue):
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1,78 +1,87 @@
 noinst_HEADERS = aubio_priv.h
 pkginclude_HEADERS = aubio.h \
 	types.h \
-	phasevoc.h \
-	mathutils.h \
-	fft.h \
-	sample.h \
 	fvec.h \
 	cvec.h \
-	hist.h \
-	scale.h \
-	resample.h \
-	onsetdetection.h \
-	tss.h \
-	peakpick.h \
-	biquad.h \
-	pitchdetection.h \
-	pitchmcomb.h \
-	pitchyin.h \
-	pitchschmitt.h \
-	pitchfcomb.h \
-	pitchyinfft.h \
-	beattracking.h \
-	onset.h \
-	tempo.h \
-	filter.h
+	mathutils.h \
+	utils/hist.h \
+	utils/scale.h \
+	temporal/resample.h \
+	temporal/biquad.h \
+	temporal/filter.h \
+	spectral/filterbank.h \
+	spectral/mfcc.c \
+	spectral/phasevoc.h \
+	spectral/fft.h \
+	spectral/tss.h \
+	spectral/spectral_centroid.h \
+	pitch/pitchdetection.h \
+	pitch/pitchmcomb.h \
+	pitch/pitchyin.h \
+	pitch/pitchschmitt.h \
+	pitch/pitchfcomb.h \
+	pitch/pitchyinfft.h \
+	onset/onset.h \
+	onset/onsetdetection.h \
+	onset/peakpick.h \
+	tempo/tempo.h \
+	tempo/beattracking.h
+
 nodist_pkginclude_HEADERS = config.h
 
 lib_LTLIBRARIES = libaubio.la 
 libaubio_la_SOURCES = aubio.h \
 	types.h \
-	phasevoc.c \
-	phasevoc.h \
-	mathutils.c \
-	mathutils.h \
-	fft.c \
-	fft.h \
 	fvec.c \
 	fvec.h \
 	cvec.c \
 	cvec.h \
-	hist.c \
-	hist.h \
-	scale.c \
-	scale.h \
-	resample.c \
-	resample.h \
-	onsetdetection.c \
-	onsetdetection.h \
-	tss.c \
-	tss.h \
-	peakpick.c \
-	peakpick.h \
-	biquad.c \
-	biquad.h \
-	pitchdetection.c \
-	pitchdetection.h \
-	pitchmcomb.c \
-	pitchmcomb.h \
-	pitchyin.c \
-	pitchyin.h \
-	pitchschmitt.c \
-	pitchschmitt.h \
-	pitchfcomb.c \
-	pitchfcomb.h \
-	pitchyinfft.c \
-	pitchyinfft.h \
-	beattracking.c \
-	beattracking.h \
-	onset.c \
-	onset.h \
-	tempo.c \
-	tempo.h \
-	filter.c \
-	filter.h
+	mathutils.c \
+	mathutils.h \
+	utils/hist.c \
+	utils/hist.h \
+	utils/scale.c \
+	utils/scale.h \
+	temporal/resample.c \
+	temporal/resample.h \
+	temporal/biquad.c \
+	temporal/biquad.h \
+	temporal/filter.c \
+	temporal/filter.h \
+	spectral/filterbank.c \
+	spectral/filterbank.h \
+	spectral/mfcc.h \
+	spectral/mfcc.c \
+	spectral/phasevoc.c \
+	spectral/phasevoc.h \
+	spectral/fft.c \
+	spectral/fft.h \
+	spectral/tss.c \
+	spectral/tss.h \
+	spectral/spectral_centroid.c \
+	spectral/spectral_centroid.h \
+	pitch/pitchdetection.c \
+	pitch/pitchdetection.h \
+	pitch/pitchmcomb.c \
+	pitch/pitchmcomb.h \
+	pitch/pitchyin.c \
+	pitch/pitchyin.h \
+	pitch/pitchschmitt.c \
+	pitch/pitchschmitt.h \
+	pitch/pitchfcomb.c \
+	pitch/pitchfcomb.h \
+	pitch/pitchyinfft.c \
+	pitch/pitchyinfft.h \
+	onset/onset.c \
+	onset/onset.h \
+	onset/onsetdetection.c \
+	onset/onsetdetection.h \
+	onset/peakpick.c \
+	onset/peakpick.h \
+	tempo/tempo.c \
+	tempo/tempo.h \
+	tempo/beattracking.c \
+	tempo/beattracking.h
 
 AM_CFLAGS = @AUBIO_CFLAGS@ @FFTWLIB_CFLAGS@ @SAMPLERATE_CFLAGS@
 libaubio_la_LIBADD = @FFTWLIB_LIBS@ @SAMPLERATE_LIBS@ @LTLIBOBJS@
--- a/src/aubio.h
+++ b/src/aubio.h
@@ -58,27 +58,31 @@
  
 /* in this order */
 #include "types.h"
-#include "sample.h"
-#include "fft.h"
-#include "phasevoc.h"
+#include "fvec.h"
+#include "cvec.h"
 #include "mathutils.h"
-#include "scale.h"
-#include "hist.h"
-#include "onsetdetection.h"
-#include "tss.h"
-#include "resample.h"
-#include "peakpick.h"
-#include "biquad.h"
-#include "filter.h"
-#include "pitchdetection.h"
-#include "pitchmcomb.h"
-#include "pitchyin.h"
-#include "pitchyinfft.h"
-#include "pitchschmitt.h"
-#include "pitchfcomb.h"
-#include "beattracking.h"
-#include "onset.h"
-#include "tempo.h"
+#include "utils/scale.h"
+#include "utils/hist.h"
+#include "spectral/tss.h"
+#include "temporal/resample.h"
+#include "temporal/biquad.h"
+#include "temporal/filter.h"
+#include "spectral/filterbank.h"
+#include "spectral/mfcc.h"
+#include "spectral/fft.h"
+#include "spectral/phasevoc.h"
+#include "spectral/spectral_centroid.h"
+#include "pitch/pitchdetection.h"
+#include "pitch/pitchmcomb.h"
+#include "pitch/pitchyin.h"
+#include "pitch/pitchyinfft.h"
+#include "pitch/pitchschmitt.h"
+#include "pitch/pitchfcomb.h"
+#include "onset/onsetdetection.h"
+#include "onset/onset.h"
+#include "onset/peakpick.h"
+#include "tempo/beattracking.h"
+#include "tempo/tempo.h"
 
 #ifdef __cplusplus
 } /* extern "C" */
--- a/src/beattracking.c
+++ /dev/null
@@ -1,467 +1,0 @@
-/*
-         Copyright (C) 2005 Matthew Davies and Paul Brossier
-
-         This program is free software; you can redistribute it and/or modify
-         it under the terms of the GNU General Public License as published by
-         the Free Software Foundation; either version 2 of the License, or
-         (at your option) any later version.
-
-         This program is distributed in the hope that it will be useful,
-         but WITHOUT ANY WARRANTY; without even the implied warranty of
-         MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-         GNU General Public License for more details.
-
-         You should have received a copy of the GNU General Public License
-         along with this program; if not, write to the Free Software
-         Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-         
-*/
-
-#include "aubio_priv.h"
-#include "sample.h"
-#include "mathutils.h"
-#include "beattracking.h"
-
-uint_t fvec_gettimesig(smpl_t * acf, uint_t acflen, uint_t gp);
-void aubio_beattracking_checkstate(aubio_beattracking_t * bt);
-smpl_t fvec_getperiod(aubio_beattracking_t * bt);
-
-struct _aubio_beattracking_t {
-        fvec_t * rwv;    /** rayleigh weight vector - rayleigh distribution function */                    
-        fvec_t * gwv;    /** rayleigh weight vector - rayleigh distribution function */                    
-        fvec_t * dfwv;   /** detection function weighting - exponential curve */
-        fvec_t * dfrev;  /** reversed onset detection function */
-        fvec_t * acf;    /** vector for autocorrelation function (of current detection function frame) */
-        fvec_t * acfout; /** store result of passing acf through s.i.c.f.b. */
-        fvec_t * phwv;   /** beat expectation alignment weighting */
-        fvec_t * phout;
-        uint_t timesig;  /** time signature of input, set to zero until context dependent model activated */
-        uint_t step;
-        fvec_t * locacf; /** vector to store harmonics of filterbank of acf */
-        fvec_t * inds;   /** vector for max index outputs for each harmonic */
-        uint_t rayparam; /** Rayleigh parameter */
-        uint_t lastbeat;
-        sint_t counter;
-        uint_t flagstep;
-        smpl_t g_var;
-        uint_t gp;
-        uint_t bp;
-        uint_t rp;
-        uint_t rp1;
-        uint_t rp2;
-};
-
-aubio_beattracking_t * new_aubio_beattracking(uint_t winlen,
-                uint_t channels) {
-
-        aubio_beattracking_t * p = AUBIO_NEW(aubio_beattracking_t);
-        uint_t i        = 0;
-	/* parameter for rayleigh weight vector - sets preferred tempo to
-	 * 120bpm [43] */
-	smpl_t rayparam = 48./512. * winlen;
-        smpl_t dfwvnorm = EXP((LOG(2.0)/rayparam)*(winlen+2));
- 	/** length over which beat period is found [128] */
-        uint_t laglen   = winlen/4;
-	/** step increment - both in detection function samples -i.e. 11.6ms or
-	 * 1 onset frame [128] */
-	uint_t step     = winlen/4; /* 1.5 seconds */
-
-        uint_t maxnumelem = 4; /* max number of index output */
-        p->lastbeat = 0;
-        p->counter = 0;
-        p->flagstep = 0;
-        p->g_var = 3.901; // constthresh empirically derived!
-        p->rp = 1;
-        p->gp = 0;
-
-        p->rayparam = rayparam;
-        p->step    = step;
-        p->rwv     = new_fvec(laglen,channels);
-        p->gwv     = new_fvec(laglen,channels);
-        p->dfwv    = new_fvec(winlen,channels);
-        p->dfrev   = new_fvec(winlen,channels);
-        p->acf     = new_fvec(winlen,channels);
-        p->acfout  = new_fvec(laglen,channels);
-        p->phwv    = new_fvec(2*laglen,channels);
-        p->phout   = new_fvec(winlen,channels);
-
-        p->timesig = 0;
-
-        p->inds    = new_fvec(maxnumelem,channels);
-        p->locacf  = new_fvec(winlen,channels); 
-
-        /* exponential weighting, dfwv = 0.5 when i =  43 */
-        for (i=0;i<winlen;i++) {
-                p->dfwv->data[0][i] = (EXP((LOG(2.0)/rayparam)*(i+1)))
-                        / dfwvnorm;
-        } 
-
-        for (i=0;i<(laglen);i++){
-                p->rwv->data[0][i] = ((smpl_t)(i+1.) / SQR((smpl_t)rayparam)) * 
-                        EXP((-SQR((smpl_t)(i+1.)) / (2.*SQR((smpl_t)rayparam))));
-        }
-
-        return p;
-
-}
-
-void del_aubio_beattracking(aubio_beattracking_t * p) {
-        del_fvec(p->rwv);
-        del_fvec(p->gwv);
-        del_fvec(p->dfwv);
-        del_fvec(p->dfrev);
-        del_fvec(p->acf);
-        del_fvec(p->acfout);
-        del_fvec(p->phwv);
-        del_fvec(p->phout);
-        del_fvec(p->locacf);
-        del_fvec(p->inds);
-        AUBIO_FREE(p);
-}
-
-
-void aubio_beattracking_do(aubio_beattracking_t * bt, fvec_t * dfframe, fvec_t * output) {
-
-        uint_t i,k;
-        /* current beat period value found using gaussian weighting (from context dependent model) */
-        uint_t step     = bt->step;
-        uint_t laglen   = bt->rwv->length;
-        uint_t winlen   = bt->dfwv->length;
-        smpl_t * phout  = bt->phout->data[0];
-        smpl_t * phwv   = bt->phwv->data[0];
-        smpl_t * dfrev  = bt->dfrev->data[0];
-        smpl_t * dfwv   = bt->dfwv->data[0];
-        smpl_t * rwv    = bt->rwv->data[0];
-        smpl_t * acfout = bt->acfout->data[0];
-        smpl_t * acf    = bt->acf->data[0];
-        uint_t maxindex = 0;
-        //number of harmonics in shift invariant comb filterbank
-        uint_t numelem  = 4;
-
-        //smpl_t myperiod   = 0.;
-        //smpl_t * out    = output->data[0];
-
-        //parameters for making s.i.c.f.b.
-        uint_t a,b; 
-        //beat alignment
-        uint_t phase; 
-        uint_t kmax;
-        sint_t beat; 
-        uint_t bp;
-
-        for (i = 0; i < winlen; i++){
-                dfrev[winlen-1-i] = 0.;
-                dfrev[winlen-1-i] = dfframe->data[0][i]*dfwv[i];
-        }
-
-        /* find autocorrelation function */
-        aubio_autocorr(dfframe,bt->acf); 
-        /*
-        for (i = 0; i < winlen; i++){
-                AUBIO_DBG("%f,",acf[i]);
-        }
-        AUBIO_DBG("\n");
-        */
-
-        /* get acfout - assume Rayleigh weightvector only */
-        /* if timesig is unknown, use metrically unbiased version of filterbank */
-        if(!bt->timesig)  
-                numelem = 4;
-        //        AUBIO_DBG("using unbiased filterbank, timesig: %d\n", timesig);
-        else
-                numelem = bt->timesig;
-        //        AUBIO_DBG("using biased filterbank, timesig: %d\n", timesig);
-
-        /* first and last output values are left intentionally as zero */
-        for (i=0; i < bt->acfout->length; i++)
-                acfout[i] = 0.;
-
-        for(i=1;i<laglen-1;i++){ 
-                for (a=1; a<=numelem; a++){
-                        for(b=(1-a); b<a; b++){
-                                acfout[i] += acf[a*(i+1)+b-1] 
-                                        * 1./(2.*a-1.)*rwv[i];
-                        }
-                }
-        }
-
-        /* find non-zero Rayleigh period */
-        maxindex = vec_max_elem(bt->acfout);
-        bt->rp = maxindex ? maxindex : 1;
-        //rp = (maxindex==127) ? 43 : maxindex; //rayparam
-        bt->rp = (maxindex==bt->acfout->length-1) ? bt->rayparam : maxindex; //rayparam
-
-        // get float period
-        //myperiod = fvec_getperiod(bt);
-        //AUBIO_DBG("\nrp =  %d myperiod = %f\n",bt->rp,myperiod);
-        //AUBIO_DBG("accurate tempo is %f bpm\n",5168./myperiod);
-
-        /* activate biased filterbank */
-        aubio_beattracking_checkstate(bt);
-        bp = bt->bp;
-        /* end of biased filterbank */
-
-        /* initialize output */
-        for(i=0;i<bt->phout->length;i++)     {phout[i] = 0.;} 
-
-        /* deliberate integer operation, could be set to 3 max eventually */
-        kmax = winlen/bp;
-
-        for(i=0;i<bp;i++){
-                phout[i] = 0.;
-                for(k=0;k<kmax;k++){
-                        phout[i] += dfrev[i+bp*k] * phwv[i];
-                }
-        }
-
-        /* find Rayleigh period */
-        maxindex = vec_max_elem(bt->phout);
-        if (maxindex == winlen-1) maxindex = 0;
-        phase =  1 + maxindex;
-
-        /* debug */
-        //AUBIO_DBG("beat period = %d, rp1 = %d, rp2 = %d\n", bp, rp1, rp2);
-        //AUBIO_DBG("rp = %d, gp = %d, phase = %d\n", bt->rp, bt->gp, phase);
-
-        /* reset output */
-        for (i = 0; i < laglen; i++)
-                output->data[0][i] = 0.;
-
-        i = 1;
-        beat =  bp - phase;
-        /* start counting the beats */
-        if(beat >= 0)
-        {
-                output->data[0][i] = (smpl_t)beat;
-                i++;
-        }
-
-        while( beat+bp < step )
-        {
-                beat += bp;
-                output->data[0][i] = (smpl_t)beat;
-                i++;
-        }
-
-        bt->lastbeat = beat;
-        /* store the number of beat found in this frame as the first element */
-        output->data[0][0] = i;
-}
-
-uint_t fvec_gettimesig(smpl_t * acf, uint_t acflen, uint_t gp){
-        sint_t k = 0;
-        smpl_t three_energy = 0., four_energy = 0.;
-        if( acflen > 6 * gp + 2 ){
-                for(k=-2;k<2;k++){
-                        three_energy += acf[3*gp+k];
-                        four_energy += acf[4*gp+k];
-                }
-        }
-        else{ /*Expanded to be more accurate in time sig estimation*/
-                for(k=-2;k<2;k++){
-                        three_energy += acf[3*gp+k]+acf[6*gp+k];
-                        four_energy += acf[4*gp+k]+acf[2*gp+k];
-                }
-        }
-        return (three_energy > four_energy) ? 3 : 4;
-}
-
-smpl_t fvec_getperiod(aubio_beattracking_t * bt){
-      	/*function to make a more accurate beat period measurement.*/
-
-	smpl_t period = 0.;
-	smpl_t maxval = 0.;
-	uint_t numelem    = 4;
-	
-	sint_t a,b;
-	uint_t i,j;	
-	uint_t acfmi = bt->rp; //acfout max index
-	uint_t maxind = 0;
-
-	if(!bt->timesig)
-		numelem = 4;
-	else
-		numelem = bt->timesig;
-
-	for (i=0;i<numelem;i++) // initialize
-	bt->inds->data[0][i] = 0.;
-
-	for (i=0;i<bt->locacf->length;i++) // initialize
-                bt->locacf->data[0][i] = 0.;
-	
-	// get appropriate acf elements from acf and store in locacf
-        for (a=1;a<=4;a++){
-                for(b=(1-a);b<a;b++){		
-                        bt->locacf->data[0][a*(acfmi)+b-1] = 
-                                bt->acf->data[0][a*(acfmi)+b-1];		               	           	      
-                }
-        }
-
-	for(i=0;i<numelem;i++){
-
-		maxind = 0;
-		maxval = 0.0;
-	
-		for (j=0;j<(acfmi*(i+1)+(i)); j++){
-                        if(bt->locacf->data[0][j]>maxval){
-                                maxval = bt->locacf->data[0][j];
-                                maxind = j;
-                        }
-                        //bt->locacf->data[0][maxind] = 0.;
-                        bt->locacf->data[0][j] = 0.;
-		}
-		//AUBIO_DBG("\n maxind is  %d\n",maxind);
-		bt->inds->data[0][i] = maxind;
-
-	}
-
-	for (i=0;i<numelem;i++){
-		period += bt->inds->data[0][i]/(i+1.);}
-
-	period = period/numelem;
-
-	return (period);
-}
-
-
-void aubio_beattracking_checkstate(aubio_beattracking_t * bt) {
-        uint_t i,j,a,b;
-        uint_t flagconst  = 0;
-        sint_t counter  = bt->counter;
-        uint_t flagstep = bt->flagstep;
-        uint_t gp       = bt->gp;
-        uint_t bp       = bt->bp;
-        uint_t rp       = bt->rp;
-        uint_t rp1      = bt->rp1;
-        uint_t rp2      = bt->rp2;
-        uint_t laglen   = bt->rwv->length;
-        uint_t acflen   = bt->acf->length;
-        uint_t step     = bt->step;
-        smpl_t * acf    = bt->acf->data[0];
-        smpl_t * acfout = bt->acfout->data[0];
-        smpl_t * gwv    = bt->gwv->data[0];
-        smpl_t * phwv   = bt->phwv->data[0];
-
-        if (gp) {
-                // doshiftfbank again only if context dependent model is in operation
-                //acfout = doshiftfbank(acf,gwv,timesig,laglen,acfout); 
-                //don't need acfout now, so can reuse vector
-                // gwv is, in first loop, definitely all zeros, but will have
-                // proper values when context dependent model is activated
-                for (i=0; i < bt->acfout->length; i++)
-                       acfout[i] = 0.;
-                for(i=1;i<laglen-1;i++){ 
-                        for (a=1;a<=bt->timesig;a++){
-                                for(b=(1-a);b<a;b++){
-                                        acfout[i] += acf[a*(i+1)+b-1] 
-                                                * 1. * gwv[i];
-                                }
-                        }
-                }
-                gp = vec_max_elem(bt->acfout);
-                /*
-	        while(gp<32) gp =gp*2;
-	        while(gp>64) gp = gp/2;
-                */
-        } else {
-                //still only using general model
-                gp = 0;  
-        }
-
-        //now look for step change - i.e. a difference between gp and rp that 
-        // is greater than 2*constthresh - always true in first case, since gp = 0
-        if(counter == 0){
-                if(ABS(gp - rp) > 2.*bt->g_var) {
-                        flagstep = 1; // have observed  step change.
-                        counter  = 3; // setup 3 frame counter
-                } else {
-                        flagstep = 0;
-                }
-        }
-
-        //i.e. 3rd frame after flagstep initially set
-        if (counter==1 && flagstep==1) {
-                //check for consistency between previous beatperiod values
-                if(ABS(2.*rp - rp1 -rp2) < bt->g_var) {
-                        //if true, can activate context dependent model
-                        flagconst = 1;
-                        counter   = 0; // reset counter and flagstep
-                } else {
-                        //if not consistent, then don't flag consistency!
-                        flagconst = 0;
-                        counter   = 2; // let it look next time
-                }
-        } else if (counter > 0) {
-                //if counter doesn't = 1, 
-                counter = counter-1;
-        }
-
-        rp2 = rp1; rp1 = rp; 
-
-        if (flagconst) {
-                /* first run of new hypothesis */
-                gp = rp;
-                bt->timesig = fvec_gettimesig(acf,acflen, gp);
-                for(j=0;j<laglen;j++)
-                        gwv[j] = EXP(-.5*SQR((smpl_t)(j+1.-gp))/SQR(bt->g_var));
-                flagconst = 0;
-                bp = gp;
-                /* flat phase weighting */
-                for(j=0;j<2*laglen;j++)  {phwv[j] = 1.;} 
-        } else if (bt->timesig) {
-                /* context dependant model */
-                bp = gp;
-                /* gaussian phase weighting */
-                if (step > bt->lastbeat) {
-                        for(j=0;j<2*laglen;j++)  {
-                                phwv[j] = EXP(-.5*SQR((smpl_t)(1.+j-step+bt->lastbeat))/(bp/8.));
-                        }
-                } else { 
-                        //AUBIO_DBG("NOT using phase weighting as step is %d and lastbeat %d \n",
-                        //                step,bt->lastbeat);
-                        for(j=0;j<2*laglen;j++)  {phwv[j] = 1.;} 
-                }
-        } else {
-                /* initial state */ 
-                bp = rp;
-                /* flat phase weighting */
-                for(j=0;j<2*laglen;j++)  {phwv[j] = 1.;} 
-        }
-
-        /* do some further checks on the final bp value */
-
-        /* if tempo is > 206 bpm, half it */
-        while (bp < 25) {
-                //AUBIO_DBG("warning, doubling the beat period from %d\n", bp);
-                //AUBIO_DBG("warning, halving the tempo from %f\n", 60.*samplerate/hopsize/bp);
-                bp = bp*2;
-        }
-        
-        //AUBIO_DBG("tempo:\t%3.5f bpm | ", 5168./bp);
-
-        /* smoothing */
-        //bp = (uint_t) (0.8 * (smpl_t)bp + 0.2 * (smpl_t)bp2);
-        //AUBIO_DBG("tempo:\t%3.5f bpm smoothed | bp2 %d | bp %d | ", 5168./bp, bp2, bp);
-        //bp2 = bp;
-        //AUBIO_DBG("time signature: %d \n", bt->timesig);
-        bt->counter = counter;
-        bt->flagstep = flagstep;
-        bt->gp = gp;
-        bt->bp = bp;
-        bt->rp1 = rp1;
-        bt->rp2 = rp2;
-
-}
-
-smpl_t aubio_beattracking_get_bpm(aubio_beattracking_t * bt) {
-        if (bt->timesig != 0 && bt->counter == 0 && bt->flagstep == 0) {
-          return 5168. / (smpl_t)bt->gp;
-        } else {
-          return 0.;
-        }
-}
-
-smpl_t aubio_beattracking_get_confidence(aubio_beattracking_t * bt) {
-        if (bt->gp) return vec_max(bt->acfout);
-        else return 0.;
-}
--- a/src/beattracking.h
+++ /dev/null
@@ -1,91 +1,0 @@
-/*
-  Copyright (C) 2003 Matthew Davies and Paul Brossier
-
-  This program is free software; you can redistribute it and/or modify
-  it under the terms of the GNU General Public License as published by
-  the Free Software Foundation; either version 2 of the License, or
-  (at your option) any later version.
-
-  This program is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-  GNU General Public License for more details.
-
-  You should have received a copy of the GNU General Public License
-  along with this program; if not, write to the Free Software
-  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-         
-*/
-
-/** \file
-
-  Beat tracking using a context dependant model
-
-  This file implement the causal beat tracking algorithm designed by Matthew
-  Davies and described in the following articles:
-
-  Matthew E. P. Davies and Mark D. Plumbley. Causal tempo tracking of audio.
-  In Proceedings of the International Symposium on Music Information Retrieval
-  (ISMIR), pages 164­169, Barcelona, Spain, 2004.
-
-  Matthew E. P. Davies, Paul Brossier, and Mark D. Plumbley. Beat tracking
-  towards automatic musical accompaniment. In Proceedings of the Audio
-  Engeeniring Society 118th Convention, Barcelona, Spain, May 2005.
-  
-*/
-#ifndef BEATTRACKING_H
-#define BEATTRACKING_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** beat tracking object */
-typedef struct _aubio_beattracking_t aubio_beattracking_t;
-
-/** create beat tracking object
-
-  \param winlen: frame size [512] 
-  \param channels number (not functionnal) [1]
-
-*/
-aubio_beattracking_t * new_aubio_beattracking(uint_t winlen, uint_t channels);
-/** track the beat 
-
-  \param bt beat tracking object
-  \param dfframes current input detection function frame, smoothed by
-  adaptive median threshold. 
-  \param out stored detected beat locations 
-
-*/
-void aubio_beattracking_do(aubio_beattracking_t * bt, fvec_t * dfframes, fvec_t * out);
-/** get current tempo in bpm
-
-  \param bt beat tracking object
-
-  Returns the currently observed tempo, in beats per minutes, or 0 if no
-  consistent value is found.
-
-*/
-smpl_t aubio_beattracking_get_bpm(aubio_beattracking_t * bt);
-/** get current tempo confidence 
-
-  \param bt beat tracking object
-
-  Returns the confidence with which the tempo has been observed, 0 if no
-  consistent value is found.
-
-*/
-smpl_t aubio_beattracking_get_confidence(aubio_beattracking_t * bt);
-/** delete beat tracking object
-
-  \param p beat tracking object
-
-*/
-void del_aubio_beattracking(aubio_beattracking_t * p);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* BEATTRACKING_H */
--- a/src/biquad.c
+++ /dev/null
@@ -1,114 +1,0 @@
-/*
-   Copyright (C) 2003 Paul Brossier
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-*/
-
-#include "aubio_priv.h"
-#include "sample.h"
-#include "mathutils.h"
-#include "biquad.h"
-
-/** \note this file needs to be in double or more less precision would lead to large
- * errors in the output 
- */
-
-struct _aubio_biquad_t {
-  lsmp_t a2;
-  lsmp_t a3;
-  lsmp_t b1;
-  lsmp_t b2;
-  lsmp_t b3;
-  lsmp_t o1;
-  lsmp_t o2;
-  lsmp_t i1;
-  lsmp_t i2;
-};
-
-void aubio_biquad_do(aubio_biquad_t * b, fvec_t * in) {
-  uint_t i,j;
-  lsmp_t i1 = b->i1;
-  lsmp_t i2 = b->i2;
-  lsmp_t o1 = b->o1;
-  lsmp_t o2 = b->o2;
-  lsmp_t a2 = b->a2;
-  lsmp_t a3 = b->a3;
-  lsmp_t b1 = b->b1;
-  lsmp_t b2 = b->b2;
-  lsmp_t b3 = b->b3;
-
-  i=0; // works in mono only !!!
-  //for (i=0;i<in->channels;i++) {
-  for (j = 0; j < in->length; j++) {
-    lsmp_t i0 = in->data[i][j];
-    lsmp_t o0 = b1 * i0 + b2 * i1 + b3 * i2
-      - a2 * o1 - a3 * o2;// + 1e-37;
-    in->data[i][j] = o0;
-    i2 = i1;
-    i1 = i0;
-    o2 = o1;
-    o1 = o0;
-  }
-  b->i2 = i2;
-  b->i1 = i1;
-  b->o2 = o2;
-  b->o1 = o1;
-  //}
-}
-
-void aubio_biquad_do_filtfilt(aubio_biquad_t * b, fvec_t * in, fvec_t * tmp) {
-  uint_t j,i=0;
-  uint_t length = in->length;
-  lsmp_t mir;
-  /* mirroring */
-  mir = 2*in->data[i][0];
-  b->i1 = mir - in->data[i][2];
-  b->i2 = mir - in->data[i][1];
-  /* apply filtering */
-  aubio_biquad_do(b,in);
-  /* invert  */
-  for (j = 0; j < length; j++)
-    tmp->data[i][length-j-1] = in->data[i][j];
-  /* mirror again */
-  mir = 2*tmp->data[i][0];
-  b->i1 = mir - tmp->data[i][2];
-  b->i2 = mir - tmp->data[i][1];
-  /* apply filtering */
-  aubio_biquad_do(b,tmp);
-  /* invert back */
-  for (j = 0; j < length; j++)
-    in->data[i][j] = tmp->data[i][length-j-1];
-}
-
-aubio_biquad_t * new_aubio_biquad(
-    lsmp_t b1, lsmp_t b2, lsmp_t b3, 
-    lsmp_t a2, lsmp_t a3) {
-  aubio_biquad_t * b = AUBIO_NEW(aubio_biquad_t);
-  b->a2 = a2;
-  b->a3 = a3;
-  b->b1 = b1;
-  b->b2 = b2;
-  b->b3 = b3;
-  b->i1 = 0.;
-  b->i2 = 0.;
-  b->o1 = 0.;
-  b->o2 = 0.;
-  return b;
-}
-
-void del_aubio_biquad(aubio_biquad_t * b) {
-  AUBIO_FREE(b);
-}
--- a/src/biquad.h
+++ /dev/null
@@ -1,80 +1,0 @@
-/*
-	 Copyright (C) 2003 Paul Brossier
-
-	 This program is free software; you can redistribute it and/or modify
-	 it under the terms of the GNU General Public License as published by
-	 the Free Software Foundation; either version 2 of the License, or
-	 (at your option) any later version.
-
-	 This program is distributed in the hope that it will be useful,
-	 but WITHOUT ANY WARRANTY; without even the implied warranty of
-	 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-	 GNU General Public License for more details.
-
-	 You should have received a copy of the GNU General Public License
-	 along with this program; if not, write to the Free Software
-	 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-*/
-
-#ifndef BIQUAD_H
-#define BIQUAD_H
-
-/** \file 
-
-  Second order Infinite Impulse Response filter
-
-  This file implements a normalised biquad filter (second order IIR):
- 
-  \f$ y[n] = b_1 x[n] + b_2 x[n-1] + b_3 x[n-2] - a_2 y[n-1] - a_3 y[n-2] \f$
-
-  The filtfilt version runs the filter twice, forward and backward, to
-  compensate the phase shifting of the forward operation.
-
-*/
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** biquad filter object */
-typedef struct _aubio_biquad_t aubio_biquad_t;
-
-/** filter input vector
-
-  \param b biquad object as returned by new_aubio_biquad
-  \param in input vector to filter
-
-*/
-void aubio_biquad_do(aubio_biquad_t * b, fvec_t * in);
-/** filter input vector forward and backward
-
-  \param b biquad object as returned by new_aubio_biquad
-  \param in input vector to filter
-  \param tmp memory space to use for computation
-
-*/
-void aubio_biquad_do_filtfilt(aubio_biquad_t * b, fvec_t * in, fvec_t * tmp);
-/** create new biquad filter
-
-  \param b1 forward filter coefficient
-  \param b2 forward filter coefficient
-  \param b3 forward filter coefficient
-  \param a2 feedback filter coefficient
-  \param a3 feedback filter coefficient
-
-*/
-aubio_biquad_t * new_aubio_biquad(lsmp_t b1, lsmp_t b2, lsmp_t b3, lsmp_t a2, lsmp_t a3);
-
-/** delete biquad filter 
- 
-  \param b biquad object to delete 
-
-*/
-void del_aubio_biquad(aubio_biquad_t * b);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /*BIQUAD_H*/
--- a/src/fft.c
+++ /dev/null
@@ -1,194 +1,0 @@
-/*
-   Copyright (C) 2003 Paul Brossier
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-*/
-
-#include "aubio_priv.h"
-#include "fvec.h"
-#include "cvec.h"
-#include "mathutils.h"
-#include "fft.h"
-
-#if FFTW3F_SUPPORT
-#define fftw_malloc            fftwf_malloc
-#define fftw_free              fftwf_free
-#define fftw_execute           fftwf_execute
-#define fftw_plan_dft_r2c_1d   fftwf_plan_dft_r2c_1d
-#define fftw_plan_dft_c2r_1d   fftwf_plan_dft_c2r_1d
-#define fftw_plan_r2r_1d       fftwf_plan_r2r_1d
-#define fftw_plan              fftwf_plan
-#define fftw_destroy_plan      fftwf_destroy_plan
-#endif
-
-#if FFTW3F_SUPPORT
-#define real_t smpl_t
-#else
-#define real_t lsmp_t
-#endif
-
-struct _aubio_fft_t {
-  uint_t winsize;
-  uint_t channels;
-  uint_t fft_size;
-  real_t *in, *out;
-  fftw_plan pfw, pbw;
-  fft_data_t * specdata;     /* complex spectral data */
-  fvec_t * compspec;
-};
-
-aubio_fft_t * new_aubio_fft(uint_t winsize, uint_t channels) {
-  aubio_fft_t * s = AUBIO_NEW(aubio_fft_t);
-  s->winsize  = winsize;
-  s->channels = channels;
-  /* allocate memory */
-  s->in       = AUBIO_ARRAY(real_t,winsize);
-  s->out      = AUBIO_ARRAY(real_t,winsize);
-  s->compspec = new_fvec(winsize,channels);
-  /* create plans */
-#ifdef HAVE_COMPLEX_H
-  s->fft_size = winsize/2 + 1;
-  s->specdata = (fft_data_t*)fftw_malloc(sizeof(fft_data_t)*s->fft_size);
-  s->pfw = fftw_plan_dft_r2c_1d(winsize, s->in,  s->specdata, FFTW_ESTIMATE);
-  s->pbw = fftw_plan_dft_c2r_1d(winsize, s->specdata, s->out, FFTW_ESTIMATE);
-#else
-  s->fft_size = winsize;
-  s->specdata = (fft_data_t*)fftw_malloc(sizeof(fft_data_t)*s->fft_size);
-  s->pfw = fftw_plan_r2r_1d(winsize, s->in,  s->specdata, FFTW_R2HC, FFTW_ESTIMATE);
-  s->pbw = fftw_plan_r2r_1d(winsize, s->specdata, s->out, FFTW_HC2R, FFTW_ESTIMATE);
-#endif
-  return s;
-}
-
-void del_aubio_fft(aubio_fft_t * s) {
-  /* destroy data */
-  del_fvec(s->compspec);
-  fftw_destroy_plan(s->pfw);
-  fftw_destroy_plan(s->pbw);
-  fftw_free(s->specdata);
-  AUBIO_FREE(s->out);
-  AUBIO_FREE(s->in );
-  AUBIO_FREE(s);
-}
-
-void aubio_fft_do(aubio_fft_t * s, fvec_t * input, cvec_t * spectrum) {
-  aubio_fft_do_complex(s, input, s->compspec);
-  aubio_fft_get_spectrum(s->compspec, spectrum);
-}
-
-void aubio_fft_rdo(aubio_fft_t * s, cvec_t * spectrum, fvec_t * output) {
-  aubio_fft_get_realimag(spectrum, s->compspec);
-  aubio_fft_rdo_complex(s, s->compspec, output);
-}
-
-void aubio_fft_do_complex(aubio_fft_t * s, fvec_t * input, fvec_t * compspec) {
-  uint_t i, j;
-  for (i = 0; i < s->channels; i++) {
-    for (j=0; j < s->winsize; j++) {
-      s->in[j] = input->data[i][j];
-    }
-    fftw_execute(s->pfw);
-#ifdef HAVE_COMPLEX_H
-    compspec->data[i][0] = REAL(s->specdata[0]);
-    for (j = 1; j < s->fft_size -1 ; j++) {
-      compspec->data[i][j] = REAL(s->specdata[j]);
-      compspec->data[i][compspec->length - j] = IMAG(s->specdata[j]);
-    }
-    compspec->data[i][s->fft_size-1] = REAL(s->specdata[s->fft_size-1]);
-#else
-    for (j = 0; j < s->fft_size; j++) {
-      compspec->data[i][j] = s->specdata[j];
-    }
-#endif
-  }
-}
-
-void aubio_fft_rdo_complex(aubio_fft_t * s, fvec_t * compspec, fvec_t * output) {
-  uint_t i, j;
-  const smpl_t renorm = 1./(smpl_t)s->winsize;
-  for (i = 0; i < compspec->channels; i++) {
-#ifdef HAVE_COMPLEX_H
-    s->specdata[0] = compspec->data[i][0];
-    for (j=1; j < s->fft_size - 1; j++) {
-      s->specdata[j] = compspec->data[i][j] + 
-        I * compspec->data[i][compspec->length - j];
-    }
-    s->specdata[s->fft_size - 1] = compspec->data[i][s->fft_size - 1];
-#else
-    for (j=0; j < s->fft_size; j++) {
-      s->specdata[j] = compspec->data[i][j];
-    }
-#endif
-    fftw_execute(s->pbw);
-    for (j = 0; j < output->length; j++) {
-      output->data[i][j] = s->out[j]*renorm;
-    }
-  }
-}
-
-void aubio_fft_get_spectrum(fvec_t * compspec, cvec_t * spectrum) {
-  aubio_fft_get_phas(compspec, spectrum);
-  aubio_fft_get_norm(compspec, spectrum);
-}
-
-void aubio_fft_get_realimag(cvec_t * spectrum, fvec_t * compspec) {
-  aubio_fft_get_imag(spectrum, compspec);
-  aubio_fft_get_real(spectrum, compspec);
-}
-
-void aubio_fft_get_phas(fvec_t * compspec, cvec_t * spectrum) {
-  uint_t i, j;
-  for (i = 0; i < spectrum->channels; i++) {
-    spectrum->phas[i][0] = 0.;
-    for (j=1; j < spectrum->length - 1; j++) {
-      spectrum->phas[i][j] = atan2f(compspec->data[i][compspec->length-j],
-          compspec->data[i][j]);
-    }
-    spectrum->phas[i][spectrum->length-1] = 0.;
-  }
-}
-
-void aubio_fft_get_norm(fvec_t * compspec, cvec_t * spectrum) {
-  uint_t i, j = 0;
-  for (i = 0; i < spectrum->channels; i++) {
-    spectrum->norm[i][0] = compspec->data[i][0];
-    for (j=1; j < spectrum->length - 1; j++) {
-      spectrum->norm[i][j] = SQRT(SQR(compspec->data[i][j]) 
-          + SQR(compspec->data[i][compspec->length - j]) );
-    }
-    spectrum->norm[i][spectrum->length-1] = compspec->data[i][compspec->length/2];
-  }
-}
-
-void aubio_fft_get_imag(cvec_t * spectrum, fvec_t * compspec) {
-  uint_t i, j;
-  for (i = 0; i < compspec->channels; i++) {
-    for (j = 1; j < compspec->length / 2 + 1; j++) {
-      compspec->data[i][compspec->length - j] =
-        spectrum->norm[i][j]*SIN(spectrum->phas[i][j]);
-    }
-  }
-}
-
-void aubio_fft_get_real(cvec_t * spectrum, fvec_t * compspec) {
-  uint_t i, j;
-  for (i = 0; i < compspec->channels; i++) {
-    for (j = 0; j< compspec->length / 2 + 1; j++) {
-      compspec->data[i][j] = 
-        spectrum->norm[i][j]*COS(spectrum->phas[i][j]);
-    }
-  }
-}
--- a/src/fft.h
+++ /dev/null
@@ -1,163 +1,0 @@
-/*
-   Copyright (C) 2003 Paul Brossier
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-   
-*/
-
-/** \file 
-
-  Fast Fourier Transform object
-
-*/
-
-#ifndef FFT_H_
-#define FFT_H_
-
-/* note that <complex.h> is not included here but only in aubio_priv.h, so that
- * c++ projects can still use their own complex definition. */
-#include <fftw3.h>
-
-#ifdef HAVE_COMPLEX_H
-#if FFTW3F_SUPPORT
-#define FFTW_TYPE fftwf_complex
-#else
-#define FFTW_TYPE fftw_complex
-#endif
-#else
-#if FFTW3F_SUPPORT
-/** fft data type */
-#define FFTW_TYPE float
-#else
-/** fft data type */
-#define FFTW_TYPE double
-#endif
-#endif
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** fft data type */
-typedef FFTW_TYPE fft_data_t;
-
-/** FFT object
- 
-  This object computes forward and backward FFTs, using the complex type to
-  store the results. The phase vocoder or aubio_mfft_t objects should be
-  preferred to using directly aubio_fft_t. The FFT are computed using FFTW3
-  (although support for another library could be added).
-
-*/
-typedef struct _aubio_fft_t aubio_fft_t;
-
-/** create new FFT computation object
-
-  \param size length of the FFT
-  \param channels number of channels
-
-*/
-aubio_fft_t * new_aubio_fft(uint_t size, uint_t channels);
-/** delete FFT object 
-
-  \param s fft object as returned by new_aubio_fft
-
-*/
-void del_aubio_fft(aubio_fft_t * s);
-
-/** compute forward FFT
-
-  \param s fft object as returned by new_aubio_fft
-  \param input input signal 
-  \param spectrum output spectrum 
-
-*/
-void aubio_fft_do (aubio_fft_t *s, fvec_t * input, cvec_t * spectrum);
-/** compute backward (inverse) FFT
-
-  \param s fft object as returned by new_aubio_fft
-  \param spectrum input spectrum 
-  \param output output signal 
-
-*/
-void aubio_fft_rdo (aubio_fft_t *s, cvec_t * spectrum, fvec_t * output);
-
-/** compute forward FFT
-
-  \param s fft object as returned by new_aubio_fft
-  \param input real input signal 
-  \param compspec complex output fft real/imag
-
-*/
-void aubio_fft_do_complex (aubio_fft_t *s, fvec_t * input, fvec_t * compspec);
-/** compute backward (inverse) FFT from real/imag
-
-  \param s fft object as returned by new_aubio_fft
-  \param compspec real/imag input fft array 
-  \param output real output array 
-
-*/
-void aubio_fft_rdo_complex (aubio_fft_t *s, fvec_t * compspec, fvec_t * output);
-
-/** convert real/imag spectrum to norm/phas spectrum 
-
-  \param compspec real/imag input fft array 
-  \param spectrum cvec norm/phas output array 
-
-*/
-void aubio_fft_get_spectrum(fvec_t * compspec, cvec_t * spectrum);
-/** convert real/imag spectrum to norm/phas spectrum 
-
-  \param compspec real/imag input fft array 
-  \param spectrum cvec norm/phas output array 
-
-*/
-void aubio_fft_get_realimag(cvec_t * spectrum, fvec_t * compspec);
-
-/** compute phas spectrum from real/imag parts 
-
-  \param compspec real/imag input fft array 
-  \param spectrum cvec norm/phas output array 
-
-*/
-void aubio_fft_get_phas(fvec_t * compspec, cvec_t * spectrum);
-/** compute imaginary part from the norm/phas cvec 
-
-  \param spectrum norm/phas input array 
-  \param compspec real/imag output fft array 
-
-*/
-void aubio_fft_get_imag(cvec_t * spectrum, fvec_t * compspec);
-
-/** compute norm component from real/imag parts 
-
-  \param compspec real/imag input fft array 
-  \param spectrum cvec norm/phas output array 
-
-*/
-void aubio_fft_get_norm(fvec_t * compspec, cvec_t * spectrum);
-/** compute real part from norm/phas components 
-
-  \param spectrum norm/phas input array 
-  \param compspec real/imag output fft array 
-
-*/
-void aubio_fft_get_real(cvec_t * spectrum, fvec_t * compspec);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // FFT_H_
--- a/src/filter.c
+++ /dev/null
@@ -1,225 +1,0 @@
-/*
-   Copyright (C) 2003 Paul Brossier
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-*/
-
-
-/* Requires lsmp_t to be long or double. float will NOT give reliable 
- * results */
-
-#include "aubio_priv.h"
-#include "sample.h"
-#include "mathutils.h"
-#include "filter.h"
-
-struct _aubio_filter_t {
-  uint_t order;
-  lsmp_t * a;
-  lsmp_t * b;
-  lsmp_t * y;
-  lsmp_t * x;
-};
-
-/* bug: mono only */
-void aubio_filter_do(aubio_filter_t * f, fvec_t * in) {
-  uint_t i,j,l, order = f->order;
-  lsmp_t *x = f->x;
-  lsmp_t *y = f->y;
-  lsmp_t *a = f->a;
-  lsmp_t *b = f->b;
-  i=0;//for (i=0;i<in->channels;i++) {
-  for (j = 0; j < in->length; j++) {
-    /* new input */
-    //AUBIO_DBG("befor %f\t", in->data[i][j]);
-    x[0] = in->data[i][j];
-    y[0] = b[0] * x[0];
-    for (l=1;l<order; l++) {
-      y[0] += b[l] * x[l];
-      y[0] -= a[l] * y[l];
-    } /* + 1e-37; for denormal ? */
-    /* new output */
-    in->data[i][j] = y[0];
-    //AUBIO_DBG("after %f\n", in->data[i][j]);
-    /* store states for next sample */
-    for (l=order-1; l>0; l--){
-      x[l] = x[l-1];
-      y[l] = y[l-1];
-    }
-  }
-  /* store states for next buffer */
-  f->x = x;
-  f->y = y;
-  //}	
-}
-
-void aubio_filter_do_outplace(aubio_filter_t * f, fvec_t * in, fvec_t * out) {
-  uint_t i,j,l, order = f->order;
-  lsmp_t *x = f->x;
-  lsmp_t *y = f->y;
-  lsmp_t *a = f->a;
-  lsmp_t *b = f->b;
-
-  i=0; // works in mono only !!!
-  //for (i=0;i<in->channels;i++) {
-  for (j = 0; j < in->length; j++) {
-    /* new input */
-    x[0] = in->data[i][j];
-    y[0] = b[0] * x[0];
-    for (l=1;l<order; l++) {
-      y[0] += b[l] * x[l];
-      y[0] -= a[l] * y[l];
-    }
-    // + 1e-37;
-    /* new output */
-    out->data[i][j] = y[0];
-    /* store for next sample */
-    for (l=order-1; l>0; l--){
-      x[l] = x[l-1];
-      y[l] = y[l-1];
-    }
-  }
-  /* store for next run */
-  f->x = x;
-  f->y = y;
-  //}
-}
-
-/*  
- *
- * despite mirroring, end effects destroy both phse and amplitude. the longer
- * the buffer, the less affected they are.
- *
- * replacing with zeros clicks.
- *
- * seems broken for order > 4 (see biquad_do_filtfilt for audible one) 
- */
-void aubio_filter_do_filtfilt(aubio_filter_t * f, fvec_t * in, fvec_t * tmp) {
-  uint_t j,i=0;
-  uint_t length = in->length;
-  //uint_t order = f->order;
-  //lsmp_t mir;
-  /* mirroring */
-  //mir = 2*in->data[i][0];
-  //for (j=1;j<order;j++)
-  //f->x[j] = 0.;//mir - in->data[i][order-j];
-  /* apply filtering */
-  aubio_filter_do(f,in);
-  /* invert */
-  for (j = 0; j < length; j++)
-    tmp->data[i][length-j-1] = in->data[i][j];
-  /* mirror inverted */
-  //mir = 2*tmp->data[i][0];
-  //for (j=1;j<order;j++)
-  //f->x[j] = 0.;//mir - tmp->data[i][order-j];
-  /* apply filtering on inverted */
-  aubio_filter_do(f,tmp);
-  /* invert back */
-  for (j = 0; j < length; j++)
-    in->data[i][j] = tmp->data[i][length-j-1];
-}
-
-
-aubio_filter_t * new_aubio_adsgn_filter(uint_t samplerate) {
-  aubio_filter_t * f = new_aubio_filter(samplerate, 7);
-  lsmp_t * a = f->a;
-  lsmp_t * b = f->b;
-  /* uint_t l; */
-  /* for now, 44100, adsgn */
-  a[0] =  1.00000000000000000000000000000000000000000000000000000; 
-  a[1] = -4.01957618111583236952810693765059113502502441406250000; 
-  a[2] =  6.18940644292069386267485242569819092750549316406250000; 
-  a[3] = -4.45319890354411640487342083360999822616577148437500000; 
-  a[4] =  1.42084294962187751565352300531230866909027099609375000; 
-  a[5] = -0.14182547383030480458998567883099894970655441284179688; 
-  a[6] =  0.00435117723349511334451911181986361043527722358703613; 
-  b[0] =  0.25574112520425740235907596797915175557136535644531250;
-  b[1] = -0.51148225040851391653973223583307117223739624023437500;
-  b[2] = -0.25574112520426162120656954357400536537170410156250000;
-  b[3] =  1.02296450081703405032840237254276871681213378906250000;
-  b[4] = -0.25574112520426051098354491841746494174003601074218750;
-  b[5] = -0.51148225040851369449512731080176308751106262207031250;
-  b[6] =  0.25574112520425729133677350546349771320819854736328125;
-  /* DBG: filter coeffs at creation time */
-  /*
-  for (l=0; l<f->order; l++){
-    AUBIO_DBG("a[%d]=\t%1.16f\tb[%d]=\t%1.16f\n",l,a[l],l,b[l]);
-  }
-  */
-  f->a = a;
-  f->b = b;
-  return f;
-}
-
-aubio_filter_t * new_aubio_cdsgn_filter(uint_t samplerate) {
-  aubio_filter_t * f = new_aubio_filter(samplerate, 5);
-  lsmp_t * a = f->a;
-  lsmp_t * b = f->b;
-  /* uint_t l; */
-  /* for now, 44100, cdsgn */
-  a[0] =  1.000000000000000000000000000000000000000000000000000000000000; 
-  a[1] = -2.134674963687040794013682898366823792457580566406250000000000; 
-  a[2] =  1.279333533236063358273781886964570730924606323242187500000000; 
-  a[3] = -0.149559846089396208945743182994192466139793395996093750000000; 
-  a[4] =  0.004908700174624848651394604104325480875559151172637939453125; 
-  b[0] =  0.217008561949218803377448239189106971025466918945312500000000;
-  b[1] = -0.000000000000000222044604925031308084726333618164062500000000;
-  b[2] = -0.434017123898438272888711253472138196229934692382812500000000;
-  b[3] =  0.000000000000000402455846426619245903566479682922363281250000;
-  b[4] =  0.217008561949218969910901932962588034570217132568359375000000;
-  /* DBG: filter coeffs at creation time */
-  /*
-  for (l=0; l<f->order; l++){
-    AUBIO_DBG("a[%d]=\t%1.16f\tb[%d]=\t%1.16f\n",l,a[l],l,b[l]);
-  }
-  */
-  f->a = a;
-  f->b = b;
-  return f;
-}
-
-aubio_filter_t * new_aubio_filter(uint_t samplerate UNUSED, uint_t order) {
-  aubio_filter_t * f = AUBIO_NEW(aubio_filter_t);
-  lsmp_t * x = f->x;
-  lsmp_t * y = f->y;
-  lsmp_t * a = f->a;
-  lsmp_t * b = f->b;
-  uint_t l;
-  f->order = order;
-  a = AUBIO_ARRAY(lsmp_t,f->order);
-  b = AUBIO_ARRAY(lsmp_t,f->order);
-  x = AUBIO_ARRAY(lsmp_t,f->order);
-  y = AUBIO_ARRAY(lsmp_t,f->order);
-  /* initial states to zeros */
-  for (l=0; l<f->order; l++){
-    x[l] = 0.;
-    y[l] = 0.;
-  }
-  f->x = x;
-  f->y = y;
-  f->a = a;
-  f->b = b;
-  return f;
-}
-
-void del_aubio_filter(aubio_filter_t * f) {
-  AUBIO_FREE(f->a);
-  AUBIO_FREE(f->b);
-  AUBIO_FREE(f->x);
-  AUBIO_FREE(f->y);
-  AUBIO_FREE(f);
-  return;
-}
--- a/src/filter.h
+++ /dev/null
@@ -1,97 +1,0 @@
-/*
-	 Copyright (C) 2003 Paul Brossier
-
-	 This program is free software; you can redistribute it and/or modify
-	 it under the terms of the GNU General Public License as published by
-	 the Free Software Foundation; either version 2 of the License, or
-	 (at your option) any later version.
-
-	 This program is distributed in the hope that it will be useful,
-	 but WITHOUT ANY WARRANTY; without even the implied warranty of
-	 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-	 GNU General Public License for more details.
-
-	 You should have received a copy of the GNU General Public License
-	 along with this program; if not, write to the Free Software
-	 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-*/
-
-#ifndef FILTER_H
-#define FILTER_H
-
-/** \file 
-
-  Infinite Impulse Response filter
-
-  This file implements IIR filters of any order:
- 
-  \f$ y[n] = b_1 x[n] + ... + b_{order} x[n-order] -
-       a_2 y[n-1] - ... - a_{order} y[n-order]\f$
-
-  The filtfilt version runs the filter twice, forward and backward, to
-  compensate the phase shifting of the forward operation.
-
-*/
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** IIR filter object */
-typedef struct _aubio_filter_t aubio_filter_t;
-
-/** filter input vector (in-place)
-
-  \param b biquad object as returned by new_aubio_biquad
-  \param in input vector to filter
-
-*/
-void aubio_filter_do(aubio_filter_t * b, fvec_t * in);
-/** filter input vector (out-of-place)
-
-  \param b biquad object as returned by new_aubio_biquad
-  \param in input vector to filter
-  \param out output vector to store filtered input
-
-*/
-void aubio_filter_do_outplace(aubio_filter_t * b, fvec_t * in, fvec_t * out);
-/** filter input vector forward and backward
-
-  \param b biquad object as returned by new_aubio_biquad
-  \param in input vector to filter
-  \param tmp memory space to use for computation
-
-*/
-void aubio_filter_do_filtfilt(aubio_filter_t * b, fvec_t * in, fvec_t * tmp);
-/** create new IIR filter
-
-  \param samplerate signal sampling rate
-  \param order order of the filter (number of coefficients)
-
-*/
-aubio_filter_t * new_aubio_filter(uint_t samplerate, uint_t order);
-/** create a new A-design filter 
-
-  \param samplerate sampling-rate of the signal to filter 
-
-*/
-aubio_filter_t * new_aubio_adsgn_filter(uint_t samplerate);
-/** create a new C-design filter 
-
-  \param samplerate sampling-rate of the signal to filter 
-
-*/
-aubio_filter_t * new_aubio_cdsgn_filter(uint_t samplerate);
-/** delete a filter object
- 
-  \param f filter object to delete
-
-*/
-void del_aubio_filter(aubio_filter_t * f);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /*FILTER_H*/
--- a/src/fvec.c
+++ b/src/fvec.c
@@ -18,7 +18,7 @@
 */
 
 #include "aubio_priv.h"
-#include "sample.h"
+#include "fvec.h"
 
 fvec_t * new_fvec( uint_t length, uint_t channels) {
   fvec_t * s = AUBIO_NEW(fvec_t);
--- a/src/hist.c
+++ /dev/null
@@ -1,157 +1,0 @@
-/*
-   Copyright (C) 2003 Paul Brossier
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-#include "aubio_priv.h"
-#include "sample.h"
-#include "scale.h"
-#include "mathutils.h" //vec_min vec_max
-#include "hist.h"
-
-/********
- * Object Structure
- */
-
-struct _aubio_hist_t {
-  fvec_t * hist;
-  uint_t nelems;
-  uint_t channels;
-  fvec_t * cent;
-  aubio_scale_t *scaler;
-};
-
-/**
- * Object creation/deletion calls
- */
-aubio_hist_t * new_aubio_hist (smpl_t ilow, smpl_t ihig, uint_t nelems, uint_t channels){
-  aubio_hist_t * s = AUBIO_NEW(aubio_hist_t);
-  smpl_t step = (ihig-ilow)/(smpl_t)(nelems);
-  smpl_t accum = step;
-  uint_t i;
-  s->channels = channels;
-  s->nelems = nelems;
-  s->hist = new_fvec(nelems, channels);
-  s->cent = new_fvec(nelems, 1);
-
-  /* use scale to map ilow/ihig -> 0/nelems */
-  s->scaler = new_aubio_scale(ilow,ihig,0,nelems);
-  /* calculate centers now once */
-  s->cent->data[0][0] = ilow + 0.5 * step;
-  for (i=1; i < s->nelems; i++, accum+=step )
-    s->cent->data[0][i] = s->cent->data[0][0] + accum;
-
-  return s;
-}
-
-void del_aubio_hist(aubio_hist_t *s) {
-  del_fvec(s->hist);
-  del_fvec(s->cent);
-  del_aubio_scale(s->scaler);
-  AUBIO_FREE(s);
-}
-
-/***
- * do it
- */
-void aubio_hist_do (aubio_hist_t *s, fvec_t *input) {
-  uint_t i,j;
-  sint_t tmp = 0;
-  aubio_scale_do(s->scaler, input);
-  /* reset data */
-  for (i=0; i < s->channels; i++)
-    for (j=0; j < s->nelems; j++)
-      s->hist->data[i][j] = 0;
-  /* run accum */
-  for (i=0; i < input->channels; i++)
-    for (j=0;  j < input->length; j++)
-    {
-      tmp = (sint_t)FLOOR(input->data[i][j]);
-      if ((tmp >= 0) && (tmp < (sint_t)s->nelems))
-        s->hist->data[i][tmp] += 1;
-    }
-}
-
-void aubio_hist_do_notnull (aubio_hist_t *s, fvec_t *input) {
-  uint_t i,j;
-  sint_t tmp = 0;
-  aubio_scale_do(s->scaler, input);
-  /* reset data */
-  for (i=0; i < s->channels; i++)
-    for (j=0; j < s->nelems; j++)
-      s->hist->data[i][j] = 0;
-  /* run accum */
-  for (i=0; i < input->channels; i++)
-    for (j=0;  j < input->length; j++) {
-      if (input->data[i][j] != 0) {
-        tmp = (sint_t)FLOOR(input->data[i][j]);
-        if ((tmp >= 0) && (tmp < (sint_t)s->nelems))
-          s->hist->data[i][tmp] += 1;
-      }
-    }
-}
-
-
-void aubio_hist_dyn_notnull (aubio_hist_t *s, fvec_t *input) {
-  uint_t i,j;
-  sint_t tmp = 0;
-  smpl_t ilow = vec_min(input);
-  smpl_t ihig = vec_max(input);
-  smpl_t step = (ihig-ilow)/(smpl_t)(s->nelems);
-
-  /* readapt */
-  aubio_scale_set(s->scaler, ilow, ihig, 0, s->nelems);
-
-  /* recalculate centers */
-  s->cent->data[0][0] = ilow + 0.5f * step;
-  for (i=1; i < s->nelems; i++)
-    s->cent->data[0][i] = s->cent->data[0][0] + i * step;
-
-  /* scale */
-  aubio_scale_do(s->scaler, input);
-
-  /* reset data */
-  for (i=0; i < s->channels; i++)
-    for (j=0; j < s->nelems; j++)
-      s->hist->data[i][j] = 0;
-  /* run accum */
-  for (i=0; i < input->channels; i++)
-    for (j=0;  j < input->length; j++) {
-      if (input->data[i][j] != 0) {
-        tmp = (sint_t)FLOOR(input->data[i][j]);
-        if ((tmp >= 0) && (tmp < (sint_t)s->nelems))
-          s->hist->data[i][tmp] += 1;
-      }
-    }
-}
-
-void aubio_hist_weight (aubio_hist_t *s) {
-  uint_t i,j;
-  for (i=0; i < s->channels; i++)
-    for (j=0; j < s->nelems; j++) {
-      s->hist->data[i][j] *= s->cent->data[0][j];
-    }
-}
-
-smpl_t aubio_hist_mean (aubio_hist_t *s) {
-  uint_t i,j;
-  smpl_t tmp = 0.0f;
-  for (i=0; i < s->channels; i++)
-    for (j=0; j < s->nelems; j++)
-      tmp += s->hist->data[i][j];
-  return tmp/(smpl_t)(s->nelems);
-}
-
--- a/src/hist.h
+++ /dev/null
@@ -1,61 +1,0 @@
-/*
-   Copyright (C) 2003 Paul Brossier
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-*/
-
-/** @file
- *
- * Histogram function
- *
- * Big hacks to implement an histogram
- */
-
-#ifndef HIST_H
-#define HIST_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** histogram object */
-typedef struct _aubio_hist_t aubio_hist_t;
-
-/** histogram creation
- * \param flow minimum input
- * \param fhig maximum input
- * \param nelems number of histogram columns
- * \param channels number of channels
- */
-aubio_hist_t * new_aubio_hist(smpl_t flow, smpl_t fhig, uint_t nelems, uint_t channels);
-/** histogram deletion */
-void del_aubio_hist(aubio_hist_t *s);
-/** compute the histogram */
-void aubio_hist_do(aubio_hist_t *s, fvec_t * input);
-/** compute the histogram ignoring null elements */
-void aubio_hist_do_notnull(aubio_hist_t *s, fvec_t * input);
-/** compute the mean of the histogram */
-smpl_t aubio_hist_mean(aubio_hist_t *s);
-/** weight the histogram */
-void aubio_hist_weight(aubio_hist_t *s);
-/** compute dynamic histogram for non-null elements */
-void aubio_hist_dyn_notnull (aubio_hist_t *s, fvec_t *input);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
--- a/src/mathutils.c
+++ b/src/mathutils.c
@@ -20,7 +20,7 @@
 /* see in mathutils.h for doc */
 
 #include "aubio_priv.h"
-#include "sample.h"
+#include "fvec.h"
 #include "mathutils.h"
 #include "config.h"
 
@@ -226,9 +226,9 @@
       medar[k] = vec->data[0][k+pos-post];
   /* pre part of the buffer does not exist */
   } else {
-    for (k=0;k<length-pos+post+1;k++)
+    for (k=0;k<length-pos+post;k++)
       medar[k] = vec->data[0][k+pos-post];
-    for (k=length-pos+post+1;k<win_length;k++)
+    for (k=length-pos+post;k<win_length;k++)
       medar[k] = 0.; /* 0-padding at the end */
   }
   return vec_median(tmpvec);
@@ -430,19 +430,6 @@
     }
   }
   return zcr/(smpl_t)input->length;
-}
-
-smpl_t aubio_spectral_centroid(cvec_t * spectrum, smpl_t samplerate) {
-  uint_t i=0, j;
-  smpl_t sum = 0., sc = 0.;
-  for ( j = 0; j < spectrum->length; j++ ) {
-    sum += spectrum->norm[i][j];
-  }
-  if (sum == 0.) return 0.;
-  for ( j = 0; j < spectrum->length; j++ ) {
-    sc += (smpl_t)j * spectrum->norm[i][j];
-  }
-  return sc / sum * samplerate / (smpl_t)(spectrum->length);
 }
 
 void aubio_autocorr(fvec_t * input, fvec_t * output) {
--- a/src/mathutils.h
+++ b/src/mathutils.h
@@ -208,10 +208,6 @@
  */
 smpl_t aubio_zero_crossing_rate(fvec_t * input);
 /**
- * spectrum centroid computed on a cvec
- */
-smpl_t aubio_spectral_centroid(cvec_t * input, smpl_t samplerate);
-/**
  * clean up cached memory at the end of program
  *
  * use this function at the end of programs to purge all
--- a/src/onset.c
+++ /dev/null
@@ -1,119 +1,0 @@
-/*
-   Copyright (C) 2006 Paul Brossier
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-*/
-
-#include "aubio_priv.h"
-#include "sample.h"
-#include "onsetdetection.h"
-#include "phasevoc.h"
-#include "peakpick.h"
-#include "mathutils.h"
-#include "onset.h"
-
-/** structure to store object state */
-struct _aubio_onset_t {
-  aubio_pvoc_t * pv;            /**< phase vocoder */
-  aubio_onsetdetection_t * od;  /**< onset detection */ 
-  aubio_pickpeak_t * pp;        /**< peak picker */
-  cvec_t * fftgrain;            /**< phase vocoder output */
-  fvec_t * of;                  /**< onset detection function */
-  smpl_t threshold;             /**< onset peak picking threshold */
-  smpl_t silence;               /**< silence threhsold */
-  uint_t minioi;                /**< minimum inter onset interval */
-  uint_t wasonset;              /**< number of frames since last onset */
-};
-
-/* execute onset detection function on iput buffer */
-void aubio_onset(aubio_onset_t *o, fvec_t * input, fvec_t * onset)
-{
-  uint_t isonset = 0;
-  uint_t wasonset = o->wasonset;
-  aubio_pvoc_do (o->pv,input, o->fftgrain);
-  aubio_onsetdetection(o->od,o->fftgrain, o->of);
-  /*if (usedoubled) {
-    aubio_onsetdetection(o2,fftgrain, onset2);
-    onset->data[0][0] *= onset2->data[0][0];
-  }*/
-  isonset = aubio_peakpick_pimrt(o->of,o->pp);
-  if (isonset) {
-    if (aubio_silence_detection(input, o->silence)==1) {
-      isonset  = 0;
-      wasonset++;
-    } else {
-      if (wasonset > o->minioi) {
-        wasonset = 0;
-      } else {
-        isonset  = 0;
-        wasonset++;
-      }
-    }
-  } else {
-    wasonset++;
-  }
-  o->wasonset = wasonset;
-  onset->data[0][0] = isonset;
-  return;
-}
-
-void aubio_onset_set_silence(aubio_onset_t * o, smpl_t silence) {
-  o->silence = silence;
-  return;
-}
-
-void aubio_onset_set_threshold(aubio_onset_t * o, smpl_t threshold) {
-  o->threshold = threshold;
-  aubio_peakpicker_set_threshold(o->pp, o->threshold);
-  return;
-}
-
-void aubio_onset_set_minioi(aubio_onset_t * o, uint_t minioi) {
-  o->minioi = minioi;
-  return;
-}
-
-/* Allocate memory for an onset detection */
-aubio_onset_t * new_aubio_onset (aubio_onsetdetection_type type_onset, 
-    uint_t buf_size, uint_t hop_size, uint_t channels)
-{
-  aubio_onset_t * o = AUBIO_NEW(aubio_onset_t);
-  /** set some default parameter */
-  o->threshold = 0.3;
-  o->minioi    = 4;
-  o->silence   = -70;
-  o->wasonset  = 0;
-  o->pv = new_aubio_pvoc(buf_size, hop_size, channels);
-  o->pp = new_aubio_peakpicker(o->threshold);
-  o->od = new_aubio_onsetdetection(type_onset,buf_size,channels);
-  o->fftgrain = new_cvec(buf_size,channels);
-  o->of = new_fvec(1, channels);
-  /*if (usedoubled)    {
-    o2 = new_aubio_onsetdetection(type_onset2,buffer_size,channels);
-    onset2 = new_fvec(1 , channels);
-  }*/
-  return o;
-}
-
-void del_aubio_onset (aubio_onset_t *o)
-{
-  del_aubio_onsetdetection(o->od);
-  del_aubio_peakpicker(o->pp);
-  del_aubio_pvoc(o->pv);
-  del_fvec(o->of);
-  del_cvec(o->fftgrain);
-  AUBIO_FREE(o);
-}
--- a/src/onset.h
+++ /dev/null
@@ -1,102 +1,0 @@
-/*
-   Copyright (C) 2006 Paul Brossier
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-*/
-
-/** \file
- 
-  Onset detection driver
-
-  The following routines compute the onset detection function and detect peaks
-  in these functions. When onsets are found above a given silence threshold,
-  and after a minimum inter-onset interval, the output vector returned by
-  aubio_onset is filled with 1. Otherwise, the output vector remains 0.
-
-  The peak-picking threshold, the silence threshold, and the minimum
-  inter-onset interval can be adjusted during the execution of the aubio_onset
-  routine using the corresponding functions.
-
-*/
- 
-
-#ifndef ONSET_H
-#define ONSET_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** onset detection object */
-typedef struct _aubio_onset_t aubio_onset_t;
-
-/** create onset detection object
-  
-  \param type_onset onset detection type as specified in onsetdetection.h
-  \param buf_size buffer size for phase vocoder
-  \param hop_size hop size for phase vocoder
-  \param channels number of channels 
-
-*/
-aubio_onset_t * new_aubio_onset (aubio_onsetdetection_type type_onset, 
-    uint_t buf_size, uint_t hop_size, uint_t channels);
-
-/** execute onset detection
-
-  \param o onset detection object as returned by new_aubio_onset
-  \param input new audio vector of length hop_size
-  \param onset output vector, 1 if onset is found, 0 otherwise
-
-*/
-void aubio_onset(aubio_onset_t *o, fvec_t * input, fvec_t * onset);
-
-/** set onset detection silence threshold
-
-  \param o onset detection object as returned by new_aubio_onset
-  \param silence new silence detection threshold
-
-*/
-void aubio_onset_set_silence(aubio_onset_t * o, smpl_t silence);
-
-/** set onset detection peak picking threshold 
-
-  \param o onset detection object as returned by new_aubio_onset
-  \param threshold new peak-picking threshold
-
-*/
-void aubio_onset_set_threshold(aubio_onset_t * o, smpl_t threshold);
-
-/** set minimum inter onset interval
-
-  \param o onset detection object as returned by new_aubio_onset
-  \param minioi minimum number of frames between onsets (in multiple of
-  hop_size/samplerare)
-
-*/
-void aubio_onset_set_minioi(aubio_onset_t * o, uint_t minioi);
-
-/** delete onset detection object
-
-  \param o onset detection object to delete 
-
-*/
-void del_aubio_onset(aubio_onset_t * o);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* ONSET_H */
--- /dev/null
+++ b/src/onset/onset.c
@@ -1,0 +1,120 @@
+/*
+   Copyright (C) 2006 Paul Brossier
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#include "aubio_priv.h"
+#include "fvec.h"
+#include "cvec.h"
+#include "onset/onsetdetection.h"
+#include "spectral/phasevoc.h"
+#include "onset/peakpick.h"
+#include "mathutils.h"
+#include "onset/onset.h"
+
+/** structure to store object state */
+struct _aubio_onset_t {
+  aubio_pvoc_t * pv;            /**< phase vocoder */
+  aubio_onsetdetection_t * od;  /**< onset detection */ 
+  aubio_pickpeak_t * pp;        /**< peak picker */
+  cvec_t * fftgrain;            /**< phase vocoder output */
+  fvec_t * of;                  /**< onset detection function */
+  smpl_t threshold;             /**< onset peak picking threshold */
+  smpl_t silence;               /**< silence threhsold */
+  uint_t minioi;                /**< minimum inter onset interval */
+  uint_t wasonset;              /**< number of frames since last onset */
+};
+
+/* execute onset detection function on iput buffer */
+void aubio_onset(aubio_onset_t *o, fvec_t * input, fvec_t * onset)
+{
+  uint_t isonset = 0;
+  uint_t wasonset = o->wasonset;
+  aubio_pvoc_do (o->pv,input, o->fftgrain);
+  aubio_onsetdetection(o->od,o->fftgrain, o->of);
+  /*if (usedoubled) {
+    aubio_onsetdetection(o2,fftgrain, onset2);
+    onset->data[0][0] *= onset2->data[0][0];
+  }*/
+  isonset = aubio_peakpick_pimrt(o->of,o->pp);
+  if (isonset) {
+    if (aubio_silence_detection(input, o->silence)==1) {
+      isonset  = 0;
+      wasonset++;
+    } else {
+      if (wasonset > o->minioi) {
+        wasonset = 0;
+      } else {
+        isonset  = 0;
+        wasonset++;
+      }
+    }
+  } else {
+    wasonset++;
+  }
+  o->wasonset = wasonset;
+  onset->data[0][0] = isonset;
+  return;
+}
+
+void aubio_onset_set_silence(aubio_onset_t * o, smpl_t silence) {
+  o->silence = silence;
+  return;
+}
+
+void aubio_onset_set_threshold(aubio_onset_t * o, smpl_t threshold) {
+  o->threshold = threshold;
+  aubio_peakpicker_set_threshold(o->pp, o->threshold);
+  return;
+}
+
+void aubio_onset_set_minioi(aubio_onset_t * o, uint_t minioi) {
+  o->minioi = minioi;
+  return;
+}
+
+/* Allocate memory for an onset detection */
+aubio_onset_t * new_aubio_onset (aubio_onsetdetection_type type_onset, 
+    uint_t buf_size, uint_t hop_size, uint_t channels)
+{
+  aubio_onset_t * o = AUBIO_NEW(aubio_onset_t);
+  /** set some default parameter */
+  o->threshold = 0.3;
+  o->minioi    = 4;
+  o->silence   = -70;
+  o->wasonset  = 0;
+  o->pv = new_aubio_pvoc(buf_size, hop_size, channels);
+  o->pp = new_aubio_peakpicker(o->threshold);
+  o->od = new_aubio_onsetdetection(type_onset,buf_size,channels);
+  o->fftgrain = new_cvec(buf_size,channels);
+  o->of = new_fvec(1, channels);
+  /*if (usedoubled)    {
+    o2 = new_aubio_onsetdetection(type_onset2,buffer_size,channels);
+    onset2 = new_fvec(1 , channels);
+  }*/
+  return o;
+}
+
+void del_aubio_onset (aubio_onset_t *o)
+{
+  del_aubio_onsetdetection(o->od);
+  del_aubio_peakpicker(o->pp);
+  del_aubio_pvoc(o->pv);
+  del_fvec(o->of);
+  del_cvec(o->fftgrain);
+  AUBIO_FREE(o);
+}
--- /dev/null
+++ b/src/onset/onset.h
@@ -1,0 +1,102 @@
+/*
+   Copyright (C) 2006 Paul Brossier
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+/** \file
+ 
+  Onset detection driver
+
+  The following routines compute the onset detection function and detect peaks
+  in these functions. When onsets are found above a given silence threshold,
+  and after a minimum inter-onset interval, the output vector returned by
+  aubio_onset is filled with 1. Otherwise, the output vector remains 0.
+
+  The peak-picking threshold, the silence threshold, and the minimum
+  inter-onset interval can be adjusted during the execution of the aubio_onset
+  routine using the corresponding functions.
+
+*/
+ 
+
+#ifndef ONSET_H
+#define ONSET_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** onset detection object */
+typedef struct _aubio_onset_t aubio_onset_t;
+
+/** create onset detection object
+  
+  \param type_onset onset detection type as specified in onsetdetection.h
+  \param buf_size buffer size for phase vocoder
+  \param hop_size hop size for phase vocoder
+  \param channels number of channels 
+
+*/
+aubio_onset_t * new_aubio_onset (aubio_onsetdetection_type type_onset, 
+    uint_t buf_size, uint_t hop_size, uint_t channels);
+
+/** execute onset detection
+
+  \param o onset detection object as returned by new_aubio_onset
+  \param input new audio vector of length hop_size
+  \param onset output vector, 1 if onset is found, 0 otherwise
+
+*/
+void aubio_onset(aubio_onset_t *o, fvec_t * input, fvec_t * onset);
+
+/** set onset detection silence threshold
+
+  \param o onset detection object as returned by new_aubio_onset
+  \param silence new silence detection threshold
+
+*/
+void aubio_onset_set_silence(aubio_onset_t * o, smpl_t silence);
+
+/** set onset detection peak picking threshold 
+
+  \param o onset detection object as returned by new_aubio_onset
+  \param threshold new peak-picking threshold
+
+*/
+void aubio_onset_set_threshold(aubio_onset_t * o, smpl_t threshold);
+
+/** set minimum inter onset interval
+
+  \param o onset detection object as returned by new_aubio_onset
+  \param minioi minimum number of frames between onsets (in multiple of
+  hop_size/samplerare)
+
+*/
+void aubio_onset_set_minioi(aubio_onset_t * o, uint_t minioi);
+
+/** delete onset detection object
+
+  \param o onset detection object to delete 
+
+*/
+void del_aubio_onset(aubio_onset_t * o);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ONSET_H */
--- /dev/null
+++ b/src/onset/onsetdetection.c
@@ -1,0 +1,337 @@
+/*
+   Copyright (C) 2003 Paul Brossier
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#include "aubio_priv.h"
+#include "fvec.h"
+#include "cvec.h"
+#include "spectral/fft.h"
+#include "mathutils.h"
+#include "utils/hist.h"
+#include "onset/onsetdetection.h"
+
+
+/** structure to store object state */
+struct _aubio_onsetdetection_t {
+  aubio_onsetdetection_type type; /**< onset detection type */
+  /** Pointer to aubio_onsetdetection_<type> function */
+  void (*funcpointer)(aubio_onsetdetection_t *o,
+      cvec_t * fftgrain, fvec_t * onset);
+  smpl_t threshold;      /**< minimum norm threshold for phase and specdiff */
+  fvec_t *oldmag;        /**< previous norm vector */
+  fft_data_t *meas;      /**< current onset detection measure complex vector */
+  fvec_t *dev1 ;         /**< current onset detection measure vector */
+  fvec_t *theta1;        /**< previous phase vector, one frame behind */
+  fvec_t *theta2;        /**< previous phase vector, two frames behind */
+  aubio_hist_t * histog; /**< histogram */
+};
+
+
+/* Energy based onset detection function */
+void aubio_onsetdetection_energy  (aubio_onsetdetection_t *o UNUSED,
+    cvec_t * fftgrain, fvec_t * onset) {
+  uint_t i,j;
+  for (i=0;i<fftgrain->channels;i++) {
+    onset->data[i][0] = 0.;
+    for (j=0;j<fftgrain->length;j++) {
+      onset->data[i][0] += SQR(fftgrain->norm[i][j]);
+    }
+  }
+}
+
+/* High Frequency Content onset detection function */
+void aubio_onsetdetection_hfc(aubio_onsetdetection_t *o UNUSED,
+    cvec_t * fftgrain, fvec_t * onset){
+  uint_t i,j;
+  for (i=0;i<fftgrain->channels;i++) {
+    onset->data[i][0] = 0.;
+    for (j=0;j<fftgrain->length;j++) {
+      onset->data[i][0] += (j+1)*fftgrain->norm[i][j];
+    }
+  }
+}
+
+
+/* Complex Domain Method onset detection function */
+void aubio_onsetdetection_complex (aubio_onsetdetection_t *o, cvec_t * fftgrain, fvec_t * onset) {
+  uint_t i, j;
+  uint_t nbins = fftgrain->length;
+  for (i=0;i<fftgrain->channels; i++)  {
+    onset->data[i][0] = 0.;
+    for (j=0;j<nbins; j++)  {
+      o->dev1->data[i][j]    = aubio_unwrap2pi(
+          fftgrain->phas[i][j]
+          -2.0*o->theta1->data[i][j]+
+          o->theta2->data[i][j]);
+#ifdef HAVE_COMPLEX_H
+      o->meas[j] = fftgrain->norm[i][j]*CEXPC(I*o->dev1->data[i][j]);
+      /* sum on all bins */
+      onset->data[i][0]     += //(fftgrain->norm[i][j]);
+          SQRT(SQR( REAL(o->oldmag->data[i][j]-o->meas[j]) )
+            +  SQR( IMAG(o->oldmag->data[i][j]-o->meas[j]) )
+            );
+#else
+      o->meas[j]             = (fftgrain->norm[i][j])*COS(o->dev1->data[i][j]);
+      o->meas[(nbins-1)*2-j] = (fftgrain->norm[i][j])*SIN(o->dev1->data[i][j]);
+      /* sum on all bins */
+      onset->data[i][0]     += //(fftgrain->norm[i][j]);
+          SQRT(SQR( (o->oldmag->data[i][j]-o->meas[j]) )
+            +  SQR( (-o->meas[(nbins-1)*2-j]) )
+            );
+#endif
+      /* swap old phase data (need to remember 2 frames behind)*/
+      o->theta2->data[i][j] = o->theta1->data[i][j];
+      o->theta1->data[i][j] = fftgrain->phas[i][j];
+      /* swap old magnitude data (1 frame is enough) */
+      o->oldmag->data[i][j] = fftgrain->norm[i][j];
+    }
+  }
+}
+
+
+/* Phase Based Method onset detection function */
+void aubio_onsetdetection_phase(aubio_onsetdetection_t *o, 
+    cvec_t * fftgrain, fvec_t * onset){
+  uint_t i, j;
+  uint_t nbins = fftgrain->length;
+  for (i=0;i<fftgrain->channels; i++)  {
+    onset->data[i][0] = 0.0f;
+    o->dev1->data[i][0]=0.;
+    for ( j=0;j<nbins; j++ )  {
+      o->dev1->data[i][j] = 
+        aubio_unwrap2pi(
+            fftgrain->phas[i][j]
+            -2.0*o->theta1->data[i][j]
+            +o->theta2->data[i][j]);
+      if ( o->threshold < fftgrain->norm[i][j] )
+        o->dev1->data[i][j] = ABS(o->dev1->data[i][j]);
+      else 
+        o->dev1->data[i][j] = 0.0f;
+      /* keep a track of the past frames */
+      o->theta2->data[i][j] = o->theta1->data[i][j];
+      o->theta1->data[i][j] = fftgrain->phas[i][j];
+    }
+    /* apply o->histogram */
+    aubio_hist_dyn_notnull(o->histog,o->dev1);
+    /* weight it */
+    aubio_hist_weight(o->histog);
+    /* its mean is the result */
+    onset->data[i][0] = aubio_hist_mean(o->histog);  
+    //onset->data[i][0] = vec_mean(o->dev1);
+  }
+}
+
+/* Spectral difference method onset detection function */
+void aubio_onsetdetection_specdiff(aubio_onsetdetection_t *o,
+    cvec_t * fftgrain, fvec_t * onset){
+  uint_t i, j;
+  uint_t nbins = fftgrain->length;
+  for (i=0;i<fftgrain->channels; i++)  {
+    onset->data[i][0] = 0.0f;
+    for (j=0;j<nbins; j++)  {
+      o->dev1->data[i][j] = SQRT(
+          ABS(SQR( fftgrain->norm[i][j])
+            - SQR(o->oldmag->data[i][j])));
+      if (o->threshold < fftgrain->norm[i][j] )
+        o->dev1->data[i][j] = ABS(o->dev1->data[i][j]);
+      else 
+        o->dev1->data[i][j] = 0.0f;
+      o->oldmag->data[i][j] = fftgrain->norm[i][j];
+    }
+
+    /* apply o->histogram (act somewhat as a low pass on the
+     * overall function)*/
+    aubio_hist_dyn_notnull(o->histog,o->dev1);
+    /* weight it */
+    aubio_hist_weight(o->histog);
+    /* its mean is the result */
+    onset->data[i][0] = aubio_hist_mean(o->histog);  
+
+  }
+}
+
+/* Kullback Liebler onset detection function
+ * note we use ln(1+Xn/(Xn-1+0.0001)) to avoid 
+ * negative (1.+) and infinite values (+1.e-10) */
+void aubio_onsetdetection_kl(aubio_onsetdetection_t *o, cvec_t * fftgrain, fvec_t * onset){
+  uint_t i,j;
+  for (i=0;i<fftgrain->channels;i++) {
+    onset->data[i][0] = 0.;
+    for (j=0;j<fftgrain->length;j++) {
+      onset->data[i][0] += fftgrain->norm[i][j]
+        *LOG(1.+fftgrain->norm[i][j]/(o->oldmag->data[i][j]+1.e-10));
+      o->oldmag->data[i][j] = fftgrain->norm[i][j];
+    }
+    if (isnan(onset->data[i][0])) onset->data[i][0] = 0.;
+  }
+}
+
+/* Modified Kullback Liebler onset detection function
+ * note we use ln(1+Xn/(Xn-1+0.0001)) to avoid 
+ * negative (1.+) and infinite values (+1.e-10) */
+void aubio_onsetdetection_mkl(aubio_onsetdetection_t *o, cvec_t * fftgrain, fvec_t * onset){
+  uint_t i,j;
+  for (i=0;i<fftgrain->channels;i++) {
+    onset->data[i][0] = 0.;
+    for (j=0;j<fftgrain->length;j++) {
+      onset->data[i][0] += LOG(1.+fftgrain->norm[i][j]/(o->oldmag->data[i][j]+1.e-10));
+      o->oldmag->data[i][j] = fftgrain->norm[i][j];
+    }
+    if (isnan(onset->data[i][0])) onset->data[i][0] = 0.;
+  }
+}
+
+/* Spectral flux */
+void aubio_onsetdetection_specflux(aubio_onsetdetection_t *o, cvec_t * fftgrain, fvec_t * onset){ 
+  uint_t i, j;
+  for (i=0;i<fftgrain->channels;i++) {
+    onset->data[i][0] = 0.;
+    for (j=0;j<fftgrain->length;j++) {
+      if (fftgrain->norm[i][j] > o->oldmag->data[i][j])
+        onset->data[i][0] += fftgrain->norm[i][j] - o->oldmag->data[i][j];
+      o->oldmag->data[i][j] = fftgrain->norm[i][j];
+    }
+  }
+}
+
+/* Generic function pointing to the choosen one */
+void 
+aubio_onsetdetection(aubio_onsetdetection_t *o, cvec_t * fftgrain, 
+    fvec_t * onset) {
+  o->funcpointer(o,fftgrain,onset);
+}
+
+/* Allocate memory for an onset detection 
+ * depending on the choosen type, allocate memory as needed
+ */
+aubio_onsetdetection_t * 
+new_aubio_onsetdetection (aubio_onsetdetection_type type, 
+    uint_t size, uint_t channels){
+  aubio_onsetdetection_t * o = AUBIO_NEW(aubio_onsetdetection_t);
+  uint_t rsize = size/2+1;
+  uint_t i;
+  switch(type) {
+    /* for both energy and hfc, only fftgrain->norm is required */
+    case aubio_onset_energy: 
+      break;
+    case aubio_onset_hfc:
+      break;
+      /* the other approaches will need some more memory spaces */
+    case aubio_onset_complex:
+      o->oldmag = new_fvec(rsize,channels);
+      /** bug: must be complex array */
+      o->meas = AUBIO_ARRAY(fft_data_t,size+1);
+      for (i=0; i<size+1; i++) o->meas[i] = 0;
+      o->dev1   = new_fvec(rsize,channels);
+      o->theta1 = new_fvec(rsize,channels);
+      o->theta2 = new_fvec(rsize,channels);
+      break;
+    case aubio_onset_phase:
+      o->dev1   = new_fvec(rsize,channels);
+      o->theta1 = new_fvec(rsize,channels);
+      o->theta2 = new_fvec(rsize,channels);
+      o->histog = new_aubio_hist(0.0f, PI, 10, channels);
+      o->threshold = 0.1;
+      break;
+    case aubio_onset_specdiff:
+      o->oldmag = new_fvec(rsize,channels);
+      o->dev1   = new_fvec(rsize,channels);
+      o->histog = new_aubio_hist(0.0f, PI, 10, channels);
+      o->threshold = 0.1;
+      break;
+    case aubio_onset_kl:
+    case aubio_onset_mkl:
+    case aubio_onset_specflux:
+      o->oldmag = new_fvec(rsize,channels);
+      break;
+    default:
+      break;
+  }
+
+  /* this switch could be in its own function to change between
+   * detections on the fly. this would need getting rid of the switch
+   * above and always allocate all the structure */
+
+  switch(type) {
+    case aubio_onset_energy:
+      o->funcpointer = aubio_onsetdetection_energy;
+      break;
+    case aubio_onset_hfc:
+      o->funcpointer = aubio_onsetdetection_hfc;
+      break;
+    case aubio_onset_complex:
+      o->funcpointer = aubio_onsetdetection_complex;
+      break;
+    case aubio_onset_phase:
+      o->funcpointer = aubio_onsetdetection_phase;
+      break;
+    case aubio_onset_specdiff:
+      o->funcpointer = aubio_onsetdetection_specdiff;
+      break;
+    case aubio_onset_kl:
+      o->funcpointer = aubio_onsetdetection_kl;
+      break;
+    case aubio_onset_mkl:
+      o->funcpointer = aubio_onsetdetection_mkl;
+      break;
+    case aubio_onset_specflux:
+      o->funcpointer = aubio_onsetdetection_specflux;
+      break;
+    default:
+      break;
+  }
+  o->type = type;
+  return o;
+}
+
+void del_aubio_onsetdetection (aubio_onsetdetection_t *o){
+  switch(o->type) {
+    /* for both energy and hfc, only fftgrain->norm is required */
+    case aubio_onset_energy: 
+      break;
+    case aubio_onset_hfc:
+      break;
+      /* the other approaches will need some more memory spaces */
+    case aubio_onset_complex:
+      AUBIO_FREE(o->meas);
+      del_fvec(o->oldmag);
+      del_fvec(o->dev1);
+      del_fvec(o->theta1);
+      del_fvec(o->theta2);
+      break;
+    case aubio_onset_phase:
+      del_fvec(o->dev1);
+      del_fvec(o->theta1);
+      del_fvec(o->theta2);
+      del_aubio_hist(o->histog);
+      break;
+    case aubio_onset_specdiff:
+      del_fvec(o->oldmag);
+      del_fvec(o->dev1);
+      del_aubio_hist(o->histog);
+      break;
+    case aubio_onset_kl:
+    case aubio_onset_mkl:
+    case aubio_onset_specflux:
+      del_fvec(o->oldmag);
+      break;
+    default:
+      break;
+  }
+  AUBIO_FREE(o);
+}
--- /dev/null
+++ b/src/onset/onsetdetection.h
@@ -1,0 +1,181 @@
+/*
+	 Copyright (C) 2003 Paul Brossier
+
+	 This program is free software; you can redistribute it and/or modify
+	 it under the terms of the GNU General Public License as published by
+	 the Free Software Foundation; either version 2 of the License, or
+	 (at your option) any later version.
+
+	 This program is distributed in the hope that it will be useful,
+	 but WITHOUT ANY WARRANTY; without even the implied warranty of
+	 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+	 GNU General Public License for more details.
+
+	 You should have received a copy of the GNU General Public License
+	 along with this program; if not, write to the Free Software
+	 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+	 
+*/
+
+/** \file
+ 
+  Onset detection functions
+ 
+  All of the following onset detection function take as arguments the FFT of a
+  windowed signal (as created with aubio_pvoc). They output one smpl_t per
+  buffer and per channel (stored in a vector of size [channels]x[1]).
+ 
+  These functions were first adapted from Juan Pablo Bello's code, and now
+  include further improvements and modifications made within aubio.
+
+*/
+
+
+#ifndef ONSETDETECTION_H
+#define ONSETDETECTION_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** onsetdetection types */
+typedef enum {
+        aubio_onset_energy,         /**< energy based */          
+        aubio_onset_specdiff,       /**< spectral diff */         
+        aubio_onset_hfc,            /**< high frequency content */
+        aubio_onset_complex,        /**< complex domain */        
+        aubio_onset_phase,          /**< phase fast */            
+        aubio_onset_kl,             /**< Kullback Liebler */
+        aubio_onset_mkl,            /**< modified Kullback Liebler */
+        aubio_onset_specflux,       /**< spectral flux */
+} aubio_onsetdetection_type;
+
+/** onsetdetection structure */
+typedef struct _aubio_onsetdetection_t aubio_onsetdetection_t;
+/** Energy based onset detection function 
+ 
+  This function calculates the local energy of the input spectral frame.
+  
+  \param o onset detection object as returned by new_aubio_onsetdetection()
+  \param fftgrain input spectral frame
+  \param onset output onset detection function
+
+*/
+void aubio_onsetdetection_energy(aubio_onsetdetection_t *o, cvec_t * fftgrain, fvec_t * onset);
+/** High Frequency Content onset detection function
+ 
+  This method computes the High Frequency Content (HFC) of the input spectral
+  frame. The resulting function is efficient at detecting percussive onsets.
+
+  Paul Masri. Computer modeling of Sound for Transformation and Synthesis of
+  Musical Signal. PhD dissertation, University of Bristol, UK, 1996.
+  
+  \param o onset detection object as returned by new_aubio_onsetdetection()
+  \param fftgrain input spectral frame
+  \param onset output onset detection function
+
+*/
+void aubio_onsetdetection_hfc(aubio_onsetdetection_t *o, cvec_t * fftgrain, fvec_t * onset);
+/** Complex Domain Method onset detection function 
+ 
+  Christopher Duxbury, Mike E. Davies, and Mark B. Sandler. Complex domain
+  onset detection for musical signals. In Proceedings of the Digital Audio
+  Effects Conference, DAFx-03, pages 90-93, London, UK, 2003.
+
+  \param o onset detection object as returned by new_aubio_onsetdetection()
+  \param fftgrain input spectral frame
+  \param onset output onset detection function
+
+*/
+void aubio_onsetdetection_complex(aubio_onsetdetection_t *o, cvec_t * fftgrain, fvec_t * onset);
+/** Phase Based Method onset detection function 
+
+  Juan-Pablo Bello, Mike P. Davies, and Mark B. Sandler. Phase-based note onset
+  detection for music signals. In Proceedings of the IEEE International
+  Conference on Acoustics Speech and Signal Processing, pages 441­444,
+  Hong-Kong, 2003.
+
+  \param o onset detection object as returned by new_aubio_onsetdetection()
+  \param fftgrain input spectral frame
+  \param onset output onset detection function
+
+*/
+void aubio_onsetdetection_phase(aubio_onsetdetection_t *o, cvec_t * fftgrain, fvec_t * onset);
+/** Spectral difference method onset detection function 
+
+  Jonhatan Foote and Shingo Uchihashi. The beat spectrum: a new approach to
+  rhythm analysis. In IEEE International Conference on Multimedia and Expo
+  (ICME 2001), pages 881­884, Tokyo, Japan, August 2001.
+
+  \param o onset detection object as returned by new_aubio_onsetdetection()
+  \param fftgrain input spectral frame
+  \param onset output onset detection function
+
+*/
+void aubio_onsetdetection_specdiff(aubio_onsetdetection_t *o, cvec_t * fftgrain, fvec_t * onset);
+/** Kullback-Liebler onset detection function 
+  
+  Stephen Hainsworth and Malcom Macleod. Onset detection in music audio
+  signals. In Proceedings of the International Computer Music Conference
+  (ICMC), Singapore, 2003.
+  
+  \param o onset detection object as returned by new_aubio_onsetdetection()
+  \param fftgrain input spectral frame
+  \param onset output onset detection function
+
+*/
+void aubio_onsetdetection_kl(aubio_onsetdetection_t *o, cvec_t * fftgrain, fvec_t * onset);
+/** Modified Kullback-Liebler onset detection function 
+
+  Paul Brossier, ``Automatic annotation of musical audio for interactive
+  systems'', Chapter 2, Temporal segmentation, PhD thesis, Centre for Digital
+  music, Queen Mary University of London, London, UK, 2006.
+
+  \param o onset detection object as returned by new_aubio_onsetdetection()
+  \param fftgrain input spectral frame
+  \param onset output onset detection function
+
+*/
+void aubio_onsetdetection_mkl(aubio_onsetdetection_t *o, cvec_t * fftgrain, fvec_t * onset);
+/** Spectral Flux 
+
+  Simon Dixon, Onset Detection Revisited, in ``Proceedings of the 9th
+  International Conference on Digital Audio Effects'' (DAFx-06), Montreal,
+  Canada, 2006. 
+
+  \param o onset detection object as returned by new_aubio_onsetdetection()
+  \param fftgrain input spectral frame
+  \param onset output onset detection function
+
+*/
+void aubio_onsetdetection_specflux(aubio_onsetdetection_t *o, cvec_t * fftgrain, fvec_t * onset);
+/** execute onset detection function on a spectral frame 
+
+  Generic function to compute onset detection.
+ 
+  \param o onset detection object as returned by new_aubio_onsetdetection()
+  \param fftgrain input signal spectrum as computed by aubio_pvoc_do
+  \param onset output vector (one sample long, to send to the peak picking)
+
+*/
+void aubio_onsetdetection(aubio_onsetdetection_t *o, cvec_t * fftgrain, fvec_t * onset);
+/** creation of an onset detection object 
+
+  \param type onset detection mode
+  \param size length of the input spectrum frame
+  \param channels number of input channels
+
+*/
+aubio_onsetdetection_t * new_aubio_onsetdetection(aubio_onsetdetection_type type, uint_t size, uint_t channels);
+/** deletion of an onset detection object
+
+  \param o onset detection object as returned by new_aubio_onsetdetection()
+
+*/
+void del_aubio_onsetdetection(aubio_onsetdetection_t *o);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* ONSETDETECTION_H */
--- /dev/null
+++ b/src/onset/peakpick.c
@@ -1,0 +1,184 @@
+/*
+   Copyright (C) 2003 Paul Brossier
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#include "aubio_priv.h"
+#include "fvec.h"
+#include "mathutils.h"
+#include "temporal/biquad.h"
+#include "onset/peakpick.h"
+
+/* peak picking parameters, default values in brackets
+ *
+ *	   [<----post----|--pre-->]
+ *	.................|.............
+ *	time->           ^now
+ */
+struct _aubio_pickpeak_t {
+	/** thresh: offset threshold [0.033 or 0.01] */
+	smpl_t threshold; 	
+	/** win_post: median filter window length (causal part) [8] */
+	uint_t 	win_post; 			
+	/** pre: median filter window (anti-causal part) [post-1] */
+	uint_t 	win_pre; 				
+	/** threshfn: name or handle of fn for computing adaptive threshold [median]  */
+	aubio_thresholdfn_t thresholdfn;
+	/** picker: name or handle of fn for picking event times [peakpick] */
+	aubio_pickerfn_t pickerfn;
+
+	/** biquad lowpass filter */
+	aubio_biquad_t * biquad;
+	/** original onsets */
+	fvec_t * onset_keep;
+	/** modified onsets */
+	fvec_t * onset_proc;
+	/** peak picked window [3] */
+	fvec_t * onset_peek;
+	/** scratch pad for biquad and median */
+	fvec_t * scratch;
+
+	/** \bug should be used to calculate filter coefficients */
+	/* cutoff: low-pass filter cutoff [0.34, 1] */
+	/* smpl_t cutoff; */
+
+	/* not used anymore */
+	/* time precision [512/44100  winlength/samplerate, fs/buffer_size */
+	/* smpl_t tau; */
+	/* alpha: normalisation exponent [9] */
+	/* smpl_t alpha; */
+};
+
+
+/** modified version for real time, moving mean adaptive threshold this method
+ * is slightly more permissive than the offline one, and yelds to an increase
+ * of false positives. best  */
+uint_t aubio_peakpick_pimrt(fvec_t * onset,  aubio_pickpeak_t * p) {
+	fvec_t * onset_keep = (fvec_t *)p->onset_keep;
+	fvec_t * onset_proc = (fvec_t *)p->onset_proc;
+	fvec_t * onset_peek = (fvec_t *)p->onset_peek;
+	fvec_t * scratch    = (fvec_t *)p->scratch;
+	smpl_t mean = 0., median = 0.;
+	uint_t length = p->win_post + p->win_pre + 1;
+	uint_t i = 0, j;
+
+	/* store onset in onset_keep */
+	/* shift all elements but last, then write last */
+	/* for (i=0;i<channels;i++) { */
+	for (j=0;j<length-1;j++) {
+		onset_keep->data[i][j] = onset_keep->data[i][j+1];
+		onset_proc->data[i][j] = onset_keep->data[i][j];
+	}
+	onset_keep->data[i][length-1] = onset->data[i][0];
+	onset_proc->data[i][length-1] = onset->data[i][0];
+	/* } */
+
+	/* filter onset_proc */
+	/** \bug filtfilt calculated post+pre times, should be only once !? */
+	aubio_biquad_do_filtfilt(p->biquad,onset_proc,scratch);
+
+	/* calculate mean and median for onset_proc */
+	/* for (i=0;i<onset_proc->channels;i++) { */
+	mean = vec_mean(onset_proc);
+	/* copy to scratch */
+	for (j = 0; j < length; j++)
+		scratch->data[i][j] = onset_proc->data[i][j];
+	median = p->thresholdfn(scratch);
+	/* } */
+
+	/* for (i=0;i<onset->channels;i++) { */
+	/* shift peek array */
+	for (j=0;j<3-1;j++) 
+		onset_peek->data[i][j] = onset_peek->data[i][j+1];
+	/* calculate new peek value */
+	onset_peek->data[i][2] = 
+		onset_proc->data[i][p->win_post] - median - mean * p->threshold;
+	/* } */
+	//AUBIO_DBG("%f\n", onset_peek->data[0][2]);
+	return (p->pickerfn)(onset_peek,1);
+}
+
+/** this method returns the current value in the pick peaking buffer
+ * after smoothing
+ */
+smpl_t aubio_peakpick_pimrt_getval(aubio_pickpeak_t * p) 
+{
+	uint_t i = 0;
+	return p->onset_peek->data[i][1];
+}
+
+/** function added by Miguel Ramirez to return the onset detection amplitude in peakval */
+uint_t aubio_peakpick_pimrt_wt(fvec_t * onset,  aubio_pickpeak_t * p, smpl_t* peakval) 
+{
+	uint_t isonset = 0;
+	isonset = aubio_peakpick_pimrt(onset,p);
+
+	//if ( isonset && peakval != NULL )
+	if ( peakval != NULL )
+		*peakval = aubio_peakpick_pimrt_getval(p); 
+
+	return isonset;
+}
+
+void aubio_peakpicker_set_threshold(aubio_pickpeak_t * p, smpl_t threshold) {
+	p->threshold = threshold;
+	return;
+}
+
+smpl_t aubio_peakpicker_get_threshold(aubio_pickpeak_t * p) {
+	return p->threshold;
+}
+
+void aubio_peakpicker_set_thresholdfn(aubio_pickpeak_t * p, aubio_thresholdfn_t thresholdfn) {
+	p->thresholdfn = thresholdfn;
+	return;
+}
+
+aubio_thresholdfn_t aubio_peakpicker_get_thresholdfn(aubio_pickpeak_t * p) {
+	return (aubio_thresholdfn_t) (p->thresholdfn);
+}
+
+aubio_pickpeak_t * new_aubio_peakpicker(smpl_t threshold) {
+	aubio_pickpeak_t * t = AUBIO_NEW(aubio_pickpeak_t);
+	t->threshold = 0.1; /* 0.0668; 0.33; 0.082; 0.033; */
+	if (threshold > 0. && threshold < 10.)
+		t->threshold = threshold;
+	t->win_post  = 5;
+	t->win_pre   = 1;
+
+	t->thresholdfn = (aubio_thresholdfn_t)(vec_median); /* (vec_mean); */
+	t->pickerfn = (aubio_pickerfn_t)(vec_peakpick);
+
+	t->scratch = new_fvec(t->win_post+t->win_pre+1,1);
+	t->onset_keep = new_fvec(t->win_post+t->win_pre+1,1);
+	t->onset_proc = new_fvec(t->win_post+t->win_pre+1,1);
+	t->onset_peek = new_fvec(3,1);
+
+	/* cutoff: low-pass filter cutoff [0.34, 1] */
+	/* t->cutoff=0.34; */
+	t->biquad = new_aubio_biquad(0.1600,0.3200,0.1600,-0.5949,0.2348);
+	return t;
+}
+
+void del_aubio_peakpicker(aubio_pickpeak_t * p) {
+	del_aubio_biquad(p->biquad);
+	del_fvec(p->onset_keep);
+	del_fvec(p->onset_proc);
+	del_fvec(p->onset_peek);
+	del_fvec(p->scratch);
+	AUBIO_FREE(p);
+}
--- /dev/null
+++ b/src/onset/peakpick.h
@@ -1,0 +1,64 @@
+/*
+	 Copyright (C) 2003 Paul Brossier
+
+	 This program is free software; you can redistribute it and/or modify
+	 it under the terms of the GNU General Public License as published by
+	 the Free Software Foundation; either version 2 of the License, or
+	 (at your option) any later version.
+
+	 This program is distributed in the hope that it will be useful,
+	 but WITHOUT ANY WARRANTY; without even the implied warranty of
+	 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+	 GNU General Public License for more details.
+
+	 You should have received a copy of the GNU General Public License
+	 along with this program; if not, write to the Free Software
+	 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+/** \file
+ * peak picking utilities function
+ * 
+ * \todo check/fix peak picking
+ */
+
+#ifndef PEAKPICK_H
+#define PEAKPICK_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** function pointer to thresholding function */
+typedef smpl_t (*aubio_thresholdfn_t)(fvec_t *input);
+/** function pointer to peak-picking function */
+typedef uint_t (*aubio_pickerfn_t)(fvec_t *input, uint_t pos);
+/** peak-picker structure */
+typedef struct _aubio_pickpeak_t aubio_pickpeak_t;
+
+/** peak-picker creation function */
+aubio_pickpeak_t * new_aubio_peakpicker(smpl_t threshold);
+/** real time peak picking function */
+uint_t aubio_peakpick_pimrt(fvec_t * DF, aubio_pickpeak_t * p);
+/** function added by Miguel Ramirez to return the onset detection amplitude in peakval */
+uint_t aubio_peakpick_pimrt_wt( fvec_t* DF, aubio_pickpeak_t* p, smpl_t* peakval );
+/** get current peak value */
+smpl_t aubio_peakpick_pimrt_getval(aubio_pickpeak_t * p);
+/** destroy peak picker structure */
+void del_aubio_peakpicker(aubio_pickpeak_t * p);
+
+/** set peak picking threshold */
+void aubio_peakpicker_set_threshold(aubio_pickpeak_t * p, smpl_t threshold);
+/** get peak picking threshold */
+smpl_t aubio_peakpicker_get_threshold(aubio_pickpeak_t * p);
+/** set peak picker thresholding function */
+void aubio_peakpicker_set_thresholdfn(aubio_pickpeak_t * p, aubio_thresholdfn_t thresholdfn);
+/** get peak picker thresholding function */
+aubio_thresholdfn_t aubio_peakpicker_get_thresholdfn(aubio_pickpeak_t * p);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* PEAKPICK_H */
--- a/src/onsetdetection.c
+++ /dev/null
@@ -1,324 +1,0 @@
-/*
-   Copyright (C) 2003 Paul Brossier
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-*/
-
-#include "aubio_priv.h"
-#include "sample.h"
-#include "fft.h"
-#include "mathutils.h"
-#include "hist.h"
-#include "onsetdetection.h"
-
-
-/** structure to store object state */
-struct _aubio_onsetdetection_t {
-  aubio_onsetdetection_type type; /**< onset detection type */
-  /** Pointer to aubio_onsetdetection_<type> function */
-  void (*funcpointer)(aubio_onsetdetection_t *o,
-    cvec_t * fftgrain, fvec_t * onset);
-  smpl_t threshold;      /**< minimum norm threshold for phase and specdiff */
-  fvec_t *oldmag;        /**< previous norm vector */
-  fft_data_t *meas;      /**< current onset detection measure complex vector */
-  fvec_t *dev1 ;         /**< current onset detection measure vector */
-  fvec_t *theta1;        /**< previous phase vector, one frame behind */
-  fvec_t *theta2;        /**< previous phase vector, two frames behind */
-  aubio_hist_t * histog; /**< histogram */
-};
-
-
-/* Energy based onset detection function */
-void aubio_onsetdetection_energy  (aubio_onsetdetection_t *o UNUSED,
-		cvec_t * fftgrain, fvec_t * onset) {
-	uint_t i,j;
-	for (i=0;i<fftgrain->channels;i++) {
-		onset->data[i][0] = 0.;
-		for (j=0;j<fftgrain->length;j++) {
-			onset->data[i][0] += SQR(fftgrain->norm[i][j]);
-		}
-	}
-}
-
-/* High Frequency Content onset detection function */
-void aubio_onsetdetection_hfc(aubio_onsetdetection_t *o UNUSED,
-    cvec_t * fftgrain, fvec_t * onset){
-	uint_t i,j;
-	for (i=0;i<fftgrain->channels;i++) {
-		onset->data[i][0] = 0.;
-		for (j=0;j<fftgrain->length;j++) {
-			onset->data[i][0] += (j+1)*fftgrain->norm[i][j];
-		}
-	}
-}
-
-
-/* Complex Domain Method onset detection function */
-void aubio_onsetdetection_complex (aubio_onsetdetection_t *o, cvec_t * fftgrain, fvec_t * onset) {
-	uint_t i, j;
-	uint_t nbins = fftgrain->length;
-	for (i=0;i<fftgrain->channels; i++)	{
-		onset->data[i][0] = 0.;
-		for (j=0;j<nbins; j++)	{
-			o->dev1->data[i][j] 	 = aubio_unwrap2pi(
-					fftgrain->phas[i][j]
-					-2.0*o->theta1->data[i][j]+
-					o->theta2->data[i][j]);
-#ifdef HAVE_COMPLEX_H
-			o->meas[j] = fftgrain->norm[i][j]*CEXPC(I*o->dev1->data[i][j]);
-			/* sum on all bins */
-			onset->data[i][0]		 += //(fftgrain->norm[i][j]);
-					SQRT(SQR( REAL(o->oldmag->data[i][j]-o->meas[j]) )
-						+  SQR( IMAG(o->oldmag->data[i][j]-o->meas[j]) )
-						);
-#else
-			o->meas[j]             = (fftgrain->norm[i][j])*COS(o->dev1->data[i][j]);
-			o->meas[(nbins-1)*2-j] = (fftgrain->norm[i][j])*SIN(o->dev1->data[i][j]);
-			/* sum on all bins */
-			onset->data[i][0]		 += //(fftgrain->norm[i][j]);
-					SQRT(SQR( (o->oldmag->data[i][j]-o->meas[j]) )
-						+  SQR( (-o->meas[(nbins-1)*2-j]) )
-						);
-#endif
-			/* swap old phase data (need to remember 2 frames behind)*/
-			o->theta2->data[i][j] = o->theta1->data[i][j];
-			o->theta1->data[i][j] = fftgrain->phas[i][j];
-			/* swap old magnitude data (1 frame is enough) */
-			o->oldmag->data[i][j] = fftgrain->norm[i][j];
-		}
-	}
-}
-
-
-/* Phase Based Method onset detection function */
-void aubio_onsetdetection_phase(aubio_onsetdetection_t *o, 
-		cvec_t * fftgrain, fvec_t * onset){
-	uint_t i, j;
-	uint_t nbins = fftgrain->length;
-	for (i=0;i<fftgrain->channels; i++)	{
-		onset->data[i][0] = 0.0f;
-		o->dev1->data[i][0]=0.;
-		for ( j=0;j<nbins; j++ )	{
-			o->dev1->data[i][j] = 
-				aubio_unwrap2pi(
-						fftgrain->phas[i][j]
-						-2.0*o->theta1->data[i][j]
-						+o->theta2->data[i][j]);
-			if ( o->threshold < fftgrain->norm[i][j] )
-				o->dev1->data[i][j] = ABS(o->dev1->data[i][j]);
-			else 
-				o->dev1->data[i][j] = 0.0f;
-			/* keep a track of the past frames */
-			o->theta2->data[i][j] = o->theta1->data[i][j];
-			o->theta1->data[i][j] = fftgrain->phas[i][j];
-		}
-		/* apply o->histogram */
-		aubio_hist_dyn_notnull(o->histog,o->dev1);
-		/* weight it */
-		aubio_hist_weight(o->histog);
-		/* its mean is the result */
-		onset->data[i][0] = aubio_hist_mean(o->histog);	
-		//onset->data[i][0] = vec_mean(o->dev1);
-	}
-}
-
-/* Spectral difference method onset detection function */
-void aubio_onsetdetection_specdiff(aubio_onsetdetection_t *o,
-		cvec_t * fftgrain, fvec_t * onset){
-	uint_t i, j;
-	uint_t nbins = fftgrain->length;
-	for (i=0;i<fftgrain->channels; i++)	{
-		onset->data[i][0] = 0.0f;
-		for (j=0;j<nbins; j++)	{
-			o->dev1->data[i][j] = SQRT(
-					ABS(SQR( fftgrain->norm[i][j])
-						- SQR(o->oldmag->data[i][j])));
-			if (o->threshold < fftgrain->norm[i][j] )
-				o->dev1->data[i][j] = ABS(o->dev1->data[i][j]);
-			else 
-				o->dev1->data[i][j] = 0.0f;
-			o->oldmag->data[i][j] = fftgrain->norm[i][j];
-		}
-
-		/* apply o->histogram (act somewhat as a low pass on the
-		 * overall function)*/
-		aubio_hist_dyn_notnull(o->histog,o->dev1);
-		/* weight it */
-		aubio_hist_weight(o->histog);
-		/* its mean is the result */
-		onset->data[i][0] = aubio_hist_mean(o->histog);	
-
-	}
-}
-
-/* Kullback Liebler onset detection function
- * note we use ln(1+Xn/(Xn-1+0.0001)) to avoid 
- * negative (1.+) and infinite values (+1.e-10) */
-void aubio_onsetdetection_kl(aubio_onsetdetection_t *o, cvec_t * fftgrain, fvec_t * onset){
-        uint_t i,j;
-        for (i=0;i<fftgrain->channels;i++) {
-                onset->data[i][0] = 0.;
-                for (j=0;j<fftgrain->length;j++) {
-                        onset->data[i][0] += fftgrain->norm[i][j]
-                                *LOG(1.+fftgrain->norm[i][j]/(o->oldmag->data[i][j]+1.e-10));
-                        o->oldmag->data[i][j] = fftgrain->norm[i][j];
-                }
-                if (isnan(onset->data[i][0])) onset->data[i][0] = 0.;
-        }
-}
-
-/* Modified Kullback Liebler onset detection function
- * note we use ln(1+Xn/(Xn-1+0.0001)) to avoid 
- * negative (1.+) and infinite values (+1.e-10) */
-void aubio_onsetdetection_mkl(aubio_onsetdetection_t *o, cvec_t * fftgrain, fvec_t * onset){
-	uint_t i,j;
-	for (i=0;i<fftgrain->channels;i++) {
-		onset->data[i][0] = 0.;
-		for (j=0;j<fftgrain->length;j++) {
-			onset->data[i][0] += LOG(1.+fftgrain->norm[i][j]/(o->oldmag->data[i][j]+1.e-10));
-			o->oldmag->data[i][j] = fftgrain->norm[i][j];
-		}
-                if (isnan(onset->data[i][0])) onset->data[i][0] = 0.;
-	}
-}
-
-/* Generic function pointing to the choosen one */
-void 
-aubio_onsetdetection(aubio_onsetdetection_t *o, cvec_t * fftgrain, 
-		fvec_t * onset) {
-	o->funcpointer(o,fftgrain,onset);
-}
-
-/* Allocate memory for an onset detection 
- * depending on the choosen type, allocate memory as needed
- */
-aubio_onsetdetection_t * 
-new_aubio_onsetdetection (aubio_onsetdetection_type type, 
-		uint_t size, uint_t channels){
-	aubio_onsetdetection_t * o = AUBIO_NEW(aubio_onsetdetection_t);
-	uint_t rsize = size/2+1;
-  uint_t i;
-	switch(type) {
-		/* for both energy and hfc, only fftgrain->norm is required */
-		case aubio_onset_energy: 
-			break;
-		case aubio_onset_hfc:
-			break;
-		/* the other approaches will need some more memory spaces */
-		case aubio_onset_complex:
-			o->oldmag = new_fvec(rsize,channels);
-			/** bug: must be complex array */
-			o->meas = AUBIO_ARRAY(fft_data_t,size+1);
-			for (i=0; i<size+1; i++) o->meas[i] = 0;
-			o->dev1	 = new_fvec(rsize,channels);
-			o->theta1 = new_fvec(rsize,channels);
-			o->theta2 = new_fvec(rsize,channels);
-			break;
-		case aubio_onset_phase:
-			o->dev1	 = new_fvec(rsize,channels);
-			o->theta1 = new_fvec(rsize,channels);
-			o->theta2 = new_fvec(rsize,channels);
-			o->histog = new_aubio_hist(0.0f, PI, 10, channels);
-			o->threshold = 0.1;
-			break;
-		case aubio_onset_specdiff:
-			o->oldmag = new_fvec(rsize,channels);
-			o->dev1	  = new_fvec(rsize,channels);
-			o->histog = new_aubio_hist(0.0f, PI, 10, channels);
-			o->threshold = 0.1;
-			break;
-                case aubio_onset_kl:
-			o->oldmag = new_fvec(rsize,channels);
-                        break;
-                case aubio_onset_mkl:
-			o->oldmag = new_fvec(rsize,channels);
-                        break;
-		default:
-			break;
-	}
-	
-	/* this switch could be in its own function to change between
-	 * detections on the fly. this would need getting rid of the switch
-	 * above and always allocate all the structure */
-
-	switch(type) {
-		case aubio_onset_energy:
-			o->funcpointer = aubio_onsetdetection_energy;
-			break;
-		case aubio_onset_hfc:
-			o->funcpointer = aubio_onsetdetection_hfc;
-			break;
-		case aubio_onset_complex:
-			o->funcpointer = aubio_onsetdetection_complex;
-			break;
-		case aubio_onset_phase:
-			o->funcpointer = aubio_onsetdetection_phase;
-			break;
-		case aubio_onset_specdiff:
-			o->funcpointer = aubio_onsetdetection_specdiff;
-			break;
-                case aubio_onset_kl:
-			o->funcpointer = aubio_onsetdetection_kl;
-			break;
-                case aubio_onset_mkl:
-			o->funcpointer = aubio_onsetdetection_mkl;
-			break;
-		default:
-			break;
-	}
-	o->type = type;
-	return o;
-}
-
-void del_aubio_onsetdetection (aubio_onsetdetection_t *o){
-
-	switch(o->type) {
-		/* for both energy and hfc, only fftgrain->norm is required */
-		case aubio_onset_energy: 
-			break;
-		case aubio_onset_hfc:
-			break;
-		/* the other approaches will need some more memory spaces */
-		case aubio_onset_complex:
-	                AUBIO_FREE(o->meas);
-                        del_fvec(o->oldmag);
-	                del_fvec(o->dev1);
-	                del_fvec(o->theta1);
-                	del_fvec(o->theta2);
-			break;
-		case aubio_onset_phase:
-	                del_fvec(o->dev1);
-	                del_fvec(o->theta1);
-                	del_fvec(o->theta2);
-                        del_aubio_hist(o->histog);
-			break;
-		case aubio_onset_specdiff:
-                        del_fvec(o->oldmag);
-	                del_fvec(o->dev1);
-                        del_aubio_hist(o->histog);
-			break;
-		case aubio_onset_kl:
-	                del_fvec(o->oldmag);
-			break;
-		case aubio_onset_mkl:
-	                del_fvec(o->oldmag);
-			break;
-		default:
-			break;
-	}
-        AUBIO_FREE(o);
-	
-}
--- a/src/onsetdetection.h
+++ /dev/null
@@ -1,168 +1,0 @@
-/*
-	 Copyright (C) 2003 Paul Brossier
-
-	 This program is free software; you can redistribute it and/or modify
-	 it under the terms of the GNU General Public License as published by
-	 the Free Software Foundation; either version 2 of the License, or
-	 (at your option) any later version.
-
-	 This program is distributed in the hope that it will be useful,
-	 but WITHOUT ANY WARRANTY; without even the implied warranty of
-	 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-	 GNU General Public License for more details.
-
-	 You should have received a copy of the GNU General Public License
-	 along with this program; if not, write to the Free Software
-	 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-	 
-*/
-
-/** \file
- 
-  Onset detection functions
- 
-  All of the following onset detection function take as arguments the FFT of a
-  windowed signal (as created with aubio_pvoc). They output one smpl_t per
-  buffer and per channel (stored in a vector of size [channels]x[1]).
- 
-  These functions were first adapted from Juan Pablo Bello's code, and now
-  include further improvements and modifications made within aubio.
-
-*/
-
-
-#ifndef ONSETDETECTION_H
-#define ONSETDETECTION_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** onsetdetection types */
-typedef enum {
-        aubio_onset_energy,         /**< energy based */          
-        aubio_onset_specdiff,       /**< spectral diff */         
-        aubio_onset_hfc,            /**< high frequency content */
-        aubio_onset_complex,        /**< complex domain */        
-        aubio_onset_phase,          /**< phase fast */            
-        aubio_onset_kl,             /**< Kullback Liebler */
-        aubio_onset_mkl             /**< modified Kullback Liebler */
-} aubio_onsetdetection_type;
-
-/** onsetdetection structure */
-typedef struct _aubio_onsetdetection_t aubio_onsetdetection_t;
-/** Energy based onset detection function 
- 
-  This function calculates the local energy of the input spectral frame.
-  
-  \param o onset detection object as returned by new_aubio_onsetdetection()
-  \param fftgrain input spectral frame
-  \param onset output onset detection function
-
-*/
-void aubio_onsetdetection_energy(aubio_onsetdetection_t *o, cvec_t * fftgrain, fvec_t * onset);
-/** High Frequency Content onset detection function
- 
-  This method computes the High Frequency Content (HFC) of the input spectral
-  frame. The resulting function is efficient at detecting percussive onsets.
-
-  Paul Masri. Computer modeling of Sound for Transformation and Synthesis of
-  Musical Signal. PhD dissertation, University of Bristol, UK, 1996.
-  
-  \param o onset detection object as returned by new_aubio_onsetdetection()
-  \param fftgrain input spectral frame
-  \param onset output onset detection function
-
-*/
-void aubio_onsetdetection_hfc(aubio_onsetdetection_t *o, cvec_t * fftgrain, fvec_t * onset);
-/** Complex Domain Method onset detection function 
- 
-  Christopher Duxbury, Mike E. Davies, and Mark B. Sandler. Complex domain
-  onset detection for musical signals. In Proceedings of the Digital Audio
-  Effects Conference, DAFx-03, pages 90-93, London, UK, 2003.
-
-  \param o onset detection object as returned by new_aubio_onsetdetection()
-  \param fftgrain input spectral frame
-  \param onset output onset detection function
-
-*/
-void aubio_onsetdetection_complex(aubio_onsetdetection_t *o, cvec_t * fftgrain, fvec_t * onset);
-/** Phase Based Method onset detection function 
-
-  Juan-Pablo Bello, Mike P. Davies, and Mark B. Sandler. Phase-based note onset
-  detection for music signals. In Proceedings of the IEEE International
-  Conference on Acoustics Speech and Signal Processing, pages 441­444,
-  Hong-Kong, 2003.
-
-  \param o onset detection object as returned by new_aubio_onsetdetection()
-  \param fftgrain input spectral frame
-  \param onset output onset detection function
-
-*/
-void aubio_onsetdetection_phase(aubio_onsetdetection_t *o, cvec_t * fftgrain, fvec_t * onset);
-/** Spectral difference method onset detection function 
-
-  Jonhatan Foote and Shingo Uchihashi. The beat spectrum: a new approach to
-  rhythm analysis. In IEEE International Conference on Multimedia and Expo
-  (ICME 2001), pages 881­884, Tokyo, Japan, August 2001.
-
-  \param o onset detection object as returned by new_aubio_onsetdetection()
-  \param fftgrain input spectral frame
-  \param onset output onset detection function
-
-*/
-void aubio_onsetdetection_specdiff(aubio_onsetdetection_t *o, cvec_t * fftgrain, fvec_t * onset);
-/** Kullback-Liebler onset detection function 
-  
-  Stephen Hainsworth and Malcom Macleod. Onset detection in music audio
-  signals. In Proceedings of the International Computer Music Conference
-  (ICMC), Singapore, 2003.
-  
-  \param o onset detection object as returned by new_aubio_onsetdetection()
-  \param fftgrain input spectral frame
-  \param onset output onset detection function
-
-*/
-void aubio_onsetdetection_kl(aubio_onsetdetection_t *o, cvec_t * fftgrain, fvec_t * onset);
-/** Modified Kullback-Liebler onset detection function 
-
-  Paul Brossier, ``Automatic annotation of musical audio for interactive
-  systems'', Chapter 2, Temporal segmentation, PhD thesis, Centre for Digital
-  music, Queen Mary University of London, London, UK, 2006.
-
-  \param o onset detection object as returned by new_aubio_onsetdetection()
-  \param fftgrain input spectral frame
-  \param onset output onset detection function
-
-*/
-void aubio_onsetdetection_mkl(aubio_onsetdetection_t *o, cvec_t * fftgrain, fvec_t * onset);
-/** execute onset detection function on a spectral frame 
-
-  Generic function to compute onset detection.
- 
-  \param o onset detection object as returned by new_aubio_onsetdetection()
-  \param fftgrain input signal spectrum as computed by aubio_pvoc_do
-  \param onset output vector (one sample long, to send to the peak picking)
-
-*/
-void aubio_onsetdetection(aubio_onsetdetection_t *o, cvec_t * fftgrain, fvec_t * onset);
-/** creation of an onset detection object 
-
-  \param type onset detection mode
-  \param size length of the input spectrum frame
-  \param channels number of input channels
-
-*/
-aubio_onsetdetection_t * new_aubio_onsetdetection(aubio_onsetdetection_type type, uint_t size, uint_t channels);
-/** deletion of an onset detection object
-
-  \param o onset detection object as returned by new_aubio_onsetdetection()
-
-*/
-void del_aubio_onsetdetection(aubio_onsetdetection_t *o);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* ONSETDETECTION_H */
--- a/src/peakpick.c
+++ /dev/null
@@ -1,184 +1,0 @@
-/*
-   Copyright (C) 2003 Paul Brossier
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-*/
-
-#include "aubio_priv.h"
-#include "sample.h"
-#include "mathutils.h"
-#include "biquad.h"
-#include "peakpick.h"
-
-/* peak picking parameters, default values in brackets
- *
- *	   [<----post----|--pre-->]
- *	.................|.............
- *	time->           ^now
- */
-struct _aubio_pickpeak_t {
-	/** thresh: offset threshold [0.033 or 0.01] */
-	smpl_t threshold; 	
-	/** win_post: median filter window length (causal part) [8] */
-	uint_t 	win_post; 			
-	/** pre: median filter window (anti-causal part) [post-1] */
-	uint_t 	win_pre; 				
-	/** threshfn: name or handle of fn for computing adaptive threshold [median]  */
-	aubio_thresholdfn_t thresholdfn;
-	/** picker: name or handle of fn for picking event times [peakpick] */
-	aubio_pickerfn_t pickerfn;
-
-	/** biquad lowpass filter */
-	aubio_biquad_t * biquad;
-	/** original onsets */
-	fvec_t * onset_keep;
-	/** modified onsets */
-	fvec_t * onset_proc;
-	/** peak picked window [3] */
-	fvec_t * onset_peek;
-	/** scratch pad for biquad and median */
-	fvec_t * scratch;
-
-	/** \bug should be used to calculate filter coefficients */
-	/* cutoff: low-pass filter cutoff [0.34, 1] */
-	/* smpl_t cutoff; */
-
-	/* not used anymore */
-	/* time precision [512/44100  winlength/samplerate, fs/buffer_size */
-	/* smpl_t tau; */
-	/* alpha: normalisation exponent [9] */
-	/* smpl_t alpha; */
-};
-
-
-/** modified version for real time, moving mean adaptive threshold this method
- * is slightly more permissive than the offline one, and yelds to an increase
- * of false positives. best  */
-uint_t aubio_peakpick_pimrt(fvec_t * onset,  aubio_pickpeak_t * p) {
-	fvec_t * onset_keep = (fvec_t *)p->onset_keep;
-	fvec_t * onset_proc = (fvec_t *)p->onset_proc;
-	fvec_t * onset_peek = (fvec_t *)p->onset_peek;
-	fvec_t * scratch    = (fvec_t *)p->scratch;
-	smpl_t mean = 0., median = 0.;
-	uint_t length = p->win_post + p->win_pre + 1;
-	uint_t i = 0, j;
-
-	/* store onset in onset_keep */
-	/* shift all elements but last, then write last */
-	/* for (i=0;i<channels;i++) { */
-	for (j=0;j<length-1;j++) {
-		onset_keep->data[i][j] = onset_keep->data[i][j+1];
-		onset_proc->data[i][j] = onset_keep->data[i][j];
-	}
-	onset_keep->data[i][length-1] = onset->data[i][0];
-	onset_proc->data[i][length-1] = onset->data[i][0];
-	/* } */
-
-	/* filter onset_proc */
-	/** \bug filtfilt calculated post+pre times, should be only once !? */
-	aubio_biquad_do_filtfilt(p->biquad,onset_proc,scratch);
-
-	/* calculate mean and median for onset_proc */
-	/* for (i=0;i<onset_proc->channels;i++) { */
-	mean = vec_mean(onset_proc);
-	/* copy to scratch */
-	for (j = 0; j < length; j++)
-		scratch->data[i][j] = onset_proc->data[i][j];
-	median = p->thresholdfn(scratch);
-	/* } */
-
-	/* for (i=0;i<onset->channels;i++) { */
-	/* shift peek array */
-	for (j=0;j<3-1;j++) 
-		onset_peek->data[i][j] = onset_peek->data[i][j+1];
-	/* calculate new peek value */
-	onset_peek->data[i][2] = 
-		onset_proc->data[i][p->win_post] - median - mean * p->threshold;
-	/* } */
-	//AUBIO_DBG("%f\n", onset_peek->data[0][2]);
-	return (p->pickerfn)(onset_peek,1);
-}
-
-/** this method returns the current value in the pick peaking buffer
- * after smoothing
- */
-smpl_t aubio_peakpick_pimrt_getval(aubio_pickpeak_t * p) 
-{
-	uint_t i = 0;
-	return p->onset_peek->data[i][1];
-}
-
-/** function added by Miguel Ramirez to return the onset detection amplitude in peakval */
-uint_t aubio_peakpick_pimrt_wt(fvec_t * onset,  aubio_pickpeak_t * p, smpl_t* peakval) 
-{
-	uint_t isonset = 0;
-	isonset = aubio_peakpick_pimrt(onset,p);
-
-	//if ( isonset && peakval != NULL )
-	if ( peakval != NULL )
-		*peakval = aubio_peakpick_pimrt_getval(p); 
-
-	return isonset;
-}
-
-void aubio_peakpicker_set_threshold(aubio_pickpeak_t * p, smpl_t threshold) {
-	p->threshold = threshold;
-	return;
-}
-
-smpl_t aubio_peakpicker_get_threshold(aubio_pickpeak_t * p) {
-	return p->threshold;
-}
-
-void aubio_peakpicker_set_thresholdfn(aubio_pickpeak_t * p, aubio_thresholdfn_t thresholdfn) {
-	p->thresholdfn = thresholdfn;
-	return;
-}
-
-aubio_thresholdfn_t aubio_peakpicker_get_thresholdfn(aubio_pickpeak_t * p) {
-	return (aubio_thresholdfn_t) (p->thresholdfn);
-}
-
-aubio_pickpeak_t * new_aubio_peakpicker(smpl_t threshold) {
-	aubio_pickpeak_t * t = AUBIO_NEW(aubio_pickpeak_t);
-	t->threshold = 0.1; /* 0.0668; 0.33; 0.082; 0.033; */
-	if (threshold > 0. && threshold < 10.)
-		t->threshold = threshold;
-	t->win_post  = 5;
-	t->win_pre   = 1;
-
-	t->thresholdfn = (aubio_thresholdfn_t)(vec_median); /* (vec_mean); */
-	t->pickerfn = (aubio_pickerfn_t)(vec_peakpick);
-
-	t->scratch = new_fvec(t->win_post+t->win_pre+1,1);
-	t->onset_keep = new_fvec(t->win_post+t->win_pre+1,1);
-	t->onset_proc = new_fvec(t->win_post+t->win_pre+1,1);
-	t->onset_peek = new_fvec(3,1);
-
-	/* cutoff: low-pass filter cutoff [0.34, 1] */
-	/* t->cutoff=0.34; */
-	t->biquad = new_aubio_biquad(0.1600,0.3200,0.1600,-0.5949,0.2348);
-	return t;
-}
-
-void del_aubio_peakpicker(aubio_pickpeak_t * p) {
-	del_aubio_biquad(p->biquad);
-	del_fvec(p->onset_keep);
-	del_fvec(p->onset_proc);
-	del_fvec(p->onset_peek);
-	del_fvec(p->scratch);
-	AUBIO_FREE(p);
-}
--- a/src/peakpick.h
+++ /dev/null
@@ -1,64 +1,0 @@
-/*
-	 Copyright (C) 2003 Paul Brossier
-
-	 This program is free software; you can redistribute it and/or modify
-	 it under the terms of the GNU General Public License as published by
-	 the Free Software Foundation; either version 2 of the License, or
-	 (at your option) any later version.
-
-	 This program is distributed in the hope that it will be useful,
-	 but WITHOUT ANY WARRANTY; without even the implied warranty of
-	 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-	 GNU General Public License for more details.
-
-	 You should have received a copy of the GNU General Public License
-	 along with this program; if not, write to the Free Software
-	 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-*/
-
-/** \file
- * peak picking utilities function
- * 
- * \todo check/fix peak picking
- */
-
-#ifndef PEAKPICK_H
-#define PEAKPICK_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** function pointer to thresholding function */
-typedef smpl_t (*aubio_thresholdfn_t)(fvec_t *input);
-/** function pointer to peak-picking function */
-typedef uint_t (*aubio_pickerfn_t)(fvec_t *input, uint_t pos);
-/** peak-picker structure */
-typedef struct _aubio_pickpeak_t aubio_pickpeak_t;
-
-/** peak-picker creation function */
-aubio_pickpeak_t * new_aubio_peakpicker(smpl_t threshold);
-/** real time peak picking function */
-uint_t aubio_peakpick_pimrt(fvec_t * DF, aubio_pickpeak_t * p);
-/** function added by Miguel Ramirez to return the onset detection amplitude in peakval */
-uint_t aubio_peakpick_pimrt_wt( fvec_t* DF, aubio_pickpeak_t* p, smpl_t* peakval );
-/** get current peak value */
-smpl_t aubio_peakpick_pimrt_getval(aubio_pickpeak_t * p);
-/** destroy peak picker structure */
-void del_aubio_peakpicker(aubio_pickpeak_t * p);
-
-/** set peak picking threshold */
-void aubio_peakpicker_set_threshold(aubio_pickpeak_t * p, smpl_t threshold);
-/** get peak picking threshold */
-smpl_t aubio_peakpicker_get_threshold(aubio_pickpeak_t * p);
-/** set peak picker thresholding function */
-void aubio_peakpicker_set_thresholdfn(aubio_pickpeak_t * p, aubio_thresholdfn_t thresholdfn);
-/** get peak picker thresholding function */
-aubio_thresholdfn_t aubio_peakpicker_get_thresholdfn(aubio_pickpeak_t * p);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* PEAKPICK_H */
--- a/src/phasevoc.c
+++ /dev/null
@@ -1,150 +1,0 @@
-/*
-   Copyright (C) 2003 Paul Brossier
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-*/
-
-#include "aubio_priv.h"
-#include "fvec.h"
-#include "cvec.h"
-#include "fft.h"
-#include "mathutils.h"
-#include "phasevoc.h"
-
-/** phasevocoder internal object */
-struct _aubio_pvoc_t {
-  uint_t win_s;       /** grain length */
-  uint_t hop_s;       /** overlap step */
-  uint_t channels;    /** number of channels */
-  aubio_fft_t * fft;  /** fft object */
-  fvec_t * synth;     /** cur output grain [win_s] */
-  fvec_t * synthold;  /** last input frame [win_s-hop_s] */
-  fvec_t * data;      /** current input grain [win_s] */
-  fvec_t * dataold;   /** last input frame [win_s-hop_s] */
-  smpl_t * w;         /** grain window [win_s] */
-};
-
-
-/** returns data and dataold slided by hop_s */
-static void aubio_pvoc_swapbuffers(smpl_t * data, smpl_t * dataold, const
-    smpl_t * datanew, uint_t win_s, uint_t hop_s);
-
-/** do additive synthesis from 'old' and 'cur' */
-static void aubio_pvoc_addsynth(const smpl_t * synth, smpl_t * synthold,
-    smpl_t * synthnew, uint_t win_s, uint_t hop_s);
-
-void aubio_pvoc_do(aubio_pvoc_t *pv, fvec_t * datanew, cvec_t *fftgrain) {
-  uint_t i,j;
-  for (i=0; i<pv->channels; i++) {
-    /* slide  */
-    aubio_pvoc_swapbuffers(pv->data->data[i],pv->dataold->data[i],
-        datanew->data[i],pv->win_s,pv->hop_s);
-    /* windowing */
-    for (j=0; j<pv->win_s; j++) pv->data->data[i][j] *= pv->w[j];
-  }
-  /* shift */
-  vec_shift(pv->data);
-  /* calculate fft */
-  aubio_fft_do (pv->fft,pv->data,fftgrain);
-}
-
-void aubio_pvoc_rdo(aubio_pvoc_t *pv,cvec_t * fftgrain, fvec_t * synthnew) {
-  uint_t i;
-  /* calculate rfft */
-  aubio_fft_rdo(pv->fft,fftgrain,pv->synth);
-  /* unshift */
-  vec_shift(pv->synth);
-  for (i=0; i<pv->channels; i++) {
-    aubio_pvoc_addsynth(pv->synth->data[i],pv->synthold->data[i],
-        synthnew->data[i],pv->win_s,pv->hop_s);
-  }
-}
-
-aubio_pvoc_t * new_aubio_pvoc (uint_t win_s, uint_t hop_s, uint_t channels) {
-  aubio_pvoc_t * pv = AUBIO_NEW(aubio_pvoc_t);
-
-  if (win_s < 2*hop_s) {
-    AUBIO_ERR("Hop size bigger than half the window size!\n");
-    AUBIO_ERR("Resetting hop size to half the window size.\n");
-    hop_s = win_s / 2;
-  }
-
-  if (hop_s < 1) {
-    AUBIO_ERR("Hop size is smaller than 1!\n");
-    AUBIO_ERR("Resetting hop size to half the window size.\n");
-    hop_s = win_s / 2;
-  }
-
-  pv->fft      = new_aubio_fft(win_s,channels);
-
-  /* remember old */
-  pv->data     = new_fvec (win_s, channels);
-  pv->synth    = new_fvec (win_s, channels);
-
-  /* new input output */
-  pv->dataold  = new_fvec  (win_s-hop_s, channels);
-  pv->synthold = new_fvec (win_s-hop_s, channels);
-  pv->w        = AUBIO_ARRAY(smpl_t,win_s);
-  aubio_window(pv->w,win_s,aubio_win_hanningz);
-
-  pv->channels = channels;
-  pv->hop_s    = hop_s;
-  pv->win_s    = win_s;
-
-  return pv;
-}
-
-void del_aubio_pvoc(aubio_pvoc_t *pv) {
-  del_fvec(pv->data);
-  del_fvec(pv->synth);
-  del_fvec(pv->dataold);
-  del_fvec(pv->synthold);
-  del_aubio_fft(pv->fft);
-  AUBIO_FREE(pv->w);
-  AUBIO_FREE(pv);
-}
-
-static void aubio_pvoc_swapbuffers(smpl_t * data, smpl_t * dataold, 
-    const smpl_t * datanew, uint_t win_s, uint_t hop_s)
-{
-  uint_t i;
-  for (i=0;i<win_s-hop_s;i++)
-    data[i] = dataold[i];
-  for (i=0;i<hop_s;i++)
-    data[win_s-hop_s+i] = datanew[i];
-  for (i=0;i<win_s-hop_s;i++)
-    dataold[i] = data[i+hop_s];
-}
-
-static void aubio_pvoc_addsynth(const smpl_t * synth, smpl_t * synthold, 
-                smpl_t * synthnew, uint_t win_s, uint_t hop_s)
-{
-  uint_t i;
-  smpl_t scale = 2*hop_s/(win_s+.0);
-  /* add new synth to old one and put result in synthnew */
-  for (i=0;i<hop_s;i++)
-    synthnew[i] = synthold[i]+synth[i]*scale;
-  /* shift synthold */
-  for (i=0;i<win_s-2*hop_s;i++)
-    synthold[i] = synthold[i+hop_s];
-  /* erase last frame in synthold */
-  for (i=win_s-hop_s;i<win_s;i++)
-    synthold[i-hop_s]=0.;
-  /* additive synth */
-  for (i=0;i<win_s-hop_s;i++)
-    synthold[i] += synth[i+hop_s]*scale;
-}
-
--- a/src/phasevoc.h
+++ /dev/null
@@ -1,106 +1,0 @@
-/*
-   Copyright (C) 2003 Paul Brossier
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-*/
-
-/** \file
-
-  Phase vocoder object
-
-  This object implements a phase vocoder. The spectral frames are computed
-  using a HanningZ window and a swapped version of the signal to simplify the
-  phase relationships across frames. The window sizes and overlap are specified
-  at creation time. Multiple channels are fully supported.
-
-*/
-
-#ifndef _PHASEVOC_H
-#define _PHASEVOC_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** phasevocoder object */
-typedef struct _aubio_pvoc_t aubio_pvoc_t;
-
-/** create phase vocoder object
-
-  \param win_s size of analysis buffer (and length the FFT transform)
-  \param hop_s step size between two consecutive analysis
-  \param channels number of channels
-
-*/
-aubio_pvoc_t * new_aubio_pvoc (uint_t win_s, uint_t hop_s, uint_t channels);
-/** delete phase vocoder object
-
-  \param pv phase vocoder object as returned by new_aubio_pvoc
-
-*/
-void del_aubio_pvoc(aubio_pvoc_t *pv);
-
-/** compute spectral frame
-  
-  This function accepts an input vector of size [channels]x[hop_s]. The
-  analysis buffer is rotated and filled with the new data. After windowing of
-  this signal window, the Fourier transform is computed and returned in
-  fftgrain as two vectors, magnitude and phase.
-
-  \param pv phase vocoder object as returned by new_aubio_pvoc
-  \param in new input signal (hop_s long) 
-  \param fftgrain output spectral frame
-
-*/
-void aubio_pvoc_do(aubio_pvoc_t *pv, fvec_t *in, cvec_t * fftgrain);
-/** compute signal from spectral frame
-
-  This function takes an input spectral frame fftgrain of size
-  [channels]x[buf_s] and computes its inverse Fourier transform. Overlap-add
-  synthesis is then computed using the previously synthetised frames, and the
-  output stored in out.
-  
-  \param pv phase vocoder object as returned by new_aubio_pvoc
-  \param fftgrain input spectral frame
-  \param out output signal (hop_s long) 
-
-*/
-void aubio_pvoc_rdo(aubio_pvoc_t *pv, cvec_t * fftgrain, fvec_t *out);
-
-/** get window size
-
-  \param pv phase vocoder to get the window size from
-
-*/
-uint_t aubio_pvoc_get_win(aubio_pvoc_t* pv);
-/** get hop size
-
-  \param pv phase vocoder to get the hop size from
-
-*/
-uint_t aubio_pvoc_get_hop(aubio_pvoc_t* pv);
-/** get channel number
- 
-  \param pv phase vocoder to get the number of channels from
-
-*/
-uint_t aubio_pvoc_get_channels(aubio_pvoc_t* pv);
-
-#ifdef __cplusplus
-}
-#endif 
-
-#endif
--- /dev/null
+++ b/src/pitch/pitchdetection.c
@@ -1,0 +1,247 @@
+/*
+   Copyright (C) 2003 Paul Brossier
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+   */
+
+#include "aubio_priv.h"
+#include "fvec.h"
+#include "cvec.h"
+#include "spectral/phasevoc.h"
+#include "mathutils.h"
+#include "temporal/filter.h"
+#include "pitch/pitchmcomb.h"
+#include "pitch/pitchyin.h"
+#include "pitch/pitchfcomb.h"
+#include "pitch/pitchschmitt.h"
+#include "pitch/pitchyinfft.h"
+#include "pitch/pitchdetection.h"
+
+typedef smpl_t (*aubio_pitchdetection_func_t)
+  (aubio_pitchdetection_t *p, fvec_t * ibuf);
+typedef smpl_t (*aubio_pitchdetection_conv_t)
+  (smpl_t value, uint_t srate, uint_t bufsize);
+
+void aubio_pitchdetection_slideblock(aubio_pitchdetection_t *p, fvec_t *ibuf);
+
+smpl_t aubio_pitchdetection_mcomb   (aubio_pitchdetection_t *p, fvec_t *ibuf);
+smpl_t aubio_pitchdetection_yin     (aubio_pitchdetection_t *p, fvec_t *ibuf);
+smpl_t aubio_pitchdetection_schmitt (aubio_pitchdetection_t *p, fvec_t *ibuf);
+smpl_t aubio_pitchdetection_fcomb   (aubio_pitchdetection_t *p, fvec_t *ibuf);
+smpl_t aubio_pitchdetection_yinfft  (aubio_pitchdetection_t *p, fvec_t *ibuf);
+
+/** generic pitch detection structure */
+struct _aubio_pitchdetection_t {
+  aubio_pitchdetection_type type; /**< pitch detection mode */
+  aubio_pitchdetection_mode mode; /**< pitch detection output mode */
+  uint_t srate;                   /**< samplerate */
+  uint_t bufsize;                 /**< buffer size */
+  aubio_pitchmcomb_t * mcomb;     /**< mcomb object */
+  aubio_pitchfcomb_t * fcomb;     /**< fcomb object */
+  aubio_pitchschmitt_t * schmitt; /**< schmitt object */
+  aubio_pitchyinfft_t * yinfft;   /**< yinfft object */
+  aubio_filter_t * filter;        /**< filter */
+  aubio_pvoc_t * pv;              /**< phase vocoder for mcomb */ 
+  cvec_t * fftgrain;              /**< spectral frame for mcomb */
+  fvec_t * buf;                   /**< temporary buffer for yin */
+  fvec_t * yin;                   /**< yin function */
+  smpl_t yinthres;                /**< yin peak picking threshold parameter */
+  aubio_pitchdetection_func_t callback; /**< pointer to current pitch detection method */
+  aubio_pitchdetection_conv_t freqconv; /**< pointer to current pitch conversion method */ 
+};
+
+/* convenience wrapper function for frequency unit conversions 
+ * should probably be rewritten with #defines */
+smpl_t freqconvbin(smpl_t f,uint_t srate,uint_t bufsize);
+smpl_t freqconvbin(smpl_t f,uint_t srate,uint_t bufsize){
+  return aubio_freqtobin(f,srate,bufsize);
+}
+
+smpl_t freqconvmidi(smpl_t f,uint_t srate,uint_t bufsize);
+smpl_t freqconvmidi(smpl_t f,uint_t srate UNUSED,uint_t bufsize UNUSED){
+  return aubio_freqtomidi(f);
+}
+
+smpl_t freqconvpass(smpl_t f,uint_t srate,uint_t bufsize);
+smpl_t freqconvpass(smpl_t f,uint_t srate UNUSED,uint_t bufsize UNUSED){
+  return f;
+}
+
+aubio_pitchdetection_t * new_aubio_pitchdetection(uint_t bufsize, 
+    uint_t hopsize, 
+    uint_t channels,
+    uint_t samplerate,
+    aubio_pitchdetection_type type,
+    aubio_pitchdetection_mode mode)
+{
+  aubio_pitchdetection_t *p = AUBIO_NEW(aubio_pitchdetection_t);
+  p->srate = samplerate;
+  p->type = type;
+  p->mode = mode;
+  p->bufsize = bufsize;
+  switch(p->type) {
+    case aubio_pitch_yin:
+      p->buf      = new_fvec(bufsize,channels);
+      p->yin      = new_fvec(bufsize/2,channels);
+      p->callback = aubio_pitchdetection_yin;
+      p->yinthres = 0.15;
+      break;
+    case aubio_pitch_mcomb:
+      p->pv       = new_aubio_pvoc(bufsize, hopsize, channels);
+      p->fftgrain = new_cvec(bufsize, channels);
+      p->mcomb    = new_aubio_pitchmcomb(bufsize,hopsize,channels,samplerate);
+      p->filter   = new_aubio_cdsgn_filter(samplerate);
+      p->callback = aubio_pitchdetection_mcomb;
+      break;
+    case aubio_pitch_fcomb:
+      p->buf      = new_fvec(bufsize,channels);
+      p->fcomb    = new_aubio_pitchfcomb(bufsize,hopsize,samplerate);
+      p->callback = aubio_pitchdetection_fcomb;
+      break;
+    case aubio_pitch_schmitt:
+      p->buf      = new_fvec(bufsize,channels);
+      p->schmitt  = new_aubio_pitchschmitt(bufsize,samplerate);
+      p->callback = aubio_pitchdetection_schmitt;
+      break;
+    case aubio_pitch_yinfft:
+      p->buf      = new_fvec(bufsize,channels);
+      p->yinfft   = new_aubio_pitchyinfft(bufsize);
+      p->callback = aubio_pitchdetection_yinfft;
+      p->yinthres = 0.85;
+      break;
+    default:
+      break;
+  }
+  switch(p->mode) {
+    case aubio_pitchm_freq:
+      p->freqconv = freqconvpass;
+      break;
+    case aubio_pitchm_midi:
+      p->freqconv = freqconvmidi;
+      break;
+    case aubio_pitchm_cent:
+      /* bug: not implemented */
+      p->freqconv = freqconvmidi;
+      break;
+    case aubio_pitchm_bin:
+      p->freqconv = freqconvbin;
+      break;
+    default:
+      break;
+  }
+  return p;
+}
+
+void del_aubio_pitchdetection(aubio_pitchdetection_t * p) {
+  switch(p->type) {
+    case aubio_pitch_yin:
+      del_fvec(p->yin);
+      del_fvec(p->buf);
+      break;
+    case aubio_pitch_mcomb:
+      del_aubio_pvoc(p->pv);
+      del_cvec(p->fftgrain);
+      del_aubio_filter(p->filter);
+      del_aubio_pitchmcomb(p->mcomb);
+      break;
+    case aubio_pitch_schmitt:
+      del_fvec(p->buf);
+      del_aubio_pitchschmitt(p->schmitt);
+      break;
+    case aubio_pitch_fcomb:
+      del_fvec(p->buf);
+      del_aubio_pitchfcomb(p->fcomb);
+      break;
+    case aubio_pitch_yinfft:
+      del_fvec(p->buf);
+      del_aubio_pitchyinfft(p->yinfft);
+      break;
+    default:
+      break;
+  }
+  AUBIO_FREE(p);
+}
+
+void aubio_pitchdetection_slideblock(aubio_pitchdetection_t *p, fvec_t *ibuf){
+  uint_t i,j = 0, overlap_size = 0;
+  overlap_size = p->buf->length-ibuf->length;
+  for (i=0;i<p->buf->channels;i++){
+    for (j=0;j<overlap_size;j++){
+      p->buf->data[i][j] = p->buf->data[i][j+ibuf->length];
+    }
+  }
+  for (i=0;i<ibuf->channels;i++){
+    for (j=0;j<ibuf->length;j++){
+      p->buf->data[i][j+overlap_size] = ibuf->data[i][j];
+    }
+  }
+}
+
+void aubio_pitchdetection_set_yinthresh(aubio_pitchdetection_t *p, smpl_t thres) {
+  p->yinthres = thres;
+}
+
+smpl_t aubio_pitchdetection(aubio_pitchdetection_t *p, fvec_t * ibuf) {
+  return p->freqconv(p->callback(p,ibuf),p->srate,p->bufsize);
+}
+
+smpl_t aubio_pitchdetection_mcomb(aubio_pitchdetection_t *p, fvec_t *ibuf) {
+  smpl_t pitch = 0.;
+  aubio_filter_do(p->filter,ibuf);
+  aubio_pvoc_do(p->pv,ibuf,p->fftgrain);
+  pitch = aubio_pitchmcomb_detect(p->mcomb,p->fftgrain);
+  /** \bug should move the >0 check within aubio_bintofreq */
+  if (pitch>0.) {
+    pitch = aubio_bintofreq(pitch,p->srate,p->bufsize);
+  } else {
+    pitch = 0.;
+  }
+  return pitch;
+}
+
+smpl_t aubio_pitchdetection_yin(aubio_pitchdetection_t *p, fvec_t *ibuf) {
+  smpl_t pitch = 0.;
+  aubio_pitchdetection_slideblock(p,ibuf);
+  pitch = aubio_pitchyin_getpitchfast(p->buf,p->yin, p->yinthres);
+  if (pitch>0) {
+    pitch = p->srate/(pitch+0.);
+  } else {
+    pitch = 0.;
+  }
+  return pitch;
+}
+
+
+smpl_t aubio_pitchdetection_yinfft(aubio_pitchdetection_t *p, fvec_t *ibuf){
+  smpl_t pitch = 0.;
+  aubio_pitchdetection_slideblock(p,ibuf);
+  pitch = aubio_pitchyinfft_detect(p->yinfft,p->buf,p->yinthres);
+  if (pitch>0) {
+    pitch = p->srate/(pitch+0.);
+  } else {
+    pitch = 0.;
+  }
+  return pitch; 
+}
+
+smpl_t aubio_pitchdetection_fcomb(aubio_pitchdetection_t *p, fvec_t *ibuf){
+  aubio_pitchdetection_slideblock(p,ibuf);
+  return aubio_pitchfcomb_detect(p->fcomb,p->buf);
+}
+
+smpl_t aubio_pitchdetection_schmitt(aubio_pitchdetection_t *p, fvec_t *ibuf){
+  aubio_pitchdetection_slideblock(p,ibuf);
+  return aubio_pitchschmitt_detect(p->schmitt,p->buf);
+}
--- /dev/null
+++ b/src/pitch/pitchdetection.h
@@ -1,0 +1,98 @@
+/*
+   Copyright (C) 2003 Paul Brossier
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+   */
+
+#ifndef PITCHAUTOTCORR_H
+#define PITCHAUTOTCORR_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** \file
+
+  Generic method for pitch detection
+
+  This file creates the objects required for the computation of the selected
+  pitch detection algorithm and output the results, in midi note or Hz.
+
+*/
+
+/** pitch detection algorithm */
+typedef enum {
+  aubio_pitch_yin,     /**< YIN algorithm */
+  aubio_pitch_mcomb,   /**< Multi-comb filter */
+  aubio_pitch_schmitt, /**< Schmitt trigger */
+  aubio_pitch_fcomb,   /**< Fast comb filter */
+  aubio_pitch_yinfft   /**< Spectral YIN */
+} aubio_pitchdetection_type;
+
+/** pitch detection output mode */
+typedef enum {
+  aubio_pitchm_freq,   /**< Frequency (Hz) */
+  aubio_pitchm_midi,   /**< MIDI note (0.,127) */
+  aubio_pitchm_cent,   /**< Cent */
+  aubio_pitchm_bin     /**< Frequency bin (0,bufsize) */
+} aubio_pitchdetection_mode;
+
+/** pitch detection object */
+typedef struct _aubio_pitchdetection_t aubio_pitchdetection_t;
+
+/** execute pitch detection on an input signal frame
+
+  \param p pitch detection object as returned by new_aubio_pitchdetection
+  \param ibuf input signal of length hopsize
+
+*/
+smpl_t aubio_pitchdetection(aubio_pitchdetection_t * p, fvec_t * ibuf);
+
+/** change yin or yinfft tolerance threshold
+
+  default is 0.15 for yin and 0.85 for yinfft
+
+*/
+void aubio_pitchdetection_set_yinthresh(aubio_pitchdetection_t *p, smpl_t thres);
+
+/** deletion of the pitch detection object
+
+  \param p pitch detection object as returned by new_aubio_pitchdetection
+
+*/
+void del_aubio_pitchdetection(aubio_pitchdetection_t * p);
+
+/** creation of the pitch detection object
+
+  \param bufsize size of the input buffer to analyse
+  \param hopsize step size between two consecutive analysis instant
+  \param channels number of channels to analyse
+  \param samplerate sampling rate of the signal
+  \param type set pitch detection algorithm
+  \param mode set pitch units for output
+
+*/
+aubio_pitchdetection_t * new_aubio_pitchdetection(uint_t bufsize,
+    uint_t hopsize,
+    uint_t channels,
+    uint_t samplerate,
+    aubio_pitchdetection_type type,
+    aubio_pitchdetection_mode mode);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*PITCHDETECTION_H*/
--- /dev/null
+++ b/src/pitch/pitchfcomb.c
@@ -1,0 +1,136 @@
+/*
+   Copyright (C) 2004, 2005  Mario Lang <[email protected]>
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#include "aubio_priv.h"
+#include "fvec.h"
+#include "cvec.h"
+#include "mathutils.h"
+#include "spectral/fft.h"
+#include "pitch/pitchfcomb.h"
+
+#define MAX_PEAKS 8
+
+typedef struct {
+  smpl_t freq;
+  smpl_t db;
+} aubio_fpeak_t;
+
+struct _aubio_pitchfcomb_t {
+  uint_t fftSize;
+  uint_t stepSize;
+  uint_t rate;
+  fvec_t * winput;
+  fvec_t * win;
+  cvec_t * fftOut;
+  fvec_t * fftLastPhase;
+  aubio_fft_t * fft;
+  //aubio_pvoc_t * pvoc;
+};
+
+aubio_pitchfcomb_t * new_aubio_pitchfcomb (uint_t bufsize, uint_t hopsize, uint_t samplerate)
+{
+  aubio_pitchfcomb_t * p = AUBIO_NEW(aubio_pitchfcomb_t);
+  p->rate         = samplerate;
+  p->fftSize      = bufsize;
+  p->stepSize     = hopsize;
+  p->winput       = new_fvec(bufsize,1);
+  p->fftOut       = new_cvec(bufsize,1);
+  p->fftLastPhase = new_fvec(bufsize,1);
+  p->fft = new_aubio_fft(bufsize, 1);
+  p->win = new_fvec(bufsize,1);
+  aubio_window(p->win->data[0], bufsize, aubio_win_hanning);
+  return p;
+}
+
+/* input must be stepsize long */
+smpl_t aubio_pitchfcomb_detect (aubio_pitchfcomb_t * p, fvec_t * input)
+{
+  uint_t k, l, maxharm = 0;
+  smpl_t freqPerBin = p->rate/(smpl_t)p->fftSize,
+    phaseDifference = TWO_PI*(smpl_t)p->stepSize/(smpl_t)p->fftSize;
+  aubio_fpeak_t peaks[MAX_PEAKS];
+
+  for (k=0; k<MAX_PEAKS; k++) {
+    peaks[k].db = -200.;
+    peaks[k].freq = 0.;
+  }
+
+  for (k=0; k < input->length; k++){
+    p->winput->data[0][k] = p->win->data[0][k] * input->data[0][k];
+  }
+  aubio_fft_do(p->fft,p->winput,p->fftOut);
+
+  for (k=0; k<=p->fftSize/2; k++) {
+    smpl_t
+      magnitude = 20.*LOG10(2.*p->fftOut->norm[0][k]/(smpl_t)p->fftSize),
+      phase     = p->fftOut->phas[0][k],
+      tmp, freq;
+
+    /* compute phase difference */
+    tmp = phase - p->fftLastPhase->data[0][k];
+    p->fftLastPhase->data[0][k] = phase;
+
+    /* subtract expected phase difference */
+    tmp -= (smpl_t)k*phaseDifference;
+
+    /* map delta phase into +/- Pi interval */
+    tmp = aubio_unwrap2pi(tmp);
+
+    /* get deviation from bin frequency from the +/- Pi interval */
+    tmp = p->fftSize/(smpl_t)p->stepSize*tmp/(TWO_PI);
+
+    /* compute the k-th partials' true frequency */
+    freq = (smpl_t)k*freqPerBin + tmp*freqPerBin;
+
+    if (freq > 0.0 && magnitude > peaks[0].db) { // && magnitude < 0) {
+      memmove(peaks+1, peaks, sizeof(aubio_fpeak_t)*(MAX_PEAKS-1));
+      peaks[0].freq = freq;
+      peaks[0].db = magnitude;
+    }
+  }
+
+  k = 0;
+  for (l=1; l<MAX_PEAKS && peaks[l].freq > 0.0; l++) {
+    sint_t harmonic;
+    for (harmonic=5; harmonic>1; harmonic--) {
+      if (peaks[0].freq / peaks[l].freq < harmonic+.02 &&
+          peaks[0].freq / peaks[l].freq > harmonic-.02) {
+        if (harmonic > (sint_t)maxharm &&
+            peaks[0].db < peaks[l].db/2) {
+          maxharm = harmonic;
+          k = l;
+        }
+      }
+    }
+  }
+  /* quick hack to clean output a bit */
+  if (peaks[k].freq > 5000.) return 0.;
+  return peaks[k].freq;
+}
+
+void del_aubio_pitchfcomb (aubio_pitchfcomb_t * p)
+{
+  del_cvec(p->fftOut);
+  del_fvec(p->fftLastPhase);
+  del_fvec(p->win);
+  del_fvec(p->winput);
+  del_aubio_fft(p->fft);
+  AUBIO_FREE(p);
+}
+
--- /dev/null
+++ b/src/pitch/pitchfcomb.h
@@ -1,0 +1,73 @@
+/*
+   Copyright (C) 2003 Paul Brossier
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+/** \file
+
+   Pitch detection using a fast harmonic comb filter
+
+   This pitch extraction method implements a fast harmonic comb filter to
+   determine the fundamental frequency of a harmonic sound.
+
+   This file was derived from the tuneit project, written by Mario Lang to
+   detect the fundamental frequency of a sound.
+   
+   see http://delysid.org/tuneit.html 
+
+*/
+
+#ifndef _PITCHFCOMB_H
+#define _PITCHFCOMB_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** pitch detection object */
+typedef struct _aubio_pitchfcomb_t aubio_pitchfcomb_t;
+
+/** execute pitch detection on an input buffer 
+ 
+  \param p pitch detection object as returned by new_aubio_pitchfcomb
+  \param input input signal window (length as specified at creation time) 
+ 
+*/
+smpl_t aubio_pitchfcomb_detect (aubio_pitchfcomb_t *p, fvec_t * input);
+/** creation of the pitch detection object
+ 
+  \param bufsize size of the input buffer to analyse 
+  \param hopsize step size between two consecutive analysis instant 
+  \param samplerate sampling rate of the signal 
+ 
+*/
+aubio_pitchfcomb_t * new_aubio_pitchfcomb (uint_t bufsize, uint_t hopsize, uint_t samplerate);
+/** deletion of the pitch detection object
+ 
+  \param p pitch detection object as returned by new_aubio_pitchfcomb
+ 
+*/
+void del_aubio_pitchfcomb (aubio_pitchfcomb_t *p);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _PITCHFCOMB_H */
+
+
--- /dev/null
+++ b/src/pitch/pitchmcomb.c
@@ -1,0 +1,391 @@
+/*
+   Copyright (C) 2003 Paul Brossier
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#include "aubio_priv.h"
+#include "fvec.h"
+#include "cvec.h"
+#include "mathutils.h"
+#include "pitch/pitchmcomb.h"
+
+#define CAND_SWAP(a,b) { register aubio_spectralcandidate_t *t=(a);(a)=(b);(b)=t; }
+
+typedef struct _aubio_spectralpeak_t aubio_spectralpeak_t;
+typedef struct _aubio_spectralcandidate_t aubio_spectralcandidate_t;
+uint_t aubio_pitchmcomb_get_root_peak(aubio_spectralpeak_t * peaks, uint_t length);
+uint_t aubio_pitchmcomb_quadpick(aubio_spectralpeak_t * spectral_peaks, fvec_t * X);
+void aubio_pitchmcomb_spectral_pp(aubio_pitchmcomb_t * p, fvec_t * oldmag);
+void aubio_pitchmcomb_combdet(aubio_pitchmcomb_t * p, fvec_t * newmag);
+/* not used but useful : sort by amplitudes (or anything else)
+ * sort_pitchpeak(peaks, length);
+ */
+/** spectral_peak comparison function (must return signed int) */
+static sint_t aubio_pitchmcomb_sort_peak_comp(const void *x, const void *y);
+/** sort spectral_peak against their mag */
+void aubio_pitchmcomb_sort_peak(aubio_spectralpeak_t * peaks, uint_t nbins);
+
+/** sort spectral_candidate against their comb ene */
+void aubio_pitchmcomb_sort_cand_ene(aubio_spectralcandidate_t ** candidates, uint_t nbins);
+/** sort spectral_candidate against their frequency */
+void aubio_pitchmcomb_sort_cand_freq(aubio_spectralcandidate_t ** candidates, uint_t nbins);
+
+struct _aubio_pitchmcomb_t {
+  smpl_t threshold;                        /**< offset threshold [0.033 or 0.01]     */
+  smpl_t alpha;                            /**< normalisation exponent [9]           */
+  smpl_t cutoff;                           /**< low-pass filter cutoff [0.34, 1]     */
+  smpl_t tol;                              /**< tolerance [0.05]                     */
+  smpl_t tau;                              /**< frequency precision [44100/4096]     */
+  uint_t win_post;                         /**< median filter window length          */
+  uint_t win_pre;                          /**< median filter window                 */
+  uint_t ncand;                            /**< maximum number of candidates (combs) */
+  uint_t npartials;                        /**< maximum number of partials per combs */
+  uint_t count;                            /**< picked picks                         */
+  uint_t goodcandidate;                    /**< best candidate                       */
+  uint_t spec_partition;                   /**< spectrum partition to consider       */
+  aubio_spectralpeak_t * peaks;            /**< up to length win/spec_partition      */
+  aubio_spectralcandidate_t ** candidates; /** up to five candidates                 */
+  /* some scratch pads */
+  /** \bug  (unnecessary copied from fftgrain?) */
+  fvec_t * newmag;                         /**< vec to store mag                     */
+  fvec_t * scratch;                        /**< vec to store modified mag            */
+  fvec_t * scratch2;                       /**< vec to compute moving median         */
+  fvec_t * theta;                         /**< vec to store phase                     */
+  smpl_t phasediff;
+  smpl_t phasefreq;
+  /** threshfn: name or handle of fn for computing adaptive threshold [median] */
+  /** aubio_thresholdfn_t thresholdfn; */
+  /** picker: name or handle of fn for picking event times [quadpick] */
+  /** aubio_pickerfn_t pickerfn; */
+};
+
+/** spectral peak object */
+struct _aubio_spectralpeak_t {
+  uint_t bin;     /**< bin [0-(length-1)] */
+  smpl_t ebin;    /**< estimated bin */
+  smpl_t mag;     /**< peak magnitude */
+};
+
+/** spectral candidates array object */
+struct _aubio_spectralcandidate_t {
+  smpl_t ebin;    /**< interpolated bin */
+  smpl_t * ecomb; /**< comb */
+  smpl_t ene;     /**< candidate energy */
+  smpl_t len;     /**< length */
+};
+
+
+smpl_t aubio_pitchmcomb_detect(aubio_pitchmcomb_t * p, cvec_t * fftgrain) {
+  uint_t i=0,j;
+  smpl_t instfreq;
+  fvec_t * newmag = (fvec_t *)p->newmag;
+  //smpl_t hfc; //fe=instfreq(theta1,theta,ops); //theta1=theta;
+  /* copy incoming grain to newmag */
+  for (j=0; j< newmag->length; j++)
+    newmag->data[i][j]=fftgrain->norm[i][j];
+  /* detect only if local energy > 10. */
+  //if (vec_local_energy(newmag)>10.) {
+    //hfc = vec_local_hfc(newmag); //not used
+    aubio_pitchmcomb_spectral_pp(p, newmag);
+    aubio_pitchmcomb_combdet(p,newmag);
+    //aubio_pitchmcomb_sort_cand_freq(p->candidates,p->ncand);
+    //return p->candidates[p->goodcandidate]->ebin;
+  j = (uint_t)FLOOR(p->candidates[p->goodcandidate]->ebin+.5);
+  instfreq  = aubio_unwrap2pi(fftgrain->phas[0][j]
+      - p->theta->data[0][j] - j*p->phasediff);
+  instfreq *= p->phasefreq;
+  /* store phase for next run */
+  for (j=0; j< p->theta->length; j++) {
+    p->theta->data[i][j]=fftgrain->phas[i][j];
+  }
+  //return p->candidates[p->goodcandidate]->ebin;
+  return FLOOR(p->candidates[p->goodcandidate]->ebin+.5) + instfreq;
+  /*} else {
+    return -1.;
+  }*/
+}
+
+uint_t aubio_pitch_cands(aubio_pitchmcomb_t * p, cvec_t * fftgrain,
+    smpl_t * cands) {
+  uint_t i=0,j;
+  uint_t k;
+  fvec_t * newmag = (fvec_t *)p->newmag;
+  aubio_spectralcandidate_t ** scands =
+    (aubio_spectralcandidate_t **)(p->candidates);
+  //smpl_t hfc; //fe=instfreq(theta1,theta,ops); //theta1=theta;
+  /* copy incoming grain to newmag */
+  for (j=0; j< newmag->length; j++)
+    newmag->data[i][j]=fftgrain->norm[i][j];
+  /* detect only if local energy > 10. */
+  if (vec_local_energy(newmag)>10.) {
+    /* hfc = vec_local_hfc(newmag); do not use */
+    aubio_pitchmcomb_spectral_pp(p, newmag);
+    aubio_pitchmcomb_combdet(p,newmag);
+    aubio_pitchmcomb_sort_cand_freq(scands,p->ncand);
+    /* store ncand comb energies in cands[1:ncand] */
+    for (k = 0; k<p->ncand; k++)
+      cands[k] = p->candidates[k]->ene;
+    /* store ncand[end] freq in cands[end] */
+    cands[p->ncand] = p->candidates[p->ncand-1]->ebin;
+    return 1;
+  } else {
+    for (k = 0; k<p->ncand; k++)
+      cands[k] = 0;
+    return 0;
+  }
+}
+
+void aubio_pitchmcomb_spectral_pp(aubio_pitchmcomb_t * p, fvec_t * newmag) {
+  fvec_t * mag = (fvec_t *)p->scratch;
+  fvec_t * tmp = (fvec_t *)p->scratch2;
+  uint_t i=0,j;
+  uint_t length = mag->length;
+  /* copy newmag to mag (scracth) */
+  for (j=0;j<length;j++) {
+    mag->data[i][j] = newmag->data[i][j];
+  }
+  vec_dc_removal(mag);               /* dc removal           */
+  vec_alpha_normalise(mag,p->alpha); /* alpha normalisation  */
+  /* skipped */                      /* low pass filtering   */
+  /** \bug vec_moving_thres may write out of bounds */
+  vec_adapt_thres(mag,tmp,p->win_post,p->win_pre); /* adaptative threshold */
+  vec_add(mag,-p->threshold);        /* fixed threshold      */
+  {
+    aubio_spectralpeak_t * peaks = (aubio_spectralpeak_t *)p->peaks;
+    uint_t count;
+    /*  return bin and ebin */
+    count = aubio_pitchmcomb_quadpick(peaks,mag);
+    for (j=0;j<count;j++)
+      peaks[j].mag = newmag->data[i][peaks[j].bin];
+    /* reset non peaks */
+    for (j=count;j<length;j++)
+      peaks[j].mag = 0.;
+    p->peaks = peaks;
+    p->count = count;
+  }
+}
+
+void aubio_pitchmcomb_combdet(aubio_pitchmcomb_t * p, fvec_t * newmag) {
+  aubio_spectralpeak_t * peaks = (aubio_spectralpeak_t *)p->peaks;
+  aubio_spectralcandidate_t ** candidate =
+    (aubio_spectralcandidate_t **)p->candidates;
+
+  /* parms */
+  uint_t N = p->npartials; /* maximum number of partials to be considered 10 */
+  uint_t M = p->ncand;  /* maximum number of combs to be considered 5 */
+  uint_t length = newmag->length;
+  uint_t count = p->count;
+  uint_t k;
+  uint_t l;
+  uint_t d;
+  uint_t curlen = 0;
+
+  smpl_t delta2;
+  smpl_t xx;
+  uint_t position = 0;
+
+  uint_t root_peak = 0;
+  uint_t tmpl = 0;
+  smpl_t tmpene = 0.;
+
+  /* get the biggest peak in the spectrum */
+  root_peak = aubio_pitchmcomb_get_root_peak(peaks,count);
+  /* not enough partials in highest notes, could be forced */
+  //if (peaks[root_peak].ebin >= aubio_miditofreq(85.)/p->tau) N=2;
+  //if (peaks[root_peak].ebin >= aubio_miditofreq(90.)/p->tau) N=1;
+  /* now calculate the energy of each of the 5 combs */
+  for (l=0;l<M;l++) {
+    smpl_t scaler = (1./(l+1.));
+    candidate[l]->ene = 0.; /* reset ene and len sums */
+    candidate[l]->len = 0.;
+    candidate[l]->ebin=scaler*peaks[root_peak].ebin;
+    /* if less than N peaks available, curlen < N */
+    if (candidate[l]->ebin != 0.)
+      curlen = (uint_t)FLOOR(length/(candidate[l]->ebin));
+    curlen = (N < curlen )? N : curlen;
+    /* fill candidate[l]->ecomb[k] with (k+1)*candidate[l]->ebin */
+    for (k=0;k<curlen;k++)
+      candidate[l]->ecomb[k]=(candidate[l]->ebin)*(k+1.);
+    for (k=curlen;k<length;k++)
+      candidate[l]->ecomb[k]=0.;
+    /* for each in candidate[l]->ecomb[k] */
+    for (k=0;k<curlen;k++) {
+      xx = 100000.;
+      /** get the candidate->ecomb the closer to peaks.ebin
+       * (to cope with the inharmonicity)*/
+      for (d=0;d<count;d++) {
+        delta2 = ABS(candidate[l]->ecomb[k]-peaks[d].ebin);
+        if (delta2 <= xx) {
+          position = d;
+          xx = delta2;
+        }
+      }
+      /* for a Q factor of 17, maintaining "constant Q filtering",
+       * and sum energy and length over non null combs */
+      if ( 17. * xx < candidate[l]->ecomb[k] ) {
+        candidate[l]->ecomb[k]=peaks[position].ebin;
+        candidate[l]->ene += /* ecomb rounded to nearest int */
+          POW(newmag->data[0][(uint_t)FLOOR(candidate[l]->ecomb[k]+.5)],0.25);
+        candidate[l]->len += 1./curlen;
+      } else
+        candidate[l]->ecomb[k]=0.;
+    }
+    /* punishment */
+    /*if (candidate[l]->len<0.6)
+      candidate[l]->ene=0.; */
+    /* remember best candidate energy (in polyphonic, could check for
+     * tmpene*1.1 < candidate->ene to reduce jumps towards low frequencies) */
+    if (tmpene < candidate[l]->ene) {
+      tmpl = l;
+      tmpene = candidate[l]->ene;
+    }
+  }
+  //p->candidates=candidate;
+  //p->peaks=peaks;
+  p->goodcandidate = tmpl;
+}
+
+/** T=quadpick(X): return indices of elements of X which are peaks and positive
+ * exact peak positions are retrieved by quadratic interpolation
+ *
+ * \bug peak-picking too picky, sometimes counts too many peaks ?
+ */
+uint_t aubio_pitchmcomb_quadpick(aubio_spectralpeak_t * spectral_peaks, fvec_t * X){
+  uint_t i, j, ispeak, count = 0;
+  for (i=0;i<X->channels;i++)
+    for (j=1;j<X->length-1;j++) {
+      ispeak = vec_peakpick(X,j);
+      if (ispeak) {
+        count += ispeak;
+        spectral_peaks[count-1].bin = j;
+        spectral_peaks[count-1].ebin = vec_quadint(X,j) - 1.;
+      }
+    }
+  return count;
+}
+
+/* get predominant partial */
+uint_t aubio_pitchmcomb_get_root_peak(aubio_spectralpeak_t * peaks, uint_t length) {
+  uint_t i,pos=0;
+  smpl_t tmp = 0.;
+  for (i=0;i<length;i++)
+    if (tmp <= peaks[i].mag) {
+      pos = i;
+      tmp = peaks[i].mag;
+    }
+  return pos;
+}
+
+void aubio_pitchmcomb_sort_peak(aubio_spectralpeak_t * peaks, uint_t nbins) {
+  qsort(peaks, nbins, sizeof(aubio_spectralpeak_t),
+      aubio_pitchmcomb_sort_peak_comp);
+}
+static sint_t aubio_pitchmcomb_sort_peak_comp(const void *x, const void *y) {
+  return (((aubio_spectralpeak_t *)y)->mag - ((aubio_spectralpeak_t *)x)->mag);
+}
+
+
+void aubio_pitchmcomb_sort_cand_ene(aubio_spectralcandidate_t ** candidates, uint_t nbins) {
+  uint_t cur = 0;
+  uint_t run = 0;
+  for (cur=0;cur<nbins;cur++) {
+    run = cur + 1;
+    for (run=cur;run<nbins;run++) {
+      if(candidates[run]->ene > candidates[cur]->ene)
+        CAND_SWAP(candidates[run], candidates[cur]);
+    }
+  }
+}
+
+
+void aubio_pitchmcomb_sort_cand_freq(aubio_spectralcandidate_t ** candidates, uint_t nbins) {
+  uint_t cur = 0;
+  uint_t run = 0;
+  for (cur=0;cur<nbins;cur++) {
+    run = cur + 1;
+    for (run=cur;run<nbins;run++) {
+      if(candidates[run]->ebin < candidates[cur]->ebin)
+        CAND_SWAP(candidates[run], candidates[cur]);
+    }
+  }
+}
+
+aubio_pitchmcomb_t * new_aubio_pitchmcomb(uint_t bufsize, uint_t hopsize, uint_t channels, uint_t samplerate) {
+  aubio_pitchmcomb_t * p = AUBIO_NEW(aubio_pitchmcomb_t);
+  /* bug: should check if size / 8 > post+pre+1 */
+  uint_t i, j;
+  uint_t spec_size;
+  p->spec_partition   = 4;
+  p->ncand            = 5;
+  p->npartials        = 5;
+  p->cutoff           = 1.;
+  p->threshold        = 0.01;
+  p->win_post         = 8;
+  p->win_pre          = 7;
+  p->tau              = samplerate/bufsize;
+  p->alpha            = 9.;
+  p->goodcandidate    = 0;
+  p->phasefreq        = bufsize/hopsize/TWO_PI;
+  p->phasediff        = TWO_PI*hopsize/bufsize;
+  spec_size = bufsize/p->spec_partition;
+  //p->pickerfn = quadpick;
+  //p->biquad = new_biquad(0.1600,0.3200,0.1600, -0.5949, 0.2348);
+  /* allocate temp memory */
+  p->newmag     = new_fvec(spec_size,channels);
+  /* array for median */
+  p->scratch    = new_fvec(spec_size,channels);
+  /* array for phase */
+  p->theta      = new_fvec(spec_size,channels);
+  /* array for adaptative threshold */
+  p->scratch2   = new_fvec(p->win_post+p->win_pre+1,channels);
+  /* array of spectral peaks */
+  p->peaks      = AUBIO_ARRAY(aubio_spectralpeak_t,spec_size);
+  for (i = 0; i < spec_size; i++) {
+    p->peaks[i].bin = 0.;
+    p->peaks[i].ebin = 0.;
+    p->peaks[i].mag = 0.;
+  }
+  /* array of pointers to spectral candidates */
+  p->candidates = AUBIO_ARRAY(aubio_spectralcandidate_t *,p->ncand);
+  for (i=0;i<p->ncand;i++) {
+    p->candidates[i] = AUBIO_NEW(aubio_spectralcandidate_t);
+    p->candidates[i]->ecomb = AUBIO_ARRAY(smpl_t, spec_size);
+    for (j=0; j < spec_size; j++) {
+      p->candidates[i]->ecomb[j] = 0.;
+    }
+    p->candidates[i]->ene = 0.;
+    p->candidates[i]->ebin = 0.;
+    p->candidates[i]->len = 0.;
+  }
+  return p;
+}
+
+
+void del_aubio_pitchmcomb (aubio_pitchmcomb_t *p) {
+  uint_t i;
+  del_fvec(p->newmag);
+  del_fvec(p->scratch);
+  del_fvec(p->theta);
+  del_fvec(p->scratch2);
+  AUBIO_FREE(p->peaks);
+  for (i=0;i<p->ncand;i++) {
+    AUBIO_FREE(p->candidates[i]->ecomb);
+    AUBIO_FREE(p->candidates[i]);
+  }
+  AUBIO_FREE(p->candidates);
+  AUBIO_FREE(p);
+}
--- /dev/null
+++ b/src/pitch/pitchmcomb.h
@@ -1,0 +1,74 @@
+/*
+	 Copyright (C) 2003 Paul Brossier
+
+	 This program is free software; you can redistribute it and/or modify
+	 it under the terms of the GNU General Public License as published by
+	 the Free Software Foundation; either version 2 of the License, or
+	 (at your option) any later version.
+
+	 This program is distributed in the hope that it will be useful,
+	 but WITHOUT ANY WARRANTY; without even the implied warranty of
+	 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+	 GNU General Public License for more details.
+
+	 You should have received a copy of the GNU General Public License
+	 along with this program; if not, write to the Free Software
+	 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+/** \file
+
+  Pitch detection using multiple-comb filter
+
+  This fundamental frequency estimation algorithm implements spectral
+  flattening, multi-comb filtering and peak histogramming. 
+
+  This method was designed by Juan P. Bello and described in:
+
+  Juan-Pablo Bello. ``Towards the Automated Analysis of Simple Polyphonic
+  Music''.  PhD thesis, Centre for Digital Music, Queen Mary University of
+  London, London, UK, 2003.
+
+*/
+
+#ifndef PITCHMCOMB_H
+#define PITCHMCOMB_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** pitch detection object */
+typedef struct _aubio_pitchmcomb_t aubio_pitchmcomb_t;
+
+/** execute pitch detection on an input spectral frame
+ 
+  \param p pitch detection object as returned by new_aubio_pitchmcomb
+  \param fftgrain input signal spectrum as computed by aubio_pvoc_do 
+ 
+*/
+smpl_t aubio_pitchmcomb_detect(aubio_pitchmcomb_t * p, cvec_t * fftgrain);
+/** select the best candidates */
+uint_t aubio_pitch_cands(aubio_pitchmcomb_t * p, cvec_t * fftgrain, smpl_t * cands);
+/** creation of the pitch detection object
+ 
+  \param bufsize size of the input buffer to analyse 
+  \param hopsize step size between two consecutive analysis instant 
+  \param channels number of channels to analyse
+  \param samplerate sampling rate of the signal 
+ 
+*/
+aubio_pitchmcomb_t * new_aubio_pitchmcomb(uint_t bufsize, uint_t hopsize, uint_t channels, uint_t samplerate);
+/** deletion of the pitch detection object
+ 
+  \param p pitch detection object as returned by new_aubio_pitchfcomb
+ 
+*/
+void del_aubio_pitchmcomb(aubio_pitchmcomb_t *p);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif/*PITCHMCOMB_H*/ 
--- /dev/null
+++ b/src/pitch/pitchschmitt.c
@@ -1,0 +1,107 @@
+/*
+   Copyright (C) 2004, 2005  Mario Lang <[email protected]>
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#include "aubio_priv.h"
+#include "fvec.h"
+#include "pitch/pitchschmitt.h"
+
+smpl_t aubio_schmittS16LE (aubio_pitchschmitt_t *p, uint_t nframes, signed short int *indata);
+
+struct _aubio_pitchschmitt_t {
+        uint_t blockSize;
+        uint_t rate;
+        signed short int *schmittBuffer;
+        signed short int *schmittPointer;
+};
+
+aubio_pitchschmitt_t * new_aubio_pitchschmitt (uint_t size, uint_t samplerate)
+{
+  aubio_pitchschmitt_t * p = AUBIO_NEW(aubio_pitchschmitt_t);
+  p->blockSize = size;
+  p->schmittBuffer = AUBIO_ARRAY(signed short int,p->blockSize);
+  p->schmittPointer = p->schmittBuffer;
+  p->rate = samplerate;
+  return p;
+}
+
+smpl_t aubio_pitchschmitt_detect (aubio_pitchschmitt_t *p, fvec_t * input)
+{
+  signed short int buf[input->length];
+  uint_t i;
+  for (i=0; i<input->length; i++) {
+    buf[i] = input->data[0][i]*32768.;
+  }
+  return aubio_schmittS16LE(p, input->length, buf);
+}
+
+smpl_t aubio_schmittS16LE (aubio_pitchschmitt_t *p, uint_t nframes, signed short int *indata)
+{
+  uint_t i, j;
+  uint_t blockSize = p->blockSize;
+  signed short int *schmittBuffer = p->schmittBuffer;
+  signed short int *schmittPointer = p->schmittPointer;
+
+  smpl_t freq = 0., trigfact = 0.6;
+
+  for (i=0; i<nframes; i++) {
+    *schmittPointer++ = indata[i];
+    if (schmittPointer-schmittBuffer >= (sint_t)blockSize) {
+      sint_t endpoint, startpoint, t1, t2, A1, A2, tc, schmittTriggered;
+
+      schmittPointer = schmittBuffer;
+
+      for (j=0,A1=0,A2=0; j<blockSize; j++) {
+	if (schmittBuffer[j]>0 && A1<schmittBuffer[j])  A1 = schmittBuffer[j];
+	if (schmittBuffer[j]<0 && A2<-schmittBuffer[j]) A2 = -schmittBuffer[j];
+      }
+      t1 =   (sint_t)( A1 * trigfact + 0.5);
+      t2 = - (sint_t)( A2 * trigfact + 0.5);
+      startpoint=0;
+      for (j=1; schmittBuffer[j]<=t1 && j<blockSize; j++);
+      for (; !(schmittBuffer[j]  >=t2 &&
+	       schmittBuffer[j+1]< t2) && j<blockSize; j++);
+      startpoint=j;
+      schmittTriggered=0;
+      endpoint=startpoint+1;
+      for(j=startpoint,tc=0; j<blockSize; j++) {
+	if (!schmittTriggered) {
+	  schmittTriggered = (schmittBuffer[j] >= t1);
+	} else if (schmittBuffer[j]>=t2 && schmittBuffer[j+1]<t2) {
+	  endpoint=j;
+	  tc++;
+	  schmittTriggered = 0;
+	}
+      }
+      if (endpoint > startpoint) {
+	freq = ((smpl_t)p->rate*(tc/(smpl_t)(endpoint-startpoint)));
+      }
+    }
+  }
+
+  p->schmittBuffer  = schmittBuffer;
+  p->schmittPointer = schmittPointer;
+  return freq;
+}
+
+void del_aubio_pitchschmitt (aubio_pitchschmitt_t *p)
+{
+  AUBIO_FREE(p->schmittBuffer);
+  AUBIO_FREE(p);
+}
+
--- /dev/null
+++ b/src/pitch/pitchschmitt.h
@@ -1,0 +1,71 @@
+/*
+   Copyright (C) 2003 Paul Brossier
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+/** \file 
+
+   Pitch detection using a Schmitt trigger 
+ 
+   This pitch extraction method implements a Schmitt trigger to estimate the
+   period of a signal.
+
+   This file was derived from the tuneit project, written by Mario Lang to
+   detect the fundamental frequency of a sound.
+   
+   see http://delysid.org/tuneit.html 
+
+*/
+
+#ifndef _PITCHSCHMITT_H
+#define _PITCHSCHMITT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** pitch detection object */
+typedef struct _aubio_pitchschmitt_t aubio_pitchschmitt_t;
+
+/** execute pitch detection on an input buffer 
+ 
+  \param p pitch detection object as returned by new_aubio_pitchschmitt 
+  \param input input signal window (length as specified at creation time) 
+ 
+*/
+smpl_t aubio_pitchschmitt_detect (aubio_pitchschmitt_t *p, fvec_t * input);
+/** creation of the pitch detection object
+ 
+  \param size size of the input buffer to analyse 
+  \param samplerate sampling rate of the signal 
+ 
+*/
+aubio_pitchschmitt_t * new_aubio_pitchschmitt (uint_t size, uint_t samplerate);
+/** deletion of the pitch detection object
+ 
+  \param p pitch detection object as returned by new_aubio_pitchschmitt 
+ 
+*/
+void del_aubio_pitchschmitt (aubio_pitchschmitt_t *p);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _PITCHSCHMITT_H */
+
--- /dev/null
+++ b/src/pitch/pitchyin.c
@@ -1,0 +1,115 @@
+/*
+   Copyright (C) 2003 Paul Brossier
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+/* This algorithm was developped by A. de Cheveigne and H. Kawahara and
+ * published in:
+ * 
+ * de Cheveigné, A., Kawahara, H. (2002) "YIN, a fundamental frequency
+ * estimator for speech and music", J. Acoust. Soc. Am. 111, 1917-1930.  
+ *
+ * see http://recherche.ircam.fr/equipes/pcm/pub/people/cheveign.html
+ */
+
+#include "aubio_priv.h"
+#include "fvec.h"
+#include "mathutils.h"
+#include "pitch/pitchyin.h"
+
+/* outputs the difference function */
+void aubio_pitchyin_diff(fvec_t * input, fvec_t * yin){
+  uint_t c,j,tau;
+  smpl_t tmp;
+  for (c=0;c<input->channels;c++)
+  {
+    for (tau=0;tau<yin->length;tau++)
+    {
+      yin->data[c][tau] = 0.;
+    }
+    for (tau=1;tau<yin->length;tau++)
+    {
+      for (j=0;j<yin->length;j++)
+      {
+        tmp = input->data[c][j] - input->data[c][j+tau];
+        yin->data[c][tau] += SQR(tmp);
+      }
+    }
+  }
+}
+
+/* cumulative mean normalized difference function */
+void aubio_pitchyin_getcum(fvec_t * yin) {
+  uint_t c,tau;
+  smpl_t tmp;
+  for (c=0;c<yin->channels;c++)
+  {
+    tmp = 0.;
+    yin->data[c][0] = 1.;
+    //AUBIO_DBG("%f\t",yin->data[c][0]);
+    for (tau=1;tau<yin->length;tau++)
+    {
+      tmp += yin->data[c][tau];
+      yin->data[c][tau] *= tau/tmp;
+      //AUBIO_DBG("%f\t",yin->data[c][tau]);
+    }
+    //AUBIO_DBG("\n");
+  }
+}
+
+uint_t aubio_pitchyin_getpitch(fvec_t * yin) {
+  uint_t c=0,tau=1;
+  do 
+  {
+    if(yin->data[c][tau] < 0.1) { 
+      while (yin->data[c][tau+1] < yin->data[c][tau]) {
+        tau++;
+      }
+      return tau;
+    }
+    tau++;
+  } while (tau<yin->length);
+  //AUBIO_DBG("No pitch found");
+  return 0;
+}
+
+
+/* all the above in one */
+smpl_t aubio_pitchyin_getpitchfast(fvec_t * input, fvec_t * yin, smpl_t tol){
+  uint_t c=0,j,tau = 0;
+  sint_t period;
+  smpl_t tmp = 0., tmp2 = 0.;
+  yin->data[c][0] = 1.;
+  for (tau=1;tau<yin->length;tau++)
+  {
+    yin->data[c][tau] = 0.;
+    for (j=0;j<yin->length;j++)
+    {
+      tmp = input->data[c][j] - input->data[c][j+tau];
+      yin->data[c][tau] += SQR(tmp);
+    }
+    tmp2 += yin->data[c][tau];
+    yin->data[c][tau] *= tau/tmp2;
+    period = tau-3;
+    if(tau > 4 && (yin->data[c][period] < tol) && 
+        (yin->data[c][period] < yin->data[c][period+1])) {
+      return vec_quadint_min(yin,period,1);
+    }
+  }
+  return vec_quadint_min(yin,vec_min_elem(yin),1);
+  //return 0;
+}
+
--- /dev/null
+++ b/src/pitch/pitchyin.h
@@ -1,0 +1,75 @@
+/*
+   Copyright (C) 2003 Paul Brossier
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+/** \file 
+  
+  Pitch detection using the YIN algorithm
+ 
+  This algorithm was developped by A. de Cheveigne and H. Kawahara and
+  published in:
+  
+  De Cheveigné, A., Kawahara, H. (2002) "YIN, a fundamental frequency
+  estimator for speech and music", J. Acoust. Soc. Am. 111, 1917-1930.  
+ 
+  see http://recherche.ircam.fr/equipes/pcm/pub/people/cheveign.html
+
+*/
+
+#ifndef PITCHYIN_H
+#define PITCHYIN_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** compute difference function
+  
+  \param input input signal 
+  \param yinbuf output buffer to store difference function (half shorter than input)
+
+*/
+void aubio_pitchyin_diff(fvec_t * input, fvec_t * yinbuf);
+
+/** in place computation of the YIN cumulative normalised function 
+  
+  \param yinbuf input signal (a square difference function), also used to store function 
+
+*/
+void aubio_pitchyin_getcum(fvec_t * yinbuf);
+
+/** detect pitch in a YIN function
+  
+  \param yinbuf input buffer as computed by aubio_pitchyin_getcum
+
+*/
+uint_t aubio_pitchyin_getpitch(fvec_t *yinbuf);
+
+/** fast implementation of the YIN algorithm 
+  
+  \param input input signal 
+  \param yinbuf input buffer used to compute the YIN function
+  \param tol tolerance parameter for minima selection [default 0.15]
+
+*/
+smpl_t aubio_pitchyin_getpitchfast(fvec_t * input, fvec_t *yinbuf, smpl_t tol);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*PITCHYIN_H*/ 
--- /dev/null
+++ b/src/pitch/pitchyinfft.c
@@ -1,0 +1,154 @@
+/*
+   Copyright (C) 2003 Paul Brossier
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "aubio_priv.h"
+#include "fvec.h"
+#include "cvec.h"
+#include "mathutils.h"
+#include "spectral/fft.h"
+#include "pitch/pitchyinfft.h"
+
+/** pitch yinfft structure */
+struct _aubio_pitchyinfft_t {
+  fvec_t * win;       /**< temporal weighting window */
+  fvec_t * winput;    /**< windowed spectrum */
+  cvec_t * res;       /**< complex vector to compute square difference function */
+  fvec_t * sqrmag;    /**< square difference function */
+  fvec_t * weight;    /**< spectral weighting window (psychoacoustic model) */
+  cvec_t * fftout;    /**< Fourier transform output */
+  aubio_fft_t * fft; /**< fft object to compute square difference function */
+  fvec_t * yinfft;    /**< Yin function */
+};
+
+static const smpl_t freqs[] = {0., 20., 25., 31.5, 40., 50., 63., 80., 100.,
+  125., 160., 200., 250., 315., 400., 500., 630., 800., 1000., 1250.,
+  1600., 2000., 2500., 3150., 4000., 5000., 6300., 8000., 9000., 10000.,
+  12500., 15000., 20000.,  25100};
+
+static const smpl_t weight[] = {-75.8, -70.1, -60.8, -52.1, -44.2, -37.5,
+  -31.3, -25.6, -20.9, -16.5, -12.6, -9.6, -7.0, -4.7, -3.0, -1.8, -0.8,
+  -0.2, -0.0, 0.5, 1.6, 3.2, 5.4, 7.8, 8.1, 5.3, -2.4, -11.1, -12.8,
+  -12.2, -7.4, -17.8, -17.8, -17.8};
+
+aubio_pitchyinfft_t * new_aubio_pitchyinfft (uint_t bufsize)
+{
+  aubio_pitchyinfft_t * p = AUBIO_NEW(aubio_pitchyinfft_t);
+  p->winput = new_fvec(bufsize,1);
+  p->fft    = new_aubio_fft(bufsize, 1);
+  p->fftout = new_cvec(bufsize,1);
+  p->sqrmag = new_fvec(bufsize,1);
+  p->res    = new_cvec(bufsize,1);
+  p->yinfft = new_fvec(bufsize/2+1,1);
+  p->win    = new_fvec(bufsize,1);
+  aubio_window(p->win->data[0], bufsize, aubio_win_hanningz);
+  p->weight      = new_fvec(bufsize/2+1,1);
+  {
+    uint_t i = 0, j = 1;
+    smpl_t freq = 0, a0 = 0, a1 = 0, f0 = 0, f1 = 0;
+    for (i=0; i<p->weight->length; i++) {
+      freq = (smpl_t)i/(smpl_t)bufsize*(smpl_t)44100.;
+      while (freq > freqs[j]) {
+        j +=1;
+            }
+      a0 = weight[j-1];
+      f0 = freqs[j-1];
+            a1 = weight[j];
+      f1 = freqs[j];
+      if (f0 == f1) { // just in case
+        p->weight->data[0][i] = a0;
+      } else if (f0 == 0) { // y = ax+b
+        p->weight->data[0][i] = (a1-a0)/f1*freq + a0;
+      } else {
+        p->weight->data[0][i] = (a1-a0)/(f1-f0)*freq +
+          (a0 - (a1 - a0)/(f1/f0 - 1.));
+      }
+      while (freq > freqs[j]) {
+        j +=1;
+      }
+      //AUBIO_DBG("%f\n",p->weight->data[0][i]);
+      p->weight->data[0][i] = DB2LIN(p->weight->data[0][i]);
+      //p->weight->data[0][i] = SQRT(DB2LIN(p->weight->data[0][i]));
+    }
+  }
+  return p;
+}
+
+smpl_t aubio_pitchyinfft_detect(aubio_pitchyinfft_t * p, fvec_t * input, smpl_t tol) {
+  uint_t tau, l = 0;
+  uint_t halfperiod;
+  smpl_t tmp = 0, sum = 0;
+  cvec_t * res = (cvec_t *)p->res;
+  fvec_t * yin = (fvec_t *)p->yinfft;
+  for (l=0; l < input->length; l++){
+    p->winput->data[0][l] = p->win->data[0][l] * input->data[0][l];
+  }
+  aubio_fft_do(p->fft,p->winput,p->fftout);
+  for (l=0; l < p->fftout->length; l++){
+    p->sqrmag->data[0][l] = SQR(p->fftout->norm[0][l]);
+    p->sqrmag->data[0][l] *= p->weight->data[0][l];
+  }
+  for (l=1; l < p->fftout->length; l++){
+    p->sqrmag->data[0][(p->fftout->length-1)*2-l] =
+     SQR(p->fftout->norm[0][l]);
+    p->sqrmag->data[0][(p->fftout->length-1)*2-l] *=
+     p->weight->data[0][l];
+  }
+  for (l=0; l < p->sqrmag->length/2+1; l++) {
+    sum += p->sqrmag->data[0][l];
+  }
+  sum *= 2.;
+  aubio_fft_do(p->fft,p->sqrmag,res);
+  yin->data[0][0] = 1.;
+  for (tau=1; tau < yin->length; tau++) {
+    yin->data[0][tau] = sum -
+      res->norm[0][tau]*COS(res->phas[0][tau]);
+    tmp += yin->data[0][tau];
+    yin->data[0][tau] *= tau/tmp;
+  }
+  tau = vec_min_elem(yin);
+  if (yin->data[0][tau] < tol) {
+    /* no interpolation */
+    //return tau;
+    /* 3 point quadratic interpolation */
+    //return vec_quadint_min(yin,tau,1);
+    /* additional check for (unlikely) octave doubling in higher frequencies */
+    if (tau>35) {
+      return vec_quadint_min(yin,tau,1);
+    } else {
+      /* should compare the minimum value of each interpolated peaks */
+      halfperiod = FLOOR(tau/2+.5);
+      if (yin->data[0][halfperiod] < tol)
+        return vec_quadint_min(yin,halfperiod,1);
+      else
+        return vec_quadint_min(yin,tau,1);
+    }
+  } else
+    return 0.;
+}
+
+void del_aubio_pitchyinfft(aubio_pitchyinfft_t *p){
+  del_fvec(p->win);
+  del_aubio_fft(p->fft);
+  del_fvec(p->yinfft);
+  del_fvec(p->sqrmag);
+  del_cvec(p->res);
+  del_cvec(p->fftout);
+  del_fvec(p->winput);
+  del_fvec(p->weight);
+  AUBIO_FREE(p);
+}
--- /dev/null
+++ b/src/pitch/pitchyinfft.h
@@ -1,0 +1,69 @@
+/*
+   Copyright (C) 2003 Paul Brossier
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+/** \file
+ 
+  Pitch detection using a spectral implementation of the YIN algorithm
+  
+  This algorithm was derived from the YIN algorithm (see pitchyin.c). In this
+  implementation, a Fourier transform is used to compute a tapered square
+  difference function, which allows spectral weighting. Because the difference
+  function is tapered, the selection of the period is simplified.
+ 
+  Paul Brossier, ``Automatic annotation of musical audio for interactive
+  systems'', Chapter 3, Pitch Analysis, PhD thesis, Centre for Digital music,
+  Queen Mary University of London, London, UK, 2006.
+
+*/
+
+#ifndef PITCHYINFFT_H
+#define PITCHYINFFT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** pitch detection object */
+typedef struct _aubio_pitchyinfft_t aubio_pitchyinfft_t;
+
+/** execute pitch detection on an input buffer 
+ 
+  \param p pitch detection object as returned by new_aubio_pitchyinfft
+  \param input input signal window (length as specified at creation time) 
+  \param tol tolerance parameter for minima selection [default 0.85] 
+ 
+*/
+smpl_t aubio_pitchyinfft_detect (aubio_pitchyinfft_t *p, fvec_t * input, smpl_t tol);
+/** creation of the pitch detection object
+ 
+  \param bufsize size of the input buffer to analyse 
+ 
+*/
+aubio_pitchyinfft_t * new_aubio_pitchyinfft (uint_t bufsize);
+/** deletion of the pitch detection object
+ 
+  \param p pitch detection object as returned by new_aubio_pitchyinfft()
+ 
+*/
+void del_aubio_pitchyinfft (aubio_pitchyinfft_t *p);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*PITCHYINFFT_H*/ 
--- a/src/pitchdetection.c
+++ /dev/null
@@ -1,246 +1,0 @@
-/*
-   Copyright (C) 2003 Paul Brossier
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-   */
-
-#include "aubio_priv.h"
-#include "sample.h"
-#include "phasevoc.h"
-#include "mathutils.h"
-#include "filter.h"
-#include "pitchmcomb.h"
-#include "pitchyin.h"
-#include "pitchfcomb.h"
-#include "pitchschmitt.h"
-#include "pitchyinfft.h"
-#include "pitchdetection.h"
-
-typedef smpl_t (*aubio_pitchdetection_func_t)
-  (aubio_pitchdetection_t *p, fvec_t * ibuf);
-typedef smpl_t (*aubio_pitchdetection_conv_t)
-  (smpl_t value, uint_t srate, uint_t bufsize);
-
-void aubio_pitchdetection_slideblock(aubio_pitchdetection_t *p, fvec_t *ibuf);
-
-smpl_t aubio_pitchdetection_mcomb   (aubio_pitchdetection_t *p, fvec_t *ibuf);
-smpl_t aubio_pitchdetection_yin     (aubio_pitchdetection_t *p, fvec_t *ibuf);
-smpl_t aubio_pitchdetection_schmitt (aubio_pitchdetection_t *p, fvec_t *ibuf);
-smpl_t aubio_pitchdetection_fcomb   (aubio_pitchdetection_t *p, fvec_t *ibuf);
-smpl_t aubio_pitchdetection_yinfft  (aubio_pitchdetection_t *p, fvec_t *ibuf);
-
-/** generic pitch detection structure */
-struct _aubio_pitchdetection_t {
-  aubio_pitchdetection_type type; /**< pitch detection mode */
-  aubio_pitchdetection_mode mode; /**< pitch detection output mode */
-  uint_t srate;                   /**< samplerate */
-  uint_t bufsize;                 /**< buffer size */
-  aubio_pitchmcomb_t * mcomb;     /**< mcomb object */
-  aubio_pitchfcomb_t * fcomb;     /**< fcomb object */
-  aubio_pitchschmitt_t * schmitt; /**< schmitt object */
-  aubio_pitchyinfft_t * yinfft;   /**< yinfft object */
-  aubio_filter_t * filter;        /**< filter */
-  aubio_pvoc_t * pv;              /**< phase vocoder for mcomb */ 
-  cvec_t * fftgrain;              /**< spectral frame for mcomb */
-  fvec_t * buf;                   /**< temporary buffer for yin */
-  fvec_t * yin;                   /**< yin function */
-  smpl_t yinthres;                /**< yin peak picking threshold parameter */
-  aubio_pitchdetection_func_t callback; /**< pointer to current pitch detection method */
-  aubio_pitchdetection_conv_t freqconv; /**< pointer to current pitch conversion method */ 
-};
-
-/* convenience wrapper function for frequency unit conversions 
- * should probably be rewritten with #defines */
-smpl_t freqconvbin(smpl_t f,uint_t srate,uint_t bufsize);
-smpl_t freqconvbin(smpl_t f,uint_t srate,uint_t bufsize){
-  return aubio_freqtobin(f,srate,bufsize);
-}
-
-smpl_t freqconvmidi(smpl_t f,uint_t srate,uint_t bufsize);
-smpl_t freqconvmidi(smpl_t f,uint_t srate UNUSED,uint_t bufsize UNUSED){
-  return aubio_freqtomidi(f);
-}
-
-smpl_t freqconvpass(smpl_t f,uint_t srate,uint_t bufsize);
-smpl_t freqconvpass(smpl_t f,uint_t srate UNUSED,uint_t bufsize UNUSED){
-  return f;
-}
-
-aubio_pitchdetection_t * new_aubio_pitchdetection(uint_t bufsize, 
-    uint_t hopsize, 
-    uint_t channels,
-    uint_t samplerate,
-    aubio_pitchdetection_type type,
-    aubio_pitchdetection_mode mode)
-{
-  aubio_pitchdetection_t *p = AUBIO_NEW(aubio_pitchdetection_t);
-  p->srate = samplerate;
-  p->type = type;
-  p->mode = mode;
-  p->bufsize = bufsize;
-  switch(p->type) {
-    case aubio_pitch_yin:
-      p->buf      = new_fvec(bufsize,channels);
-      p->yin      = new_fvec(bufsize/2,channels);
-      p->callback = aubio_pitchdetection_yin;
-      p->yinthres = 0.15;
-      break;
-    case aubio_pitch_mcomb:
-      p->pv       = new_aubio_pvoc(bufsize, hopsize, channels);
-      p->fftgrain = new_cvec(bufsize, channels);
-      p->mcomb    = new_aubio_pitchmcomb(bufsize,hopsize,channels,samplerate);
-      p->filter   = new_aubio_cdsgn_filter(samplerate);
-      p->callback = aubio_pitchdetection_mcomb;
-      break;
-    case aubio_pitch_fcomb:
-      p->buf      = new_fvec(bufsize,channels);
-      p->fcomb    = new_aubio_pitchfcomb(bufsize,hopsize,samplerate);
-      p->callback = aubio_pitchdetection_fcomb;
-      break;
-    case aubio_pitch_schmitt:
-      p->buf      = new_fvec(bufsize,channels);
-      p->schmitt  = new_aubio_pitchschmitt(bufsize,samplerate);
-      p->callback = aubio_pitchdetection_schmitt;
-      break;
-    case aubio_pitch_yinfft:
-      p->buf      = new_fvec(bufsize,channels);
-      p->yinfft   = new_aubio_pitchyinfft(bufsize);
-      p->callback = aubio_pitchdetection_yinfft;
-      p->yinthres = 0.85;
-      break;
-    default:
-      break;
-  }
-  switch(p->mode) {
-    case aubio_pitchm_freq:
-      p->freqconv = freqconvpass;
-      break;
-    case aubio_pitchm_midi:
-      p->freqconv = freqconvmidi;
-      break;
-    case aubio_pitchm_cent:
-      /* bug: not implemented */
-      p->freqconv = freqconvmidi;
-      break;
-    case aubio_pitchm_bin:
-      p->freqconv = freqconvbin;
-      break;
-    default:
-      break;
-  }
-  return p;
-}
-
-void del_aubio_pitchdetection(aubio_pitchdetection_t * p) {
-  switch(p->type) {
-    case aubio_pitch_yin:
-      del_fvec(p->yin);
-      del_fvec(p->buf);
-      break;
-    case aubio_pitch_mcomb:
-      del_aubio_pvoc(p->pv);
-      del_cvec(p->fftgrain);
-      del_aubio_filter(p->filter);
-      del_aubio_pitchmcomb(p->mcomb);
-      break;
-    case aubio_pitch_schmitt:
-      del_fvec(p->buf);
-      del_aubio_pitchschmitt(p->schmitt);
-      break;
-    case aubio_pitch_fcomb:
-      del_fvec(p->buf);
-      del_aubio_pitchfcomb(p->fcomb);
-      break;
-    case aubio_pitch_yinfft:
-      del_fvec(p->buf);
-      del_aubio_pitchyinfft(p->yinfft);
-      break;
-    default:
-      break;
-  }
-  AUBIO_FREE(p);
-}
-
-void aubio_pitchdetection_slideblock(aubio_pitchdetection_t *p, fvec_t *ibuf){
-  uint_t i,j = 0, overlap_size = 0;
-  overlap_size = p->buf->length-ibuf->length;
-  for (i=0;i<p->buf->channels;i++){
-    for (j=0;j<overlap_size;j++){
-      p->buf->data[i][j] = p->buf->data[i][j+ibuf->length];
-    }
-  }
-  for (i=0;i<ibuf->channels;i++){
-    for (j=0;j<ibuf->length;j++){
-      p->buf->data[i][j+overlap_size] = ibuf->data[i][j];
-    }
-  }
-}
-
-void aubio_pitchdetection_set_yinthresh(aubio_pitchdetection_t *p, smpl_t thres) {
-  p->yinthres = thres;
-}
-
-smpl_t aubio_pitchdetection(aubio_pitchdetection_t *p, fvec_t * ibuf) {
-  return p->freqconv(p->callback(p,ibuf),p->srate,p->bufsize);
-}
-
-smpl_t aubio_pitchdetection_mcomb(aubio_pitchdetection_t *p, fvec_t *ibuf) {
-  smpl_t pitch = 0.;
-  aubio_filter_do(p->filter,ibuf);
-  aubio_pvoc_do(p->pv,ibuf,p->fftgrain);
-  pitch = aubio_pitchmcomb_detect(p->mcomb,p->fftgrain);
-  /** \bug should move the >0 check within aubio_bintofreq */
-  if (pitch>0.) {
-    pitch = aubio_bintofreq(pitch,p->srate,p->bufsize);
-  } else {
-    pitch = 0.;
-  }
-  return pitch;
-}
-
-smpl_t aubio_pitchdetection_yin(aubio_pitchdetection_t *p, fvec_t *ibuf) {
-  smpl_t pitch = 0.;
-  aubio_pitchdetection_slideblock(p,ibuf);
-  pitch = aubio_pitchyin_getpitchfast(p->buf,p->yin, p->yinthres);
-  if (pitch>0) {
-    pitch = p->srate/(pitch+0.);
-  } else {
-    pitch = 0.;
-  }
-  return pitch;
-}
-
-
-smpl_t aubio_pitchdetection_yinfft(aubio_pitchdetection_t *p, fvec_t *ibuf){
-  smpl_t pitch = 0.;
-  aubio_pitchdetection_slideblock(p,ibuf);
-  pitch = aubio_pitchyinfft_detect(p->yinfft,p->buf,p->yinthres);
-  if (pitch>0) {
-    pitch = p->srate/(pitch+0.);
-  } else {
-    pitch = 0.;
-  }
-  return pitch; 
-}
-
-smpl_t aubio_pitchdetection_fcomb(aubio_pitchdetection_t *p, fvec_t *ibuf){
-  aubio_pitchdetection_slideblock(p,ibuf);
-  return aubio_pitchfcomb_detect(p->fcomb,p->buf);
-}
-
-smpl_t aubio_pitchdetection_schmitt(aubio_pitchdetection_t *p, fvec_t *ibuf){
-  aubio_pitchdetection_slideblock(p,ibuf);
-  return aubio_pitchschmitt_detect(p->schmitt,p->buf);
-}
--- a/src/pitchdetection.h
+++ /dev/null
@@ -1,98 +1,0 @@
-/*
-   Copyright (C) 2003 Paul Brossier
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-   */
-
-#ifndef PITCHAUTOTCORR_H
-#define PITCHAUTOTCORR_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** \file
-
-  Generic method for pitch detection
-
-  This file creates the objects required for the computation of the selected
-  pitch detection algorithm and output the results, in midi note or Hz.
-
-*/
-
-/** pitch detection algorithm */
-typedef enum {
-  aubio_pitch_yin,     /**< YIN algorithm */
-  aubio_pitch_mcomb,   /**< Multi-comb filter */
-  aubio_pitch_schmitt, /**< Schmitt trigger */
-  aubio_pitch_fcomb,   /**< Fast comb filter */
-  aubio_pitch_yinfft   /**< Spectral YIN */
-} aubio_pitchdetection_type;
-
-/** pitch detection output mode */
-typedef enum {
-  aubio_pitchm_freq,   /**< Frequency (Hz) */
-  aubio_pitchm_midi,   /**< MIDI note (0.,127) */
-  aubio_pitchm_cent,   /**< Cent */
-  aubio_pitchm_bin     /**< Frequency bin (0,bufsize) */
-} aubio_pitchdetection_mode;
-
-/** pitch detection object */
-typedef struct _aubio_pitchdetection_t aubio_pitchdetection_t;
-
-/** execute pitch detection on an input signal frame
-
-  \param p pitch detection object as returned by new_aubio_pitchdetection
-  \param ibuf input signal of length hopsize
-
-*/
-smpl_t aubio_pitchdetection(aubio_pitchdetection_t * p, fvec_t * ibuf);
-
-/** change yin or yinfft tolerance threshold
-
-  default is 0.15 for yin and 0.85 for yinfft
-
-*/
-void aubio_pitchdetection_set_yinthresh(aubio_pitchdetection_t *p, smpl_t thres);
-
-/** deletion of the pitch detection object
-
-  \param p pitch detection object as returned by new_aubio_pitchdetection
-
-*/
-void del_aubio_pitchdetection(aubio_pitchdetection_t * p);
-
-/** creation of the pitch detection object
-
-  \param bufsize size of the input buffer to analyse
-  \param hopsize step size between two consecutive analysis instant
-  \param channels number of channels to analyse
-  \param samplerate sampling rate of the signal
-  \param type set pitch detection algorithm
-  \param mode set pitch units for output
-
-*/
-aubio_pitchdetection_t * new_aubio_pitchdetection(uint_t bufsize,
-    uint_t hopsize,
-    uint_t channels,
-    uint_t samplerate,
-    aubio_pitchdetection_type type,
-    aubio_pitchdetection_mode mode);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /*PITCHDETECTION_H*/
--- a/src/pitchfcomb.c
+++ /dev/null
@@ -1,135 +1,0 @@
-/*
-   Copyright (C) 2004, 2005  Mario Lang <[email protected]>
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-*/
-
-#include "aubio_priv.h"
-#include "sample.h"
-#include "mathutils.h"
-#include "fft.h"
-#include "pitchfcomb.h"
-
-#define MAX_PEAKS 8
-
-typedef struct {
-  smpl_t freq;
-  smpl_t db;
-} aubio_fpeak_t;
-
-struct _aubio_pitchfcomb_t {
-  uint_t fftSize;
-  uint_t stepSize;
-  uint_t rate;
-  fvec_t * winput;
-  fvec_t * win;
-  cvec_t * fftOut;
-  fvec_t * fftLastPhase;
-  aubio_fft_t * fft;
-  //aubio_pvoc_t * pvoc;
-};
-
-aubio_pitchfcomb_t * new_aubio_pitchfcomb (uint_t bufsize, uint_t hopsize, uint_t samplerate)
-{
-  aubio_pitchfcomb_t * p = AUBIO_NEW(aubio_pitchfcomb_t);
-  p->rate         = samplerate;
-  p->fftSize      = bufsize;
-  p->stepSize     = hopsize;
-  p->winput       = new_fvec(bufsize,1);
-  p->fftOut       = new_cvec(bufsize,1);
-  p->fftLastPhase = new_fvec(bufsize,1);
-  p->fft = new_aubio_fft(bufsize, 1);
-  p->win = new_fvec(bufsize,1);
-  aubio_window(p->win->data[0], bufsize, aubio_win_hanning);
-  return p;
-}
-
-/* input must be stepsize long */
-smpl_t aubio_pitchfcomb_detect (aubio_pitchfcomb_t * p, fvec_t * input)
-{
-  uint_t k, l, maxharm = 0;
-  smpl_t freqPerBin = p->rate/(smpl_t)p->fftSize,
-    phaseDifference = TWO_PI*(smpl_t)p->stepSize/(smpl_t)p->fftSize;
-  aubio_fpeak_t peaks[MAX_PEAKS];
-
-  for (k=0; k<MAX_PEAKS; k++) {
-    peaks[k].db = -200.;
-    peaks[k].freq = 0.;
-  }
-
-  for (k=0; k < input->length; k++){
-    p->winput->data[0][k] = p->win->data[0][k] * input->data[0][k];
-  }
-  aubio_fft_do(p->fft,p->winput,p->fftOut);
-
-  for (k=0; k<=p->fftSize/2; k++) {
-    smpl_t
-      magnitude = 20.*LOG10(2.*p->fftOut->norm[0][k]/(smpl_t)p->fftSize),
-      phase     = p->fftOut->phas[0][k],
-      tmp, freq;
-
-    /* compute phase difference */
-    tmp = phase - p->fftLastPhase->data[0][k];
-    p->fftLastPhase->data[0][k] = phase;
-
-    /* subtract expected phase difference */
-    tmp -= (smpl_t)k*phaseDifference;
-
-    /* map delta phase into +/- Pi interval */
-    tmp = aubio_unwrap2pi(tmp);
-
-    /* get deviation from bin frequency from the +/- Pi interval */
-    tmp = p->fftSize/(smpl_t)p->stepSize*tmp/(TWO_PI);
-
-    /* compute the k-th partials' true frequency */
-    freq = (smpl_t)k*freqPerBin + tmp*freqPerBin;
-
-    if (freq > 0.0 && magnitude > peaks[0].db) { // && magnitude < 0) {
-      memmove(peaks+1, peaks, sizeof(aubio_fpeak_t)*(MAX_PEAKS-1));
-      peaks[0].freq = freq;
-      peaks[0].db = magnitude;
-    }
-  }
-
-  k = 0;
-  for (l=1; l<MAX_PEAKS && peaks[l].freq > 0.0; l++) {
-    sint_t harmonic;
-    for (harmonic=5; harmonic>1; harmonic--) {
-      if (peaks[0].freq / peaks[l].freq < harmonic+.02 &&
-          peaks[0].freq / peaks[l].freq > harmonic-.02) {
-        if (harmonic > (sint_t)maxharm &&
-            peaks[0].db < peaks[l].db/2) {
-          maxharm = harmonic;
-          k = l;
-        }
-      }
-    }
-  }
-  /* quick hack to clean output a bit */
-  if (peaks[k].freq > 5000.) return 0.;
-  return peaks[k].freq;
-}
-
-void del_aubio_pitchfcomb (aubio_pitchfcomb_t * p)
-{
-  del_cvec(p->fftOut);
-  del_fvec(p->fftLastPhase);
-  del_fvec(p->win);
-  del_fvec(p->winput);
-  del_aubio_fft(p->fft);
-  AUBIO_FREE(p);
-}
-
--- a/src/pitchfcomb.h
+++ /dev/null
@@ -1,73 +1,0 @@
-/*
-   Copyright (C) 2003 Paul Brossier
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-*/
-
-/** \file
-
-   Pitch detection using a fast harmonic comb filter
-
-   This pitch extraction method implements a fast harmonic comb filter to
-   determine the fundamental frequency of a harmonic sound.
-
-   This file was derived from the tuneit project, written by Mario Lang to
-   detect the fundamental frequency of a sound.
-   
-   see http://delysid.org/tuneit.html 
-
-*/
-
-#ifndef _PITCHFCOMB_H
-#define _PITCHFCOMB_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** pitch detection object */
-typedef struct _aubio_pitchfcomb_t aubio_pitchfcomb_t;
-
-/** execute pitch detection on an input buffer 
- 
-  \param p pitch detection object as returned by new_aubio_pitchfcomb
-  \param input input signal window (length as specified at creation time) 
- 
-*/
-smpl_t aubio_pitchfcomb_detect (aubio_pitchfcomb_t *p, fvec_t * input);
-/** creation of the pitch detection object
- 
-  \param bufsize size of the input buffer to analyse 
-  \param hopsize step size between two consecutive analysis instant 
-  \param samplerate sampling rate of the signal 
- 
-*/
-aubio_pitchfcomb_t * new_aubio_pitchfcomb (uint_t bufsize, uint_t hopsize, uint_t samplerate);
-/** deletion of the pitch detection object
- 
-  \param p pitch detection object as returned by new_aubio_pitchfcomb
- 
-*/
-void del_aubio_pitchfcomb (aubio_pitchfcomb_t *p);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _PITCHFCOMB_H */
-
-
--- a/src/pitchmcomb.c
+++ /dev/null
@@ -1,376 +1,0 @@
-/*
-   Copyright (C) 2003 Paul Brossier
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-*/
-
-#include "aubio_priv.h"
-#include "sample.h"
-#include "mathutils.h"
-#include "pitchmcomb.h"
-
-#define CAND_SWAP(a,b) { register aubio_spectralcandidate_t *t=(a);(a)=(b);(b)=t; }
-
-typedef struct _aubio_spectralpeak_t aubio_spectralpeak_t;
-typedef struct _aubio_spectralcandidate_t aubio_spectralcandidate_t;
-uint_t aubio_pitchmcomb_get_root_peak(aubio_spectralpeak_t * peaks, uint_t length);
-uint_t aubio_pitchmcomb_quadpick(aubio_spectralpeak_t * spectral_peaks, fvec_t * X);
-void aubio_pitchmcomb_spectral_pp(aubio_pitchmcomb_t * p, fvec_t * oldmag);
-void aubio_pitchmcomb_combdet(aubio_pitchmcomb_t * p, fvec_t * newmag);
-/* not used but useful : sort by amplitudes (or anything else)
- * sort_pitchpeak(peaks, length);
- */
-/** spectral_peak comparison function (must return signed int) */
-static sint_t aubio_pitchmcomb_sort_peak_comp(const void *x, const void *y);
-/** sort spectral_peak against their mag */
-void aubio_pitchmcomb_sort_peak(aubio_spectralpeak_t * peaks, uint_t nbins);
-
-/** sort spectral_candidate against their comb ene */
-void aubio_pitchmcomb_sort_cand_ene(aubio_spectralcandidate_t ** candidates, uint_t nbins);
-/** sort spectral_candidate against their frequency */
-void aubio_pitchmcomb_sort_cand_freq(aubio_spectralcandidate_t ** candidates, uint_t nbins);
-
-struct _aubio_pitchmcomb_t {
-  smpl_t threshold;                        /**< offset threshold [0.033 or 0.01]     */
-  smpl_t alpha;                            /**< normalisation exponent [9]           */
-  smpl_t cutoff;                           /**< low-pass filter cutoff [0.34, 1]     */
-  smpl_t tol;                              /**< tolerance [0.05]                     */
-  smpl_t tau;                              /**< frequency precision [44100/4096]     */
-  uint_t win_post;                         /**< median filter window length          */
-  uint_t win_pre;                          /**< median filter window                 */
-  uint_t ncand;                            /**< maximum number of candidates (combs) */
-  uint_t npartials;                        /**< maximum number of partials per combs */
-  uint_t count;                            /**< picked picks                         */
-  uint_t goodcandidate;                    /**< best candidate                       */
-  uint_t spec_partition;                   /**< spectrum partition to consider       */
-  aubio_spectralpeak_t * peaks;            /**< up to length win/spec_partition      */
-  aubio_spectralcandidate_t ** candidates; /** up to five candidates                 */
-  /* some scratch pads */
-  /** \bug  (unnecessary copied from fftgrain?) */
-  fvec_t * newmag;                         /**< vec to store mag                     */
-  fvec_t * scratch;                        /**< vec to store modified mag            */
-  fvec_t * scratch2;                       /**< vec to compute moving median         */
-  fvec_t * theta;                         /**< vec to store phase                     */
-  smpl_t phasediff;
-  smpl_t phasefreq;
-  /** threshfn: name or handle of fn for computing adaptive threshold [median] */
-  /** aubio_thresholdfn_t thresholdfn; */
-  /** picker: name or handle of fn for picking event times [quadpick] */
-  /** aubio_pickerfn_t pickerfn; */
-};
-
-/** spectral peak object */
-struct _aubio_spectralpeak_t {
-  uint_t bin;     /**< bin [0-(length-1)] */
-  smpl_t ebin;    /**< estimated bin */
-  smpl_t mag;     /**< peak magnitude */
-};
-
-/** spectral candidates array object */
-struct _aubio_spectralcandidate_t {
-  smpl_t ebin;    /**< interpolated bin */
-  smpl_t * ecomb; /**< comb */
-  smpl_t ene;     /**< candidate energy */
-  smpl_t len;     /**< length */
-};
-
-
-smpl_t aubio_pitchmcomb_detect(aubio_pitchmcomb_t * p, cvec_t * fftgrain) {
-  uint_t i=0,j;
-  smpl_t instfreq;
-  fvec_t * newmag = (fvec_t *)p->newmag;
-  //smpl_t hfc; //fe=instfreq(theta1,theta,ops); //theta1=theta;
-  /* copy incoming grain to newmag */
-  for (j=0; j< newmag->length; j++)
-    newmag->data[i][j]=fftgrain->norm[i][j];
-  /* detect only if local energy > 10. */
-  //if (vec_local_energy(newmag)>10.) {
-    //hfc = vec_local_hfc(newmag); //not used
-    aubio_pitchmcomb_spectral_pp(p, newmag);
-    aubio_pitchmcomb_combdet(p,newmag);
-    //aubio_pitchmcomb_sort_cand_freq(p->candidates,p->ncand);
-    //return p->candidates[p->goodcandidate]->ebin;
-  j = (uint_t)FLOOR(p->candidates[p->goodcandidate]->ebin+.5);
-  instfreq  = aubio_unwrap2pi(fftgrain->phas[0][j]
-      - p->theta->data[0][j] - j*p->phasediff);
-  instfreq *= p->phasefreq;
-  /* store phase for next run */
-  for (j=0; j< p->theta->length; j++) {
-    p->theta->data[i][j]=fftgrain->phas[i][j];
-  }
-  //return p->candidates[p->goodcandidate]->ebin;
-  return FLOOR(p->candidates[p->goodcandidate]->ebin+.5) + instfreq;
-  /*} else {
-    return -1.;
-  }*/
-}
-
-uint_t aubio_pitch_cands(aubio_pitchmcomb_t * p, cvec_t * fftgrain,
-    smpl_t * cands) {
-  uint_t i=0,j;
-  uint_t k;
-  fvec_t * newmag = (fvec_t *)p->newmag;
-  aubio_spectralcandidate_t ** scands =
-    (aubio_spectralcandidate_t **)(p->candidates);
-  //smpl_t hfc; //fe=instfreq(theta1,theta,ops); //theta1=theta;
-  /* copy incoming grain to newmag */
-  for (j=0; j< newmag->length; j++)
-    newmag->data[i][j]=fftgrain->norm[i][j];
-  /* detect only if local energy > 10. */
-  if (vec_local_energy(newmag)>10.) {
-    /* hfc = vec_local_hfc(newmag); do not use */
-    aubio_pitchmcomb_spectral_pp(p, newmag);
-    aubio_pitchmcomb_combdet(p,newmag);
-    aubio_pitchmcomb_sort_cand_freq(scands,p->ncand);
-    /* store ncand comb energies in cands[1:ncand] */
-    for (k = 0; k<p->ncand; k++)
-      cands[k] = p->candidates[k]->ene;
-    /* store ncand[end] freq in cands[end] */
-    cands[p->ncand] = p->candidates[p->ncand-1]->ebin;
-    return 1;
-  } else {
-    for (k = 0; k<p->ncand; k++)
-      cands[k] = 0;
-    return 0;
-  }
-}
-
-void aubio_pitchmcomb_spectral_pp(aubio_pitchmcomb_t * p, fvec_t * newmag) {
-  fvec_t * mag = (fvec_t *)p->scratch;
-  fvec_t * tmp = (fvec_t *)p->scratch2;
-  uint_t i=0,j;
-  uint_t length = mag->length;
-  /* copy newmag to mag (scracth) */
-  for (j=0;j<length;j++) {
-    mag->data[i][j] = newmag->data[i][j];
-  }
-  vec_dc_removal(mag);               /* dc removal           */
-  vec_alpha_normalise(mag,p->alpha); /* alpha normalisation  */
-  /* skipped */                      /* low pass filtering   */
-  /** \bug vec_moving_thres may write out of bounds */
-  vec_adapt_thres(mag,tmp,p->win_post,p->win_pre); /* adaptative threshold */
-  vec_add(mag,-p->threshold);        /* fixed threshold      */
-  {
-    aubio_spectralpeak_t * peaks = (aubio_spectralpeak_t *)p->peaks;
-    uint_t count;
-    /*  return bin and ebin */
-    count = aubio_pitchmcomb_quadpick(peaks,mag);
-    for (j=0;j<count;j++)
-      peaks[j].mag = newmag->data[i][peaks[j].bin];
-    /* reset non peaks */
-    for (j=count;j<length;j++)
-      peaks[j].mag = 0.;
-    p->peaks = peaks;
-    p->count = count;
-  }
-}
-
-void aubio_pitchmcomb_combdet(aubio_pitchmcomb_t * p, fvec_t * newmag) {
-  aubio_spectralpeak_t * peaks = (aubio_spectralpeak_t *)p->peaks;
-  aubio_spectralcandidate_t ** candidate =
-    (aubio_spectralcandidate_t **)p->candidates;
-
-  /* parms */
-  uint_t N = p->npartials; /* maximum number of partials to be considered 10 */
-  uint_t M = p->ncand;  /* maximum number of combs to be considered 5 */
-  uint_t length = newmag->length;
-  uint_t count = p->count;
-  uint_t k;
-  uint_t l;
-  uint_t d;
-  uint_t curlen;
-
-  smpl_t delta2;
-  smpl_t xx;
-  uint_t position = 0;
-
-  uint_t root_peak = 0;
-  uint_t tmpl = 0;
-  smpl_t tmpene = 0.;
-
-  /* get the biggest peak in the spectrum */
-  root_peak = aubio_pitchmcomb_get_root_peak(peaks,count);
-  /* not enough partials in highest notes, could be forced */
-  //if (peaks[root_peak].ebin >= aubio_miditofreq(85.)/p->tau) N=2;
-  //if (peaks[root_peak].ebin >= aubio_miditofreq(90.)/p->tau) N=1;
-  /* now calculate the energy of each of the 5 combs */
-  for (l=0;l<M;l++) {
-    smpl_t scaler = (1./(l+1.));
-    candidate[l]->ene = 0.; /* reset ene and len sums */
-    candidate[l]->len = 0.;
-    candidate[l]->ebin=scaler*peaks[root_peak].ebin;
-    /* if less than N peaks available, curlen < N */
-    curlen = (uint_t)FLOOR(length/(candidate[l]->ebin));
-    curlen = (N < curlen )? N : curlen;
-    /* fill candidate[l]->ecomb[k] with (k+1)*candidate[l]->ebin */
-    for (k=0;k<curlen;k++)
-      candidate[l]->ecomb[k]=(candidate[l]->ebin)*(k+1.);
-    for (k=curlen;k<length;k++)
-      candidate[l]->ecomb[k]=0.;
-    /* for each in candidate[l]->ecomb[k] */
-    for (k=0;k<curlen;k++) {
-      xx = 100000.;
-      /** get the candidate->ecomb the closer to peaks.ebin
-       * (to cope with the inharmonicity)*/
-      for (d=0;d<count;d++) {
-        delta2 = ABS(candidate[l]->ecomb[k]-peaks[d].ebin);
-        if (delta2 <= xx) {
-          position = d;
-          xx = delta2;
-        }
-      }
-      /* for a Q factor of 17, maintaining "constant Q filtering",
-       * and sum energy and length over non null combs */
-      if ( 17. * xx < candidate[l]->ecomb[k] ) {
-        candidate[l]->ecomb[k]=peaks[position].ebin;
-        candidate[l]->ene += /* ecomb rounded to nearest int */
-          POW(newmag->data[0][(uint_t)FLOOR(candidate[l]->ecomb[k]+.5)],0.25);
-        candidate[l]->len += 1./curlen;
-      } else
-        candidate[l]->ecomb[k]=0.;
-    }
-    /* punishment */
-    /*if (candidate[l]->len<0.6)
-      candidate[l]->ene=0.; */
-    /* remember best candidate energy (in polyphonic, could check for
-     * tmpene*1.1 < candidate->ene to reduce jumps towards low frequencies) */
-    if (tmpene < candidate[l]->ene) {
-      tmpl = l;
-      tmpene = candidate[l]->ene;
-    }
-  }
-  //p->candidates=candidate;
-  //p->peaks=peaks;
-  p->goodcandidate = tmpl;
-}
-
-/** T=quadpick(X): return indices of elements of X which are peaks and positive
- * exact peak positions are retrieved by quadratic interpolation
- *
- * \bug peak-picking too picky, sometimes counts too many peaks ?
- */
-uint_t aubio_pitchmcomb_quadpick(aubio_spectralpeak_t * spectral_peaks, fvec_t * X){
-  uint_t i, j, ispeak, count = 0;
-  for (i=0;i<X->channels;i++)
-    for (j=1;j<X->length-1;j++) {
-      ispeak = vec_peakpick(X,j);
-      if (ispeak) {
-        count += ispeak;
-        spectral_peaks[count-1].bin = j;
-        spectral_peaks[count-1].ebin = vec_quadint(X,j) - 1.;
-      }
-    }
-  return count;
-}
-
-/* get predominant partial */
-uint_t aubio_pitchmcomb_get_root_peak(aubio_spectralpeak_t * peaks, uint_t length) {
-  uint_t i,pos=0;
-  smpl_t tmp = 0.;
-  for (i=0;i<length;i++)
-    if (tmp <= peaks[i].mag) {
-      pos = i;
-      tmp = peaks[i].mag;
-    }
-  return pos;
-}
-
-void aubio_pitchmcomb_sort_peak(aubio_spectralpeak_t * peaks, uint_t nbins) {
-  qsort(peaks, nbins, sizeof(aubio_spectralpeak_t),
-      aubio_pitchmcomb_sort_peak_comp);
-}
-static sint_t aubio_pitchmcomb_sort_peak_comp(const void *x, const void *y) {
-  return (((aubio_spectralpeak_t *)y)->mag - ((aubio_spectralpeak_t *)x)->mag);
-}
-
-
-void aubio_pitchmcomb_sort_cand_ene(aubio_spectralcandidate_t ** candidates, uint_t nbins) {
-  uint_t cur = 0;
-  uint_t run = 0;
-  for (cur=0;cur<nbins;cur++) {
-    run = cur + 1;
-    for (run=cur;run<nbins;run++) {
-      if(candidates[run]->ene > candidates[cur]->ene)
-        CAND_SWAP(candidates[run], candidates[cur]);
-    }
-  }
-}
-
-
-void aubio_pitchmcomb_sort_cand_freq(aubio_spectralcandidate_t ** candidates, uint_t nbins) {
-  uint_t cur = 0;
-  uint_t run = 0;
-  for (cur=0;cur<nbins;cur++) {
-    run = cur + 1;
-    for (run=cur;run<nbins;run++) {
-      if(candidates[run]->ebin < candidates[cur]->ebin)
-        CAND_SWAP(candidates[run], candidates[cur]);
-    }
-  }
-}
-
-aubio_pitchmcomb_t * new_aubio_pitchmcomb(uint_t bufsize, uint_t hopsize, uint_t channels, uint_t samplerate) {
-  aubio_pitchmcomb_t * p = AUBIO_NEW(aubio_pitchmcomb_t);
-  /* bug: should check if size / 8 > post+pre+1 */
-  uint_t i;
-  uint_t spec_size;
-  p->spec_partition   = 4;
-  p->ncand            = 5;
-  p->npartials        = 5;
-  p->cutoff           = 1.;
-  p->threshold        = 0.01;
-  p->win_post         = 8;
-  p->win_pre          = 7;
-  p->tau              = samplerate/bufsize;
-  p->alpha            = 9.;
-  p->goodcandidate    = 0;
-  p->phasefreq        = bufsize/hopsize/TWO_PI;
-  p->phasediff        = TWO_PI*hopsize/bufsize;
-  spec_size = bufsize/p->spec_partition;
-  //p->pickerfn = quadpick;
-  //p->biquad = new_biquad(0.1600,0.3200,0.1600, -0.5949, 0.2348);
-  /* allocate temp memory */
-  p->newmag     = new_fvec(spec_size,channels);
-  /* array for median */
-  p->scratch    = new_fvec(spec_size,channels);
-  /* array for phase */
-  p->theta      = new_fvec(spec_size,channels);
-  /* array for adaptative threshold */
-  p->scratch2   = new_fvec(p->win_post+p->win_pre+1,channels);
-  /* array of spectral peaks */
-  p->peaks      = AUBIO_ARRAY(aubio_spectralpeak_t,spec_size);
-  /* array of pointers to spectral candidates */
-  p->candidates = AUBIO_ARRAY(aubio_spectralcandidate_t *,p->ncand);
-  for (i=0;i<p->ncand;i++) {
-    p->candidates[i] = AUBIO_NEW(aubio_spectralcandidate_t);
-    p->candidates[i]->ecomb = AUBIO_ARRAY(smpl_t, spec_size);
-  }
-  return p;
-}
-
-
-void del_aubio_pitchmcomb (aubio_pitchmcomb_t *p) {
-  uint_t i;
-  del_fvec(p->newmag);
-  del_fvec(p->scratch);
-  del_fvec(p->scratch2);
-  AUBIO_FREE(p->peaks);
-  for (i=0;i<p->ncand;i++) {
-    AUBIO_FREE(p->candidates[i]);
-  }
-  AUBIO_FREE(p->candidates);
-  AUBIO_FREE(p);
-}
--- a/src/pitchmcomb.h
+++ /dev/null
@@ -1,74 +1,0 @@
-/*
-	 Copyright (C) 2003 Paul Brossier
-
-	 This program is free software; you can redistribute it and/or modify
-	 it under the terms of the GNU General Public License as published by
-	 the Free Software Foundation; either version 2 of the License, or
-	 (at your option) any later version.
-
-	 This program is distributed in the hope that it will be useful,
-	 but WITHOUT ANY WARRANTY; without even the implied warranty of
-	 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-	 GNU General Public License for more details.
-
-	 You should have received a copy of the GNU General Public License
-	 along with this program; if not, write to the Free Software
-	 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-*/
-
-/** \file
-
-  Pitch detection using multiple-comb filter
-
-  This fundamental frequency estimation algorithm implements spectral
-  flattening, multi-comb filtering and peak histogramming. 
-
-  This method was designed by Juan P. Bello and described in:
-
-  Juan-Pablo Bello. ``Towards the Automated Analysis of Simple Polyphonic
-  Music''.  PhD thesis, Centre for Digital Music, Queen Mary University of
-  London, London, UK, 2003.
-
-*/
-
-#ifndef PITCHMCOMB_H
-#define PITCHMCOMB_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** pitch detection object */
-typedef struct _aubio_pitchmcomb_t aubio_pitchmcomb_t;
-
-/** execute pitch detection on an input spectral frame
- 
-  \param p pitch detection object as returned by new_aubio_pitchmcomb
-  \param fftgrain input signal spectrum as computed by aubio_pvoc_do 
- 
-*/
-smpl_t aubio_pitchmcomb_detect(aubio_pitchmcomb_t * p, cvec_t * fftgrain);
-/** select the best candidates */
-uint_t aubio_pitch_cands(aubio_pitchmcomb_t * p, cvec_t * fftgrain, smpl_t * cands);
-/** creation of the pitch detection object
- 
-  \param bufsize size of the input buffer to analyse 
-  \param hopsize step size between two consecutive analysis instant 
-  \param channels number of channels to analyse
-  \param samplerate sampling rate of the signal 
- 
-*/
-aubio_pitchmcomb_t * new_aubio_pitchmcomb(uint_t bufsize, uint_t hopsize, uint_t channels, uint_t samplerate);
-/** deletion of the pitch detection object
- 
-  \param p pitch detection object as returned by new_aubio_pitchfcomb
- 
-*/
-void del_aubio_pitchmcomb(aubio_pitchmcomb_t *p);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif/*PITCHMCOMB_H*/ 
--- a/src/pitchschmitt.c
+++ /dev/null
@@ -1,107 +1,0 @@
-/*
-   Copyright (C) 2004, 2005  Mario Lang <[email protected]>
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-*/
-
-#include "aubio_priv.h"
-#include "sample.h"
-#include "pitchschmitt.h"
-
-smpl_t aubio_schmittS16LE (aubio_pitchschmitt_t *p, uint_t nframes, signed short int *indata);
-
-struct _aubio_pitchschmitt_t {
-        uint_t blockSize;
-        uint_t rate;
-        signed short int *schmittBuffer;
-        signed short int *schmittPointer;
-};
-
-aubio_pitchschmitt_t * new_aubio_pitchschmitt (uint_t size, uint_t samplerate)
-{
-  aubio_pitchschmitt_t * p = AUBIO_NEW(aubio_pitchschmitt_t);
-  p->blockSize = size;
-  p->schmittBuffer = AUBIO_ARRAY(signed short int,p->blockSize);
-  p->schmittPointer = p->schmittBuffer;
-  p->rate = samplerate;
-  return p;
-}
-
-smpl_t aubio_pitchschmitt_detect (aubio_pitchschmitt_t *p, fvec_t * input)
-{
-  signed short int buf[input->length];
-  uint_t i;
-  for (i=0; i<input->length; i++) {
-    buf[i] = input->data[0][i]*32768.;
-  }
-  return aubio_schmittS16LE(p, input->length, buf);
-}
-
-smpl_t aubio_schmittS16LE (aubio_pitchschmitt_t *p, uint_t nframes, signed short int *indata)
-{
-  uint_t i, j;
-  uint_t blockSize = p->blockSize;
-  signed short int *schmittBuffer = p->schmittBuffer;
-  signed short int *schmittPointer = p->schmittPointer;
-
-  smpl_t freq = 0., trigfact = 0.6;
-
-  for (i=0; i<nframes; i++) {
-    *schmittPointer++ = indata[i];
-    if (schmittPointer-schmittBuffer >= (sint_t)blockSize) {
-      sint_t endpoint, startpoint, t1, t2, A1, A2, tc, schmittTriggered;
-
-      schmittPointer = schmittBuffer;
-
-      for (j=0,A1=0,A2=0; j<blockSize; j++) {
-	if (schmittBuffer[j]>0 && A1<schmittBuffer[j])  A1 = schmittBuffer[j];
-	if (schmittBuffer[j]<0 && A2<-schmittBuffer[j]) A2 = -schmittBuffer[j];
-      }
-      t1 =   (sint_t)( A1 * trigfact + 0.5);
-      t2 = - (sint_t)( A2 * trigfact + 0.5);
-      startpoint=0;
-      for (j=1; schmittBuffer[j]<=t1 && j<blockSize; j++);
-      for (; !(schmittBuffer[j]  >=t2 &&
-	       schmittBuffer[j+1]< t2) && j<blockSize; j++);
-      startpoint=j;
-      schmittTriggered=0;
-      endpoint=startpoint+1;
-      for(j=startpoint,tc=0; j<blockSize; j++) {
-	if (!schmittTriggered) {
-	  schmittTriggered = (schmittBuffer[j] >= t1);
-	} else if (schmittBuffer[j]>=t2 && schmittBuffer[j+1]<t2) {
-	  endpoint=j;
-	  tc++;
-	  schmittTriggered = 0;
-	}
-      }
-      if (endpoint > startpoint) {
-	freq = ((smpl_t)p->rate*(tc/(smpl_t)(endpoint-startpoint)));
-      }
-    }
-  }
-
-  p->schmittBuffer  = schmittBuffer;
-  p->schmittPointer = schmittPointer;
-  return freq;
-}
-
-void del_aubio_pitchschmitt (aubio_pitchschmitt_t *p)
-{
-  AUBIO_FREE(p->schmittBuffer);
-  AUBIO_FREE(p);
-}
-
--- a/src/pitchschmitt.h
+++ /dev/null
@@ -1,71 +1,0 @@
-/*
-   Copyright (C) 2003 Paul Brossier
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-*/
-
-/** \file 
-
-   Pitch detection using a Schmitt trigger 
- 
-   This pitch extraction method implements a Schmitt trigger to estimate the
-   period of a signal.
-
-   This file was derived from the tuneit project, written by Mario Lang to
-   detect the fundamental frequency of a sound.
-   
-   see http://delysid.org/tuneit.html 
-
-*/
-
-#ifndef _PITCHSCHMITT_H
-#define _PITCHSCHMITT_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** pitch detection object */
-typedef struct _aubio_pitchschmitt_t aubio_pitchschmitt_t;
-
-/** execute pitch detection on an input buffer 
- 
-  \param p pitch detection object as returned by new_aubio_pitchschmitt 
-  \param input input signal window (length as specified at creation time) 
- 
-*/
-smpl_t aubio_pitchschmitt_detect (aubio_pitchschmitt_t *p, fvec_t * input);
-/** creation of the pitch detection object
- 
-  \param size size of the input buffer to analyse 
-  \param samplerate sampling rate of the signal 
- 
-*/
-aubio_pitchschmitt_t * new_aubio_pitchschmitt (uint_t size, uint_t samplerate);
-/** deletion of the pitch detection object
- 
-  \param p pitch detection object as returned by new_aubio_pitchschmitt 
- 
-*/
-void del_aubio_pitchschmitt (aubio_pitchschmitt_t *p);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _PITCHSCHMITT_H */
-
--- a/src/pitchyin.c
+++ /dev/null
@@ -1,115 +1,0 @@
-/*
-   Copyright (C) 2003 Paul Brossier
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-/* This algorithm was developped by A. de Cheveigne and H. Kawahara and
- * published in:
- * 
- * de Cheveigné, A., Kawahara, H. (2002) "YIN, a fundamental frequency
- * estimator for speech and music", J. Acoust. Soc. Am. 111, 1917-1930.  
- *
- * see http://recherche.ircam.fr/equipes/pcm/pub/people/cheveign.html
- */
-
-#include "aubio_priv.h"
-#include "sample.h"
-#include "mathutils.h"
-#include "pitchyin.h"
-
-/* outputs the difference function */
-void aubio_pitchyin_diff(fvec_t * input, fvec_t * yin){
-	uint_t c,j,tau;
-	smpl_t tmp;
-	for (c=0;c<input->channels;c++)
-	{
-		for (tau=0;tau<yin->length;tau++)
-		{
-			yin->data[c][tau] = 0.;
-		}
-		for (tau=1;tau<yin->length;tau++)
-		{
-			for (j=0;j<yin->length;j++)
-			{
-				tmp = input->data[c][j] - input->data[c][j+tau];
-				yin->data[c][tau] += SQR(tmp);
-			}
-		}
-	}
-}
-
-/* cumulative mean normalized difference function */
-void aubio_pitchyin_getcum(fvec_t * yin) {
-	uint_t c,tau;
-	smpl_t tmp;
-	for (c=0;c<yin->channels;c++)
-	{
-		tmp = 0.;
-		yin->data[c][0] = 1.;
-		//AUBIO_DBG("%f\t",yin->data[c][0]);
-		for (tau=1;tau<yin->length;tau++)
-		{
-			tmp += yin->data[c][tau];
-			yin->data[c][tau] *= tau/tmp;
-			//AUBIO_DBG("%f\t",yin->data[c][tau]);
-		}
-		//AUBIO_DBG("\n");
-	}
-}
-
-uint_t aubio_pitchyin_getpitch(fvec_t * yin) {
-	uint_t c=0,tau=1;
-	do 
-	{
-		if(yin->data[c][tau] < 0.1) { 
-			while (yin->data[c][tau+1] < yin->data[c][tau]) {
-				tau++;
-			}
-			return tau;
-		}
-		tau++;
-	} while (tau<yin->length);
-	//AUBIO_DBG("No pitch found");
-	return 0;
-}
-
-
-/* all the above in one */
-smpl_t aubio_pitchyin_getpitchfast(fvec_t * input, fvec_t * yin, smpl_t tol){
-	uint_t c=0,j,tau = 0;
-	sint_t period;
-	smpl_t tmp = 0., tmp2 = 0.;
-	yin->data[c][0] = 1.;
-	for (tau=1;tau<yin->length;tau++)
-	{
-		yin->data[c][tau] = 0.;
-		for (j=0;j<yin->length;j++)
-		{
-			tmp = input->data[c][j] - input->data[c][j+tau];
-			yin->data[c][tau] += SQR(tmp);
-		}
-		tmp2 += yin->data[c][tau];
-		yin->data[c][tau] *= tau/tmp2;
-		period = tau-3;
-		if(tau > 4 && (yin->data[c][period] < tol) && 
-                                (yin->data[c][period] < yin->data[c][period+1])) {
-			return vec_quadint_min(yin,period,1);
-		}
-        }
-	return vec_quadint_min(yin,vec_min_elem(yin),1);
-	//return 0;
-}
-
--- a/src/pitchyin.h
+++ /dev/null
@@ -1,75 +1,0 @@
-/*
-   Copyright (C) 2003 Paul Brossier
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-/** \file 
-  
-  Pitch detection using the YIN algorithm
- 
-  This algorithm was developped by A. de Cheveigne and H. Kawahara and
-  published in:
-  
-  De Cheveigné, A., Kawahara, H. (2002) "YIN, a fundamental frequency
-  estimator for speech and music", J. Acoust. Soc. Am. 111, 1917-1930.  
- 
-  see http://recherche.ircam.fr/equipes/pcm/pub/people/cheveign.html
-
-*/
-
-#ifndef PITCHYIN_H
-#define PITCHYIN_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** compute difference function
-  
-  \param input input signal 
-  \param yinbuf output buffer to store difference function (half shorter than input)
-
-*/
-void aubio_pitchyin_diff(fvec_t * input, fvec_t * yinbuf);
-
-/** in place computation of the YIN cumulative normalised function 
-  
-  \param yinbuf input signal (a square difference function), also used to store function 
-
-*/
-void aubio_pitchyin_getcum(fvec_t * yinbuf);
-
-/** detect pitch in a YIN function
-  
-  \param yinbuf input buffer as computed by aubio_pitchyin_getcum
-
-*/
-uint_t aubio_pitchyin_getpitch(fvec_t *yinbuf);
-
-/** fast implementation of the YIN algorithm 
-  
-  \param input input signal 
-  \param yinbuf input buffer used to compute the YIN function
-  \param tol tolerance parameter for minima selection [default 0.15]
-
-*/
-smpl_t aubio_pitchyin_getpitchfast(fvec_t * input, fvec_t *yinbuf, smpl_t tol);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /*PITCHYIN_H*/ 
--- a/src/pitchyinfft.c
+++ /dev/null
@@ -1,153 +1,0 @@
-/*
-   Copyright (C) 2003 Paul Brossier
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-#include "aubio_priv.h"
-#include "sample.h"
-#include "mathutils.h"
-#include "fft.h"
-#include "pitchyinfft.h"
-
-/** pitch yinfft structure */
-struct _aubio_pitchyinfft_t {
-  fvec_t * win;       /**< temporal weighting window */
-  fvec_t * winput;    /**< windowed spectrum */
-  cvec_t * res;       /**< complex vector to compute square difference function */
-  fvec_t * sqrmag;    /**< square difference function */
-  fvec_t * weight;    /**< spectral weighting window (psychoacoustic model) */
-  cvec_t * fftout;    /**< Fourier transform output */
-  aubio_fft_t * fft; /**< fft object to compute square difference function */
-  fvec_t * yinfft;    /**< Yin function */
-};
-
-static const smpl_t freqs[] = {0., 20., 25., 31.5, 40., 50., 63., 80., 100.,
-  125., 160., 200., 250., 315., 400., 500., 630., 800., 1000., 1250.,
-  1600., 2000., 2500., 3150., 4000., 5000., 6300., 8000., 9000., 10000.,
-  12500., 15000., 20000.,  25100};
-
-static const smpl_t weight[] = {-75.8, -70.1, -60.8, -52.1, -44.2, -37.5,
-  -31.3, -25.6, -20.9, -16.5, -12.6, -9.6, -7.0, -4.7, -3.0, -1.8, -0.8,
-  -0.2, -0.0, 0.5, 1.6, 3.2, 5.4, 7.8, 8.1, 5.3, -2.4, -11.1, -12.8,
-  -12.2, -7.4, -17.8, -17.8, -17.8};
-
-aubio_pitchyinfft_t * new_aubio_pitchyinfft (uint_t bufsize)
-{
-  aubio_pitchyinfft_t * p = AUBIO_NEW(aubio_pitchyinfft_t);
-  p->winput = new_fvec(bufsize,1);
-  p->fft    = new_aubio_fft(bufsize, 1);
-  p->fftout = new_cvec(bufsize,1);
-  p->sqrmag = new_fvec(bufsize,1);
-  p->res    = new_cvec(bufsize,1);
-  p->yinfft = new_fvec(bufsize/2+1,1);
-  p->win    = new_fvec(bufsize,1);
-  aubio_window(p->win->data[0], bufsize, aubio_win_hanningz);
-  p->weight      = new_fvec(bufsize/2+1,1);
-  {
-    uint_t i = 0, j = 1;
-    smpl_t freq = 0, a0 = 0, a1 = 0, f0 = 0, f1 = 0;
-    for (i=0; i<p->weight->length; i++) {
-      freq = (smpl_t)i/(smpl_t)bufsize*(smpl_t)44100.;
-      while (freq > freqs[j]) {
-        j +=1;
-            }
-      a0 = weight[j-1];
-      f0 = freqs[j-1];
-            a1 = weight[j];
-      f1 = freqs[j];
-      if (f0 == f1) { // just in case
-        p->weight->data[0][i] = a0;
-      } else if (f0 == 0) { // y = ax+b
-        p->weight->data[0][i] = (a1-a0)/f1*freq + a0;
-      } else {
-        p->weight->data[0][i] = (a1-a0)/(f1-f0)*freq +
-          (a0 - (a1 - a0)/(f1/f0 - 1.));
-      }
-      while (freq > freqs[j]) {
-        j +=1;
-      }
-      //AUBIO_DBG("%f\n",p->weight->data[0][i]);
-      p->weight->data[0][i] = DB2LIN(p->weight->data[0][i]);
-      //p->weight->data[0][i] = SQRT(DB2LIN(p->weight->data[0][i]));
-    }
-  }
-  return p;
-}
-
-smpl_t aubio_pitchyinfft_detect(aubio_pitchyinfft_t * p, fvec_t * input, smpl_t tol) {
-  uint_t tau, l = 0;
-  uint_t halfperiod;
-  smpl_t tmp = 0, sum = 0;
-  cvec_t * res = (cvec_t *)p->res;
-  fvec_t * yin = (fvec_t *)p->yinfft;
-  for (l=0; l < input->length; l++){
-    p->winput->data[0][l] = p->win->data[0][l] * input->data[0][l];
-  }
-  aubio_fft_do(p->fft,p->winput,p->fftout);
-  for (l=0; l < p->fftout->length; l++){
-    p->sqrmag->data[0][l] = SQR(p->fftout->norm[0][l]);
-    p->sqrmag->data[0][l] *= p->weight->data[0][l];
-  }
-  for (l=1; l < p->fftout->length; l++){
-    p->sqrmag->data[0][(p->fftout->length-1)*2-l] =
-     SQR(p->fftout->norm[0][l]);
-    p->sqrmag->data[0][(p->fftout->length-1)*2-l] *=
-     p->weight->data[0][l];
-  }
-  for (l=0; l < p->sqrmag->length/2+1; l++) {
-    sum += p->sqrmag->data[0][l];
-  }
-  sum *= 2.;
-  aubio_fft_do(p->fft,p->sqrmag,res);
-  yin->data[0][0] = 1.;
-  for (tau=1; tau < yin->length; tau++) {
-    yin->data[0][tau] = sum -
-      res->norm[0][tau]*COS(res->phas[0][tau]);
-    tmp += yin->data[0][tau];
-    yin->data[0][tau] *= tau/tmp;
-  }
-  tau = vec_min_elem(yin);
-  if (yin->data[0][tau] < tol) {
-    /* no interpolation */
-    //return tau;
-    /* 3 point quadratic interpolation */
-    //return vec_quadint_min(yin,tau,1);
-    /* additional check for (unlikely) octave doubling in higher frequencies */
-    if (tau>35) {
-      return vec_quadint_min(yin,tau,1);
-    } else {
-      /* should compare the minimum value of each interpolated peaks */
-      halfperiod = FLOOR(tau/2+.5);
-      if (yin->data[0][halfperiod] < tol)
-        return vec_quadint_min(yin,halfperiod,1);
-      else
-        return vec_quadint_min(yin,tau,1);
-    }
-  } else
-    return 0.;
-}
-
-void del_aubio_pitchyinfft(aubio_pitchyinfft_t *p){
-  del_fvec(p->win);
-  del_aubio_fft(p->fft);
-  del_fvec(p->yinfft);
-  del_fvec(p->sqrmag);
-  del_cvec(p->res);
-  del_cvec(p->fftout);
-  del_fvec(p->winput);
-  del_fvec(p->weight);
-  AUBIO_FREE(p);
-}
--- a/src/pitchyinfft.h
+++ /dev/null
@@ -1,69 +1,0 @@
-/*
-   Copyright (C) 2003 Paul Brossier
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-/** \file
- 
-  Pitch detection using a spectral implementation of the YIN algorithm
-  
-  This algorithm was derived from the YIN algorithm (see pitchyin.c). In this
-  implementation, a Fourier transform is used to compute a tapered square
-  difference function, which allows spectral weighting. Because the difference
-  function is tapered, the selection of the period is simplified.
- 
-  Paul Brossier, ``Automatic annotation of musical audio for interactive
-  systems'', Chapter 3, Pitch Analysis, PhD thesis, Centre for Digital music,
-  Queen Mary University of London, London, UK, 2006.
-
-*/
-
-#ifndef PITCHYINFFT_H
-#define PITCHYINFFT_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** pitch detection object */
-typedef struct _aubio_pitchyinfft_t aubio_pitchyinfft_t;
-
-/** execute pitch detection on an input buffer 
- 
-  \param p pitch detection object as returned by new_aubio_pitchyinfft
-  \param input input signal window (length as specified at creation time) 
-  \param tol tolerance parameter for minima selection [default 0.85] 
- 
-*/
-smpl_t aubio_pitchyinfft_detect (aubio_pitchyinfft_t *p, fvec_t * input, smpl_t tol);
-/** creation of the pitch detection object
- 
-  \param bufsize size of the input buffer to analyse 
- 
-*/
-aubio_pitchyinfft_t * new_aubio_pitchyinfft (uint_t bufsize);
-/** deletion of the pitch detection object
- 
-  \param p pitch detection object as returned by new_aubio_pitchyinfft()
- 
-*/
-void del_aubio_pitchyinfft (aubio_pitchyinfft_t *p);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /*PITCHYINFFT_H*/ 
--- a/src/resample.c
+++ /dev/null
@@ -1,65 +1,0 @@
-/*
-	 Copyright (C) 2003 Paul Brossier
-
-	 This program is free software; you can redistribute it and/or modify
-	 it under the terms of the GNU General Public License as published by
-	 the Free Software Foundation; either version 2 of the License, or
-	 (at your option) any later version.
-
-	 This program is distributed in the hope that it will be useful,
-	 but WITHOUT ANY WARRANTY; without even the implied warranty of
-	 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-	 GNU General Public License for more details.
-
-	 You should have received a copy of the GNU General Public License
-	 along with this program; if not, write to the Free Software
-	 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-	 
-*/
-
-
-#include <samplerate.h> /* from libsamplerate */
-
-#include "aubio_priv.h"
-#include "sample.h"
-#include "resample.h"
-
-struct _aubio_resampler_t {
-	SRC_DATA  *proc;
-	SRC_STATE *stat;
-	float ratio;
-	uint_t type;
-};
-
-aubio_resampler_t * new_aubio_resampler(float ratio, uint_t type) {
-	aubio_resampler_t * s  = AUBIO_NEW(aubio_resampler_t);
-	int error = 0;
-	s->stat = src_new (type, 1, &error) ; /* only one channel */
-	s->proc = AUBIO_NEW(SRC_DATA);
-	if (error) AUBIO_ERR("%s\n",src_strerror(error));
-	s->ratio = ratio;
-	return s;
-}
-
-void del_aubio_resampler(aubio_resampler_t *s) {
-	src_delete(s->stat);
-	AUBIO_FREE(s->proc);
-	AUBIO_FREE(s);
-}
-
-uint_t aubio_resampler_process(aubio_resampler_t *s, 
-    fvec_t * input,  fvec_t * output) {
-	uint_t i ;
-	s->proc->input_frames = input->length;
-	s->proc->output_frames = output->length;
-	s->proc->src_ratio = s->ratio;
-	for (i = 0 ; i< input->channels; i++) 
-	{
-		/* make SRC_PROC data point to input outputs */
-		s->proc->data_in = input->data[i];
-		s->proc->data_out= output->data[i];
-		/* do resampling */
-		src_process (s->stat, s->proc) ;
-	}
-	return AUBIO_OK;
-}	
--- a/src/resample.h
+++ /dev/null
@@ -1,60 +1,0 @@
-/*
-	 Copyright (C) 2003 Paul Brossier
-
-	 This program is free software; you can redistribute it and/or modify
-	 it under the terms of the GNU General Public License as published by
-	 the Free Software Foundation; either version 2 of the License, or
-	 (at your option) any later version.
-
-	 This program is distributed in the hope that it will be useful,
-	 but WITHOUT ANY WARRANTY; without even the implied warranty of
-	 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-	 GNU General Public License for more details.
-
-	 You should have received a copy of the GNU General Public License
-	 along with this program; if not, write to the Free Software
-	 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-	 
-*/
-
-#ifndef _RESAMPLE_H
-#define _RESAMPLE_H
-
-/** \file
- 
- Resampling object
-
- This object resamples an input vector into an output vector using
- libsamplerate. See http://www.mega-nerd.com/SRC/
- 
-*/
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** resampler object */
-typedef struct _aubio_resampler_t aubio_resampler_t;
-/** create resampler object 
-
-  \param ratio output_sample_rate / input_sample_rate 
-  \param type libsamplerate resampling type
-
-*/
-aubio_resampler_t * new_aubio_resampler(float ratio, uint_t type);
-/** delete resampler object */
-void del_aubio_resampler(aubio_resampler_t *s);
-/** resample input in output
-
-  \param s resampler object
-  \param input input buffer of size N
-  \param output output buffer of size N*ratio
-
-*/
-uint_t aubio_resampler_process(aubio_resampler_t *s, fvec_t * input,  fvec_t * output);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _RESAMPLE_H */
--- a/src/sample.h
+++ /dev/null
@@ -1,26 +1,0 @@
-/*
-   Copyright (C) 2003-2007 Paul Brossier <[email protected]>
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-*/
-
-#ifndef _SAMPLE_H
-#define _SAMPLE_H
-
-#include "fvec.h"
-#include "cvec.h"
-
-#endif /* _SAMPLE_H */
--- a/src/scale.c
+++ /dev/null
@@ -1,79 +1,0 @@
-/*
-   Copyright (C) 2003 Paul Brossier
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-*/
-
-#include "aubio_priv.h"
-#include "sample.h"
-#include "scale.h"
-
-struct _aubio_scale_t {
-  smpl_t ilow;
-  smpl_t ihig;
-  smpl_t olow;
-  smpl_t ohig;
-
-  smpl_t scaler;
-  smpl_t irange;
-
-  /* not implemented yet : type in/out data
-     bool inint;
-     bool outint;
-     */
-};
-
-aubio_scale_t * new_aubio_scale (smpl_t ilow, smpl_t ihig, 
-    smpl_t olow, smpl_t ohig) {
-  aubio_scale_t * s = AUBIO_NEW(aubio_scale_t);
-  aubio_scale_set (s, ilow, ihig, olow, ohig);
-  return s;
-}
-
-void del_aubio_scale(aubio_scale_t *s) {
-  AUBIO_FREE(s);
-}
-
-void aubio_scale_set (aubio_scale_t *s, smpl_t ilow, smpl_t ihig,
-    smpl_t olow, smpl_t ohig) {
-  smpl_t inputrange = ihig - ilow;
-  smpl_t outputrange= ohig - olow;
-  s->ilow = ilow;
-  s->ihig = ihig;
-  s->olow = olow;
-  s->ohig = ohig;
-  if (inputrange == 0) {
-    s->scaler = 0.0f;
-  } else {
-    s->scaler = outputrange/inputrange;
-    if (inputrange < 0) {
-      inputrange = inputrange * -1.0f;
-    }
-  }
-}
-
-void aubio_scale_do (aubio_scale_t *s, fvec_t *input) 
-{
-  uint_t i, j;
-  for (i=0; i < input->channels; i++){
-    for (j=0;  j < input->length; j++){
-      input->data[i][j] -= s->ilow;
-      input->data[i][j] *= s->scaler;
-      input->data[i][j] += s->olow;
-    }
-  }
-}
-
--- a/src/scale.h
+++ /dev/null
@@ -1,78 +1,0 @@
-/*
-   Copyright (C) 2003 Paul Brossier
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-/** \file
-
- Vector scaling function 
- 
- This object, inspired from the scale object in FTS, the jMax engine, scales
- the values of a vector according to an affine function defined as follow:
- 
- \f$ y = (x - ilow)*(ohig-olow)/(ihig-ilow) + olow \f$ 
- 
-*/
-#ifndef SCALE_H
-#define SCALE_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** scale object */
-typedef struct _aubio_scale_t aubio_scale_t;
-
-/** create a scale object
- 
-  \param flow lower value of output function
-  \param fhig higher value of output function
-  \param ilow lower value of input function
-  \param ihig higher value of output function
-
-*/
-aubio_scale_t * new_aubio_scale(smpl_t flow, smpl_t fhig,
-    smpl_t ilow, smpl_t ihig);
-/** delete a scale object 
-
-  \param s scale object as returned by new_aubio_scale
-
-*/
-void del_aubio_scale(aubio_scale_t *s);
-/** scale input vector
-
-  \param s scale object as returned by new_aubio_scale
-  \param input vector to scale
-
-*/
-void aubio_scale_do(aubio_scale_t *s, fvec_t * input);
-/** modify scale parameters after object creation
-
-  \param s scale object as returned by new_aubio_scale
-  \param olow lower value of output function
-  \param ohig higher value of output function
-  \param ilow lower value of input function
-  \param ihig higher value of output function
-
-*/
-void aubio_scale_set (aubio_scale_t *s, smpl_t ilow, smpl_t ihig,
-    smpl_t olow, smpl_t ohig);
-
-#ifdef __cplusplus
-}
-#endif 
-
-#endif
--- /dev/null
+++ b/src/spectral/fft.c
@@ -1,0 +1,194 @@
+/*
+   Copyright (C) 2003 Paul Brossier
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#include "aubio_priv.h"
+#include "fvec.h"
+#include "cvec.h"
+#include "mathutils.h"
+#include "spectral/fft.h"
+
+#if FFTW3F_SUPPORT
+#define fftw_malloc            fftwf_malloc
+#define fftw_free              fftwf_free
+#define fftw_execute           fftwf_execute
+#define fftw_plan_dft_r2c_1d   fftwf_plan_dft_r2c_1d
+#define fftw_plan_dft_c2r_1d   fftwf_plan_dft_c2r_1d
+#define fftw_plan_r2r_1d       fftwf_plan_r2r_1d
+#define fftw_plan              fftwf_plan
+#define fftw_destroy_plan      fftwf_destroy_plan
+#endif
+
+#if FFTW3F_SUPPORT
+#define real_t smpl_t
+#else
+#define real_t lsmp_t
+#endif
+
+struct _aubio_fft_t {
+  uint_t winsize;
+  uint_t channels;
+  uint_t fft_size;
+  real_t *in, *out;
+  fftw_plan pfw, pbw;
+  fft_data_t * specdata;     /* complex spectral data */
+  fvec_t * compspec;
+};
+
+aubio_fft_t * new_aubio_fft(uint_t winsize, uint_t channels) {
+  aubio_fft_t * s = AUBIO_NEW(aubio_fft_t);
+  s->winsize  = winsize;
+  s->channels = channels;
+  /* allocate memory */
+  s->in       = AUBIO_ARRAY(real_t,winsize);
+  s->out      = AUBIO_ARRAY(real_t,winsize);
+  s->compspec = new_fvec(winsize,channels);
+  /* create plans */
+#ifdef HAVE_COMPLEX_H
+  s->fft_size = winsize/2 + 1;
+  s->specdata = (fft_data_t*)fftw_malloc(sizeof(fft_data_t)*s->fft_size);
+  s->pfw = fftw_plan_dft_r2c_1d(winsize, s->in,  s->specdata, FFTW_ESTIMATE);
+  s->pbw = fftw_plan_dft_c2r_1d(winsize, s->specdata, s->out, FFTW_ESTIMATE);
+#else
+  s->fft_size = winsize;
+  s->specdata = (fft_data_t*)fftw_malloc(sizeof(fft_data_t)*s->fft_size);
+  s->pfw = fftw_plan_r2r_1d(winsize, s->in,  s->specdata, FFTW_R2HC, FFTW_ESTIMATE);
+  s->pbw = fftw_plan_r2r_1d(winsize, s->specdata, s->out, FFTW_HC2R, FFTW_ESTIMATE);
+#endif
+  return s;
+}
+
+void del_aubio_fft(aubio_fft_t * s) {
+  /* destroy data */
+  del_fvec(s->compspec);
+  fftw_destroy_plan(s->pfw);
+  fftw_destroy_plan(s->pbw);
+  fftw_free(s->specdata);
+  AUBIO_FREE(s->out);
+  AUBIO_FREE(s->in );
+  AUBIO_FREE(s);
+}
+
+void aubio_fft_do(aubio_fft_t * s, fvec_t * input, cvec_t * spectrum) {
+  aubio_fft_do_complex(s, input, s->compspec);
+  aubio_fft_get_spectrum(s->compspec, spectrum);
+}
+
+void aubio_fft_rdo(aubio_fft_t * s, cvec_t * spectrum, fvec_t * output) {
+  aubio_fft_get_realimag(spectrum, s->compspec);
+  aubio_fft_rdo_complex(s, s->compspec, output);
+}
+
+void aubio_fft_do_complex(aubio_fft_t * s, fvec_t * input, fvec_t * compspec) {
+  uint_t i, j;
+  for (i = 0; i < s->channels; i++) {
+    for (j=0; j < s->winsize; j++) {
+      s->in[j] = input->data[i][j];
+    }
+    fftw_execute(s->pfw);
+#ifdef HAVE_COMPLEX_H
+    compspec->data[i][0] = REAL(s->specdata[0]);
+    for (j = 1; j < s->fft_size -1 ; j++) {
+      compspec->data[i][j] = REAL(s->specdata[j]);
+      compspec->data[i][compspec->length - j] = IMAG(s->specdata[j]);
+    }
+    compspec->data[i][s->fft_size-1] = REAL(s->specdata[s->fft_size-1]);
+#else
+    for (j = 0; j < s->fft_size; j++) {
+      compspec->data[i][j] = s->specdata[j];
+    }
+#endif
+  }
+}
+
+void aubio_fft_rdo_complex(aubio_fft_t * s, fvec_t * compspec, fvec_t * output) {
+  uint_t i, j;
+  const smpl_t renorm = 1./(smpl_t)s->winsize;
+  for (i = 0; i < compspec->channels; i++) {
+#ifdef HAVE_COMPLEX_H
+    s->specdata[0] = compspec->data[i][0];
+    for (j=1; j < s->fft_size - 1; j++) {
+      s->specdata[j] = compspec->data[i][j] + 
+        I * compspec->data[i][compspec->length - j];
+    }
+    s->specdata[s->fft_size - 1] = compspec->data[i][s->fft_size - 1];
+#else
+    for (j=0; j < s->fft_size; j++) {
+      s->specdata[j] = compspec->data[i][j];
+    }
+#endif
+    fftw_execute(s->pbw);
+    for (j = 0; j < output->length; j++) {
+      output->data[i][j] = s->out[j]*renorm;
+    }
+  }
+}
+
+void aubio_fft_get_spectrum(fvec_t * compspec, cvec_t * spectrum) {
+  aubio_fft_get_phas(compspec, spectrum);
+  aubio_fft_get_norm(compspec, spectrum);
+}
+
+void aubio_fft_get_realimag(cvec_t * spectrum, fvec_t * compspec) {
+  aubio_fft_get_imag(spectrum, compspec);
+  aubio_fft_get_real(spectrum, compspec);
+}
+
+void aubio_fft_get_phas(fvec_t * compspec, cvec_t * spectrum) {
+  uint_t i, j;
+  for (i = 0; i < spectrum->channels; i++) {
+    spectrum->phas[i][0] = 0.;
+    for (j=1; j < spectrum->length - 1; j++) {
+      spectrum->phas[i][j] = atan2f(compspec->data[i][compspec->length-j],
+          compspec->data[i][j]);
+    }
+    spectrum->phas[i][spectrum->length-1] = 0.;
+  }
+}
+
+void aubio_fft_get_norm(fvec_t * compspec, cvec_t * spectrum) {
+  uint_t i, j = 0;
+  for (i = 0; i < spectrum->channels; i++) {
+    spectrum->norm[i][0] = compspec->data[i][0];
+    for (j=1; j < spectrum->length - 1; j++) {
+      spectrum->norm[i][j] = SQRT(SQR(compspec->data[i][j]) 
+          + SQR(compspec->data[i][compspec->length - j]) );
+    }
+    spectrum->norm[i][spectrum->length-1] = compspec->data[i][compspec->length/2];
+  }
+}
+
+void aubio_fft_get_imag(cvec_t * spectrum, fvec_t * compspec) {
+  uint_t i, j;
+  for (i = 0; i < compspec->channels; i++) {
+    for (j = 1; j < compspec->length / 2 + 1; j++) {
+      compspec->data[i][compspec->length - j] =
+        spectrum->norm[i][j]*SIN(spectrum->phas[i][j]);
+    }
+  }
+}
+
+void aubio_fft_get_real(cvec_t * spectrum, fvec_t * compspec) {
+  uint_t i, j;
+  for (i = 0; i < compspec->channels; i++) {
+    for (j = 0; j< compspec->length / 2 + 1; j++) {
+      compspec->data[i][j] = 
+        spectrum->norm[i][j]*COS(spectrum->phas[i][j]);
+    }
+  }
+}
--- /dev/null
+++ b/src/spectral/fft.h
@@ -1,0 +1,163 @@
+/*
+   Copyright (C) 2003 Paul Brossier
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+   
+*/
+
+/** \file 
+
+  Fast Fourier Transform object
+
+*/
+
+#ifndef FFT_H_
+#define FFT_H_
+
+/* note that <complex.h> is not included here but only in aubio_priv.h, so that
+ * c++ projects can still use their own complex definition. */
+#include <fftw3.h>
+
+#ifdef HAVE_COMPLEX_H
+#if FFTW3F_SUPPORT
+#define FFTW_TYPE fftwf_complex
+#else
+#define FFTW_TYPE fftw_complex
+#endif
+#else
+#if FFTW3F_SUPPORT
+/** fft data type */
+#define FFTW_TYPE float
+#else
+/** fft data type */
+#define FFTW_TYPE double
+#endif
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** fft data type */
+typedef FFTW_TYPE fft_data_t;
+
+/** FFT object
+ 
+  This object computes forward and backward FFTs, using the complex type to
+  store the results. The phase vocoder or aubio_mfft_t objects should be
+  preferred to using directly aubio_fft_t. The FFT are computed using FFTW3
+  (although support for another library could be added).
+
+*/
+typedef struct _aubio_fft_t aubio_fft_t;
+
+/** create new FFT computation object
+
+  \param size length of the FFT
+  \param channels number of channels
+
+*/
+aubio_fft_t * new_aubio_fft(uint_t size, uint_t channels);
+/** delete FFT object 
+
+  \param s fft object as returned by new_aubio_fft
+
+*/
+void del_aubio_fft(aubio_fft_t * s);
+
+/** compute forward FFT
+
+  \param s fft object as returned by new_aubio_fft
+  \param input input signal 
+  \param spectrum output spectrum 
+
+*/
+void aubio_fft_do (aubio_fft_t *s, fvec_t * input, cvec_t * spectrum);
+/** compute backward (inverse) FFT
+
+  \param s fft object as returned by new_aubio_fft
+  \param spectrum input spectrum 
+  \param output output signal 
+
+*/
+void aubio_fft_rdo (aubio_fft_t *s, cvec_t * spectrum, fvec_t * output);
+
+/** compute forward FFT
+
+  \param s fft object as returned by new_aubio_fft
+  \param input real input signal 
+  \param compspec complex output fft real/imag
+
+*/
+void aubio_fft_do_complex (aubio_fft_t *s, fvec_t * input, fvec_t * compspec);
+/** compute backward (inverse) FFT from real/imag
+
+  \param s fft object as returned by new_aubio_fft
+  \param compspec real/imag input fft array 
+  \param output real output array 
+
+*/
+void aubio_fft_rdo_complex (aubio_fft_t *s, fvec_t * compspec, fvec_t * output);
+
+/** convert real/imag spectrum to norm/phas spectrum 
+
+  \param compspec real/imag input fft array 
+  \param spectrum cvec norm/phas output array 
+
+*/
+void aubio_fft_get_spectrum(fvec_t * compspec, cvec_t * spectrum);
+/** convert real/imag spectrum to norm/phas spectrum 
+
+  \param compspec real/imag input fft array 
+  \param spectrum cvec norm/phas output array 
+
+*/
+void aubio_fft_get_realimag(cvec_t * spectrum, fvec_t * compspec);
+
+/** compute phas spectrum from real/imag parts 
+
+  \param compspec real/imag input fft array 
+  \param spectrum cvec norm/phas output array 
+
+*/
+void aubio_fft_get_phas(fvec_t * compspec, cvec_t * spectrum);
+/** compute imaginary part from the norm/phas cvec 
+
+  \param spectrum norm/phas input array 
+  \param compspec real/imag output fft array 
+
+*/
+void aubio_fft_get_imag(cvec_t * spectrum, fvec_t * compspec);
+
+/** compute norm component from real/imag parts 
+
+  \param compspec real/imag input fft array 
+  \param spectrum cvec norm/phas output array 
+
+*/
+void aubio_fft_get_norm(fvec_t * compspec, cvec_t * spectrum);
+/** compute real part from norm/phas components 
+
+  \param spectrum norm/phas input array 
+  \param compspec real/imag output fft array 
+
+*/
+void aubio_fft_get_real(cvec_t * spectrum, fvec_t * compspec);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // FFT_H_
--- /dev/null
+++ b/src/spectral/filterbank.c
@@ -1,0 +1,219 @@
+/*
+   Copyright (C) 2007 Amaury Hazan <[email protected]>
+                  and Paul Brossier <[email protected]>
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+
+#include "aubio_priv.h"
+#include "fvec.h"
+#include "cvec.h"
+#include "spectral/filterbank.h"
+#include "mathutils.h"
+
+#define VERY_SMALL_NUMBER 2e-42
+
+/** \brief A structure to store a set of n_filters filters of lenghts win_s */
+struct aubio_filterbank_t_ {
+    uint_t win_s;
+    uint_t n_filters;
+    fvec_t **filters;
+};
+
+aubio_filterbank_t * new_aubio_filterbank(uint_t n_filters, uint_t win_s){
+  /** allocating space for filterbank object */
+  aubio_filterbank_t * fb = AUBIO_NEW(aubio_filterbank_t);
+  uint_t filter_cnt;
+  fb->win_s=win_s;
+  fb->n_filters=n_filters;
+
+  /** allocating filter tables */
+  fb->filters=AUBIO_ARRAY(fvec_t*,n_filters);
+  for (filter_cnt=0; filter_cnt<n_filters; filter_cnt++)
+    /* considering one-channel filters */
+    fb->filters[filter_cnt]=new_fvec(win_s, 1);
+
+  return fb;
+}
+
+/*
+FB initialization based on Slaney's auditory toolbox
+TODO:
+  *solve memory leak problems while
+  *solve quantization issues when constructing signal:
+    *bug for win_s=512
+    *corrections for win_s=1024 -> why even filters with smaller amplitude
+
+*/
+
+aubio_filterbank_t * new_aubio_filterbank_mfcc(uint_t n_filters, uint_t win_s, uint_t samplerate, smpl_t freq_min, smpl_t freq_max){
+  
+  aubio_filterbank_t * fb = new_aubio_filterbank(n_filters, win_s);
+  
+  
+  //slaney params
+  smpl_t lowestFrequency = 133.3333;
+  smpl_t linearSpacing = 66.66666666;
+  smpl_t logSpacing = 1.0711703;
+
+  uint_t linearFilters = 13;
+  uint_t logFilters = 27;
+  uint_t allFilters = linearFilters + logFilters;
+  
+  //buffers for computing filter frequencies
+  fvec_t * freqs=new_fvec(allFilters+2 , 1);
+  
+  fvec_t * lower_freqs=new_fvec( allFilters, 1);
+  fvec_t * upper_freqs=new_fvec( allFilters, 1);
+  fvec_t * center_freqs=new_fvec( allFilters, 1);
+
+  fvec_t * triangle_heights=new_fvec( allFilters, 1);
+  //lookup table of each bin frequency in hz
+  fvec_t * fft_freqs=new_fvec(win_s, 1);
+
+  uint_t filter_cnt, bin_cnt;
+  
+  //first step: filling all the linear filter frequencies
+  for(filter_cnt=0; filter_cnt<linearFilters; filter_cnt++){
+    freqs->data[0][filter_cnt]=lowestFrequency+ filter_cnt*linearSpacing;
+  }
+  smpl_t lastlinearCF=freqs->data[0][filter_cnt-1];
+  
+  //second step: filling all the log filter frequencies
+  for(filter_cnt=0; filter_cnt<logFilters+2; filter_cnt++){
+    freqs->data[0][filter_cnt+linearFilters] = 
+      lastlinearCF*(pow(logSpacing,filter_cnt+1));
+  }
+
+  //Option 1. copying interesting values to lower_freqs, center_freqs and upper freqs arrays
+  //TODO: would be nicer to have a reference to freqs->data, anyway we do not care in this init step
+    
+  for(filter_cnt=0; filter_cnt<allFilters; filter_cnt++){
+    lower_freqs->data[0][filter_cnt]=freqs->data[0][filter_cnt];
+    center_freqs->data[0][filter_cnt]=freqs->data[0][filter_cnt+1];
+    upper_freqs->data[0][filter_cnt]=freqs->data[0][filter_cnt+2];
+  }
+
+  //computing triangle heights so that each triangle has unit area
+  for(filter_cnt=0; filter_cnt<allFilters; filter_cnt++){
+    triangle_heights->data[0][filter_cnt] = 2./(upper_freqs->data[0][filter_cnt] 
+      - lower_freqs->data[0][filter_cnt]);
+  }
+  
+  //AUBIO_DBG("filter tables frequencies\n");
+  //for(filter_cnt=0; filter_cnt<allFilters; filter_cnt++)
+  //  AUBIO_DBG("filter n. %d %f %f %f %f\n",
+  //    filter_cnt, lower_freqs->data[0][filter_cnt], 
+  //    center_freqs->data[0][filter_cnt], upper_freqs->data[0][filter_cnt], 
+  //    triangle_heights->data[0][filter_cnt]);
+
+  //filling the fft_freqs lookup table, which assigns the frequency in hz to each bin
+  for(bin_cnt=0; bin_cnt<win_s; bin_cnt++){
+    fft_freqs->data[0][bin_cnt]= aubio_bintofreq(bin_cnt, samplerate, win_s);
+  }
+
+  //building each filter table
+  for(filter_cnt=0; filter_cnt<allFilters; filter_cnt++){
+
+    //TODO:check special case : lower freq =0
+    //calculating rise increment in mag/Hz
+    smpl_t riseInc= triangle_heights->data[0][filter_cnt]/(center_freqs->data[0][filter_cnt]-lower_freqs->data[0][filter_cnt]);
+    
+    //zeroing begining of filter
+    for(bin_cnt=0; bin_cnt<win_s-1; bin_cnt++){
+      fb->filters[filter_cnt]->data[0][bin_cnt]=0.f;
+      if( fft_freqs->data[0][bin_cnt]  <= lower_freqs->data[0][filter_cnt] &&
+          fft_freqs->data[0][bin_cnt+1] > lower_freqs->data[0][filter_cnt]) {
+        break;
+      }
+    }
+    bin_cnt++;
+    
+    //positive slope
+    for(; bin_cnt<win_s-1; bin_cnt++){
+      fb->filters[filter_cnt]->data[0][bin_cnt]=(fft_freqs->data[0][bin_cnt]-lower_freqs->data[0][filter_cnt])*riseInc;
+      //if(fft_freqs->data[0][bin_cnt]<= center_freqs->data[0][filter_cnt] && fft_freqs->data[0][bin_cnt+1]> center_freqs->data[0][filter_cnt])
+      if(fft_freqs->data[0][bin_cnt+1]> center_freqs->data[0][filter_cnt])
+        break;
+    }
+    //bin_cnt++;
+    
+    //negative slope
+    for(; bin_cnt<win_s-1; bin_cnt++){
+      
+      //checking whether last value is less than 0...
+      smpl_t val=triangle_heights->data[0][filter_cnt]-(fft_freqs->data[0][bin_cnt]-center_freqs->data[0][filter_cnt])*riseInc;
+      if(val>=0)
+        fb->filters[filter_cnt]->data[0][bin_cnt]=val;
+      else fb->filters[filter_cnt]->data[0][bin_cnt]=0.f;
+      
+      //if(fft_freqs->data[0][bin_cnt]<= upper_freqs->data[0][bin_cnt] && fft_freqs->data[0][bin_cnt+1]> upper_freqs->data[0][filter_cnt])
+      //TODO: CHECK whether bugfix correct
+      if(fft_freqs->data[0][bin_cnt+1]> upper_freqs->data[0][filter_cnt])
+        break;
+    }
+    //bin_cnt++;
+    
+    //zeroing tail
+    for(; bin_cnt<win_s; bin_cnt++)
+      fb->filters[filter_cnt]->data[0][bin_cnt]=0.f;
+
+  }
+  
+  
+  del_fvec(freqs);
+  del_fvec(lower_freqs);
+  del_fvec(upper_freqs);
+  del_fvec(center_freqs);
+
+  del_fvec(triangle_heights);
+  del_fvec(fft_freqs);
+
+  return fb;
+
+}
+
+void del_aubio_filterbank(aubio_filterbank_t * fb){
+  uint_t filter_cnt;
+  /** deleting filter tables first */
+  for (filter_cnt=0; filter_cnt<fb->n_filters; filter_cnt++)
+    del_fvec(fb->filters[filter_cnt]);
+  AUBIO_FREE(fb->filters);
+  AUBIO_FREE(fb);
+}
+
+void aubio_filterbank_do(aubio_filterbank_t * f, cvec_t * in, fvec_t *out) {
+  uint_t n, filter_cnt;
+  for(filter_cnt = 0; (filter_cnt < f->n_filters)
+    && (filter_cnt < out->length); filter_cnt++){
+      out->data[0][filter_cnt] = 0.f;
+      for(n = 0; n < in->length; n++){
+          out->data[0][filter_cnt] += in->norm[0][n] 
+            * f->filters[filter_cnt]->data[0][n];
+      }
+      out->data[0][filter_cnt] =
+        LOG(out->data[0][filter_cnt] < VERY_SMALL_NUMBER ? 
+            VERY_SMALL_NUMBER : out->data[0][filter_cnt]);
+  }
+
+  return;
+}
+
+fvec_t * aubio_filterbank_getchannel(aubio_filterbank_t * f, uint_t channel) {
+  if ( (channel < f->n_filters) ) { return f->filters[channel]; }
+  else { return NULL; }
+}
--- /dev/null
+++ b/src/spectral/filterbank.h
@@ -1,0 +1,80 @@
+/*
+   Copyright (C) 2007 Amaury Hazan <[email protected]>
+                  and Paul Brossier <[email protected]>
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+/** \file
+
+  Filterbank object
+
+  General-purpose spectral filterbank object. Comes with mel-filter initialization function.
+
+*/
+
+#ifndef FILTERBANK_H
+#define FILTERBANK_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** filterbank object */
+typedef struct aubio_filterbank_t_ aubio_filterbank_t;
+
+/** create filterbank object
+
+  \param win_s size of analysis buffer (and length the FFT transform)
+  \param n_filters number of filters to create
+
+*/
+
+aubio_filterbank_t * new_aubio_filterbank(uint_t n_filters, uint_t win_s);
+
+/** filterbank initialization for mel filters
+
+  
+  \param n_filters number of filters
+  \param win_s window size
+  \param samplerate
+  \param freq_min lowest filter frequency
+  \param freq_max highest filter frequency
+
+*/
+aubio_filterbank_t * new_aubio_filterbank_mfcc(uint_t n_filters, uint_t win_s, uint_t samplerate, smpl_t freq_min, smpl_t freq_max);
+
+/** destroy filterbank object
+
+  \param fb filterbank, as returned by new_aubio_filterbank method
+
+*/
+void del_aubio_filterbank(aubio_filterbank_t * fb);
+
+/** compute filterbank
+
+*/
+void aubio_filterbank_do(aubio_filterbank_t * fb, cvec_t * in, fvec_t *out);
+
+/** return the vector containing the filter coefficients of one channel
+
+ */
+fvec_t * aubio_filterbank_getchannel(aubio_filterbank_t * f, uint_t channel);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // FILTERBANK_H
--- /dev/null
+++ b/src/spectral/mfcc.c
@@ -1,0 +1,124 @@
+/*
+   Copyright (C) 2006 Amaury Hazan
+   Ported to aubio from LibXtract
+   http://libxtract.sourceforge.net/
+   
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#include "aubio_priv.h"
+#include "fvec.h"
+#include "cvec.h"
+#include "spectral/fft.h"
+#include "spectral/filterbank.h"
+#include "spectral/mfcc.h"
+
+/** Internal structure for mfcc object **/
+
+struct aubio_mfcc_t_{
+  uint_t win_s;             /** grain length */
+  uint_t samplerate;        /** sample rate (needed?) */
+  uint_t channels;          /** number of channels */
+  uint_t n_filters;         /** number of  *filters */
+  uint_t n_coefs;           /** number of coefficients (<= n_filters/2 +1) */
+  smpl_t lowfreq;           /** lowest frequency for filters */ 
+  smpl_t highfreq;          /** highest frequency for filters */
+  aubio_filterbank_t * fb;  /** filter bank */
+  fvec_t * in_dct;          /** input buffer for dct * [fb->n_filters] */
+  aubio_fft_t * fft_dct;   /** fft object for dct */
+  cvec_t * fftgrain_dct;    /** output buffer for dct */
+};
+
+
+aubio_mfcc_t * new_aubio_mfcc (uint_t win_s, uint_t samplerate, uint_t n_filters, uint_t n_coefs, smpl_t lowfreq, smpl_t highfreq, uint_t channels){
+  /** allocating space for mfcc object */
+  aubio_mfcc_t * mfcc = AUBIO_NEW(aubio_mfcc_t);
+
+  //we need (n_coefs-1)*2 filters to obtain n_coefs coefficients after dct
+  //uint_t n_filters = (n_coefs-1)*2;
+  
+  mfcc->win_s=win_s;
+  mfcc->samplerate=samplerate;
+  mfcc->channels=channels;
+  mfcc->n_filters=n_filters;
+  mfcc->n_coefs=n_coefs;
+  mfcc->lowfreq=lowfreq;
+  mfcc->highfreq=highfreq;
+
+  
+  /** filterbank allocation */
+  mfcc->fb = new_aubio_filterbank_mfcc(n_filters, mfcc->win_s, samplerate, lowfreq, highfreq);
+
+  /** allocating space for fft object (used for dct) */
+  mfcc->fft_dct=new_aubio_fft(n_filters, 1);
+
+  /** allocating buffers */
+  mfcc->in_dct=new_fvec(mfcc->win_s, 1);
+  
+  mfcc->fftgrain_dct=new_cvec(n_filters, 1);
+
+  return mfcc;
+};
+
+void del_aubio_mfcc(aubio_mfcc_t *mf){
+  /** deleting filterbank */
+  del_aubio_filterbank(mf->fb);
+  /** deleting fft object */
+  del_aubio_fft(mf->fft_dct);
+  /** deleting buffers */
+  del_fvec(mf->in_dct);
+  del_cvec(mf->fftgrain_dct);
+  
+  /** deleting mfcc object */
+  AUBIO_FREE(mf);
+}
+
+
+/** intermediate dct involved in aubio_mfcc_do
+
+  \param mf mfcc object as returned by new_aubio_mfcc
+  \param in input spectrum (n_filters long)
+  \param out output mel coefficients buffer (n_filters/2 +1 long)
+
+*/
+void aubio_dct_do(aubio_mfcc_t * mf, fvec_t *in, fvec_t *out);
+
+void aubio_mfcc_do(aubio_mfcc_t * mf, cvec_t *in, fvec_t *out){
+    // compute filterbank
+    aubio_filterbank_do(mf->fb, in, mf->in_dct);
+    //TODO: check that zero padding 
+    // the following line seems useless since the in_dct buffer has the correct size
+    //for(n = filter + 1; n < N; n++) result[n] = 0; 
+    
+    aubio_dct_do(mf, mf->in_dct, out);
+
+    return;
+}
+
+void aubio_dct_do(aubio_mfcc_t * mf, fvec_t *in, fvec_t *out){
+    uint_t i;
+    //compute mag spectrum
+    aubio_fft_do (mf->fft_dct, in, mf->fftgrain_dct);
+    //extract real part of fft grain
+    for(i=0; i<mf->n_coefs ;i++){
+    //for(i=0; i<out->length;i++){
+      out->data[0][i]= mf->fftgrain_dct->norm[0][i]
+        *COS(mf->fftgrain_dct->phas[0][i]);
+    }
+    return;
+}
+
--- /dev/null
+++ b/src/spectral/mfcc.h
@@ -1,0 +1,64 @@
+/*
+   Copyright (C) 2007 Amaury Hazan <[email protected]>
+                  and Paul Brossier <[email protected]>
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+/* part of this mfcc implementation were inspired from LibXtract
+   http://libxtract.sourceforge.net/
+*/
+
+#ifndef MFCC_H 
+#define MFCC_H 
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct aubio_mfcc_t_ aubio_mfcc_t;
+
+/** create mfcc object
+
+  \param win_s size of analysis buffer (and length the FFT transform)
+  \param samplerate 
+  \param n_coefs: number of desired coefs
+  \param lowfreq: lowest frequency to use in filterbank
+  \param highfreq highest frequency to use in filterbank
+  \param channels number of channels
+
+*/
+aubio_mfcc_t * new_aubio_mfcc (uint_t win_s, uint_t samplerate, uint_t n_filters, uint_t n_coefs, smpl_t lowfreq, smpl_t highfreq, uint_t channels);
+/** delete mfcc object
+
+  \param mf mfcc object as returned by new_aubio_mfcc
+
+*/
+void del_aubio_mfcc(aubio_mfcc_t *mf);
+/** mfcc object processing
+
+  \param mf mfcc object as returned by new_aubio_mfcc
+  \param in input spectrum (win_s long)
+  \param out output mel coefficients buffer (n_filters/2 +1 long)
+
+*/
+void aubio_mfcc_do(aubio_mfcc_t * mf, cvec_t *in, fvec_t *out);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // MFCC_H
--- /dev/null
+++ b/src/spectral/phasevoc.c
@@ -1,0 +1,150 @@
+/*
+   Copyright (C) 2003 Paul Brossier
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#include "aubio_priv.h"
+#include "fvec.h"
+#include "cvec.h"
+#include "mathutils.h"
+#include "spectral/fft.h"
+#include "spectral/phasevoc.h"
+
+/** phasevocoder internal object */
+struct _aubio_pvoc_t {
+  uint_t win_s;       /** grain length */
+  uint_t hop_s;       /** overlap step */
+  uint_t channels;    /** number of channels */
+  aubio_fft_t * fft;  /** fft object */
+  fvec_t * synth;     /** cur output grain [win_s] */
+  fvec_t * synthold;  /** last input frame [win_s-hop_s] */
+  fvec_t * data;      /** current input grain [win_s] */
+  fvec_t * dataold;   /** last input frame [win_s-hop_s] */
+  smpl_t * w;         /** grain window [win_s] */
+};
+
+
+/** returns data and dataold slided by hop_s */
+static void aubio_pvoc_swapbuffers(smpl_t * data, smpl_t * dataold, const
+    smpl_t * datanew, uint_t win_s, uint_t hop_s);
+
+/** do additive synthesis from 'old' and 'cur' */
+static void aubio_pvoc_addsynth(const smpl_t * synth, smpl_t * synthold,
+    smpl_t * synthnew, uint_t win_s, uint_t hop_s);
+
+void aubio_pvoc_do(aubio_pvoc_t *pv, fvec_t * datanew, cvec_t *fftgrain) {
+  uint_t i,j;
+  for (i=0; i<pv->channels; i++) {
+    /* slide  */
+    aubio_pvoc_swapbuffers(pv->data->data[i],pv->dataold->data[i],
+        datanew->data[i],pv->win_s,pv->hop_s);
+    /* windowing */
+    for (j=0; j<pv->win_s; j++) pv->data->data[i][j] *= pv->w[j];
+  }
+  /* shift */
+  vec_shift(pv->data);
+  /* calculate fft */
+  aubio_fft_do (pv->fft,pv->data,fftgrain);
+}
+
+void aubio_pvoc_rdo(aubio_pvoc_t *pv,cvec_t * fftgrain, fvec_t * synthnew) {
+  uint_t i;
+  /* calculate rfft */
+  aubio_fft_rdo(pv->fft,fftgrain,pv->synth);
+  /* unshift */
+  vec_shift(pv->synth);
+  for (i=0; i<pv->channels; i++) {
+    aubio_pvoc_addsynth(pv->synth->data[i],pv->synthold->data[i],
+        synthnew->data[i],pv->win_s,pv->hop_s);
+  }
+}
+
+aubio_pvoc_t * new_aubio_pvoc (uint_t win_s, uint_t hop_s, uint_t channels) {
+  aubio_pvoc_t * pv = AUBIO_NEW(aubio_pvoc_t);
+
+  if (win_s < 2*hop_s) {
+    AUBIO_ERR("Hop size bigger than half the window size!\n");
+    AUBIO_ERR("Resetting hop size to half the window size.\n");
+    hop_s = win_s / 2;
+  }
+
+  if (hop_s < 1) {
+    AUBIO_ERR("Hop size is smaller than 1!\n");
+    AUBIO_ERR("Resetting hop size to half the window size.\n");
+    hop_s = win_s / 2;
+  }
+
+  pv->fft      = new_aubio_fft(win_s,channels);
+
+  /* remember old */
+  pv->data     = new_fvec (win_s, channels);
+  pv->synth    = new_fvec (win_s, channels);
+
+  /* new input output */
+  pv->dataold  = new_fvec  (win_s-hop_s, channels);
+  pv->synthold = new_fvec (win_s-hop_s, channels);
+  pv->w        = AUBIO_ARRAY(smpl_t,win_s);
+  aubio_window(pv->w,win_s,aubio_win_hanningz);
+
+  pv->channels = channels;
+  pv->hop_s    = hop_s;
+  pv->win_s    = win_s;
+
+  return pv;
+}
+
+void del_aubio_pvoc(aubio_pvoc_t *pv) {
+  del_fvec(pv->data);
+  del_fvec(pv->synth);
+  del_fvec(pv->dataold);
+  del_fvec(pv->synthold);
+  del_aubio_fft(pv->fft);
+  AUBIO_FREE(pv->w);
+  AUBIO_FREE(pv);
+}
+
+static void aubio_pvoc_swapbuffers(smpl_t * data, smpl_t * dataold, 
+    const smpl_t * datanew, uint_t win_s, uint_t hop_s)
+{
+  uint_t i;
+  for (i=0;i<win_s-hop_s;i++)
+    data[i] = dataold[i];
+  for (i=0;i<hop_s;i++)
+    data[win_s-hop_s+i] = datanew[i];
+  for (i=0;i<win_s-hop_s;i++)
+    dataold[i] = data[i+hop_s];
+}
+
+static void aubio_pvoc_addsynth(const smpl_t * synth, smpl_t * synthold, 
+                smpl_t * synthnew, uint_t win_s, uint_t hop_s)
+{
+  uint_t i;
+  smpl_t scale = 2*hop_s/(win_s+.0);
+  /* add new synth to old one and put result in synthnew */
+  for (i=0;i<hop_s;i++)
+    synthnew[i] = synthold[i]+synth[i]*scale;
+  /* shift synthold */
+  for (i=0;i<win_s-2*hop_s;i++)
+    synthold[i] = synthold[i+hop_s];
+  /* erase last frame in synthold */
+  for (i=win_s-hop_s;i<win_s;i++)
+    synthold[i-hop_s]=0.;
+  /* additive synth */
+  for (i=0;i<win_s-hop_s;i++)
+    synthold[i] += synth[i+hop_s]*scale;
+}
+
--- /dev/null
+++ b/src/spectral/phasevoc.h
@@ -1,0 +1,106 @@
+/*
+   Copyright (C) 2003 Paul Brossier
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+/** \file
+
+  Phase vocoder object
+
+  This object implements a phase vocoder. The spectral frames are computed
+  using a HanningZ window and a swapped version of the signal to simplify the
+  phase relationships across frames. The window sizes and overlap are specified
+  at creation time. Multiple channels are fully supported.
+
+*/
+
+#ifndef _PHASEVOC_H
+#define _PHASEVOC_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** phasevocoder object */
+typedef struct _aubio_pvoc_t aubio_pvoc_t;
+
+/** create phase vocoder object
+
+  \param win_s size of analysis buffer (and length the FFT transform)
+  \param hop_s step size between two consecutive analysis
+  \param channels number of channels
+
+*/
+aubio_pvoc_t * new_aubio_pvoc (uint_t win_s, uint_t hop_s, uint_t channels);
+/** delete phase vocoder object
+
+  \param pv phase vocoder object as returned by new_aubio_pvoc
+
+*/
+void del_aubio_pvoc(aubio_pvoc_t *pv);
+
+/** compute spectral frame
+  
+  This function accepts an input vector of size [channels]x[hop_s]. The
+  analysis buffer is rotated and filled with the new data. After windowing of
+  this signal window, the Fourier transform is computed and returned in
+  fftgrain as two vectors, magnitude and phase.
+
+  \param pv phase vocoder object as returned by new_aubio_pvoc
+  \param in new input signal (hop_s long) 
+  \param fftgrain output spectral frame
+
+*/
+void aubio_pvoc_do(aubio_pvoc_t *pv, fvec_t *in, cvec_t * fftgrain);
+/** compute signal from spectral frame
+
+  This function takes an input spectral frame fftgrain of size
+  [channels]x[buf_s] and computes its inverse Fourier transform. Overlap-add
+  synthesis is then computed using the previously synthetised frames, and the
+  output stored in out.
+  
+  \param pv phase vocoder object as returned by new_aubio_pvoc
+  \param fftgrain input spectral frame
+  \param out output signal (hop_s long) 
+
+*/
+void aubio_pvoc_rdo(aubio_pvoc_t *pv, cvec_t * fftgrain, fvec_t *out);
+
+/** get window size
+
+  \param pv phase vocoder to get the window size from
+
+*/
+uint_t aubio_pvoc_get_win(aubio_pvoc_t* pv);
+/** get hop size
+
+  \param pv phase vocoder to get the hop size from
+
+*/
+uint_t aubio_pvoc_get_hop(aubio_pvoc_t* pv);
+/** get channel number
+ 
+  \param pv phase vocoder to get the number of channels from
+
+*/
+uint_t aubio_pvoc_get_channels(aubio_pvoc_t* pv);
+
+#ifdef __cplusplus
+}
+#endif 
+
+#endif
--- /dev/null
+++ b/src/spectral/spectral_centroid.c
@@ -1,0 +1,37 @@
+/*
+   Copyright (C) 2007 Paul Brossier
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#include "aubio_priv.h"
+#include "cvec.h"
+#include "spectral/spectral_centroid.h"
+
+smpl_t aubio_spectral_centroid(cvec_t * spectrum, smpl_t samplerate) {
+  uint_t i=0, j;
+  smpl_t sum = 0., sc = 0.;
+  for ( j = 0; j < spectrum->length; j++ ) {
+    sum += spectrum->norm[i][j];
+  }
+  if (sum == 0.) return 0.;
+  for ( j = 0; j < spectrum->length; j++ ) {
+    sc += (smpl_t)j * spectrum->norm[i][j];
+  }
+  return sc / sum * samplerate / (smpl_t)(spectrum->length);
+}
+
+
--- /dev/null
+++ b/src/spectral/spectral_centroid.h
@@ -1,0 +1,27 @@
+/*
+   Copyright (C) 2007 Paul Brossier
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+/** @file
+ * compute spectrum centroid of a cvec object
+ */
+
+/**
+ * spectrum centroid computed on a cvec
+ */
+smpl_t aubio_spectral_centroid(cvec_t * input, smpl_t samplerate);
--- /dev/null
+++ b/src/spectral/tss.c
@@ -1,0 +1,128 @@
+/*
+   Copyright (C) 2003 Paul Brossier
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+/* default values : alfa=4, beta=3, threshold=0.25 */
+
+#include "aubio_priv.h"
+#include "fvec.h"
+#include "cvec.h"
+#include "mathutils.h"
+#include "spectral/tss.h"
+
+struct _aubio_tss_t 
+{
+  smpl_t thrs;
+  smpl_t alfa;
+  smpl_t beta;
+  smpl_t parm;
+  smpl_t thrsfact;
+  fvec_t *theta1;
+  fvec_t *theta2;
+  fvec_t *oft1;
+  fvec_t *oft2;
+  fvec_t *dev;
+};
+
+void aubio_tss_do(aubio_tss_t *o, cvec_t * input, 
+    cvec_t * trans, cvec_t * stead)
+{
+  uint_t i,j;
+  uint_t test;	
+  uint_t nbins     = input->length;
+  uint_t channels  = input->channels;
+  smpl_t alfa      = o->alfa;
+  smpl_t beta      = o->beta;
+  smpl_t parm      = o->parm;
+  smpl_t ** dev    = (smpl_t **)o->dev->data;
+  smpl_t ** oft1   = (smpl_t **)o->oft1->data;
+  smpl_t ** oft2   = (smpl_t **)o->oft2->data;
+  smpl_t ** theta1 = (smpl_t **)o->theta1->data;
+  smpl_t ** theta2 = (smpl_t **)o->theta2->data;
+  /* second phase derivative */
+  for (i=0;i<channels; i++){
+    for (j=0;j<nbins; j++){
+      dev[i][j] = aubio_unwrap2pi(input->phas[i][j]
+          -2.0*theta1[i][j]+theta2[i][j]);
+      theta2[i][j] = theta1[i][j];
+      theta1[i][j] = input->phas[i][j];
+    }
+
+    for (j=0;j<nbins; j++){
+      /* transient analysis */
+      test = (ABS(dev[i][j]) > parm*oft1[i][j]);
+      trans->norm[i][j] = input->norm[i][j] * test;
+      trans->phas[i][j] = input->phas[i][j] * test;
+    }
+
+    for (j=0;j<nbins; j++){
+      /* steady state analysis */
+      test = (ABS(dev[i][j]) < parm*oft2[i][j]);
+      stead->norm[i][j] = input->norm[i][j] * test;
+      stead->phas[i][j] = input->phas[i][j] * test;
+
+      /*increase sstate probability for sines */
+      test = (trans->norm[i][j]==0.);
+      oft1[i][j]  = test;
+      test = (stead->norm[i][j]==0.);
+      oft2[i][j]  = test;
+      test = (trans->norm[i][j]>0.);
+      oft1[i][j] += alfa*test;
+      test = (stead->norm[i][j]>0.);
+      oft2[i][j] += alfa*test;
+      test = (oft1[i][j]>1. && trans->norm[i][j]>0.);
+      oft1[i][j] += beta*test;
+      test = (oft2[i][j]>1. && stead->norm[i][j]>0.);
+      oft2[i][j] += beta*test;
+    }
+  }
+}
+
+void aubio_tss_set_thres(aubio_tss_t *o, smpl_t thrs){
+	o->thrs = thrs;
+  	o->parm = thrs*o->thrsfact;
+}
+
+aubio_tss_t * new_aubio_tss(smpl_t thrs, smpl_t alfa, smpl_t beta, 
+    uint_t size, uint_t overlap,uint_t channels)
+{
+  aubio_tss_t * o = AUBIO_NEW(aubio_tss_t);
+  uint_t rsize = size/2+1;
+  o->thrs = thrs;
+  o->thrsfact = TWO_PI*overlap/rsize;
+  o->alfa = alfa;	
+  o->beta = beta;	
+  o->parm = thrs*o->thrsfact;
+  o->theta1 = new_fvec(rsize,channels);
+  o->theta2 = new_fvec(rsize,channels);
+  o->oft1 = new_fvec(rsize,channels);
+  o->oft2 = new_fvec(rsize,channels);
+  o->dev = new_fvec(rsize,channels);
+  return o;
+}
+
+void del_aubio_tss(aubio_tss_t *s)
+{
+  free(s->theta1);
+  free(s->theta2);
+  free(s->oft1);
+  free(s->oft2);
+  free(s->dev);
+  free(s);
+}
+
--- /dev/null
+++ b/src/spectral/tss.h
@@ -1,0 +1,84 @@
+/*
+	 Copyright (C) 2003 Paul Brossier
+
+	 This program is free software; you can redistribute it and/or modify
+	 it under the terms of the GNU General Public License as published by
+	 the Free Software Foundation; either version 2 of the License, or
+	 (at your option) any later version.
+
+	 This program is distributed in the hope that it will be useful,
+	 but WITHOUT ANY WARRANTY; without even the implied warranty of
+	 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+	 GNU General Public License for more details.
+
+	 You should have received a copy of the GNU General Public License
+	 along with this program; if not, write to the Free Software
+	 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+	 
+*/
+
+/** \file
+
+  Transient / Steady-state Separation (TSS)
+
+  This file implement a Transient / Steady-state Separation (TSS) as described
+  in:
+
+  Christopher Duxbury, Mike E. Davies, and Mark B. Sandler. Separation of
+  transient information in musical audio using multiresolution analysis
+  techniques. In Proceedings of the Digital Audio Effects Conference, DAFx-01,
+  pages 1­5, Limerick, Ireland, 2001.
+
+*/
+
+#ifndef TSS_H
+#define TSS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** TSS object */
+typedef struct _aubio_tss_t aubio_tss_t;
+
+/** create tss object
+
+  \param thrs separation threshold
+  \param alfa alfa parameter
+  \param beta beta parameter
+  \param size buffer size
+  \param overlap step size
+  \param channels number of input channels
+
+*/
+aubio_tss_t * new_aubio_tss(smpl_t thrs, smpl_t alfa, smpl_t beta, 
+    uint_t size, uint_t overlap,uint_t channels);
+/** delete tss object
+
+  \param s tss object as returned by new_aubio_tss
+
+*/
+void del_aubio_tss(aubio_tss_t *s);
+
+/** set transient / steady state separation threshold 
+ 
+  \param tss tss object as returned by new_aubio_tss
+  \param thrs new threshold value
+
+*/
+void aubio_tss_set_thres(aubio_tss_t *tss, smpl_t thrs);
+/** split input into transient and steady states components
+ 
+  \param s tss object as returned by new_aubio_tss
+  \param input input spectral frame
+  \param trans output transient components
+  \param stead output steady state components
+
+*/
+void aubio_tss_do(aubio_tss_t *s, cvec_t * input, cvec_t * trans, cvec_t * stead);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*TSS_H*/
--- a/src/tempo.c
+++ /dev/null
@@ -1,146 +1,0 @@
-/*
-   Copyright (C) 2006 Paul Brossier
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-*/
-
-#include "aubio_priv.h"
-#include "sample.h"
-#include "onsetdetection.h"
-#include "beattracking.h"
-#include "phasevoc.h"
-#include "peakpick.h"
-#include "mathutils.h"
-#include "tempo.h"
-
-/* structure to store object state */
-struct _aubio_tempo_t {
-  aubio_onsetdetection_t * od;   /** onset detection */
-  aubio_pvoc_t * pv;             /** phase vocoder */
-  aubio_pickpeak_t * pp;         /** peak picker */
-  aubio_beattracking_t * bt;     /** beat tracking */
-  cvec_t * fftgrain;             /** spectral frame */
-  fvec_t * of;                   /** onset detection function value */
-  fvec_t * dfframe;              /** peak picked detection function buffer */
-  fvec_t * out;                  /** beat tactus candidates */
-  smpl_t silence;                /** silence parameter */
-  smpl_t threshold;              /** peak picking threshold */
-  sint_t blockpos;               /** current position in dfframe */
-  uint_t winlen;                 /** dfframe bufsize */
-  uint_t step;                   /** dfframe hopsize */ 
-};
-
-/* execute tempo detection function on iput buffer */
-void aubio_tempo(aubio_tempo_t *o, fvec_t * input, fvec_t * tempo)
-{
-  uint_t i;
-  uint_t winlen = o->winlen;
-  uint_t step   = o->step;
-  aubio_pvoc_do (o->pv, input, o->fftgrain);
-  aubio_onsetdetection(o->od, o->fftgrain, o->of);
-  /*if (usedoubled) {
-    aubio_onsetdetection(o2,fftgrain, onset2);
-    onset->data[0][0] *= onset2->data[0][0];
-  }*/
-  /* execute every overlap_size*step */
-  if (o->blockpos == (signed)step -1 ) {
-    /* check dfframe */
-    aubio_beattracking_do(o->bt,o->dfframe,o->out);
-    /* rotate dfframe */
-    for (i = 0 ; i < winlen - step; i++ ) 
-      o->dfframe->data[0][i] = o->dfframe->data[0][i+step];
-    for (i = winlen - step ; i < winlen; i++ ) 
-      o->dfframe->data[0][i] = 0.;
-    o->blockpos = -1;
-  }
-  o->blockpos++;
-  tempo->data[0][1] = aubio_peakpick_pimrt_wt(o->of,o->pp,
-    &(o->dfframe->data[0][winlen - step + o->blockpos]));
-  /* end of second level loop */
-  tempo->data[0][0] = 0; /* reset tactus */
-  i=0;
-  for (i = 1; i < o->out->data[0][0]; i++ ) {
-    /* if current frame is a predicted tactus */
-    if (o->blockpos == o->out->data[0][i]) {
-      /* test for silence */
-      if (aubio_silence_detection(input, o->silence)==1) {
-        tempo->data[0][1] = 0; /* unset onset */
-        tempo->data[0][0] = 0; /* unset tactus */
-      } else {
-        tempo->data[0][0] = 1; /* set tactus */
-      }
-    }
-  }
-}
-
-void aubio_tempo_set_silence(aubio_tempo_t * o, smpl_t silence) {
-  o->silence = silence;
-  return;
-}
-
-void aubio_tempo_set_threshold(aubio_tempo_t * o, smpl_t threshold) {
-  o->threshold = threshold;
-  aubio_peakpicker_set_threshold(o->pp, o->threshold);
-  return;
-}
-
-/* Allocate memory for an tempo detection */
-aubio_tempo_t * new_aubio_tempo (aubio_onsetdetection_type type_onset, 
-    uint_t buf_size, uint_t hop_size, uint_t channels)
-{
-  aubio_tempo_t * o = AUBIO_NEW(aubio_tempo_t);
-  o->winlen = SQR(512)/hop_size;
-  o->step = o->winlen/4;
-  o->blockpos = 0;
-  o->threshold = 0.3;
-  o->silence = -90;
-  o->blockpos = 0;
-  o->dfframe  = new_fvec(o->winlen,channels);
-  o->fftgrain = new_cvec(buf_size, channels);
-  o->out      = new_fvec(o->step,channels);
-  o->pv       = new_aubio_pvoc(buf_size, hop_size, channels);
-  o->pp       = new_aubio_peakpicker(o->threshold);
-  o->od       = new_aubio_onsetdetection(type_onset,buf_size,channels);
-  o->of       = new_fvec(1, channels);
-  o->bt       = new_aubio_beattracking(o->winlen,channels);
-  /*if (usedoubled)    {
-    o2 = new_aubio_onsetdetection(type_onset2,buffer_size,channels);
-    onset2 = new_fvec(1 , channels);
-  }*/
-  return o;
-}
-
-smpl_t aubio_tempo_get_bpm(aubio_tempo_t *o) {
-  return aubio_beattracking_get_bpm(o->bt);
-}
-
-smpl_t aubio_tempo_get_confidence(aubio_tempo_t *o) {
-  return aubio_beattracking_get_confidence(o->bt);
-}
-
-void del_aubio_tempo (aubio_tempo_t *o)
-{
-  del_aubio_onsetdetection(o->od);
-  del_aubio_beattracking(o->bt);
-  del_aubio_peakpicker(o->pp);
-  del_aubio_pvoc(o->pv);
-  del_fvec(o->out);
-  del_fvec(o->of);
-  del_cvec(o->fftgrain);
-  del_fvec(o->dfframe);
-  AUBIO_FREE(o);
-  return;
-}
--- a/src/tempo.h
+++ /dev/null
@@ -1,78 +1,0 @@
-/*
-   Copyright (C) 2006 Paul Brossier
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-*/
-
-/** \file 
-  
-  Tempo detection driver
-
-  This object stores all the memory required for tempo detection algorithm
-  and returns the estimated beat locations.
-
-*/
-
-#ifndef TEMPO_H
-#define TEMPO_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** tempo detection structure */
-typedef struct _aubio_tempo_t aubio_tempo_t;
-
-/** create tempo detection object */
-aubio_tempo_t * new_aubio_tempo (aubio_onsetdetection_type type_onset, 
-    uint_t buf_size, uint_t hop_size, uint_t channels);
-
-/** execute tempo detection */
-void aubio_tempo(aubio_tempo_t *o, fvec_t * input, fvec_t * tempo);
-
-/** set tempo detection silence threshold  */
-void aubio_tempo_set_silence(aubio_tempo_t * o, smpl_t silence);
-
-/** set tempo detection peak picking threshold  */
-void aubio_tempo_set_threshold(aubio_tempo_t * o, smpl_t threshold);
-
-/** get current tempo
-
-  \param bt beat tracking object
-
-  Returns the currently observed tempo, or 0 if no consistent value is found
-
-*/
-smpl_t aubio_tempo_get_bpm(aubio_tempo_t * bt);
-
-/** get current tempo confidence
-
-  \param bt beat tracking object
-
-  Returns the confidence with which the tempo has been observed, 0 if no
-  consistent value is found.
-
-*/
-smpl_t aubio_tempo_get_confidence(aubio_tempo_t * bt);
-
-/** delete tempo detection object */
-void del_aubio_tempo(aubio_tempo_t * o);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* TEMPO_H */
--- /dev/null
+++ b/src/tempo/beattracking.c
@@ -1,0 +1,467 @@
+/*
+         Copyright (C) 2005 Matthew Davies and Paul Brossier
+
+         This program is free software; you can redistribute it and/or modify
+         it under the terms of the GNU General Public License as published by
+         the Free Software Foundation; either version 2 of the License, or
+         (at your option) any later version.
+
+         This program is distributed in the hope that it will be useful,
+         but WITHOUT ANY WARRANTY; without even the implied warranty of
+         MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+         GNU General Public License for more details.
+
+         You should have received a copy of the GNU General Public License
+         along with this program; if not, write to the Free Software
+         Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+         
+*/
+
+#include "aubio_priv.h"
+#include "fvec.h"
+#include "mathutils.h"
+#include "tempo/beattracking.h"
+
+uint_t fvec_gettimesig(smpl_t * acf, uint_t acflen, uint_t gp);
+void aubio_beattracking_checkstate(aubio_beattracking_t * bt);
+smpl_t fvec_getperiod(aubio_beattracking_t * bt);
+
+struct _aubio_beattracking_t {
+        fvec_t * rwv;    /** rayleigh weight vector - rayleigh distribution function */                    
+        fvec_t * gwv;    /** rayleigh weight vector - rayleigh distribution function */                    
+        fvec_t * dfwv;   /** detection function weighting - exponential curve */
+        fvec_t * dfrev;  /** reversed onset detection function */
+        fvec_t * acf;    /** vector for autocorrelation function (of current detection function frame) */
+        fvec_t * acfout; /** store result of passing acf through s.i.c.f.b. */
+        fvec_t * phwv;   /** beat expectation alignment weighting */
+        fvec_t * phout;
+        uint_t timesig;  /** time signature of input, set to zero until context dependent model activated */
+        uint_t step;
+        fvec_t * locacf; /** vector to store harmonics of filterbank of acf */
+        fvec_t * inds;   /** vector for max index outputs for each harmonic */
+        uint_t rayparam; /** Rayleigh parameter */
+        uint_t lastbeat;
+        sint_t counter;
+        uint_t flagstep;
+        smpl_t g_var;
+        uint_t gp;
+        uint_t bp;
+        uint_t rp;
+        uint_t rp1;
+        uint_t rp2;
+};
+
+aubio_beattracking_t * new_aubio_beattracking(uint_t winlen,
+                uint_t channels) {
+
+        aubio_beattracking_t * p = AUBIO_NEW(aubio_beattracking_t);
+        uint_t i        = 0;
+	/* parameter for rayleigh weight vector - sets preferred tempo to
+	 * 120bpm [43] */
+	smpl_t rayparam = 48./512. * winlen;
+        smpl_t dfwvnorm = EXP((LOG(2.0)/rayparam)*(winlen+2));
+ 	/** length over which beat period is found [128] */
+        uint_t laglen   = winlen/4;
+	/** step increment - both in detection function samples -i.e. 11.6ms or
+	 * 1 onset frame [128] */
+	uint_t step     = winlen/4; /* 1.5 seconds */
+
+        uint_t maxnumelem = 4; /* max number of index output */
+        p->lastbeat = 0;
+        p->counter = 0;
+        p->flagstep = 0;
+        p->g_var = 3.901; // constthresh empirically derived!
+        p->rp = 1;
+        p->gp = 0;
+
+        p->rayparam = rayparam;
+        p->step    = step;
+        p->rwv     = new_fvec(laglen,channels);
+        p->gwv     = new_fvec(laglen,channels);
+        p->dfwv    = new_fvec(winlen,channels);
+        p->dfrev   = new_fvec(winlen,channels);
+        p->acf     = new_fvec(winlen,channels);
+        p->acfout  = new_fvec(laglen,channels);
+        p->phwv    = new_fvec(2*laglen,channels);
+        p->phout   = new_fvec(winlen,channels);
+
+        p->timesig = 0;
+
+        p->inds    = new_fvec(maxnumelem,channels);
+        p->locacf  = new_fvec(winlen,channels); 
+
+        /* exponential weighting, dfwv = 0.5 when i =  43 */
+        for (i=0;i<winlen;i++) {
+                p->dfwv->data[0][i] = (EXP((LOG(2.0)/rayparam)*(i+1)))
+                        / dfwvnorm;
+        } 
+
+        for (i=0;i<(laglen);i++){
+                p->rwv->data[0][i] = ((smpl_t)(i+1.) / SQR((smpl_t)rayparam)) * 
+                        EXP((-SQR((smpl_t)(i+1.)) / (2.*SQR((smpl_t)rayparam))));
+        }
+
+        return p;
+
+}
+
+void del_aubio_beattracking(aubio_beattracking_t * p) {
+        del_fvec(p->rwv);
+        del_fvec(p->gwv);
+        del_fvec(p->dfwv);
+        del_fvec(p->dfrev);
+        del_fvec(p->acf);
+        del_fvec(p->acfout);
+        del_fvec(p->phwv);
+        del_fvec(p->phout);
+        del_fvec(p->locacf);
+        del_fvec(p->inds);
+        AUBIO_FREE(p);
+}
+
+
+void aubio_beattracking_do(aubio_beattracking_t * bt, fvec_t * dfframe, fvec_t * output) {
+
+        uint_t i,k;
+        /* current beat period value found using gaussian weighting (from context dependent model) */
+        uint_t step     = bt->step;
+        uint_t laglen   = bt->rwv->length;
+        uint_t winlen   = bt->dfwv->length;
+        smpl_t * phout  = bt->phout->data[0];
+        smpl_t * phwv   = bt->phwv->data[0];
+        smpl_t * dfrev  = bt->dfrev->data[0];
+        smpl_t * dfwv   = bt->dfwv->data[0];
+        smpl_t * rwv    = bt->rwv->data[0];
+        smpl_t * acfout = bt->acfout->data[0];
+        smpl_t * acf    = bt->acf->data[0];
+        uint_t maxindex = 0;
+        //number of harmonics in shift invariant comb filterbank
+        uint_t numelem  = 4;
+
+        //smpl_t myperiod   = 0.;
+        //smpl_t * out    = output->data[0];
+
+        //parameters for making s.i.c.f.b.
+        uint_t a,b; 
+        //beat alignment
+        uint_t phase; 
+        uint_t kmax;
+        sint_t beat; 
+        uint_t bp;
+
+        for (i = 0; i < winlen; i++){
+                dfrev[winlen-1-i] = 0.;
+                dfrev[winlen-1-i] = dfframe->data[0][i]*dfwv[i];
+        }
+
+        /* find autocorrelation function */
+        aubio_autocorr(dfframe,bt->acf); 
+        /*
+        for (i = 0; i < winlen; i++){
+                AUBIO_DBG("%f,",acf[i]);
+        }
+        AUBIO_DBG("\n");
+        */
+
+        /* get acfout - assume Rayleigh weightvector only */
+        /* if timesig is unknown, use metrically unbiased version of filterbank */
+        if(!bt->timesig)  
+                numelem = 4;
+        //        AUBIO_DBG("using unbiased filterbank, timesig: %d\n", timesig);
+        else
+                numelem = bt->timesig;
+        //        AUBIO_DBG("using biased filterbank, timesig: %d\n", timesig);
+
+        /* first and last output values are left intentionally as zero */
+        for (i=0; i < bt->acfout->length; i++)
+                acfout[i] = 0.;
+
+        for(i=1;i<laglen-1;i++){ 
+                for (a=1; a<=numelem; a++){
+                        for(b=(1-a); b<a; b++){
+                                acfout[i] += acf[a*(i+1)+b-1] 
+                                        * 1./(2.*a-1.)*rwv[i];
+                        }
+                }
+        }
+
+        /* find non-zero Rayleigh period */
+        maxindex = vec_max_elem(bt->acfout);
+        bt->rp = maxindex ? maxindex : 1;
+        //rp = (maxindex==127) ? 43 : maxindex; //rayparam
+        bt->rp = (maxindex==bt->acfout->length-1) ? bt->rayparam : maxindex; //rayparam
+
+        // get float period
+        //myperiod = fvec_getperiod(bt);
+        //AUBIO_DBG("\nrp =  %d myperiod = %f\n",bt->rp,myperiod);
+        //AUBIO_DBG("accurate tempo is %f bpm\n",5168./myperiod);
+
+        /* activate biased filterbank */
+        aubio_beattracking_checkstate(bt);
+        bp = bt->bp;
+        /* end of biased filterbank */
+
+        /* initialize output */
+        for(i=0;i<bt->phout->length;i++)     {phout[i] = 0.;} 
+
+        /* deliberate integer operation, could be set to 3 max eventually */
+        kmax = winlen/bp;
+
+        for(i=0;i<bp;i++){
+                phout[i] = 0.;
+                for(k=0;k<kmax;k++){
+                        phout[i] += dfrev[i+bp*k] * phwv[i];
+                }
+        }
+
+        /* find Rayleigh period */
+        maxindex = vec_max_elem(bt->phout);
+        if (maxindex == winlen-1) maxindex = 0;
+        phase =  1 + maxindex;
+
+        /* debug */
+        //AUBIO_DBG("beat period = %d, rp1 = %d, rp2 = %d\n", bp, rp1, rp2);
+        //AUBIO_DBG("rp = %d, gp = %d, phase = %d\n", bt->rp, bt->gp, phase);
+
+        /* reset output */
+        for (i = 0; i < laglen; i++)
+                output->data[0][i] = 0.;
+
+        i = 1;
+        beat =  bp - phase;
+        /* start counting the beats */
+        if(beat >= 0)
+        {
+                output->data[0][i] = (smpl_t)beat;
+                i++;
+        }
+
+        while( beat+bp < step )
+        {
+                beat += bp;
+                output->data[0][i] = (smpl_t)beat;
+                i++;
+        }
+
+        bt->lastbeat = beat;
+        /* store the number of beat found in this frame as the first element */
+        output->data[0][0] = i;
+}
+
+uint_t fvec_gettimesig(smpl_t * acf, uint_t acflen, uint_t gp){
+        sint_t k = 0;
+        smpl_t three_energy = 0., four_energy = 0.;
+        if( acflen > 6 * gp + 2 ){
+                for(k=-2;k<2;k++){
+                        three_energy += acf[3*gp+k];
+                        four_energy += acf[4*gp+k];
+                }
+        }
+        else{ /*Expanded to be more accurate in time sig estimation*/
+                for(k=-2;k<2;k++){
+                        three_energy += acf[3*gp+k]+acf[6*gp+k];
+                        four_energy += acf[4*gp+k]+acf[2*gp+k];
+                }
+        }
+        return (three_energy > four_energy) ? 3 : 4;
+}
+
+smpl_t fvec_getperiod(aubio_beattracking_t * bt){
+      	/*function to make a more accurate beat period measurement.*/
+
+	smpl_t period = 0.;
+	smpl_t maxval = 0.;
+	uint_t numelem    = 4;
+	
+	sint_t a,b;
+	uint_t i,j;	
+	uint_t acfmi = bt->rp; //acfout max index
+	uint_t maxind = 0;
+
+	if(!bt->timesig)
+		numelem = 4;
+	else
+		numelem = bt->timesig;
+
+	for (i=0;i<numelem;i++) // initialize
+	bt->inds->data[0][i] = 0.;
+
+	for (i=0;i<bt->locacf->length;i++) // initialize
+                bt->locacf->data[0][i] = 0.;
+	
+	// get appropriate acf elements from acf and store in locacf
+        for (a=1;a<=4;a++){
+                for(b=(1-a);b<a;b++){		
+                        bt->locacf->data[0][a*(acfmi)+b-1] = 
+                                bt->acf->data[0][a*(acfmi)+b-1];		               	           	      
+                }
+        }
+
+	for(i=0;i<numelem;i++){
+
+		maxind = 0;
+		maxval = 0.0;
+	
+		for (j=0;j<(acfmi*(i+1)+(i)); j++){
+                        if(bt->locacf->data[0][j]>maxval){
+                                maxval = bt->locacf->data[0][j];
+                                maxind = j;
+                        }
+                        //bt->locacf->data[0][maxind] = 0.;
+                        bt->locacf->data[0][j] = 0.;
+		}
+		//AUBIO_DBG("\n maxind is  %d\n",maxind);
+		bt->inds->data[0][i] = maxind;
+
+	}
+
+	for (i=0;i<numelem;i++){
+		period += bt->inds->data[0][i]/(i+1.);}
+
+	period = period/numelem;
+
+	return (period);
+}
+
+
+void aubio_beattracking_checkstate(aubio_beattracking_t * bt) {
+        uint_t i,j,a,b;
+        uint_t flagconst  = 0;
+        sint_t counter  = bt->counter;
+        uint_t flagstep = bt->flagstep;
+        uint_t gp       = bt->gp;
+        uint_t bp       = bt->bp;
+        uint_t rp       = bt->rp;
+        uint_t rp1      = bt->rp1;
+        uint_t rp2      = bt->rp2;
+        uint_t laglen   = bt->rwv->length;
+        uint_t acflen   = bt->acf->length;
+        uint_t step     = bt->step;
+        smpl_t * acf    = bt->acf->data[0];
+        smpl_t * acfout = bt->acfout->data[0];
+        smpl_t * gwv    = bt->gwv->data[0];
+        smpl_t * phwv   = bt->phwv->data[0];
+
+        if (gp) {
+                // doshiftfbank again only if context dependent model is in operation
+                //acfout = doshiftfbank(acf,gwv,timesig,laglen,acfout); 
+                //don't need acfout now, so can reuse vector
+                // gwv is, in first loop, definitely all zeros, but will have
+                // proper values when context dependent model is activated
+                for (i=0; i < bt->acfout->length; i++)
+                       acfout[i] = 0.;
+                for(i=1;i<laglen-1;i++){ 
+                        for (a=1;a<=bt->timesig;a++){
+                                for(b=(1-a);b<a;b++){
+                                        acfout[i] += acf[a*(i+1)+b-1] 
+                                                * 1. * gwv[i];
+                                }
+                        }
+                }
+                gp = vec_max_elem(bt->acfout);
+                /*
+	        while(gp<32) gp =gp*2;
+	        while(gp>64) gp = gp/2;
+                */
+        } else {
+                //still only using general model
+                gp = 0;  
+        }
+
+        //now look for step change - i.e. a difference between gp and rp that 
+        // is greater than 2*constthresh - always true in first case, since gp = 0
+        if(counter == 0){
+                if(ABS(gp - rp) > 2.*bt->g_var) {
+                        flagstep = 1; // have observed  step change.
+                        counter  = 3; // setup 3 frame counter
+                } else {
+                        flagstep = 0;
+                }
+        }
+
+        //i.e. 3rd frame after flagstep initially set
+        if (counter==1 && flagstep==1) {
+                //check for consistency between previous beatperiod values
+                if(ABS(2.*rp - rp1 -rp2) < bt->g_var) {
+                        //if true, can activate context dependent model
+                        flagconst = 1;
+                        counter   = 0; // reset counter and flagstep
+                } else {
+                        //if not consistent, then don't flag consistency!
+                        flagconst = 0;
+                        counter   = 2; // let it look next time
+                }
+        } else if (counter > 0) {
+                //if counter doesn't = 1, 
+                counter = counter-1;
+        }
+
+        rp2 = rp1; rp1 = rp; 
+
+        if (flagconst) {
+                /* first run of new hypothesis */
+                gp = rp;
+                bt->timesig = fvec_gettimesig(acf,acflen, gp);
+                for(j=0;j<laglen;j++)
+                        gwv[j] = EXP(-.5*SQR((smpl_t)(j+1.-gp))/SQR(bt->g_var));
+                flagconst = 0;
+                bp = gp;
+                /* flat phase weighting */
+                for(j=0;j<2*laglen;j++)  {phwv[j] = 1.;} 
+        } else if (bt->timesig) {
+                /* context dependant model */
+                bp = gp;
+                /* gaussian phase weighting */
+                if (step > bt->lastbeat) {
+                        for(j=0;j<2*laglen;j++)  {
+                                phwv[j] = EXP(-.5*SQR((smpl_t)(1.+j-step+bt->lastbeat))/(bp/8.));
+                        }
+                } else { 
+                        //AUBIO_DBG("NOT using phase weighting as step is %d and lastbeat %d \n",
+                        //                step,bt->lastbeat);
+                        for(j=0;j<2*laglen;j++)  {phwv[j] = 1.;} 
+                }
+        } else {
+                /* initial state */ 
+                bp = rp;
+                /* flat phase weighting */
+                for(j=0;j<2*laglen;j++)  {phwv[j] = 1.;} 
+        }
+
+        /* do some further checks on the final bp value */
+
+        /* if tempo is > 206 bpm, half it */
+        while (bp < 25) {
+                //AUBIO_DBG("warning, doubling the beat period from %d\n", bp);
+                //AUBIO_DBG("warning, halving the tempo from %f\n", 60.*samplerate/hopsize/bp);
+                bp = bp*2;
+        }
+        
+        //AUBIO_DBG("tempo:\t%3.5f bpm | ", 5168./bp);
+
+        /* smoothing */
+        //bp = (uint_t) (0.8 * (smpl_t)bp + 0.2 * (smpl_t)bp2);
+        //AUBIO_DBG("tempo:\t%3.5f bpm smoothed | bp2 %d | bp %d | ", 5168./bp, bp2, bp);
+        //bp2 = bp;
+        //AUBIO_DBG("time signature: %d \n", bt->timesig);
+        bt->counter = counter;
+        bt->flagstep = flagstep;
+        bt->gp = gp;
+        bt->bp = bp;
+        bt->rp1 = rp1;
+        bt->rp2 = rp2;
+
+}
+
+smpl_t aubio_beattracking_get_bpm(aubio_beattracking_t * bt) {
+        if (bt->timesig != 0 && bt->counter == 0 && bt->flagstep == 0) {
+          return 5168. / (smpl_t)bt->gp;
+        } else {
+          return 0.;
+        }
+}
+
+smpl_t aubio_beattracking_get_confidence(aubio_beattracking_t * bt) {
+        if (bt->gp) return vec_max(bt->acfout);
+        else return 0.;
+}
--- /dev/null
+++ b/src/tempo/beattracking.h
@@ -1,0 +1,91 @@
+/*
+  Copyright (C) 2003 Matthew Davies and Paul Brossier
+
+  This program is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2 of the License, or
+  (at your option) any later version.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program; if not, write to the Free Software
+  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+         
+*/
+
+/** \file
+
+  Beat tracking using a context dependant model
+
+  This file implement the causal beat tracking algorithm designed by Matthew
+  Davies and described in the following articles:
+
+  Matthew E. P. Davies and Mark D. Plumbley. Causal tempo tracking of audio.
+  In Proceedings of the International Symposium on Music Information Retrieval
+  (ISMIR), pages 164­169, Barcelona, Spain, 2004.
+
+  Matthew E. P. Davies, Paul Brossier, and Mark D. Plumbley. Beat tracking
+  towards automatic musical accompaniment. In Proceedings of the Audio
+  Engeeniring Society 118th Convention, Barcelona, Spain, May 2005.
+  
+*/
+#ifndef BEATTRACKING_H
+#define BEATTRACKING_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** beat tracking object */
+typedef struct _aubio_beattracking_t aubio_beattracking_t;
+
+/** create beat tracking object
+
+  \param winlen: frame size [512] 
+  \param channels number (not functionnal) [1]
+
+*/
+aubio_beattracking_t * new_aubio_beattracking(uint_t winlen, uint_t channels);
+/** track the beat 
+
+  \param bt beat tracking object
+  \param dfframes current input detection function frame, smoothed by
+  adaptive median threshold. 
+  \param out stored detected beat locations 
+
+*/
+void aubio_beattracking_do(aubio_beattracking_t * bt, fvec_t * dfframes, fvec_t * out);
+/** get current tempo in bpm
+
+  \param bt beat tracking object
+
+  Returns the currently observed tempo, in beats per minutes, or 0 if no
+  consistent value is found.
+
+*/
+smpl_t aubio_beattracking_get_bpm(aubio_beattracking_t * bt);
+/** get current tempo confidence 
+
+  \param bt beat tracking object
+
+  Returns the confidence with which the tempo has been observed, 0 if no
+  consistent value is found.
+
+*/
+smpl_t aubio_beattracking_get_confidence(aubio_beattracking_t * bt);
+/** delete beat tracking object
+
+  \param p beat tracking object
+
+*/
+void del_aubio_beattracking(aubio_beattracking_t * p);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* BEATTRACKING_H */
--- /dev/null
+++ b/src/tempo/tempo.c
@@ -1,0 +1,147 @@
+/*
+   Copyright (C) 2006 Paul Brossier
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#include "aubio_priv.h"
+#include "fvec.h"
+#include "cvec.h"
+#include "onset/onsetdetection.h"
+#include "tempo/beattracking.h"
+#include "spectral/phasevoc.h"
+#include "onset/peakpick.h"
+#include "mathutils.h"
+#include "tempo/tempo.h"
+
+/* structure to store object state */
+struct _aubio_tempo_t {
+  aubio_onsetdetection_t * od;   /** onset detection */
+  aubio_pvoc_t * pv;             /** phase vocoder */
+  aubio_pickpeak_t * pp;         /** peak picker */
+  aubio_beattracking_t * bt;     /** beat tracking */
+  cvec_t * fftgrain;             /** spectral frame */
+  fvec_t * of;                   /** onset detection function value */
+  fvec_t * dfframe;              /** peak picked detection function buffer */
+  fvec_t * out;                  /** beat tactus candidates */
+  smpl_t silence;                /** silence parameter */
+  smpl_t threshold;              /** peak picking threshold */
+  sint_t blockpos;               /** current position in dfframe */
+  uint_t winlen;                 /** dfframe bufsize */
+  uint_t step;                   /** dfframe hopsize */ 
+};
+
+/* execute tempo detection function on iput buffer */
+void aubio_tempo(aubio_tempo_t *o, fvec_t * input, fvec_t * tempo)
+{
+  uint_t i;
+  uint_t winlen = o->winlen;
+  uint_t step   = o->step;
+  aubio_pvoc_do (o->pv, input, o->fftgrain);
+  aubio_onsetdetection(o->od, o->fftgrain, o->of);
+  /*if (usedoubled) {
+    aubio_onsetdetection(o2,fftgrain, onset2);
+    onset->data[0][0] *= onset2->data[0][0];
+  }*/
+  /* execute every overlap_size*step */
+  if (o->blockpos == (signed)step -1 ) {
+    /* check dfframe */
+    aubio_beattracking_do(o->bt,o->dfframe,o->out);
+    /* rotate dfframe */
+    for (i = 0 ; i < winlen - step; i++ ) 
+      o->dfframe->data[0][i] = o->dfframe->data[0][i+step];
+    for (i = winlen - step ; i < winlen; i++ ) 
+      o->dfframe->data[0][i] = 0.;
+    o->blockpos = -1;
+  }
+  o->blockpos++;
+  tempo->data[0][1] = aubio_peakpick_pimrt_wt(o->of,o->pp,
+    &(o->dfframe->data[0][winlen - step + o->blockpos]));
+  /* end of second level loop */
+  tempo->data[0][0] = 0; /* reset tactus */
+  i=0;
+  for (i = 1; i < o->out->data[0][0]; i++ ) {
+    /* if current frame is a predicted tactus */
+    if (o->blockpos == o->out->data[0][i]) {
+      /* test for silence */
+      if (aubio_silence_detection(input, o->silence)==1) {
+        tempo->data[0][1] = 0; /* unset onset */
+        tempo->data[0][0] = 0; /* unset tactus */
+      } else {
+        tempo->data[0][0] = 1; /* set tactus */
+      }
+    }
+  }
+}
+
+void aubio_tempo_set_silence(aubio_tempo_t * o, smpl_t silence) {
+  o->silence = silence;
+  return;
+}
+
+void aubio_tempo_set_threshold(aubio_tempo_t * o, smpl_t threshold) {
+  o->threshold = threshold;
+  aubio_peakpicker_set_threshold(o->pp, o->threshold);
+  return;
+}
+
+/* Allocate memory for an tempo detection */
+aubio_tempo_t * new_aubio_tempo (aubio_onsetdetection_type type_onset, 
+    uint_t buf_size, uint_t hop_size, uint_t channels)
+{
+  aubio_tempo_t * o = AUBIO_NEW(aubio_tempo_t);
+  o->winlen = SQR(512)/hop_size;
+  o->step = o->winlen/4;
+  o->blockpos = 0;
+  o->threshold = 0.3;
+  o->silence = -90;
+  o->blockpos = 0;
+  o->dfframe  = new_fvec(o->winlen,channels);
+  o->fftgrain = new_cvec(buf_size, channels);
+  o->out      = new_fvec(o->step,channels);
+  o->pv       = new_aubio_pvoc(buf_size, hop_size, channels);
+  o->pp       = new_aubio_peakpicker(o->threshold);
+  o->od       = new_aubio_onsetdetection(type_onset,buf_size,channels);
+  o->of       = new_fvec(1, channels);
+  o->bt       = new_aubio_beattracking(o->winlen,channels);
+  /*if (usedoubled)    {
+    o2 = new_aubio_onsetdetection(type_onset2,buffer_size,channels);
+    onset2 = new_fvec(1 , channels);
+  }*/
+  return o;
+}
+
+smpl_t aubio_tempo_get_bpm(aubio_tempo_t *o) {
+  return aubio_beattracking_get_bpm(o->bt);
+}
+
+smpl_t aubio_tempo_get_confidence(aubio_tempo_t *o) {
+  return aubio_beattracking_get_confidence(o->bt);
+}
+
+void del_aubio_tempo (aubio_tempo_t *o)
+{
+  del_aubio_onsetdetection(o->od);
+  del_aubio_beattracking(o->bt);
+  del_aubio_peakpicker(o->pp);
+  del_aubio_pvoc(o->pv);
+  del_fvec(o->out);
+  del_fvec(o->of);
+  del_cvec(o->fftgrain);
+  del_fvec(o->dfframe);
+  AUBIO_FREE(o);
+  return;
+}
--- /dev/null
+++ b/src/tempo/tempo.h
@@ -1,0 +1,78 @@
+/*
+   Copyright (C) 2006 Paul Brossier
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+/** \file 
+  
+  Tempo detection driver
+
+  This object stores all the memory required for tempo detection algorithm
+  and returns the estimated beat locations.
+
+*/
+
+#ifndef TEMPO_H
+#define TEMPO_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** tempo detection structure */
+typedef struct _aubio_tempo_t aubio_tempo_t;
+
+/** create tempo detection object */
+aubio_tempo_t * new_aubio_tempo (aubio_onsetdetection_type type_onset, 
+    uint_t buf_size, uint_t hop_size, uint_t channels);
+
+/** execute tempo detection */
+void aubio_tempo(aubio_tempo_t *o, fvec_t * input, fvec_t * tempo);
+
+/** set tempo detection silence threshold  */
+void aubio_tempo_set_silence(aubio_tempo_t * o, smpl_t silence);
+
+/** set tempo detection peak picking threshold  */
+void aubio_tempo_set_threshold(aubio_tempo_t * o, smpl_t threshold);
+
+/** get current tempo
+
+  \param bt beat tracking object
+
+  Returns the currently observed tempo, or 0 if no consistent value is found
+
+*/
+smpl_t aubio_tempo_get_bpm(aubio_tempo_t * bt);
+
+/** get current tempo confidence
+
+  \param bt beat tracking object
+
+  Returns the confidence with which the tempo has been observed, 0 if no
+  consistent value is found.
+
+*/
+smpl_t aubio_tempo_get_confidence(aubio_tempo_t * bt);
+
+/** delete tempo detection object */
+void del_aubio_tempo(aubio_tempo_t * o);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* TEMPO_H */
--- /dev/null
+++ b/src/temporal/biquad.c
@@ -1,0 +1,114 @@
+/*
+   Copyright (C) 2003 Paul Brossier
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#include "aubio_priv.h"
+#include "fvec.h"
+#include "mathutils.h"
+#include "temporal/biquad.h"
+
+/** \note this file needs to be in double or more less precision would lead to large
+ * errors in the output 
+ */
+
+struct _aubio_biquad_t {
+  lsmp_t a2;
+  lsmp_t a3;
+  lsmp_t b1;
+  lsmp_t b2;
+  lsmp_t b3;
+  lsmp_t o1;
+  lsmp_t o2;
+  lsmp_t i1;
+  lsmp_t i2;
+};
+
+void aubio_biquad_do(aubio_biquad_t * b, fvec_t * in) {
+  uint_t i,j;
+  lsmp_t i1 = b->i1;
+  lsmp_t i2 = b->i2;
+  lsmp_t o1 = b->o1;
+  lsmp_t o2 = b->o2;
+  lsmp_t a2 = b->a2;
+  lsmp_t a3 = b->a3;
+  lsmp_t b1 = b->b1;
+  lsmp_t b2 = b->b2;
+  lsmp_t b3 = b->b3;
+
+  i=0; // works in mono only !!!
+  //for (i=0;i<in->channels;i++) {
+  for (j = 0; j < in->length; j++) {
+    lsmp_t i0 = in->data[i][j];
+    lsmp_t o0 = b1 * i0 + b2 * i1 + b3 * i2
+      - a2 * o1 - a3 * o2;// + 1e-37;
+    in->data[i][j] = o0;
+    i2 = i1;
+    i1 = i0;
+    o2 = o1;
+    o1 = o0;
+  }
+  b->i2 = i2;
+  b->i1 = i1;
+  b->o2 = o2;
+  b->o1 = o1;
+  //}
+}
+
+void aubio_biquad_do_filtfilt(aubio_biquad_t * b, fvec_t * in, fvec_t * tmp) {
+  uint_t j,i=0;
+  uint_t length = in->length;
+  lsmp_t mir;
+  /* mirroring */
+  mir = 2*in->data[i][0];
+  b->i1 = mir - in->data[i][2];
+  b->i2 = mir - in->data[i][1];
+  /* apply filtering */
+  aubio_biquad_do(b,in);
+  /* invert  */
+  for (j = 0; j < length; j++)
+    tmp->data[i][length-j-1] = in->data[i][j];
+  /* mirror again */
+  mir = 2*tmp->data[i][0];
+  b->i1 = mir - tmp->data[i][2];
+  b->i2 = mir - tmp->data[i][1];
+  /* apply filtering */
+  aubio_biquad_do(b,tmp);
+  /* invert back */
+  for (j = 0; j < length; j++)
+    in->data[i][j] = tmp->data[i][length-j-1];
+}
+
+aubio_biquad_t * new_aubio_biquad(
+    lsmp_t b1, lsmp_t b2, lsmp_t b3, 
+    lsmp_t a2, lsmp_t a3) {
+  aubio_biquad_t * b = AUBIO_NEW(aubio_biquad_t);
+  b->a2 = a2;
+  b->a3 = a3;
+  b->b1 = b1;
+  b->b2 = b2;
+  b->b3 = b3;
+  b->i1 = 0.;
+  b->i2 = 0.;
+  b->o1 = 0.;
+  b->o2 = 0.;
+  return b;
+}
+
+void del_aubio_biquad(aubio_biquad_t * b) {
+  AUBIO_FREE(b);
+}
--- /dev/null
+++ b/src/temporal/biquad.h
@@ -1,0 +1,80 @@
+/*
+	 Copyright (C) 2003 Paul Brossier
+
+	 This program is free software; you can redistribute it and/or modify
+	 it under the terms of the GNU General Public License as published by
+	 the Free Software Foundation; either version 2 of the License, or
+	 (at your option) any later version.
+
+	 This program is distributed in the hope that it will be useful,
+	 but WITHOUT ANY WARRANTY; without even the implied warranty of
+	 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+	 GNU General Public License for more details.
+
+	 You should have received a copy of the GNU General Public License
+	 along with this program; if not, write to the Free Software
+	 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef BIQUAD_H
+#define BIQUAD_H
+
+/** \file 
+
+  Second order Infinite Impulse Response filter
+
+  This file implements a normalised biquad filter (second order IIR):
+ 
+  \f$ y[n] = b_1 x[n] + b_2 x[n-1] + b_3 x[n-2] - a_2 y[n-1] - a_3 y[n-2] \f$
+
+  The filtfilt version runs the filter twice, forward and backward, to
+  compensate the phase shifting of the forward operation.
+
+*/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** biquad filter object */
+typedef struct _aubio_biquad_t aubio_biquad_t;
+
+/** filter input vector
+
+  \param b biquad object as returned by new_aubio_biquad
+  \param in input vector to filter
+
+*/
+void aubio_biquad_do(aubio_biquad_t * b, fvec_t * in);
+/** filter input vector forward and backward
+
+  \param b biquad object as returned by new_aubio_biquad
+  \param in input vector to filter
+  \param tmp memory space to use for computation
+
+*/
+void aubio_biquad_do_filtfilt(aubio_biquad_t * b, fvec_t * in, fvec_t * tmp);
+/** create new biquad filter
+
+  \param b1 forward filter coefficient
+  \param b2 forward filter coefficient
+  \param b3 forward filter coefficient
+  \param a2 feedback filter coefficient
+  \param a3 feedback filter coefficient
+
+*/
+aubio_biquad_t * new_aubio_biquad(lsmp_t b1, lsmp_t b2, lsmp_t b3, lsmp_t a2, lsmp_t a3);
+
+/** delete biquad filter 
+ 
+  \param b biquad object to delete 
+
+*/
+void del_aubio_biquad(aubio_biquad_t * b);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*BIQUAD_H*/
--- /dev/null
+++ b/src/temporal/filter.c
@@ -1,0 +1,225 @@
+/*
+   Copyright (C) 2003 Paul Brossier
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+
+/* Requires lsmp_t to be long or double. float will NOT give reliable 
+ * results */
+
+#include "aubio_priv.h"
+#include "fvec.h"
+#include "mathutils.h"
+#include "temporal/filter.h"
+
+struct _aubio_filter_t {
+  uint_t order;
+  lsmp_t * a;
+  lsmp_t * b;
+  lsmp_t * y;
+  lsmp_t * x;
+};
+
+/* bug: mono only */
+void aubio_filter_do(aubio_filter_t * f, fvec_t * in) {
+  uint_t i,j,l, order = f->order;
+  lsmp_t *x = f->x;
+  lsmp_t *y = f->y;
+  lsmp_t *a = f->a;
+  lsmp_t *b = f->b;
+  i=0;//for (i=0;i<in->channels;i++) {
+  for (j = 0; j < in->length; j++) {
+    /* new input */
+    //AUBIO_DBG("befor %f\t", in->data[i][j]);
+    x[0] = in->data[i][j];
+    y[0] = b[0] * x[0];
+    for (l=1;l<order; l++) {
+      y[0] += b[l] * x[l];
+      y[0] -= a[l] * y[l];
+    } /* + 1e-37; for denormal ? */
+    /* new output */
+    in->data[i][j] = y[0];
+    //AUBIO_DBG("after %f\n", in->data[i][j]);
+    /* store states for next sample */
+    for (l=order-1; l>0; l--){
+      x[l] = x[l-1];
+      y[l] = y[l-1];
+    }
+  }
+  /* store states for next buffer */
+  f->x = x;
+  f->y = y;
+  //}	
+}
+
+void aubio_filter_do_outplace(aubio_filter_t * f, fvec_t * in, fvec_t * out) {
+  uint_t i,j,l, order = f->order;
+  lsmp_t *x = f->x;
+  lsmp_t *y = f->y;
+  lsmp_t *a = f->a;
+  lsmp_t *b = f->b;
+
+  i=0; // works in mono only !!!
+  //for (i=0;i<in->channels;i++) {
+  for (j = 0; j < in->length; j++) {
+    /* new input */
+    x[0] = in->data[i][j];
+    y[0] = b[0] * x[0];
+    for (l=1;l<order; l++) {
+      y[0] += b[l] * x[l];
+      y[0] -= a[l] * y[l];
+    }
+    // + 1e-37;
+    /* new output */
+    out->data[i][j] = y[0];
+    /* store for next sample */
+    for (l=order-1; l>0; l--){
+      x[l] = x[l-1];
+      y[l] = y[l-1];
+    }
+  }
+  /* store for next run */
+  f->x = x;
+  f->y = y;
+  //}
+}
+
+/*  
+ *
+ * despite mirroring, end effects destroy both phse and amplitude. the longer
+ * the buffer, the less affected they are.
+ *
+ * replacing with zeros clicks.
+ *
+ * seems broken for order > 4 (see biquad_do_filtfilt for audible one) 
+ */
+void aubio_filter_do_filtfilt(aubio_filter_t * f, fvec_t * in, fvec_t * tmp) {
+  uint_t j,i=0;
+  uint_t length = in->length;
+  //uint_t order = f->order;
+  //lsmp_t mir;
+  /* mirroring */
+  //mir = 2*in->data[i][0];
+  //for (j=1;j<order;j++)
+  //f->x[j] = 0.;//mir - in->data[i][order-j];
+  /* apply filtering */
+  aubio_filter_do(f,in);
+  /* invert */
+  for (j = 0; j < length; j++)
+    tmp->data[i][length-j-1] = in->data[i][j];
+  /* mirror inverted */
+  //mir = 2*tmp->data[i][0];
+  //for (j=1;j<order;j++)
+  //f->x[j] = 0.;//mir - tmp->data[i][order-j];
+  /* apply filtering on inverted */
+  aubio_filter_do(f,tmp);
+  /* invert back */
+  for (j = 0; j < length; j++)
+    in->data[i][j] = tmp->data[i][length-j-1];
+}
+
+
+aubio_filter_t * new_aubio_adsgn_filter(uint_t samplerate) {
+  aubio_filter_t * f = new_aubio_filter(samplerate, 7);
+  lsmp_t * a = f->a;
+  lsmp_t * b = f->b;
+  /* uint_t l; */
+  /* for now, 44100, adsgn */
+  a[0] =  1.00000000000000000000000000000000000000000000000000000; 
+  a[1] = -4.01957618111583236952810693765059113502502441406250000; 
+  a[2] =  6.18940644292069386267485242569819092750549316406250000; 
+  a[3] = -4.45319890354411640487342083360999822616577148437500000; 
+  a[4] =  1.42084294962187751565352300531230866909027099609375000; 
+  a[5] = -0.14182547383030480458998567883099894970655441284179688; 
+  a[6] =  0.00435117723349511334451911181986361043527722358703613; 
+  b[0] =  0.25574112520425740235907596797915175557136535644531250;
+  b[1] = -0.51148225040851391653973223583307117223739624023437500;
+  b[2] = -0.25574112520426162120656954357400536537170410156250000;
+  b[3] =  1.02296450081703405032840237254276871681213378906250000;
+  b[4] = -0.25574112520426051098354491841746494174003601074218750;
+  b[5] = -0.51148225040851369449512731080176308751106262207031250;
+  b[6] =  0.25574112520425729133677350546349771320819854736328125;
+  /* DBG: filter coeffs at creation time */
+  /*
+  for (l=0; l<f->order; l++){
+    AUBIO_DBG("a[%d]=\t%1.16f\tb[%d]=\t%1.16f\n",l,a[l],l,b[l]);
+  }
+  */
+  f->a = a;
+  f->b = b;
+  return f;
+}
+
+aubio_filter_t * new_aubio_cdsgn_filter(uint_t samplerate) {
+  aubio_filter_t * f = new_aubio_filter(samplerate, 5);
+  lsmp_t * a = f->a;
+  lsmp_t * b = f->b;
+  /* uint_t l; */
+  /* for now, 44100, cdsgn */
+  a[0] =  1.000000000000000000000000000000000000000000000000000000000000; 
+  a[1] = -2.134674963687040794013682898366823792457580566406250000000000; 
+  a[2] =  1.279333533236063358273781886964570730924606323242187500000000; 
+  a[3] = -0.149559846089396208945743182994192466139793395996093750000000; 
+  a[4] =  0.004908700174624848651394604104325480875559151172637939453125; 
+  b[0] =  0.217008561949218803377448239189106971025466918945312500000000;
+  b[1] = -0.000000000000000222044604925031308084726333618164062500000000;
+  b[2] = -0.434017123898438272888711253472138196229934692382812500000000;
+  b[3] =  0.000000000000000402455846426619245903566479682922363281250000;
+  b[4] =  0.217008561949218969910901932962588034570217132568359375000000;
+  /* DBG: filter coeffs at creation time */
+  /*
+  for (l=0; l<f->order; l++){
+    AUBIO_DBG("a[%d]=\t%1.16f\tb[%d]=\t%1.16f\n",l,a[l],l,b[l]);
+  }
+  */
+  f->a = a;
+  f->b = b;
+  return f;
+}
+
+aubio_filter_t * new_aubio_filter(uint_t samplerate UNUSED, uint_t order) {
+  aubio_filter_t * f = AUBIO_NEW(aubio_filter_t);
+  lsmp_t * x = f->x;
+  lsmp_t * y = f->y;
+  lsmp_t * a = f->a;
+  lsmp_t * b = f->b;
+  uint_t l;
+  f->order = order;
+  a = AUBIO_ARRAY(lsmp_t,f->order);
+  b = AUBIO_ARRAY(lsmp_t,f->order);
+  x = AUBIO_ARRAY(lsmp_t,f->order);
+  y = AUBIO_ARRAY(lsmp_t,f->order);
+  /* initial states to zeros */
+  for (l=0; l<f->order; l++){
+    x[l] = 0.;
+    y[l] = 0.;
+  }
+  f->x = x;
+  f->y = y;
+  f->a = a;
+  f->b = b;
+  return f;
+}
+
+void del_aubio_filter(aubio_filter_t * f) {
+  AUBIO_FREE(f->a);
+  AUBIO_FREE(f->b);
+  AUBIO_FREE(f->x);
+  AUBIO_FREE(f->y);
+  AUBIO_FREE(f);
+  return;
+}
--- /dev/null
+++ b/src/temporal/filter.h
@@ -1,0 +1,97 @@
+/*
+	 Copyright (C) 2003 Paul Brossier
+
+	 This program is free software; you can redistribute it and/or modify
+	 it under the terms of the GNU General Public License as published by
+	 the Free Software Foundation; either version 2 of the License, or
+	 (at your option) any later version.
+
+	 This program is distributed in the hope that it will be useful,
+	 but WITHOUT ANY WARRANTY; without even the implied warranty of
+	 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+	 GNU General Public License for more details.
+
+	 You should have received a copy of the GNU General Public License
+	 along with this program; if not, write to the Free Software
+	 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef FILTER_H
+#define FILTER_H
+
+/** \file 
+
+  Infinite Impulse Response filter
+
+  This file implements IIR filters of any order:
+ 
+  \f$ y[n] = b_1 x[n] + ... + b_{order} x[n-order] -
+       a_2 y[n-1] - ... - a_{order} y[n-order]\f$
+
+  The filtfilt version runs the filter twice, forward and backward, to
+  compensate the phase shifting of the forward operation.
+
+*/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** IIR filter object */
+typedef struct _aubio_filter_t aubio_filter_t;
+
+/** filter input vector (in-place)
+
+  \param b biquad object as returned by new_aubio_biquad
+  \param in input vector to filter
+
+*/
+void aubio_filter_do(aubio_filter_t * b, fvec_t * in);
+/** filter input vector (out-of-place)
+
+  \param b biquad object as returned by new_aubio_biquad
+  \param in input vector to filter
+  \param out output vector to store filtered input
+
+*/
+void aubio_filter_do_outplace(aubio_filter_t * b, fvec_t * in, fvec_t * out);
+/** filter input vector forward and backward
+
+  \param b biquad object as returned by new_aubio_biquad
+  \param in input vector to filter
+  \param tmp memory space to use for computation
+
+*/
+void aubio_filter_do_filtfilt(aubio_filter_t * b, fvec_t * in, fvec_t * tmp);
+/** create new IIR filter
+
+  \param samplerate signal sampling rate
+  \param order order of the filter (number of coefficients)
+
+*/
+aubio_filter_t * new_aubio_filter(uint_t samplerate, uint_t order);
+/** create a new A-design filter 
+
+  \param samplerate sampling-rate of the signal to filter 
+
+*/
+aubio_filter_t * new_aubio_adsgn_filter(uint_t samplerate);
+/** create a new C-design filter 
+
+  \param samplerate sampling-rate of the signal to filter 
+
+*/
+aubio_filter_t * new_aubio_cdsgn_filter(uint_t samplerate);
+/** delete a filter object
+ 
+  \param f filter object to delete
+
+*/
+void del_aubio_filter(aubio_filter_t * f);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*FILTER_H*/
--- /dev/null
+++ b/src/temporal/resample.c
@@ -1,0 +1,65 @@
+/*
+	 Copyright (C) 2003 Paul Brossier
+
+	 This program is free software; you can redistribute it and/or modify
+	 it under the terms of the GNU General Public License as published by
+	 the Free Software Foundation; either version 2 of the License, or
+	 (at your option) any later version.
+
+	 This program is distributed in the hope that it will be useful,
+	 but WITHOUT ANY WARRANTY; without even the implied warranty of
+	 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+	 GNU General Public License for more details.
+
+	 You should have received a copy of the GNU General Public License
+	 along with this program; if not, write to the Free Software
+	 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+	 
+*/
+
+
+#include <samplerate.h> /* from libsamplerate */
+
+#include "aubio_priv.h"
+#include "fvec.h"
+#include "temporal/resample.h"
+
+struct _aubio_resampler_t {
+	SRC_DATA  *proc;
+	SRC_STATE *stat;
+	float ratio;
+	uint_t type;
+};
+
+aubio_resampler_t * new_aubio_resampler(float ratio, uint_t type) {
+	aubio_resampler_t * s  = AUBIO_NEW(aubio_resampler_t);
+	int error = 0;
+	s->stat = src_new (type, 1, &error) ; /* only one channel */
+	s->proc = AUBIO_NEW(SRC_DATA);
+	if (error) AUBIO_ERR("%s\n",src_strerror(error));
+	s->ratio = ratio;
+	return s;
+}
+
+void del_aubio_resampler(aubio_resampler_t *s) {
+	src_delete(s->stat);
+	AUBIO_FREE(s->proc);
+	AUBIO_FREE(s);
+}
+
+uint_t aubio_resampler_process(aubio_resampler_t *s, 
+    fvec_t * input,  fvec_t * output) {
+	uint_t i ;
+	s->proc->input_frames = input->length;
+	s->proc->output_frames = output->length;
+	s->proc->src_ratio = s->ratio;
+	for (i = 0 ; i< input->channels; i++) 
+	{
+		/* make SRC_PROC data point to input outputs */
+		s->proc->data_in = input->data[i];
+		s->proc->data_out= output->data[i];
+		/* do resampling */
+		src_process (s->stat, s->proc) ;
+	}
+	return AUBIO_OK;
+}	
--- /dev/null
+++ b/src/temporal/resample.h
@@ -1,0 +1,60 @@
+/*
+	 Copyright (C) 2003 Paul Brossier
+
+	 This program is free software; you can redistribute it and/or modify
+	 it under the terms of the GNU General Public License as published by
+	 the Free Software Foundation; either version 2 of the License, or
+	 (at your option) any later version.
+
+	 This program is distributed in the hope that it will be useful,
+	 but WITHOUT ANY WARRANTY; without even the implied warranty of
+	 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+	 GNU General Public License for more details.
+
+	 You should have received a copy of the GNU General Public License
+	 along with this program; if not, write to the Free Software
+	 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+	 
+*/
+
+#ifndef _RESAMPLE_H
+#define _RESAMPLE_H
+
+/** \file
+ 
+ Resampling object
+
+ This object resamples an input vector into an output vector using
+ libsamplerate. See http://www.mega-nerd.com/SRC/
+ 
+*/
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** resampler object */
+typedef struct _aubio_resampler_t aubio_resampler_t;
+/** create resampler object 
+
+  \param ratio output_sample_rate / input_sample_rate 
+  \param type libsamplerate resampling type
+
+*/
+aubio_resampler_t * new_aubio_resampler(float ratio, uint_t type);
+/** delete resampler object */
+void del_aubio_resampler(aubio_resampler_t *s);
+/** resample input in output
+
+  \param s resampler object
+  \param input input buffer of size N
+  \param output output buffer of size N*ratio
+
+*/
+uint_t aubio_resampler_process(aubio_resampler_t *s, fvec_t * input,  fvec_t * output);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _RESAMPLE_H */
--- a/src/tss.c
+++ /dev/null
@@ -1,127 +1,0 @@
-/*
-   Copyright (C) 2003 Paul Brossier
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-*/
-
-/* default values : alfa=4, beta=3, threshold=0.25 */
-
-#include "aubio_priv.h"
-#include "sample.h"
-#include "mathutils.h"
-#include "tss.h"
-
-struct _aubio_tss_t 
-{
-  smpl_t thrs;
-  smpl_t alfa;
-  smpl_t beta;
-  smpl_t parm;
-  smpl_t thrsfact;
-  fvec_t *theta1;
-  fvec_t *theta2;
-  fvec_t *oft1;
-  fvec_t *oft2;
-  fvec_t *dev;
-};
-
-void aubio_tss_do(aubio_tss_t *o, cvec_t * input, 
-    cvec_t * trans, cvec_t * stead)
-{
-  uint_t i,j;
-  uint_t test;	
-  uint_t nbins     = input->length;
-  uint_t channels  = input->channels;
-  smpl_t alfa      = o->alfa;
-  smpl_t beta      = o->beta;
-  smpl_t parm      = o->parm;
-  smpl_t ** dev    = (smpl_t **)o->dev->data;
-  smpl_t ** oft1   = (smpl_t **)o->oft1->data;
-  smpl_t ** oft2   = (smpl_t **)o->oft2->data;
-  smpl_t ** theta1 = (smpl_t **)o->theta1->data;
-  smpl_t ** theta2 = (smpl_t **)o->theta2->data;
-  /* second phase derivative */
-  for (i=0;i<channels; i++){
-    for (j=0;j<nbins; j++){
-      dev[i][j] = aubio_unwrap2pi(input->phas[i][j]
-          -2.0*theta1[i][j]+theta2[i][j]);
-      theta2[i][j] = theta1[i][j];
-      theta1[i][j] = input->phas[i][j];
-    }
-
-    for (j=0;j<nbins; j++){
-      /* transient analysis */
-      test = (ABS(dev[i][j]) > parm*oft1[i][j]);
-      trans->norm[i][j] = input->norm[i][j] * test;
-      trans->phas[i][j] = input->phas[i][j] * test;
-    }
-
-    for (j=0;j<nbins; j++){
-      /* steady state analysis */
-      test = (ABS(dev[i][j]) < parm*oft2[i][j]);
-      stead->norm[i][j] = input->norm[i][j] * test;
-      stead->phas[i][j] = input->phas[i][j] * test;
-
-      /*increase sstate probability for sines */
-      test = (trans->norm[i][j]==0.);
-      oft1[i][j]  = test;
-      test = (stead->norm[i][j]==0.);
-      oft2[i][j]  = test;
-      test = (trans->norm[i][j]>0.);
-      oft1[i][j] += alfa*test;
-      test = (stead->norm[i][j]>0.);
-      oft2[i][j] += alfa*test;
-      test = (oft1[i][j]>1. && trans->norm[i][j]>0.);
-      oft1[i][j] += beta*test;
-      test = (oft2[i][j]>1. && stead->norm[i][j]>0.);
-      oft2[i][j] += beta*test;
-    }
-  }
-}
-
-void aubio_tss_set_thres(aubio_tss_t *o, smpl_t thrs){
-	o->thrs = thrs;
-  	o->parm = thrs*o->thrsfact;
-}
-
-aubio_tss_t * new_aubio_tss(smpl_t thrs, smpl_t alfa, smpl_t beta, 
-    uint_t size, uint_t overlap,uint_t channels)
-{
-  aubio_tss_t * o = AUBIO_NEW(aubio_tss_t);
-  uint_t rsize = size/2+1;
-  o->thrs = thrs;
-  o->thrsfact = TWO_PI*overlap/rsize;
-  o->alfa = alfa;	
-  o->beta = beta;	
-  o->parm = thrs*o->thrsfact;
-  o->theta1 = new_fvec(rsize,channels);
-  o->theta2 = new_fvec(rsize,channels);
-  o->oft1 = new_fvec(rsize,channels);
-  o->oft2 = new_fvec(rsize,channels);
-  o->dev = new_fvec(rsize,channels);
-  return o;
-}
-
-void del_aubio_tss(aubio_tss_t *s)
-{
-  free(s->theta1);
-  free(s->theta2);
-  free(s->oft1);
-  free(s->oft2);
-  free(s->dev);
-  free(s);
-}
-
--- a/src/tss.h
+++ /dev/null
@@ -1,84 +1,0 @@
-/*
-	 Copyright (C) 2003 Paul Brossier
-
-	 This program is free software; you can redistribute it and/or modify
-	 it under the terms of the GNU General Public License as published by
-	 the Free Software Foundation; either version 2 of the License, or
-	 (at your option) any later version.
-
-	 This program is distributed in the hope that it will be useful,
-	 but WITHOUT ANY WARRANTY; without even the implied warranty of
-	 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-	 GNU General Public License for more details.
-
-	 You should have received a copy of the GNU General Public License
-	 along with this program; if not, write to the Free Software
-	 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-	 
-*/
-
-/** \file
-
-  Transient / Steady-state Separation (TSS)
-
-  This file implement a Transient / Steady-state Separation (TSS) as described
-  in:
-
-  Christopher Duxbury, Mike E. Davies, and Mark B. Sandler. Separation of
-  transient information in musical audio using multiresolution analysis
-  techniques. In Proceedings of the Digital Audio Effects Conference, DAFx-01,
-  pages 1­5, Limerick, Ireland, 2001.
-
-*/
-
-#ifndef TSS_H
-#define TSS_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/** TSS object */
-typedef struct _aubio_tss_t aubio_tss_t;
-
-/** create tss object
-
-  \param thrs separation threshold
-  \param alfa alfa parameter
-  \param beta beta parameter
-  \param size buffer size
-  \param overlap step size
-  \param channels number of input channels
-
-*/
-aubio_tss_t * new_aubio_tss(smpl_t thrs, smpl_t alfa, smpl_t beta, 
-    uint_t size, uint_t overlap,uint_t channels);
-/** delete tss object
-
-  \param s tss object as returned by new_aubio_tss
-
-*/
-void del_aubio_tss(aubio_tss_t *s);
-
-/** set transient / steady state separation threshold 
- 
-  \param tss tss object as returned by new_aubio_tss
-  \param thrs new threshold value
-
-*/
-void aubio_tss_set_thres(aubio_tss_t *tss, smpl_t thrs);
-/** split input into transient and steady states components
- 
-  \param s tss object as returned by new_aubio_tss
-  \param input input spectral frame
-  \param trans output transient components
-  \param stead output steady state components
-
-*/
-void aubio_tss_do(aubio_tss_t *s, cvec_t * input, cvec_t * trans, cvec_t * stead);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /*TSS_H*/
--- /dev/null
+++ b/src/utils/hist.c
@@ -1,0 +1,157 @@
+/*
+   Copyright (C) 2003 Paul Brossier
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "aubio_priv.h"
+#include "fvec.h"
+#include "utils/scale.h"
+#include "mathutils.h" //vec_min vec_max
+#include "utils/hist.h"
+
+/********
+ * Object Structure
+ */
+
+struct _aubio_hist_t {
+  fvec_t * hist;
+  uint_t nelems;
+  uint_t channels;
+  fvec_t * cent;
+  aubio_scale_t *scaler;
+};
+
+/**
+ * Object creation/deletion calls
+ */
+aubio_hist_t * new_aubio_hist (smpl_t ilow, smpl_t ihig, uint_t nelems, uint_t channels){
+  aubio_hist_t * s = AUBIO_NEW(aubio_hist_t);
+  smpl_t step = (ihig-ilow)/(smpl_t)(nelems);
+  smpl_t accum = step;
+  uint_t i;
+  s->channels = channels;
+  s->nelems = nelems;
+  s->hist = new_fvec(nelems, channels);
+  s->cent = new_fvec(nelems, 1);
+
+  /* use scale to map ilow/ihig -> 0/nelems */
+  s->scaler = new_aubio_scale(ilow,ihig,0,nelems);
+  /* calculate centers now once */
+  s->cent->data[0][0] = ilow + 0.5 * step;
+  for (i=1; i < s->nelems; i++, accum+=step )
+    s->cent->data[0][i] = s->cent->data[0][0] + accum;
+
+  return s;
+}
+
+void del_aubio_hist(aubio_hist_t *s) {
+  del_fvec(s->hist);
+  del_fvec(s->cent);
+  del_aubio_scale(s->scaler);
+  AUBIO_FREE(s);
+}
+
+/***
+ * do it
+ */
+void aubio_hist_do (aubio_hist_t *s, fvec_t *input) {
+  uint_t i,j;
+  sint_t tmp = 0;
+  aubio_scale_do(s->scaler, input);
+  /* reset data */
+  for (i=0; i < s->channels; i++)
+    for (j=0; j < s->nelems; j++)
+      s->hist->data[i][j] = 0;
+  /* run accum */
+  for (i=0; i < input->channels; i++)
+    for (j=0;  j < input->length; j++)
+    {
+      tmp = (sint_t)FLOOR(input->data[i][j]);
+      if ((tmp >= 0) && (tmp < (sint_t)s->nelems))
+        s->hist->data[i][tmp] += 1;
+    }
+}
+
+void aubio_hist_do_notnull (aubio_hist_t *s, fvec_t *input) {
+  uint_t i,j;
+  sint_t tmp = 0;
+  aubio_scale_do(s->scaler, input);
+  /* reset data */
+  for (i=0; i < s->channels; i++)
+    for (j=0; j < s->nelems; j++)
+      s->hist->data[i][j] = 0;
+  /* run accum */
+  for (i=0; i < input->channels; i++)
+    for (j=0;  j < input->length; j++) {
+      if (input->data[i][j] != 0) {
+        tmp = (sint_t)FLOOR(input->data[i][j]);
+        if ((tmp >= 0) && (tmp < (sint_t)s->nelems))
+          s->hist->data[i][tmp] += 1;
+      }
+    }
+}
+
+
+void aubio_hist_dyn_notnull (aubio_hist_t *s, fvec_t *input) {
+  uint_t i,j;
+  sint_t tmp = 0;
+  smpl_t ilow = vec_min(input);
+  smpl_t ihig = vec_max(input);
+  smpl_t step = (ihig-ilow)/(smpl_t)(s->nelems);
+
+  /* readapt */
+  aubio_scale_set(s->scaler, ilow, ihig, 0, s->nelems);
+
+  /* recalculate centers */
+  s->cent->data[0][0] = ilow + 0.5f * step;
+  for (i=1; i < s->nelems; i++)
+    s->cent->data[0][i] = s->cent->data[0][0] + i * step;
+
+  /* scale */
+  aubio_scale_do(s->scaler, input);
+
+  /* reset data */
+  for (i=0; i < s->channels; i++)
+    for (j=0; j < s->nelems; j++)
+      s->hist->data[i][j] = 0;
+  /* run accum */
+  for (i=0; i < input->channels; i++)
+    for (j=0;  j < input->length; j++) {
+      if (input->data[i][j] != 0) {
+        tmp = (sint_t)FLOOR(input->data[i][j]);
+        if ((tmp >= 0) && (tmp < (sint_t)s->nelems))
+          s->hist->data[i][tmp] += 1;
+      }
+    }
+}
+
+void aubio_hist_weight (aubio_hist_t *s) {
+  uint_t i,j;
+  for (i=0; i < s->channels; i++)
+    for (j=0; j < s->nelems; j++) {
+      s->hist->data[i][j] *= s->cent->data[0][j];
+    }
+}
+
+smpl_t aubio_hist_mean (aubio_hist_t *s) {
+  uint_t i,j;
+  smpl_t tmp = 0.0f;
+  for (i=0; i < s->channels; i++)
+    for (j=0; j < s->nelems; j++)
+      tmp += s->hist->data[i][j];
+  return tmp/(smpl_t)(s->nelems);
+}
+
--- /dev/null
+++ b/src/utils/hist.h
@@ -1,0 +1,61 @@
+/*
+   Copyright (C) 2003 Paul Brossier
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+/** @file
+ *
+ * Histogram function
+ *
+ * Big hacks to implement an histogram
+ */
+
+#ifndef HIST_H
+#define HIST_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** histogram object */
+typedef struct _aubio_hist_t aubio_hist_t;
+
+/** histogram creation
+ * \param flow minimum input
+ * \param fhig maximum input
+ * \param nelems number of histogram columns
+ * \param channels number of channels
+ */
+aubio_hist_t * new_aubio_hist(smpl_t flow, smpl_t fhig, uint_t nelems, uint_t channels);
+/** histogram deletion */
+void del_aubio_hist(aubio_hist_t *s);
+/** compute the histogram */
+void aubio_hist_do(aubio_hist_t *s, fvec_t * input);
+/** compute the histogram ignoring null elements */
+void aubio_hist_do_notnull(aubio_hist_t *s, fvec_t * input);
+/** compute the mean of the histogram */
+smpl_t aubio_hist_mean(aubio_hist_t *s);
+/** weight the histogram */
+void aubio_hist_weight(aubio_hist_t *s);
+/** compute dynamic histogram for non-null elements */
+void aubio_hist_dyn_notnull (aubio_hist_t *s, fvec_t *input);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
--- /dev/null
+++ b/src/utils/scale.c
@@ -1,0 +1,79 @@
+/*
+   Copyright (C) 2003 Paul Brossier
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#include "aubio_priv.h"
+#include "fvec.h"
+#include "utils/scale.h"
+
+struct _aubio_scale_t {
+  smpl_t ilow;
+  smpl_t ihig;
+  smpl_t olow;
+  smpl_t ohig;
+
+  smpl_t scaler;
+  smpl_t irange;
+
+  /* not implemented yet : type in/out data
+     bool inint;
+     bool outint;
+     */
+};
+
+aubio_scale_t * new_aubio_scale (smpl_t ilow, smpl_t ihig, 
+    smpl_t olow, smpl_t ohig) {
+  aubio_scale_t * s = AUBIO_NEW(aubio_scale_t);
+  aubio_scale_set (s, ilow, ihig, olow, ohig);
+  return s;
+}
+
+void del_aubio_scale(aubio_scale_t *s) {
+  AUBIO_FREE(s);
+}
+
+void aubio_scale_set (aubio_scale_t *s, smpl_t ilow, smpl_t ihig,
+    smpl_t olow, smpl_t ohig) {
+  smpl_t inputrange = ihig - ilow;
+  smpl_t outputrange= ohig - olow;
+  s->ilow = ilow;
+  s->ihig = ihig;
+  s->olow = olow;
+  s->ohig = ohig;
+  if (inputrange == 0) {
+    s->scaler = 0.0f;
+  } else {
+    s->scaler = outputrange/inputrange;
+    if (inputrange < 0) {
+      inputrange = inputrange * -1.0f;
+    }
+  }
+}
+
+void aubio_scale_do (aubio_scale_t *s, fvec_t *input) 
+{
+  uint_t i, j;
+  for (i=0; i < input->channels; i++){
+    for (j=0;  j < input->length; j++){
+      input->data[i][j] -= s->ilow;
+      input->data[i][j] *= s->scaler;
+      input->data[i][j] += s->olow;
+    }
+  }
+}
+
--- /dev/null
+++ b/src/utils/scale.h
@@ -1,0 +1,78 @@
+/*
+   Copyright (C) 2003 Paul Brossier
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the Free Software
+   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+/** \file
+
+ Vector scaling function 
+ 
+ This object, inspired from the scale object in FTS, the jMax engine, scales
+ the values of a vector according to an affine function defined as follow:
+ 
+ \f$ y = (x - ilow)*(ohig-olow)/(ihig-ilow) + olow \f$ 
+ 
+*/
+#ifndef SCALE_H
+#define SCALE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** scale object */
+typedef struct _aubio_scale_t aubio_scale_t;
+
+/** create a scale object
+ 
+  \param flow lower value of output function
+  \param fhig higher value of output function
+  \param ilow lower value of input function
+  \param ihig higher value of output function
+
+*/
+aubio_scale_t * new_aubio_scale(smpl_t flow, smpl_t fhig,
+    smpl_t ilow, smpl_t ihig);
+/** delete a scale object 
+
+  \param s scale object as returned by new_aubio_scale
+
+*/
+void del_aubio_scale(aubio_scale_t *s);
+/** scale input vector
+
+  \param s scale object as returned by new_aubio_scale
+  \param input vector to scale
+
+*/
+void aubio_scale_do(aubio_scale_t *s, fvec_t * input);
+/** modify scale parameters after object creation
+
+  \param s scale object as returned by new_aubio_scale
+  \param olow lower value of output function
+  \param ohig higher value of output function
+  \param ilow lower value of input function
+  \param ihig higher value of output function
+
+*/
+void aubio_scale_set (aubio_scale_t *s, smpl_t ilow, smpl_t ihig,
+    smpl_t olow, smpl_t ohig);
+
+#ifdef __cplusplus
+}
+#endif 
+
+#endif
--- a/swig/aubio.i
+++ b/swig/aubio.i
@@ -154,6 +154,18 @@
 smpl_t aubio_zero_crossing_rate(fvec_t * input);
 smpl_t aubio_spectral_centroid(cvec_t * spectrum, smpl_t samplerate);
 
+/* filterbank */
+aubio_filterbank_t * new_aubio_filterbank(uint_t win_s, uint_t channels);
+aubio_filterbank_t * new_aubio_filterbank_mfcc(uint_t n_filters, uint_t win_s, uint_t samplerate, smpl_t freq_min, smpl_t freq_max);
+void del_aubio_filterbank(aubio_filterbank_t * fb);
+void aubio_filterbank_do(aubio_filterbank_t * fb, cvec_t * in, fvec_t *out);
+fvec_t * aubio_filterbank_getchannel(aubio_filterbank_t * fb, uint_t channel);
+
+/* mfcc */
+aubio_mfcc_t * new_aubio_mfcc (uint_t win_s, uint_t samplerate, uint_t n_filters, uint_t n_coefs, smpl_t lowfreq, smpl_t highfreq, uint_t channels);
+void del_aubio_mfcc(aubio_mfcc_t *mf);
+void aubio_mfcc_do(aubio_mfcc_t *mf, cvec_t *in, fvec_t *out);
+
 /* scale */
 extern aubio_scale_t * new_aubio_scale(smpl_t flow, smpl_t fhig, smpl_t ilow, smpl_t ihig	);
 extern void aubio_scale_set (aubio_scale_t *s, smpl_t ilow, smpl_t ihig, smpl_t olow, smpl_t ohig);
@@ -173,10 +185,12 @@
         aubio_onset_complex, 
         aubio_onset_phase, 
         aubio_onset_kl, 
-        aubio_onset_mkl 
+        aubio_onset_mkl, 
+        aubio_onset_specflux,
 } aubio_onsetdetection_type;
 aubio_onsetdetection_t * new_aubio_onsetdetection(aubio_onsetdetection_type type, uint_t size, uint_t channels);
 void aubio_onsetdetection(aubio_onsetdetection_t *o, cvec_t * fftgrain, fvec_t * onset);
+void del_aubio_onsetdetection(aubio_onsetdetection_t *o);
 
 /* should these still be exposed ? */
 void aubio_onsetdetection_energy  (aubio_onsetdetection_t *o, cvec_t * fftgrain, fvec_t * onset);
--- /dev/null
+++ b/tests/python/demo/plot_mfcc_filterbank.py
@@ -1,0 +1,43 @@
+#!/usr/bin/env python
+
+import pylab
+import numpy
+import sys
+
+from aubio.aubiowrapper import * 
+
+win_size = 2048 
+channels = 1
+n_filters = 40
+samplerate = 44100
+
+filterbank = new_aubio_filterbank_mfcc(n_filters, win_size, samplerate, 
+        0., samplerate) 
+
+
+mfcc_filters = []
+for channel in range(n_filters):
+  vec = aubio_filterbank_getchannel(filterbank,channel)
+  mfcc_filters.append([])
+  for index in range(win_size): 
+    mfcc_filters[channel].append(fvec_read_sample(vec,0,index))
+
+doLog=False
+if len(sys.argv)>1: 
+  if sys.argv[1]=='log':
+    doLog=True
+
+nmat= numpy.array(mfcc_filters)
+
+pylab.hold(True)
+
+n_filters=numpy.shape(nmat)[0]
+for i in range(n_filters):
+  if doLog==True:
+    pylab.semilogx(nmat[i,:])
+  else:
+    pylab.plot(nmat[i,:]) 
+
+pylab.hold(False)
+#pylab.savefig('test.png')
+pylab.show()
--- a/tests/python/examples/aubiopitch.py
+++ b/tests/python/examples/aubiopitch.py
@@ -52,7 +52,13 @@
     """ test aubiopitch with default parameters """
     self.getOutput()
     expected_output = open(os.path.join('examples','aubiopitch','yinfft'+'.'+os.path.basename(self.filename)+'.txt')).read()
+    lines = 0
     for line_out, line_exp in zip(self.output.split('\n'), expected_output.split('\n')):
-      assert line_out == line_exp, line_exp + " vs. " + line_out
+      try:
+        assert line_exp == line_out, line_exp + " vs. " + line_out + " at line " + str(lines)
+      except:
+        open(os.path.join('examples','aubiopitch','yinfft'+'.'+os.path.basename(self.filename)+'.txt.out'),'w').write(self.output)
+        raise
+      lines += 1
 
 if __name__ == '__main__': unittest.main()
--- /dev/null
+++ b/tests/python/filterbank.py
@@ -1,0 +1,110 @@
+
+import unittest
+from aubio.aubiowrapper import * 
+
+win_size = 2048 
+channels = 1
+n_filters = 40
+samplerate = 44100
+zerodb = -96.015602111816406
+
+class filterbank_test_case(unittest.TestCase):
+  
+  def setUp(self):
+      self.input_spectrum = new_cvec(win_size,channels)
+      self.output_banks = new_fvec(n_filters,channels)
+      self.filterbank = new_aubio_filterbank(n_filters,win_size)
+
+  def tearDown(self):
+      del_aubio_filterbank(self.filterbank)
+      del_cvec(self.input_spectrum)
+      del_fvec(self.output_banks)
+
+  def testzeroes(self):
+      """ check the output of the filterbank is -96 when input spectrum is 0 """
+      aubio_filterbank_do(self.filterbank,self.input_spectrum,
+        self.output_banks) 
+      for channel in range(channels):
+        for index in range(n_filters): 
+          self.assertEqual(fvec_read_sample(self.output_banks,channel,index), zerodb)
+
+  def testphase(self):
+      """ check the output of the filterbank is -96 when input phase is pi """
+      from math import pi
+      for channel in range(channels):
+        for index in range(win_size/2+1): 
+          cvec_write_phas(self.input_spectrum,pi,channel,index)
+      aubio_filterbank_do(self.filterbank,self.input_spectrum,
+        self.output_banks) 
+      for channel in range(channels):
+        for index in range(n_filters): 
+          self.assertEqual(fvec_read_sample(self.output_banks,channel,index), zerodb)
+
+  def testones(self):
+      """ check the output of the filterbank is -96 when input norm is 1
+          (the filterbank is currently set to 0).
+      """
+      for channel in range(channels):
+        for index in range(win_size/2+1): 
+          cvec_write_norm(self.input_spectrum,1.,channel,index)
+      aubio_filterbank_do(self.filterbank,self.input_spectrum,
+        self.output_banks) 
+      for channel in range(channels):
+        for index in range(n_filters): 
+          self.assertEqual(fvec_read_sample(self.output_banks,channel,index), zerodb)
+
+  def testmfcc_zeroes(self):
+      """ check the mfcc filterbank output is -96 when input is 0 """
+      self.filterbank = new_aubio_filterbank_mfcc(n_filters, win_size, samplerate, 0., samplerate) 
+      aubio_filterbank_do(self.filterbank,self.input_spectrum,
+        self.output_banks) 
+      for channel in range(channels):
+        for index in range(n_filters): 
+          self.assertEqual(fvec_read_sample(self.output_banks,channel,index), zerodb)
+
+  def testmfcc_phasepi(self):
+      """ check the mfcc filterbank output is -96 when input phase is pi """
+      self.filterbank = new_aubio_filterbank_mfcc(n_filters, win_size, samplerate, 0., samplerate) 
+      from math import pi
+      for channel in range(channels):
+        for index in range(win_size/2+1): 
+          cvec_write_phas(self.input_spectrum,pi,channel,index)
+      aubio_filterbank_do(self.filterbank,self.input_spectrum,
+        self.output_banks) 
+      for channel in range(channels):
+        for index in range(n_filters): 
+          self.assertEqual(fvec_read_sample(self.output_banks,channel,index), zerodb)
+
+  def testmfcc_ones(self):
+      """ check setting the input spectrum to 1 gives something between -3. and -4. """ 
+      self.filterbank = new_aubio_filterbank_mfcc(n_filters, win_size, samplerate, 0., samplerate) 
+      for channel in range(channels):
+        for index in range(win_size/2+1): 
+          cvec_write_norm(self.input_spectrum,1.,channel,index)
+      aubio_filterbank_do(self.filterbank,self.input_spectrum,
+        self.output_banks) 
+      for channel in range(channels):
+        for index in range(n_filters): 
+          val = fvec_read_sample(self.output_banks,channel,index)
+          self.failIf(val > -2.5 , val )
+          self.failIf(val < -4. , val )
+
+  def testmfcc_channels(self):
+      """ check the values of each filters in the mfcc filterbank """
+      self.filterbank = new_aubio_filterbank_mfcc(n_filters, win_size, samplerate, 
+        0., samplerate) 
+      filterbank_mfcc = [ [float(f) for f in line.strip().split()]
+        for line in open('filterbank_mfcc.txt').readlines()]
+      for channel in range(n_filters):
+        vec = aubio_filterbank_getchannel(self.filterbank,channel)
+        for index in range(win_size): 
+          self.assertAlmostEqual(fvec_read_sample(vec,0,index),
+            filterbank_mfcc[channel][index])
+      aubio_filterbank_do(self.filterbank,self.input_spectrum,
+        self.output_banks) 
+      for channel in range(channels):
+        for index in range(n_filters): 
+          self.assertEqual(fvec_read_sample(self.output_banks,channel,index), zerodb)
+
+if __name__ == '__main__':
+    unittest.main()
--- /dev/null
+++ b/tests/python/filterbank_mfcc.txt
@@ -1,0 +1,40 @@
+0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00391480280086 0.00875977333635 0.0163952577859 0.0115502867848 0.00670531624928 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 
\ No newline at end of file
+0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00344971497543 0.00829468760639 0.0168603453785 0.012015373446 0.00717040104792 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0
\ No newline at end of file
+0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00298462924547 0.00782960187644 0.0173254311085 0.012480459176 0.00763548677787 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0
\ No newline at end of file
+0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00251954281703 0.00736451381817 0.0177905131131 0.0129455411807 0.00810057017952 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 
\ No newline at end of file
+0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00205445685424 0.00689942669123 0.0182556081563 0.0134106380865 0.00856566801667 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 
\ No newline at end of file
+0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00158936588559 0.00643434049562 0.018720690161 0.0138757154346 0.00903074163944 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0
\ No newline at end of file
+0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0011242851615 0.00596925290301 0.019185770303 0.0143408020958 0.00949583481997 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.
\ No newline at end of file
+0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.000659193319734 0.00550416344777 0.0196508709341 0.0148059017956 0.0099609317258 0.00511596165597 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
\ No newline at end of file
+0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.000194101099623 0.0050390753895 0.00988405011594 0.015270980075 0.0104260062799 0.00558103155345 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 
\ No newline at end of file
+0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00457399012521 0.00941895786673 0.0157360639423 0.0108910975978 0.0060461293906 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0
\ No newline at end of file
+0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00410889973864 0.00895387027413 0.0162011645734 0.0113561954349 0.00651122489944 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 
\ No newline at end of file
+0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00365040963516 0.00850415788591 0.0166964270175 0.0118426792324 0.00698893005028 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 
\ No newline at end of file
+0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00309181469493 0.00780431134626 0.0165574271232 0.011844930239 0.00713243335485 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0
\ No newline at end of file
+0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00234632566571 0.00645341444761 0.0165819972754 0.0124749094248 0.00836782064289 0.004260731861 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0
\ No newline at end of file
+0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.000955496623646 0.00453495653346 0.00811441615224 0.0136452503502 0.0100657902658 0.00648633018136 0.00290687056258 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0
\ No newline at end of file
+0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00226927152835 0.0053888852708 0.00850849878043 0.0120274377987 0.00890782382339 0.00578820984811 0.00266859610565 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.
\ No newline at end of file
+0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00254482449964 0.00526366103441 0.00798249710351 0.0113824913278 0.00866365525872 0.00594481872395 0.00322598242201 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0
\ No newline at end of file
+0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00207272474654 0.00444227457047 0.00681182416156 0.0114351594821 0.00906560942531 0.00669605983421 0.00432651024312 0.00195696065202 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 
\ No newline at end of file
+0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00108301406726 0.00314815016463 0.00521328626201 0.00727842235938 0.00990318227559 0.00783804617822 0.00577291008085 0.00370777375065 0.00164263776969 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.
\ No newline at end of file
+0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00155596702825 0.00335579924285 0.00515563134104 0.00695546343923 0.00921266060323 0.0074128289707 0.00561299687251 0.0038131645415 0.00201333244331 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 
\ No newline at end of file
+0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00136930448934 0.00293791294098 0.00450652139261 0.00607512984425 0.00913039501756 0.00756178610027 0.0059931781143 0.00442456966266 0.0028559609782 0.00128735264298 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
\ No newline at end of file
+0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.000719257979654 0.00208635022864 0.00345344259404 0.00482053495944 0.006187627092 0.00810492038727 0.00673782778904 0.00537073519081 0.00400364305824 0.00263655069284 0.00126945832744 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0
\ No newline at end of file
+0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.000951705384068 0.00214316928759 0.0033346330747 0.00452609686181 0.00571756064892 0.00771015556529 0.00651869177818 0.00532722799107 0.00413576420397 0.00294430018403 0.00175283639692 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 
\ No newline at end of file
+0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.000689291337039 0.00172768754419 0.00276608369313 0.00380447972566 0.00484287599102 0.00776658486575 0.00672818906605 0.00568979280069 0.00465139653534 0.00361300050281 0.00257460423745 0.00153620820493 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.
\ No newline at end of file
+0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 8.34402962937e-05 0.000988437095657 0.00189343385864 0.00279843062162 0.00370342750102 0.00460842438042 0.00722766155377 0.00632266467437 0.00541766779497 0.00451267091557 0.00360767426901 0.00270267738961 0.00179768062662 0.000892683921847 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.
\ No newline at end of file
+0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 4.17259325332e-05 0.000830458768178 0.00161919160746 0.00240792450495 0.00319665716961 0.0039853900671 0.00477412296459 0.0063316822052 0.00554294977337 0.00475421687588 0.00396548397839 0.0031767510809 0.00238801818341 0.00159928551875 0.00081055262126 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0
\ No newline at end of file
+0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.000352376460796 0.00103978067636 0.00172718486283 0.00241458904929 0.00310199311934 0.00378939742222 0.00447680149227 0.00594003731385 0.00525263277814 0.00456522870809 0.00387782463804 0.00319042056799 0.00250301626511 0.00181561207864 0.00112820789218 0.000440803763922 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0
\ No newline at end of file
+0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.00026101374533 0.000860108411871 0.00145920307841 0.00205829786137 0.00265739252791 0.00325648719445 0.00385558186099 0.00445467652753 0.00531268632039 0.00471359165385 0.00411449698731 0.00351540208794 0.0029163074214 0.00231721275486 0.0017181179719 0.00111902330536 0.000519928638823 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.
\ No newline at end of file
+0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.000409302912885 0.000931431830395 0.00145356077701 0.00197568978183 0.00249781878665 0.00301994755864 0.00354207656346 0.00406420556828 0.00509135518223 0.00456922594458 0.00404709717259 0.00352496816777 0.00300283939578 0.00248071039096 0.00195858138613 0.00143645249773 0.000914323551115 0.000392194604501 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0
\ No newline at end of file
+0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.000234981271205 0.000690033368301 0.00114508543629 0.00160013756249 0.00205518980511 0.00251024169847 0.00296529382467 0.00342034595087 0.00387539807707 0.00470424303785 0.00424919091165 0.00379413878545 0.00333908665925 0.00288403453305 0.00242898240685 0.00197393028066 0.00151887827087 0.00106382614467 0.000608774076682 0.000153721965034 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
\ No newline at end of file
+0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.000233706232393 0.000630298629403 0.00102689105552 0.00142348336522 0.00182007579133 0.00221666810103 0.00261326064356 0.00300985295326 0.00340644526295 0.00380303780548 0.00423478381708 0.00383819150738 0.00344159896486 0.00304500665516 0.00264841434546 0.00225182180293 0.00185522949323 0.00145863706712 0.00106204475742 0.000665452331305 0.000268859963398 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.
\ No newline at end of file
+0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.000330323615344 0.000675965973642 0.00102160836104 0.00136725080665 0.00171289313585 0.00205853558145 0.00240417802706 0.00274982023984 0.00309546268545 0.00344110513106 0.00408726837486 0.00374162592925 0.00339598348364 0.00305034103803 0.00270469859242 0.00235905637965 0.00201341393404 0.00166777148843 0.00132212915923 0.000976486771833 0.000630844384432 0.000285201997031 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 
\ No newline at end of file
+0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.000170281520695 0.000471519655548 0.000772757804953 0.00107399595436 0.00137523410376 0.00167647225317 0.00197771028616 0.00227894843556 0.00258018658496 0.00288142473437 0.00318266288377 0.00386695167981 0.00356571353041 0.003264475381 0.0029632372316 0.00266199908219 0.00236076093279 0.00205952278338 0.00175828463398 0.00145704648457 0.00115580833517 0.000854570243973 0.000553332094569 0.000252093974268 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 
\ No newline at end of file
+0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 9.5618168416e-05 0.000358156627044 0.000620695063844 0.000883233500645 0.00114577193744 0.00140831037425 0.00167084881105 0.00193338724785 0.00219592568465 0.00245846412145 0.00272100255825 0.00298354099505 0.00361637189053 0.00335383345373 0.00309129501693 0.00282875658013 0.00256621814333 0.00230367970653 0.00204114126973 0.00177860271651 0.00151606427971 0.00125352584291 0.000990987406112 0.000728448911104 0.000465910474304 0.000203372037504 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.
\ No newline at end of file
+0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6.74498078297e-05 0.000296260288451 0.000525070820004 0.000753881293349 0.000982691766694 0.00121150224004 0.0014403128298 0.00166912330315 0.00189793377649 0.00212674424984 0.0023555548396 0.00258436519653 0.00281317578629 0.00336451036856 0.00313570001163 0.00290688942187 0.00267807906494 0.00244926847517 0.00222045788541 0.00199164752848 0.00176283705514 0.00153402646538 0.00130521599203 0.00107640551869 0.000847595045343 0.00061878451379 0.000389974040445 0.000161163523444 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0
\ No newline at end of file
+0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5.88704824622e-05 0.000258285814198 0.000457701156847 0.0006571165286 0.000856531842146 0.00105594715569 0.00125536252744 0.0014547778992 0.00165419315454 0.00185360852629 0.00205302378163 0.0022524392698 0.00245185452513 0.0026512700133 0.00313015608117 0.00293074082583 0.00273132533766 0.00253191008233 0.00233249482699 0.00213307933882 0.00193366408348 0.00173424871173 0.00153483333997 0.00133541808464 0.00113600271288 0.000936587399337 0.000737172027584 0.000537756714039 0.000338341371389 0.000138926014188 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 
\ No newline at end of file
+0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 5.20130161021e-05 0.000225810101256 0.000399607204599 0.000573404307943 0.000747201382183 0.000920998456422 0.00109479553066 0.00126859266311 0.00144238979556 0.00161618681159 0.00178998394404 0.00196378096007 0.00213757809252 0.00231137522496 0.00248517235741 0.0029244965408 0.00275069964118 0.00257690250874 0.00240310537629 0.00222930824384 0.00205551111139 0.00188171409536 0.00170791696291 0.00153411994688 0.00136032281443 0.0011865257984 0.00101272866596 0.000838931533508 0.000665134459268 0.000491337385029 0.000317540281685 0.000143743192893 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.
\ No newline at end of file
+0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.57618519047e-05 0.000187231096788 0.000338700338034 0.000490169564728 0.000641638820525 0.000793108018115 0.000944577273913 0.00109604652971 0.00124751578551 0.00139898504131 0.00155045418069 0.00170192343649 0.00185339269228 0.00200486183167 0.00215633120388 0.00230780034326 0.00275321607478 0.0026017469354 0.00245027756318 0.0022988084238 0.00214733928442 0.00199586991221 0.00184440077282 0.00169293151703 0.00154146226123 0.00138999300543 0.00123852374963 0.00108705449384 0.000935585296247 0.00078411604045 0.00063264684286 0.000481177587062 0.000329708331265 0.000178239104571 2.67698687821e-05 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.
\ No newline at end of file
+0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 3.91839375879e-06 0.000135928450618 0.000267938507022 0.000399948563427 0.000531958590727 0.000663968676236 0.000795978703536 0.000927988789044 0.00105999887455 0.00119200884365 0.00132401892915 0.00145602901466 0.00158803898375 0.00172004906926 0.00185205915477 0.00198406912386 0.00211607920937 0.00224808929488 0.00248606060632 0.00235405052081 0.0022220404353 0.00209003034979 0.00195802049711 0.00182601041161 0.0016940003261 0.00156199024059 0.00142998015508 0.00129797018599 0.00116596010048 0.00103395001497 0.000901939987671 0.000769929902162 0.000637919874862 0.000505909847561 0.000373899762053 0.000241889720201 0.000109879663796 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0
\ No newline at end of file
+0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 6.88766886014e-05 0.000183927710168 0.000298978731735 0.000414029753301 0.000529080803972 0.000644131796435 0.000759182847105 0.000874233839568 0.000989284832031 0.0011043358827 0.00121938693337 0.00133443798404 0.00144948903471 0.00156453996897 0.00167959101964 0.00179464207031 0.00190969312098 0.00202474417165 0.0021397951059 0.00228799972683 0.00217294855975 0.00205789762549 0.00194284657482 0.00182779552415 0.00171274447348 0.00159769342281 0.00148264248855 0.00136759143788 0.00125254038721 0.00113748933654 0.00102243840229 0.000907387351617 0.000792336300947 0.000677285308484 0.000562234257814 0.000447183236247 0.00033213221468 0.000217081193114 0.000102030171547 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.
\ No newline at end of file
--- a/tests/src/test-tempo.c
+++ b/tests/src/test-tempo.c
@@ -18,7 +18,7 @@
             fprintf(stdout,"%f\n",curtempo);
             return 1;
           }
-          curtempoconf = aubio_beattracking_get_confidence(o);
+          curtempoconf = aubio_tempo_get_confidence(o);
           if (curtempoconf != 0.) {
             fprintf(stdout,"%f\n",curtempo);
             return 1;