-
Notifications
You must be signed in to change notification settings - Fork 13
/
index.html
372 lines (345 loc) · 18 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<!-- Code highlighting -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.6.0/themes/prism.min.css">
<!-- Custom styles for this template -->
<link href="_assets/main.css" rel="stylesheet">
<title>Bluesky Project</title>
</head>
<body>
<header>
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<div class="navbar-brand">
<a href="index.html"><img src="_assets/bluesky-logo-dark.svg" style="height: 2rem;"></a>
</div>
<div class="navbar">
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavDropdown"
aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
</div>
<div class="collapse navbar-collapse" id="navbarNavDropdown">
<ul class="navbar-nav">
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdownMenuLink" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
Documentation
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
<a class="dropdown-item" href="https://bluesky.github.io/bluesky">Bluesky — Experiment
Orchestration</a>
<a class="dropdown-item" href="https://bluesky.github.io/ophyd">Ophyd — Hardware Abstraction</a>
<a class="dropdown-item" href="https://bluesky.github.io/ophyd-async">Ophyd Async — Asynchronous
Access to Hardware Abstraction</a>
<a class="dropdown-item" href="https://bluesky.github.io/bluesky-queueserver">Bluesky Queue Server —
Server for Remote Control of Experiments</a>
<a class="dropdown-item" href="https://bluesky.github.io/bluesky-queueserver-api">Bluesky Queue Server API
— Python API for Bluesky Queue Server</a>
<a class="dropdown-item" href="https://bluesky.github.io/tiled">Tiled (alpha)— Data Access for Data
Science and Data Portals</a>
<a class="dropdown-item" href="https://bluesky.github.io/databroker">Data Broker — Data Storage</a>
<a class="dropdown-item" href="https://bluesky.github.io/bluesky-widgets">Bluesky Widgets (beta)—
Graphical Components for Jupyter and Qt</a>
<a class="dropdown-item" href="https://bluesky.github.io/suitcase">Suitcase — Export /
Serialization</a>
<a class="dropdown-item" href="https://bluesky.github.io/event-model">Event Model — Data Model &
Schema</a>
</div>
</li>
<li class="navbar-item"><a class="nav-link" href="https://blueskyproject.io/tutorials">Tutorials</a></li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdownMenuLink" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
Community
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
<a class="dropdown-item" href="https://github.com/bluesky">Github</a>
<a class="dropdown-item" href="https://calendar.google.com/calendar/u/0/[email protected]&ctz=America/New_York">Calendar</a>
<a class="dropdown-item" href="https://blueskyproject.io/mattermost/">Mattermost (Chat)</a>
<a class="dropdown-item" href="https://github.com/bluesky/governance">Governance</a>
</div>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdownMenuLink" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
Related Software Projects
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
<a class="dropdown-item" href="https://bcda-aps.github.io/apstools/latest/">apstools</a>
<a class="dropdown-item" href="https://caproto.github.io/caproto">Caproto</a>
<a class="dropdown-item" href="https://pcdshub.github.io/happi/">Happi</a>
<a class="dropdown-item" href="https://slaclab.github.io/pydm/">PyDM</a>
<a class="dropdown-item" href="https://pcdshub.github.io/typhos/">Typhos</a>
</div>
</li>
</ul>
</div>
</nav>
</header>
<div class="hero position-relative overflow-hidden p-3 text-center">
<div class="col-md-5 p-lg-1 mx-auto my-5">
<img src="_assets/bluesky-logo-dark.svg" style="max-width: 100rem;">
<p class="lead">
Bluesky enables experimental science at the lab-bench or facility scale.
</p>
<p class="lead ">
Bluesky is a collection of Python libraries that are co-developed but
independently useful and may be adopted <em>a la carte</em>.
</p>
<a class="btn btn-lg btn-dark" href="https://mybinder.org/v2/gh/bluesky/tutorials/main?urlpath=lab" role="button">Try Now »</a>
</div>
<div class="product-device box-shadow d-none d-md-block"></div>
<div class="product-device product-device-2 box-shadow d-none d-md-block"></div>
</div>
<main role="main">
<div class="container marketing p-md-5">
<div class="row">
<div class="col-md-7">
<h2>Leverage the SciPy Ecosystem</h2>
<p class="lead ">
Bluesky enables scientists to leverage the scientific Python
ecosystem at every stage of the experiment from data acquisition
through data analysis.
</div>
<div class="col-md-5">
<figure class="figure">
<img class="figure-img" src="_assets/scipy-ecosystem.png" width="100%" />
<figcaption class="figure-caption">Credit: Jake vanderPlas, "The Unexpected Effectiveness of Python in
Science", PyCon 2017</figcaption>
</figure>
</div>
</div>
<hr class="featurette-divider" />
<div class="row">
<div class="col-md-12">
<div class="row">
<div class="col-md-12">
<h2>Individually Useful Components</h2>
<p class="lead ">
The scientific Python ecosystem is built on
<em>protocols</em>, such as Numpy's array protocol, that enable
software to be combined and repurposed in ways not foreseen by the
original authors.
</p>
<p class="lead ">Drawing inspiration from this, the software
libraries in the Bluesky Project interoperate through
carefully-defined software interfaces. Any given piece may be
separately used, extended, or replaced.
</p>
<img src="_assets/overview-white-no-heading.png" width="100%" />
</div>
</div>
<hr class="featurette-divider" />
<div class="row">
<div class="col-md-7">
<h2>Bluesky — Experiment Specification & Orchestration</h2>
<p class="lead ">Bluesky, a library that shares the name of the
overall project, is an experiment specification and orchestration
engine.
<ul>
<li>Specify the logic of an experiment in a high-level, hardware-abstracted way.</li>
<li>First-class support for <strong>adaptive feedback</strong> between analysis and acquisition.</li>
<li>Data is emitted in a <strong>streaming</strong> fashion in standard Python data structures.</li>
<li>Pause/resume, robust error handling, and rich metadata capture are built in.</li>
</ul>
<a class="btn btn-lg btn-dark" href="https://bluesky.github.io/bluesky" role="button">Learn about Bluesky
»</a>
</div>
<div class="col-md-5">
<img src="_assets/adaptive-scan-demo.gif" width="100%" />
</div>
</div>
<hr class="featurette-divider" />
<div class="row">
<div class="col-md-7">
<h2>Ophyd — Hardware Abstraction Layer</h2>
<p class="lead ">Ophyd puts the control layer (e.g. EPICS, HTTP, some serial
protocol) behind a high-level interface. It keeps device-specific
details contained.</p>
<ul>
<li>Put the control layer behind a <strong>high-level interface</strong>.</li>
<li><strong>Group</strong> individual signals into logical "Devices" to be configured and used as one
unit.</li>
<li>Assign signals and devices <strong>human-friendly names</strong> that propagate into metadata.</li>
<li><strong>Categorize</strong> signals by "kind" (primary reading, configuration,
engineering/debugging).</li>
</ul>
<a class="btn btn-lg btn-dark" href="https://bluesky.github.io/ophyd" role="button">Learn about Ophyd
»</a>
</div>
<div class="col-md-5">
<pre><code class="language-python">from ophyd import Device, Component, EpicsSignal
# Here we group signals into a Device
class XYStage(Device):
x = Component(EpicsSignal, 'Mtr-X')
y = Component(EpicsSignal, 'Mtr-Y')
# and connect to multiple instances
# of that device.
left_stage = XYStage('Left-', name='left_stage')
right_stage = XYStage('Right-', name='right_stage')</code></pre>
</div>
</div>
<hr class="featurette-divider" />
<div class="row">
<div class="col-md-7">
<h2>Ophyd Async — Asynchronous Hardware Abstraction Layer</h2>
<p class="lead ">Ophyd Async is an alternative option to Ophyd that uses
asynchronous logic to access the control layer, as well as implementing
new features such as EPICS pva access via the <a href="https://pypi.org/project/p4p/">p4p python
package</a>.</p>
Ophyd Async is included on a provisional basis until the v1.0 release.
<a class="btn btn-lg btn-dark" href="https://bluesky.github.io/ophyd-async" role="button">Learn about
Ophyd Async »</a>
</div>
<div class="col-md-5">
<pre><code class="language-python">from ophyd_async.core import Device, DeviceCollector
from ophyd_async.epics.demo import Mover
from bluesky import RunEngine
# Here we group signals into a device
class SampleStage(Device):
"""A demo sample stage with X and Y movables"""
def __init__(self, prefix: str, name="") -> None:
# each 'mover' contains epics signals like its velocity, units and precision.
self.x = Mover(prefix + "X:")
self.y = Mover(prefix + "Y:")
# make and connect devices. Requires the run engine.
RE= RunEngine()
with DeviceCollector():
left_stage = SampleStage("Left-")
right_stage = SampleStage("Right-")</code></pre>
</div>
</div>
<hr class="featurette-divider" />
<div class="row">
<div class="col-md-7">
<h2>Bluesky Queue Server — Remote Control of Experiments</h2>
<p class="lead "> Bluesky Queue Server allows users to create and remotely manage
the queue of Bluesky plans and the environment for plan execution. </p>
<ul>
<li>Extensive set of <strong>API</strong> for full remote access to server functionality.</li>
<li><strong>Autonomous</strong> execution of sequenced Bluesky plans.</li>
<li>Remote <strong>monitoring</strong> of the server.</li>
<li><a href="https://bluesky.github.io/bluesky-queueserver-api">Bluesky Queue Server API</a> package
for easy development of <strong>client applications</strong> in Python.</li>
</ul>
<a class="btn btn-lg btn-dark" href="https://bluesky.github.io/bluesky-queueserver" role="button">Learn
about Bluesky Queue Server »</a>
</div>
<div class="col-md-5">
</div>
</div>
<hr class="featurette-divider" />
<div class="row">
<div class="col-md-7">
<h2>Suitcase — Export / Serialization</h2>
<p class="lead ">Bluesky is file format-agnostic. Individual "suitcase" packages encode data and metadata
from bluesky's in-memory data model to existing file formats.</p>
<ul>
<li>Export can be performed during acquisition or later.</li>
<li>It is easy to write new "suitcases" for desired formats.</li>
<li>The destination does not have to be a file on disk: it could be an in-memory buffer or a web client.
</li>
</ul>
<a class="btn btn-lg btn-dark" href="https://bluesky.github.io/suitcase" role="button">Learn about
Suitcase »</a>
</div>
<div class="col-md-5">
Supported formats so far include:
<ul>
<li>CSV</li>
<li>TIFF</li>
<li>SPEC file</li>
<li>msgpack</li>
<li>JSONL</li>
<li>and other, technique- and instrument-specific formats</li>
</div>
</div>
<hr class="featurette-divider" />
<div class="row">
<div class="col-md-7">
<h2>Data Broker — Rich Search and Access to Saved Data</h2>
<p class="lead ">Keeping scientific logic and I/O code separate
makes important scientific code easier to maintain and reuse. Data Broker
supports this by providing a programmatic interface to data, giving
the user standard Python data structures directly.</p>
<ul>
<li>The system is <strong>unopinionated about data formats</strong>.</li>
<li>Any file I/O happens transparently: the <strong>user never sees files</strong>, just gets data in
memory (e.g. a numpy array).</li>
<li>Your detector writes in a special format? Register a custom reader at runtime.</li>
</ul>
<a class="btn btn-lg btn-dark" href="https://bluesky.github.io/databroker" role="button">Learn about Data
Broker »</a>
</div>
<div class="col-md-5">
</div>
</div>
<hr class="featurette-divider" />
<div class="row">
<div class="col-md-7">
<h2>"Event Model" — Bluesky's Data Model</h2>
<p class="lead ">Bluesky organizes data and metadata into documents
that adhere to a schema. This schema is formalized but minimal and
may be composed with existing standards.</p>
<a class="btn btn-lg btn-dark" href="https://bluesky.github.io/event-model" role="button">Learn about
Bluesky's Data Model »</a>
</div>
<div class="col-md-5">
</div>
</div>
<hr class="featurette-divider" />
<div class="row">
<div class="col-md-12">
<h2>Citation</h2>
<p class="lead ">
<div class="pub-meta">
<span class="authors">Daniel Allan, Thomas Caswell, Stuart Campbell & Maksim Rakitin</span>
<span class="date">(2019)</span>
<span class="art_title">Bluesky's Ahead: A Multi-Facility Collaboration for an <i>a la Carte</i>
Software Project for Data Acquisition and Management,</span>
<span class="serial_title">Synchrotron Radiation News,</span>
<span class="volume_issue">32:3,</span>
<span class="page_range">19-22,</span>
<span class="doi_link">DOI: <a
href="https://doi.org/10.1080/08940886.2019.1608121">10.1080/08940886.2019.1608121</a></span><br><br>
<pre>
@Article{doi:10.1080/08940886.2019.1608121,
author = {Allan, Daniel and Caswell, Thomas and Campbell, Stuart and Rakitin, Maksim},
journal = {Synchrotron Radiation News},
title = {{Bluesky's Ahead: A Multi-Facility Collaboration for an a la Carte Software Project for Data Acquisition and Management}},
year = {2019},
number = {3},
pages = {19--22},
volume = {32},
doi = {10.1080/08940886.2019.1608121},
publisher = {Taylor \& Francis},
url = {https://doi.org/10.1080/08940886.2019.1608121},
}
</pre>
</div>
</p>
</div>
<div class="col-md-5">
</div>
</div>
</div>
</main>
<!-- Load JavaScript last to improve page load time -->
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"
integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo"
crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"
integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM"
crossorigin="anonymous"></script>
<!-- Code highlighting -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.6.0/prism.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.6.0/components/prism-python.min.js"></script>
</body>
</html>