#ifndef __ORIENT_H__
#define __ORIENT_H__
#include<fstream.h>
#include<iostream.h>
#include<stdlib.h>
#include<stdio.h>
#include<math.h>
#include<assert.h>
#include<string.h>
struct CortexNeuron{
double ** OnWeights ;
double ** OfWeights ;
};
struct WtChange{
double OnCh;
double OfCh;
};
struct WeightChange{
WtChange ** wd;
WtChange ** wd1;
WtChange ** wd2;
};
class Orient
{
protected :
CortexNeuron ** cortex ;
WeightChange ** wch ;
int rows, cols ;
int ab ;
double rC ;
double rI ;
double Smax ;
double lamda ;
int it;
char outfilename[35];
char oflnm[50];
public :
Orient();
void LoadParams(char * = NULL);
void LoadStatus(char * = NULL);
void Start();
protected :
void assignspace ();
void assignInitialWeights();
double A (double distance);
double I (double distance);
double G(double distance, double sigma);
double Cx_x (double distance);
double Cx_y (double distance);
void computeUWtChange();
void uOnWtChange(int xx, int xy, int ax, int ay);
void uOfWtChange(int xx, int xy, int ax, int ay);
void computeCWtChange();
void adjustsynapse();
void threestep(int i, int j, int k, int l);
int cutoff (int i, int j, int k, int l);
void renormalize(int i, int j);
double perc();
double wrapdis(int xx, int xy, int yx, int yy);
double cordis(int iax, int iay, int ik, int il);
void store();
void storediff();
void saveStatus();
int wrapx(int);
int wrapy(int);
};
#endif