Skip to content
Snippets Groups Projects
Select Git revision
  • 15d9ef72b7622251d6de510b222b8979a9c05256
  • master default protected
  • noelp-master-patch-87404
  • disable-view
  • experimental_rel
  • test_quiggeldy_service
  • update-arbor-0.10.0
  • image_build
  • spack_v0.22.1
  • ebrains-24-04
  • update-readme
  • create-module-file
  • add-nestml-tests
  • feat_add_py-norse
  • update-libneuroml
  • update-bluebrain-packages
  • feat_arbor_install_all_binaries
  • ebrains-23.09-jsc-site-config
  • spack-v0.20.0
  • ebrains-23-09-spack-v0.19.2
  • ebrains-23-09
21 results

create_JupyterLab_kernel.sh

Blame
  • Synapse.cpp 3.57 KiB
    /**********************************************************************
    ** This program is part of 'MOOSE', the
    ** Messaging Object Oriented Simulation Environment.
    **           Copyright (C) 2003-2009 Upinder S. Bhalla. and NCBS
    ** It is made available under the terms of the
    ** GNU Lesser General Public License version 2.1
    ** See the file COPYING.LIB for the full notice.
    **********************************************************************/
    
    #include "header.h"
    #include "SynHandlerBase.h"
    #include "Synapse.h"
    
    const Cinfo* Synapse::initCinfo()
    {
    		static ValueFinfo< Synapse, double > weight(
    			"weight",
    			"Synaptic weight",
    			&Synapse::setWeight,
    			&Synapse::getWeight
    		);
    
    		static ValueFinfo< Synapse, double > delay(
    			"delay",
    			"Axonal propagation delay to this synapse",
    			&Synapse::setDelay,
    			&Synapse::getDelay
    		);
    
    		static DestFinfo addSpike( "addSpike",
    			"Handles arriving spike messages, inserts into event queue.",
    			new EpFunc1< Synapse, double >( &Synapse::addSpike ) );
    
    	static Finfo* synapseFinfos[] = {
    		&weight,		// Field
    		&delay,			// Field
    		&addSpike,		// DestFinfo
    	};
    
    	static string doc[] = 
    	{
    		"Name", "Synapse",
    		"Author", "Upi Bhalla",
    		"Description", "Synapse using ring buffer for events.",
    	};
    	static Dinfo< Synapse > dinfo;
    	static Cinfo synapseCinfo (
    		"Synapse",
    		Neutral::initCinfo(),
    		synapseFinfos,
    		sizeof( synapseFinfos ) / sizeof ( Finfo* ),
    		&dinfo,
    		doc,
    		sizeof( doc ) / sizeof( string ),
    		true // This is a FieldElement.
    	);
    
    	return &synapseCinfo;
    }
    
    static const Cinfo* synapseCinfo = Synapse::initCinfo();
    
    Synapse::Synapse()
    	: weight_( 1.0 ), delay_( 0.0 ), handler_( 0 )
    {
    	;
    }
    
    void Synapse::setWeight( const double v )
    {
    	weight_ = v;
    }
    
    void Synapse::setDelay( const double v )
    {
    	delay_ = v;
    }
    
    double Synapse::getWeight() const
    {
    	return weight_;
    }
    
    double Synapse::getDelay() const
    {
    	return delay_;
    }
    
    void Synapse::setHandler( SynHandlerBase* h )
    {
    	handler_ = h;
    }
    
    
    void Synapse::addSpike( const Eref& e, double time )
    {
    	static bool report = false;
    	static unsigned int tgtDataIndex = 0;
    	// static unsigned int tgtFieldIndex = 0;
    	if ( report && e.dataIndex() == tgtDataIndex ) {
    		cout << "	" << time << "," << e.fieldIndex();
    	}
    	handler_->addSpike( e.fieldIndex(), time + delay_, weight_ );
    }
    
    /////////////////////////////////////////////////////////////
    // Callbacks for message add/drop
    /////////////////////////////////////////////////////////////
    
    // static function, executed by the Synapse Element when a message is
    // added to the Element. Expands the parent synapse array to fit.
    void Synapse::addMsgCallback(
    				const Eref& e, const string& finfoName, 
    			    ObjId msg, unsigned int msgLookup )
    {
    	if ( finfoName == "addSpike" ) {
    		ObjId pa = Neutral::parent( e );
    		SynHandlerBase* sh = 
    				reinterpret_cast< SynHandlerBase* >( pa.data() );
    		unsigned int synapseNumber = sh->addSynapse();
    		SetGet2< unsigned int, unsigned int >::set( 
    						msg, "fieldIndex", msgLookup, synapseNumber );
    	}
    }
    
    // static function, executed by the Synapse Element when a message is
    // dropped from the Element. Contracts the parent synapse array to fit.
    // Typically the SynHandler won't resize, easier to just leave an
    // unused entry. Could even reuse if a synapse is added later, but all
    // this policy is independent of the Synapse class.
    void Synapse::dropMsgCallback(
    				const Eref& e, const string& finfoName, 
    			    ObjId msg, unsigned int msgLookup )
    {
    	if ( finfoName == "addSpike" ) {
    		ObjId pa = Neutral::parent( e );
    		SynHandlerBase* sh = 
    				reinterpret_cast< SynHandlerBase* >( pa.data() );
    		sh->dropSynapse( msgLookup );
    	}
    }