Benedikt J Daurer1, Max F Hantke1, Carl Nettelblad2, Filipe R N C Maia1. 1. Laboratory of Molecular Biophysics, Department of Cell and Molecular Biology, Uppsala University, Sweden. 2. Laboratory of Molecular Biophysics, Department of Cell and Molecular Biology, Uppsala University, Sweden; Division of Scientific Computing, Department of Information Technology, Science for Life Laboratory, Uppsala University, Sweden.
Abstract
Advances in X-ray detectors and increases in the brightness of X-ray sources combined with more efficient sample delivery techniques have brought about tremendous increases in the speed of data collection in diffraction experiments. Using X-ray free-electron lasers such as the Linac Coherent Light Source (LCLS), more than 100 diffraction patterns can be collected in a second. These high data rates are invaluable for flash X-ray imaging (FXI), where aerosolized samples are exposed to the X-ray beam and the resulting diffraction patterns are used to reconstruct a three-dimensional image of the sample. Such experiments require immediate feedback on the quality of the data collected to adjust or validate experimental parameters, such as aerosol injector settings, beamline geometry or sample composition. The scarcity of available beamtime at the laser facilities makes any delay extremely costly. This paper presents Hummingbird, an open-source scalable Python-based software tool for real-time analysis of diffraction data with the purpose of giving users immediate feedback during their experiments. Hummingbird provides a fast, flexible and easy-to-use framework. It has already proven to be of great value in numerous FXI experiments at the LCLS.
Advances in X-ray detectors and increases in the brightness of X-ray sources combined with more efficient sample delivery techniques have brought about tremendous increases in the speed of data collection in diffraction experiments. Using X-ray free-electron lasers such as the Linac Coherent Light Source (LCLS), more than 100 diffraction patterns can be collected in a second. These high data rates are invaluable for flash X-ray imaging (FXI), where aerosolized samples are exposed to the X-ray beam and the resulting diffraction patterns are used to reconstruct a three-dimensional image of the sample. Such experiments require immediate feedback on the quality of the data collected to adjust or validate experimental parameters, such as aerosol injector settings, beamline geometry or sample composition. The scarcity of available beamtime at the laser facilities makes any delay extremely costly. This paper presents Hummingbird, an open-source scalable Python-based software tool for real-time analysis of diffraction data with the purpose of giving users immediate feedback during their experiments. Hummingbird provides a fast, flexible and easy-to-use framework. It has already proven to be of great value in numerous FXI experiments at the LCLS.
More than a decade ago, it was first suggested that the very short and intense pulses of X-ray free-electron lasers (XFELs) have the potential to determine the structure of noncrystalline bioparticles from a large collection of single-shot diffraction patterns (Neutze et al., 2000 ▸). This flash X-ray imaging (FXI) concept has been used to reconstruct two-dimensional projections of mimivirus (Seibert et al., 2011 ▸), whole cells (van der Schot et al., 2015 ▸), cell organelles (Hantke et al., 2014 ▸) and soot particles (Loh et al., 2012 ▸). More recent advances include the characterization of the three-dimensional structure of silver particles (Barke et al., 2015 ▸) and even a full three-dimensional reconstruction of mimivirus (Ekeberg et al., 2015 ▸). In a typical FXI experiment, a stream of biological particles is injected into the focus of a pulsed X-ray source. Far-field diffraction data are collected downstream of the interaction region. A more detailed description of the experimental setup, using an aerosol particle injector, has been given for example by Hantke et al. (2014 ▸).Currently, a considerable amount of time during FXI experiments is spent on alignment and optimization of the X-ray source, background reduction and finding the intersection between the particle stream and the X-ray beam. These tasks get increasingly harder as we move towards harder X-rays (>2 keV) in a smaller focus (<200 nm), with ever smaller bioparticles (<100 nm). Yet such changes are necessary steps towards the goal of imaging single molecules with atomic resolution using a free-electron laser. The availability of immediate feedback on the quality of the data collected helps reduce the amount of time required for the above steps. For this purpose we developed Hummingbird, an open-source, modular and scalable Python-based software tool designed for monitoring and analyzing FXI experiments in real time. Similar projects like Cheetah (a comprehensive data reduction and analysis tool for diffraction data written in C/C++; Barty et al., 2014 ▸), CASS (a data analysis and visualization tool developed for XFEL experiments; Foucar et al., 2012 ▸), cctbx.xfel [a Python-based data processing tool for serial femtosecond crystallography (SFX); Sauter et al., 2013 ▸] and OnDA (a real-time monitoring tool mainly developed for the needs of SFX; Mariani, 2016 ▸) show the need for robust and fast data analysis tools able to cope with the large stream of data produced with XFELs.Hummingbird abstracts away the technical details required to access data at different light sources in a scalable manner, presenting the user with a consistent interface for processing individual shots. It is lightweight and can scale to processing rates above 100 Hz by distributing the load among multiple workers on multiple computation nodes. Its Python-based configuration files make it simple to use, while allowing great flexibility. We demonstrate the versatility and speed of Hummingbird using an example that reflects typical data taken at FXI experiments. Although Hummingbird has been developed and tested mainly for experiments performed at the Linac Coherent Light Source (LCLS), its modular architecture allows it to be easily adapted to any other light source.
Architecture
Hummingbird’s architecture (see Fig. 1 ▸) is based on a simple client–server model written mainly in Python. The server can be split over multiple processes, communicating across MPI (Forum, 1994 ▸) using OpenMPI (Gabriel et al., 2004 ▸), to maximize performance. Each process reads independently from a common data source, translating raw data into Hummingbird’s common event structure. For every event, user-specific data analysis is performed. The server communicates the results to the client using ZeroMQ’s publish/subscribe pattern (Hintjens, 2010 ▸). The client subscribes to available data sources and output is visualized in a graphical user interface (GUI).
Figure 1
The client–server architecture of Hummingbird. Depending on the configuration (conf.py), the backend workers (master in red, slaves in green) read in data, translate native events based on the facility, perform user-specific data analysis and send plots off to the frontend.
Customization of the backend is possible through a Python-based configuration file, as shown in Fig. 2 ▸, which specifies the data source and defines the analysis and plotting modules to be used. Upon changes, the configuration can easily be reloaded by sending a signal to the server, either using the terminal or remotely using the ‘reload’ button in the GUI. This makes the common procedure of tuning parameters, such as hit-finding thresholds, convenient and fast.
Figure 2
The backbone structure of a Hummingbird configuration file. In the header, analysis/plotting modules are imported, accompanied by a definition of the data source. Inside the event function, user-specific data analysis and plotting is defined. Global parameters can be defined outside the event function.
This section describes the individual parts of Hummingbird’s architecture, namely the configuration file, translation layer, event variable, analysis/plotting modules and GUI. A complete example based on experimental data followed by a simple benchmark to test Hummingbird’s speed and scalability is given in §3.
Configuration file
A typical Hummingbird configuration file (see Fig. 2 ▸) is divided into three sections. In the first section, necessary modules for analysis and plotting are imported. A complete list of available modules can be found in the API documentation (see Usage notes
). The second section defines the data source, using the variable. In the third section, inside the function , user-specific steps of analysis and plotting are performed, triggered by individual events. Global parameters can be defined outside the function, e.g. using the variable, which is used to keep track of things that do not change between consecutive invocations.
Translation layer
Hummingbird’s architecture (see Fig. 1 ▸) is designed such that all code parts downstream of the translation layer are intended to be facility agnostic. Native events are translated into Hummingbird events, represented by the event variable . In its current implementation Hummingbird provides translation services for data produced at the LCLS using Python-based psana (Damiani et al., 2016 ▸). This tool supports reading from the native XTC files at LCLS, as well as from live shared memory streams provided by the LCLS data acquisition infrastructure. The shared memory stream gives access to live LCLS data through a buffer which gets filled by the data acquisition system (DAQ) during data collection and is available to applications until it is overwritten by a subsequent event. The shared memory streams are only available from dedicated online monitoring nodes. In the future we plan to add more translation modules for other facilities like SACLA, and the upcoming European XFEL, which uses Karabo (Heisen et al., 2013 ▸).
Event variable (evt)
The variable provides access to all available data entries, e.g. pixel detector images, pulse energies, motor positions. is a nested dictionary with two levels, the first defining a data type and the second defining a data key. Individual data records, like have and attributes, the former being an identifier and the latter giving access to the data.
Analysis/plotting modules
On the basis of their experimental needs, a user can customize individual data processing steps using analysis modules and define graphs to be presented in the GUI using plotting modules. An analysis module takes the along with a data type and a data key as positional arguments. Some modules expect a data record as second argument. The output is attached to as a new data record with the data type and a new data key based on the combination of the input data type/key and an additional string labelling the analysis performed. Additional input parameters can be passed to the module as a keyword argument.A plotting module takes at least one data record as a positional argument and additional parameters as keyword arguments. The purpose of the plotting module is to send data together with plotting instructions to the interface. These plotting instructions include the kind of data to be plotted (e.g. image, histogram, scalar, vector,…), labels, limits and colormaps. Furthermore, it is possible to toggle a logarithmic mode, include horizontal/vertical markers and provide additional messages which are printed in the footer of the plotting window. Most of those plotting parameters can also be modified from the interface using the settings dialog inside the plotting window.The current release of Hummingbird includes a collection of analysis modules for tasks such as detector correction, hit finding (Barty et al., 2014 ▸), size and multiple-hit filtering (Hantke et al., 2014 ▸), and scanning transmission X-ray microscopy analysis (for scanning experiments). The list of available plotting modules includes simple image and line plots as well as one-dimensional histograms and more advanced correlation plots (scatter plots, two-dimensional histograms).The analysis modules are built upon Numpy (Jones et al., 2001 ▸) and Scipy (van der Walt et al., 2011 ▸).
Graphical user interface
After connecting to the backend, the GUI provides a table of available data sources for plotting as shown in Fig. 3 ▸. This list is auto-populated on the basis of what is configured in the backend configuration file. Hence, no user modification of frontend source code is generally needed. Depending on the type of data source, data can be visualized in a line or image plot window.
Figure 3
The GUI of the Hummingbird client. Once connected to the backend it shows a table of available data sources (in the background). On opening a line/image window (in the front) it is possible to subscribe to the data source and visualize data in real time as they are produced by the backend workers.
After opening an empty line/image plot window it is possible to subscribe to available sources. At that point, the interface starts to subscribe to data from the backend workers, with plots being updated every other second. By closing the line/image window, the interface unsubscribes from the data source, minimizing network load. Multiple frontend processes on different machines can subscribe to the same backend without interfering with each other, allowing for specialized viewports.For all data sources with active subscriptions, the interface keeps a buffer which can be dynamically resized at any time. Using this buffer, it is possible to show trends as well as go back in history in case an interesting event passed by too quickly. A more complete list of features is given in the GUI documentation (see Usage notes
).The GUI is written in Python using Qt (The Qt Company, 2016 ▸) through PyQt (Riverbank Computing, 2016 ▸) and PyQtGraph (Campagnola, 2016 ▸).
Practical example
We demonstrate the usage and capability of Hummingbird using data from an FXI experiment on mimivirus collected at the LCLS (Ekeberg et al., 2016 ▸). The dataset is deposited in the CXIDB (http://www.cxidb.org/; entry 30). A list of used raw XTC and index files is provided in Table 1 ▸.
Table 1
List of raw XTC and index files downloaded from the CXIDB (entry 30): files containing dark frames (left column) and diffraction frames (right column) are used for demonstration of Hummingbird
Run 73 (dark)
Run 92 (diffraction)
e41-r0073-s00-c00.xtc
e41-r0092-s01-c00.xtc
e41-r0073-s02-c00.xtc
e41-r0092-s00-c00.xtc
e41-r0073-s01-c00.xtc
e41-r0092-s02-c00.xtc
index/e41-r0073-s00-c00.xtc.idx
index/e41-r0092-s01-c00.xtc.idx
index/e41-r0073-s02-c00.xtc.idx
index/e41-r0092-s00-c00.xtc.idx
index/e41-r0073-s01-c00.xtc.idx
index/e41-r0092-s02-c00.xtc.idx
With all files listed in Table 1 ▸ in the same folder and a working psana setup, it is possible to run Hummingbird with the configuration described in Fig. 4 ▸. This example starts by calculating the average dark image, which then is subtracted from the raw pedestal values of diffraction frames. Running Hummingbird on the ‘dark’ configuration file (Fig. 4 ▸
a) in a single process will produce an HDF5 file with an averaged dark image.
Figure 4
Example of Hummingbird configuration files reading data from raw XTC and index files. The configuration in (a) reads dark frames and saves the average to a file. The configuration in (b) reads diffraction frames, applies hit-finding analysis and sends detector images of hits along with additional information to the GUI client.
When Hummingbird is run on the ‘diffraction’ configuration file (Fig. 4 ▸
b) in a single process, or with multiple processes, each worker grabs a raw frame from the back detector, subtracts the average dark image, corrects for the common mode within the pnCCD detector rows (Hantke et al., 2014 ▸) and finally counts the number of lit pixels, i.e. pixels containing photons. We call this metric hitscore and use it to determine whether the current diffraction event is a hit or not. The backend sends three plots to the interface; the histogram of the current detector event, the current hitscore which is displayed as a history plot and the full detector image for hits.After connecting the interface to the main worker of the backend, and subscribing to the three available data sources, updates on the histogram, hitscore and hit images are displayed in the interface as shown in Fig. 5 ▸. Watching the progress of histogram and hitscore history helps the user to optimize the lit pixel hit finder, namely the threshold for defining a lit pixel (shown as a vertical red line in the top right panel) and the hitscore threshold defining a hit (shown as a horizontal green line in the bottom left panel). When running from a dynamic data source (e.g. a shared memory stream), it is possible to change parameters in the backend configuration file and simply reload the configuration using the ‘Reload’ button in the interface without restarting the backend.
Figure 5
Snapshot of the Hummingbird interface showing available data sources and plots for the ‘diffraction’ configuration example. It monitors the hitscore (bottom left), detector histogram (top right) and latest hit image (bottom right). The current parameters of the hit finder (counting lit pixels) are shown as a vertical red line in the top right panel and as a horizontal green line in the bottom left panel.
The performance of Hummingbird running the ‘diffraction’ configuration example when reading from XTC files is given in Table 2 ▸, showing processing rates above 100 Hz using up to 90 CPU workers distributed across five computing nodes. Each node has two Intel Xeon E5-2620 CPUs with six cores each. With low worker counts, the processing speed scales linearly. For higher counts, the disk I/O subsystem of our cluster becomes the limiting factor. When running the same example live (i.e. from shared memory streams at LCLS), the intent would be to choose a number of nodes (with the number of workers per node roughly corresponding to the number of cores) that would guarantee real-time processing of all data. During numerous experiments at the LCLS using similar configurations, Hummingbird has been reading from multiplexed shared memory streams approaching the real-time rate of 120 Hz.
Table 2
Processing rates of Hummingbird running with MPI on the configuration file shown in Fig. 4 ▸ using different numbers of workers
No. of workers
Processing rate (Hz)
No. of workers
Processing rate (Hz)
1
3.93
50
141.99
10
37.69
60
155.36
20
57.50
70
178.53
30
89.20
80
189.74
40
110.29
90
198.26
Usage notes
Hummingbird is an open-source project, available under the Simplified BSD license. The current release can be downloaded from http://lmb.icm.uu.se/hummingbird. The project is also available on Github (https://github.com/FXIhub/hummingbird). Detailed installation instructions and examples are provided on a documentation page (http://lmb.icm.uu.se/hummingbird/docs).
Future work
In future releases of Hummingbird we are planning to add more event translators for other XFEL data sources, in particular for SACLA and the European XFEL. Besides its main focus on real-time monitoring, we are improving the capabilities of running Hummingbird as a tool for offline analysis of X-ray diffraction data. We continue to implement new data analysis and plotting modules. Furthermore, we are constantly adding new features to the GUI. This is an open-source project, so we encourage users to contribute and extend Hummingbird by adding new modules.
Conclusion
We have introduced Hummingbird, a versatile data analysis and monitoring tool which is able to cope with the current frame rates at which data are produced in FXI experiments performed at free-electron lasers. With Hummingbird, users are able to monitor and thus adjust crucial experimental parameters in real time. With its simple and modular Python implementation, users can easily build their own tailored analysis pipeline for their experiments and run it in real time over multiple cores and nodes.
Authors: N D Loh; C Y Hampton; A V Martin; D Starodub; R G Sierra; A Barty; A Aquila; J Schulz; L Lomb; J Steinbrener; R L Shoeman; S Kassemeyer; C Bostedt; J Bozek; S W Epp; B Erk; R Hartmann; D Rolles; A Rudenko; B Rudek; L Foucar; N Kimmel; G Weidenspointner; G Hauser; P Holl; E Pedersoli; M Liang; M S Hunter; M M Hunter; L Gumprecht; N Coppola; C Wunderer; H Graafsma; F R N C Maia; T Ekeberg; M Hantke; H Fleckenstein; H Hirsemann; K Nass; T A White; H J Tobias; G R Farquar; W H Benner; S P Hau-Riege; C Reich; A Hartmann; H Soltau; S Marchesini; S Bajt; M Barthelmess; P Bucksbaum; K O Hodgson; L Strüder; J Ullrich; M Frank; I Schlichting; H N Chapman; M J Bogan Journal: Nature Date: 2012-06-27 Impact factor: 49.962
Authors: M Marvin Seibert; Tomas Ekeberg; Filipe R N C Maia; Martin Svenda; Jakob Andreasson; Olof Jönsson; Duško Odić; Bianca Iwan; Andrea Rocker; Daniel Westphal; Max Hantke; Daniel P DePonte; Anton Barty; Joachim Schulz; Lars Gumprecht; Nicola Coppola; Andrew Aquila; Mengning Liang; Thomas A White; Andrew Martin; Carl Caleman; Stephan Stern; Chantal Abergel; Virginie Seltzer; Jean-Michel Claverie; Christoph Bostedt; John D Bozek; Sébastien Boutet; A Alan Miahnahri; Marc Messerschmidt; Jacek Krzywinski; Garth Williams; Keith O Hodgson; Michael J Bogan; Christina Y Hampton; Raymond G Sierra; Dmitri Starodub; Inger Andersson; Saša Bajt; Miriam Barthelmess; John C H Spence; Petra Fromme; Uwe Weierstall; Richard Kirian; Mark Hunter; R Bruce Doak; Stefano Marchesini; Stefan P Hau-Riege; Matthias Frank; Robert L Shoeman; Lukas Lomb; Sascha W Epp; Robert Hartmann; Daniel Rolles; Artem Rudenko; Carlo Schmidt; Lutz Foucar; Nils Kimmel; Peter Holl; Benedikt Rudek; Benjamin Erk; André Hömke; Christian Reich; Daniel Pietschner; Georg Weidenspointner; Lothar Strüder; Günter Hauser; Hubert Gorke; Joachim Ullrich; Ilme Schlichting; Sven Herrmann; Gerhard Schaller; Florian Schopper; Heike Soltau; Kai-Uwe Kühnel; Robert Andritschke; Claus-Dieter Schröter; Faton Krasniqi; Mario Bott; Sebastian Schorb; Daniela Rupp; Marcus Adolph; Tais Gorkhover; Helmut Hirsemann; Guillaume Potdevin; Heinz Graafsma; Björn Nilsson; Henry N Chapman; Janos Hajdu Journal: Nature Date: 2011-02-03 Impact factor: 49.962
Authors: Gijs van der Schot; Martin Svenda; Filipe R N C Maia; Max Hantke; Daniel P DePonte; M Marvin Seibert; Andrew Aquila; Joachim Schulz; Richard Kirian; Mengning Liang; Francesco Stellato; Bianca Iwan; Jakob Andreasson; Nicusor Timneanu; Daniel Westphal; F Nunes Almeida; Dusko Odic; Dirk Hasse; Gunilla H Carlsson; Daniel S D Larsson; Anton Barty; Andrew V Martin; Sebastian Schorb; Christoph Bostedt; John D Bozek; Daniel Rolles; Artem Rudenko; Sascha Epp; Lutz Foucar; Benedikt Rudek; Robert Hartmann; Nils Kimmel; Peter Holl; Lars Englert; Ne-Te Duane Loh; Henry N Chapman; Inger Andersson; Janos Hajdu; Tomas Ekeberg Journal: Nat Commun Date: 2015-02-11 Impact factor: 14.919
Authors: Tomas Ekeberg; Martin Svenda; Chantal Abergel; Filipe R N C Maia; Virginie Seltzer; Jean-Michel Claverie; Max Hantke; Olof Jönsson; Carl Nettelblad; Gijs van der Schot; Mengning Liang; Daniel P DePonte; Anton Barty; M Marvin Seibert; Bianca Iwan; Inger Andersson; N Duane Loh; Andrew V Martin; Henry Chapman; Christoph Bostedt; John D Bozek; Ken R Ferguson; Jacek Krzywinski; Sascha W Epp; Daniel Rolles; Artem Rudenko; Robert Hartmann; Nils Kimmel; Janos Hajdu Journal: Phys Rev Lett Date: 2015-03-02 Impact factor: 9.161
Authors: Anton Barty; Richard A Kirian; Filipe R N C Maia; Max Hantke; Chun Hong Yoon; Thomas A White; Henry Chapman Journal: J Appl Crystallogr Date: 2014-05-29 Impact factor: 3.304
Authors: Ingo Barke; Hannes Hartmann; Daniela Rupp; Leonie Flückiger; Mario Sauppe; Marcus Adolph; Sebastian Schorb; Christoph Bostedt; Rolf Treusch; Christian Peltz; Stephan Bartling; Thomas Fennel; Karl-Heinz Meiwes-Broer; Thomas Möller Journal: Nat Commun Date: 2015-02-04 Impact factor: 14.919
Authors: Anna Munke; Jakob Andreasson; Andrew Aquila; Salah Awel; Kartik Ayyer; Anton Barty; Richard J Bean; Peter Berntsen; Johan Bielecki; Sébastien Boutet; Maximilian Bucher; Henry N Chapman; Benedikt J Daurer; Hasan DeMirci; Veit Elser; Petra Fromme; Janos Hajdu; Max F Hantke; Akifumi Higashiura; Brenda G Hogue; Ahmad Hosseinizadeh; Yoonhee Kim; Richard A Kirian; Hemanth K N Reddy; Ti-Yen Lan; Daniel S D Larsson; Haiguang Liu; N Duane Loh; Filipe R N C Maia; Adrian P Mancuso; Kerstin Mühlig; Atsushi Nakagawa; Daewoong Nam; Garrett Nelson; Carl Nettelblad; Kenta Okamoto; Abbas Ourmazd; Max Rose; Gijs van der Schot; Peter Schwander; M Marvin Seibert; Jonas A Sellberg; Raymond G Sierra; Changyong Song; Martin Svenda; Nicusor Timneanu; Ivan A Vartanyants; Daniel Westphal; Max O Wiedorn; Garth J Williams; Paulraj Lourdu Xavier; Chun Hong Yoon; James Zook Journal: Sci Data Date: 2016-08-01 Impact factor: 6.444
Authors: Hemanth K N Reddy; Chun Hong Yoon; Andrew Aquila; Salah Awel; Kartik Ayyer; Anton Barty; Peter Berntsen; Johan Bielecki; Sergey Bobkov; Maximilian Bucher; Gabriella A Carini; Sebastian Carron; Henry Chapman; Benedikt Daurer; Hasan DeMirci; Tomas Ekeberg; Petra Fromme; Janos Hajdu; Max Felix Hanke; Philip Hart; Brenda G Hogue; Ahmad Hosseinizadeh; Yoonhee Kim; Richard A Kirian; Ruslan P Kurta; Daniel S D Larsson; N Duane Loh; Filipe R N C Maia; Adrian P Mancuso; Kerstin Mühlig; Anna Munke; Daewoong Nam; Carl Nettelblad; Abbas Ourmazd; Max Rose; Peter Schwander; Marvin Seibert; Jonas A Sellberg; Changyong Song; John C H Spence; Martin Svenda; Gijs Van der Schot; Ivan A Vartanyants; Garth J Williams; P Lourdu Xavier Journal: Sci Data Date: 2017-06-27 Impact factor: 6.444
Authors: J Thayer; D Damiani; C Ford; M Dubrovin; I Gaponenko; C P O'Grady; W Kroeger; J Pines; T J Lane; A Salnikov; D Schneider; T Tookey; M Weaver; C H Yoon; A Perazzo Journal: Adv Struct Chem Imaging Date: 2017-01-14
Authors: Benedikt J Daurer; Hari Krishnan; Talita Perciano; Filipe R N C Maia; David A Shapiro; James A Sethian; Stefano Marchesini Journal: Adv Struct Chem Imaging Date: 2017-01-31
Authors: Eduardo R Cruz-Chú; Ahmad Hosseinizadeh; Ghoncheh Mashayekhi; Russell Fung; Abbas Ourmazd; Peter Schwander Journal: Struct Dyn Date: 2021-02-18 Impact factor: 2.920
Authors: Benedikt J Daurer; Kenta Okamoto; Johan Bielecki; Filipe R N C Maia; Kerstin Mühlig; M Marvin Seibert; Max F Hantke; Carl Nettelblad; W Henry Benner; Martin Svenda; Nicuşor Tîmneanu; Tomas Ekeberg; N Duane Loh; Alberto Pietrini; Alessandro Zani; Asawari D Rath; Daniel Westphal; Richard A Kirian; Salah Awel; Max O Wiedorn; Gijs van der Schot; Gunilla H Carlsson; Dirk Hasse; Jonas A Sellberg; Anton Barty; Jakob Andreasson; Sébastien Boutet; Garth Williams; Jason Koglin; Inger Andersson; Janos Hajdu; Daniel S D Larsson Journal: IUCrJ Date: 2017-04-07 Impact factor: 4.769
Authors: Ida V Lundholm; Jonas A Sellberg; Tomas Ekeberg; Max F Hantke; Kenta Okamoto; Gijs van der Schot; Jakob Andreasson; Anton Barty; Johan Bielecki; Petr Bruza; Max Bucher; Sebastian Carron; Benedikt J Daurer; Ken Ferguson; Dirk Hasse; Jacek Krzywinski; Daniel S D Larsson; Andrew Morgan; Kerstin Mühlig; Maria Müller; Carl Nettelblad; Alberto Pietrini; Hemanth K N Reddy; Daniela Rupp; Mario Sauppe; Marvin Seibert; Martin Svenda; Michelle Swiggers; Nicusor Timneanu; Anatoli Ulmer; Daniel Westphal; Garth Williams; Alessandro Zani; Gyula Faigel; Henry N Chapman; Thomas Möller; Christoph Bostedt; Janos Hajdu; Tais Gorkhover; Filipe R N C Maia Journal: IUCrJ Date: 2018-09-01 Impact factor: 4.769
Authors: Johan Bielecki; Max F Hantke; Benedikt J Daurer; Hemanth K N Reddy; Dirk Hasse; Daniel S D Larsson; Laura H Gunn; Martin Svenda; Anna Munke; Jonas A Sellberg; Leonie Flueckiger; Alberto Pietrini; Carl Nettelblad; Ida Lundholm; Gunilla Carlsson; Kenta Okamoto; Nicusor Timneanu; Daniel Westphal; Olena Kulyk; Akifumi Higashiura; Gijs van der Schot; Ne-Te Duane Loh; Taylor E Wysong; Christoph Bostedt; Tais Gorkhover; Bianca Iwan; M Marvin Seibert; Timur Osipov; Peter Walter; Philip Hart; Maximilian Bucher; Anatoli Ulmer; Dipanwita Ray; Gabriella Carini; Ken R Ferguson; Inger Andersson; Jakob Andreasson; Janos Hajdu; Filipe R N C Maia Journal: Sci Adv Date: 2019-05-03 Impact factor: 14.136