/* main code for running the discriminator model
should be compiled with discrimnet.cpp and structure.cpp */
#include "MersenneTwister.h"
#include "dnet.h"
MTRand rand1;
MTRand rand2;
int seed1 = 1;
int seed2 = 1;
int main(int argc, char **argv){
int numin;
if(argc > 1) //if there IS an argument
numin = atoi(argv[1]);
cout << " numin " << numin << endl;
if(numin >= 10000) { //code for 2 arguments
seed1 = atoi(argv[1])/10000; // first digits
numin = atoi(argv[1]) - 10000*seed1; // last 4 digits
}
seed2 = seed1+100;
rand1.seed(seed1);
rand2.seed(seed2);
cout << " numin " << numin << endl;
int istrength1 = numin/2;
cout << " istrength 1 " << istrength1 << endl;
int iud = numin - 2*istrength1;
cout << " iud " << iud << endl;
/* The following lines set f2 in relation to f1*/
int istrength2 = istrength1;
if ( iud > 0 )
istrength2 += 8;
else
istrength2 -= 8;
cout << " seed1 " << seed1 << " seed2 " << seed2 <<
" cue 1 " << istrength1 << " cue 2 " << istrength2 << endl;
double a = rand1();
double b = rand2();
cout << " rand1 " << a << " rand2 " << b << endl;
NET net1;
cout << " Main" << endl;
/* Input single cell and simulation parameters */
net1.Datin(istrength1,istrength2);
cout << " done Datin " << endl;
/* Input cpnnection strengths */
net1.WDatin();
/* Initialize all cells */
net1.Init();
/* Run the trial*/
net1.GatherInputs();
}
string createString(string prefix, int num, int digits){
string filenumber = "0123456789";
string RUNNING;
int thousands;
int hundreds;
int tens;
int units;
string U = "";
string T = "";
string H = "";
string TH = "";
switch(digits){
case 4:
thousands = num/1000;
TH = filenumber.at(thousands);
case 3:
cout << " 3 " << endl;
hundreds = (num%1000)/100;
H = filenumber.at(hundreds);
case 2:
tens = (num%100)/10;
T = filenumber.at(tens);
case 1:
units = num%10;
U = filenumber.at(units);
break;
default:
TH = "0";
H = "0";
T="0";
U = "0";
break;
}
cout << prefix+TH+H+T+U << endl;
return prefix+TH+H+T+U;
}
/* Ran_Gaussian requires 2 random number calls, which it
uses to produce a Gaussian random variable with mean of
zero and s.d. of 1 */
double Ran_Gaussian(){
static int jj=0;
static double kk;
double root_factor;
double sum_square;
double ran_num_1;
double ran_num_2;
if (jj == 0) {
do {
ran_num_1 = 2.0*rand2()-1.0;
ran_num_2 = 2.0*rand2()-1.0;
sum_square = ran_num_1*ran_num_1+ran_num_2*ran_num_2;
} while (sum_square >= 1.0 || sum_square == 0);
root_factor = sqrt(-2.0*log(sum_square)/sum_square);
kk=ran_num_1*root_factor;
jj=1;
return ran_num_2*root_factor;
}
else {
jj = 0;
return kk;
}
}