#ifndef _MY_ANN_LOCAL_H
#define _MY_ANN_LOCAL_H


/** libfann */
#include "floatfann.h"

/** project wide definitions */
#include "local.h"


/** holds the global configuration of ANN and related stuff in eatr.c and co. */
struct s_net {
	/** 1 means full connected, 0.5 half connected... */
	float connection_rate;
	/** 0.7 is a good choice */
	float learning_rate;
	/** 3 means, one input, one hidden, one output, 3 is a good choice */
	unsigned int num_layers;
	/** equivalent to (Channels * TAPs) in EEG-data, should be 64*20=1280 */
	unsigned int num_input;
	/** should be equivalent to count of channels */
	unsigned int num_neurons_hidden;
	/**  should be 1, because it signals that was an artefact or not */
	unsigned int num_output;
	/** abort the training if learning error is less desired error  */
	float desired_error;
	/** abort if max_steps reached, it doesnot mean epoch-learning, its pattern-learning! */
	unsigned int max_steps;
	/** every "epochs_between_report" epoche generate a report about state and statistics */
	unsigned int steps_between_reports;
	/** net-file to load network from */
	char * net_infile;
	/** general prefix for files to be written */
	char * outfilenames;
	/** inputfile name */
	char * infilename;
	char * trainfilename;
	char * testfilename;
	/** net-file to store network to */
	char * net_outfile;
	/** net-file to store mean square learning error to */
	char * net_mqlefile;
	/** net-file to store mean square generalization error to */
	char * net_mqgefile;
	/** net-file to store network config to (machine parseable) */
	char * net_cfgfile;
	/** data */
	struct fann_train_data * train_data;
	struct fann_train_data * test_data;
	int data_len;
	int data_cutpos;
	unsigned short int verbose;
	unsigned short int adapt_learnrate;
	/** after which steps the network should be periodically saved */
	unsigned int net_writeperiod;
} net; /* globally holds parameters of network */

#endif

