Welcome to the Pulse Wiki
We use this space to talk about various features and possibilities you may not know Pulse supports, demonstrate best practices, and provide detailed explanations for any questions or problems anyone brings to our attention.
If you would like us to expand upon anything feel free to bring it up in our discourse channel.
Before diving into the topics below, make sure you have a good understanding of the the Common Data Model and its structures, as well as the Pulse interface.
We also assume you have build the source code per instruction from our repository.
- We will refer to the source code directory as
<pulse/source>
- The build directory you set where you ran CMake, will be refereed to as
<pulse/build>
- All commands will be run from a terminal in the
<pulse/build>/install/bin
, which we will refer to as<pulse/bin>
The script to run all of our tests, utilities, and tools is written in CMake to ensure cross platform compatibility. CMake should be available on your path to use these tools. We also provide a simple run
batch/shell script wrapper around the CMake calling format to be run as follows :
# The CMake invocation
cmake -DTYPE:STRING=[command] -P run.cmake
# On Windows
> run [command]
# On Linux/Max
$ ./run.sh [command]
# Note you may need to do a
$ chmod +x run.sh
# To run this script on your machine
Where [command] can be one of the following values:
- genData - Generate pba files from data in the
<pulse/source>/data/Data.xlxs
file (Patients, Substances, etc.) - genStates - Generate a state file for every patient at the point where the patient completed stabilization (Simulation time 0s)to
<pulse/bin>/states
- SystemValidation - Will use
<pulse/source>/test/config/ValidationSystems.config
to create system validation tables in the<pulse/bin>/test_results
directory - PatientValidation - Will use
<pulse/source>/test/config/ValidationPatients.config
to create patient validation tables in the<pulse/bin>/test_results
directory - The names of the other config files in the
<pulse/source>/test/config/
directory without the suffix- For Example : DebugRun, CDMUnitTests, ValidationSystems, VerificationScenarios, etc.
- With exception of the Characterize.config, this is a legacy testing configuration that will not work
Lastly, to follow along and both execute and debug the engine, you will need to pull all of our baseline scenarios. If you chose not to pull the baselines in your build process (you do not have a <pulse/bin>/verification folder), you will need to pull them. From a command/terminal running in the <pulse/bin>, execute the following command :
# Windows
> run updateBaselines
# On Mac/Linux
$ ./run.sh updateBaselines
This baseline collection will be create the following folder : <pulse/bin>/verification
. It will contain both Scenario files, and baseline results files. We will discuss the baseline results in the test suite section.
Executing Pulse
Being a C++ library, Pulse requires a separate application to instantiate and execute the engine. We will explore various execution mechanisms in our repository in the sections below :
Running and Timing Pulse
Running the Pulse Test Suite
Setting up an IDE
Using C++ with Visual Studio
Using C++ with CLion
Using Java with Eclipse
Using Java with IntelliJ
Using Python with PyCharm
Using Pulse
Learn how to use the Pulse SDK
Integrating Pulse into your application
Pulse provides an API for many different languages. To learn more about working with the Pulse API, you can find HowTo folders in many of the language folders in src Pulse provides an API for each of these languages, and they are designed to be very consistent with each other. So if you are looking for how to use a particular feature in Pulse and the language you are using does not provide an example, look around in the other languages and it should be trivial to translate to the language of your application.
Extending and Contributing to Pulse
To get started with your Pulse contribution:
Contributing to Pulse
While these topics are referenced in the Contributing to Pulse document, for quick reference here are individual topics:
How to modify a system circuit
How to extend a system
How to create a new action
How to create a new condition
How to add a new parameter
How to create a scenario
How to create a unit test
How to update the documentation
How to generate the documentation
How to perform verification and validation
How to rebase the verification baselines