CONTROL-CORE is a design and simulation framework, functioning as a visual Integrated Development Environment (IDE) for Closed-loop Neuromodulation Control Systems. At its center is concore, a lightweight protocol to simulate neuromodulation control systems. This repository consists of the implementation of concore protocol and sample (demo and neuromodulation control systems) studies. In addition to its default standard Python implementation, concore also supports developing studies in Matlab/Octave, Verilog, and C++. concore also aims to support more language programs in the future.
The CONTROL-CORE framework consists of the below projects.
concore: The CONTROL-CORE protocol, known as concore, allows modular simulation of controller and PM nodes to run on different operating systems, computing platforms, and programming languages. This repository consists of concore source code. The concore documentation can be found here. A concore study can be developed from programs written in different languages. That means, concore facilitates a seamless communication across codes developed in different languages that it supports, through its simple file-based data sharing between the programs.
concore Editor: This is the front-end for CONTROL-CORE. We forked DHGWorkflow, a sibling project we developed, and extend it as the concore Editor.
Mediator: The Mediator allows the CONTROL-CORE studies to be distributed and run, rather than having all the programs that construct a study to be run just from a centralized location.
concore-lite: The concore-lite repository consists of a simple example version of a concore study. Please check out and run this, if you like to learn the concore protocol without having to clone this large concore repository.
documentation: The source code repository of the ReadTheDocs documentation of CONTROL-CORE.
concore enables composing studies from programs developed in different languages. Currently supported languages are, Python, Matlab/Octave, Verilog, and C++. The studies are designed through the visual concore Editor (DHGWorkflow) and interpreted into concore through its parser. Neural control systems consist of loops (dicycles). Therefore, they cannot be represented by classic workflow standards (such as CWL or WDL). Therefore, concore addresses a significant research gap to model closed-loop neuromodulation control systems. The concore protocol shares data between the programs through file sharing, with no centralized entity (a broker or an orchestrator) to arbitrate communications between the programs. (In the distributed executions, the CONTROL-CORE Mediator enables connecting the disjoint pieces of the study through REST APIs).
Please follow the ReadTheDocs documentation and the concore-lite repository to get started quick.
Installation instructions for concore can be found here. Usage instructions can be found here.
For a detailed and more scientific documentation, please read our extensive open-access research paper on CONTROL-CORE. This paper has a complete discussion on the CONTROL-CORE architecture and deployment, together with the commands to execute the studies in different programming languages and programming environments (Ubuntu, Windows, MacOS, Docker, and distributed execution).
concore contains programs (such as physiological models or more commonly called "PMs" and controllers) and studies (i.e., graphml files that represents the studies as workflows). The wrappers enable seamlessly extending a study into a distributed one with the CONTROL-CORE Mediator.
concore repository consists of several scripts at its root level. The demo folder consists of several sample programs and studies, mostly toy examples to learn the protocol. The ratc folder consists of the programs and studies of the rat cardiac experiments we developed with concore.
If you have a bug to report in one of the CONTROL-CORE projects, please report it through relevant Issue Tracker. Similarly, please feel free to contribute your studies and code enhancements using pull requests. Questions and discussions can be made through the relevant Discussions forum.
The concore Issues can be reported here.
The concore discussion forum can be found here.
Please make sure to send your concore pull requests to the dev branch.
If you use concore in your research, please cite the below paper: