[ return ]

column.h



/*
 * file: column.h
 *
 * [DEFINE DESCRIPTION = Neural column class]
 *
 *  Name                Date        Description
 *  --------------      --------    -------------------------------------
 *  Andrew H. Fagg      09/05/94    Original
 *
 *
 */

#ifndef COLUMN_CLASS
#define COLUMN_CLASS
#include "gate.h"

class column_parms_class
{
 public:
  nsl_data* collector_kx1;
  nsl_data* collector_kx2;
  nsl_data* collector_ky1;
  nsl_data* collector_ky2;
  nsl_data* collector_ky3;

  nsl_data* sensory_kx1;	/* NSLramp */
  nsl_data* sensory_kx2;	/* used as a gain - which is opposite */
				/*  from the standard NSL interpretation */
				/*  of kx2! */
  nsl_data* sensory_ky1;
  nsl_data* sensory_ky2;

  nsl_data* output_kx1;
  nsl_data* output_kx2;
  nsl_data* output_ky1;
  nsl_data* output_ky2;
  nsl_data* minimum_output_mem;

  nsl_data* tau;		/* Output unit tau. */

  nsl_data* pet_flag;
};		

class column_class
{
  int num_gates;		/* Gate inputs */
  gate_class** gates;

				/* Column states */
  nsl_data collector_mem;
  nsl_data collector;
  nsl_data sensory_mem;
  nsl_data sensory;
  nsl_data output_mem;
  nsl_data output;

  nsl_data pet_pos;		/* PET components */
  nsl_data pet_neg;

				/* Sensor inputs */
  connector_class* sensory_connector;
  nsl_vector* sensory_weights;

				/* Parameters */
  column_parms_class* parms;
				/* Object name */
  name_class* name;
  
 public:
				/* Methods */
  column_class(char*, name_class* , short, column_parms_class*, int,
	       short, gate_parms_class*);
  ~column_class();
  void init_weights();        //OVERLOAD CALL: init_weights: column.c(column_class), gate.c(gate_class), layer.c(layer_class)
  void clear_activities();        //OVERLOAD CALL: clear_activities: column.c(column_class), gate.c(gate_class), layer.c(layer_class)
  void forward_mem();        //OVERLOAD CALL: forward_mem: column.c(column_class), layer.c(layer_class)
  void forward_act();        //OVERLOAD CALL: forward_act: column.c(column_class), layer.c(layer_class)
  name_class* get_name();        //OVERLOAD CALL: get_name: column.c(column_class), connector.c(connector_class), gate.c(gate_class), layer.c(layer_class), reverse_connector.c(reverse_connector_input_class), reverse_connector.c(reverse_connector_output_class), sensor.c(sensor_class)
  nsl_data* get_collector();        //OVERLOAD CALL: get_collector: layer.c(layer_class), column.c(column_class)
  nsl_data* get_collector_mem();        //OVERLOAD CALL: get_collector_mem: column.c(column_class), layer.c(layer_class)
  nsl_data* get_sensory();        //OVERLOAD CALL: get_sensory: layer.c(layer_class), column.c(column_class)
  nsl_data* get_sensory_mem();        //OVERLOAD CALL: get_sensory_mem: column.c(column_class), layer.c(layer_class)
  nsl_data* get_output();        //OVERLOAD CALL: get_output: layer.c(layer_class), column.c(column_class)
  nsl_data* get_output_mem();        //OVERLOAD CALL: get_output_mem: column.c(column_class), layer.c(layer_class)
  nsl_vector* get_sensory_weights();
  connector_class* get_sensory_connector();
  connector_class* get_gate_connector(int, int);        //OVERLOAD CALL: get_gate_connector: column.c(column_class), layer.c(layer_class)
  nsl_data* get_column_output(int);
  
  void report_column(int, int);        //OVERLOAD CALL: report_column: column.c(column_class), layer.c(layer_class)
  void report_gate(int, int);        //OVERLOAD CALL: report_gate: column.c(column_class), gate.c(gate_class), layer.c(layer_class)
  int stuff(ifstream&);        //OVERLOAD CALL: stuff: gate.c(gate_class), layer.c(layer_class), column.c(column_class), connector.c(connector_class)

  nsl_data* get_pet_pos();        //OVERLOAD CALL: get_pet_pos: column.c(column_class), gate.c(gate_class)
  nsl_data* get_pet_neg();        //OVERLOAD CALL: get_pet_neg: column.c(column_class), gate.c(gate_class)

};


#endif
		


[ return ]