#include "defineOpto.h" #include "Neur_ClassOpto.h" #include "Corr_Stat.h" #include "DotFile.h" #include <time.h> inline double MaxVal(double A,double B) { double Out; if (A>=B) Out=A; else Out=B; return(Out); } inline int MinVal(int A,int B) { int Out; if (A<=B) Out=A; else Out=B; return(Out); } int main(int ac, char **av) { time_t start, end1; time(&start); int32 seed = time(NULL); TRandomMersenne rg(seed); double tim=0.0, timestep = epsilon, Threshold = -10; int counttime=0; double timsyncestimate=700.0; //the time from which sync estimates will be determined double timinitial=200;// the time of run without turning on the synapses if (ac <=12) { puts("endtime: Total Simulation Time"); puts("IdcI: DC current into inhibitory neurons"); puts("Conductance of Opto Current"); puts("Reversal Potential of Opto Current"); puts("Max Light Intensity"); puts("Num Light pulse"); puts("Width of pulse"); puts("Duty Cycle"); puts("Channel Type"); puts("OutData file"); puts("Deltapulse time to calculate PRC"); puts("Second delta pulse time"); exit(0); } string TYPE="HH"; string HOME="/nfs/homes/stalathi/Work/Neuron_Model_1.2/C++HH/Codes/"; double endtime = atof(av[1]); double IdcI=atof(av[2]); double gOpto = atof(av[3]); double EROpto=atof(av[4]); double defaultintensity=atof(av[5]); int Numpulse=atoi(av[6]); double Width=atof(av[7]); double DutyCycle=atof(av[8]); int ChType=atoi(av[9]); string OutDataFile=av[10]; double deltapulse=atof(av[11]); double deltapulse2=atof(av[12]); ofstream OutFile; OutFile.open((char *)OutDataFile.c_str(),ios::out); /**************/ vector< vector<double> > TI(3, vector<double>(0,0)); // vector < double > *TI; // TI = new vector < double >[3000]; int *bolI; bolI = new int [10]; vector<double> TON,TOFF; vector<double> TPoissOn,TPoissOff; seed=100;//rg.IRandom(0,1000000000); GeneratePoisson(endtime,40,1,TPoissOn,seed); for (int i=0;i<TPoissOn.size();i++) { TPoissOff.push_back(TPoissOn[i]+Width); //cout<<TPoissOn[i]<<" "<<TPoissOff[i]<<endl; } double starttime=200; GeneratePulseData(Numpulse,starttime, Width, DutyCycle,TON,TOFF); double pulse=0; HHneuron **neurHHI; neurHHI = new HHneuron *[1]; for (int i=0;i<2;i++) { neurHHI[i] = new HHneuron(0.0,3); neurHHI[i]->x[0] = -65; neurHHI[i]->parameter[7] = IdcI; neurHHI[i]->parameter[11]=-55; neurHHI[i]->parameter[5]=-65; } IOpto **OptoCurr; OptoCurr = new IOpto *[0]; OptoCurr[0] = new IOpto(neurHHI[0],gOpto,EROpto,ChType); //ChType=1 is WT OptoChannel; ChType=2 is ET123 OptoChannel OptoCurr[0]->parameter[12]=1.3; OptoCurr[0]->parameter[2]=defaultintensity; double Bottom=-67; double Top=-50; int count=0; double modintensity=0; double MaxVolt=-200,MaxCurr=-200; double OptoCurrVal; double Rec_Time=0,Rec_Time2=0; int bolrec=0,bolrec2=0; double tref,tend; int bultest; while (tim < endtime) { pulse=0; if(tim>200) { if (tim>TI[0][TI[0].size()-1]+deltapulse &tim<=TI[0][TI[0].size()-1]+deltapulse+Width) pulse=1; } for (int i=0;i<2;i++) HH_Run(&tim,neurHHI[i],timestep); IOpto_Run(&tim,OptoCurr[0],pulse,timestep); if (tim > 100) { for (int i=0;i<2;i++) spiketimes(&tim, &neurHHI[i]->x[0], Threshold, bolI[i], TI[i]); } MaxVolt=MaxVal(MaxVolt,neurHHI[0]->x[0]); MaxCurr=MaxVal(MaxCurr,OptoCurr[0]->Iion()); tim += epsilon; count=count+1; } double RefPeriod=TI[1][TI[1].size()-1]-TI[1][TI[1].size()-2]; OutFile<<IdcI<<" "<<ChType<<" "<<defaultintensity<<" "<<Width<<" "<<deltapulse<<" "<<deltapulse2<<" "<<RefPeriod<<" "<<RefPeriod<<" "<<TI[0][TI[0].size()-1]-TI[0][TI[0].size()-2]<<endl; OutFile.close(); vector < double >PeriodI; time(&end1); double TotalTime = difftime (end1, start); delete *neurHHI; delete []neurHHI; delete *OptoCurr; delete[] OptoCurr; delete []bolI; return 0; }