Page MenuHomec4science

main.cpp
No OneTemporary

File Metadata

Created
Wed, Jul 17, 01:00

main.cpp

#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