1 #include <../../nrnconf.h>
3 #define IN_NRNMUSIC_CPP
14 #include <unordered_map>
109 ((MUSIC::EventOutputPort*) vport)
110 ->insertEvent(tt / 1000.0,
111 (MUSIC::GlobalIndex) gi);
117 for (
const auto& iter: *(port->
gi_table)) {
143 PreSyn* ps = iter->second;
144 ps->music_port_ =
new MusicPortPair((
void*)
this, gi, ps->music_port_);
150 (*music_output_ports)[(
void*)
this] =
i;
155 (*gi_table)[gi] = ps;
179 (*music_input_ports)[(
void*)
this] =
i;
182 if (gi_table->count(gi) == 0) {
183 ps =
new PreSyn({}, {}, {});
185 (*gi_table)[gi] = ps;
189 ps = (*gi_table)[gi];
203 char**&
argv = *pargv;
204 if (strlen(
argv[0]) >= 5 && strcmp(
argv[0] + strlen(
argv[0]) - 5,
"music") == 0) {
208 if (strcmp(
argv[
i],
"-music") == 0) {
213 if (getenv(
"_MUSIC_CONFIG_"))
232 static int called = 0;
241 std::vector<MUSIC::GlobalIndex> gindices;
244 for (
const auto&
j: *pst) {
247 gindices.push_back(gi);
250 eh->filltable(eip,
cnt);
251 MUSIC::PermutationIndex indices(&gindices.front(), gindices.size());
261 std::vector<MUSIC::GlobalIndex> gindices;
263 for (
const auto&
j: *pst) {
266 gindices.push_back(gi);
268 MUSIC::PermutationIndex indices(&gindices.front(), gindices.size());
269 eop->map(&indices, MUSIC::Index::GLOBAL);
MusicPortPair(void *port, int gindex, void *p)
void gid2index(int gid, int gi)
Gi2PreSynTable * gi_table
void psl_append(PreSyn *)
TQItem * event(double tdeliver, DiscreteEvent *, NrnThread *)
virtual ~NetParMusicEvent()
virtual void deliver(double, NetCvode *, NrnThread *)
virtual void send(double, NetCvode *, NrnThread *)
void filltable(NRNMUSIC::EventInputPort *, int)
void operator()(double t, MUSIC::LocalIndex id)
virtual void send(double sendtime, NetCvode *, NrnThread *)
Object * hoc_new_object(Symbol *symtemp, void *v)
EventInputPort * publishEventInput(std::string identifier)
EventOutputPort * publishEventOutput(std::string identifier)
void hoc_execerror(const char *s1, const char *s2)
impl_ptrs methods
Collection of pointers to functions with python-version-specific implementations.
int is_point_process(Object *)
#define nrn_assert(x)
assert()-like macro, independent of NDEBUG status
Gid2PreSyn & nrn_gid2out()
double nrn_usable_mindelay()
Symbol * nrn_netcon_sym()
MUSIC::Setup * nrnmusic_setup
void nrnmusic_init(int *, char ***)
void nrnmusic_terminate()
void nrnmusic_runtime_phase()
MUSIC::Runtime * nrnmusic_runtime
void nrnmusic_spikehandle(void *vport, double tt, int gindex)
void nrnmusic_injectlist(void *vp, double tt)
std::unordered_map< void *, int > PortTable
static PortTable * music_output_ports
NetCvode * net_cvode_instance
static PortTable * music_input_ports
static NetParMusicEvent * npme
void nrnmusic_inject(void *port, int gindex, double tt)
std::unordered_map< int, PreSyn * > Gi2PreSynTable
Represent main neuron object computed by single thread.
Object *(* po2ho)(PyObject *)
PyObject *(* ho2po)(Object *)