/*************************************************************************** * NeuronState.cpp * * ------------------- * * copyright : (C) 2010 by Jesus Garrido * * email : jgarrido@atc.ugr.es * ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 3 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ #include "../../include/neuron_model/NeuronState.h" NeuronState::NeuronState(unsigned int NumVariables): NumberOfVariables(NumVariables), LastUpdate(0), PredictedSpike(-1), PredictionEnd(-1), LastSpikeTime(100){ // TODO Auto-generated constructor stub this->StateVars = (float *) new float [NumVariables]; } NeuronState::NeuronState(const NeuronState & OldState): NumberOfVariables(OldState.NumberOfVariables), LastUpdate(OldState.LastUpdate), PredictedSpike(OldState.PredictedSpike), PredictionEnd(OldState.PredictionEnd), LastSpikeTime(OldState.LastSpikeTime) { this->StateVars = (float *) new float [this->NumberOfVariables]; for (unsigned int i=0; iNumberOfVariables; ++i){ this->StateVars[i] = OldState.StateVars[i]; } } NeuronState::~NeuronState() { // TODO Auto-generated destructor stub if (this->StateVars!=0){ delete [] this->StateVars; } } void NeuronState::SetStateVariableAt(unsigned int position,float NewValue){ this->StateVars[position] = NewValue; } void NeuronState::SetLastUpdateTime(double NewTime){ this->LastUpdate = NewTime; } void NeuronState::SetNextPredictedSpikeTime(double NextPredictedTime){ this->PredictedSpike = NextPredictedTime; } void NeuronState::SetEndRefractoryPeriod(double NextRefractoryPeriod){ this->PredictionEnd = NextRefractoryPeriod; } unsigned int NeuronState::GetNumberOfVariables(){ return this->NumberOfVariables; } float NeuronState::GetStateVariableAt(unsigned int position){ return *(this->StateVars+position); } double NeuronState::GetLastUpdateTime(){ return this->LastUpdate; } double NeuronState::GetNextPredictedSpikeTime(){ return this->PredictedSpike; } double NeuronState::GetEndRefractoryPeriod(){ return this->PredictionEnd; } unsigned int NeuronState::GetNumberOfPrintableValues(){ return this->GetNumberOfVariables()+3; } double NeuronState::GetPrintableValuesAt(unsigned int position){ if (positionGetNumberOfVariables()){ return this->GetStateVariableAt(position); } else if (position==this->GetNumberOfVariables()) { return this->GetLastUpdateTime(); } else if (position==this->GetNumberOfVariables()+1){ return this->GetNextPredictedSpikeTime(); } else if (position==this->GetNumberOfVariables()+2){ return this->GetEndRefractoryPeriod(); } else return -1; } double NeuronState::GetLastSpikeTime(){ return this->LastSpikeTime; } void NeuronState::NewFiredSpike(){ this->LastSpikeTime = 0; } void NeuronState::AddElapsedTime(float ElapsedTime){ this->LastSpikeTime += ElapsedTime; }