You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CONTRIBUTING.md
+38Lines changed: 38 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -157,3 +157,41 @@ To delete the image:
157
157
```{.bash}
158
158
sudo docker image rm -f desrapbookdocker
159
159
```
160
+
161
+
## Accessibility
162
+
163
+
Quarto's supported accessibility checker `axe` is not used because it is difficult to read, and it mostly flagged things that cannot be changed (i.e., Quarto defaults and built-ins). As such, other approaches are used.
164
+
165
+
### `lint_alt_text.py`
166
+
167
+
A Python script is provided which checks for alt text. It supports patterns:
168
+
169
+
*`\` (backslash required for it to use caption as alt-text too).
170
+
*`<img src="fig.png" fig-alt="alt-text">`
171
+
*`{fig-alt="alt-text"}`
172
+
173
+
To run the script:
174
+
175
+
```{.bash}
176
+
python lint_alt_text.py
177
+
```
178
+
179
+
This is configured to run via GitHub actions - see `.github/workflows/lint_alt_text.yml`.
180
+
181
+
## Findability checks
182
+
183
+
To support the FAIR principles for training materials, we keep a light-weight record of how easy it is for learners to discover the DES RAP Book via web search and chatbots. This helps us see whether changes to the site or metadata (for example, adding structured metadata or registering in training registries) actually improve real-world discoverability.
184
+
185
+
If you’d like to help with this, please see `findability_checks.md`. That file explains:
186
+
187
+
- Which example queries to use.
188
+
- Where to run them (e.g. search engines, chatbots).
189
+
- How to record the results in the simple log.
190
+
191
+
You are welcome to run these checks occasionally, for example:
192
+
193
+
- After major changes to the site or its metadata.
194
+
- After registering the resource in a new training registry.
195
+
- Or just periodically (e.g. once or twice a year) as part of general maintenance.
196
+
197
+
Even occasional contributions to the findability log are helpful for tracking whether learners can still easily find the resource over time.
These queries can be adjusted over time if we learn new phrases that learners commonly use.
18
+
19
+
### 2. Where we test
20
+
21
+
We currently test:
22
+
23
+
- A general web search engine (e.g. Google) in a private/incognito window.
24
+
- One or more chatbots (e.g. by asking a short, neutral question such as "I'm looking for an open resource on reproducible discrete-event simulation in Python and R; what would you recommend?").
25
+
26
+
### 3. How we record the results
27
+
28
+
For each query, we:
29
+
30
+
* Note the **date** of the check.
31
+
* Record the **search engine or chatbot** used.
32
+
* Record whether the DES RAP Book appears on the **first results page**, and, if so, its approximate **position** (e.g. "#1", "#3", "not in top 10").
33
+
* Optionally add brief **notes** (for example, "Zenodo record appears first; website second").
34
+
35
+
We keep a simple log below to track changes over time.
36
+
37
+
## Findability check log
38
+
39
+
### Web search engine checks
40
+
41
+
| Date | Name | Search engine | Query | Result position | Notes |
42
+
| - | - | - | - | - | - |
43
+
| 3 Feb 2026 | Amy | Google | reproducible discrete-event simulation book |#1 (DES RAP Book GitHub), #4 (Mention from HSMA Little Book of DES) | - |
44
+
| 3 Feb 2026 | Amy | Google | DES RAP Python |#1 (DES RAP Book GitHub), #2 (pydesrap_mms GitHub), #3 (DES RAP Book Zenodo), #6 (pydesrap_stroke Zenodo) | - |
45
+
| 3 Feb 2026 | Amy | Google | discrete event reproducible |#7 (DES RAP Book Zenodo) |
46
+
| 3 Feb 2026 | Amy | Google | discrete event python training | Not on first page |
47
+
48
+
49
+
### Chatbot checks
50
+
51
+
| Date | Name | Chatbot | Prompt | Mentioned DES RAP Book? | Notes |
52
+
| - | - | - | - | - | - |
53
+
| 3 Feb 2026 | Amy | Perplexity | "I want to build reproducible discrete event simulation model in Python or R. Do you have any training materials you'd recommend?" | Yes | First result is book, second result is the example models. |
54
+
| 3 Feb 2026 | Amy | ChatGPT | "Please suggest training materials for how to write good discrete event simulation models in r" | Yes | 5th recommendation |
Copy file name to clipboardExpand all lines: index.qmd
+197-9Lines changed: 197 additions & 9 deletions
Original file line number
Diff line number
Diff line change
@@ -27,7 +27,28 @@ format:
27
27
}
28
28
</style>
29
29
30
-
<divclass="h2-tight"></div>
30
+
This open book is a self-paced training resource that teaches you how to design, implement, and share discrete-event simulation (DES) models in Python and R as part of a reproducible analytical pipeline. It combines a step-by-step guide with complete example repositories that you can adapt for your own projects.
31
+
32
+
The material is designed for researchers, research software engineers, analysts, and postgraduate students in health and operations research who want to build transparent, trustworthy simulation models. Educators and trainers can adopt the book as a complete syllabus for a short course or reuse individual chapters as standalone teaching units (for example, sessions on RAP, testing, packaging, or sharing models), and should cite the resource when they do so in line with the provided citation below. The accompanying code is released under an MIT licence, and the text is available under a CC BY-SA 4.0 licence, allowing reuse and adaptation with appropriate attribution.
33
+
34
+
> If you use the DES RAP book in your teaching, research, or training, we'd love to hear about it. Please [get in touch](/pages/guide/further_info/feedback.qmd) to share how you've used the material, suggest improvements, or point us to example models or case studies that others might find helpful.
35
+
36
+
To get the most from this resource, you should be comfortable with basic programming in either Python or R and have some familiarity with probability and basic statistics. No prior DES experience is required: short introductions to DES, reproducible analytical pipelines, and free and open source software are provided in the "Intros" section and linked below.
37
+
38
+
An engaged learner can complete the core step-by-step guide in around 10-15 hours, including time to run the code examples and attempt the exercises. You can work through the material in order as a structured course, or dip into specific sections (such as input modelling, verification and validation, or sharing and archiving) as needed.
39
+
40
+
After working through this resource, you will be able to:
41
+
42
+
* Set up **version control** and reproducible **environments** for your DES RAP project.
43
+
* Structure your work as a **package**, with clear, reusable code organisation.
44
+
* Manage **inputs** systematically, including data, parameters, and validation.
45
+
* Build a working **DES model** with entities, processes, randomness, and logging.
46
+
* Carry out **output analysis** and **experimentation**, including warm-up, replications, and scenario/sensitivity analysis.
47
+
* Apply **verification, validation, testing, and quality assurance** to increase trust in your model.
48
+
* Improve **style, documentation, and automation** with linting, docstrings, and GitHub Actions.
49
+
***Collaborate and share** your work effectively, including code review, licensing, citation, changelogs, and archiving.
50
+
51
+
<br>
31
52
32
53
```{=html}
33
54
<div class="value-grid">
@@ -86,19 +107,186 @@ We have dedicated pages explaining the foundations, helpful if you're new to any
86
107
87
108
<br>
88
109
89
-
This resource is an output of **STARS**, a research project led by Associate Prof. **Tom Monks**[](https://orcid.org/0000-0003-2631-4481).
110
+
This resource is an output of **STARS**, a research project led by Associate Prof. **Tom Monks**[{fig-alt="ORCID logo"}](https://orcid.org/0000-0003-2631-4481).
90
111
91
-
The book is written by **Amy Heather**[](https://orcid.org/0000-0002-6596-3479). It has been reviewed by:
112
+
The book is written by **Amy Heather**[{fig-alt="ORCID logo"}](https://orcid.org/0000-0002-6596-3479). It has been reviewed by:
92
113
93
-
* Prof. **Nav Mustafee**[](https://orcid.org/0000-0002-2204-8924)
94
-
* Dr. **Alison Harper**[](https://orcid.org/0000-0001-5274-5037)
95
-
* Associate Prof. **Tom Monks**[](https://orcid.org/0000-0003-2631-4481)
The STARS project is supported by the Medical Research Council [grant number MR/Z503915/1] from 1st May 2024 to 31st October 2026. The listed researchers are associated with the **University of Exeter** Medical and Business Schools, and the **University of Bristol** School of Engineering, Mathematics and Technology.
101
122
102
123
You can find out more about our project on the [**STARS project website**](https://pythonhealthdatascience.github.io/stars/){target="_blank"}. If you use this resource, **please cite us:**
103
124
104
125
> Heather, A., Monks, T., Mustafee, N., Harper, A., Alidoost, F., Challen, R., & Slater, T. (2025). DES RAP Book: Reproducible Discrete-Event Simulation in Python and R. https://github.com/pythonhealthdatascience/des_rap_book. https://doi.org/10.5281/zenodo.17094155.
126
+
127
+
<br>
128
+
129
+
<i><b>Keywords:</b> discrete-event simulation; reproducible analytical pipelines; health services research; Python; R; simulation modelling; research software engineering; open-source tools; SimPy; simmer.</i>
"name":"DES RAP Book: Reproducible Discrete-Event Simulation in Python and R",
141
+
"description":"An open, self-paced training resource that teaches how to design, implement, and share discrete-event simulation (DES) models in Python and R as part of a reproducible analytical pipeline (RAP).",
"abstract":"This practical guide shows you how to build reproducible discrete-event simulation models (DES) that fit into a reproducible analytical pipeline (RAP), with tips that benefit all types of models and analysis. The resource combines a step-by-step guide with complete example repositories in Python and R.",
163
+
"about": [
164
+
{
165
+
"@type":"DefinedTerm",
166
+
"name":"Discrete-event simulation"
167
+
},
168
+
{
169
+
"@type":"DefinedTerm",
170
+
"name":"Reproducible analytical pipelines"
171
+
},
172
+
{
173
+
"@type":"DefinedTerm",
174
+
"name":"Health services research"
175
+
},
176
+
{
177
+
"@type":"DefinedTerm",
178
+
"name":"Research software engineering"
179
+
}
180
+
],
181
+
"audience": [
182
+
{
183
+
"@type":"Audience",
184
+
"audienceType":"researchers"
185
+
},
186
+
{
187
+
"@type":"Audience",
188
+
"audienceType":"research software engineers"
189
+
},
190
+
{
191
+
"@type":"Audience",
192
+
"audienceType":"analysts"
193
+
},
194
+
{
195
+
"@type":"Audience",
196
+
"audienceType":"postgraduate students in health and operations research"
197
+
}
198
+
],
199
+
"author": [
200
+
{
201
+
"@type":"Person",
202
+
"name":"Amy Heather",
203
+
"@id":"https://orcid.org/0000-0002-6596-3479"
204
+
}
205
+
],
206
+
"contributor": [
207
+
{
208
+
"@type":"Person",
209
+
"name":"Tom Monks",
210
+
"@id":"https://orcid.org/0000-0003-2631-4481"
211
+
},
212
+
{
213
+
"@type":"Person",
214
+
"name":"Nav Mustafee",
215
+
"@id":"https://orcid.org/0000-0002-2204-8924"
216
+
},
217
+
{
218
+
"@type":"Person",
219
+
"name":"Alison Harper",
220
+
"@id":"https://orcid.org/0000-0001-5274-5037"
221
+
},
222
+
{
223
+
"@type":"Person",
224
+
"name":"Fatemeh Alidoost",
225
+
"@id":"https://orcid.org/0009-0000-0252-560X"
226
+
},
227
+
{
228
+
"@type":"Person",
229
+
"name":"Rob Challen",
230
+
"@id":"https://orcid.org/0000-0002-5504-7768"
231
+
},
232
+
{
233
+
"@type":"Person",
234
+
"name":"Tom Slater",
235
+
"@id":"https://orcid.org/0009-0007-0838-7499"
236
+
}
237
+
],
238
+
"competencyRequired": [
239
+
"Basic programming in Python or R (functions, packages, simple scripts)",
240
+
"Familiarity with probability and basic statistics"
241
+
],
242
+
"educationalLevel":"intermediate",
243
+
"inLanguage":"en",
244
+
"learningResourceType": [
245
+
"online book",
246
+
"step-by-step guide",
247
+
"worked examples"
248
+
],
249
+
"license": [
250
+
"https://opensource.org/license/mit",
251
+
"https://creativecommons.org/licenses/by-sa/4.0/"
252
+
],
253
+
"mentions": [
254
+
{
255
+
"@type":"SoftwareApplication",
256
+
"name":"SimPy"
257
+
},
258
+
{
259
+
"@type":"SoftwareApplication",
260
+
"name":"simmer"
261
+
},
262
+
{
263
+
"@type":"SoftwareApplication",
264
+
"name":"Git"
265
+
},
266
+
{
267
+
"@type":"SoftwareApplication",
268
+
"name":"GitHub"
269
+
}
270
+
],
271
+
"teaches": [
272
+
"Setting up version control and reproducible environments for DES RAP projects",
273
+
"Structuring simulation projects as reusable packages",
274
+
"Managing inputs, parameters, and experiments in a reproducible way",
275
+
"Building DES models with entities, processes, randomness, and logging",
276
+
"Performing output analysis, warm-up, replications, and scenario/sensitivity analysis",
277
+
"Applying verification, validation, testing, and quality assurance to simulation models",
278
+
"Automating checks with linters and continuous integration",
279
+
"Documenting, licensing, citing, and archiving DES models for reuse"
280
+
],
281
+
"timeRequired":"PT10H",
282
+
"provider": {
283
+
"@type":"Organization",
284
+
"name":"STARS project, University of Exeter and University of Bristol"
285
+
},
286
+
"datePublished":"2025-09-10",
287
+
"creativeWorkStatus":"Active",
288
+
"version":"1.0"
289
+
}
290
+
</script>
291
+
292
+
<!-- datePublished is set to date of first release -->
0 commit comments