Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F84543630
main.cpp
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Mon, Sep 23, 12:52
Size
2 KB
Mime Type
text/x-c
Expires
Wed, Sep 25, 12:52 (2 d)
Engine
blob
Format
Raw Data
Handle
21044484
Attached To
R5159 CS116-2017-Romain-GROS
main.cpp
View Options
#include <iostream>
#include <iomanip>
#include "neurone.hpp"
#include "constant.h"
#include <fstream>
using namespace std;
double AskForTime();
bool SpecialValueForI();
void DemanderBornes(double& borne_inf,double& borne_sup, double temps_f );
double DemanderI();
void print(ofstream& donnees, double potential, int time);
void printSpikeTimes (ofstream& donnees, std::vector<double> spikeTimes);
int main () {
double temps_f(0.0);
do {
temps_f = AskForTime();
} while (temps_f <= 0 );
unsigned int NumberOfTimes (0);
NumberOfTimes=(temps_f*0.001)/DeltaTime;
Neurone neurone;
ofstream donnees ("donnees.txt", ios::out);
donnees << setw(20) << "Membrane Potential : (mV)" ;
donnees << setw(20) << "Time : (ms)" << std::endl;
donnees << std::endl;
print (donnees, neurone.getMembranePotential(),-1);
bool isvalueForI = SpecialValueForI();
double valueForI(0.0);
double borne_inf(0.0);
double borne_sup(0.0);
if (isvalueForI) {
DemanderBornes(borne_inf,borne_sup, temps_f);
valueForI = DemanderI();
}
double I (0.0);
for (unsigned int i (0); i < NumberOfTimes ; ++i) {
if (i >= borne_inf and i < borne_sup) {
I=valueForI;
} else {
I=0.0;
}
neurone.update(I,i*DeltaTime);
print(donnees, neurone.getMembranePotential(),i);
}
printSpikeTimes(donnees, neurone.getSpikeTimes());
donnees.close();
return 0;
}
double AskForTime() {
double duree (0);
std::cout << "Entrez la durée de la simulation (en ms) : " << std::endl;
cin >> duree;
return duree;
};
bool SpecialValueForI() {
double yes_or_no(0.0);
do {
std::cout << "Do you want to enter a value for I ? 1 -> yes , 0 -> no" << std::endl;
cin >> yes_or_no;
} while (yes_or_no!=0 and yes_or_no!=1);
if (yes_or_no == 0) {
return false;
}
return true;
}
void DemanderBornes(double& borne_inf,double& borne_sup, double temps_f) {
do {
std::cout << "Entrez les bornes inférieurs puis supérieures des temps pour lesquels cette valeur doit s'appliquer :" << std::endl;
cin >> borne_inf >> borne_sup;
} while (borne_inf < 0 or borne_inf >= borne_sup or borne_sup > temps_f);
}
double DemanderI () {
double I;
std::cout << "Entrez la valeur de I : " << std::endl;
cin>> I;
return I;
}
void print(ofstream& donnees, double potential, int time) {
donnees << setw(20) << potential*mV;
donnees << setw(20) << (time+1)*DeltaTime*ms << std::endl;
}
void printSpikeTimes (ofstream& donnees, std::vector<double> spikeTimes) {
donnees << std::endl;
if(spikeTimes.empty()) {
donnees << "Pas de spike" << std::endl;
} else {
for (unsigned int i(0);i<spikeTimes.size();++i) {
donnees << "Spike " << setw(5) << i+1;
donnees << setw(10) << spikeTimes[i] << std::endl;
}
}
}
Event Timeline
Log In to Comment