#ifndef _weight_sigpi_H
#define _weight_sigpi_H


typedef struct CONN_SIGPI {

 DOUBLE val;            /**connection strength**/

 int    a1, b1;         /**index of first prae-synaptic cell      **/
 int    n1;             /**n = a * d_b + b; for faster computation**/
 int    a2, b2;         /**    ~    second       ~                **/
 int    n2;             /**                                       **/

 CONN_SIGPI   * next;         /**next connection**/

} CONN_SIGPI;


typedef struct ALL_WEIGHTS_SIGPI {

 int areas;                    /**number of areas = x->areas**/
 int *d_a, *d_b, *d_n;         /**area sizes, d_n = d_a * d_b**/

 CONN_SIGPI *****all_conn;     /**all_conn[area][ct_n][inarea1][inarea2](is a conn * to the (first->admin) connection)**/

} ALL_WEIGHTS_SIGPI;



DOUBLE weight_sigpi_alloc_full     (PARAMS *g, AREA *A, COMMAND *cmd, int, int);
DOUBLE weight_sigpi_feed           (PARAMS *g, AREA *A, COMMAND *cmd, int ct_t, int ct_n);
DOUBLE weight_sigpi_euclid         (PARAMS *g, AREA *A, COMMAND *cmd, int ct_t, int ct_n);
DOUBLE weight_sigpi_kohonen        (PARAMS *g, AREA *A, COMMAND *cmd, int ct_t, int ct_n);
DOUBLE weight_sigpi_histogram      (PARAMS *g, AREA *A, COMMAND *cmd, int, int);

DOUBLE weight_sigpi_hebb           (PARAMS *g, AREA *A, COMMAND *cmd, int ct_t, int ct_n);

/*
DOUBLE weight_sigpi_alloc_topo     (PARAMS *g, AREA *A, COMMAND *cmd, int, int);
DOUBLE weight_sigpi_alloc_invert   (PARAMS *g, AREA *A, COMMAND *cmd, int, int);
DOUBLE WEIGHT_SIGPI_PUSH           (PARAMS *g, AREA *A, COMMAND *cmd, int ct_t, int ct_n);
DOUBLE weight_sigpi_AXON_total     (PARAMS *g, AREA *A, COMMAND *cmd, int ct_t, int dummy);
DOUBLE weight_sigpi_AXON_total_pos (PARAMS *g, AREA *A, COMMAND *cmd, int ct_t, int dummy);
DOUBLE weight_sigpi_hebb_turn      (PARAMS *g, AREA *A, COMMAND *cmd, int ct_t, int ct_n);
DOUBLE weight_sigpi_decay          (PARAMS *g, AREA *A, COMMAND *cmd, int ct_t, int ct_n);
DOUBLE weight_sigpi_decay_quad     (PARAMS *g, AREA *A, COMMAND *cmd, int ct_t, int ct_n);
DOUBLE weight_sigpi_decay_post     (PARAMS *g, AREA *A, COMMAND *cmd, int ct_t, int ct_n);
DOUBLE weight_sigpi_decay_pre      (PARAMS *g, AREA *A, COMMAND *cmd, int ct_t, int ct_n);
DOUBLE weight_sigpi_normalize      (PARAMS *g, AREA *A, COMMAND *cmd, int ct_t, int ct_n);
DOUBLE weight_sigpi_rectify        (PARAMS *g, AREA *A, COMMAND *cmd, int ct_t, int ct_n);
DOUBLE weight_sigpi_cutself        (PARAMS *g, AREA *A, COMMAND *cmd, int ct_t, int ct_n);
*/
DOUBLE weight_sigpi_cutsmall       (PARAMS *g, AREA *A, COMMAND *cmd, int ct_t, int ct_n);
/*
DOUBLE weight_sigpi_sprout         (PARAMS *g, AREA *A, COMMAND *cmd, int ct_t, int ct_n);
DOUBLE weight_sigpi_export         (PARAMS *g, AREA *A, COMMAND *cmd, int, int);
DOUBLE weight_sigpi_export_col     (PARAMS *g, AREA *A, COMMAND *cmd, int, int);
DOUBLE weight_sigpi_export_gnu     (PARAMS *g, AREA *A, COMMAND *cmd, int, int);
*/

DOUBLE weight_sigpi_export         (PARAMS *g, AREA *A, COMMAND *cmd, int, int);
DOUBLE weight_sigpi_alloc_import   (PARAMS *g, AREA *A, COMMAND *cmd, int, int);
DOUBLE weight_sigpi_gnuplot_cm     (PARAMS *g, AREA *A, COMMAND *cmd, int, int);

#endif