2 #include <../neuronmusic/nrnmusic.h>
3 #include <unordered_map>
100 ((MUSIC::EventOutputPort*) vport)
101 ->insertEvent(tt / 1000.0,
102 (MUSIC::GlobalIndex) gi);
108 for (
const auto& iter: *(port->
gi_table)) {
134 PreSyn* ps = iter->second;
135 ps->music_port_ =
new MusicPortPair((
void*)
this, gi, ps->music_port_);
141 (*music_output_ports)[(
void*)
this] =
i;
146 (*gi_table)[gi] = ps;
169 (*music_input_ports)[(
void*)
this] =
i;
172 if (gi_table->count(gi) == 0) {
175 (*gi_table)[gi] = ps;
179 ps = (*gi_table)[gi];
192 char**&
argv = *pargv;
193 if (strlen(
argv[0]) >= 5 && strcmp(
argv[0] + strlen(
argv[0]) - 5,
"music") == 0) {
197 if (strcmp(
argv[
i],
"-music") == 0) {
201 if (
getenv(
"_MUSIC_CONFIG_"))
220 static int called = 0;
229 std::vector<MUSIC::GlobalIndex> gindices;
232 for (
const auto&
j: *pst) {
235 gindices.push_back(gi);
238 eh->filltable(eip,
cnt);
239 MUSIC::PermutationIndex indices(&gindices.front(), gindices.size());
249 std::vector<MUSIC::GlobalIndex> gindices;
251 for (
const auto&
j: *pst) {
254 gindices.push_back(gi);
256 MUSIC::PermutationIndex indices(&gindices.front(), gindices.size());
257 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 *)
NetCvode * net_cvode_instance
void hoc_execerror(const char *, const char *)
char * getenv(const char *s)
EventInputPort * publishEventInput(std::string identifier)
EventOutputPort * publishEventOutput(std::string identifier)
static Gid2PreSyn gid2out_
static Symbol * netcon_sym_
static double usable_mindelay_
int is_point_process(Object *)
Object * nrnpy_po2ho(PyObject *)
MUSIC::Setup * nrnmusic_setup
void nrnmusic_init(int *, char ***)
void nrnmusic_terminate()
MUSIC::Runtime * nrnmusic_runtime
Object * hoc_new_object(Symbol *, void *)
PyObject * nrnpy_ho2po(Object *)
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
static PortTable * music_input_ports
static NetParMusicEvent * npme
static void nrnmusic_runtime_phase()
void nrnmusic_inject(void *port, int gindex, double tt)
std::unordered_map< int, PreSyn * > Gi2PreSynTable
Represent main neuron object computed by single thread.