// // C++ Implementation: layerfactory // // Description: // // // Author: Frank Michler,,, , (C) 2010 // // Copyright: See COPYING file that comes with this distribution // // #include "sys.hpp" // for libcwd #include "debug.hpp" // for libcwd #include "layer.hpp" #include "layer/iaf_psc_exp.h" #include "layerfactory.hpp" layer* createDecoLifLayer(int Size, NeuronPhysioType NPType); layer* createIzhikevich8Layer(int Size, NeuronPhysioType NPType); layer* createIzhikevich8Layer_Default(int Size); layer* createIzhikevich8Layer_Integrator(int Size); layer* createIzhikevich9Layer(int Size, NeuronPhysioType NPType); layer* createIzhikevich9Layer_Default(int Size); layer* createIzhikevich9Layer_Integrator(int Size); layer* createLayer_iaf_psc_exp(int size); layer* createLayer(int Size, NeuronModelType MType, NeuronPhysioType NPType) { layer* RetLayer=NULL; switch (MType) { case NMType_DecoLif: RetLayer = createDecoLifLayer(Size, NPType ); break; case NMType_Izhikevich8: RetLayer = createIzhikevich8Layer(Size, NPType); break; case NMType_iaf_psc_exp: RetLayer = createLayer_iaf_psc_exp(Size); break; default: RetLayer=NULL; break; } return RetLayer; } layer* createDecoLifLayer(int Size, NeuronPhysioType NPType) { layer* RetLayer=NULL; switch (NPType) { case NPType_Excitatory: { float NmdaAmpaRatio=0.3; DecoLifLayer* tmplayer = new DecoLifLayer(Size, DecoParaExcitatory); const float DECO_LIF_NOISE_3_HZ = 0.05294; // Noise: 3 Hz Background Firing Rate tmplayer->SetNoiseAmplitude(DECO_LIF_NOISE_3_HZ); tmplayer->SetNmdaAmpaRatio(NmdaAmpaRatio); RetLayer = tmplayer; } break; default: RetLayer=NULL; } return RetLayer; } layer* createIzhikevich8Layer(int Size, NeuronPhysioType NPType) { layer* RetLayer=NULL; switch (NPType) { case NPType_Integrator: RetLayer = createIzhikevich8Layer_Integrator(Size); break; case NPType_Excitatory: default: RetLayer = createIzhikevich8Layer_Default(Size); break; } return RetLayer; } layer* createIzhikevich8Layer_Default(int Size) { const float NmdaAmpaRatio=0.3; izh8layer* tmplayer = new izh8layer(Size, IzhParaRegularSpiking); tmplayer->SetTauGaba(13.5, 100); tmplayer->SetTauAmpa(0.5, 2.4); tmplayer->SetTauNmda(10, 100); tmplayer->SetNoiseAmplitude(0.259545); tmplayer->SetBalancedInhibition(1.58025); tmplayer->SetNmdaAmpaRatio(NmdaAmpaRatio); return tmplayer; } layer* createIzhikevich8Layer_Integrator(int Size) { const float NmdaAmpaRatio=0.3; izh8layer* tmplayer = new izh8layer(Size, IzhParaIntegrator2); tmplayer->SetTauGaba(13.5, 100); tmplayer->SetTauAmpa(0.5, 2.4); tmplayer->SetTauNmda(10, 100); tmplayer->SetNoiseAmplitude(0.172989); tmplayer->SetBalancedInhibition(1.48085); tmplayer->SetNmdaAmpaRatio(NmdaAmpaRatio); return tmplayer; } layer* createIzhikevich9Layer(int Size, NeuronPhysioType NPType) { layer* RetLayer=NULL; switch (NPType) { case NPType_Integrator: RetLayer = createIzhikevich9Layer_Integrator(Size); break; case NPType_Excitatory: default: RetLayer = createIzhikevich9Layer_Default(Size); break; } return RetLayer; } /** never used */ layer* createIzhikevich9Layer_Default(int Size) { const float NmdaAmpaRatio=0.3; izh9layer* tmplayer = new izh9layer(Size, IzhParaRegularSpiking); tmplayer->SetTauAmpa(0.5, 2.4); tmplayer->SetTauNmda(10, 100); tmplayer->SetNoiseAmplitude(0.259545); tmplayer->SetBalancedInhibition(1.58025); tmplayer->SetNmdaAmpaRatio(NmdaAmpaRatio); return tmplayer; } layer* createIzhikevich9Layer_Integrator(int Size) { float NmdaAmpaRatio=0.3; izh9layer* tmplayer = new izh9layer(Size, IzhParaIntegrator2); tmplayer->SetTauAmpa(0.5, 2.4); tmplayer->SetTauNmda(10, 100); tmplayer->SetNoiseAmplitude(0.172989); tmplayer->SetBalancedInhibition(2.07651); tmplayer->SetNmdaAmpaRatio(NmdaAmpaRatio); return tmplayer; } layer* createLayer_iaf_psc_exp(int size) { iaf_psc_exp* tmplayer = new iaf_psc_exp(size); double Tau = 20.; double C = 1.0; double t_ref = 2.0; double U0 = 0; double I_e = 0.; double Theta = 20; // V_th double V_reset = 10; double tau_ex = 2.0; double tau_in = 2.0; tmplayer->P_.set(Tau, C, t_ref, U0, I_e, Theta, V_reset, tau_ex, tau_in); tmplayer->calibrate(); return tmplayer; }