From e63c7dee2ab05e9a08f9827ec11b7dad1b866a54 Mon Sep 17 00:00:00 2001 From: Rahul Date: Sun, 19 Feb 2023 22:35:10 +0530 Subject: [PATCH 01/43] CORS enabled --- fri/server/main.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/fri/server/main.py b/fri/server/main.py index e546761..203a94d 100644 --- a/fri/server/main.py +++ b/fri/server/main.py @@ -5,6 +5,7 @@ from pathlib import Path import json import subprocess +from flask_cors import CORS, cross_origin cur_path = os.path.dirname(os.path.abspath(__file__)) concore_path = os.path.abspath(os.path.join(cur_path, '../../')) @@ -13,6 +14,9 @@ app = Flask(__name__) app.secret_key = "secret key" +cors = CORS(app) +app.config['CORS_HEADERS'] = 'Content-Type' + # To upload multiple file. For example, /upload/test?apikey=xyz @app.route('/upload/', methods=['POST']) def upload(dir): From 88836675ff543e4317077ba1a086f66ee563699c Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Sun, 19 Feb 2023 18:49:58 -0500 Subject: [PATCH 02/43] Remove checkout dev comment from FRI readme --- fri/README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/fri/README.md b/fri/README.md index ae129fd..f591bc2 100644 --- a/fri/README.md +++ b/fri/README.md @@ -15,8 +15,6 @@ To run the FRI as a server: ```` $ cd conore/fri -$ git checkout dev - $ cd server $ python3 main.py From 8b12c998763454b038f4843998a6c6d7c0b120e2 Mon Sep 17 00:00:00 2001 From: parteekcoder <100110395+parteekcoder@users.noreply.github.com> Date: Mon, 20 Feb 2023 19:34:11 +0530 Subject: [PATCH 03/43] Update DOCKER-README.md --- fri/DOCKER-README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fri/DOCKER-README.md b/fri/DOCKER-README.md index c5be403..84f7bf8 100644 --- a/fri/DOCKER-README.md +++ b/fri/DOCKER-README.md @@ -67,7 +67,7 @@ $ docker run -d --name kong \ Start FRI container ```` -$ nohup sudo docker run --name fri -p 8090:8081 fri > controlcore.out & +$ nohup sudo docker run --name fri -p 8090:8080 fri > controlcore.out & ```` Delete if there is a previously configured Kong service. If not, skip this step. First you need to find the ID-VALUE for the route with a GET command before deleting the route and service. From 8fa6bb3162051ba7329a4b91f8f0461cf5bceca8 Mon Sep 17 00:00:00 2001 From: Rahul Date: Wed, 22 Feb 2023 03:50:33 +0530 Subject: [PATCH 04/43] Windows for concore configured --- fri/server/main.py | 74 ++-- fri/test.py | 49 ++- fri/u | 1 + sample/CZ/__pycache__/concore.cpython-311.pyc | Bin 0 -> 5655 bytes sample/CZ/concore.iport | 1 + sample/CZ/concore.oport | 1 + sample/CZ/concore.py | 113 ++++++ sample/CZ/controller.py | 32 ++ sample/PZ/__pycache__/concore.cpython-311.pyc | Bin 0 -> 5655 bytes sample/PZ/concore.iport | 1 + sample/PZ/concore.oport | 1 + sample/PZ/concore.py | 113 ++++++ sample/PZ/pm.py | 27 ++ sample/build.bat | 24 ++ sample/clear.bat | 2 + sample/debug.bat | 2 + sample/maxtime.bat | 2 + sample/params.bat | 2 + sample/run.bat | 2 + sample/src/concore.hpp | 228 ++++++++++++ sample/src/concore.py | 113 ++++++ sample/src/concore.v | 351 ++++++++++++++++++ sample/src/concore_default_maxtime.m | 12 + sample/src/concore_initval.m | 6 + sample/src/concore_iport.m | 17 + sample/src/concore_oport.m | 17 + sample/src/concore_read.m | 22 ++ sample/src/concore_unchanged.m | 16 + sample/src/concore_write.m | 11 + sample/src/controller.iport | 1 + sample/src/controller.oport | 1 + sample/src/controller.py | 32 ++ sample/src/import_concore.m | 42 +++ sample/src/mkcompile | 7 + sample/src/pm.iport | 1 + sample/src/pm.oport | 1 + sample/src/pm.py | 27 ++ sample/stop.bat | 4 + sample/unlock.bat | 2 + test_xyz/controller.py | 32 ++ test_xyz/pm.py | 27 ++ test_xyz/sample.graphml | 137 +++++++ 42 files changed, 1500 insertions(+), 54 deletions(-) create mode 100644 fri/u create mode 100644 sample/CZ/__pycache__/concore.cpython-311.pyc create mode 100644 sample/CZ/concore.iport create mode 100644 sample/CZ/concore.oport create mode 100644 sample/CZ/concore.py create mode 100644 sample/CZ/controller.py create mode 100644 sample/PZ/__pycache__/concore.cpython-311.pyc create mode 100644 sample/PZ/concore.iport create mode 100644 sample/PZ/concore.oport create mode 100644 sample/PZ/concore.py create mode 100644 sample/PZ/pm.py create mode 100644 sample/build.bat create mode 100644 sample/clear.bat create mode 100644 sample/debug.bat create mode 100644 sample/maxtime.bat create mode 100644 sample/params.bat create mode 100644 sample/run.bat create mode 100644 sample/src/concore.hpp create mode 100644 sample/src/concore.py create mode 100644 sample/src/concore.v create mode 100644 sample/src/concore_default_maxtime.m create mode 100644 sample/src/concore_initval.m create mode 100644 sample/src/concore_iport.m create mode 100644 sample/src/concore_oport.m create mode 100644 sample/src/concore_read.m create mode 100644 sample/src/concore_unchanged.m create mode 100644 sample/src/concore_write.m create mode 100644 sample/src/controller.iport create mode 100644 sample/src/controller.oport create mode 100644 sample/src/controller.py create mode 100644 sample/src/import_concore.m create mode 100644 sample/src/mkcompile create mode 100644 sample/src/pm.iport create mode 100644 sample/src/pm.oport create mode 100644 sample/src/pm.py create mode 100644 sample/stop.bat create mode 100644 sample/unlock.bat create mode 100644 test_xyz/controller.py create mode 100644 test_xyz/pm.py create mode 100644 test_xyz/sample.graphml diff --git a/fri/server/main.py b/fri/server/main.py index 51f8f97..a548d34 100644 --- a/fri/server/main.py +++ b/fri/server/main.py @@ -1,10 +1,11 @@ from flask import Flask, request, jsonify, send_file, send_from_directory from werkzeug.utils import secure_filename import os +import subprocess from subprocess import call from pathlib import Path import json -import subprocess +import platform from flask_cors import CORS, cross_origin cur_path = os.path.dirname(os.path.abspath(__file__)) @@ -21,8 +22,10 @@ @app.route('/upload/', methods=['POST']) def upload(dir): apikey = request.args.get('apikey') - dirname = secure_filename(dir) + "_" + apikey - + if(apikey == None): + dirname = secure_filename(dir) + else: + dirname = secure_filename(dir) + "_" + apikey if 'files[]' not in request.files: resp = jsonify({'message': 'No file in the request'}) resp.status_code = 400 @@ -38,7 +41,6 @@ def upload(dir): if not os.path.isdir(directory_name): os.mkdir(directory_name) - for file in files: if file: filename = secure_filename(file.filename) @@ -60,32 +62,42 @@ def upload(dir): return resp - # to download /build/?fetch=. For example, /build/test?fetch=sample1&apikey=xyz @app.route('/build/', methods=['POST']) def build(dir): graphml_file = request.args.get('fetch') apikey = request.args.get('apikey') - dirname = secure_filename(dir) + "_" + apikey + if(apikey == None): + dirname = secure_filename(dir) + else: + dirname = secure_filename(dir) + "_" + apikey makestudy_dir = dirname + "/" + graphml_file #for makestudy dir_path = os.path.abspath(os.path.join(concore_path, graphml_file)) #path for ./build if not os.path.exists(dir_path): - proc = call(["./makestudy", makestudy_dir], cwd=concore_path) + if(platform.uname()[0]=='Windows'): + proc= call(["makestudy", makestudy_dir], shell=True, cwd=concore_path) + else: + proc = call(["./makestudy", makestudy_dir], cwd=concore_path) if(proc == 0): resp = jsonify({'message': 'Directory successfully created'}) resp.status_code = 201 else: resp = jsonify({'message': 'There is an Error'}) - resp.status_code = 500 - call(["./build"], cwd=dir_path) + resp.status_code = 500 + if(platform.uname()[0]=='Windows'): + call(["build"], cwd=dir_path, shell=True) + else: + call(["./build"], cwd=dir_path) return resp - @app.route('/debug/', methods=['POST']) def debug(dir): - dir = secure_filename(dir) - dir_path = os.path.abspath(os.path.join(concore_path, dir)) - proc = call(["./debug"], cwd=dir_path) + dir_name = secure_filename(dir) + dir_path = os.path.abspath(os.path.join(concore_path, dir_name)) + if(platform.uname()[0]=='Windows'): + proc=call(["debug"],shell=True, cwd=dir_path) + else: + proc = call(["./debug"], cwd=dir_path) if(proc == 0): resp = jsonify({'message': 'Close the pop window after obtaining result'}) resp.status_code = 201 @@ -95,12 +107,14 @@ def debug(dir): resp.status_code = 500 return resp - @app.route('/run/', methods=['POST']) def run(dir): - dir = secure_filename(dir) - dir_path = os.path.abspath(os.path.join(concore_path, dir)) - proc = call(["./run"], cwd=dir_path) + dir_name = secure_filename(dir) + dir_path = os.path.abspath(os.path.join(concore_path, dir_name)) + if(platform.uname()[0]=='Windows'): + proc=call(["run"],shell=True, cwd=dir_path) + else: + proc = call(["./run"], cwd=dir_path) if(proc == 0): resp = jsonify({'message': 'result prepared'}) resp.status_code = 201 @@ -112,9 +126,12 @@ def run(dir): @app.route('/stop/', methods=['POST']) def stop(dir): - dir = secure_filename(dir) - dir_path = os.path.abspath(os.path.join(concore_path, dir)) - proc = call(["./stop"], cwd=dir_path) + dir_name = secure_filename(dir) + dir_path = os.path.abspath(os.path.join(concore_path, dir_name)) + if(platform.uname()[0]=='Windows'): + proc=call(["stop"],shell=True, cwd=dir_path) + else: + proc = call(["./stop"], cwd=dir_path) if(proc == 0): resp = jsonify({'message': 'resources cleaned'}) resp.status_code = 201 @@ -127,9 +144,12 @@ def stop(dir): @app.route('/clear/', methods=['POST']) def clear(dir): - dir = secure_filename(dir) - dir_path = os.path.abspath(os.path.join(concore_path, dir)) - proc = call(["./clear"], cwd=dir_path) + dir_name = secure_filename(dir) + dir_path = os.path.abspath(os.path.join(concore_path, dir_name)) + if(platform.uname()[0]=='Windows'): + proc=call(["clear"],shell=True, cwd=dir_path) + else: + proc = call(["./clear"], cwd=dir_path) if(proc == 0): resp = jsonify({'message': 'result deleted'}) resp.status_code = 201 @@ -157,11 +177,13 @@ def download(dir): resp.status_code = 400 return resp - @app.route('/destroy/', methods=['DELETE']) def destroy(dir): dir = secure_filename(dir) - proc = call(["./destroy", dir], cwd=concore_path) + if(platform.uname()[0]=='Windows'): + proc=call(["destroy"],shell=True, cwd=concore_path) + else: + proc = call(["./destroy"], cwd=concore_path) if(proc == 0): resp = jsonify({'message': 'Successfuly deleted Dirctory'}) resp.status_code = 201 @@ -181,7 +203,6 @@ def getFilesList(dir): res = json.dumps(res) return res - @app.route('/openJupyter/', methods=['POST']) def openJupyter(): proc = subprocess.Popen(['jupyter', 'lab'], shell=False, stdout=subprocess.PIPE, cwd=concore_path) @@ -195,6 +216,5 @@ def openJupyter(): return resp - if __name__ == "__main__": app.run(host="0.0.0.0", port=5000) diff --git a/fri/test.py b/fri/test.py index 684c6ef..8204c68 100644 --- a/fri/test.py +++ b/fri/test.py @@ -13,7 +13,6 @@ def upload(files): response = requests.request("POST", url, headers=headers, data=payload, files=files) print(response.text) - # # ******* # function to check build @@ -23,37 +22,36 @@ def build(dir, graphml, apikey): print(response.text) # function to debug -def debug(graphml): - url = "http://127.0.0.1:5000/debug/"+graphml +def debug(graphml, apikey): + url = "http://127.0.0.1:5000/debug/"+graphml+"?"+"apikey="+apikey response = requests.request("POST", url) print(response.text) # function to test run() method. -def run(graphml): - url = "http://127.0.0.1:5000/run/"+graphml +def run(graphml, apikey): + url = "http://127.0.0.1:5000/run/"+graphml+"?"+"apikey="+apikey response = requests.request("POST", url) print(response.text) -def clear(graphml): - url = "http://127.0.0.1:5000/clear/"+graphml +def clear(graphml, apikey): + url = "http://127.0.0.1:5000/clear/"+graphml+"?"+"apikey="+apikey response = requests.request("POST", url) print(response.text) -def stop(graphml): - url = "http://127.0.0.1:5000/stop/"+graphml +def stop(graphml, apikey): + url = "http://127.0.0.1:5000/stop/"+graphml+"?"+"apikey="+apikey response = requests.request("POST", url) print(response.text) - #function to destroy dir. -def destroy(dir): - url = "http://127.0.0.1:5000/destroy/" + dir +def destroy(dir, apikey): + url = "http://127.0.0.1:5000/destroy/" + dir+"?"+"apikey="+apikey response = requests.request("DELETE", url) print(response.text) -def getFilesList(dir, sub_dir = ""): - url = "http://127.0.0.1:5000/getFilesList/" + dir + "?"+"fetch="+sub_dir +def getFilesList(apikey, dir, sub_dir = ""): + url = "http://127.0.0.1:5000/getFilesList/" + dir + "?"+"fetch="+sub_dir+"&"+"apikey="+apikey response = requests.request("POST", url) print(response.text) @@ -63,8 +61,8 @@ def openJupyter(): print(response.text) # function to test download() method. -def download(dir, subDir, fileName ): - url = "http://127.0.0.1:5000/download/"+dir+"?"+"fetchDir="+subDir+"&"+"fetch="+ fileName +def download(dir, subDir, fileName , apikey ): + url = "http://127.0.0.1:5000/download/"+dir+"?"+"fetchDir="+subDir+"&"+"fetch="+ fileName+"&"+"apikey="+apikey urllib.request.urlretrieve(url, fileName) # file list to be uploaded @@ -83,25 +81,22 @@ def download(dir, subDir, fileName ): ('files[]',(file_name3,open(path_file3,'rb'),'application/octet-stream')), ] - upload(files) time.sleep(2) build("test", "sample", "xyz") time.sleep(6) method = input("methods - 1 for debug, 0 for run :") if method == "1": - debug("sample") + debug("sample", "xyz") else: - run("sample") + run("sample", "xyz") time.sleep(2) -stop("sample") +stop("sample", "xyz") time.sleep(2) -getFilesList("sample", "cu") -getFilesList("sample", "pym") +getFilesList("xyz", "sample", "CU") +getFilesList("xyz","sample", "PYM") time.sleep(5) -download("sample", "cu", "u") -clear("sample") -destroy("sample") +download("sample", "CU", "u", "xyz") +clear("sample", "xyz") +destroy("sample", "xyz") openJupyter() - - diff --git a/fri/u b/fri/u new file mode 100644 index 0000000..d7c144c --- /dev/null +++ b/fri/u @@ -0,0 +1 @@ +[44.0, 0.5548107472306294] \ No newline at end of file diff --git a/sample/CZ/__pycache__/concore.cpython-311.pyc b/sample/CZ/__pycache__/concore.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a191b6d28ab4ed248c038b96e9d2fe9e22430dd8 GIT binary patch literal 5655 zcmb^#TWk|o_TG7T#*RIHCvhOe#33O-62c={pird=$u4R`tI$?>k*cZ3fWdLHGm}u< zu<{~SGF7U2S4E_|Me9l}o2r$TkNv3jtF%@7>p>&c8Y$Y9R{h}56|IEOe(br|kBk$j zsCMso&fLej_ndp~d0qe2<8dJ<2gZL)q*@UAH)+(1RI5Cwun65m3Q}+y#j9T&$Ixcd z%q$ycakY<&a}J4-oLkr$&$-+kw2yE^L9x-{EDPxpriJ@VnahI4k*wg3|#^^M{@Hi3B zWGTO5^GZc`ja1X;r+A8cGX5B>39CuXcyZ5ZlwqrsZ4{mVGez$cDSFo_DlXXvuU~12 z2NWa+6?Z(Oc;qnUL`a4dX|o)kX7};dWUGQA4f!bEi&O{HKIm^z@b8)Ru_|t|wb<4` zw^bBxvm`dn^j!qqL`XdavTaxV$=1yr!^sC=l)um*ssxqLhMus}x}m2{aV1-C!|I<< z3WUl}wW!{;6Bs8ewJVXw^HM!!Sh-1S;~klBO+(t1j>pejKes2IZO1x}vgI0zZ&9`a z+zR|`RXUp~f>gG_Sf|nj(5-YU(Q7#FRJKEFn}TOhf9yWl@^nA8-075_ROR$*$wfJB z`OhWwOR0=9cS&1Js##}x{bVP?HqeCzLY9jgw zyRx1d=3r`mPSw|&bEIjZ`^1d1+~80uljR48<`(pZ;f#e-8d*LXeYE@d;WOhP zs`0AC&eZmHMw4gf)5$aA@p{kT{AEkj)ys4lH3YMV;niXQa;Uf@ynL7=Ahv3$o`VB0PIqsh|l zV@A(0qw86->)CI+Chm1j7+sTQ*Q61cG6Pe2fjm^g9pylz+Jp{}F^N}KM-HQZaATOg zuRtpSZ=;YCC;UHn2EffG71C|WR&$M3z@`uIdd+lsNK*x2CqgcIrN>-^7cztFI5oFhs$m$kIUX*UjNSP%X4LK zD8Ha?2egF!C>sj$ACM=oO{7{Y7aDcDa%}V~U@e5(TG5Fn*6WQ3j?mJE_)PsLRkNkX zDBBfwi7gV&HkD?DyTWCh)FPQHpkVdLs(aU`Epg5KDopJFPW=3xJ}pnWZ=JrvW<3bW z;?wYS=Y$?upSi@*nNB@y?`z)86<)W+QN7)U$t$*~+nfc-?j>Gf6=aXDRP7$&A(g1A zN)EB#V{ybREnZ6}lk*m@B-8R`wUvw$q86*^s!B*&Y#I#Kr6$3DCFT|~y4ppMs4=r( zk(QvPW~qfcERK49E+fOjLMoHeVG&~MXH)5<#ilZv#iue5cQkVPQCg_ZQ$iG+fC25F z06^P0@!E;E7Yr_Ja^Vset}qpBR zMockM5+hAZtcihweBGOO{V1RoX~WDPMZ`Pu!QcHdH@4<(UkMuSPSf3)JH96QZ}hF~ zDB|~b8dA)ZV!5eui?84>1PX!WLnSVx5$pN$v9S(xw}TstvI!2_^+GI;I-3HVSF_bF zF?N^IeDZ3i&exYf=t9E}DA;bdS-@%5Gsv4q?DhgQ=slvkRx^!;g>~wn`Sk*K1Mnv6 zc{@gSi)glLl8x*B`b-E-Hmk6QtjGEkj(C=;PuYC$xWYZ{F4RLyT+y~i8#fK90cXS- zYGsKfl+WQMW^?e|wD;zD#6z@X!cU^O#B7`o_bzyvQ}gqX z-1WOHS4smvpv##=Qr$@~b`a1@Kp(;7$PyMmuck7(#rrBkP536MY1l!2!-)jfa= zImG~(I7lY4B%dX2OqVG#@i`hHZ*wz82sQz~hF2rnLV~Kl5WA5ugbq{as34B_Qg=`o zzVY%OMh$U`DQ+pz-03t zRh_VsFnrynue;>yuC&0~lmG?a6H-4Au-^B?8aT=)j?saK6*qv>qHf&NnB%#7e1$oPf#(54pj+UBOH6PeJ3lh-A`cHpNGF+7=uc8s4fp z##k-20QVYbm`d`$TK->6*Jzw0BV#a0`Bp z*Hx10(CZ3KxoJ8|x2Zffm3lKt|d2`-(T{@47SH)iLv2hWv3?}DoI^M)^PTi!~!vYY?UjE z?sr^oxk^FE2a4M2q1An#9{Tvmr$>ywQL}H<2#$Wn8Np`^@u(>tEr~~gFa8*vO2PMJ zkska28IeIVGWcy||Gmh5BXZD;95mb`rh6oJJa?RA zBLvx(pSV7`JW0Bs6HJZyKdj+EypY3X!I=YrICFg2BjsFWr#I&)yZkw!;*fBtECupP zVWiZt#|Z8*qybYJ_*U9?Pugcl2TbVzD5wAmdM#U+xhJ#}|272oq?PR}-7DSi?#>I< z#?)V)|I_oUL1XKHxpkn_F<=G;VMve)v8%r&3Dr;;yaHd6dWx?a(jG$`FvWqAI8Y9> z78VQYyNfG{Vo!0gsD8M(nz++*XYr2u_r=c=pLc)$sxkV4Ir@UpH*NM!8*L}ewv$HS zWa-5jBQOILs;kC|=Ya8s!zI_}-m<^5uyy5};qNv5y?OAyH0|r9GxC`gV57$ncbMXi zQvC-)Ct}AS5|2NB>iR3oujD4lL%KN*`@jj;fse-!85+QiurKE=um%d5C{#kB3Mb%j z1vNmxOPUSP?ZqRcX$RdL4iX9*fi?}s^S6Ct1MJ-aZfsb%djJ!7sQ0-j`XcInZjk+A uU+;JXeHn3&_px7&J~uEWps#ndOb(;3_hM2X_D!+uH<*X|H-dXA%>EYvrKDs4 literal 0 HcmV?d00001 diff --git a/sample/CZ/concore.iport b/sample/CZ/concore.iport new file mode 100644 index 0000000..dcee8c5 --- /dev/null +++ b/sample/CZ/concore.iport @@ -0,0 +1 @@ +{'PYM': 1} \ No newline at end of file diff --git a/sample/CZ/concore.oport b/sample/CZ/concore.oport new file mode 100644 index 0000000..f6d3892 --- /dev/null +++ b/sample/CZ/concore.oport @@ -0,0 +1 @@ +{'CU': 1} \ No newline at end of file diff --git a/sample/CZ/concore.py b/sample/CZ/concore.py new file mode 100644 index 0000000..9375b9c --- /dev/null +++ b/sample/CZ/concore.py @@ -0,0 +1,113 @@ +import time +import os +from ast import literal_eval +import sys +import re + +#if windows, create script to kill this process +# because batch files don't provide easy way to know pid of last command +# ignored for posix!=windows, because "concorepid" is handled by script +# ignored for docker (linux!=windows), because handled by docker stop +if hasattr(sys, 'getwindowsversion'): + with open("concorekill.bat","w") as fpid: + fpid.write("taskkill /F /PID "+str(os.getpid())+"\n") + +try: + iport = literal_eval(open("concore.iport").read()) +except: + iport = dict() +try: + oport = literal_eval(open("concore.oport").read()) +except: + oport = dict() + + +s = '' +olds = '' +delay = 1 +retrycount = 0 +inpath = "./in" #must be rel path for local +outpath = "./out" + +#9/21/22 +try: + sparams = open(inpath+"1/concore.params").read() + if sparams[0] == '"': #windows keeps "" need to remove + sparams = sparams[1:] + sparams = sparams[0:sparams.find('"')] + if sparams != '{': + print("converting sparams: "+sparams) + sparams = "{'"+re.sub(';',",'",re.sub('=',"':",re.sub(' ','',sparams)))+"}" + print("converted sparams: " + sparams) + try: + params = literal_eval(sparams) + except: + print("bad params: "+sparams) +except: + params = dict() +#9/30/22 +def tryparam(n,i): + try: + return params[n] + except: + return i + + +#9/12/21 +def default_maxtime(default): + global maxtime + try: + maxtime = literal_eval(open(inpath+"1/concore.maxtime").read()) + except: + maxtime = default +default_maxtime(100) + +def unchanged(): + global olds,s + if olds==s: + s = '' + return True + else: + olds = s + return False + +def read(port, name, initstr): + global s,simtime,retrycount + time.sleep(delay) + try: + infile = open(inpath+str(port)+"/"+name); + ins = infile.read() + except: + ins = initstr + while len(ins)==0: + time.sleep(delay) + ins = infile.read() + retrycount += 1 + s += ins + inval = literal_eval(ins) + simtime = max(simtime,inval[0]) + return inval[1:] + +def write(port, name, val, delta=0): + global outpath,simtime + if isinstance(val,str): + time.sleep(2*delay) + elif isinstance(val,list)==False: + print("mywrite must have list or str") + quit() + try: + with open(outpath+str(port)+"/"+name,"w") as outfile: + if isinstance(val,list): + outfile.write(str([simtime+delta]+val)) + simtime += delta + else: + outfile.write(val) + except: + print("skipping"+outpath+str(port)+"/"+name); + +def initval(simtime_val): + global simtime + val = literal_eval(simtime_val) + simtime = val[0] + return val[1:] + diff --git a/sample/CZ/controller.py b/sample/CZ/controller.py new file mode 100644 index 0000000..945748e --- /dev/null +++ b/sample/CZ/controller.py @@ -0,0 +1,32 @@ +import numpy as np +import concore + +ysp = 3.0 + +# controller function +def controller(ym): + if ym[0] < ysp: + return 1.01 * ym + else: + return 0.9 * ym + +# main +concore.default_maxtime(150) +concore.delay = 0.02 + +# initial values -- transforms to string including the simtime as the 0th entry in the list +init_simtime_u = "[0.0, 0.0]" +init_simtime_ym = "[0.0, 0.0]" + +u = np.array([concore.initval(init_simtime_u)]).T +while(concore.simtime iport; + map oport; + + //Constructor to put in iport and oport values in map + Concore(){ + iport = mapParser("concore.iport"); + oport = mapParser("concore.oport"); + } + + map mapParser(string filename){ + map ans; + + ifstream portfile; + string portstr; + portfile.open(filename); + if(portfile){ + ostringstream ss; + ss << portfile.rdbuf(); + portstr = ss.str(); + portfile.close(); + } + + portstr[portstr.size()-1]=','; + portstr+='}'; + int i=0; + string portname=""; + string portnum=""; + + while(portstr[i]!='}'){ + if(portstr[i]=='\''){ + i++; + while(portstr[i]!='\''){ + portname+=portstr[i]; + i++; + } + ans.insert({portname,0}); + } + + if(portstr[i]==':'){ + i++; + while(portstr[i]!=','){ + portnum+=portstr[i]; + i++; + } + ans[portname]=stoi(portnum); + portnum=""; + portname=""; + } + i++; + } + return ans; + } + + //function to compare and determine whether file content has been changed + bool unchanged(){ + if(olds.compare(s)==0){ + s = ""; + return true; + } + else{ + olds = s; + return false; + } + } + + vector parser(string f){ + vector temp; + string value = ""; + + //Changing last bracket to comma to use comma as a delimiter + f[f.length()-1]=','; + + for(int i=1;i read(int port, string name, string initstr){ + chrono::milliseconds timespan((int)(1000*delay)); + this_thread::sleep_for(timespan); + string ins; + try { + ifstream infile; + infile.open(inpath+to_string(port)+"/"+name, ios::in); + if(infile) { + ostringstream ss; + ss << infile.rdbuf(); // reading data + ins = ss.str(); //saving data as string + infile.close(); + } + else { + throw 505;} + } + catch (...) { + ins = initstr; + } + + while ((int)ins.length()==0){ + this_thread::sleep_for(timespan); + try{ + ifstream infile; + infile.open(inpath+to_string(port)+"/"+name, ios::in); + if(infile) { + ostringstream ss; + ss << infile.rdbuf(); // reading data + ins = ss.str(); + retrycount++; + infile.close(); + } + else{ + retrycount++; + throw 505; + } + } + //observed retry count in C++ from various tests is approx 80. + catch(...){ + cout<<"Read error"; + } + + + } + s += ins; + + + vector inval = parser(ins); + simtime = simtime > inval[0] ? simtime : inval[0]; + + //returning a string with data excluding simtime + inval.erase(inval.begin()); + return inval; + + } + + //write method, accepts a vector double and writes it to the file + void write(int port, string name, vector val, int delta=0){ + + try { + ofstream outfile; + outfile.open(outpath+to_string(port)+"/"+name, ios::out); + if(outfile){ + val.insert(val.begin(),simtime+delta); + outfile<<'['; + for(int i=0;i initval(string f){ + //parsing + vector val = parser(f); + + //determining simtime + simtime = val[0]; + + //returning the rest of the values(except simtime) in val + val.erase(val.begin()); + return val; + } + +}; diff --git a/sample/src/concore.py b/sample/src/concore.py new file mode 100644 index 0000000..9375b9c --- /dev/null +++ b/sample/src/concore.py @@ -0,0 +1,113 @@ +import time +import os +from ast import literal_eval +import sys +import re + +#if windows, create script to kill this process +# because batch files don't provide easy way to know pid of last command +# ignored for posix!=windows, because "concorepid" is handled by script +# ignored for docker (linux!=windows), because handled by docker stop +if hasattr(sys, 'getwindowsversion'): + with open("concorekill.bat","w") as fpid: + fpid.write("taskkill /F /PID "+str(os.getpid())+"\n") + +try: + iport = literal_eval(open("concore.iport").read()) +except: + iport = dict() +try: + oport = literal_eval(open("concore.oport").read()) +except: + oport = dict() + + +s = '' +olds = '' +delay = 1 +retrycount = 0 +inpath = "./in" #must be rel path for local +outpath = "./out" + +#9/21/22 +try: + sparams = open(inpath+"1/concore.params").read() + if sparams[0] == '"': #windows keeps "" need to remove + sparams = sparams[1:] + sparams = sparams[0:sparams.find('"')] + if sparams != '{': + print("converting sparams: "+sparams) + sparams = "{'"+re.sub(';',",'",re.sub('=',"':",re.sub(' ','',sparams)))+"}" + print("converted sparams: " + sparams) + try: + params = literal_eval(sparams) + except: + print("bad params: "+sparams) +except: + params = dict() +#9/30/22 +def tryparam(n,i): + try: + return params[n] + except: + return i + + +#9/12/21 +def default_maxtime(default): + global maxtime + try: + maxtime = literal_eval(open(inpath+"1/concore.maxtime").read()) + except: + maxtime = default +default_maxtime(100) + +def unchanged(): + global olds,s + if olds==s: + s = '' + return True + else: + olds = s + return False + +def read(port, name, initstr): + global s,simtime,retrycount + time.sleep(delay) + try: + infile = open(inpath+str(port)+"/"+name); + ins = infile.read() + except: + ins = initstr + while len(ins)==0: + time.sleep(delay) + ins = infile.read() + retrycount += 1 + s += ins + inval = literal_eval(ins) + simtime = max(simtime,inval[0]) + return inval[1:] + +def write(port, name, val, delta=0): + global outpath,simtime + if isinstance(val,str): + time.sleep(2*delay) + elif isinstance(val,list)==False: + print("mywrite must have list or str") + quit() + try: + with open(outpath+str(port)+"/"+name,"w") as outfile: + if isinstance(val,list): + outfile.write(str([simtime+delta]+val)) + simtime += delta + else: + outfile.write(val) + except: + print("skipping"+outpath+str(port)+"/"+name); + +def initval(simtime_val): + global simtime + val = literal_eval(simtime_val) + simtime = val[0] + return val[1:] + diff --git a/sample/src/concore.v b/sample/src/concore.v new file mode 100644 index 0000000..4c1ab08 --- /dev/null +++ b/sample/src/concore.v @@ -0,0 +1,351 @@ +`define CONCORE_MAXLEN 150 +`define INPATHLEN 6 //includes trailing portdigit and "/" +`define OUTPATHLEN 7 //modify these to match inpath and outpath +`define MAXFILES 9 +module concore; + integer datasize; + real data[9:0]; + integer filenum=-1; + reg[`CONCORE_MAXLEN*8-1:0] curs; + reg[`CONCORE_MAXLEN*8-1:0] s[`MAXFILES-1:0]; + reg[`CONCORE_MAXLEN*8-1:0] olds[`MAXFILES-1:0]; + integer lens[`MAXFILES-1:0]; + integer oldlens[`MAXFILES-1:0]; + reg[(`INPATHLEN-2)*8-1:0] inpath = "./in"; //omits trailing portdigit and "/" + reg[(`OUTPATHLEN-2)*8-1:0] outpath = "./out"; + real simtime; + integer retrycount = 0; + + integer fin,fout; + integer i; + real dummy; + + integer iii; + initial + begin + for(iii=0; iii<`MAXFILES; iii = iii+1) + begin + s[iii] = 0; + olds[iii] = 0; + lens[iii] = 0; + oldlens[iii] = 0; + end + end + + function [0:0] unchanged; + input [0:0] dummy_arg; + reg nochange; + begin + nochange = 1; + for (i=0; i<=filenum; i=i+1) + begin +//$display("1oldl=%d l=%d olds=%s s=%s",oldlens[i],lens[i],olds[i],s[i]); + if (!((oldlens[i] == lens[i])&&(olds[i] == s[i]))) + nochange = 0; + end + if (nochange) + begin + for (i=0; i<=filenum; i=i+1) + s[i] = 0; + for (i=0; i<=filenum; i=i+1) + lens[i] = 0; + unchanged = 1; + filenum = -1; +//$display("unchanged"); + end + else + begin +// for (i=0; i<=filenum; i=i+1) +//$display("2oldl=%d l=%d olds=%s s=%s",oldlens[i],lens[i],olds[i],s[i]); + for (i=0; i<=filenum; i=i+1) + olds[i] = s[i]; + for (i=0; i<=filenum; i=i+1) + oldlens[i] = lens[i]; + unchanged = 0; +//$display("changed"); + end +// for (i=0; i<=filenum; i=i+1) +//$display("3oldl=%d l=%d olds=%s s=%s",oldlens[i],lens[i],olds[i],s[i]); +//$stop; +// filenum = -1; + end + endfunction + + function integer msbhelper; + input [`CONCORE_MAXLEN*8-1:0] s; + integer i,msb; + begin + //$display("help %s",s); + msb = 7; + for (i=8; i<`CONCORE_MAXLEN*8; i=i+1) + begin + if (s[i]) msb = i; + end + msbhelper = msb; + end + endfunction + + function integer lsbhelper; + input [`CONCORE_MAXLEN*8-1:0] s; + integer i,lsb; + begin + //$display("help %s",s); + lsb = 7; + for (i=`CONCORE_MAXLEN*8; i>=8; i=i-1) + begin + if (s[i]) lsb = i; + end + lsbhelper = lsb; + end + endfunction + + function [`CONCORE_MAXLEN*8-1:0] trim; + input [`CONCORE_MAXLEN*8-1:0] s; + integer msb; + begin + msb = msbhelper(s); + //$display("%s",s); + //$display(msb); + //$display(msb/8); + //$display(`CONCORE_MAXLEN - msb/8 -1); + trim = s << (8*(`CONCORE_MAXLEN - msb/8 -1)); + end + endfunction + + function integer len; + input [`CONCORE_MAXLEN*8-1:0] s; + integer msb; + begin + msb = msbhelper(s); + len = (msb/8)+1; + end + endfunction + + task readdata; //passed via global data and datasize (from literal_eval) + input integer port; + input [`CONCORE_MAXLEN*8-1:0] name; + input [`CONCORE_MAXLEN*8-1:0] initstr; + reg datavalid; + reg [(`CONCORE_MAXLEN+`INPATHLEN)*8-1:0] fname; //room for 6 extra chars + reg [7:0] asciiport; + integer i; + begin + filenum = filenum + 1; + if (filenum > `MAXFILES) + begin + $display("too many reads in loop"); + $finish; + end + s[filenum] = 0; + //olds[filenum] = 0; + lens[filenum] = 0; + //oldlens[filenum] = 0; + asciiport = "0"; + asciiport = asciiport + port; + fname = {inpath,asciiport,"/",trim(name)}; + datavalid = 0; + while(datavalid == 0) + begin + delayhelper; + //fin = $fopen(fname,"r"); + //fin = $fopen("./in1/ym","r"); + case (len(name)) + 1: fin = $fopen( + fname[(`CONCORE_MAXLEN+`INPATHLEN)*8-1:(`CONCORE_MAXLEN-1)*8],"r"); + 2: fin = $fopen( + fname[(`CONCORE_MAXLEN+`INPATHLEN)*8-1:(`CONCORE_MAXLEN-2)*8],"r"); + 3: fin = $fopen( + fname[(`CONCORE_MAXLEN+`INPATHLEN)*8-1:(`CONCORE_MAXLEN-3)*8],"r"); + 4: fin = $fopen( + fname[(`CONCORE_MAXLEN+`INPATHLEN)*8-1:(`CONCORE_MAXLEN-4)*8],"r"); + 5: fin = $fopen( + fname[(`CONCORE_MAXLEN+`INPATHLEN)*8-1:(`CONCORE_MAXLEN-5)*8],"r"); + 6: fin = $fopen( + fname[(`CONCORE_MAXLEN+`INPATHLEN)*8-1:(`CONCORE_MAXLEN-6)*8],"r"); + 7: fin = $fopen( + fname[(`CONCORE_MAXLEN+`INPATHLEN)*8-1:(`CONCORE_MAXLEN-7)*8],"r"); + 8: fin = $fopen( + fname[(`CONCORE_MAXLEN+`INPATHLEN)*8-1:(`CONCORE_MAXLEN-8)*8],"r"); + 9: fin = $fopen( + fname[(`CONCORE_MAXLEN+`INPATHLEN)*8-1:(`CONCORE_MAXLEN-9)*8],"r"); + 10: fin = $fopen( + fname[(`CONCORE_MAXLEN+`INPATHLEN)*8-1:(`CONCORE_MAXLEN-10)*8],"r"); + 11: fin = $fopen( + fname[(`CONCORE_MAXLEN+`INPATHLEN)*8-1:(`CONCORE_MAXLEN-11)*8],"r"); + 12: fin = $fopen( + fname[(`CONCORE_MAXLEN+`INPATHLEN)*8-1:(`CONCORE_MAXLEN-12)*8],"r"); + default: begin $display("filename too long:%s",name);$finish; end + endcase + datavalid = 0; + if (fin==0) + begin + lens[filenum] = 7;//actual len? + s[filenum] = trim(initstr); //"[0,0,0]"; + end + else + begin + lens[filenum] = $fgets(curs,fin); + s[filenum] = curs; + $fclose(fin); + end + //parse + literal_eval(datavalid,simtime); + if (datavalid == 0) + begin + retrycount = retrycount + 1; + end + //time + end //datavalid + end + endtask + + task write; //string argument only + input integer port; + input [`CONCORE_MAXLEN*8-1:0] name; + input [`CONCORE_MAXLEN*8-1:0] val; + reg [(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:0] fname; + reg [7:0] asciiport; + begin + asciiport = "0"; + asciiport = asciiport + port; + fname = {outpath,asciiport,"/",trim(name)}; + //$display("outfile=%s",fname); + delayhelper; + //fout = $fopen("./out1/u","w"); + //fout = $fopen(fname,"w"); + case (len(name)) + 1: fout = $fopen( + fname[(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:(`CONCORE_MAXLEN-1)*8],"w"); + 2: fout = $fopen( + fname[(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:(`CONCORE_MAXLEN-2)*8],"w"); + 3: fout = $fopen( + fname[(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:(`CONCORE_MAXLEN-3)*8],"w"); + 4: fout = $fopen( + fname[(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:(`CONCORE_MAXLEN-4)*8],"w"); + 5: fout = $fopen( + fname[(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:(`CONCORE_MAXLEN-5)*8],"w"); + 6: fout = $fopen( + fname[(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:(`CONCORE_MAXLEN-6)*8],"w"); + 7: fout = $fopen( + fname[(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:(`CONCORE_MAXLEN-7)*8],"w"); + 8: fout = $fopen( + fname[(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:(`CONCORE_MAXLEN-8)*8],"w"); + 9: fout = $fopen( + fname[(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:(`CONCORE_MAXLEN-9)*8],"w"); + 10: fout = $fopen( + fname[(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:(`CONCORE_MAXLEN-10)*8],"w"); + 11: fout = $fopen( + fname[(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:(`CONCORE_MAXLEN-11)*8],"w"); + 12: fout = $fopen( + fname[(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:(`CONCORE_MAXLEN-12)*8],"w"); + default: begin $display("filename too long:%s",name);$finish; end + endcase + $fdisplay(fout,"%s",trim(val)); + $fclose(fout); + end + endtask + + task writedata; //passed via global data and datasize + input integer port; + input [`CONCORE_MAXLEN*8-1:0] name; + input real delta; + reg [(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:0] fname; //room for 7 extra chars + reg [7:0] asciiport; + integer i; + real realdata; + begin + asciiport = "0"; + asciiport = asciiport + port; + fname = {outpath,asciiport,"/",trim(name)}; + //$display("outfile=%s",fname); + delayhelper; + //fout = $fopen("./out1/u","w"); + //fout = $fopen(fname,"w"); + case (len(name)) + 1: fout = $fopen( + fname[(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:(`CONCORE_MAXLEN-1)*8],"w"); + 2: fout = $fopen( + fname[(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:(`CONCORE_MAXLEN-2)*8],"w"); + 3: fout = $fopen( + fname[(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:(`CONCORE_MAXLEN-3)*8],"w"); + 4: fout = $fopen( + fname[(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:(`CONCORE_MAXLEN-4)*8],"w"); + 5: fout = $fopen( + fname[(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:(`CONCORE_MAXLEN-5)*8],"w"); + 6: fout = $fopen( + fname[(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:(`CONCORE_MAXLEN-6)*8],"w"); + 7: fout = $fopen( + fname[(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:(`CONCORE_MAXLEN-7)*8],"w"); + 8: fout = $fopen( + fname[(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:(`CONCORE_MAXLEN-8)*8],"w"); + 9: fout = $fopen( + fname[(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:(`CONCORE_MAXLEN-9)*8],"w"); + 10: fout = $fopen( + fname[(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:(`CONCORE_MAXLEN-10)*8],"w"); + 11: fout = $fopen( + fname[(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:(`CONCORE_MAXLEN-11)*8],"w"); + 12: fout = $fopen( + fname[(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:(`CONCORE_MAXLEN-12)*8],"w"); + default: begin $display("filename too long:%s",name);$finish; end + endcase + $fwrite(fout,"[%g",simtime+delta); + for (i=0; i + + + + + + + + + + + CZ:controller.py + + + + + + + + + + + PZ:pm.py + + + + + + + + + + CU + + + + + + + + + + + + PYM + + + + + + + + 1638390071794 + Pradeeban + + DEL_NODE + WyIyM2ZlODE5Yi1hMTZjLTQzY2ItOWQ5NC1mM2I1M2QwNjk4NWYiXQ== + + + ADD_NODE + WyJDWjpjb250cm9sbGVyLnB5Iix7IndpZHRoIjoxMzIsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MTAwLCJ5IjoxMDB9LHt9LCIyM2ZlODE5Yi1hMTZjLTQzY2ItOWQ5NC1mM2I1M2QwNjk4NWYiXQ== + + + + 1638390078744 + Pradeeban + + DEL_NODE + WyI5YzVlMTRjOC0xZjVjLTQyMGUtYTcyZC00NmIyZWZhMjQ0YTYiXQ== + + + ADD_NODE + WyJQWjpwbS5weSIseyJ3aWR0aCI6MTAwLCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjk5LCJ5IjoyNjJ9LHt9LCI5YzVlMTRjOC0xZjVjLTQyMGUtYTcyZC00NmIyZWZhMjQ0YTYiXQ== + + + + 1638390083602 + Pradeeban + + SET_POS + WyI5YzVlMTRjOC0xZjVjLTQyMGUtYTcyZC00NmIyZWZhMjQ0YTYiLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6OTksInkiOjI2Mn1d + + + SET_POS + WyI5YzVlMTRjOC0xZjVjLTQyMGUtYTcyZC00NmIyZWZhMjQ0YTYiLHsieCI6OTksInkiOjI2Mn0seyJ4IjoxMTAsInkiOjExMH1d + + + + 1638390087263 + Pradeeban + + DEL_EDGE + WyI0ZTY3NzY3Ny1jYmI5LTRlMGUtOGUwYS0zNDUxMDJkODIzYWYiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiIyM2ZlODE5Yi1hMTZjLTQzY2ItOWQ5NC1mM2I1M2QwNjk4NWYiLCJ0YXJnZXRJRCI6IjljNWUxNGM4LTFmNWMtNDIwZS1hNzJkLTQ2YjJlZmEyNDRhNiIsImxhYmVsIjoiQyIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2Y0NDMzNiIsInNoYXBlIjoic29saWQifSwiaWQiOiI0ZTY3NzY3Ny1jYmI5LTRlMGUtOGUwYS0zNDUxMDJkODIzYWYifV0= + + + + 1638390162285 + Pradeeban + + DEL_EDGE + WyI4NzRiYmZiNi02NTMwLTQxMzgtOTI4Zi1kMDI5NDEyZGQwN2UiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiI5YzVlMTRjOC0xZjVjLTQyMGUtYTcyZC00NmIyZWZhMjQ0YTYiLCJ0YXJnZXRJRCI6IjIzZmU4MTliLWExNmMtNDNjYi05ZDk0LWYzYjUzZDA2OTg1ZiIsImxhYmVsIjoiUCIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiIzgyNzcxNyIsInNoYXBlIjoic29saWQifSwiaWQiOiI4NzRiYmZiNi02NTMwLTQxMzgtOTI4Zi1kMDI5NDEyZGQwN2UifV0= + + + + 1638390238818 + Pradeeban + + UPDATE_EDGE + WyI0ZTY3NzY3Ny1jYmI5LTRlMGUtOGUwYS0zNDUxMDJkODIzYWYiLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZjQ0MzM2Iiwic2hhcGUiOiJzb2xpZCJ9LCJDIix0cnVlXQ== + + + UPDATE_EDGE + WyI0ZTY3NzY3Ny1jYmI5LTRlMGUtOGUwYS0zNDUxMDJkODIzYWYiLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZjQ0MzM2Iiwic2hhcGUiOiJzb2xpZCJ9LCJDVSIsdHJ1ZV0= + + + + 1638390244629 + Pradeeban + + UPDATE_EDGE + WyI4NzRiYmZiNi02NTMwLTQxMzgtOTI4Zi1kMDI5NDEyZGQwN2UiLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjODI3NzE3Iiwic2hhcGUiOiJzb2xpZCJ9LCJQIix0cnVlXQ== + + + UPDATE_EDGE + WyI4NzRiYmZiNi02NTMwLTQxMzgtOTI4Zi1kMDI5NDEyZGQwN2UiLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjODI3NzE3Iiwic2hhcGUiOiJzb2xpZCJ9LCJQWU0iLHRydWVd + + + + \ No newline at end of file From 74f9640d12995765c2ecf853c0091e5df7d6f64d Mon Sep 17 00:00:00 2001 From: Rahul Date: Wed, 22 Feb 2023 03:51:09 +0530 Subject: [PATCH 05/43] unnecessary files removed --- fri/u | 1 - sample/CZ/__pycache__/concore.cpython-311.pyc | Bin 5655 -> 0 bytes sample/CZ/concore.iport | 1 - sample/CZ/concore.oport | 1 - sample/CZ/concore.py | 113 ------ sample/CZ/controller.py | 32 -- sample/PZ/__pycache__/concore.cpython-311.pyc | Bin 5655 -> 0 bytes sample/PZ/concore.iport | 1 - sample/PZ/concore.oport | 1 - sample/PZ/concore.py | 113 ------ sample/PZ/pm.py | 27 -- sample/build.bat | 24 -- sample/clear.bat | 2 - sample/debug.bat | 2 - sample/maxtime.bat | 2 - sample/params.bat | 2 - sample/run.bat | 2 - sample/src/concore.hpp | 228 ------------ sample/src/concore.py | 113 ------ sample/src/concore.v | 351 ------------------ sample/src/concore_default_maxtime.m | 12 - sample/src/concore_initval.m | 6 - sample/src/concore_iport.m | 17 - sample/src/concore_oport.m | 17 - sample/src/concore_read.m | 22 -- sample/src/concore_unchanged.m | 16 - sample/src/concore_write.m | 11 - sample/src/controller.iport | 1 - sample/src/controller.oport | 1 - sample/src/controller.py | 32 -- sample/src/import_concore.m | 42 --- sample/src/mkcompile | 7 - sample/src/pm.iport | 1 - sample/src/pm.oport | 1 - sample/src/pm.py | 27 -- sample/stop.bat | 4 - sample/unlock.bat | 2 - test_xyz/controller.py | 32 -- test_xyz/pm.py | 27 -- test_xyz/sample.graphml | 137 ------- 40 files changed, 1431 deletions(-) delete mode 100644 fri/u delete mode 100644 sample/CZ/__pycache__/concore.cpython-311.pyc delete mode 100644 sample/CZ/concore.iport delete mode 100644 sample/CZ/concore.oport delete mode 100644 sample/CZ/concore.py delete mode 100644 sample/CZ/controller.py delete mode 100644 sample/PZ/__pycache__/concore.cpython-311.pyc delete mode 100644 sample/PZ/concore.iport delete mode 100644 sample/PZ/concore.oport delete mode 100644 sample/PZ/concore.py delete mode 100644 sample/PZ/pm.py delete mode 100644 sample/build.bat delete mode 100644 sample/clear.bat delete mode 100644 sample/debug.bat delete mode 100644 sample/maxtime.bat delete mode 100644 sample/params.bat delete mode 100644 sample/run.bat delete mode 100644 sample/src/concore.hpp delete mode 100644 sample/src/concore.py delete mode 100644 sample/src/concore.v delete mode 100644 sample/src/concore_default_maxtime.m delete mode 100644 sample/src/concore_initval.m delete mode 100644 sample/src/concore_iport.m delete mode 100644 sample/src/concore_oport.m delete mode 100644 sample/src/concore_read.m delete mode 100644 sample/src/concore_unchanged.m delete mode 100644 sample/src/concore_write.m delete mode 100644 sample/src/controller.iport delete mode 100644 sample/src/controller.oport delete mode 100644 sample/src/controller.py delete mode 100644 sample/src/import_concore.m delete mode 100644 sample/src/mkcompile delete mode 100644 sample/src/pm.iport delete mode 100644 sample/src/pm.oport delete mode 100644 sample/src/pm.py delete mode 100644 sample/stop.bat delete mode 100644 sample/unlock.bat delete mode 100644 test_xyz/controller.py delete mode 100644 test_xyz/pm.py delete mode 100644 test_xyz/sample.graphml diff --git a/fri/u b/fri/u deleted file mode 100644 index d7c144c..0000000 --- a/fri/u +++ /dev/null @@ -1 +0,0 @@ -[44.0, 0.5548107472306294] \ No newline at end of file diff --git a/sample/CZ/__pycache__/concore.cpython-311.pyc b/sample/CZ/__pycache__/concore.cpython-311.pyc deleted file mode 100644 index a191b6d28ab4ed248c038b96e9d2fe9e22430dd8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5655 zcmb^#TWk|o_TG7T#*RIHCvhOe#33O-62c={pird=$u4R`tI$?>k*cZ3fWdLHGm}u< zu<{~SGF7U2S4E_|Me9l}o2r$TkNv3jtF%@7>p>&c8Y$Y9R{h}56|IEOe(br|kBk$j zsCMso&fLej_ndp~d0qe2<8dJ<2gZL)q*@UAH)+(1RI5Cwun65m3Q}+y#j9T&$Ixcd z%q$ycakY<&a}J4-oLkr$&$-+kw2yE^L9x-{EDPxpriJ@VnahI4k*wg3|#^^M{@Hi3B zWGTO5^GZc`ja1X;r+A8cGX5B>39CuXcyZ5ZlwqrsZ4{mVGez$cDSFo_DlXXvuU~12 z2NWa+6?Z(Oc;qnUL`a4dX|o)kX7};dWUGQA4f!bEi&O{HKIm^z@b8)Ru_|t|wb<4` zw^bBxvm`dn^j!qqL`XdavTaxV$=1yr!^sC=l)um*ssxqLhMus}x}m2{aV1-C!|I<< z3WUl}wW!{;6Bs8ewJVXw^HM!!Sh-1S;~klBO+(t1j>pejKes2IZO1x}vgI0zZ&9`a z+zR|`RXUp~f>gG_Sf|nj(5-YU(Q7#FRJKEFn}TOhf9yWl@^nA8-075_ROR$*$wfJB z`OhWwOR0=9cS&1Js##}x{bVP?HqeCzLY9jgw zyRx1d=3r`mPSw|&bEIjZ`^1d1+~80uljR48<`(pZ;f#e-8d*LXeYE@d;WOhP zs`0AC&eZmHMw4gf)5$aA@p{kT{AEkj)ys4lH3YMV;niXQa;Uf@ynL7=Ahv3$o`VB0PIqsh|l zV@A(0qw86->)CI+Chm1j7+sTQ*Q61cG6Pe2fjm^g9pylz+Jp{}F^N}KM-HQZaATOg zuRtpSZ=;YCC;UHn2EffG71C|WR&$M3z@`uIdd+lsNK*x2CqgcIrN>-^7cztFI5oFhs$m$kIUX*UjNSP%X4LK zD8Ha?2egF!C>sj$ACM=oO{7{Y7aDcDa%}V~U@e5(TG5Fn*6WQ3j?mJE_)PsLRkNkX zDBBfwi7gV&HkD?DyTWCh)FPQHpkVdLs(aU`Epg5KDopJFPW=3xJ}pnWZ=JrvW<3bW z;?wYS=Y$?upSi@*nNB@y?`z)86<)W+QN7)U$t$*~+nfc-?j>Gf6=aXDRP7$&A(g1A zN)EB#V{ybREnZ6}lk*m@B-8R`wUvw$q86*^s!B*&Y#I#Kr6$3DCFT|~y4ppMs4=r( zk(QvPW~qfcERK49E+fOjLMoHeVG&~MXH)5<#ilZv#iue5cQkVPQCg_ZQ$iG+fC25F z06^P0@!E;E7Yr_Ja^Vset}qpBR zMockM5+hAZtcihweBGOO{V1RoX~WDPMZ`Pu!QcHdH@4<(UkMuSPSf3)JH96QZ}hF~ zDB|~b8dA)ZV!5eui?84>1PX!WLnSVx5$pN$v9S(xw}TstvI!2_^+GI;I-3HVSF_bF zF?N^IeDZ3i&exYf=t9E}DA;bdS-@%5Gsv4q?DhgQ=slvkRx^!;g>~wn`Sk*K1Mnv6 zc{@gSi)glLl8x*B`b-E-Hmk6QtjGEkj(C=;PuYC$xWYZ{F4RLyT+y~i8#fK90cXS- zYGsKfl+WQMW^?e|wD;zD#6z@X!cU^O#B7`o_bzyvQ}gqX z-1WOHS4smvpv##=Qr$@~b`a1@Kp(;7$PyMmuck7(#rrBkP536MY1l!2!-)jfa= zImG~(I7lY4B%dX2OqVG#@i`hHZ*wz82sQz~hF2rnLV~Kl5WA5ugbq{as34B_Qg=`o zzVY%OMh$U`DQ+pz-03t zRh_VsFnrynue;>yuC&0~lmG?a6H-4Au-^B?8aT=)j?saK6*qv>qHf&NnB%#7e1$oPf#(54pj+UBOH6PeJ3lh-A`cHpNGF+7=uc8s4fp z##k-20QVYbm`d`$TK->6*Jzw0BV#a0`Bp z*Hx10(CZ3KxoJ8|x2Zffm3lKt|d2`-(T{@47SH)iLv2hWv3?}DoI^M)^PTi!~!vYY?UjE z?sr^oxk^FE2a4M2q1An#9{Tvmr$>ywQL}H<2#$Wn8Np`^@u(>tEr~~gFa8*vO2PMJ zkska28IeIVGWcy||Gmh5BXZD;95mb`rh6oJJa?RA zBLvx(pSV7`JW0Bs6HJZyKdj+EypY3X!I=YrICFg2BjsFWr#I&)yZkw!;*fBtECupP zVWiZt#|Z8*qybYJ_*U9?Pugcl2TbVzD5wAmdM#U+xhJ#}|272oq?PR}-7DSi?#>I< z#?)V)|I_oUL1XKHxpkn_F<=G;VMve)v8%r&3Dr;;yaHd6dWx?a(jG$`FvWqAI8Y9> z78VQYyNfG{Vo!0gsD8M(nz++*XYr2u_r=c=pLc)$sxkV4Ir@UpH*NM!8*L}ewv$HS zWa-5jBQOILs;kC|=Ya8s!zI_}-m<^5uyy5};qNv5y?OAyH0|r9GxC`gV57$ncbMXi zQvC-)Ct}AS5|2NB>iR3oujD4lL%KN*`@jj;fse-!85+QiurKE=um%d5C{#kB3Mb%j z1vNmxOPUSP?ZqRcX$RdL4iX9*fi?}s^S6Ct1MJ-aZfsb%djJ!7sQ0-j`XcInZjk+A uU+;JXeHn3&_px7&J~uEWps#ndOb(;3_hM2X_D!+uH<*X|H-dXA%>EYvrKDs4 diff --git a/sample/CZ/concore.iport b/sample/CZ/concore.iport deleted file mode 100644 index dcee8c5..0000000 --- a/sample/CZ/concore.iport +++ /dev/null @@ -1 +0,0 @@ -{'PYM': 1} \ No newline at end of file diff --git a/sample/CZ/concore.oport b/sample/CZ/concore.oport deleted file mode 100644 index f6d3892..0000000 --- a/sample/CZ/concore.oport +++ /dev/null @@ -1 +0,0 @@ -{'CU': 1} \ No newline at end of file diff --git a/sample/CZ/concore.py b/sample/CZ/concore.py deleted file mode 100644 index 9375b9c..0000000 --- a/sample/CZ/concore.py +++ /dev/null @@ -1,113 +0,0 @@ -import time -import os -from ast import literal_eval -import sys -import re - -#if windows, create script to kill this process -# because batch files don't provide easy way to know pid of last command -# ignored for posix!=windows, because "concorepid" is handled by script -# ignored for docker (linux!=windows), because handled by docker stop -if hasattr(sys, 'getwindowsversion'): - with open("concorekill.bat","w") as fpid: - fpid.write("taskkill /F /PID "+str(os.getpid())+"\n") - -try: - iport = literal_eval(open("concore.iport").read()) -except: - iport = dict() -try: - oport = literal_eval(open("concore.oport").read()) -except: - oport = dict() - - -s = '' -olds = '' -delay = 1 -retrycount = 0 -inpath = "./in" #must be rel path for local -outpath = "./out" - -#9/21/22 -try: - sparams = open(inpath+"1/concore.params").read() - if sparams[0] == '"': #windows keeps "" need to remove - sparams = sparams[1:] - sparams = sparams[0:sparams.find('"')] - if sparams != '{': - print("converting sparams: "+sparams) - sparams = "{'"+re.sub(';',",'",re.sub('=',"':",re.sub(' ','',sparams)))+"}" - print("converted sparams: " + sparams) - try: - params = literal_eval(sparams) - except: - print("bad params: "+sparams) -except: - params = dict() -#9/30/22 -def tryparam(n,i): - try: - return params[n] - except: - return i - - -#9/12/21 -def default_maxtime(default): - global maxtime - try: - maxtime = literal_eval(open(inpath+"1/concore.maxtime").read()) - except: - maxtime = default -default_maxtime(100) - -def unchanged(): - global olds,s - if olds==s: - s = '' - return True - else: - olds = s - return False - -def read(port, name, initstr): - global s,simtime,retrycount - time.sleep(delay) - try: - infile = open(inpath+str(port)+"/"+name); - ins = infile.read() - except: - ins = initstr - while len(ins)==0: - time.sleep(delay) - ins = infile.read() - retrycount += 1 - s += ins - inval = literal_eval(ins) - simtime = max(simtime,inval[0]) - return inval[1:] - -def write(port, name, val, delta=0): - global outpath,simtime - if isinstance(val,str): - time.sleep(2*delay) - elif isinstance(val,list)==False: - print("mywrite must have list or str") - quit() - try: - with open(outpath+str(port)+"/"+name,"w") as outfile: - if isinstance(val,list): - outfile.write(str([simtime+delta]+val)) - simtime += delta - else: - outfile.write(val) - except: - print("skipping"+outpath+str(port)+"/"+name); - -def initval(simtime_val): - global simtime - val = literal_eval(simtime_val) - simtime = val[0] - return val[1:] - diff --git a/sample/CZ/controller.py b/sample/CZ/controller.py deleted file mode 100644 index 945748e..0000000 --- a/sample/CZ/controller.py +++ /dev/null @@ -1,32 +0,0 @@ -import numpy as np -import concore - -ysp = 3.0 - -# controller function -def controller(ym): - if ym[0] < ysp: - return 1.01 * ym - else: - return 0.9 * ym - -# main -concore.default_maxtime(150) -concore.delay = 0.02 - -# initial values -- transforms to string including the simtime as the 0th entry in the list -init_simtime_u = "[0.0, 0.0]" -init_simtime_ym = "[0.0, 0.0]" - -u = np.array([concore.initval(init_simtime_u)]).T -while(concore.simtime iport; - map oport; - - //Constructor to put in iport and oport values in map - Concore(){ - iport = mapParser("concore.iport"); - oport = mapParser("concore.oport"); - } - - map mapParser(string filename){ - map ans; - - ifstream portfile; - string portstr; - portfile.open(filename); - if(portfile){ - ostringstream ss; - ss << portfile.rdbuf(); - portstr = ss.str(); - portfile.close(); - } - - portstr[portstr.size()-1]=','; - portstr+='}'; - int i=0; - string portname=""; - string portnum=""; - - while(portstr[i]!='}'){ - if(portstr[i]=='\''){ - i++; - while(portstr[i]!='\''){ - portname+=portstr[i]; - i++; - } - ans.insert({portname,0}); - } - - if(portstr[i]==':'){ - i++; - while(portstr[i]!=','){ - portnum+=portstr[i]; - i++; - } - ans[portname]=stoi(portnum); - portnum=""; - portname=""; - } - i++; - } - return ans; - } - - //function to compare and determine whether file content has been changed - bool unchanged(){ - if(olds.compare(s)==0){ - s = ""; - return true; - } - else{ - olds = s; - return false; - } - } - - vector parser(string f){ - vector temp; - string value = ""; - - //Changing last bracket to comma to use comma as a delimiter - f[f.length()-1]=','; - - for(int i=1;i read(int port, string name, string initstr){ - chrono::milliseconds timespan((int)(1000*delay)); - this_thread::sleep_for(timespan); - string ins; - try { - ifstream infile; - infile.open(inpath+to_string(port)+"/"+name, ios::in); - if(infile) { - ostringstream ss; - ss << infile.rdbuf(); // reading data - ins = ss.str(); //saving data as string - infile.close(); - } - else { - throw 505;} - } - catch (...) { - ins = initstr; - } - - while ((int)ins.length()==0){ - this_thread::sleep_for(timespan); - try{ - ifstream infile; - infile.open(inpath+to_string(port)+"/"+name, ios::in); - if(infile) { - ostringstream ss; - ss << infile.rdbuf(); // reading data - ins = ss.str(); - retrycount++; - infile.close(); - } - else{ - retrycount++; - throw 505; - } - } - //observed retry count in C++ from various tests is approx 80. - catch(...){ - cout<<"Read error"; - } - - - } - s += ins; - - - vector inval = parser(ins); - simtime = simtime > inval[0] ? simtime : inval[0]; - - //returning a string with data excluding simtime - inval.erase(inval.begin()); - return inval; - - } - - //write method, accepts a vector double and writes it to the file - void write(int port, string name, vector val, int delta=0){ - - try { - ofstream outfile; - outfile.open(outpath+to_string(port)+"/"+name, ios::out); - if(outfile){ - val.insert(val.begin(),simtime+delta); - outfile<<'['; - for(int i=0;i initval(string f){ - //parsing - vector val = parser(f); - - //determining simtime - simtime = val[0]; - - //returning the rest of the values(except simtime) in val - val.erase(val.begin()); - return val; - } - -}; diff --git a/sample/src/concore.py b/sample/src/concore.py deleted file mode 100644 index 9375b9c..0000000 --- a/sample/src/concore.py +++ /dev/null @@ -1,113 +0,0 @@ -import time -import os -from ast import literal_eval -import sys -import re - -#if windows, create script to kill this process -# because batch files don't provide easy way to know pid of last command -# ignored for posix!=windows, because "concorepid" is handled by script -# ignored for docker (linux!=windows), because handled by docker stop -if hasattr(sys, 'getwindowsversion'): - with open("concorekill.bat","w") as fpid: - fpid.write("taskkill /F /PID "+str(os.getpid())+"\n") - -try: - iport = literal_eval(open("concore.iport").read()) -except: - iport = dict() -try: - oport = literal_eval(open("concore.oport").read()) -except: - oport = dict() - - -s = '' -olds = '' -delay = 1 -retrycount = 0 -inpath = "./in" #must be rel path for local -outpath = "./out" - -#9/21/22 -try: - sparams = open(inpath+"1/concore.params").read() - if sparams[0] == '"': #windows keeps "" need to remove - sparams = sparams[1:] - sparams = sparams[0:sparams.find('"')] - if sparams != '{': - print("converting sparams: "+sparams) - sparams = "{'"+re.sub(';',",'",re.sub('=',"':",re.sub(' ','',sparams)))+"}" - print("converted sparams: " + sparams) - try: - params = literal_eval(sparams) - except: - print("bad params: "+sparams) -except: - params = dict() -#9/30/22 -def tryparam(n,i): - try: - return params[n] - except: - return i - - -#9/12/21 -def default_maxtime(default): - global maxtime - try: - maxtime = literal_eval(open(inpath+"1/concore.maxtime").read()) - except: - maxtime = default -default_maxtime(100) - -def unchanged(): - global olds,s - if olds==s: - s = '' - return True - else: - olds = s - return False - -def read(port, name, initstr): - global s,simtime,retrycount - time.sleep(delay) - try: - infile = open(inpath+str(port)+"/"+name); - ins = infile.read() - except: - ins = initstr - while len(ins)==0: - time.sleep(delay) - ins = infile.read() - retrycount += 1 - s += ins - inval = literal_eval(ins) - simtime = max(simtime,inval[0]) - return inval[1:] - -def write(port, name, val, delta=0): - global outpath,simtime - if isinstance(val,str): - time.sleep(2*delay) - elif isinstance(val,list)==False: - print("mywrite must have list or str") - quit() - try: - with open(outpath+str(port)+"/"+name,"w") as outfile: - if isinstance(val,list): - outfile.write(str([simtime+delta]+val)) - simtime += delta - else: - outfile.write(val) - except: - print("skipping"+outpath+str(port)+"/"+name); - -def initval(simtime_val): - global simtime - val = literal_eval(simtime_val) - simtime = val[0] - return val[1:] - diff --git a/sample/src/concore.v b/sample/src/concore.v deleted file mode 100644 index 4c1ab08..0000000 --- a/sample/src/concore.v +++ /dev/null @@ -1,351 +0,0 @@ -`define CONCORE_MAXLEN 150 -`define INPATHLEN 6 //includes trailing portdigit and "/" -`define OUTPATHLEN 7 //modify these to match inpath and outpath -`define MAXFILES 9 -module concore; - integer datasize; - real data[9:0]; - integer filenum=-1; - reg[`CONCORE_MAXLEN*8-1:0] curs; - reg[`CONCORE_MAXLEN*8-1:0] s[`MAXFILES-1:0]; - reg[`CONCORE_MAXLEN*8-1:0] olds[`MAXFILES-1:0]; - integer lens[`MAXFILES-1:0]; - integer oldlens[`MAXFILES-1:0]; - reg[(`INPATHLEN-2)*8-1:0] inpath = "./in"; //omits trailing portdigit and "/" - reg[(`OUTPATHLEN-2)*8-1:0] outpath = "./out"; - real simtime; - integer retrycount = 0; - - integer fin,fout; - integer i; - real dummy; - - integer iii; - initial - begin - for(iii=0; iii<`MAXFILES; iii = iii+1) - begin - s[iii] = 0; - olds[iii] = 0; - lens[iii] = 0; - oldlens[iii] = 0; - end - end - - function [0:0] unchanged; - input [0:0] dummy_arg; - reg nochange; - begin - nochange = 1; - for (i=0; i<=filenum; i=i+1) - begin -//$display("1oldl=%d l=%d olds=%s s=%s",oldlens[i],lens[i],olds[i],s[i]); - if (!((oldlens[i] == lens[i])&&(olds[i] == s[i]))) - nochange = 0; - end - if (nochange) - begin - for (i=0; i<=filenum; i=i+1) - s[i] = 0; - for (i=0; i<=filenum; i=i+1) - lens[i] = 0; - unchanged = 1; - filenum = -1; -//$display("unchanged"); - end - else - begin -// for (i=0; i<=filenum; i=i+1) -//$display("2oldl=%d l=%d olds=%s s=%s",oldlens[i],lens[i],olds[i],s[i]); - for (i=0; i<=filenum; i=i+1) - olds[i] = s[i]; - for (i=0; i<=filenum; i=i+1) - oldlens[i] = lens[i]; - unchanged = 0; -//$display("changed"); - end -// for (i=0; i<=filenum; i=i+1) -//$display("3oldl=%d l=%d olds=%s s=%s",oldlens[i],lens[i],olds[i],s[i]); -//$stop; -// filenum = -1; - end - endfunction - - function integer msbhelper; - input [`CONCORE_MAXLEN*8-1:0] s; - integer i,msb; - begin - //$display("help %s",s); - msb = 7; - for (i=8; i<`CONCORE_MAXLEN*8; i=i+1) - begin - if (s[i]) msb = i; - end - msbhelper = msb; - end - endfunction - - function integer lsbhelper; - input [`CONCORE_MAXLEN*8-1:0] s; - integer i,lsb; - begin - //$display("help %s",s); - lsb = 7; - for (i=`CONCORE_MAXLEN*8; i>=8; i=i-1) - begin - if (s[i]) lsb = i; - end - lsbhelper = lsb; - end - endfunction - - function [`CONCORE_MAXLEN*8-1:0] trim; - input [`CONCORE_MAXLEN*8-1:0] s; - integer msb; - begin - msb = msbhelper(s); - //$display("%s",s); - //$display(msb); - //$display(msb/8); - //$display(`CONCORE_MAXLEN - msb/8 -1); - trim = s << (8*(`CONCORE_MAXLEN - msb/8 -1)); - end - endfunction - - function integer len; - input [`CONCORE_MAXLEN*8-1:0] s; - integer msb; - begin - msb = msbhelper(s); - len = (msb/8)+1; - end - endfunction - - task readdata; //passed via global data and datasize (from literal_eval) - input integer port; - input [`CONCORE_MAXLEN*8-1:0] name; - input [`CONCORE_MAXLEN*8-1:0] initstr; - reg datavalid; - reg [(`CONCORE_MAXLEN+`INPATHLEN)*8-1:0] fname; //room for 6 extra chars - reg [7:0] asciiport; - integer i; - begin - filenum = filenum + 1; - if (filenum > `MAXFILES) - begin - $display("too many reads in loop"); - $finish; - end - s[filenum] = 0; - //olds[filenum] = 0; - lens[filenum] = 0; - //oldlens[filenum] = 0; - asciiport = "0"; - asciiport = asciiport + port; - fname = {inpath,asciiport,"/",trim(name)}; - datavalid = 0; - while(datavalid == 0) - begin - delayhelper; - //fin = $fopen(fname,"r"); - //fin = $fopen("./in1/ym","r"); - case (len(name)) - 1: fin = $fopen( - fname[(`CONCORE_MAXLEN+`INPATHLEN)*8-1:(`CONCORE_MAXLEN-1)*8],"r"); - 2: fin = $fopen( - fname[(`CONCORE_MAXLEN+`INPATHLEN)*8-1:(`CONCORE_MAXLEN-2)*8],"r"); - 3: fin = $fopen( - fname[(`CONCORE_MAXLEN+`INPATHLEN)*8-1:(`CONCORE_MAXLEN-3)*8],"r"); - 4: fin = $fopen( - fname[(`CONCORE_MAXLEN+`INPATHLEN)*8-1:(`CONCORE_MAXLEN-4)*8],"r"); - 5: fin = $fopen( - fname[(`CONCORE_MAXLEN+`INPATHLEN)*8-1:(`CONCORE_MAXLEN-5)*8],"r"); - 6: fin = $fopen( - fname[(`CONCORE_MAXLEN+`INPATHLEN)*8-1:(`CONCORE_MAXLEN-6)*8],"r"); - 7: fin = $fopen( - fname[(`CONCORE_MAXLEN+`INPATHLEN)*8-1:(`CONCORE_MAXLEN-7)*8],"r"); - 8: fin = $fopen( - fname[(`CONCORE_MAXLEN+`INPATHLEN)*8-1:(`CONCORE_MAXLEN-8)*8],"r"); - 9: fin = $fopen( - fname[(`CONCORE_MAXLEN+`INPATHLEN)*8-1:(`CONCORE_MAXLEN-9)*8],"r"); - 10: fin = $fopen( - fname[(`CONCORE_MAXLEN+`INPATHLEN)*8-1:(`CONCORE_MAXLEN-10)*8],"r"); - 11: fin = $fopen( - fname[(`CONCORE_MAXLEN+`INPATHLEN)*8-1:(`CONCORE_MAXLEN-11)*8],"r"); - 12: fin = $fopen( - fname[(`CONCORE_MAXLEN+`INPATHLEN)*8-1:(`CONCORE_MAXLEN-12)*8],"r"); - default: begin $display("filename too long:%s",name);$finish; end - endcase - datavalid = 0; - if (fin==0) - begin - lens[filenum] = 7;//actual len? - s[filenum] = trim(initstr); //"[0,0,0]"; - end - else - begin - lens[filenum] = $fgets(curs,fin); - s[filenum] = curs; - $fclose(fin); - end - //parse - literal_eval(datavalid,simtime); - if (datavalid == 0) - begin - retrycount = retrycount + 1; - end - //time - end //datavalid - end - endtask - - task write; //string argument only - input integer port; - input [`CONCORE_MAXLEN*8-1:0] name; - input [`CONCORE_MAXLEN*8-1:0] val; - reg [(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:0] fname; - reg [7:0] asciiport; - begin - asciiport = "0"; - asciiport = asciiport + port; - fname = {outpath,asciiport,"/",trim(name)}; - //$display("outfile=%s",fname); - delayhelper; - //fout = $fopen("./out1/u","w"); - //fout = $fopen(fname,"w"); - case (len(name)) - 1: fout = $fopen( - fname[(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:(`CONCORE_MAXLEN-1)*8],"w"); - 2: fout = $fopen( - fname[(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:(`CONCORE_MAXLEN-2)*8],"w"); - 3: fout = $fopen( - fname[(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:(`CONCORE_MAXLEN-3)*8],"w"); - 4: fout = $fopen( - fname[(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:(`CONCORE_MAXLEN-4)*8],"w"); - 5: fout = $fopen( - fname[(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:(`CONCORE_MAXLEN-5)*8],"w"); - 6: fout = $fopen( - fname[(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:(`CONCORE_MAXLEN-6)*8],"w"); - 7: fout = $fopen( - fname[(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:(`CONCORE_MAXLEN-7)*8],"w"); - 8: fout = $fopen( - fname[(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:(`CONCORE_MAXLEN-8)*8],"w"); - 9: fout = $fopen( - fname[(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:(`CONCORE_MAXLEN-9)*8],"w"); - 10: fout = $fopen( - fname[(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:(`CONCORE_MAXLEN-10)*8],"w"); - 11: fout = $fopen( - fname[(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:(`CONCORE_MAXLEN-11)*8],"w"); - 12: fout = $fopen( - fname[(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:(`CONCORE_MAXLEN-12)*8],"w"); - default: begin $display("filename too long:%s",name);$finish; end - endcase - $fdisplay(fout,"%s",trim(val)); - $fclose(fout); - end - endtask - - task writedata; //passed via global data and datasize - input integer port; - input [`CONCORE_MAXLEN*8-1:0] name; - input real delta; - reg [(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:0] fname; //room for 7 extra chars - reg [7:0] asciiport; - integer i; - real realdata; - begin - asciiport = "0"; - asciiport = asciiport + port; - fname = {outpath,asciiport,"/",trim(name)}; - //$display("outfile=%s",fname); - delayhelper; - //fout = $fopen("./out1/u","w"); - //fout = $fopen(fname,"w"); - case (len(name)) - 1: fout = $fopen( - fname[(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:(`CONCORE_MAXLEN-1)*8],"w"); - 2: fout = $fopen( - fname[(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:(`CONCORE_MAXLEN-2)*8],"w"); - 3: fout = $fopen( - fname[(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:(`CONCORE_MAXLEN-3)*8],"w"); - 4: fout = $fopen( - fname[(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:(`CONCORE_MAXLEN-4)*8],"w"); - 5: fout = $fopen( - fname[(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:(`CONCORE_MAXLEN-5)*8],"w"); - 6: fout = $fopen( - fname[(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:(`CONCORE_MAXLEN-6)*8],"w"); - 7: fout = $fopen( - fname[(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:(`CONCORE_MAXLEN-7)*8],"w"); - 8: fout = $fopen( - fname[(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:(`CONCORE_MAXLEN-8)*8],"w"); - 9: fout = $fopen( - fname[(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:(`CONCORE_MAXLEN-9)*8],"w"); - 10: fout = $fopen( - fname[(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:(`CONCORE_MAXLEN-10)*8],"w"); - 11: fout = $fopen( - fname[(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:(`CONCORE_MAXLEN-11)*8],"w"); - 12: fout = $fopen( - fname[(`CONCORE_MAXLEN+`OUTPATHLEN)*8-1:(`CONCORE_MAXLEN-12)*8],"w"); - default: begin $display("filename too long:%s",name);$finish; end - endcase - $fwrite(fout,"[%g",simtime+delta); - for (i=0; i - - - - - - - - - - - CZ:controller.py - - - - - - - - - - - PZ:pm.py - - - - - - - - - - CU - - - - - - - - - - - - PYM - - - - - - - - 1638390071794 - Pradeeban - - DEL_NODE - WyIyM2ZlODE5Yi1hMTZjLTQzY2ItOWQ5NC1mM2I1M2QwNjk4NWYiXQ== - - - ADD_NODE - WyJDWjpjb250cm9sbGVyLnB5Iix7IndpZHRoIjoxMzIsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MTAwLCJ5IjoxMDB9LHt9LCIyM2ZlODE5Yi1hMTZjLTQzY2ItOWQ5NC1mM2I1M2QwNjk4NWYiXQ== - - - - 1638390078744 - Pradeeban - - DEL_NODE - WyI5YzVlMTRjOC0xZjVjLTQyMGUtYTcyZC00NmIyZWZhMjQ0YTYiXQ== - - - ADD_NODE - WyJQWjpwbS5weSIseyJ3aWR0aCI6MTAwLCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjk5LCJ5IjoyNjJ9LHt9LCI5YzVlMTRjOC0xZjVjLTQyMGUtYTcyZC00NmIyZWZhMjQ0YTYiXQ== - - - - 1638390083602 - Pradeeban - - SET_POS - WyI5YzVlMTRjOC0xZjVjLTQyMGUtYTcyZC00NmIyZWZhMjQ0YTYiLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6OTksInkiOjI2Mn1d - - - SET_POS - WyI5YzVlMTRjOC0xZjVjLTQyMGUtYTcyZC00NmIyZWZhMjQ0YTYiLHsieCI6OTksInkiOjI2Mn0seyJ4IjoxMTAsInkiOjExMH1d - - - - 1638390087263 - Pradeeban - - DEL_EDGE - WyI0ZTY3NzY3Ny1jYmI5LTRlMGUtOGUwYS0zNDUxMDJkODIzYWYiXQ== - - - ADD_EDGE - W3sic291cmNlSUQiOiIyM2ZlODE5Yi1hMTZjLTQzY2ItOWQ5NC1mM2I1M2QwNjk4NWYiLCJ0YXJnZXRJRCI6IjljNWUxNGM4LTFmNWMtNDIwZS1hNzJkLTQ2YjJlZmEyNDRhNiIsImxhYmVsIjoiQyIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2Y0NDMzNiIsInNoYXBlIjoic29saWQifSwiaWQiOiI0ZTY3NzY3Ny1jYmI5LTRlMGUtOGUwYS0zNDUxMDJkODIzYWYifV0= - - - - 1638390162285 - Pradeeban - - DEL_EDGE - WyI4NzRiYmZiNi02NTMwLTQxMzgtOTI4Zi1kMDI5NDEyZGQwN2UiXQ== - - - ADD_EDGE - W3sic291cmNlSUQiOiI5YzVlMTRjOC0xZjVjLTQyMGUtYTcyZC00NmIyZWZhMjQ0YTYiLCJ0YXJnZXRJRCI6IjIzZmU4MTliLWExNmMtNDNjYi05ZDk0LWYzYjUzZDA2OTg1ZiIsImxhYmVsIjoiUCIsInN0eWxlIjp7InRoaWNrbmVzcyI6MSwiYmFja2dyb3VuZENvbG9yIjoiIzgyNzcxNyIsInNoYXBlIjoic29saWQifSwiaWQiOiI4NzRiYmZiNi02NTMwLTQxMzgtOTI4Zi1kMDI5NDEyZGQwN2UifV0= - - - - 1638390238818 - Pradeeban - - UPDATE_EDGE - WyI0ZTY3NzY3Ny1jYmI5LTRlMGUtOGUwYS0zNDUxMDJkODIzYWYiLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZjQ0MzM2Iiwic2hhcGUiOiJzb2xpZCJ9LCJDIix0cnVlXQ== - - - UPDATE_EDGE - WyI0ZTY3NzY3Ny1jYmI5LTRlMGUtOGUwYS0zNDUxMDJkODIzYWYiLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZjQ0MzM2Iiwic2hhcGUiOiJzb2xpZCJ9LCJDVSIsdHJ1ZV0= - - - - 1638390244629 - Pradeeban - - UPDATE_EDGE - WyI4NzRiYmZiNi02NTMwLTQxMzgtOTI4Zi1kMDI5NDEyZGQwN2UiLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjODI3NzE3Iiwic2hhcGUiOiJzb2xpZCJ9LCJQIix0cnVlXQ== - - - UPDATE_EDGE - WyI4NzRiYmZiNi02NTMwLTQxMzgtOTI4Zi1kMDI5NDEyZGQwN2UiLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjODI3NzE3Iiwic2hhcGUiOiJzb2xpZCJ9LCJQWU0iLHRydWVd - - - - \ No newline at end of file From 41320483a4a78e79e796217ae99e3941a303b721 Mon Sep 17 00:00:00 2001 From: Rahul Date: Thu, 23 Feb 2023 14:34:54 +0530 Subject: [PATCH 06/43] output directory argument mentioned --- fri/server/main.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/fri/server/main.py b/fri/server/main.py index a548d34..48e2a75 100644 --- a/fri/server/main.py +++ b/fri/server/main.py @@ -67,17 +67,21 @@ def upload(dir): def build(dir): graphml_file = request.args.get('fetch') apikey = request.args.get('apikey') + out_dir = request.args.get('outdir') if(apikey == None): dirname = secure_filename(dir) else: dirname = secure_filename(dir) + "_" + apikey makestudy_dir = dirname + "/" + graphml_file #for makestudy - dir_path = os.path.abspath(os.path.join(concore_path, graphml_file)) #path for ./build + if(out_dir == None or out_dir == ""): + dir_path = os.path.abspath(os.path.join(concore_path, graphml_file)) #path for ./build + else: + dir_path = os.path.abspath(os.path.join(concore_path, out_dir)) #path for ./build if not os.path.exists(dir_path): if(platform.uname()[0]=='Windows'): - proc= call(["makestudy", makestudy_dir], shell=True, cwd=concore_path) + proc= call(["makestudy", makestudy_dir, out_dir], shell=True, cwd=concore_path) else: - proc = call(["./makestudy", makestudy_dir], cwd=concore_path) + proc = call(["./makestudy", makestudy_dir, out_dir], cwd=concore_path) if(proc == 0): resp = jsonify({'message': 'Directory successfully created'}) resp.status_code = 201 From 5368ba2529e6ed28f3d5e8e2c768960142d9931e Mon Sep 17 00:00:00 2001 From: Rahul Date: Thu, 23 Feb 2023 14:58:56 +0530 Subject: [PATCH 07/43] destroy was giving error --- fri/test.py | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/fri/test.py b/fri/test.py index 8204c68..7f29458 100644 --- a/fri/test.py +++ b/fri/test.py @@ -16,8 +16,8 @@ def upload(files): # # ******* # function to check build -def build(dir, graphml, apikey): - url = "http://127.0.0.1:5000/build/"+dir+"?"+"fetch="+graphml+"&"+"apikey="+apikey +def build(dir, graphml, outdir, apikey): + url = "http://127.0.0.1:5000/build/"+dir+"?"+"fetch="+graphml+"&"+"outdir="+outdir+"&"+"apikey="+apikey response = requests.request("POST", url) print(response.text) @@ -83,20 +83,20 @@ def download(dir, subDir, fileName , apikey ): upload(files) time.sleep(2) -build("test", "sample", "xyz") +build("test", "sample", "sample-anyname", "xyz") time.sleep(6) method = input("methods - 1 for debug, 0 for run :") if method == "1": - debug("sample", "xyz") + debug("sample-anyname", "xyz") else: - run("sample", "xyz") + run("sample-anyname", "xyz") time.sleep(2) -stop("sample", "xyz") +stop("sample-anyname", "xyz") time.sleep(2) -getFilesList("xyz", "sample", "CU") -getFilesList("xyz","sample", "PYM") +getFilesList("xyz", "sample-anyname", "CU") +getFilesList("xyz","sample-anyname", "PYM") time.sleep(5) -download("sample", "CU", "u", "xyz") -clear("sample", "xyz") -destroy("sample", "xyz") +download("sample-anyname", "CU", "u", "xyz") +clear("sample-anyname", "xyz") +destroy("sample-anyname", "xyz") openJupyter() From b7403da133ee93c38ed45f337ab6c40a1935114e Mon Sep 17 00:00:00 2001 From: Rahul Date: Thu, 23 Feb 2023 15:15:59 +0530 Subject: [PATCH 08/43] if else check for outdir --- fri/server/main.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/fri/server/main.py b/fri/server/main.py index 48e2a75..89c93f4 100644 --- a/fri/server/main.py +++ b/fri/server/main.py @@ -79,9 +79,15 @@ def build(dir): dir_path = os.path.abspath(os.path.join(concore_path, out_dir)) #path for ./build if not os.path.exists(dir_path): if(platform.uname()[0]=='Windows'): - proc= call(["makestudy", makestudy_dir, out_dir], shell=True, cwd=concore_path) + if(out_dir == None or out_dir == ""): + proc= call(["makestudy", makestudy_dir], shell=True, cwd=concore_path) + else: + proc= call(["makestudy", makestudy_dir, out_dir], shell=True, cwd=concore_path) else: - proc = call(["./makestudy", makestudy_dir, out_dir], cwd=concore_path) + if(out_dir == None or out_dir == ""): + proc= call(["./makestudy", makestudy_dir], cwd=concore_path) + else: + proc= call(["./makestudy", makestudy_dir, out_dir], cwd=concore_path) if(proc == 0): resp = jsonify({'message': 'Directory successfully created'}) resp.status_code = 201 From b64ad13c9248028091229102464291f30d6cb7a1 Mon Sep 17 00:00:00 2001 From: Rahul Date: Mon, 27 Feb 2023 18:39:23 +0530 Subject: [PATCH 09/43] directory name added in destroy api call in main.py --- fri/server/main.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fri/server/main.py b/fri/server/main.py index 89c93f4..b2b790e 100644 --- a/fri/server/main.py +++ b/fri/server/main.py @@ -191,9 +191,9 @@ def download(dir): def destroy(dir): dir = secure_filename(dir) if(platform.uname()[0]=='Windows'): - proc=call(["destroy"],shell=True, cwd=concore_path) + proc=call(["destroy", dir],shell=True, cwd=concore_path) else: - proc = call(["./destroy"], cwd=concore_path) + proc = call(["./destroy", dir], cwd=concore_path) if(proc == 0): resp = jsonify({'message': 'Successfuly deleted Dirctory'}) resp.status_code = 201 From a582535ef9dec72aa60d775202d31a8821376ae1 Mon Sep 17 00:00:00 2001 From: Shivang Vijay Date: Sun, 12 Mar 2023 02:11:06 +0530 Subject: [PATCH 10/43] With one step all the dependencies installed and updating README.md --- fri/README.md | 5 +++-- fri/requirements.txt | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/fri/README.md b/fri/README.md index f591bc2..b146465 100644 --- a/fri/README.md +++ b/fri/README.md @@ -4,9 +4,10 @@ The Control-Core File Receiving Interface (FRI) is built with is Python-3.10. It # Install Dependencies -Install Jupyter lab ```` -$ pip install jupyterlab +$ cd conore/fri + +$ pip3 install -r requirements.txt ```` # Running the FRI and a quick test. diff --git a/fri/requirements.txt b/fri/requirements.txt index 4ef52a1..8268e17 100644 --- a/fri/requirements.txt +++ b/fri/requirements.txt @@ -1,3 +1,4 @@ Flask gunicorn==20.1.0 FLASK_CORS +jupyterlab From 27452334f1d2ef84e6cdfc69926a6db0f4cbe1db Mon Sep 17 00:00:00 2001 From: Shivang Vijay Date: Sun, 12 Mar 2023 14:11:51 +0530 Subject: [PATCH 11/43] Resolve issue #63 --- fri/test.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fri/test.py b/fri/test.py index 7f29458..fe7e396 100644 --- a/fri/test.py +++ b/fri/test.py @@ -85,8 +85,8 @@ def download(dir, subDir, fileName , apikey ): time.sleep(2) build("test", "sample", "sample-anyname", "xyz") time.sleep(6) -method = input("methods - 1 for debug, 0 for run :") -if method == "1": +method = int(input("methods - 1 for debug, 0 for run :")) +if method == 1: debug("sample-anyname", "xyz") else: run("sample-anyname", "xyz") From 4cfcf4022e3e84838acd9c51defeb3c5e06244ad Mon Sep 17 00:00:00 2001 From: markgarnold <78613198+markgarnold@users.noreply.github.com> Date: Fri, 24 Mar 2023 12:49:00 -0400 Subject: [PATCH 12/43] Update funcall2.py --- 0mq/funcall2.py | 1 + 1 file changed, 1 insertion(+) diff --git a/0mq/funcall2.py b/0mq/funcall2.py index b316ff1..f858cdc 100644 --- a/0mq/funcall2.py +++ b/0mq/funcall2.py @@ -24,6 +24,7 @@ # ym = concore2.read(concore.iport['Y1'],"ym",init_simtime_ym) paired_transmitter = PairedTransmitter( remote_host="localhost", exposed_commands=[], + #remote_host="193.136.132.10", exposed_commands=[], remote_port=2345, listen_port=2346,) paired_transmitter.start_background_sync() ym = paired_transmitter.request_with_immediate_reply( From 9631b01ff09f1754ef4160e1553ef2b7f687bf6d Mon Sep 17 00:00:00 2001 From: markgarnold <78613198+markgarnold@users.noreply.github.com> Date: Fri, 24 Mar 2023 14:09:36 -0400 Subject: [PATCH 13/43] created nintab --- nintan/cpymax.py | 29 +++++ nintan/cstim.py | 32 +++++ nintan/cstim0.py | 32 +++++ nintan/pmpymax.py | 17 +++ nintan/powermetermax.dir/concore2.py | 106 +++++++++++++++ nintan/powermetermax.py | 27 ++++ nintan/pstim.py | 39 ++++++ nintan/pstim0.py | 39 ++++++ nintan/test3max.graphml | 104 +++++++++++++++ nintan/testZmax.graphml | 68 ++++++++++ nintan/teststim.graphml | 161 +++++++++++++++++++++++ nintan/teststim0.graphml | 185 +++++++++++++++++++++++++++ 12 files changed, 839 insertions(+) create mode 100644 nintan/cpymax.py create mode 100644 nintan/cstim.py create mode 100644 nintan/cstim0.py create mode 100644 nintan/pmpymax.py create mode 100644 nintan/powermetermax.dir/concore2.py create mode 100644 nintan/powermetermax.py create mode 100644 nintan/pstim.py create mode 100644 nintan/pstim0.py create mode 100644 nintan/test3max.graphml create mode 100644 nintan/testZmax.graphml create mode 100644 nintan/teststim.graphml create mode 100644 nintan/teststim0.graphml diff --git a/nintan/cpymax.py b/nintan/cpymax.py new file mode 100644 index 0000000..5c767ea --- /dev/null +++ b/nintan/cpymax.py @@ -0,0 +1,29 @@ +import concore +import time +concore.delay = 0.01 +#Nsim = 100 +init_simtime_u = "[0.0, 0.0, 0.0]" +init_simtime_ym = "[0.0, 0.0, 0.0]" +minElasped = 10000000 +maxElasped = 0 +sumElasped = 0 +u = concore.initval(init_simtime_u) +wallclock1 = time.perf_counter() +while(concore.simtime + + + + + + + + + + + + + + + + + + + + + + XZ:powermetermax.py + + + + + + + + + + + PZ:pmpymax.py + + + + + + + + + + + CZ:cpymax.py + + + + + + + + + + + + + VXP + + + + + + + + + + + + + VP + + + + + + + + + + + + VC + + + + + + + + + + + + + VXC + + + + + + + + diff --git a/nintan/testZmax.graphml b/nintan/testZmax.graphml new file mode 100644 index 0000000..bfc4a53 --- /dev/null +++ b/nintan/testZmax.graphml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + CZ:cpymax.py + + + + + + + + + + + PZ:pmpymax.py + + + + + + + + + + + + + VCZ + + + + + + + + + + + + + VPZ + + + + + + + + diff --git a/nintan/teststim.graphml b/nintan/teststim.graphml new file mode 100644 index 0000000..7a78249 --- /dev/null +++ b/nintan/teststim.graphml @@ -0,0 +1,161 @@ + + + + + + + + + + + + CZ:cstim.py + + + + + + + + + + + PZ:pstim.py + + + + + + + + + + CU + + + + + + + + + + + + PYM + + + + + + + + 1679679128844 + + DEL_NODE + WyJiMTE5M2MzZi1lZGMyLTQxZmYtYTMxZC0xMzYwNmY0NGFlNWUiXQ== + + + ADD_NODE + WyJDWjpjc3RpbS5weSIseyJ3aWR0aCI6MTA0LCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjEwMCwieSI6MTAwfSx7fSwiYjExOTNjM2YtZWRjMi00MWZmLWEzMWQtMTM2MDZmNDRhZTVlIl0= + + 2e86d4fed8aafe8ef09f1cf40708efba + + + 1679679163391 + + DEL_NODE + WyJhMjQ1NWUwYy1kYjAzLTRhYjctODNjNi02ZWJlMDYyN2M4ZDgiXQ== + + + ADD_NODE + WyJQWjpwc3RpbS5weSIseyJ3aWR0aCI6MTA0LCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjEwMy43MzI0NDY2NDExNTI4NSwieSI6MjQxLjYxODYyMDUzNTc5MDN9LHt9LCJhMjQ1NWUwYy1kYjAzLTRhYjctODNjNi02ZWJlMDYyN2M4ZDgiXQ== + + 2feb956b0a2b0ced965fd91f629e0b76 + + + 1679679171029 + + SET_POS + WyJhMjQ1NWUwYy1kYjAzLTRhYjctODNjNi02ZWJlMDYyN2M4ZDgiLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6MTAzLjczMjQ0NjY0MTE1Mjg1LCJ5IjoyMDUuODA0MDI5OTEzODA2NTd9XQ== + + + SET_POS + WyJhMjQ1NWUwYy1kYjAzLTRhYjctODNjNi02ZWJlMDYyN2M4ZDgiLHsieCI6MTAzLjczMjQ0NjY0MTE1Mjg1LCJ5IjoyMDUuODA0MDI5OTEzODA2NTd9LHsieCI6MTEwLCJ5IjoxMTB9XQ== + + 0f3b77449604c51ef9be645ae0d7d757 + + + 1679679176150 + + DEL_EDGE + WyIwOTljODE1Mi1mYmNjLTQwMDAtOTY2ZC1hZjVkYjVkYjA3ZjciXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJiMTE5M2MzZi1lZGMyLTQxZmYtYTMxZC0xMzYwNmY0NGFlNWUiLCJ0YXJnZXRJRCI6ImEyNDU1ZTBjLWRiMDMtNGFiNy04M2M2LTZlYmUwNjI3YzhkOCIsImxhYmVsIjoiQ1AiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6bnVsbCwic2hhcGUiOiJzb2xpZCJ9LCJpZCI6IjA5OWM4MTUyLWZiY2MtNDAwMC05NjZkLWFmNWRiNWRiMDdmNyJ9XQ== + + 7e27c87b9f34792e3cc014741fc61876 + + + 1679679205932 + + SET_POS + WyJhMjQ1NWUwYy1kYjAzLTRhYjctODNjNi02ZWJlMDYyN2M4ZDgiLHsieCI6MTAzLjczMjQ0NjY0MTE1Mjg1LCJ5IjoyMDUuODA0MDI5OTEzODA2NTd9LHsieCI6MTAzLjczMjQ0NjY0MTE1Mjg1LCJ5IjoyNDEuNjE4NjIwNTM1NzkwM31d + + + SET_POS + WyJhMjQ1NWUwYy1kYjAzLTRhYjctODNjNi02ZWJlMDYyN2M4ZDgiLHsieCI6MTAzLjczMjQ0NjY0MTE1Mjg1LCJ5IjoyNDEuNjE4NjIwNTM1NzkwM30seyJ4IjoxMDMuNzMyNDQ2NjQxMTUyODUsInkiOjIwNS44MDQwMjk5MTM4MDY1N31d + + e2f90e5e0ae7e2bfc7b087f5bc977a68 + + + 1679679211535 + + DEL_EDGE + WyJjZDY3Yzc4NC0yNDlkLTQ5ODMtYTM3Yy1jNDZjMmViODhkZDIiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJhMjQ1NWUwYy1kYjAzLTRhYjctODNjNi02ZWJlMDYyN2M4ZDgiLCJ0YXJnZXRJRCI6ImIxMTkzYzNmLWVkYzItNDFmZi1hMzFkLTEzNjA2ZjQ0YWU1ZSIsImxhYmVsIjoiUEMiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6bnVsbCwic2hhcGUiOiJzb2xpZCJ9LCJpZCI6ImNkNjdjNzg0LTI0OWQtNDk4My1hMzdjLWM0NmMyZWI4OGRkMiJ9XQ== + + 02b9b27f4f51913eb5072fd8d49201da + + + 1679679230448 + + UPDATE_EDGE + WyIwOTljODE1Mi1mYmNjLTQwMDAtOTY2ZC1hZjVkYjVkYjA3ZjciLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOm51bGwsInNoYXBlIjoic29saWQifSwiQ1AiLHRydWVd + + + UPDATE_EDGE + WyIwOTljODE1Mi1mYmNjLTQwMDAtOTY2ZC1hZjVkYjVkYjA3ZjciLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOm51bGwsInNoYXBlIjoic29saWQifSwiVSIsdHJ1ZV0= + + c0fea71530873d797b4fcf7bc9f31b62 + + + 1679679244531 + + UPDATE_EDGE + WyIwOTljODE1Mi1mYmNjLTQwMDAtOTY2ZC1hZjVkYjVkYjA3ZjciLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOm51bGwsInNoYXBlIjoic29saWQifSwiVSIsdHJ1ZV0= + + + UPDATE_EDGE + WyIwOTljODE1Mi1mYmNjLTQwMDAtOTY2ZC1hZjVkYjVkYjA3ZjciLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOm51bGwsInNoYXBlIjoic29saWQifSwiQ1UiLHRydWVd + + 427377cf4540edc7c89dbb46d3870631 + + + 1679679254340 + + UPDATE_EDGE + WyJjZDY3Yzc4NC0yNDlkLTQ5ODMtYTM3Yy1jNDZjMmViODhkZDIiLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOm51bGwsInNoYXBlIjoic29saWQifSwiUEMiLHRydWVd + + + UPDATE_EDGE + WyJjZDY3Yzc4NC0yNDlkLTQ5ODMtYTM3Yy1jNDZjMmViODhkZDIiLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOm51bGwsInNoYXBlIjoic29saWQifSwiUFlNIix0cnVlXQ== + + 6d04014b900a14ae41da1c3b0232f1a6 + + + \ No newline at end of file diff --git a/nintan/teststim0.graphml b/nintan/teststim0.graphml new file mode 100644 index 0000000..ce9eff3 --- /dev/null +++ b/nintan/teststim0.graphml @@ -0,0 +1,185 @@ + + + + + + + + + + + + CZ:cstim0.py + + + + + + + + + + + PZ:pstim0.py + + + + + + + + + + CU + + + + + + + + + + + + PYM + + + + + + + + 1679679128844 + + DEL_NODE + WyJiMTE5M2MzZi1lZGMyLTQxZmYtYTMxZC0xMzYwNmY0NGFlNWUiXQ== + + + ADD_NODE + WyJDWjpjc3RpbS5weSIseyJ3aWR0aCI6MTA0LCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjEwMCwieSI6MTAwfSx7fSwiYjExOTNjM2YtZWRjMi00MWZmLWEzMWQtMTM2MDZmNDRhZTVlIl0= + + 2e86d4fed8aafe8ef09f1cf40708efba + + + 1679679163391 + + DEL_NODE + WyJhMjQ1NWUwYy1kYjAzLTRhYjctODNjNi02ZWJlMDYyN2M4ZDgiXQ== + + + ADD_NODE + WyJQWjpwc3RpbS5weSIseyJ3aWR0aCI6MTA0LCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjEwMy43MzI0NDY2NDExNTI4NSwieSI6MjQxLjYxODYyMDUzNTc5MDN9LHt9LCJhMjQ1NWUwYy1kYjAzLTRhYjctODNjNi02ZWJlMDYyN2M4ZDgiXQ== + + 2feb956b0a2b0ced965fd91f629e0b76 + + + 1679679171029 + + SET_POS + WyJhMjQ1NWUwYy1kYjAzLTRhYjctODNjNi02ZWJlMDYyN2M4ZDgiLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6MTAzLjczMjQ0NjY0MTE1Mjg1LCJ5IjoyMDUuODA0MDI5OTEzODA2NTd9XQ== + + + SET_POS + WyJhMjQ1NWUwYy1kYjAzLTRhYjctODNjNi02ZWJlMDYyN2M4ZDgiLHsieCI6MTAzLjczMjQ0NjY0MTE1Mjg1LCJ5IjoyMDUuODA0MDI5OTEzODA2NTd9LHsieCI6MTEwLCJ5IjoxMTB9XQ== + + 0f3b77449604c51ef9be645ae0d7d757 + + + 1679679176150 + + DEL_EDGE + WyIwOTljODE1Mi1mYmNjLTQwMDAtOTY2ZC1hZjVkYjVkYjA3ZjciXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJiMTE5M2MzZi1lZGMyLTQxZmYtYTMxZC0xMzYwNmY0NGFlNWUiLCJ0YXJnZXRJRCI6ImEyNDU1ZTBjLWRiMDMtNGFiNy04M2M2LTZlYmUwNjI3YzhkOCIsImxhYmVsIjoiQ1AiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6bnVsbCwic2hhcGUiOiJzb2xpZCJ9LCJpZCI6IjA5OWM4MTUyLWZiY2MtNDAwMC05NjZkLWFmNWRiNWRiMDdmNyJ9XQ== + + 7e27c87b9f34792e3cc014741fc61876 + + + 1679679205932 + + SET_POS + WyJhMjQ1NWUwYy1kYjAzLTRhYjctODNjNi02ZWJlMDYyN2M4ZDgiLHsieCI6MTAzLjczMjQ0NjY0MTE1Mjg1LCJ5IjoyMDUuODA0MDI5OTEzODA2NTd9LHsieCI6MTAzLjczMjQ0NjY0MTE1Mjg1LCJ5IjoyNDEuNjE4NjIwNTM1NzkwM31d + + + SET_POS + WyJhMjQ1NWUwYy1kYjAzLTRhYjctODNjNi02ZWJlMDYyN2M4ZDgiLHsieCI6MTAzLjczMjQ0NjY0MTE1Mjg1LCJ5IjoyNDEuNjE4NjIwNTM1NzkwM30seyJ4IjoxMDMuNzMyNDQ2NjQxMTUyODUsInkiOjIwNS44MDQwMjk5MTM4MDY1N31d + + e2f90e5e0ae7e2bfc7b087f5bc977a68 + + + 1679679211535 + + DEL_EDGE + WyJjZDY3Yzc4NC0yNDlkLTQ5ODMtYTM3Yy1jNDZjMmViODhkZDIiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJhMjQ1NWUwYy1kYjAzLTRhYjctODNjNi02ZWJlMDYyN2M4ZDgiLCJ0YXJnZXRJRCI6ImIxMTkzYzNmLWVkYzItNDFmZi1hMzFkLTEzNjA2ZjQ0YWU1ZSIsImxhYmVsIjoiUEMiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6bnVsbCwic2hhcGUiOiJzb2xpZCJ9LCJpZCI6ImNkNjdjNzg0LTI0OWQtNDk4My1hMzdjLWM0NmMyZWI4OGRkMiJ9XQ== + + 02b9b27f4f51913eb5072fd8d49201da + + + 1679679230448 + + UPDATE_EDGE + WyIwOTljODE1Mi1mYmNjLTQwMDAtOTY2ZC1hZjVkYjVkYjA3ZjciLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOm51bGwsInNoYXBlIjoic29saWQifSwiQ1AiLHRydWVd + + + UPDATE_EDGE + WyIwOTljODE1Mi1mYmNjLTQwMDAtOTY2ZC1hZjVkYjVkYjA3ZjciLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOm51bGwsInNoYXBlIjoic29saWQifSwiVSIsdHJ1ZV0= + + c0fea71530873d797b4fcf7bc9f31b62 + + + 1679679244531 + + UPDATE_EDGE + WyIwOTljODE1Mi1mYmNjLTQwMDAtOTY2ZC1hZjVkYjVkYjA3ZjciLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOm51bGwsInNoYXBlIjoic29saWQifSwiVSIsdHJ1ZV0= + + + UPDATE_EDGE + WyIwOTljODE1Mi1mYmNjLTQwMDAtOTY2ZC1hZjVkYjVkYjA3ZjciLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOm51bGwsInNoYXBlIjoic29saWQifSwiQ1UiLHRydWVd + + 427377cf4540edc7c89dbb46d3870631 + + + 1679679254340 + + UPDATE_EDGE + WyJjZDY3Yzc4NC0yNDlkLTQ5ODMtYTM3Yy1jNDZjMmViODhkZDIiLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOm51bGwsInNoYXBlIjoic29saWQifSwiUEMiLHRydWVd + + + UPDATE_EDGE + WyJjZDY3Yzc4NC0yNDlkLTQ5ODMtYTM3Yy1jNDZjMmViODhkZDIiLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOm51bGwsInNoYXBlIjoic29saWQifSwiUFlNIix0cnVlXQ== + + 6d04014b900a14ae41da1c3b0232f1a6 + + + 1679681258968 + + UPDATE_NODE + WyJiMTE5M2MzZi1lZGMyLTQxZmYtYTMxZC0xMzYwNmY0NGFlNWUiLHsid2lkdGgiOjEwNCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpjc3RpbS5weSIsdHJ1ZV0= + + + UPDATE_NODE + WyJiMTE5M2MzZi1lZGMyLTQxZmYtYTMxZC0xMzYwNmY0NGFlNWUiLHsid2lkdGgiOjExMywiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJDWjpjc3RpbTAucHkiLHRydWVd + + f2d618f2115bdf04e91fd5c85bdbc85b + + + 1679681290308 + + UPDATE_NODE + WyJhMjQ1NWUwYy1kYjAzLTRhYjctODNjNi02ZWJlMDYyN2M4ZDgiLHsid2lkdGgiOjEwNCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJQWjpwc3RpbS5weSIsdHJ1ZV0= + + + UPDATE_NODE + WyJhMjQ1NWUwYy1kYjAzLTRhYjctODNjNi02ZWJlMDYyN2M4ZDgiLHsid2lkdGgiOjExMywiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJQWjpwc3RpbTAucHkiLHRydWVd + + 7bcb667001c20e81dae72339b87abee6 + + + \ No newline at end of file From b1ad31b4ed9efa096a45767cb04bca6e3e9e3e22 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Fri, 24 Mar 2023 15:39:20 -0400 Subject: [PATCH 14/43] Update with nidaqmx --- nintan/pstim.py | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/nintan/pstim.py b/nintan/pstim.py index ef06aa4..a458ece 100644 --- a/nintan/pstim.py +++ b/nintan/pstim.py @@ -3,6 +3,11 @@ import time import threading +from hardware.util_functions import * +import nidaqmx +from nidaqmx.constants import AcquisitionType +from nidaqmx.stream_writers import DigitalSingleChannelWriter + global uglobal uglobal = 0.5 PULSE_WIDTH = 10 @@ -14,13 +19,23 @@ def pwm(): ulocal = 0.0 if ulocal > 1.0: ulocal = 1.0 - print("+") - time.sleep(PULSE_WIDTH*ulocal) - print("-") - time.sleep(PULSE_WIDTH*(1.0-ulocal)) + + writer.write_one_sample_one_line(data=1,timeout=10) + accurate_delay(PULSE_WIDTH*ulocal) + writer.write_one_sample_one_line(data=0,timeout=10) + accurate_delay(PULSE_WIDTH*(1.0-ulocal)) + + # print("+") + # time.sleep(PULSE_WIDTH*ulocal) + # print("-") + # time.sleep(PULSE_WIDTH*(1.0-ulocal)) pwm_thread = threading.Thread(target=pwm, daemon=True) +task = nidaqmx.Task() +task.do_channels.add_do_chan("Dev1/port0/line0") +writer = DigitalSingleChannelWriter(task.out_stream) + concore.delay = 0.001 init_simtime_u = "[0.0, 0.0, 0.0]" init_simtime_ym = "[0.0, 0.0, 0.0]" From 393d7d5515b38de9572787f1d60fd6cc7a981902 Mon Sep 17 00:00:00 2001 From: markgarnold <78613198+markgarnold@users.noreply.github.com> Date: Mon, 27 Mar 2023 10:42:29 -0400 Subject: [PATCH 15/43] sec count+- and lights --- nintan/cstim.py | 2 +- nintan/pstim.py | 28 +++++++++++++++++++--------- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/nintan/cstim.py b/nintan/cstim.py index c0ec58b..861a827 100644 --- a/nintan/cstim.py +++ b/nintan/cstim.py @@ -1,7 +1,7 @@ import concore from ast import literal_eval import time -concore.delay = 0.001 +concore.delay = 0.01 init_simtime_u = "[0.0, 0.0, 0.0]" init_simtime_ym = "[0.0, 0.0, 0.0]" minElasped = 10000000 diff --git a/nintan/pstim.py b/nintan/pstim.py index a458ece..c9053f9 100644 --- a/nintan/pstim.py +++ b/nintan/pstim.py @@ -3,7 +3,7 @@ import time import threading -from hardware.util_functions import * +#from hardware.util_functions import * import nidaqmx from nidaqmx.constants import AcquisitionType from nidaqmx.stream_writers import DigitalSingleChannelWriter @@ -20,28 +20,38 @@ def pwm(): if ulocal > 1.0: ulocal = 1.0 + print("+") writer.write_one_sample_one_line(data=1,timeout=10) - accurate_delay(PULSE_WIDTH*ulocal) - writer.write_one_sample_one_line(data=0,timeout=10) - accurate_delay(PULSE_WIDTH*(1.0-ulocal)) + time.sleep(PULSE_WIDTH*ulocal) + # accurate_delay(PULSE_WIDTH*ulocal) - # print("+") - # time.sleep(PULSE_WIDTH*ulocal) - # print("-") - # time.sleep(PULSE_WIDTH*(1.0-ulocal)) + print("-") + writer.write_one_sample_one_line(data=0,timeout=10) + time.sleep(PULSE_WIDTH*(1.0-ulocal)) + # accurate_delay(PULSE_WIDTH*(1.0-ulocal)) pwm_thread = threading.Thread(target=pwm, daemon=True) +def cnt(): + count = 0 + while(True): + print(count) + count = (count + 1)%10 + time.sleep(1) + +cnt_thread = threading.Thread(target=cnt, daemon=True) + task = nidaqmx.Task() task.do_channels.add_do_chan("Dev1/port0/line0") writer = DigitalSingleChannelWriter(task.out_stream) -concore.delay = 0.001 +concore.delay = 0.01 init_simtime_u = "[0.0, 0.0, 0.0]" init_simtime_ym = "[0.0, 0.0, 0.0]" ym = concore.initval(init_simtime_ym) +cnt_thread.start() pwm_thread.start() while(concore.simtime Date: Mon, 27 Mar 2023 15:45:14 -0400 Subject: [PATCH 16/43] Close the file due to the warnings during interaction with nidaqmx --- concore.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/concore.py b/concore.py index e3ec817..1459c76 100644 --- a/concore.py +++ b/concore.py @@ -77,11 +77,14 @@ def read(port, name, initstr): try: infile = open(inpath+str(port)+"/"+name); ins = infile.read() + infile.close() except: ins = initstr while len(ins)==0: time.sleep(delay) + infile = open(inpath+str(port)+"/"+name); ins = infile.read() + infile.close() retrycount += 1 s += ins inval = literal_eval(ins) @@ -110,4 +113,3 @@ def initval(simtime_val): val = literal_eval(simtime_val) simtime = val[0] return val[1:] - From 67ba1005d29fdd17d99d043eda63c02a041e8463 Mon Sep 17 00:00:00 2001 From: Shivang Vijay Date: Wed, 29 Mar 2023 17:20:45 +0530 Subject: [PATCH 17/43] Added docker-compose.yml --- fri/docker-compose.yml | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 fri/docker-compose.yml diff --git a/fri/docker-compose.yml b/fri/docker-compose.yml new file mode 100644 index 0000000..542536f --- /dev/null +++ b/fri/docker-compose.yml @@ -0,0 +1,37 @@ +version: '3' + +services: + fri: + build: + context: . + image: fri + ports: + - 8090:8080 + command: tail -f /dev/null + + kong-database: + image: cassandra:3 + ports: + - 9042:9042 + + kong: + image: kong + depends_on: + - kong-database + environment: + KONG_DATABASE: cassandra + KONG_PG_HOST: kong-database + KONG_PG_PASSWORD: kong + KONG_CASSANDRA_CONTACT_POINTS: kong-database + KONG_PROXY_ACCESS_LOG: /dev/stdout + KONG_ADMIN_ACCESS_LOG: /dev/stdout + KONG_PROXY_ERROR_LOG: /dev/stderr + KONG_ADMIN_ERROR_LOG: /dev/stderr + KONG_ADMIN_LISTEN: 0.0.0.0:8001, 0.0.0.0:8444 ssl + ports: + - 80:8000 + - 8443:8443 + - 8001:8001 + - 8444:8444 + + \ No newline at end of file From d6fd1eae71d25663405fd074899c687a7861ccad Mon Sep 17 00:00:00 2001 From: Shivang Vijay Date: Wed, 29 Mar 2023 17:59:52 +0530 Subject: [PATCH 18/43] Updated Docker Readme.md, Installation of Docker --- fri/DOCKER-README.md | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/fri/DOCKER-README.md b/fri/DOCKER-README.md index 84f7bf8..32c59e1 100644 --- a/fri/DOCKER-README.md +++ b/fri/DOCKER-README.md @@ -1,3 +1,24 @@ +# Install Docker:- + +Open Terminal and run the following commands:- + +```` +$ sudo apt-get update +$ sudo apt-get install curl +$ curl -fsSL https://get.docker.com/ | sh +```` +Optional command:- To run docker commands without sudo +```` +$ sudo usermod -aG docker +```` +The above command add the laptop username in the docker group, Restart the system to complete the process. + +After restart run + +```` +$ sudo service docker start +```` + # Building FRI Container Now, we elaborate on building FRI as a container, together with the Kong API Gateway. @@ -15,7 +36,7 @@ First build the Docker Container of the FRI. ```` $ git pull -$ sudo docker build -t fri . +$ docker build -t fri . ```` # Running Control-Core FRI with Kong as containers @@ -107,17 +128,17 @@ $ tail -f controlcore.out ```` or ```` -$ sudo docker logs fri -f +$ docker logs fri -f ```` Find the FRI docker container ```` -$ sudo docker ps +$ docker ps ```` CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES dfdd3b3d3308 fri "python main.py" 38 minutes ago Up 38 minutes 0.0.0.0:80->80/tcp fri Access the container ```` -$ sudo docker exec -it dfdd /bin/bash +$ docker exec -it dfdd /bin/bash ```` From 4fa615f197f1bdeed268ed4930a123b05dd70874 Mon Sep 17 00:00:00 2001 From: Shivang Vijay Date: Wed, 29 Mar 2023 18:01:44 +0530 Subject: [PATCH 19/43] Update DOCKER-README.md general nomeclature used --- fri/DOCKER-README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fri/DOCKER-README.md b/fri/DOCKER-README.md index 32c59e1..459d362 100644 --- a/fri/DOCKER-README.md +++ b/fri/DOCKER-README.md @@ -9,9 +9,9 @@ $ curl -fsSL https://get.docker.com/ | sh ```` Optional command:- To run docker commands without sudo ```` -$ sudo usermod -aG docker +$ sudo usermod -aG docker ```` -The above command add the laptop username in the docker group, Restart the system to complete the process. +The above command add the system username in the docker group, Restart the system to complete the process. After restart run From 1eeefcd8b9b23d6f74dd18dea6de18eb30124679 Mon Sep 17 00:00:00 2001 From: markgarnold <78613198+markgarnold@users.noreply.github.com> Date: Wed, 29 Mar 2023 14:36:21 -0400 Subject: [PATCH 20/43] pacq reads and writes ym --- nintan/pacq.py | 61 +++++++ nintan/plotym.py | 34 ++++ nintan/testplot.graphml | 304 ++++++++++++++++++++++++++++++++++ nintan/teststimacq.graphml | 280 ++++++++++++++++++++++++++++++++ nintan/teststimacq0.graphml | 316 ++++++++++++++++++++++++++++++++++++ 5 files changed, 995 insertions(+) create mode 100644 nintan/pacq.py create mode 100644 nintan/plotym.py create mode 100644 nintan/testplot.graphml create mode 100644 nintan/teststimacq.graphml create mode 100644 nintan/teststimacq0.graphml diff --git a/nintan/pacq.py b/nintan/pacq.py new file mode 100644 index 0000000..b970efe --- /dev/null +++ b/nintan/pacq.py @@ -0,0 +1,61 @@ +import concore +import time +import threading + +global ymglobal +ymglobal = 0 + +def extract(ampD): + s = 0.0 + for data in ampD: + s += data + return s/len(ampD) + +def acq(): + global ymglobal + counter = 0 + while(True): + ampT = [] + ampD = [] + for block in range(numBlocks): + for frame in range(framesPerBlock): + ampT.append(counter + block*framesPerBlock+frame) + ampD.append(counter + abs(frame-framesPerBlock/2)) + print(ampT) + print(ampD) + ymglobal = extract(ampD) + print(ymglobal) + counter = counter + numBlocks*framesPerBlock + time.sleep(1) + +acq_thread = threading.Thread(target=acq, daemon=True) + +def cnt(): + count = 0 + while(True): + print(count) + count = (count + 1)%10 + time.sleep(1) + +#cnt_thread = threading.Thread(target=cnt, daemon=True) + +#initialization +numBlocks = 3 +framesPerBlock = 5 + +concore.delay = 0.01 +init_simtime_u = "[0.0, 0.0, 0.0]" +init_simtime_ym = "[0.0, 0.0, 0.0]" + +ym = concore.initval(init_simtime_ym) + +#cnt_thread.start() +acq_thread.start() +while(concore.simtime + + + + + + + + + + + CZ:cstim.py + + + + + + + + + + + PZ:pstim0.py + + + + + + + + + + + AZ:plotym.py + + + + + + + + + + CU + + + + + + + + + + + + PYM + + + + + + + + + + + + AYM + + + + + + + + 1679679128844 + + DEL_NODE + WyJiMTE5M2MzZi1lZGMyLTQxZmYtYTMxZC0xMzYwNmY0NGFlNWUiXQ== + + + ADD_NODE + WyJDWjpjc3RpbS5weSIseyJ3aWR0aCI6MTA0LCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjEwMCwieSI6MTAwfSx7fSwiYjExOTNjM2YtZWRjMi00MWZmLWEzMWQtMTM2MDZmNDRhZTVlIl0= + + 2e86d4fed8aafe8ef09f1cf40708efba + + + 1679679163391 + + DEL_NODE + WyJhMjQ1NWUwYy1kYjAzLTRhYjctODNjNi02ZWJlMDYyN2M4ZDgiXQ== + + + ADD_NODE + WyJQWjpwc3RpbS5weSIseyJ3aWR0aCI6MTA0LCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjEwMy43MzI0NDY2NDExNTI4NSwieSI6MjQxLjYxODYyMDUzNTc5MDN9LHt9LCJhMjQ1NWUwYy1kYjAzLTRhYjctODNjNi02ZWJlMDYyN2M4ZDgiXQ== + + 80c0f78366d87d0e9cb4a9f779ef910d + + + 1679679171029 + + SET_POS + WyJhMjQ1NWUwYy1kYjAzLTRhYjctODNjNi02ZWJlMDYyN2M4ZDgiLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6MTAzLjczMjQ0NjY0MTE1Mjg1LCJ5IjoyMDUuODA0MDI5OTEzODA2NTd9XQ== + + + SET_POS + WyJhMjQ1NWUwYy1kYjAzLTRhYjctODNjNi02ZWJlMDYyN2M4ZDgiLHsieCI6MTAzLjczMjQ0NjY0MTE1Mjg1LCJ5IjoyMDUuODA0MDI5OTEzODA2NTd9LHsieCI6MTEwLCJ5IjoxMTB9XQ== + + c57e6b6829d726b5f03a833b44307338 + + + 1679679176150 + + DEL_EDGE + WyIwOTljODE1Mi1mYmNjLTQwMDAtOTY2ZC1hZjVkYjVkYjA3ZjciXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJiMTE5M2MzZi1lZGMyLTQxZmYtYTMxZC0xMzYwNmY0NGFlNWUiLCJ0YXJnZXRJRCI6ImEyNDU1ZTBjLWRiMDMtNGFiNy04M2M2LTZlYmUwNjI3YzhkOCIsImxhYmVsIjoiQ1AiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6bnVsbCwic2hhcGUiOiJzb2xpZCJ9LCJpZCI6IjA5OWM4MTUyLWZiY2MtNDAwMC05NjZkLWFmNWRiNWRiMDdmNyJ9XQ== + + 2b810795ac0dbd48c4b6260f5104c3b1 + + + 1679679205932 + + SET_POS + WyJhMjQ1NWUwYy1kYjAzLTRhYjctODNjNi02ZWJlMDYyN2M4ZDgiLHsieCI6MTAzLjczMjQ0NjY0MTE1Mjg1LCJ5IjoyMDUuODA0MDI5OTEzODA2NTd9LHsieCI6MTAzLjczMjQ0NjY0MTE1Mjg1LCJ5IjoyNDEuNjE4NjIwNTM1NzkwM31d + + + SET_POS + WyJhMjQ1NWUwYy1kYjAzLTRhYjctODNjNi02ZWJlMDYyN2M4ZDgiLHsieCI6MTAzLjczMjQ0NjY0MTE1Mjg1LCJ5IjoyNDEuNjE4NjIwNTM1NzkwM30seyJ4IjoxMDMuNzMyNDQ2NjQxMTUyODUsInkiOjIwNS44MDQwMjk5MTM4MDY1N31d + + 18d729b7e03e83e84b6fbd286d788f71 + + + 1679679211535 + + DEL_EDGE + WyJjZDY3Yzc4NC0yNDlkLTQ5ODMtYTM3Yy1jNDZjMmViODhkZDIiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJhMjQ1NWUwYy1kYjAzLTRhYjctODNjNi02ZWJlMDYyN2M4ZDgiLCJ0YXJnZXRJRCI6ImIxMTkzYzNmLWVkYzItNDFmZi1hMzFkLTEzNjA2ZjQ0YWU1ZSIsImxhYmVsIjoiUEMiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6bnVsbCwic2hhcGUiOiJzb2xpZCJ9LCJpZCI6ImNkNjdjNzg0LTI0OWQtNDk4My1hMzdjLWM0NmMyZWI4OGRkMiJ9XQ== + + e08334b92279b7c8a1863601555d0c32 + + + 1679679230448 + + UPDATE_EDGE + WyIwOTljODE1Mi1mYmNjLTQwMDAtOTY2ZC1hZjVkYjVkYjA3ZjciLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOm51bGwsInNoYXBlIjoic29saWQifSwiQ1AiLHRydWVd + + + UPDATE_EDGE + WyIwOTljODE1Mi1mYmNjLTQwMDAtOTY2ZC1hZjVkYjVkYjA3ZjciLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOm51bGwsInNoYXBlIjoic29saWQifSwiVSIsdHJ1ZV0= + + d9ee24f85d386f27731edf62627e54a7 + + + 1679679244531 + + UPDATE_EDGE + WyIwOTljODE1Mi1mYmNjLTQwMDAtOTY2ZC1hZjVkYjVkYjA3ZjciLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOm51bGwsInNoYXBlIjoic29saWQifSwiVSIsdHJ1ZV0= + + + UPDATE_EDGE + WyIwOTljODE1Mi1mYmNjLTQwMDAtOTY2ZC1hZjVkYjVkYjA3ZjciLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOm51bGwsInNoYXBlIjoic29saWQifSwiQ1UiLHRydWVd + + 5dc0d5c06a55c52b36813323f7847b41 + + + 1679679254340 + + UPDATE_EDGE + WyJjZDY3Yzc4NC0yNDlkLTQ5ODMtYTM3Yy1jNDZjMmViODhkZDIiLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOm51bGwsInNoYXBlIjoic29saWQifSwiUEMiLHRydWVd + + + UPDATE_EDGE + WyJjZDY3Yzc4NC0yNDlkLTQ5ODMtYTM3Yy1jNDZjMmViODhkZDIiLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOm51bGwsInNoYXBlIjoic29saWQifSwiUFlNIix0cnVlXQ== + + 6741405b1346bb7d4696e6f43d8dd767 + + + 1680063133865 + + DEL_NODE + WyJlMGMzNWZhNi00ODVjLTRiMjktYTUzOS0wYmZhYzAwZWQzMjAiXQ== + + + ADD_NODE + WyJBUTpwYWNxLnB5Iix7IndpZHRoIjoxMDQsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MzM5LCJ5IjoxNTZ9LHt9LCJlMGMzNWZhNi00ODVjLTRiMjktYTUzOS0wYmZhYzAwZWQzMjAiXQ== + + 3287a038f8fe444dee54a3810ee43e4d + + + 1680063141667 + + SET_POS + WyJlMGMzNWZhNi00ODVjLTRiMjktYTUzOS0wYmZhYzAwZWQzMjAiLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6Mjc2LCJ5IjoxNTR9XQ== + + + SET_POS + WyJlMGMzNWZhNi00ODVjLTRiMjktYTUzOS0wYmZhYzAwZWQzMjAiLHsieCI6Mjc2LCJ5IjoxNTR9LHsieCI6MTEwLCJ5IjoxMTB9XQ== + + f7d58daaa5012b5681a7083b83a4631b + + + 1680063155805 + + DEL_EDGE + WyIxM2I4NWVmMS01YjM2LTQ0MmEtYmYxZC1lMGY1YTE5Y2IwNWUiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJhMjQ1NWUwYy1kYjAzLTRhYjctODNjNi02ZWJlMDYyN2M4ZDgiLCJ0YXJnZXRJRCI6ImUwYzM1ZmE2LTQ4NWMtNGIyOS1hNTM5LTBiZmFjMDBlZDMyMCIsImlkIjoiMTNiODVlZjEtNWIzNi00NDJhLWJmMWQtZTBmNWExOWNiMDVlIn1d + + cc6959d442babdc676db4b9c10832c42 + + + 1680063168225 + + ADD_EDGE + W3sibGFiZWwiOiJQWU0iLCJzb3VyY2UiOiJlZTUxZWM5NC1hZTZkLTQ3NmEtYjlhOC1kNmFmNjg5ZmIxMjUiLCJ0YXJnZXQiOiJiMTE5M2MzZi1lZGMyLTQxZmYtYTMxZC0xMzYwNmY0NGFlNWUiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsInNoYXBlIjoic29saWQifSwiYmVuZERhdGEiOnsiYmVuZERpc3RhbmNlIjoyMi45NTU5ODkxMTI2NTAxNjIsImJlbmRXZWlnaHQiOjAuNTA4MDY3NzAxOTg3NDI4NSwiYmVuZFBvaW50Ijp7IngiOjEzNC4xMDQxNTA3MzU2NTM3MiwieSI6MTUyLjgxNzM2MzIzMzU5ODM3fX0sInNvdXJjZUlEIjoiYTI0NTVlMGMtZGIwMy00YWI3LTgzYzYtNmViZTA2MjdjOGQ4IiwidGFyZ2V0SUQiOiJiMTE5M2MzZi1lZGMyLTQxZmYtYTMxZC0xMzYwNmY0NGFlNWUiLCJ0eXBlIjoib3JkaW4iLCJpZCI6IjZjNDU5ZThkLTFkZWQtNDhkNy05ZTIyLWNiMGE2ZTc5MjkxYiJ9XQ== + + + DEL_EDGE + WyI2YzQ1OWU4ZC0xZGVkLTQ4ZDctOWUyMi1jYjBhNmU3OTI5MWIiXQ== + + 686c147a5abc46f1df084baa5e2cf814 + + + 1680063177212 + + DEL_EDGE + WyIzNmUyMTE3Ny04YzdhLTQ4YjQtYTE2ZS1mYTJhOWUxZjk4ZjciXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJlMGMzNWZhNi00ODVjLTRiMjktYTUzOS0wYmZhYzAwZWQzMjAiLCJ0YXJnZXRJRCI6ImIxMTkzYzNmLWVkYzItNDFmZi1hMzFkLTEzNjA2ZjQ0YWU1ZSIsImxhYmVsIjoiQVlNIiwic3R5bGUiOnsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOm51bGwsInNoYXBlIjoic29saWQifSwiaWQiOiIzNmUyMTE3Ny04YzdhLTQ4YjQtYTE2ZS1mYTJhOWUxZjk4ZjcifV0= + + edb67f19b4a7824d05206aa4e881a1a6 + + + 1680063187427 + + SET_POS + WyJlMGMzNWZhNi00ODVjLTRiMjktYTUzOS0wYmZhYzAwZWQzMjAiLHsieCI6Mjc2LCJ5IjoxNTR9LHsieCI6MzM5LCJ5IjoxNTZ9XQ== + + + SET_POS + WyJlMGMzNWZhNi00ODVjLTRiMjktYTUzOS0wYmZhYzAwZWQzMjAiLHsieCI6MzM5LCJ5IjoxNTZ9LHsieCI6Mjc2LCJ5IjoxNTR9XQ== + + 66858450ca671faf70f4c4405304cabc + + + 1680063190935 + + UPDATE_NODE + WyJlMGMzNWZhNi00ODVjLTRiMjktYTUzOS0wYmZhYzAwZWQzMjAiLHsid2lkdGgiOjEwNCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJBUTpwYWNxLnB5Iix0cnVlXQ== + + + UPDATE_NODE + WyJlMGMzNWZhNi00ODVjLTRiMjktYTUzOS0wYmZhYzAwZWQzMjAiLHsid2lkdGgiOjEwNCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJBWjoiLHRydWVd + + 3f0ebff9c7be28e0d2f31fd458269284 + + + 1680063200154 + + UPDATE_NODE + WyJlMGMzNWZhNi00ODVjLTRiMjktYTUzOS0wYmZhYzAwZWQzMjAiLHsid2lkdGgiOjEwNCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJBWjoiLHRydWVd + + + UPDATE_NODE + WyJlMGMzNWZhNi00ODVjLTRiMjktYTUzOS0wYmZhYzAwZWQzMjAiLHsid2lkdGgiOjEwNCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJBWjpwYWNxLnB5Iix0cnVlXQ== + + 06c7aa1eb3de8407b009e0837f191c3f + + + 1680112486999 + + UPDATE_NODE + WyJlMGMzNWZhNi00ODVjLTRiMjktYTUzOS0wYmZhYzAwZWQzMjAiLHsid2lkdGgiOjEwNCwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJBWjpwYWNxLnB5Iix0cnVlXQ== + + + UPDATE_NODE + WyJlMGMzNWZhNi00ODVjLTRiMjktYTUzOS0wYmZhYzAwZWQzMjAiLHsid2lkdGgiOjExMywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJBWjpwbG90eW0ucHkiLHRydWVd + + 1e1c7a613c4ff82dadf9f654081eacc7 + + + 1680112660989 + + UPDATE_NODE + WyJhMjQ1NWUwYy1kYjAzLTRhYjctODNjNi02ZWJlMDYyN2M4ZDgiLHsid2lkdGgiOjEwNCwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJQWjpwc3RpbS5weSIsdHJ1ZV0= + + + UPDATE_NODE + WyJhMjQ1NWUwYy1kYjAzLTRhYjctODNjNi02ZWJlMDYyN2M4ZDgiLHsid2lkdGgiOjExMywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJQWjpwc3RpbTAucHkiLHRydWVd + + da27b84084e25fd34107340e91be8c25 + + + \ No newline at end of file diff --git a/nintan/teststimacq.graphml b/nintan/teststimacq.graphml new file mode 100644 index 0000000..1337649 --- /dev/null +++ b/nintan/teststimacq.graphml @@ -0,0 +1,280 @@ + + + + + + + + + + + + CZ:cstim.py + + + + + + + + + + + PZ:pstim.py + + + + + + + + + + + AZ:pacq.py + + + + + + + + + + CU + + + + + + + + + + + + PYM + + + + + + + + + + + + AYM + + + + + + + + 1679679128844 + + DEL_NODE + WyJiMTE5M2MzZi1lZGMyLTQxZmYtYTMxZC0xMzYwNmY0NGFlNWUiXQ== + + + ADD_NODE + WyJDWjpjc3RpbS5weSIseyJ3aWR0aCI6MTA0LCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjEwMCwieSI6MTAwfSx7fSwiYjExOTNjM2YtZWRjMi00MWZmLWEzMWQtMTM2MDZmNDRhZTVlIl0= + + 2e86d4fed8aafe8ef09f1cf40708efba + + + 1679679163391 + + DEL_NODE + WyJhMjQ1NWUwYy1kYjAzLTRhYjctODNjNi02ZWJlMDYyN2M4ZDgiXQ== + + + ADD_NODE + WyJQWjpwc3RpbS5weSIseyJ3aWR0aCI6MTA0LCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjEwMy43MzI0NDY2NDExNTI4NSwieSI6MjQxLjYxODYyMDUzNTc5MDN9LHt9LCJhMjQ1NWUwYy1kYjAzLTRhYjctODNjNi02ZWJlMDYyN2M4ZDgiXQ== + + 80c0f78366d87d0e9cb4a9f779ef910d + + + 1679679171029 + + SET_POS + WyJhMjQ1NWUwYy1kYjAzLTRhYjctODNjNi02ZWJlMDYyN2M4ZDgiLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6MTAzLjczMjQ0NjY0MTE1Mjg1LCJ5IjoyMDUuODA0MDI5OTEzODA2NTd9XQ== + + + SET_POS + WyJhMjQ1NWUwYy1kYjAzLTRhYjctODNjNi02ZWJlMDYyN2M4ZDgiLHsieCI6MTAzLjczMjQ0NjY0MTE1Mjg1LCJ5IjoyMDUuODA0MDI5OTEzODA2NTd9LHsieCI6MTEwLCJ5IjoxMTB9XQ== + + c57e6b6829d726b5f03a833b44307338 + + + 1679679176150 + + DEL_EDGE + WyIwOTljODE1Mi1mYmNjLTQwMDAtOTY2ZC1hZjVkYjVkYjA3ZjciXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJiMTE5M2MzZi1lZGMyLTQxZmYtYTMxZC0xMzYwNmY0NGFlNWUiLCJ0YXJnZXRJRCI6ImEyNDU1ZTBjLWRiMDMtNGFiNy04M2M2LTZlYmUwNjI3YzhkOCIsImxhYmVsIjoiQ1AiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6bnVsbCwic2hhcGUiOiJzb2xpZCJ9LCJpZCI6IjA5OWM4MTUyLWZiY2MtNDAwMC05NjZkLWFmNWRiNWRiMDdmNyJ9XQ== + + 2b810795ac0dbd48c4b6260f5104c3b1 + + + 1679679205932 + + SET_POS + WyJhMjQ1NWUwYy1kYjAzLTRhYjctODNjNi02ZWJlMDYyN2M4ZDgiLHsieCI6MTAzLjczMjQ0NjY0MTE1Mjg1LCJ5IjoyMDUuODA0MDI5OTEzODA2NTd9LHsieCI6MTAzLjczMjQ0NjY0MTE1Mjg1LCJ5IjoyNDEuNjE4NjIwNTM1NzkwM31d + + + SET_POS + WyJhMjQ1NWUwYy1kYjAzLTRhYjctODNjNi02ZWJlMDYyN2M4ZDgiLHsieCI6MTAzLjczMjQ0NjY0MTE1Mjg1LCJ5IjoyNDEuNjE4NjIwNTM1NzkwM30seyJ4IjoxMDMuNzMyNDQ2NjQxMTUyODUsInkiOjIwNS44MDQwMjk5MTM4MDY1N31d + + 18d729b7e03e83e84b6fbd286d788f71 + + + 1679679211535 + + DEL_EDGE + WyJjZDY3Yzc4NC0yNDlkLTQ5ODMtYTM3Yy1jNDZjMmViODhkZDIiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJhMjQ1NWUwYy1kYjAzLTRhYjctODNjNi02ZWJlMDYyN2M4ZDgiLCJ0YXJnZXRJRCI6ImIxMTkzYzNmLWVkYzItNDFmZi1hMzFkLTEzNjA2ZjQ0YWU1ZSIsImxhYmVsIjoiUEMiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6bnVsbCwic2hhcGUiOiJzb2xpZCJ9LCJpZCI6ImNkNjdjNzg0LTI0OWQtNDk4My1hMzdjLWM0NmMyZWI4OGRkMiJ9XQ== + + e08334b92279b7c8a1863601555d0c32 + + + 1679679230448 + + UPDATE_EDGE + WyIwOTljODE1Mi1mYmNjLTQwMDAtOTY2ZC1hZjVkYjVkYjA3ZjciLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOm51bGwsInNoYXBlIjoic29saWQifSwiQ1AiLHRydWVd + + + UPDATE_EDGE + WyIwOTljODE1Mi1mYmNjLTQwMDAtOTY2ZC1hZjVkYjVkYjA3ZjciLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOm51bGwsInNoYXBlIjoic29saWQifSwiVSIsdHJ1ZV0= + + d9ee24f85d386f27731edf62627e54a7 + + + 1679679244531 + + UPDATE_EDGE + WyIwOTljODE1Mi1mYmNjLTQwMDAtOTY2ZC1hZjVkYjVkYjA3ZjciLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOm51bGwsInNoYXBlIjoic29saWQifSwiVSIsdHJ1ZV0= + + + UPDATE_EDGE + WyIwOTljODE1Mi1mYmNjLTQwMDAtOTY2ZC1hZjVkYjVkYjA3ZjciLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOm51bGwsInNoYXBlIjoic29saWQifSwiQ1UiLHRydWVd + + 5dc0d5c06a55c52b36813323f7847b41 + + + 1679679254340 + + UPDATE_EDGE + WyJjZDY3Yzc4NC0yNDlkLTQ5ODMtYTM3Yy1jNDZjMmViODhkZDIiLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOm51bGwsInNoYXBlIjoic29saWQifSwiUEMiLHRydWVd + + + UPDATE_EDGE + WyJjZDY3Yzc4NC0yNDlkLTQ5ODMtYTM3Yy1jNDZjMmViODhkZDIiLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOm51bGwsInNoYXBlIjoic29saWQifSwiUFlNIix0cnVlXQ== + + 6741405b1346bb7d4696e6f43d8dd767 + + + 1680063133865 + + DEL_NODE + WyJlMGMzNWZhNi00ODVjLTRiMjktYTUzOS0wYmZhYzAwZWQzMjAiXQ== + + + ADD_NODE + WyJBUTpwYWNxLnB5Iix7IndpZHRoIjoxMDQsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MzM5LCJ5IjoxNTZ9LHt9LCJlMGMzNWZhNi00ODVjLTRiMjktYTUzOS0wYmZhYzAwZWQzMjAiXQ== + + ef796b8657d7fcf6afef8fa7aac0ffff + + + 1680063141667 + + SET_POS + WyJlMGMzNWZhNi00ODVjLTRiMjktYTUzOS0wYmZhYzAwZWQzMjAiLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6Mjc2LCJ5IjoxNTR9XQ== + + + SET_POS + WyJlMGMzNWZhNi00ODVjLTRiMjktYTUzOS0wYmZhYzAwZWQzMjAiLHsieCI6Mjc2LCJ5IjoxNTR9LHsieCI6MTEwLCJ5IjoxMTB9XQ== + + a98afef4b19f14d140b7af8fa63db087 + + + 1680063155805 + + DEL_EDGE + WyIxM2I4NWVmMS01YjM2LTQ0MmEtYmYxZC1lMGY1YTE5Y2IwNWUiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJhMjQ1NWUwYy1kYjAzLTRhYjctODNjNi02ZWJlMDYyN2M4ZDgiLCJ0YXJnZXRJRCI6ImUwYzM1ZmE2LTQ4NWMtNGIyOS1hNTM5LTBiZmFjMDBlZDMyMCIsImlkIjoiMTNiODVlZjEtNWIzNi00NDJhLWJmMWQtZTBmNWExOWNiMDVlIn1d + + 778e62b28db4b9ca2eb333236bba9b74 + + + 1680063168225 + + ADD_EDGE + W3sibGFiZWwiOiJQWU0iLCJzb3VyY2UiOiJlZTUxZWM5NC1hZTZkLTQ3NmEtYjlhOC1kNmFmNjg5ZmIxMjUiLCJ0YXJnZXQiOiJiMTE5M2MzZi1lZGMyLTQxZmYtYTMxZC0xMzYwNmY0NGFlNWUiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsInNoYXBlIjoic29saWQifSwiYmVuZERhdGEiOnsiYmVuZERpc3RhbmNlIjoyMi45NTU5ODkxMTI2NTAxNjIsImJlbmRXZWlnaHQiOjAuNTA4MDY3NzAxOTg3NDI4NSwiYmVuZFBvaW50Ijp7IngiOjEzNC4xMDQxNTA3MzU2NTM3MiwieSI6MTUyLjgxNzM2MzIzMzU5ODM3fX0sInNvdXJjZUlEIjoiYTI0NTVlMGMtZGIwMy00YWI3LTgzYzYtNmViZTA2MjdjOGQ4IiwidGFyZ2V0SUQiOiJiMTE5M2MzZi1lZGMyLTQxZmYtYTMxZC0xMzYwNmY0NGFlNWUiLCJ0eXBlIjoib3JkaW4iLCJpZCI6IjZjNDU5ZThkLTFkZWQtNDhkNy05ZTIyLWNiMGE2ZTc5MjkxYiJ9XQ== + + + DEL_EDGE + WyI2YzQ1OWU4ZC0xZGVkLTQ4ZDctOWUyMi1jYjBhNmU3OTI5MWIiXQ== + + b3482e49055a81731f7b95b7d0ef5da8 + + + 1680063177212 + + DEL_EDGE + WyIzNmUyMTE3Ny04YzdhLTQ4YjQtYTE2ZS1mYTJhOWUxZjk4ZjciXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJlMGMzNWZhNi00ODVjLTRiMjktYTUzOS0wYmZhYzAwZWQzMjAiLCJ0YXJnZXRJRCI6ImIxMTkzYzNmLWVkYzItNDFmZi1hMzFkLTEzNjA2ZjQ0YWU1ZSIsImxhYmVsIjoiQVlNIiwic3R5bGUiOnsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOm51bGwsInNoYXBlIjoic29saWQifSwiaWQiOiIzNmUyMTE3Ny04YzdhLTQ4YjQtYTE2ZS1mYTJhOWUxZjk4ZjcifV0= + + b9ec4eaa5bead6d881191cf1cb501643 + + + 1680063187427 + + SET_POS + WyJlMGMzNWZhNi00ODVjLTRiMjktYTUzOS0wYmZhYzAwZWQzMjAiLHsieCI6Mjc2LCJ5IjoxNTR9LHsieCI6MzM5LCJ5IjoxNTZ9XQ== + + + SET_POS + WyJlMGMzNWZhNi00ODVjLTRiMjktYTUzOS0wYmZhYzAwZWQzMjAiLHsieCI6MzM5LCJ5IjoxNTZ9LHsieCI6Mjc2LCJ5IjoxNTR9XQ== + + ed4a57e0e6dfed4c9345249e55f7b056 + + + 1680063190935 + + UPDATE_NODE + WyJlMGMzNWZhNi00ODVjLTRiMjktYTUzOS0wYmZhYzAwZWQzMjAiLHsid2lkdGgiOjEwNCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJBUTpwYWNxLnB5Iix0cnVlXQ== + + + UPDATE_NODE + WyJlMGMzNWZhNi00ODVjLTRiMjktYTUzOS0wYmZhYzAwZWQzMjAiLHsid2lkdGgiOjEwNCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJBWjoiLHRydWVd + + c60aa480e8b8bf1960556dc08773d337 + + + 1680063200154 + + UPDATE_NODE + WyJlMGMzNWZhNi00ODVjLTRiMjktYTUzOS0wYmZhYzAwZWQzMjAiLHsid2lkdGgiOjEwNCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJBWjoiLHRydWVd + + + UPDATE_NODE + WyJlMGMzNWZhNi00ODVjLTRiMjktYTUzOS0wYmZhYzAwZWQzMjAiLHsid2lkdGgiOjEwNCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJBWjpwYWNxLnB5Iix0cnVlXQ== + + c15d3a2174783f98c1d0953ee0a1bb37 + + + \ No newline at end of file diff --git a/nintan/teststimacq0.graphml b/nintan/teststimacq0.graphml new file mode 100644 index 0000000..4b0ec7b --- /dev/null +++ b/nintan/teststimacq0.graphml @@ -0,0 +1,316 @@ + + + + + + + + + + + + CZ:cstim.py + + + + + + + + + + + PZ:pstim0.py + + + + + + + + + + + AZ:pacq.py + + + + + + + + + + CU + + + + + + + + + + + + PYM + + + + + + + + + + + + AYM + + + + + + + + 1679679128844 + + DEL_NODE + WyJiMTE5M2MzZi1lZGMyLTQxZmYtYTMxZC0xMzYwNmY0NGFlNWUiXQ== + + + ADD_NODE + WyJDWjpjc3RpbS5weSIseyJ3aWR0aCI6MTA0LCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjEwMCwieSI6MTAwfSx7fSwiYjExOTNjM2YtZWRjMi00MWZmLWEzMWQtMTM2MDZmNDRhZTVlIl0= + + 2e86d4fed8aafe8ef09f1cf40708efba + + + 1679679163391 + + DEL_NODE + WyJhMjQ1NWUwYy1kYjAzLTRhYjctODNjNi02ZWJlMDYyN2M4ZDgiXQ== + + + ADD_NODE + WyJQWjpwc3RpbS5weSIseyJ3aWR0aCI6MTA0LCJoZWlnaHQiOjUwLCJzaGFwZSI6InJlY3RhbmdsZSIsIm9wYWNpdHkiOjEsImJhY2tncm91bmRDb2xvciI6IiNmZmNjMDAiLCJib3JkZXJDb2xvciI6IiMwMDAiLCJib3JkZXJXaWR0aCI6MX0sIm9yZGluIix7IngiOjEwMy43MzI0NDY2NDExNTI4NSwieSI6MjQxLjYxODYyMDUzNTc5MDN9LHt9LCJhMjQ1NWUwYy1kYjAzLTRhYjctODNjNi02ZWJlMDYyN2M4ZDgiXQ== + + 80c0f78366d87d0e9cb4a9f779ef910d + + + 1679679171029 + + SET_POS + WyJhMjQ1NWUwYy1kYjAzLTRhYjctODNjNi02ZWJlMDYyN2M4ZDgiLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6MTAzLjczMjQ0NjY0MTE1Mjg1LCJ5IjoyMDUuODA0MDI5OTEzODA2NTd9XQ== + + + SET_POS + WyJhMjQ1NWUwYy1kYjAzLTRhYjctODNjNi02ZWJlMDYyN2M4ZDgiLHsieCI6MTAzLjczMjQ0NjY0MTE1Mjg1LCJ5IjoyMDUuODA0MDI5OTEzODA2NTd9LHsieCI6MTEwLCJ5IjoxMTB9XQ== + + c57e6b6829d726b5f03a833b44307338 + + + 1679679176150 + + DEL_EDGE + WyIwOTljODE1Mi1mYmNjLTQwMDAtOTY2ZC1hZjVkYjVkYjA3ZjciXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJiMTE5M2MzZi1lZGMyLTQxZmYtYTMxZC0xMzYwNmY0NGFlNWUiLCJ0YXJnZXRJRCI6ImEyNDU1ZTBjLWRiMDMtNGFiNy04M2M2LTZlYmUwNjI3YzhkOCIsImxhYmVsIjoiQ1AiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6bnVsbCwic2hhcGUiOiJzb2xpZCJ9LCJpZCI6IjA5OWM4MTUyLWZiY2MtNDAwMC05NjZkLWFmNWRiNWRiMDdmNyJ9XQ== + + 2b810795ac0dbd48c4b6260f5104c3b1 + + + 1679679205932 + + SET_POS + WyJhMjQ1NWUwYy1kYjAzLTRhYjctODNjNi02ZWJlMDYyN2M4ZDgiLHsieCI6MTAzLjczMjQ0NjY0MTE1Mjg1LCJ5IjoyMDUuODA0MDI5OTEzODA2NTd9LHsieCI6MTAzLjczMjQ0NjY0MTE1Mjg1LCJ5IjoyNDEuNjE4NjIwNTM1NzkwM31d + + + SET_POS + WyJhMjQ1NWUwYy1kYjAzLTRhYjctODNjNi02ZWJlMDYyN2M4ZDgiLHsieCI6MTAzLjczMjQ0NjY0MTE1Mjg1LCJ5IjoyNDEuNjE4NjIwNTM1NzkwM30seyJ4IjoxMDMuNzMyNDQ2NjQxMTUyODUsInkiOjIwNS44MDQwMjk5MTM4MDY1N31d + + 18d729b7e03e83e84b6fbd286d788f71 + + + 1679679211535 + + DEL_EDGE + WyJjZDY3Yzc4NC0yNDlkLTQ5ODMtYTM3Yy1jNDZjMmViODhkZDIiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJhMjQ1NWUwYy1kYjAzLTRhYjctODNjNi02ZWJlMDYyN2M4ZDgiLCJ0YXJnZXRJRCI6ImIxMTkzYzNmLWVkYzItNDFmZi1hMzFkLTEzNjA2ZjQ0YWU1ZSIsImxhYmVsIjoiUEMiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsImJhY2tncm91bmRDb2xvciI6bnVsbCwic2hhcGUiOiJzb2xpZCJ9LCJpZCI6ImNkNjdjNzg0LTI0OWQtNDk4My1hMzdjLWM0NmMyZWI4OGRkMiJ9XQ== + + e08334b92279b7c8a1863601555d0c32 + + + 1679679230448 + + UPDATE_EDGE + WyIwOTljODE1Mi1mYmNjLTQwMDAtOTY2ZC1hZjVkYjVkYjA3ZjciLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOm51bGwsInNoYXBlIjoic29saWQifSwiQ1AiLHRydWVd + + + UPDATE_EDGE + WyIwOTljODE1Mi1mYmNjLTQwMDAtOTY2ZC1hZjVkYjVkYjA3ZjciLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOm51bGwsInNoYXBlIjoic29saWQifSwiVSIsdHJ1ZV0= + + d9ee24f85d386f27731edf62627e54a7 + + + 1679679244531 + + UPDATE_EDGE + WyIwOTljODE1Mi1mYmNjLTQwMDAtOTY2ZC1hZjVkYjVkYjA3ZjciLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOm51bGwsInNoYXBlIjoic29saWQifSwiVSIsdHJ1ZV0= + + + UPDATE_EDGE + WyIwOTljODE1Mi1mYmNjLTQwMDAtOTY2ZC1hZjVkYjVkYjA3ZjciLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOm51bGwsInNoYXBlIjoic29saWQifSwiQ1UiLHRydWVd + + 5dc0d5c06a55c52b36813323f7847b41 + + + 1679679254340 + + UPDATE_EDGE + WyJjZDY3Yzc4NC0yNDlkLTQ5ODMtYTM3Yy1jNDZjMmViODhkZDIiLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOm51bGwsInNoYXBlIjoic29saWQifSwiUEMiLHRydWVd + + + UPDATE_EDGE + WyJjZDY3Yzc4NC0yNDlkLTQ5ODMtYTM3Yy1jNDZjMmViODhkZDIiLHsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOm51bGwsInNoYXBlIjoic29saWQifSwiUFlNIix0cnVlXQ== + + 6741405b1346bb7d4696e6f43d8dd767 + + + 1680063133865 + + DEL_NODE + WyJlMGMzNWZhNi00ODVjLTRiMjktYTUzOS0wYmZhYzAwZWQzMjAiXQ== + + + ADD_NODE + WyJBUTpwYWNxLnB5Iix7IndpZHRoIjoxMDQsImhlaWdodCI6NTAsInNoYXBlIjoicmVjdGFuZ2xlIiwib3BhY2l0eSI6MSwiYmFja2dyb3VuZENvbG9yIjoiI2ZmY2MwMCIsImJvcmRlckNvbG9yIjoiIzAwMCIsImJvcmRlcldpZHRoIjoxfSwib3JkaW4iLHsieCI6MzM5LCJ5IjoxNTZ9LHt9LCJlMGMzNWZhNi00ODVjLTRiMjktYTUzOS0wYmZhYzAwZWQzMjAiXQ== + + 3287a038f8fe444dee54a3810ee43e4d + + + 1680063141667 + + SET_POS + WyJlMGMzNWZhNi00ODVjLTRiMjktYTUzOS0wYmZhYzAwZWQzMjAiLHsieCI6MTEwLCJ5IjoxMTB9LHsieCI6Mjc2LCJ5IjoxNTR9XQ== + + + SET_POS + WyJlMGMzNWZhNi00ODVjLTRiMjktYTUzOS0wYmZhYzAwZWQzMjAiLHsieCI6Mjc2LCJ5IjoxNTR9LHsieCI6MTEwLCJ5IjoxMTB9XQ== + + f7d58daaa5012b5681a7083b83a4631b + + + 1680063155805 + + DEL_EDGE + WyIxM2I4NWVmMS01YjM2LTQ0MmEtYmYxZC1lMGY1YTE5Y2IwNWUiXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJhMjQ1NWUwYy1kYjAzLTRhYjctODNjNi02ZWJlMDYyN2M4ZDgiLCJ0YXJnZXRJRCI6ImUwYzM1ZmE2LTQ4NWMtNGIyOS1hNTM5LTBiZmFjMDBlZDMyMCIsImlkIjoiMTNiODVlZjEtNWIzNi00NDJhLWJmMWQtZTBmNWExOWNiMDVlIn1d + + cc6959d442babdc676db4b9c10832c42 + + + 1680063168225 + + ADD_EDGE + W3sibGFiZWwiOiJQWU0iLCJzb3VyY2UiOiJlZTUxZWM5NC1hZTZkLTQ3NmEtYjlhOC1kNmFmNjg5ZmIxMjUiLCJ0YXJnZXQiOiJiMTE5M2MzZi1lZGMyLTQxZmYtYTMxZC0xMzYwNmY0NGFlNWUiLCJzdHlsZSI6eyJ0aGlja25lc3MiOjEsInNoYXBlIjoic29saWQifSwiYmVuZERhdGEiOnsiYmVuZERpc3RhbmNlIjoyMi45NTU5ODkxMTI2NTAxNjIsImJlbmRXZWlnaHQiOjAuNTA4MDY3NzAxOTg3NDI4NSwiYmVuZFBvaW50Ijp7IngiOjEzNC4xMDQxNTA3MzU2NTM3MiwieSI6MTUyLjgxNzM2MzIzMzU5ODM3fX0sInNvdXJjZUlEIjoiYTI0NTVlMGMtZGIwMy00YWI3LTgzYzYtNmViZTA2MjdjOGQ4IiwidGFyZ2V0SUQiOiJiMTE5M2MzZi1lZGMyLTQxZmYtYTMxZC0xMzYwNmY0NGFlNWUiLCJ0eXBlIjoib3JkaW4iLCJpZCI6IjZjNDU5ZThkLTFkZWQtNDhkNy05ZTIyLWNiMGE2ZTc5MjkxYiJ9XQ== + + + DEL_EDGE + WyI2YzQ1OWU4ZC0xZGVkLTQ4ZDctOWUyMi1jYjBhNmU3OTI5MWIiXQ== + + 686c147a5abc46f1df084baa5e2cf814 + + + 1680063177212 + + DEL_EDGE + WyIzNmUyMTE3Ny04YzdhLTQ4YjQtYTE2ZS1mYTJhOWUxZjk4ZjciXQ== + + + ADD_EDGE + W3sic291cmNlSUQiOiJlMGMzNWZhNi00ODVjLTRiMjktYTUzOS0wYmZhYzAwZWQzMjAiLCJ0YXJnZXRJRCI6ImIxMTkzYzNmLWVkYzItNDFmZi1hMzFkLTEzNjA2ZjQ0YWU1ZSIsImxhYmVsIjoiQVlNIiwic3R5bGUiOnsidGhpY2tuZXNzIjoxLCJiYWNrZ3JvdW5kQ29sb3IiOm51bGwsInNoYXBlIjoic29saWQifSwiaWQiOiIzNmUyMTE3Ny04YzdhLTQ4YjQtYTE2ZS1mYTJhOWUxZjk4ZjcifV0= + + edb67f19b4a7824d05206aa4e881a1a6 + + + 1680063187427 + + SET_POS + WyJlMGMzNWZhNi00ODVjLTRiMjktYTUzOS0wYmZhYzAwZWQzMjAiLHsieCI6Mjc2LCJ5IjoxNTR9LHsieCI6MzM5LCJ5IjoxNTZ9XQ== + + + SET_POS + WyJlMGMzNWZhNi00ODVjLTRiMjktYTUzOS0wYmZhYzAwZWQzMjAiLHsieCI6MzM5LCJ5IjoxNTZ9LHsieCI6Mjc2LCJ5IjoxNTR9XQ== + + 66858450ca671faf70f4c4405304cabc + + + 1680063190935 + + UPDATE_NODE + WyJlMGMzNWZhNi00ODVjLTRiMjktYTUzOS0wYmZhYzAwZWQzMjAiLHsid2lkdGgiOjEwNCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJBUTpwYWNxLnB5Iix0cnVlXQ== + + + UPDATE_NODE + WyJlMGMzNWZhNi00ODVjLTRiMjktYTUzOS0wYmZhYzAwZWQzMjAiLHsid2lkdGgiOjEwNCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJBWjoiLHRydWVd + + 3f0ebff9c7be28e0d2f31fd458269284 + + + 1680063200154 + + UPDATE_NODE + WyJlMGMzNWZhNi00ODVjLTRiMjktYTUzOS0wYmZhYzAwZWQzMjAiLHsid2lkdGgiOjEwNCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJBWjoiLHRydWVd + + + UPDATE_NODE + WyJlMGMzNWZhNi00ODVjLTRiMjktYTUzOS0wYmZhYzAwZWQzMjAiLHsid2lkdGgiOjEwNCwiaGVpZ2h0Ijo1MCwic2hhcGUiOiJyZWN0YW5nbGUiLCJvcGFjaXR5IjoxLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJBWjpwYWNxLnB5Iix0cnVlXQ== + + 06c7aa1eb3de8407b009e0837f191c3f + + + 1680112486999 + + UPDATE_NODE + WyJlMGMzNWZhNi00ODVjLTRiMjktYTUzOS0wYmZhYzAwZWQzMjAiLHsid2lkdGgiOjEwNCwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJBWjpwYWNxLnB5Iix0cnVlXQ== + + + UPDATE_NODE + WyJlMGMzNWZhNi00ODVjLTRiMjktYTUzOS0wYmZhYzAwZWQzMjAiLHsid2lkdGgiOjExMywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJBWjpwbG90eW0ucHkiLHRydWVd + + 1e1c7a613c4ff82dadf9f654081eacc7 + + + 1680112660989 + + UPDATE_NODE + WyJhMjQ1NWUwYy1kYjAzLTRhYjctODNjNi02ZWJlMDYyN2M4ZDgiLHsid2lkdGgiOjEwNCwiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJQWjpwc3RpbS5weSIsdHJ1ZV0= + + + UPDATE_NODE + WyJhMjQ1NWUwYy1kYjAzLTRhYjctODNjNi02ZWJlMDYyN2M4ZDgiLHsid2lkdGgiOjExMywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJQWjpwc3RpbTAucHkiLHRydWVd + + da27b84084e25fd34107340e91be8c25 + + + 1680114578248 + + UPDATE_NODE + WyJlMGMzNWZhNi00ODVjLTRiMjktYTUzOS0wYmZhYzAwZWQzMjAiLHsid2lkdGgiOjExMywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJBWjpwbG90eW0ucHkiLHRydWVd + + + UPDATE_NODE + WyJlMGMzNWZhNi00ODVjLTRiMjktYTUzOS0wYmZhYzAwZWQzMjAiLHsid2lkdGgiOjExMywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJBWjpwYWNxLnB5Iix0cnVlXQ== + + c2a34249b2e3bf3a8bf4d0034460e9cc + + + \ No newline at end of file From 650bb549933914b3b7fc5315748ab2d95b890ddb Mon Sep 17 00:00:00 2001 From: markgarnold <78613198+markgarnold@users.noreply.github.com> Date: Sun, 2 Apr 2023 17:13:13 -0400 Subject: [PATCH 21/43] paqc0 start,join --- nintan/pacq.py | 30 ++++++++---------- nintan/pacq0.py | 55 +++++++++++++++++++++++++++++++++ nintan/pacq0old.py | 61 +++++++++++++++++++++++++++++++++++++ nintan/teststimacq0.graphml | 18 +++++++++-- 4 files changed, 143 insertions(+), 21 deletions(-) create mode 100644 nintan/pacq0.py create mode 100644 nintan/pacq0old.py diff --git a/nintan/pacq.py b/nintan/pacq.py index b970efe..4a3a430 100644 --- a/nintan/pacq.py +++ b/nintan/pacq.py @@ -2,8 +2,9 @@ import time import threading -global ymglobal +global ymglobal,counter ymglobal = 0 +counter = 0 def extract(ampD): s = 0.0 @@ -12,9 +13,7 @@ def extract(ampD): return s/len(ampD) def acq(): - global ymglobal - counter = 0 - while(True): + global ymglobal,counter ampT = [] ampD = [] for block in range(numBlocks): @@ -24,20 +23,9 @@ def acq(): print(ampT) print(ampD) ymglobal = extract(ampD) - print(ymglobal) + print("ymglobal="+str(ymglobal)) counter = counter + numBlocks*framesPerBlock - time.sleep(1) - -acq_thread = threading.Thread(target=acq, daemon=True) - -def cnt(): - count = 0 - while(True): - print(count) - count = (count + 1)%10 - time.sleep(1) - -#cnt_thread = threading.Thread(target=cnt, daemon=True) + time.sleep(5) #initialization numBlocks = 3 @@ -49,13 +37,19 @@ def cnt(): ym = concore.initval(init_simtime_ym) -#cnt_thread.start() +acq_thread = threading.Thread(target=acq, daemon=True) +nxtacq_thread = threading.Thread(target=acq, daemon=True) acq_thread.start() while(concore.simtime - AZ:pacq.py + AZ:pacq0.py @@ -55,7 +55,7 @@ PYM - + @@ -67,7 +67,7 @@ AYM - + @@ -312,5 +312,17 @@ c2a34249b2e3bf3a8bf4d0034460e9cc + + 1680456259947 + + UPDATE_NODE + WyJlMGMzNWZhNi00ODVjLTRiMjktYTUzOS0wYmZhYzAwZWQzMjAiLHsid2lkdGgiOjExMywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJBWjpwYWNxLnB5Iix0cnVlXQ== + + + UPDATE_NODE + WyJlMGMzNWZhNi00ODVjLTRiMjktYTUzOS0wYmZhYzAwZWQzMjAiLHsid2lkdGgiOjExMywiaGVpZ2h0Ijo1MCwib3BhY2l0eSI6MSwic2hhcGUiOiJyZWN0YW5nbGUiLCJiYWNrZ3JvdW5kQ29sb3IiOiIjZmZjYzAwIiwiYm9yZGVyQ29sb3IiOiIjMDAwIiwiYm9yZGVyV2lkdGgiOjF9LCJBWjpwYWNxMC5weSIsdHJ1ZV0= + + 30341e0ad7b3b0d4a0602da68ac4ec18 + \ No newline at end of file From 88f0f5c468606aeb0850e191068d84b8d31669cb Mon Sep 17 00:00:00 2001 From: markgarnold <78613198+markgarnold@users.noreply.github.com> Date: Sun, 2 Apr 2023 18:07:31 -0400 Subject: [PATCH 22/43] pacq overlap extract --- nintan/pacq.py | 24 ++++++++++++--------- nintan/pacq0.py | 24 ++++++++++++--------- nintan/pacq0a.py | 55 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 83 insertions(+), 20 deletions(-) create mode 100644 nintan/pacq0a.py diff --git a/nintan/pacq.py b/nintan/pacq.py index 4a3a430..a750531 100644 --- a/nintan/pacq.py +++ b/nintan/pacq.py @@ -2,34 +2,34 @@ import time import threading -global ymglobal,counter -ymglobal = 0 +TIME_SAMPLE = 5 +global counter counter = 0 + def extract(ampD): s = 0.0 for data in ampD: s += data + time.sleep(TIME_DATA/4) #make extract really slow for testing return s/len(ampD) def acq(): - global ymglobal,counter - ampT = [] - ampD = [] + global counter + global ampT,ampD for block in range(numBlocks): for frame in range(framesPerBlock): ampT.append(counter + block*framesPerBlock+frame) ampD.append(counter + abs(frame-framesPerBlock/2)) + time.sleep(TIME_DATA) print(ampT) print(ampD) - ymglobal = extract(ampD) - print("ymglobal="+str(ymglobal)) counter = counter + numBlocks*framesPerBlock - time.sleep(5) #initialization numBlocks = 3 framesPerBlock = 5 +TIME_DATA = TIME_SAMPLE /(numBlocks*framesPerBlock) concore.delay = 0.01 init_simtime_u = "[0.0, 0.0, 0.0]" @@ -39,16 +39,20 @@ def acq(): acq_thread = threading.Thread(target=acq, daemon=True) nxtacq_thread = threading.Thread(target=acq, daemon=True) +ampT = [] +ampD = [] acq_thread.start() while(concore.simtime Remote TCP Control: +# Command Output should open a connection at 127.0.0.1, Port 5000. +# Status should read "Pending" +# Waveform Output (in the Data Output tab) should open a connection at 127.0.0.1, Port 5001. +# Status should read "Pending" for the Waveform Port (Spike Port is unused for this example, +# and can be left disconnected) +# Once these ports are opened, this script can be run to acquire ~1 second of wideband data from channel A-010, + import concore import time import threading +import socket -TIME_SAMPLE = 5 -global counter -counter = 0 - - -def extract(ampD): +def extract(amplifierData): s = 0.0 - for data in ampD: + for data in amplifierData: s += data - time.sleep(TIME_DATA/4) #make extract really slow for testing - return s/len(ampD) + #time.sleep(0.5/len(amplifierData)) #make extract really slow for testing + return s/len(amplifierData) + +def readUint32(array, arrayIndex): + variableBytes = array[arrayIndex : arrayIndex + 4] + variable = int.from_bytes(variableBytes, byteorder='little', signed=False) + arrayIndex = arrayIndex + 4 + return variable, arrayIndex + +def readInt32(array, arrayIndex): + variableBytes = array[arrayIndex : arrayIndex + 4] + variable = int.from_bytes(variableBytes, byteorder='little', signed=True) + arrayIndex = arrayIndex + 4 + return variable, arrayIndex + +def readUint16(array, arrayIndex): + variableBytes = array[arrayIndex : arrayIndex + 2] + variable = int.from_bytes(variableBytes, byteorder='little', signed=False) + arrayIndex = arrayIndex + 2 + return variable, arrayIndex def acq(): - global counter - global ampT,ampD + # Run controller for 1 second + scommand.sendall(b'set runmode run') + time.sleep(1) + scommand.sendall(b'set runmode stop') + + # Read waveform data + rawData = swaveform.recv(WAVEFORM_BUFFER_SIZE) + if len(rawData) % waveformBytesPerBlock != 0: + raise Exception('unexpected amount of data') + numBlocks = int(len(rawData) / waveformBytesPerBlock) + + rawIndex = 0 # Index used to read the raw data + for block in range(numBlocks): + # Expect 4 bytes to be TCP Magic Number as uint32. + # If not what's expected, raise an exception. + magicNumber, rawIndex = readUint32(rawData, rawIndex) + if magicNumber != 0x2ef07a08: + raise Exception('Error... magic number incorrect') + + # Each block should contain 128 frames of data - process each + # of these one-by-one for frame in range(framesPerBlock): - ampT.append(counter + block*framesPerBlock+frame) - ampD.append(counter + abs(frame-framesPerBlock/2)) - time.sleep(TIME_DATA) - print(ampT) - print(ampD) - counter = counter + numBlocks*framesPerBlock + # Expect 4 bytes to be timestamp as int32. + rawTimestamp, rawIndex = readInt32(rawData, rawIndex) + + # Multiply by 'timestep' to convert timestamp to seconds + amplifierTimestamps.append(rawTimestamp * timestep) + + # Expect 2 bytes of wideband data. + rawSample, rawIndex = readUint16(rawData, rawIndex) + + # Scale this sample to convert to microVolts + amplifierData.append(0.195 * (rawSample - 32768)) + #initialization -numBlocks = 3 -framesPerBlock = 5 -TIME_DATA = TIME_SAMPLE /(numBlocks*framesPerBlock) +# Declare buffer size for reading from TCP command socket +# This is the maximum number of bytes expected for 1 read. 1024 is plenty for a single text command +COMMAND_BUFFER_SIZE = 1024 # Increase if many return commands are expected +# Declare buffer size for reading from TCP waveform socket. +# This is the maximum number of bytes expected for 1 read +# There will be some TCP lag in both starting and stopping acquisition, so the exact number of data blocks may vary slightly. +# At 30 kHz with 1 channel, 1 second of wideband waveform data is 181,420 byte. See 'Calculations for accurate parsing' for more details +# To allow for some TCP lag in stopping acquisition resulting in slightly more than 1 second of data, 200000 should be a safe buffer size +WAVEFORM_BUFFER_SIZE = 200000 # Increase if channels, filter bands, or acquisition time increase +# Connect to TCP command server - default home IP address at port 5000 +print('Connecting to TCP command server...') +scommand = socket.socket(socket.AF_INET, socket.SOCK_STREAM) +scommand.connect(('127.0.0.1', 5000)) +# Connect to TCP waveform server - default home IP address at port 5001 +print('Connecting to TCP waveform server...') +swaveform = socket.socket(socket.AF_INET, socket.SOCK_STREAM) +swaveform.connect(('127.0.0.1', 5001)) +# Query runmode from RHX software +scommand.sendall(b'get runmode') +commandReturn = str(scommand.recv(COMMAND_BUFFER_SIZE), "utf-8") +isStopped = commandReturn == "Return: RunMode Stop" +# If controller is running, stop it +if not isStopped: + scommand.sendall(b'set runmode stop') + time.sleep(0.1) # Allow time for RHX software to accept this command before the next one comes + +# Query sample rate from RHX software +scommand.sendall(b'get sampleratehertz') +commandReturn = str(scommand.recv(COMMAND_BUFFER_SIZE), "utf-8") +expectedReturnString = "Return: SampleRateHertz " +if commandReturn.find(expectedReturnString) == -1: # Look for "Return: SampleRateHertz N" where N is the sample rate + raise Exception('Unable to get sample rate from server') + else: + sampleRate = float(commandReturn[len(expectedReturnString):]) + +# Calculate timestep from sample rate +timestep = 1 / sampleRate + +# Clear TCP data output to ensure no TCP channels are enabled +scommand.sendall(b'execute clearalldataoutputs') +time.sleep(0.1) + +# Send TCP commands to set up TCP Data Output Enabled for wide +# band of channel A-010 +scommand.sendall(b'set a-010.tcpdataoutputenabled true') +time.sleep(0.1) + +# Calculations for accurate parsing +# At 30 kHz with 1 channel, 1 second of wideband waveform data (including magic number, timestamps, and amplifier data) is 181,420 bytes +# N = (framesPerBlock * waveformBytesPerFrame + SizeOfMagicNumber) * NumBlocks where: +# framesPerBlock = 128 ; standard data block size used by Intan +# waveformBytesPerFrame = SizeOfTimestamp + SizeOfSample ; timestamp is a 4-byte (32-bit) int, and amplifier sample is a 2-byte (16-bit) unsigned int +# SizeOfMagicNumber = 4; Magic number is a 4-byte (32-bit) unsigned int +# NumBlocks = NumFrames / framesPerBlock ; At 30 kHz, 1 second of data has 30000 frames. NumBlocks must be an integer value, so round up to 235 + +framesPerBlock = 128 +waveformBytesPerFrame = 4 + 2 +waveformBytesPerBlock = framesPerBlock * waveformBytesPerFrame + 4 + concore.delay = 0.01 init_simtime_u = "[0.0, 0.0, 0.0]" @@ -39,17 +143,17 @@ def acq(): acq_thread = threading.Thread(target=acq, daemon=True) nxtacq_thread = threading.Thread(target=acq, daemon=True) -ampT = [] -ampD = [] +amplifierTimestamps = [] +amplifierData = [] acq_thread.start() while(concore.simtime Date: Wed, 5 Apr 2023 15:01:02 -0400 Subject: [PATCH 24/43] Update pacq.py --- nintan/pacq.py | 1 + 1 file changed, 1 insertion(+) diff --git a/nintan/pacq.py b/nintan/pacq.py index 336dd12..9155bde 100644 --- a/nintan/pacq.py +++ b/nintan/pacq.py @@ -1,3 +1,4 @@ +# acq and init taken from: https://intantech.com/files/RHX_TCP.zip # In order to run this example script successfully, the Intan RHX software # should first be started, and through Network -> Remote TCP Control: # Command Output should open a connection at 127.0.0.1, Port 5000. From 39619cdcfc5e5f5c3696ba9bc70f20476aa79ab7 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Wed, 5 Apr 2023 15:26:25 -0400 Subject: [PATCH 25/43] README to start nintan - a draft version --- nintan/README.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 nintan/README.md diff --git a/nintan/README.md b/nintan/README.md new file mode 100644 index 0000000..0a6581b --- /dev/null +++ b/nintan/README.md @@ -0,0 +1,21 @@ +# Start IntanRHX in one window + +```` +$ Downloads/IntanRHX/IntanRHX +```` + +In order to run this example script successfully, the Intan RHX software should first be started, and through Network -> Remote TCP Control: + +Command Output should open a connection at 127.0.0.1, Port 5000. Status should read "Pending" + +Waveform Output (in the Data Output tab) should open a connection at 127.0.0.1, Port 5001. +Status should read "Pending" for the Waveform Port (Spike Port is unused for this example, and can be left disconnected) + +# Run RHXReadWaveformData.py in another window + +This will eventually be replaced by the step to start _concore._ + +```` +$ cd ~/concore/ +$ python3 RHXReadWaveformData.py +```` From 5cdf26b8f6b6d14fcdb82c56484ccd8ae1aab31f Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Wed, 5 Apr 2023 16:25:11 -0400 Subject: [PATCH 26/43] Fix indendation in pacq.py --- nintan/pacq.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nintan/pacq.py b/nintan/pacq.py index 9155bde..8cde360 100644 --- a/nintan/pacq.py +++ b/nintan/pacq.py @@ -108,7 +108,7 @@ def acq(): expectedReturnString = "Return: SampleRateHertz " if commandReturn.find(expectedReturnString) == -1: # Look for "Return: SampleRateHertz N" where N is the sample rate raise Exception('Unable to get sample rate from server') - else: +else: sampleRate = float(commandReturn[len(expectedReturnString):]) # Calculate timestep from sample rate From b152bae545c6228430909eda480e9143fba777fc Mon Sep 17 00:00:00 2001 From: markgarnold <78613198+markgarnold@users.noreply.github.com> Date: Sun, 9 Apr 2023 14:37:31 -0400 Subject: [PATCH 27/43] params pw,showPlot,tsamp --- nintan/pacq.py | 26 +++++++++++++++++++++++--- nintan/pstim.py | 14 +++++++++----- nintan/pstim0.py | 5 ++++- 3 files changed, 36 insertions(+), 9 deletions(-) diff --git a/nintan/pacq.py b/nintan/pacq.py index 8cde360..884e028 100644 --- a/nintan/pacq.py +++ b/nintan/pacq.py @@ -12,6 +12,19 @@ import time import threading import socket +import matplotlib.pyplot as plt + +try: + showPlot = concore.params['plot'] +except: + showPlot = False + +try: + tsamp = concore.params['tsamp'] + if tsamp > 1: + tsamp = 1 +except: + tsamp = 1 def extract(amplifierData): s = 0.0 @@ -39,9 +52,9 @@ def readUint16(array, arrayIndex): return variable, arrayIndex def acq(): - # Run controller for 1 second + # Run controller for tsamp second scommand.sendall(b'set runmode run') - time.sleep(1) + time.sleep(tsamp) scommand.sendall(b'set runmode stop') # Read waveform data @@ -152,13 +165,20 @@ def acq(): ym = concore.read(1,"ym",init_simtime_ym) acq_thread.join() acq_thread = nxtacq_thread + oldAmpT = amplifierTimestamps oldAmpD = amplifierData amplifierTimestamps = [] amplifierData = [] acq_thread.start() nxtacq_thread = threading.Thread(target=acq, daemon=True) ym[0] = extract(oldAmpD) - print("ym="+str(ym[0])); + print("ym="+str(ym[0])) + if showPlot: + plt.plot(oldAmpT,oldAmpD) + plt.title("ym="+str(ym[0])) + plt.xlabel('Time (s)') + plt.ylabel('Voltage (uV)') + plt.show() concore.write(1,"ym",ym) acq_thread.join() print("retry="+str(concore.retrycount)) diff --git a/nintan/pstim.py b/nintan/pstim.py index c9053f9..9fe5ba0 100644 --- a/nintan/pstim.py +++ b/nintan/pstim.py @@ -10,7 +10,11 @@ global uglobal uglobal = 0.5 -PULSE_WIDTH = 10 + +try: + PULSE_WIDTH = concore.params['pw'] +except: + PULSE_WIDTH = 10 def pwm(): while(True): @@ -20,15 +24,15 @@ def pwm(): if ulocal > 1.0: ulocal = 1.0 - print("+") + if PULSE_WIDTH >= 2: + print("+") writer.write_one_sample_one_line(data=1,timeout=10) time.sleep(PULSE_WIDTH*ulocal) - # accurate_delay(PULSE_WIDTH*ulocal) - print("-") + if PULSE_WIDTH >= 2: + print("-") writer.write_one_sample_one_line(data=0,timeout=10) time.sleep(PULSE_WIDTH*(1.0-ulocal)) - # accurate_delay(PULSE_WIDTH*(1.0-ulocal)) pwm_thread = threading.Thread(target=pwm, daemon=True) diff --git a/nintan/pstim0.py b/nintan/pstim0.py index ef06aa4..e0d4e97 100644 --- a/nintan/pstim0.py +++ b/nintan/pstim0.py @@ -5,7 +5,10 @@ global uglobal uglobal = 0.5 -PULSE_WIDTH = 10 +try: + PULSE_WIDTH = concore.params['pw'] +except: + PULSE_WIDTH = 10 def pwm(): while(True): From 68cdba1cad6e6e85a3ca36c542b88c3836dafd33 Mon Sep 17 00:00:00 2001 From: markgarnold <78613198+markgarnold@users.noreply.github.com> Date: Wed, 12 Apr 2023 14:44:03 -0400 Subject: [PATCH 28/43] validseq,plot=3,bangbang=True,clearall --- nintan/cstim.py | 22 +++++++++++++++++----- nintan/pacq.py | 45 ++++++++++++++++++++++++++++++--------------- 2 files changed, 47 insertions(+), 20 deletions(-) diff --git a/nintan/cstim.py b/nintan/cstim.py index 861a827..f350758 100644 --- a/nintan/cstim.py +++ b/nintan/cstim.py @@ -1,6 +1,12 @@ import concore from ast import literal_eval import time + +try: + bangbang = concore.params['bang'] +except: + bangbang = False + concore.delay = 0.01 init_simtime_u = "[0.0, 0.0, 0.0]" init_simtime_ym = "[0.0, 0.0, 0.0]" @@ -12,11 +18,17 @@ while(concore.simtime 0: + u[0] = 0.9 + else: + u[0] = 0.1 + else: + try: + u[0] = float(literal_eval(input())) + except: + print("bad input, using .5 instead") + u[0] = 0.5 print("ym="+str(ym[0])+" u="+str(u[0])); concore.write(1,"u",u); wallclock2 = time.perf_counter() diff --git a/nintan/pacq.py b/nintan/pacq.py index 884e028..0046cac 100644 --- a/nintan/pacq.py +++ b/nintan/pacq.py @@ -17,7 +17,7 @@ try: showPlot = concore.params['plot'] except: - showPlot = False + showPlot = 0 try: tsamp = concore.params['tsamp'] @@ -26,6 +26,11 @@ except: tsamp = 1 +def validseq(t): + for i in range(0,len(t)-1): + if t[i] >= t[i+1]: + print('i='+str(i)+': '+str(t[i])+'>='+str(t[i+1])) + def extract(amplifierData): s = 0.0 for data in amplifierData: @@ -51,6 +56,16 @@ def readUint16(array, arrayIndex): arrayIndex = arrayIndex + 2 return variable, arrayIndex +def clearall(): + # Clear TCP data output to ensure no TCP channels are enabled + scommand.sendall(b'execute clearalldataoutputs') + time.sleep(0.1) + # Send TCP commands to set up TCP Data Output Enabled for wide + # band of channel A-010 + scommand.sendall(b'set a-010.tcpdataoutputenabled true') + time.sleep(0.1) + + def acq(): # Run controller for tsamp second scommand.sendall(b'set runmode run') @@ -127,14 +142,6 @@ def acq(): # Calculate timestep from sample rate timestep = 1 / sampleRate -# Clear TCP data output to ensure no TCP channels are enabled -scommand.sendall(b'execute clearalldataoutputs') -time.sleep(0.1) - -# Send TCP commands to set up TCP Data Output Enabled for wide -# band of channel A-010 -scommand.sendall(b'set a-010.tcpdataoutputenabled true') -time.sleep(0.1) # Calculations for accurate parsing # At 30 kHz with 1 channel, 1 second of wideband waveform data (including magic number, timestamps, and amplifier data) is 181,420 bytes @@ -148,6 +155,7 @@ def acq(): waveformBytesPerFrame = 4 + 2 waveformBytesPerBlock = framesPerBlock * waveformBytesPerFrame + 4 +clearall() concore.delay = 0.01 init_simtime_u = "[0.0, 0.0, 0.0]" @@ -169,16 +177,23 @@ def acq(): oldAmpD = amplifierData amplifierTimestamps = [] amplifierData = [] - acq_thread.start() - nxtacq_thread = threading.Thread(target=acq, daemon=True) - ym[0] = extract(oldAmpD) - print("ym="+str(ym[0])) - if showPlot: + if showPlot&1==1: plt.plot(oldAmpT,oldAmpD) - plt.title("ym="+str(ym[0])) + plt.title("ym="+str(extract(oldAmpD)) plt.xlabel('Time (s)') plt.ylabel('Voltage (uV)') plt.show() + if showPlot&2==2: + plt.plot(range(0,len(oldAmpD)),oldAmpD) + plt.title("ym="+str(extract(oldAmpD)) + plt.xlabel('index') + plt.ylabel('Voltage (uV)') + plt.show() + acq_thread.start() + nxtacq_thread = threading.Thread(target=acq, daemon=True) + ym[0] = extract(oldAmpD) + validseq(oldAmpT) + print("ym="+str(ym[0])) concore.write(1,"ym",ym) acq_thread.join() print("retry="+str(concore.retrycount)) From 1670068b68b3c64535ebcc1096a64882f35a4c9d Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Wed, 12 Apr 2023 15:26:44 -0400 Subject: [PATCH 29/43] Update pacq.py --- nintan/pacq.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nintan/pacq.py b/nintan/pacq.py index 0046cac..7bc137f 100644 --- a/nintan/pacq.py +++ b/nintan/pacq.py @@ -185,7 +185,7 @@ def acq(): plt.show() if showPlot&2==2: plt.plot(range(0,len(oldAmpD)),oldAmpD) - plt.title("ym="+str(extract(oldAmpD)) + plt.title("ym="+str(extract(oldAmpD))) plt.xlabel('index') plt.ylabel('Voltage (uV)') plt.show() From 550bfb86e901d90bc76c7495993607381e5f3ee8 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Wed, 12 Apr 2023 15:30:05 -0400 Subject: [PATCH 30/43] Update pacq.py --- nintan/pacq.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nintan/pacq.py b/nintan/pacq.py index 7bc137f..fb5b2c3 100644 --- a/nintan/pacq.py +++ b/nintan/pacq.py @@ -179,7 +179,7 @@ def acq(): amplifierData = [] if showPlot&1==1: plt.plot(oldAmpT,oldAmpD) - plt.title("ym="+str(extract(oldAmpD)) + plt.title("ym="+str(extract(oldAmpD))) plt.xlabel('Time (s)') plt.ylabel('Voltage (uV)') plt.show() From 3edb9ca6c619c99fd835483d908355f39128438a Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Fri, 14 Apr 2023 15:24:54 -0400 Subject: [PATCH 31/43] Update pacq.py --- nintan/pacq.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/nintan/pacq.py b/nintan/pacq.py index fb5b2c3..4c01258 100644 --- a/nintan/pacq.py +++ b/nintan/pacq.py @@ -64,7 +64,8 @@ def clearall(): # band of channel A-010 scommand.sendall(b'set a-010.tcpdataoutputenabled true') time.sleep(0.1) - + scommand.sendall(b'set TCPNumberDataBlocksPerWrite 4') + time.sleep(0.1) def acq(): # Run controller for tsamp second From d4d13e04fe92c023875a77e221613a040d424bcf Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Fri, 14 Apr 2023 15:43:11 -0400 Subject: [PATCH 32/43] Update pacq.py --- nintan/pacq.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/nintan/pacq.py b/nintan/pacq.py index 4c01258..45f108b 100644 --- a/nintan/pacq.py +++ b/nintan/pacq.py @@ -64,8 +64,6 @@ def clearall(): # band of channel A-010 scommand.sendall(b'set a-010.tcpdataoutputenabled true') time.sleep(0.1) - scommand.sendall(b'set TCPNumberDataBlocksPerWrite 4') - time.sleep(0.1) def acq(): # Run controller for tsamp second @@ -131,6 +129,9 @@ def acq(): scommand.sendall(b'set runmode stop') time.sleep(0.1) # Allow time for RHX software to accept this command before the next one comes +scommand.sendall(b'set TCPNumberDataBlocksPerWrite 20') +time.sleep(0.1) + # Query sample rate from RHX software scommand.sendall(b'get sampleratehertz') commandReturn = str(scommand.recv(COMMAND_BUFFER_SIZE), "utf-8") From d623c4c61f707a1f07f41b8bbf19cdfef8aba236 Mon Sep 17 00:00:00 2001 From: markgarnold <78613198+markgarnold@users.noreply.github.com> Date: Wed, 19 Apr 2023 13:17:02 -0400 Subject: [PATCH 33/43] validseq return index; check valid t=0; oldAmpD[validindex:] --- nintan/pacq.py | 39 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 37 insertions(+), 2 deletions(-) diff --git a/nintan/pacq.py b/nintan/pacq.py index 45f108b..aa16426 100644 --- a/nintan/pacq.py +++ b/nintan/pacq.py @@ -27,9 +27,12 @@ tsamp = 1 def validseq(t): + validindex = 0 for i in range(0,len(t)-1): if t[i] >= t[i+1]: - print('i='+str(i)+': '+str(t[i])+'>='+str(t[i+1])) + print('i='+str(i)+': '+str(t[i])+'>='+str(t[i+1])+' len='+str(len(t))) + validindex = i+1 + return validindex def extract(amplifierData): s = 0.0 @@ -193,8 +196,40 @@ def acq(): plt.show() acq_thread.start() nxtacq_thread = threading.Thread(target=acq, daemon=True) + validindex = validseq(oldAmpT): + if validindex == 0: + if oldAmpT[0] != 0: + print("validseq yet starttime="+str(oldAmpT[0])) + else: + if oldAmpT[validindex] != 0: + print(str(validindex)+" starttime="+str(oldAmpT[validindex])) + if showPlot&4==4: + plt.plot(oldAmpT,oldAmpD) + plt.title("ym="+str(extract(oldAmpD))+" len="+str(len(oldAmpD))) + plt.xlabel('Time (s)') + plt.ylabel('Voltage (uV)') + plt.show() + if showPlot&8==8: + plt.plot(range(0,len(oldAmpD)),oldAmpD) + plt.title("ym="+str(extract(oldAmpD))+" len="+str(len(oldAmpD))) + plt.xlabel('index') + plt.ylabel('Voltage (uV)') + plt.show() + oldAmpT = oldAmpT[validindex:] + oldAmpD = oldAmpD[validindex:] + if showPlot&4==4: + plt.plot(oldAmpT,oldAmpD) + plt.title("ym="+str(extract(oldAmpD))+" len="+str(len(oldAmpD))) + plt.xlabel('Time (s)') + plt.ylabel('Voltage (uV)') + plt.show() + if showPlot&8==8: + plt.plot(range(0,len(oldAmpD)),oldAmpD) + plt.title("ym="+str(extract(oldAmpD))+" len="+str(len(oldAmpD))) + plt.xlabel('index') + plt.ylabel('Voltage (uV)') + plt.show() ym[0] = extract(oldAmpD) - validseq(oldAmpT) print("ym="+str(ym[0])) concore.write(1,"ym",ym) acq_thread.join() From 9d8d9a2a5af317e4658284596ea5ce933d39b727 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Wed, 19 Apr 2023 15:36:04 -0400 Subject: [PATCH 34/43] Update pacq.py --- nintan/pacq.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nintan/pacq.py b/nintan/pacq.py index aa16426..bb767fe 100644 --- a/nintan/pacq.py +++ b/nintan/pacq.py @@ -196,7 +196,7 @@ def acq(): plt.show() acq_thread.start() nxtacq_thread = threading.Thread(target=acq, daemon=True) - validindex = validseq(oldAmpT): + validindex = validseq(oldAmpT) if validindex == 0: if oldAmpT[0] != 0: print("validseq yet starttime="+str(oldAmpT[0])) From ef12aa9ab22c407900e0541e3551e4e4b18ffd7f Mon Sep 17 00:00:00 2001 From: markgarnold <78613198+markgarnold@users.noreply.github.com> Date: Fri, 21 Apr 2023 13:55:26 -0400 Subject: [PATCH 35/43] Adrian's poll runmode --- nintan/pacq.py | 13 ++- nintan/pacq421.py | 236 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 248 insertions(+), 1 deletion(-) create mode 100644 nintan/pacq421.py diff --git a/nintan/pacq.py b/nintan/pacq.py index bb767fe..9ad4255 100644 --- a/nintan/pacq.py +++ b/nintan/pacq.py @@ -73,6 +73,16 @@ def acq(): scommand.sendall(b'set runmode run') time.sleep(tsamp) scommand.sendall(b'set runmode stop') + # Suggestion from Adrian at Intan 4/21/22 + t1 = time.perf_counter() + scommand.sendall(b'get runmode') + commandReturn = str(scommand.recv(COMMAND_BUFFER_SIZE), "utf-8") + isStopped = commandReturn == "Return: RunMode Stop" + while not isStopped: + scommand.sendall(b'get runmode') + commandReturn = str(scommand.recv(COMMAND_BUFFER_SIZE), "utf-8") + isStopped = commandReturn == "Return: RunMode Stop" + t2 = time.perf_counter() # Read waveform data rawData = swaveform.recv(WAVEFORM_BUFFER_SIZE) @@ -103,7 +113,8 @@ def acq(): # Scale this sample to convert to microVolts amplifierData.append(0.195 * (rawSample - 32768)) - + t3 = time.perf_counter() + print(str(t2-t1)+' stop time '+str(t3-t2)+' parse time') #initialization # Declare buffer size for reading from TCP command socket diff --git a/nintan/pacq421.py b/nintan/pacq421.py new file mode 100644 index 0000000..bb767fe --- /dev/null +++ b/nintan/pacq421.py @@ -0,0 +1,236 @@ +# acq and init taken from: https://intantech.com/files/RHX_TCP.zip +# In order to run this example script successfully, the Intan RHX software +# should first be started, and through Network -> Remote TCP Control: +# Command Output should open a connection at 127.0.0.1, Port 5000. +# Status should read "Pending" +# Waveform Output (in the Data Output tab) should open a connection at 127.0.0.1, Port 5001. +# Status should read "Pending" for the Waveform Port (Spike Port is unused for this example, +# and can be left disconnected) +# Once these ports are opened, this script can be run to acquire ~1 second of wideband data from channel A-010, + +import concore +import time +import threading +import socket +import matplotlib.pyplot as plt + +try: + showPlot = concore.params['plot'] +except: + showPlot = 0 + +try: + tsamp = concore.params['tsamp'] + if tsamp > 1: + tsamp = 1 +except: + tsamp = 1 + +def validseq(t): + validindex = 0 + for i in range(0,len(t)-1): + if t[i] >= t[i+1]: + print('i='+str(i)+': '+str(t[i])+'>='+str(t[i+1])+' len='+str(len(t))) + validindex = i+1 + return validindex + +def extract(amplifierData): + s = 0.0 + for data in amplifierData: + s += data + #time.sleep(0.5/len(amplifierData)) #make extract really slow for testing + return s/len(amplifierData) + +def readUint32(array, arrayIndex): + variableBytes = array[arrayIndex : arrayIndex + 4] + variable = int.from_bytes(variableBytes, byteorder='little', signed=False) + arrayIndex = arrayIndex + 4 + return variable, arrayIndex + +def readInt32(array, arrayIndex): + variableBytes = array[arrayIndex : arrayIndex + 4] + variable = int.from_bytes(variableBytes, byteorder='little', signed=True) + arrayIndex = arrayIndex + 4 + return variable, arrayIndex + +def readUint16(array, arrayIndex): + variableBytes = array[arrayIndex : arrayIndex + 2] + variable = int.from_bytes(variableBytes, byteorder='little', signed=False) + arrayIndex = arrayIndex + 2 + return variable, arrayIndex + +def clearall(): + # Clear TCP data output to ensure no TCP channels are enabled + scommand.sendall(b'execute clearalldataoutputs') + time.sleep(0.1) + # Send TCP commands to set up TCP Data Output Enabled for wide + # band of channel A-010 + scommand.sendall(b'set a-010.tcpdataoutputenabled true') + time.sleep(0.1) + +def acq(): + # Run controller for tsamp second + scommand.sendall(b'set runmode run') + time.sleep(tsamp) + scommand.sendall(b'set runmode stop') + + # Read waveform data + rawData = swaveform.recv(WAVEFORM_BUFFER_SIZE) + if len(rawData) % waveformBytesPerBlock != 0: + raise Exception('unexpected amount of data') + numBlocks = int(len(rawData) / waveformBytesPerBlock) + + rawIndex = 0 # Index used to read the raw data + + for block in range(numBlocks): + # Expect 4 bytes to be TCP Magic Number as uint32. + # If not what's expected, raise an exception. + magicNumber, rawIndex = readUint32(rawData, rawIndex) + if magicNumber != 0x2ef07a08: + raise Exception('Error... magic number incorrect') + + # Each block should contain 128 frames of data - process each + # of these one-by-one + for frame in range(framesPerBlock): + # Expect 4 bytes to be timestamp as int32. + rawTimestamp, rawIndex = readInt32(rawData, rawIndex) + + # Multiply by 'timestep' to convert timestamp to seconds + amplifierTimestamps.append(rawTimestamp * timestep) + + # Expect 2 bytes of wideband data. + rawSample, rawIndex = readUint16(rawData, rawIndex) + + # Scale this sample to convert to microVolts + amplifierData.append(0.195 * (rawSample - 32768)) + + +#initialization +# Declare buffer size for reading from TCP command socket +# This is the maximum number of bytes expected for 1 read. 1024 is plenty for a single text command +COMMAND_BUFFER_SIZE = 1024 # Increase if many return commands are expected +# Declare buffer size for reading from TCP waveform socket. +# This is the maximum number of bytes expected for 1 read +# There will be some TCP lag in both starting and stopping acquisition, so the exact number of data blocks may vary slightly. +# At 30 kHz with 1 channel, 1 second of wideband waveform data is 181,420 byte. See 'Calculations for accurate parsing' for more details +# To allow for some TCP lag in stopping acquisition resulting in slightly more than 1 second of data, 200000 should be a safe buffer size +WAVEFORM_BUFFER_SIZE = 200000 # Increase if channels, filter bands, or acquisition time increase +# Connect to TCP command server - default home IP address at port 5000 +print('Connecting to TCP command server...') +scommand = socket.socket(socket.AF_INET, socket.SOCK_STREAM) +scommand.connect(('127.0.0.1', 5000)) +# Connect to TCP waveform server - default home IP address at port 5001 +print('Connecting to TCP waveform server...') +swaveform = socket.socket(socket.AF_INET, socket.SOCK_STREAM) +swaveform.connect(('127.0.0.1', 5001)) +# Query runmode from RHX software +scommand.sendall(b'get runmode') +commandReturn = str(scommand.recv(COMMAND_BUFFER_SIZE), "utf-8") +isStopped = commandReturn == "Return: RunMode Stop" +# If controller is running, stop it +if not isStopped: + scommand.sendall(b'set runmode stop') + time.sleep(0.1) # Allow time for RHX software to accept this command before the next one comes + +scommand.sendall(b'set TCPNumberDataBlocksPerWrite 20') +time.sleep(0.1) + +# Query sample rate from RHX software +scommand.sendall(b'get sampleratehertz') +commandReturn = str(scommand.recv(COMMAND_BUFFER_SIZE), "utf-8") +expectedReturnString = "Return: SampleRateHertz " +if commandReturn.find(expectedReturnString) == -1: # Look for "Return: SampleRateHertz N" where N is the sample rate + raise Exception('Unable to get sample rate from server') +else: + sampleRate = float(commandReturn[len(expectedReturnString):]) + +# Calculate timestep from sample rate +timestep = 1 / sampleRate + + +# Calculations for accurate parsing +# At 30 kHz with 1 channel, 1 second of wideband waveform data (including magic number, timestamps, and amplifier data) is 181,420 bytes +# N = (framesPerBlock * waveformBytesPerFrame + SizeOfMagicNumber) * NumBlocks where: +# framesPerBlock = 128 ; standard data block size used by Intan +# waveformBytesPerFrame = SizeOfTimestamp + SizeOfSample ; timestamp is a 4-byte (32-bit) int, and amplifier sample is a 2-byte (16-bit) unsigned int +# SizeOfMagicNumber = 4; Magic number is a 4-byte (32-bit) unsigned int +# NumBlocks = NumFrames / framesPerBlock ; At 30 kHz, 1 second of data has 30000 frames. NumBlocks must be an integer value, so round up to 235 + +framesPerBlock = 128 +waveformBytesPerFrame = 4 + 2 +waveformBytesPerBlock = framesPerBlock * waveformBytesPerFrame + 4 + +clearall() + +concore.delay = 0.01 +init_simtime_u = "[0.0, 0.0, 0.0]" +init_simtime_ym = "[0.0, 0.0, 0.0]" + +ym = concore.initval(init_simtime_ym) + +acq_thread = threading.Thread(target=acq, daemon=True) +nxtacq_thread = threading.Thread(target=acq, daemon=True) +amplifierTimestamps = [] +amplifierData = [] +acq_thread.start() +while(concore.simtime Date: Fri, 28 Apr 2023 11:19:29 -0400 Subject: [PATCH 38/43] bruteforce --- nintan/markbruteforce.py | 49 ++++++++++++++++++++++++++++++++++++++++ nintan/smoothfreq.py | 15 ++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 nintan/markbruteforce.py create mode 100644 nintan/smoothfreq.py diff --git a/nintan/markbruteforce.py b/nintan/markbruteforce.py new file mode 100644 index 0000000..d592e58 --- /dev/null +++ b/nintan/markbruteforce.py @@ -0,0 +1,49 @@ +import utils_concore +import numpy as np +import matplotlib.pyplot as plt +import concore + +FREQ_BINS = 25 + +def brute_freqs(filename): + y, yextra2, yextra3 = utils_concore.read_trellis_data([filename+'.nf3'],channums=[1,2,3,4]) + plt.figure() + plt.subplot(411) + plt.plot(range(len(y[0])),y[0]) + #plt.xlabel('Gastric 1') + plt.subplot(412) + plt.plot(range(len(y[1])),y[1]) + #plt.xlabel('Gastric 2') + plt.subplot(413) + plt.plot(range(len(y[2])),y[2]) + #plt.xlabel('Gastric 3') + plt.subplot(414) + plt.plot(range(len(y[3])),y[3]) + plt.xlabel('Raw file:'+filename+ ' iteration '+str(concore.simtime)) + plt.savefig(filename+str(concore.simtime)+"r.pdf") + + result = [] + plt.figure() + plt.subplot(411) + result.append(smooth_freq(y,0,FREQ_BINS)) + plt.subplot(412) + result.append(smooth_freq(y,1,FREQ_BINS)) + plt.subplot(413) + result.append(smooth_freq(y,2,FREQ_BINS)) + plt.subplot(414) + result.append(smooth_freq(y,3,FREQ_BINS)) + plt.xlabel('Freq:'+filename+ ' iteration '+str(concore.simtime)) + plt.savefig(filename+str(concore.simtime)+"f.pdf") + #plt.show() + return result + +def smooth_freq(y,chan,bins): + f=np.fft.fft(y[chan]) + f0=np.abs(f[-(bins-1):-1]) + f1=np.abs(f[-bins:-2]) + f2=np.abs(f[-(bins+1):-3]) + fa=f2+2*f1+f2 +# plt.plot(np.arange(bins,2,-1),np.log(np.abs(fa))) + return bins-np.argmax((np.abs(fa))) + + diff --git a/nintan/smoothfreq.py b/nintan/smoothfreq.py new file mode 100644 index 0000000..a7ff187 --- /dev/null +++ b/nintan/smoothfreq.py @@ -0,0 +1,15 @@ +import numpy as np + +def smooth_freq(y,bins): + f=np.fft.fft(y) + f0=np.abs(f[-(bins-1):-1]) + f1=np.abs(f[-bins:-2]) + f2=np.abs(f[-(bins+1):-3]) + fa=f2+2*f1+f2 + return bins-np.argmax((np.abs(fa))) + +def dom_freq(y,t): + ttot = (t[-1] - t[0]) * len(y)/(len(y)-1) + f = np.fft.fft(y) + fi = np.argmax((np.abs(f))) + return np.fft.fftfreq(len(y))[fi]*len(y)/ttot From 36493c0cd937b212dd4bc3ccfa4e9ad9c97de6ca Mon Sep 17 00:00:00 2001 From: markgarnold <78613198+markgarnold@users.noreply.github.com> Date: Fri, 28 Apr 2023 11:21:03 -0400 Subject: [PATCH 39/43] dom_freq in pacq --- nintan/pacq.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/nintan/pacq.py b/nintan/pacq.py index f57cdb1..7f87e3d 100644 --- a/nintan/pacq.py +++ b/nintan/pacq.py @@ -41,6 +41,20 @@ def extract(amplifierData): #time.sleep(0.5/len(amplifierData)) #make extract really slow for testing return s/len(amplifierData) +def smooth_freq(y,bins): + f=np.fft.fft(y) + f0=np.abs(f[-(bins-1):-1]) + f1=np.abs(f[-bins:-2]) + f2=np.abs(f[-(bins+1):-3]) + fa=f2+2*f1+f2 + return bins-np.argmax((np.abs(fa))) + +def dom_freq(y,t): + ttot = (t[-1] - t[0]) * len(y)/(len(y)-1) + f = np.fft.fft(y) + fi = np.argmax((np.abs(f))) + return np.fft.fftfreq(len(y))[fi]*len(y)/ttot + def readUint32(array, arrayIndex): variableBytes = array[arrayIndex : arrayIndex + 4] variable = int.from_bytes(variableBytes, byteorder='little', signed=False) From 9319efca84c001d6f9a0877be23d65a98f307be4 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Fri, 28 Apr 2023 15:11:41 -0400 Subject: [PATCH 40/43] Update pacq.py --- nintan/pacq.py | 1 + 1 file changed, 1 insertion(+) diff --git a/nintan/pacq.py b/nintan/pacq.py index 7f87e3d..a2190f0 100644 --- a/nintan/pacq.py +++ b/nintan/pacq.py @@ -13,6 +13,7 @@ import threading import socket import matplotlib.pyplot as plt +import numpy as np try: showPlot = concore.params['plot'] From 26667dc3aa8ec6a232a3209976f25a7626d19116 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Fri, 28 Apr 2023 15:14:01 -0400 Subject: [PATCH 41/43] Update pacq.py --- nintan/pacq.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/nintan/pacq.py b/nintan/pacq.py index a2190f0..ebe2da9 100644 --- a/nintan/pacq.py +++ b/nintan/pacq.py @@ -260,7 +260,8 @@ def acq(): plt.ylabel('Voltage (uV)') plt.show() ym[0] = extract(oldAmpD) - print("ym="+str(ym[0])) + ym[1] = dom_freq(oldAmpD, oldAmpT) + print("ym="+str(ym[0]) + " " + str(ym[1])) concore.write(1,"ym",ym) acq_thread.join() print("retry="+str(concore.retrycount)) From 75b9ab7f3425f07735e32172466060e7e7a23c00 Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Fri, 28 Apr 2023 15:30:40 -0400 Subject: [PATCH 42/43] Update cstim.py --- nintan/cstim.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/nintan/cstim.py b/nintan/cstim.py index f350758..464faa6 100644 --- a/nintan/cstim.py +++ b/nintan/cstim.py @@ -6,7 +6,12 @@ bangbang = concore.params['bang'] except: bangbang = False - + +try: + freq_control = concore.params['freq_control'] +except: + freq_control = False + concore.delay = 0.01 init_simtime_u = "[0.0, 0.0, 0.0]" init_simtime_ym = "[0.0, 0.0, 0.0]" @@ -18,7 +23,15 @@ while(concore.simtime 100: + u[0] = 1.0 + elif abs(ym[1]) < 1: + u[0] = 0.01 + + elif bangbang: if ym[0] > 0: u[0] = 0.9 else: From 28afb1b75634df317b11564025d9ef721be13f9d Mon Sep 17 00:00:00 2001 From: Pradeeban Kathiravelu Date: Mon, 1 May 2023 15:46:21 -0400 Subject: [PATCH 43/43] Update cstim.py --- nintan/cstim.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/nintan/cstim.py b/nintan/cstim.py index 464faa6..63b0377 100644 --- a/nintan/cstim.py +++ b/nintan/cstim.py @@ -43,6 +43,9 @@ print("bad input, using .5 instead") u[0] = 0.5 print("ym="+str(ym[0])+" u="+str(u[0])); + print("min="+str(minElasped)) + print("avg="+str(sumElasped/max(1,concore.simtime))) + print("max="+str(maxElasped)) concore.write(1,"u",u); wallclock2 = time.perf_counter() elasped = wallclock2-wallclock1