simmod_maplayer.cpp 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. //
  2. // C++ Implementation: simmod_maplayer
  3. //
  4. // Description:
  5. //
  6. //
  7. // Author: Frank Michler,,, <frank@pc13365>, (C) 2010
  8. //
  9. // Copyright: See COPYING file that comes with this distribution
  10. //
  11. //
  12. #include "sys.hpp" // for libcwd
  13. #include "debug.hpp" // for libcwd
  14. #include <vector>
  15. #include "simloop.hpp"
  16. #include "simmodules/simmodules.hpp"
  17. #include "anyoptwrap/anyoptionwrapper.hpp"
  18. #include "anyoptwrap/anyoptionwrap_defs.hpp"
  19. #include "layerfactory.hpp"
  20. #include "simmod_maplayer.hpp"
  21. #include "vconnection.hpp"
  22. SimMod_MapLayer::SimMod_MapLayer(AnyOptionWrapper* _opt):
  23. SimModule(_opt),
  24. mLocalInh(_opt),
  25. mMapLayer(0),
  26. mInhLayer(0),
  27. mConLateralExcitation(0)
  28. {
  29. mOptionsPrefix="MapLayer_";
  30. }
  31. SimMod_MapLayer::~SimMod_MapLayer()
  32. {
  33. // SimElements are deleted by SimLoop, so we don't need to delete them here.
  34. }
  35. void SimMod_MapLayer::SetCmdLineOptions()
  36. {
  37. myAnyWrap->setOption( (mOptionsPrefix + "Nx").c_str(),'a', &mMapNx, 100);
  38. myAnyWrap->setOption( (mOptionsPrefix + "Ny").c_str(),'a', &mMapNy, 100);
  39. myAnyWrap->setOption( (mOptionsPrefix + "LatExStrength").c_str(),'a', &mLatExStrength, 0.);
  40. myAnyWrap->setOption( (mOptionsPrefix + "LatExRange").c_str(),'a', &mLatExRange, 0.);
  41. myAnyWrap->setOption( (mOptionsPrefix + "LatExTauRec").c_str(),'a',&mLatExTauRec, 300.);
  42. myAnyWrap->setOption( (mOptionsPrefix + "LatExU_Se").c_str(),'a',&mLatExUSe, 0.3);
  43. myAnyWrap->setOption( (mOptionsPrefix + "LatExMinDelay").c_str(),'a',&mLatExMinDelay, 0.);
  44. myAnyWrap->setOption( (mOptionsPrefix + "LatExMaxDelay").c_str(),'a',&mLatExMaxDelay, 0.);
  45. mLocalInh.SetCmdLineOptions();
  46. }
  47. layer* SimMod_MapLayer::Setup(SimLoop* _MainSimLoop)
  48. {
  49. MainSimLoop = _MainSimLoop;
  50. mMapLayer = createLayer(mMapNx*mMapNy, NMType_DecoLif, NPType_Excitatory);
  51. mMapLayer->SetName("RepresentationLayer");
  52. mMapLayer->SetupPositions(mMapNx,mMapNy,true);
  53. mMapLayer->SetRandomInputStrength(0);
  54. MainSimLoop->AddSimElement(mMapLayer);
  55. mInhLayer = mLocalInh.Setup(MainSimLoop, mMapLayer);
  56. setupLateralExcitation();
  57. return mMapLayer;
  58. }
  59. void SimMod_MapLayer::setupLateralExcitation()
  60. {
  61. Dout(dc::smod, __FUNCTION__);
  62. if (mLatExStrength > 0) {
  63. mConLateralExcitation = new
  64. VecDepressiveConnection(mMapLayer,
  65. mMapLayer,
  66. csimInputChannel_NMDA_AMPA,
  67. mLatExTauRec,
  68. mLatExUSe);
  69. mConLateralExcitation->SetName("conIT_ExEx");
  70. //! @todo implement loading connection from weight file
  71. mLatExMaxDelay=1;
  72. mLatExMinDelay=0;
  73. mConLateralExcitation->ConnectGaussian(mLatExRange,
  74. mLatExStrength,
  75. mLatExMaxDelay,
  76. mLatExMinDelay,
  77. true);
  78. mConLateralExcitation->Save();
  79. MainSimLoop->AddSimElement(mConLateralExcitation);
  80. }
  81. }
  82. VecConnection* SimMod_MapLayer::ConLateralExcitation()
  83. {
  84. return dynamic_cast<VecConnection*>(mConLateralExcitation);
  85. }
  86. VecConnection* SimMod_MapLayer::ConExToLateralInhibition()
  87. {
  88. return mLocalInh.ConExInh();
  89. }
  90. SimMod_LocalInh* SimMod_MapLayer::LateralInhibition()
  91. {
  92. return &mLocalInh;
  93. }