Attention: Data Proxy will be migrated from SWIFT to S3 storage at Friday, the 9th of May 2025 starting from 9pm CEST (my timezone). For more details, please join the rocket chat channel https://chat.ebrains.eu/channel/data-proxy-user-group


Changes for page Code description

Last modified by galluzziandrea on 2022/06/20 12:33

From version 4.1
edited by galluzziandrea
on 2021/12/09 14:38
Change comment: There is no comment for this version
To version 27.1
edited by galluzziandrea
on 2022/01/27 17:31
Change comment: There is no comment for this version

Summary

Details

Page properties
Content
... ... @@ -1,8 +1,8 @@
1 -== Introduction (path and modules) ==
1 +== Introduction (path and modules): ==
2 2  
3 3  First of all we check the path and import the necessary modules .
4 4  
5 -=== Check where I am and place myself in the right folder : ===
5 +=== Check where I am and place myself in the right folder: ===
6 6  
7 7  {{code language="python"}}
8 8  # Import the os module
... ... @@ -18,7 +18,7 @@
18 18  print("Current working directory: {0}".format(os.getcwd()))
19 19  {{/code}}
20 20  
21 -=== import the modules necessary for the simulation ===
21 +=== Import the modules necessary for the simulation: ===
22 22  
23 23  {{code language="python"}}
24 24  import nest
... ... @@ -34,6 +34,499 @@
34 34  
35 35  === ===
36 36  
37 -==== Results ====
37 +=== Define necessary classes to import the Initialization Files: ===
38 38  
39 +{{code language="python" title=" "}}
40 +class ImportIniLIFCA():
41 + #initialize the information to look for in perseo.ini
42 + inf=["NeuronType", #still fixed value
43 + "DelayDistribType", #still fixed value
44 + "SynapticExtractionType", #still fixed value
45 + "Life"]
46 +
47 + def __init__(self,files):
48 + self.files=files
49 +
50 + def FilesControllo(self):
51 + import sys
52 + for i in range(0,len(self.files)):
53 + if self.FileControllo(self.files[i]):
54 + sys.exit(0)
55 +
56 + def FileControllo(self,file1):
57 + try:
58 + f1=open(file1,"r")
59 + f1.close()
60 + return 0
61 + except ValueError:
62 + print("ValueError")
63 + return 1
64 + except IOError as err:
65 + print("OS error: {0}".format(err))
66 + return 1
67 + except:
68 + print("Unexpected error:", sys.exc_info()[0])
69 + return 1
70 +
71 + def Estrai_inf(self,stampa=0):
72 +
73 + InfoPerseo=self.EstraiInfoPerseo() #extract info from perseo.ini
74 + AppoggioTempM=self.EstraiInfoModuli() #extract info from modules.ini
75 + AppoggioTempC=self.EstraiInfoConnectivity() #extract info from connectivity.ini
76 + AppoggioTempP=self.EstraiProtocol() #extract info from protocol.ini
77 +
78 + def getKey(item):
79 + return item[0]
80 + InfoProtocol=AppoggioTempP
81 + # I convert the extracted information into a suitable format from tuple to list
82 +
83 + InfoBuildT=[AppoggioTempM[0]]
84 + for i in range(0,AppoggioTempM[0]):
85 + app1=[int(AppoggioTempM[2][i][0])]
86 + app=(app1+list(AppoggioTempM[2][i][3:9])+list(AppoggioTempM[2][i][12])+list(AppoggioTempM[2][i][9:12]))
87 + InfoBuildT.append(app)
88 + del app
89 +
90 + InfoBuild=[float(InfoBuildT[0])]
91 + for i in range(0,int(InfoBuildT[0])):
92 + app=[]
93 + for j in range(0,11):
94 + app.append(float(InfoBuildT[i+1][j]))
95 + InfoBuild=InfoBuild+[app]
96 + del app
97 +
98 + InfoConnectPop=[AppoggioTempM[0]]
99 + for i in range(0,len(AppoggioTempC[1][:])):
100 + app=list(AppoggioTempC[1][i])
101 + InfoConnectPop.append(app)
102 + del app
103 +
104 + InfoConnectNoise=[AppoggioTempM[0]]
105 + for i in range(0,AppoggioTempM[0]):
106 + app=list(AppoggioTempM[2][i][1:3])
107 + InfoConnectNoise.append(app)
108 +
109 +
110 + if stampa==1: #Print on screen of saved data
111 + for i,j in enumerate(InfoPerseo):
112 + print(self.inf[i],"=",j)
113 + print("\n")
114 + print("the network consists of ", AppoggioTempM[0], " neuronal population" )
115 + print(AppoggioTempM[1])
116 + for i in range(0,AppoggioTempM[0]):
117 + print(AppoggioTempM[2][i])
118 + print("\n")
119 + print(AppoggioTempC[0])
120 + for i in range(0,AppoggioTempM[0]**2):
121 + print(AppoggioTempC[1][i])
122 + print("\n")
123 + for i in InfoProtocol:
124 + print("SET_PARAM"+str(i))
125 +
126 +
127 + return InfoPerseo,InfoBuild,InfoConnectPop,InfoConnectNoise,InfoProtocol
128 +
129 + def EstraiProtocol(self):
130 + import string
131 + f1=open(self.files[3],"r")
132 + ProtocolList= []
133 + for x in f1.readlines():
134 + y=x.split()
135 + if len(y):
136 + if x[0]!="#" and y[0]=="SET_PARAM":
137 + try:
138 + ProtocolList.append([float(y[1]),int(y[2]),float(y[3]),float(y[4])])
139 + except ValueError:
140 + pass
141 + f1.close()
142 + return ProtocolList
143 +
144 + def EstraiInfoPerseo(self):
145 + import string
146 + f1=open(self.files[0],"r")
147 + InfList= []
148 + for x in f1.readlines():
149 + y=x.split()
150 + if len(y):
151 + if x[0]!="#":
152 + for findinf in self.inf:
153 + try:
154 + temp=y.index(findinf)
155 + InfList.append(y[temp+2])
156 + except ValueError:
157 + pass
158 + f1.close()
159 + return InfList
160 +
161 + def EstraiInfoModuli(self):
162 + import string
163 + f1=open(self.files[2],"r")
164 + NumPop=0
165 + for i,x in enumerate(f1.readlines()):
166 + y=x.split()
167 + if len(y):
168 + if x[0]!="#":
169 + NumPop=NumPop+1
170 + if i==2:
171 + ParamList=[]
172 + for j in range(1,14):
173 + ParamList.append(y[j])
174 + f1.close()
175 + PopsParamList=[]
176 + f1=open(self.files[2],"r")
177 + x=f1.readlines()
178 + for j in range(0,NumPop):
179 + appo=x[4+j];
180 + PopsParamList.append(appo.split())
181 + f1.close()
182 + return NumPop,ParamList,PopsParamList
183 +
184 + def EstraiInfoConnectivity(self):
185 + import string
186 + f1=open(self.files[1],"r")
187 + PopConParamList=[]
188 + for i,x in enumerate(f1.readlines()):
189 + y=x.split()
190 + if len(y):
191 + if x[0]!="#":
192 + PopConParamList.append(y)
193 + if i==1:
194 + ParamList=[]
195 + for j in range(1,9):
196 + ParamList.append(y[j])
197 + f1.close()
198 + return ParamList,PopConParamList
199 +{{/code}}
200 +
201 +=== Import the initialization files: ===
202 +
203 +in this section we...
204 +
205 +{{code language="python"}}
206 +Salva=1
207 +file1="perseo35.ini"
208 +file2="c_cortsurf_Pot1.43PotStr148v3.ini"
209 +file3="m_cortsurf_Pot1.43.ini"
210 +file4="ProtocolExploration36.ini"
211 +files=[file1,file2,file3,file4]
212 +#define the name of the Output file
213 +FileName="dati/Rates_Nest_Run_Milano_Test36_13x13_"+str(nest.Rank())+"_Pot1.43PotStr148v3Long3.dat"
214 +#check the existence of the files being read
215 +ImpFil=ImportIniLIFCA(files);
216 +ImpFil.FilesControllo()
217 +
218 +#extract the information of interest from the files.ini and transfer them to the files:
219 +#InfoPerseo,InfoBuild,InfoConnectPop,InfoConnectNoise
220 +
221 +stampa=0; #stampa=1 print output simulation data on screen stampa=0 dont
222 +InfoPerseo,InfoBuild,InfoConnectPop,InfoConnectNoise,InfoProtocol=ImpFil.Estrai_inf(stampa)
223 +
224 +# InfoPerseo=["NeuronType","DelayDistribType","SynapticExtractionType","Life" ]
225 +# InfoBuild=[numero di popolazioni,
226 +# [N,C_ext,\nu_ext,\tau,\tetha,H,\tau_arp,NeuronInitType,\alpha_c,\tau_c,g_c],
227 +# [.....],[],...]
228 +# InfoConnectPop=[numero di popolazioni,
229 +# [post,pre,c,Dmin,Dmax,syn typ,J,DJ],
230 +# [.....],[],...]
231 +# InfoConnectNoise=[numero di popolazioni,
232 +# [J_ext,DJ_ext],
233 +# [.....],[],...]
234 +# InfoProtocol=[[time,population,param_num,value],
235 +# [.....],[],...]
236 +{{/code}}
237 +
238 +(% class="wikigeneratedid" %)
239 +=== [[image:image-20220127173048-1.png||height="508" width="948"]] ===
240 +
241 +=== Defining general and nest.kernel parameters ===
242 +
243 +{{code language="python"}}
244 +#############################------------------------------------------------------------------------
245 +#Clean the Network
246 +#############################------------------------------------------------------------------------
247 +nest.ResetKernel()
248 +
249 +#############################------------------------------------------------------------------------
250 +#insert the introductory parameters of the simulation
251 +#############################------------------------------------------------------------------------
252 +
253 +
254 +dt = 0.1 # the resolution in ms
255 +StartMisure=0. # start time of measurements
256 +simtime = int(float(InfoPerseo[3])) # Simulation time in ms (200 s)
257 +if simtime<=StartMisure: # If the simulation time is less than StartMisure, it is increased by StartMisure
258 + simtime=simtime+StartMisure
259 +start=0.0 # start time of poissonian processes
260 +origin=0.0 # temporal origin
261 +
262 +#############################------------------------------------------------------------------------
263 +# Kernel parameters
264 +#############################------------------------------------------------------------------------
265 +LNT=multiprocessing.cpu_count();
266 +nest.SetKernelStatus({"local_num_threads": LNT})
267 +nest.SetKernelStatus({"resolution": dt, "print_time": True,
268 + "overwrite_files": True})
269 +
270 +#############################------------------------------------------------------------------------
271 +#"randomize" the seeds of the random generators
272 +#############################------------------------------------------------------------------------
273 +
274 +#msd = int(math.fabs(time.process_time()*1000))
275 +#N_vp = nest.GetKernelStatus(['total_num_virtual_procs'])[0]
276 +#pyrngs = [numpy.random.RandomState(s) for s in range(msd, msd+N_vp)]
277 +#nest.SetKernelStatus({"grng_seed" : msd+N_vp})
278 +#nest.SetKernelStatus({"rng_seeds" : list(range(msd+N_vp+1, msd+2*N_vp+1))})
279 +{{/code}}
280 +
281 +=== Building the network: neuronal populations , Poisson processes and spike detectors ===
282 +
283 +{{code language="python"}}
284 +#############################------------------------------------------------------------------------
285 +print("Building network")
286 +#############################------------------------------------------------------------------------
287 +
288 +startbuild = time.time() #initialize the calculation of the time used to simulate
289 +
290 +NeuronPop=[]
291 +NoisePop=[]
292 +DetectorPop=[]
293 +
294 +#define and initialize the populations of neurons with the parameters extracted from the.ini files
295 +for i in range(1,int(InfoBuild[0])+1):
296 + if int(InfoBuild[i][7])==0:
297 + app=float(InfoBuild[i][5])
298 + else:
299 + app=0.
300 + app2= nest.Create("aeif_psc_exp", int(InfoBuild[i][0]),params={"C_m": 1.0,
301 + "g_L": 1.0/float(InfoBuild[i][3]),
302 + "t_ref": float(InfoBuild[i][6]),
303 + "E_L": 0.0,
304 + "V_reset": float(InfoBuild[i][5]),
305 + "V_m": app,
306 + "V_th": float(InfoBuild[i][4]),
307 + "Delta_T": 0.,
308 + "tau_syn_ex": 1.0,
309 + "tau_syn_in": 1.0,
310 + "a": 0.0,
311 + "b": float(InfoBuild[i][10]),
312 + "tau_w": float(InfoBuild[i][9]),
313 + "V_peak":float(InfoBuild[i][4])+10.0})
314 + NeuronPop.append(app2)
315 +
316 +#define and initialize the poisson generators and the spike detectors with the parameters extracted from the.ini files
317 +
318 +for i in range(1,int(InfoBuild[0])+1):
319 + app3= nest.Create("poisson_generator",params={"rate": float(InfoBuild[i][1]*InfoBuild[i][2]),
320 + 'origin':0.,
321 + 'start':start})
322 + NoisePop.append(app3)
323 + app4 = nest.Create("spike_recorder",params={ "start":StartMisure})
324 + DetectorPop.append(app4)
325 +
326 +endbuild = time.time()
327 +{{/code}}
328 +
329 +=== [[image:image-20220127165908-2.png||height="659" width="1149"]] ===
330 +
331 +=== Connecting the network nodes: neuronal populations, Poisson processes and spike detectors ===
332 +
333 +{{code language="python"}}
334 +#############################------------------------------------------------------------------------
335 +print("Connecting ")
336 +#############################------------------------------------------------------------------------
337 +
338 +startconnect = time.time()
339 +Connessioni=[]
340 +Medie=[]
341 +
342 +#create and define the connections between the populations of neurons and the poisson generators
343 +#and between the populations of neurons and the spike detectors with the parameters extracted from the.ini files
344 +
345 +for i in range(0,int(InfoBuild[0])):
346 + nest.Connect(NoisePop[i], NeuronPop[i], syn_spec={'synapse_model': 'static_synapse_hpc',
347 + 'delay': dt,
348 + 'weight': nest.math.redraw(nest.random.normal(mean=float(InfoConnectNoise[i+1][0]),
349 + std=(float(InfoConnectNoise[i+1][1])*float(InfoConnectNoise[i+1][0]))),
350 + min=0., max=float('Inf'))
351 + })
352 + nest.Connect(NeuronPop[i][:int(InfoBuild[i+1][0])], DetectorPop[i], syn_spec={"weight": 1.0, "delay": dt})
353 +
354 +#create and define the connections between the populations of neurons with the parameters extracted from the.ini files
355 +
356 +for i in range(0,len(InfoConnectPop[1:])):
357 +
358 + conn=nest.Connect(NeuronPop[int(InfoConnectPop[i+1][1])], NeuronPop[int(InfoConnectPop[i+1][0])],
359 + {'rule': 'pairwise_bernoulli',
360 + 'p':float(InfoConnectPop[i+1][2]) },
361 + syn_spec={'synapse_model': 'static_synapse_hpc',
362 + 'delay':nest.math.redraw(nest.random.exponential(beta=float(1./(2.99573227355/(float(InfoConnectPop[i+1][4])-float(InfoConnectPop[i+1][3]))))),
363 + min= numpy.max([dt,float(1./float(InfoConnectPop[i+1][4]))]),
364 + max= float(1./(float(InfoConnectPop[i+1][3])-dt/2))),
365 +
366 + 'weight':nest.random.normal(mean=float(InfoConnectPop[i+1][6]),
367 + std=math.fabs(float(InfoConnectPop[i+1][6])*float(InfoConnectPop[i+1][7])))})
368 +
369 +
370 +endconnect = time.time()
371 +{{/code}}
372 +
373 +=== ===
374 +
375 +=== ===
376 +
377 +=== [[image:image-20220127170722-1.png]] ===
378 +
379 +=== Simulating: neuronal time evolution. ===
380 +
381 +=== ===
382 +
383 +{{code language="python"}}
384 + #############################------------------------------------------------------------------------
385 + print("Simulating")
386 + #############################------------------------------------------------------------------------
387 + ###################################################################################################################################################################
388 + if Salva:
389 + print("I m going to save the data")
390 + #x=str(iterazioni)
391 + f = open(FileName,"w")
392 + if len(InfoProtocol):
393 + print("I m going to split the simulation")
394 + tempo=0
395 + for contatore in range(0,len(InfoProtocol)):
396 + appoggio1=int((tempo+InfoProtocol[contatore][0])/1000.)
397 + appoggio2=int(tempo/1000.)
398 + appoggio3=tempo+InfoProtocol[contatore][0]
399 + if (appoggio1-appoggio2)>=1:
400 + T1=(1+appoggio2)*1000-tempo
401 + nest.Simulate(T1)
402 + #Save the Data!!!!
403 + ###########################################################
404 + Equilibri=[]
405 + for i in range(0,int(InfoBuild[0])):
406 + Equilibri.append([])
407 + a=nest.GetStatus(DetectorPop[i])[0]["events"]["times"]
408 + if len(a)>0:
409 + Trange=(1000*int(numpy.min(a)/1000.),1000*int(numpy.min(a)/1000.)+1000)
410 + hist,Tbin=numpy.histogram(a,200,(Trange[0],Trange[1]))
411 + Equilibri[i]=hist*1000./(5.*int(InfoBuild[i+1][0]))
412 + else:
413 + Trange=(1000*int(tempo/1000.),1000*int(tempo/1000.)+1000)
414 + hist=numpy.zeros(200)
415 + Tbin=numpy.linspace(Trange[0],Trange[1],num=201)
416 + Equilibri[i]=hist
417 + nest.SetStatus(DetectorPop[i],{'n_events':0})
418 + for j in range(0,len(hist)):
419 + f.write(str(Tbin[j])+" ")
420 + for i in range(0,int(InfoBuild[0])):
421 + f.write(str(Equilibri[i][j])+" ")
422 + f.write("\n ")
423 + ###########################################################
424 + tempo=tempo+T1
425 + for contatore2 in range(1,(appoggio1-appoggio2)):
426 + nest.Simulate(1000.)
427 + #Save the Data!!!!
428 + ###########################################################
429 + Equilibri=[]
430 + for i in range(0,int(InfoBuild[0])):
431 + Equilibri.append([])
432 + a=nest.GetStatus(DetectorPop[i])[0]["events"]["times"]
433 + if len(a)>0:
434 + Trange=(1000*int(numpy.min(a)/1000.),1000*int(numpy.min(a)/1000.)+1000)
435 + hist,Tbin=numpy.histogram(a,200,(Trange[0],Trange[1]))
436 + Equilibri[i]=hist*1000./(5.*int(InfoBuild[i+1][0]))
437 + else:
438 + Trange=(1000*int(tempo/1000.),1000*int(tempo/1000.)+1000)
439 + hist=numpy.zeros(200)
440 + Tbin=numpy.linspace(Trange[0],Trange[1],num=201)
441 + Equilibri[i]=hist
442 + nest.SetStatus(DetectorPop[i],{'n_events':0})
443 + for j in range(0,len(hist)):
444 + f.write(str(Tbin[j])+" ")
445 + for i in range(0,int(InfoBuild[0])):
446 + f.write(str(Equilibri[i][j])+" ")
447 + f.write("\n ")
448 + tempo=tempo+1000.
449 + T2=appoggio3-tempo
450 + nest.Simulate(T2);
451 + tempo=tempo+T2;
452 + else:
453 + nest.Simulate(InfoProtocol[contatore][0])
454 + temp=InfoProtocol[contatore][0]
455 + tempo=tempo+temp
456 + if InfoProtocol[contatore][2]==4:
457 + nest.SetStatus(NoisePop[InfoProtocol[contatore][1]],params={"rate": float(InfoBuild[1+InfoProtocol[contatore][1]][2]*InfoProtocol[contatore][3])})
458 + if InfoProtocol[contatore][2]==12:
459 + nest.SetStatus(NeuronPop[InfoProtocol[contatore][1]], params={"b": float(InfoProtocol[contatore][3])})
460 + else:
461 + nest.Simulate(simtime)
462 + tempo=simtime
463 + if (simtime-tempo)>0.:
464 + nest.Simulate(simtime-tempo)
465 +
466 +
467 + endsimulate = time.time()
468 + f.close()
469 + else:
470 + if len(InfoProtocol):
471 + tempo=0
472 + for contatore in range(0,len(InfoProtocol)):
473 + nest.Simulate(InfoProtocol[contatore][0])
474 + temp=InfoProtocol[contatore][0]
475 + tempo=tempo+temp
476 + if InfoProtocol[contatore][2]==4:
477 + nest.SetStatus(NoisePop[InfoProtocol[contatore][1]],params={"rate": float(InfoBuild[1+InfoProtocol[contatore][1]][2]*InfoProtocol[contatore][3])})
478 + #print "Population:", InfoProtocol[contatore][1] ,";Parameter:", InfoProtocol[contatore][2] ,"; Value: ",InfoProtocol[contatore][3]
479 + if InfoProtocol[contatore][2]==12:
480 + nest.SetStatus(NeuronPop[InfoProtocol[contatore][1]], params={"b": float(InfoProtocol[contatore][3])})
481 + #print "Population:", InfoProtocol[contatore][1] ,";Parameter:", InfoProtocol[contatore][2] ,"; Value: ",InfoProtocol[contatore][3]
482 +
483 + else:
484 + nest.Simulate(simtime)
485 + tempo=simtime
486 + if (simtime-tempo)>0.:
487 + nest.Simulate(simtime-tempo)
488 + endsimulate = time.time()
489 +
490 +
491 + ###################################################################################################################################################################
492 +
493 + #############################------------------------------------------------------------------------
494 + #print some information from the simulation
495 + #############################------------------------------------------------------------------------
496 +
497 + num_synapses = nest.GetDefaults('static_synapse_hpc')["num_connections"]
498 + build_time = endbuild - startbuild
499 + connect_time = endconnect - startconnect
500 + sim_time = endsimulate - endconnect
501 +
502 + N_neurons=0
503 + for i in range(0,int(InfoBuild[0])):
504 + N_neurons=N_neurons+int(InfoBuild[i+1][0])
505 +
506 + print(" Network simulation (Python) neuron type:",InfoPerseo[0])
507 + print("Number of neurons : {0}".format(N_neurons))
508 + print("Number of synapses: {0}".format(num_synapses))
509 + print("Building time : %.2f s" % build_time)
510 + print("Connecting time : %.2f s" % connect_time)
511 + print("Simulation time : %.2f s" % sim_time)
512 +
513 +Fine=time.time()
514 +print ("Total Simulation time : %.2f s" % (Fine-Inizio))
515 +{{/code}}
516 +
517 +=== ===
518 +
519 +=== ===
520 +
521 +=== [[image:image-20220127171242-1.png]] ===
522 +
523 +=== Results: ===
524 +
525 +[[the output of this simulationo is...>>https://drive.ebrains.eu/smart-link/215f8213-17e3-468b-b573-e6eaf49d315e/]]
526 +
527 +
528 +
529 +
530 +
531 +
39 39  ==== ====
CorticalField_t=80_DeepSpontPlanar.mp4
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.galluzziandrea
Size
... ... @@ -1,0 +1,1 @@
1 +3.4 MB
Content
image-20220127165822-1.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.galluzziandrea
Size
... ... @@ -1,0 +1,1 @@
1 +237.6 KB
Content
image-20220127165908-2.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.galluzziandrea
Size
... ... @@ -1,0 +1,1 @@
1 +106.6 KB
Content
image-20220127170104-1.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.galluzziandrea
Size
... ... @@ -1,0 +1,1 @@
1 +149.6 KB
Content
image-20220127170155-2.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.galluzziandrea
Size
... ... @@ -1,0 +1,1 @@
1 +280.0 KB
Content
image-20220127170722-1.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.galluzziandrea
Size
... ... @@ -1,0 +1,1 @@
1 +220.5 KB
Content
image-20220127171242-1.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.galluzziandrea
Size
... ... @@ -1,0 +1,1 @@
1 +301.3 KB
Content
image-20220127173048-1.png
Author
... ... @@ -1,0 +1,1 @@
1 +XWiki.galluzziandrea
Size
... ... @@ -1,0 +1,1 @@
1 +71.5 KB
Content