Driving synaptic event using vecStim
Re: Driving synaptic event using vecStim
* the setup works fine in regular neuron
Re: Driving synaptic event using vecStim
look at nrn/src/nrnoc/netstim.mod for an analogy. You need to replace POINTER with BBCOREPOINTER and introduce
bbcore_write and bbcore_read implementations. Anything containing the string BBCORE is of interest.
I should update vecstim.mod to make it compatible with CoreNEURON.
bbcore_write and bbcore_read implementations. Anything containing the string BBCORE is of interest.
I should update vecstim.mod to make it compatible with CoreNEURON.
Re: Driving synaptic event using vecStim
I tried to introduce "bbcore_write" and "bbcore_read" from netstim.mod into our vecstim.mod, but got some errors when compiling the mechanism file with CoreNEURON. The following shows modified code, did I do anything wrong?
Thanks!
Thanks!
Code: Select all
NEURON {
THREADSAFE
ARTIFICIAL_CELL VecStim
BBCOREPOINTER ptr
}
ASSIGNED {
index
etime (ms)
ptr
}
VERBATIM
#if NRNBBCORE /* running in CoreNEURON */
#define IFNEWSTYLE(arg) arg
#else /* running in NEURON */
/*
1 means noiseFromRandom was called when _ran_compat was previously 0 .
2 means noiseFromRandom123 was called when _ran_compart was previously 0.
*/
static int _ran_compat; /* specifies the noise style for all instances */
#define IFNEWSTYLE(arg) if(_ran_compat == 2) { arg }
#endif /* running in NEURON */
ENDVERBATIM
...... (INITIAL block, NET_RECEIVE block etc.)
VERBATIM
#include "nrnran123.h"
#if !NRNBBCORE
/* backward compatibility */
double nrn_random_pick(void* r);
void* nrn_random_arg(int argpos);
int nrn_random_isran123(void* r, uint32_t* id1, uint32_t* id2, uint32_t* id3);
#endif
ENDVERBATIM
VERBATIM
static void bbcore_write(double* x, int* d, int* xx, int *offset, _threadargsproto_) {
/* error if using the legacy scop_exprand */
if (!_p_ptr) {
fprintf(stderr, "NetStim: cannot use the legacy scop_negexp generator for the random stream.\n");
assert(0);
}
if (d) {
uint32_t* di = ((uint32_t*)d) + *offset;
if (_ran_compat == 1) {
void** pv = (void**)(&_p_ptr);
/* error if not using Random123 generator */
if (!nrn_random_isran123(*pv, di, di+1, di+2)) {
fprintf(stderr, "NetStim: Random123 generator is required\n");
assert(0);
}
}else{
nrnran123_State** pv = (nrnran123_State**)(&_p_ptr);
nrnran123_getids3(*pv, di, di+1, di+2);
}
/*printf("Netstim bbcore_write %d %d %d\n", di[0], di[1], di[3]);*/
}
*offset += 3;
}
static void bbcore_read(double* x, int* d, int* xx, int* offset, _threadargsproto_) {
assert(!_p_ptr);
if (noise) {
uint32_t* di = ((uint32_t*)d) + *offset;
nrnran123_State** pv = (nrnran123_State**)(&_p_ptr);
*pv = nrnran123_newstream3(di[0], di[1], di[2]);
}else{
return;
}
*offset += 3;
}
ENDVERBATIM
-
- Site Admin
- Posts: 6384
- Joined: Wed May 18, 2005 4:50 pm
- Location: Yale University School of Medicine
- Contact:
Re: Driving synaptic event using vecStim
The file distributed with NEURON is called vecevent.mod, even though it defines the properties of an ARTIFICIAL_CELL class called VecStim. Among my own files, I find something called vecstim.mod from 2002, the source code for which differed from vecevent.mod, and which became deprecated by 2008 if not earlier. Looking to the future, wouldn't it be best to abandon vecstim.mod and base new development on vecevent.mod? zyc, are you so far along in your own code development that you are now stuck with vecstim.mod?
Re: Driving synaptic event using vecStim
i've updated vecevent.mod (VecStim)
Just need to test with coreneuron.
When it is working I'll push to the github repository and mention that here.
Just need to test with coreneuron.
When it is working I'll push to the github repository and mention that here.
Re: Driving synaptic event using vecStim
vecevent.mod has been updated to be compatible with CoreNEURON. See
https://github.com/neuronsimulator/nrn/ ... 64f9402219
This kind of VERBATIM code is quite painful. I need to consider an NMODL syntax for easily describing the use of Random variables and Vectors in
mod files that automatically generate the bbcore_write and bbcore_read functions.
https://github.com/neuronsimulator/nrn/ ... 64f9402219
This kind of VERBATIM code is quite painful. I need to consider an NMODL syntax for easily describing the use of Random variables and Vectors in
mod files that automatically generate the bbcore_write and bbcore_read functions.
Re: Driving synaptic event using vecStim
It works, thank you so much.