Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F72781372
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
Wed, Jul 17, 01:00
Size
2 KB
Mime Type
text/x-c
Expires
Fri, Jul 19, 01:00 (2 d)
Engine
blob
Format
Raw Data
Handle
19102227
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