123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- /**
- \brief minimal.cpp is a minimal reference simulation to show how to use the objsimlibrary
- \author Frank Michler
- */
- #include "sys.hpp"
- #include "debug.hpp"
- #include <iostream>
- #include <math.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <objsimlibrary.hpp>
- #include <anyoption.h>
- #include <valarray>
- #include <time.h>
- ////////////////////
- int main(int argc, char** argv)
- {
- std::string SimName("singleneuron");
- cout << testfunction();
- clock_t cpu_start, cpu_end;
- double cpu_time_used;
- ////////////////Begin//ProcessCommandLineArguments//////////////
- cpu_start = clock();
- // define some directories
- std::string HomeDir(getenv("HOME"));
- std::string BaseDir(HomeDir+"/prog/objsim");
- std::string ConfigDir(".");
- std::string ConfigFile(ConfigDir+"/settings_"+SimName+".cfg");
- // 'a' = dummy; do not use -a !! (setOption without second para doesn't work!!)
- /**
- AnyOptionWrapper takes care of simulation parameters
- 1. names of variables and default parameters are defined.
- 2. if the config file "settings_<SimName>" has an entry with the same name as one of the defined variables,
- the variable is set to the value in the config file.
- 3. if a command line parameter with the same name as one of the variables is given, the corresponding variable
- is set to the command line value value.
- As an example look at "AnyWrapParaInt(InputNx, 10);"
- AnyWrapParaInt is a macro for defining an integer parameter
- InputNx is used as the name of the variable, as the identifyer string in the config file settings_minimal.cfg
- and as the identifyer for the command line argument.
- The default value for InputNx is 10. This value is used when no config file entry and no command line argument
- with this name is given. If the config file contains the line "InputNx : 8", InputNx is set to 8.
- If furthermore, the executable is called with InputNx as command line parameter:
- "simminimal --InputNx 12", InputNx is set to 12.
- If command line option MakeDefaultConfig is set (it is a flag, so you don't give a value):
- "simminimal --MakeDefaultConfig --InputNx 12"
- then the values of all parameters will be written in the config file settings_minimal.cfg.
- (fm) 10.11.2008
- */
- AnyOptionWrapper *myAnyWrap = new AnyOptionWrapper(argc, argv, ConfigFile.c_str());
- CSimStandardOptions StdOpt(myAnyWrap);
- AnyWrapParaStringCmdOnly(SimControlName, "");
- AnyWrapParaFloat(WeightStrength, 0.5);
- AnyWrapParaFloat(Connectivity, 0.1);
- AnyWrapParaInt(InputNx, 10);
- AnyWrapParaInt(InputNy, 10);
- myAnyWrap->process();
- ////////////////End//ProcessCommandLineArguments//////////////
- ////////////////Begin//InitializeGlobalSimLoop
- SimLoop* MainSimLoop = InitLibCSim();
- MainSimLoop->SetDataDirectory(StdOpt.DataDirectory.c_str());
- float dt=MainSimLoop->GetDeltaT(); // milli sec
- cout << "int main(): dt = " << dt << "\n";
- myAnyWrap->Save((MainSimLoop->GetDataDirectory() + "/backup_settings").c_str());
- delete myAnyWrap;
- system(("cp progversion.txt "+MainSimLoop->GetDataDirectory()).c_str());
- ////////////////End//InitializeGlobalSimLoop
-
- int i, j, k, sec, t;
-
- ////////////////End//ProcessCommandLineArguments//////////////
- //////////////////////////////////////////////
-
- //////// Setup Neuron Layer
- DecoLifLayer* MyLayer = new DecoLifLayer(100, DecoParaExcitatory);
- MyLayer->SetName("MyLayer");
- MyLayer->SetNmdaAmpaRatio(0.3);
- MyLayer->StartBinRec(1, 0);
- // MyLayer->TuneNoiseAmplitude(3);
- MyLayer->SetNoiseAmplitude(0.05294);
- MainSimLoop->AddSimElement(MyLayer);
- ////////////////////////////////////
- int trial, step;
- sec =0;
-
- int TotalTime=0;
- MainSimLoop->Hallo();
- MainSimLoop->SaveSimInfo();
- cout << "StdOpt.NTrials" << StdOpt.NTrials << "StdOpt.NSteps" << StdOpt.NSteps << "\n";
- fflush(stdout);
- for (trial=0; trial<StdOpt.NTrials; ++trial)
- {
- cout << "TrialNr=" << trial << "\n";fflush(stdout);
- for(step=0;step<StdOpt.NSteps;++step)
- {
- cpu_end=clock();
- cpu_time_used = ((double) (cpu_end - cpu_start)) / CLOCKS_PER_SEC;
- cout << "T" << trial << " Step=" << step
- << " sec= " << dt*(sec++) << " cputime="
- << cpu_time_used << " sec \n "; fflush(stdout);
- for (t=0;t<1000;t++) // simulation of 1 sec
- {
- MainSimLoop->proceede(1000*step+t);
- }
- MainSimLoop->prepare(step);
- }
- }
- cpu_end=clock();
- cpu_time_used = ((double) (cpu_end - cpu_start)) / CLOCKS_PER_SEC;
- cout << "\n\n***********CpuTimeUsed= " << cpu_time_used << " seconds \n";
- }
|