Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 11 additions & 3 deletions concore.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,17 @@
import zmq
import numpy as np
logging.basicConfig(
level=logging.INFO,
format='%(levelname)s - %(message)s'
) # Added for ZeroMQ
level=logging.DEBUG,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
force=True
)

#these lines mute the noisy library
logging.getLogger('matplotlib').setLevel(logging.WARNING)
logging.getLogger('PIL').setLevel(logging.WARNING)
logging.getLogger('urllib3').setLevel(logging.WARNING)
logging.getLogger('requests').setLevel(logging.WARNING)


# if windows, create script to kill this process
# because batch files don't provide easy way to know pid of last command
Expand Down
6 changes: 5 additions & 1 deletion tools/bangbang.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import numpy as np
import concore
import logging


def bangbang_controller(ym):
Expand All @@ -19,12 +20,15 @@ def bangbang_controller(ym):
init_simtime_u = "[0.0, 0.0,0.0]"
init_simtime_ym = "[0.0, 70.0,91]"
u = np.array([concore.initval(init_simtime_u)]).T

logging.info("Starting Bang-Bang Controller")

while(concore.simtime<concore.maxtime):
while concore.unchanged():
ym = concore.read(1,"ym",init_simtime_ym)
ym = np.array(ym)

ustar = bangbang_controller(ym)

print(str(concore.simtime) + " u="+str(ustar) + "ym="+str(ym))
logging.debug(f"{concore.simtime} u={ustar} ym={ym}")
concore.write(1,"u",list(ustar),delta=0)
6 changes: 5 additions & 1 deletion tools/cardiac_pm.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import pulsatile_model_functions as pmf
import healthy_params as K
import concore
import logging

#x0 = np.loadtxt('pulsatile_steady.txt')

Expand All @@ -20,6 +21,9 @@ def cardiac_pm(x0,u):
init_simtime_u = "[0.0, 0.0,0.0]"
init_simtime_ym = "[0.0, 70,0]"
ym = np.array([concore.initval(init_simtime_ym)]).T

logging.info("Starting Cardiac PM Model")

while(concore.simtime<concore.maxtime):
while concore.unchanged():
u = concore.read(1,"u",init_simtime_u)
Expand All @@ -29,7 +33,7 @@ def cardiac_pm(x0,u):

#dummy = np.array([hr,mapp])
dummy = np.array([mapp,hr])
print(str(concore.simtime) + " u="+str(u) + "ym=" + str(dummy))
logging.debug(f"{concore.simtime} u={u} ym={dummy}")
#concore.write(1,"ym",list(np.array([hr,mapp])),delta=1)
concore.write(1,"ym",list(np.array([mapp,hr])),delta=1)

Expand Down
35 changes: 17 additions & 18 deletions tools/cwrap.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import time
from ast import literal_eval
import os
import logging

#time.sleep(7)
timeout_max = 20
Expand Down Expand Up @@ -58,10 +59,10 @@
except:
init_simtime_ym = "[0.0, 0.0, 0.0]"

print(apikey)
print(yuyu)
print(name1+'='+init_simtime_u)
print(name2+'='+init_simtime_ym)
logging.info(f"API Key: {apikey}")
Copy link

Copilot AI Feb 4, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Security concern: logging API keys at INFO level could expose sensitive credentials in production logs. Consider either removing this log statement, masking the API key (e.g., showing only the first/last few characters), or changing to DEBUG level so it can be easily disabled in production environments.

Copilot uses AI. Check for mistakes.
logging.info(f"Yuyu: {yuyu}")
logging.info(f"{name1}={init_simtime_u}")
logging.info(f"{name2}={init_simtime_ym}")

while not os.path.exists(concore.inpath+'1/'+name1):
time.sleep(concore.delay)
Expand All @@ -78,47 +79,45 @@


while(concore.simtime<concore.maxtime):
print("CW outer loop")
logging.debug("CW outer loop")
while concore.unchanged():
u = concore.read(1,name1,init_simtime_u)
f = {'file1': open(concore.inpath+'1/'+name1, 'rb')}
print("CW: before post u="+str(u))
print('http://www.controlcore.org/pm/'+yuyu+apikey+'&fetch='+name2)
logging.debug(f"CW: before post u={u}")
logging.debug(f'http://www.controlcore.org/pm/{yuyu}{apikey}&fetch={name2}')
r = requests.post('http://www.controlcore.org/pm/'+yuyu+apikey+'&fetch='+name2, files=f,timeout=timeout_max)
if r.status_code!=200:
print("bad POST request "+str(r.status_code))
logging.error(f"bad POST request {r.status_code}")
quit()
if len(r.text)!=0:
try:
t=literal_eval(r.text)[0]
except:
print("bad eval "+r.text)
logging.error(f"bad eval {r.text}")
timeout_count = 0
t1 = time.perf_counter()
print("CW: after post status="+str(r.status_code)+" r.content="+str(r.content)+" t="+str(t))
logging.debug(f"CW: after post status={r.status_code} r.content={r.content} t={t}")
#while r.text==oldym or len(r.content)==0:
while oldt==t or len(r.content)==0:
time.sleep(concore.delay)
print("CW waiting status="+str(r.status_code)+" content="+ r.content.decode('utf-8')+" t="+str(t))
logging.debug(f"CW waiting status={r.status_code} content={r.content.decode('utf-8')} t={t}")
f = {'file1': open(concore.inpath+'1/'+name1, 'rb')}
try:
r = requests.post('http://www.controlcore.org/pm/'+yuyu+apikey+'&fetch='+name2, files=f,timeout=timeout_max)
except:
print("CW: bad request")
logging.error("CW: bad request")
timeout_count += 1
if r.status_code!=200 or time.perf_counter()-t1 > 1.1*timeout_max: #timeout_count>100:
print("timeout or bad POST request "+str(r.status_code))
logging.error(f"timeout or bad POST request {r.status_code}")
quit()
if len(r.text)!=0:
try:
t=literal_eval(r.text)[0]
except:
print("bad eval "+r.text)
logging.error(f"bad eval {r.text}")
oldt = t
oldym = r.text
print("CW: oldym="+oldym+" t="+str(concore.simtime))
logging.debug(f"CW: oldym={oldym} t={concore.simtime}")
concore.write(1,name2,oldym)
#concore.write(1,"ym",init_simtime_ym)
print("retry="+str(concore.retrycount))


logging.info(f"retry={concore.retrycount}")
3 changes: 2 additions & 1 deletion tools/learn.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import numpy as np
import matplotlib.pyplot as plt
import time
import logging
GENERATE_PLOT = 1

concore.delay = 0.002
Expand All @@ -21,7 +22,7 @@
ut[int(concore.simtime)] = np.array(u).T
ymt[int(concore.simtime)] = np.array(ym).T
oldsimtime = concore.simtime
print("retry="+str(concore.retrycount))
logging.info(f"retry={concore.retrycount}")

#################
# plot inputs and outputs
Expand Down
8 changes: 6 additions & 2 deletions tools/pid2.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import numpy as np
import concore
import logging

setpoint = 67.5
setpointF = 75.0
KpF = 0.1
Expand Down Expand Up @@ -51,14 +53,16 @@ def pid_controller(ym):
init_simtime_u = "[0.0, 0.0,0.0]"
init_simtime_ym = "[0.0, 70.0,91]"
u = np.array([concore.initval(init_simtime_u)]).T
print("Shannon's PID controller: setpoint is "+str(setpoint))

logging.info(f"Shannon's PID controller: setpoint is {setpoint}")

while(concore.simtime<concore.maxtime):
while concore.unchanged():
ym = concore.read(1,"ym",init_simtime_ym)
ym = np.array(ym)

ustar = pid_controller(ym)

print(str(concore.simtime) + " u="+str(ustar) + "ym="+str(ym))
logging.debug(f"{concore.simtime} u={ustar} ym={ym}")
concore.write(1,"u",list(ustar),delta=0)

9 changes: 5 additions & 4 deletions tools/pidmayuresh.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import numpy as np
import math
import concore
import logging
dT = 0.1

sp = concore.tryparam('sp', 67.5)
Expand All @@ -19,7 +20,7 @@ def pid_controller(state, ym, sp, Kp, Ki, Kd, sigout, cin, low, up):
elif cin == 'map':
Error = sp - ym[0]
else:
print('invalid control input '+cin)
logging.error(f'invalid control input {cin}')
quit()
P = Error
I = I + Error*dT
Expand All @@ -37,15 +38,15 @@ def pid_controller(state, ym, sp, Kp, Ki, Kd, sigout, cin, low, up):
init_simtime_ym = "[0.0, 70.0,91]"
ym = np.array(concore.initval(init_simtime_ym))
state = [0.0, 0.0]
print("Mayuresh's PID controller: sp is "+str(sp))
print(concore.params)
logging.info(f"Mayuresh's PID controller: sp is {sp}")
logging.info(concore.params)
while(concore.simtime<concore.maxtime):
while concore.unchanged():
ym = concore.read(1,"ym",init_simtime_ym)
ym = np.array(ym)
(state,amp) = pid_controller(state,ym,sp,Kp,Ki,Kd,sigout,cin,0,3)
u = np.array([amp,freq])
print(str(concore.simtime) + " u="+str(u) + "ym="+str(ym))
logging.debug(f"{concore.simtime} u={u} ym={ym}")
concore.write(1,"u",list(u),delta=0)


Expand Down
9 changes: 5 additions & 4 deletions tools/pidsig.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import numpy as np
import math
import concore
import logging
dT = 0.1
global Prev_Error, I, freq
Prev_Error = 0
Expand Down Expand Up @@ -42,7 +43,7 @@ def pid_controller(ym):
elif cin == 'map':
Error = sp - ym[0]
else:
print('invalid control input '+cin)
logging.error(f'invalid control input {cin}')
quit()
P = Error
I = I + Error*dT
Expand All @@ -60,8 +61,8 @@ def pid_controller(ym):
init_simtime_u = "[0.0, 0.0,0.0]"
init_simtime_ym = "[0.0, 70.0,91]"
u = np.array([concore.initval(init_simtime_u)]).T
print("Shannon's PID controller: sp is "+str(sp))
print(concore.params)
logging.info(f"Shannon's PID controller: sp is {sp}")
logging.info(concore.params)
while(concore.simtime<concore.maxtime):
while concore.unchanged():
ym = concore.read(1,"ym",init_simtime_ym)
Expand All @@ -72,7 +73,7 @@ def pid_controller(ym):
else:
ustar = pid_controller(ym)

print(str(concore.simtime) + " u="+str(ustar) + "ym="+str(ym))
logging.debug(f"{concore.simtime} u={ustar} ym={ym}")
concore.write(1,"u",list(ustar),delta=0)


Expand Down
7 changes: 4 additions & 3 deletions tools/plotu.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import concore
import logging
import numpy as np
import matplotlib.pyplot as plt
import time
print("plot u")
logging.info("plot u")

concore.delay = 0.005
concore.default_maxtime(150)
Expand All @@ -15,9 +16,9 @@
while concore.unchanged():
u = concore.read(1,"u",init_simtime_u)
concore.write(1,"u",u)
print("u="+str(u))
logging.debug(f"u={u}")
ut.append(np.array(u).T)
print("retry="+str(concore.retrycount))
logging.info(f"retry={concore.retrycount}")

#################

Expand Down
7 changes: 4 additions & 3 deletions tools/plotym.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import concore
import logging
import numpy as np
import matplotlib.pyplot as plt
import time
print("plot ym")
logging.info("plot ym")

concore.delay = 0.005
concore.default_maxtime(150)
Expand All @@ -15,9 +16,9 @@
while concore.unchanged():
ym = concore.read(1,"ym",init_simtime_ym)
concore.write(1,"ym",ym)
print(" ym="+str(ym))
logging.debug(f" ym={ym}")
ymt.append(np.array(ym).T)
print("retry="+str(concore.retrycount))
logging.info(f"retry={concore.retrycount}")

#################

Expand Down
7 changes: 4 additions & 3 deletions tools/plotymlag.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import concore
import logging
import numpy as np
import matplotlib.pyplot as plt
import time

size = 10
lag = concore.tryparam("lag", 0)
print("plot ym with lag="+str(lag))
logging.info(f"plot ym with lag={lag}")

concore.delay = 0.005
concore.default_maxtime(150)
Expand All @@ -21,10 +22,10 @@
while concore.unchanged():
ym[cur] = concore.read(1,"ym",init_simtime_ym)
concore.write(1,"ym",ym[cur])
print(" ym="+str(ym[cur]))
logging.debug(f" ym={ym[cur]}")
ymt.append(np.array(ym[(cur-lag) % size]).T)
cur = (cur+1) % size
print("retry="+str(concore.retrycount))
logging.info(f"retry={concore.retrycount}")

#################

Expand Down
Loading