56 vector< SpikeGenStruct >::iterator ispike;
58 ispike->reinit( info );
63 for (
unsigned int ic = 0; ic <
nCompt_; ++ic )
71 for (
unsigned int i = 0; i <
ca_.size(); ++i )
80 vector< double >::iterator iv;
81 vector< double >::iterator istate =
state_.begin();
82 vector< int >::iterator ichannelcount =
channelCount_.begin();
83 vector< ChannelStruct >::iterator ichan =
channel_.begin();
84 vector< ChannelStruct >::iterator chanBoundary;
85 vector< unsigned int >::iterator icacount =
caCount_.begin();
86 vector< double >::iterator ica =
ca_.begin();
87 vector< double >::iterator caBoundary;
88 vector< LookupColumn >::iterator icolumn =
column_.begin();
89 vector< LookupRow >::iterator icarowcompt;
90 vector< LookupRow* >::iterator icarow =
caRow_.begin();
96 for ( iv =
V_.begin(); iv !=
V_.end(); ++iv )
102 caBoundary = ica + *icacount;
103 for ( ; ica < caBoundary; ++ica )
111 chanBoundary = ichan + *ichannelcount;
112 for ( ; ichan < chanBoundary; ++ichan )
117 if ( ichan->Xpower_ > 0.0 )
126 if ( ichan->Ypower_ > 0.0 )
135 if ( ichan->Zpower_ > 0.0 )
152 ++icolumn, ++istate, ++icarow;
158 ++ichannelcount, ++icacount;
164 vector< Id >::iterator icompt;
165 vector< Id >::iterator ichan;
167 double Gbar = 0.0, Ek = 0.0;
168 double X = 0.0, Y = 0.0, Z = 0.0;
169 double Xpower = 0.0, Ypower = 0.0, Zpower = 0.0;
201 channel.
Gbar_ = Gbar;
202 channel.
setPowers( Xpower, Ypower, Zpower );
230 for (
unsigned int ic = 0; ic <
nCompt_; ++ic )
239 vector< Id >::iterator ichan;
240 unsigned int nGates = 0;
241 int useConcentration = 0;
247 if ( useConcentration )
254 double Ca, CaBasal, tau, B, ceiling, floor;
255 vector< Id > caConcId;
256 vector< int > caTargetIndex;
257 map< Id, int > caConcIndex;
258 int nTarget, nDepend = 0;
259 vector< Id >::iterator iconc;
262 unsigned int ichan = 0;
264 for (
unsigned int ic = 0; ic <
nCompt_; ++ic )
268 unsigned int nCa =
caConc_.size();
270 for ( ; ichan < chanBoundary; ++ichan )
277 caTargetIndex.push_back( -1 );
289 for ( iconc = caConcId.begin(); iconc != caConcId.end(); ++iconc )
290 if ( caConcIndex.find( *iconc ) == caConcIndex.end() )
292 caConcIndex[ *iconc ] =
caCount_[ ic ];
314 caTargetIndex.push_back( caConcIndex[ caConcId.front() ] + nCa );
328 for (
unsigned int ichan = 0; ichan <
channel_.size(); ++ichan )
330 if ( caTargetIndex[ ichan ] == -1 )
341 std::set< Id > caSet;
345 map< Id, unsigned int > gateSpecies;
347 for (
unsigned int ig = 0; ig <
gateId_.size(); ++ig )
353 caGate.insert( caGate.end(), caSet.begin(), caSet.end() );
354 vGate.insert( vGate.end(), vSet.begin(), vSet.end() );
356 for (
unsigned int ig = 0; ig < caGate.size(); ++ig )
357 gateSpecies[ caGate[ ig ] ] = ig;
358 for (
unsigned int ig = 0; ig < vGate.size(); ++ig )
359 gateSpecies[ vGate[ ig ] ] = ig;
367 vMin_ = numeric_limits< double >::max();
368 vMax_ = numeric_limits< double >::min();
369 double vDx = numeric_limits< double >::max();
370 caMin_ = numeric_limits< double >::max();
371 caMax_ = numeric_limits< double >::min();
372 double caDx = numeric_limits< double >::max();
379 for (
unsigned int ig = 0; ig < caGate.size(); ++ig )
384 dx = ( max - min ) / divs;
394 caDiv_ =
static_cast< int >( caDiv + 0.5 );
396 for (
unsigned int ig = 0; ig < vGate.size(); ++ig )
401 dx = ( max - min ) / divs;
411 vDiv_ =
static_cast< int >( vDiv + 0.5 );
416 vector< double > A, B;
417 vector< double >::iterator ia, ib;
431 for (
unsigned int ig = 0; ig < caGate.size(); ++ig )
439 for (
unsigned int igrid = 0; igrid < caGrid.
size(); ++igrid )
467 for (
unsigned int ig = 0; ig < vGate.size(); ++ig )
476 for (
unsigned int igrid = 0; igrid < vGrid.
size(); ++igrid )
495 for (
unsigned int ig = 0; ig <
gateId_.size(); ++ig )
497 unsigned int species = gateSpecies[
gateId_[ ig ] ];
503 vTable_.
column( species, column );
512 for (
unsigned int ichan = 0; ichan <
channel_.size(); ++ichan )
514 if (
channel_[ ichan ].Zpower_ > 0.0 )
540 vector< Id > spikeId;
542 vector< Id >::iterator syn;
543 vector< Id >::iterator spike;
546 for (
unsigned int ic = 0; ic <
nCompt_; ++ic )
550 for ( syn = synId.begin(); syn != synId.end(); ++syn )
566 for ( spike = spikeId.begin(); spike != spikeId.end(); ++spike )
572 ObjId mid = spike->element()->findCaller( df->
getFid() );
581 vector< string > filter;
582 filter.push_back(
"HHChannel" );
600 vector< Id > targets;
601 vector< string > filter;
611 filter.push_back(
"HHChannel" );
612 filter.push_back(
"SpikeGen" );
634 filter.push_back(
"HHChannel" );
635 for (
unsigned int ica = 0; ica <
caConcId_.size(); ++ica )
652 filter.push_back(
"CaConc" );
654 for (
unsigned int ik = 0; ik <
channelId_.size(); ++ik )
void readExternalChannels()
vector< double > state_
Fraction of gates open.
vector< unsigned int > chan2state_
a state index
static int caDepend(Id channel, vector< Id > &ret)
vector< unsigned int > outCa_
vector< LookupRow > caRowCompt_
vector< double > ca_
Ca conc in each pool.
static int spikegens(Id compartment, vector< Id > &ret)
void setup(Id seed, double dt)
static int caTarget(Id channel, vector< Id > &ret)
vector< double > caActivation_
calcium pool
vector< bool > gCaDepend_
depend on Ca conc?
void lookup(const LookupColumn &column, const LookupRow &row, double &C1, double &C2)
Actually performs the lookup and the linear interpolation.
vector< unsigned int > outVm_
vector< ChannelStruct > channel_
to compartment: chan2compt
vector< int > channelCount_
compartment
void sendValues(ProcPtr info)
vector< Id > compartmentId_
vector< int > caDependIndex_
depdt channel depend upon?
static int gates(Id channel, vector< Id > &ret, bool getOriginals=true)
void setup(Id seed, double dt)
void reinit(ProcPtr info)
void reinitCompartments()
vector< Id > gateId_
Used for localIndex-ing.
static int targets(Id object, string msg, vector< Id > &target, string filter="", bool include=true)
static const Cinfo * initCinfo()
vector< double * > caTarget_
void row(double x, LookupRow &row)
vector< CaConcStruct > caConc_
Ca pool info.
static void deleteMsg(ObjId mid)
void reinitSpikeGens(ProcPtr info)
vector< LookupRow * > caRow_
static void rates(Id gate, Grid grid, vector< double > &A, vector< double > &B)
vector< TreeNodeStruct > tree_
void setPowers(double Xpower, double Ypower, double Zpower)
void addColumns(int species, const vector< double > &C1, const vector< double > &C2)
Adds the columns for a given species. Columns supplied are C1 and C2.
vector< double > externalCalcium_
static int synchans(Id compartment, vector< Id > &ret)
vector< currentVecIter > currentBoundary_
vector< unsigned int > chan2compt_
void column(unsigned int species, LookupColumn &column)
static int hhchannels(Id compartment, vector< Id > &ret)
void manageOutgoingMessages()
vector< double > externalCurrent_
vector< SynChanStruct > synchan_
vector< SpikeGenStruct > spikegen_
vector< unsigned int > outIk_
static A get(const ObjId &dest, const string &field)
vector< Id > channelId_
Used for localIndex-ing.
vector< unsigned int > caCount_
each compartment
vector< CurrentStruct > current_
Channel current.
void createLookupTables()
vector< LookupColumn > column_
to lookup for this species
vector< Id > caConcId_
calcium from difshells
const Finfo * findFinfo(const string &name) const