// // C++ Implementation: simmod_maplayer // // 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 #include "simloop.hpp" #include "simmodules/simmodules.hpp" #include "anyoptwrap/anyoptionwrapper.hpp" #include "anyoptwrap/anyoptionwrap_defs.hpp" #include "layerfactory.hpp" #include "simmod_maplayer.hpp" #include "vconnection.hpp" SimMod_MapLayer::SimMod_MapLayer(AnyOptionWrapper* _opt): SimModule(_opt), mLocalInh(_opt), mMapLayer(0), mInhLayer(0), mConLateralExcitation(0) { mOptionsPrefix="MapLayer_"; } SimMod_MapLayer::~SimMod_MapLayer() { // SimElements are deleted by SimLoop, so we don't need to delete them here. } void SimMod_MapLayer::SetCmdLineOptions() { myAnyWrap->setOption( (mOptionsPrefix + "Nx").c_str(),'a', &mMapNx, 100); myAnyWrap->setOption( (mOptionsPrefix + "Ny").c_str(),'a', &mMapNy, 100); myAnyWrap->setOption( (mOptionsPrefix + "LatExStrength").c_str(),'a', &mLatExStrength, 0.); myAnyWrap->setOption( (mOptionsPrefix + "LatExRange").c_str(),'a', &mLatExRange, 0.); myAnyWrap->setOption( (mOptionsPrefix + "LatExTauRec").c_str(),'a',&mLatExTauRec, 300.); myAnyWrap->setOption( (mOptionsPrefix + "LatExU_Se").c_str(),'a',&mLatExUSe, 0.3); myAnyWrap->setOption( (mOptionsPrefix + "LatExMinDelay").c_str(),'a',&mLatExMinDelay, 0.); myAnyWrap->setOption( (mOptionsPrefix + "LatExMaxDelay").c_str(),'a',&mLatExMaxDelay, 0.); mLocalInh.SetCmdLineOptions(); } layer* SimMod_MapLayer::Setup(SimLoop* _MainSimLoop) { MainSimLoop = _MainSimLoop; mMapLayer = createLayer(mMapNx*mMapNy, NMType_DecoLif, NPType_Excitatory); mMapLayer->SetName("RepresentationLayer"); mMapLayer->SetupPositions(mMapNx,mMapNy,true); mMapLayer->SetRandomInputStrength(0); MainSimLoop->AddSimElement(mMapLayer); mInhLayer = mLocalInh.Setup(MainSimLoop, mMapLayer); setupLateralExcitation(); return mMapLayer; } void SimMod_MapLayer::setupLateralExcitation() { Dout(dc::smod, __FUNCTION__); if (mLatExStrength > 0) { mConLateralExcitation = new VecDepressiveConnection(mMapLayer, mMapLayer, csimInputChannel_NMDA_AMPA, mLatExTauRec, mLatExUSe); mConLateralExcitation->SetName("conIT_ExEx"); //! @todo implement loading connection from weight file mLatExMaxDelay=1; mLatExMinDelay=0; mConLateralExcitation->ConnectGaussian(mLatExRange, mLatExStrength, mLatExMaxDelay, mLatExMinDelay, true); mConLateralExcitation->Save(); MainSimLoop->AddSimElement(mConLateralExcitation); } } VecConnection* SimMod_MapLayer::ConLateralExcitation() { return dynamic_cast(mConLateralExcitation); } VecConnection* SimMod_MapLayer::ConExToLateralInhibition() { return mLocalInh.ConExInh(); } SimMod_LocalInh* SimMod_MapLayer::LateralInhibition() { return &mLocalInh; }