COMBIgor: data analysis package for combinatorial materials science

Combinatorial experiments involve synthesis of sample libraries with lateral composition gradients requiring spatially-resolved characterization of structure and properties. Due to maturation of combinatorial methods and their successful application in many fields, the modern combinatorial laboratory produces diverse and complex data sets requiring advanced analysis and visualization techniques. In order to utilize these large data sets to uncover new knowledge, the combinatorial scientist must engage in data science. For data science tasks, most laboratories adopt common-purpose data management and visualization software. However, processing and cross-correlating data from various measurement tools is no small task for such generic programs. Here we describe COMBIgor, a purpose-built open-source software package written in the commercial Igor Pro environment, designed to offer a systematic approach to loading, storing, processing, and visualizing combinatorial data sets. It includes (1) methods for loading and storing data sets from combinatorial libraries, (2) routines for streamlined data processing, and (3) data analysis and visualization features to construct figures. Most importantly, COMBIgor is designed to be easily customized by a laboratory, group, or individual in order to integrate additional instruments and data-processing algorithms. Utilizing the capabilities of COMBIgor can significantly reduce the burden of data management on the combinatorial scientist.


Introduction
High-throughput experimental (HTE) research, which consists of synthesis and characterization of specimens with spatially varied processing parameters, has been established as an effective strategy for exploring and optimizing materials. These methods, also known as combinatorial science, have proven useful for discovery and optimization of materials for diverse applications, including catalytic materials, 1 electronic and functional ionic materials, 2 polymer coating materials, 3 sensing materials, 4 and biomaterials. 5 With the success of combinatorial science, a diverse set of high-throughput synthesis and characterization in-struments has been developed and demonstrated, 6 facilitating rapid generation and analysis of HTE materials data.
The ability to input and analyze data is typically the rate-limiting process in HTE methods. 7 The HTE researcher must process, analyze, and correlate a large amount of data in order to understand the variations within each combinatorial library, then understand how trends correlate between libraries. This process is inefficient, as the experiments are put on hold so that scientists can wade through the data before continuing. Programmatic task handling ensures that effort is not unnecessarily wasted on routine tasks, such as loading, sorting, labeling, and tracking data. Accessible data and flexible analysis algorithms are needed for processing and analyzing various types of data and effectively interpreting results.
There have been several combinatorial software packages presented in literature. One example is CombiVIEW, 8 a MatLab package for the analysis and visualization of x-ray diffraction patterns generated from combinatorial approaches. Another package was written to improve HTE data organization and sharing for sensor materials. 9 Developments like these have significant depth. They handle one type of data or perform one specific task exceptionally well. The lacking element is breadth, the ability to handle many different types of HTE data in many different ways, so that the data can be more efficiently stored, compared, shared, and presented. Thus, a package is needed that has sufficient breadth, while being flexible enough to enable the user to develop depth for their own processes and data types.
Here we present COMBIgor -a data analysis package for Igor Pro intended to aid in the management, processing, and cross-correlation of multi-dimensional data sets collected by mapping combinatorial libraries on spatially-resolved measurement instruments. The core functionality was intentionally designed to enable flexibility in data types and experimental setup, while enabling the user to expand usability by adding new measurement instruments and new data analysis algorithms. Below, we present an overview of the functionality and architecture of the open-source COMBIgor package. This package can reduce the burden of data management of combinatorial experiments, thus encouraging its adoption by combinatorial researchers, groups, and institutions.

COMBIgor History
Development of this software package started in the early 2000s by materials scientists at the National Renewable Energy Laboratory (NREL) in Golden, Colorado alongside their emerging thin-film HTE methodology. From 2000 to 2010, several software add-ons (referred to as "procedures" in Igor Pro) were developed in order to load, store, and display combinatorial data from individual instruments, such as a Bruker D8 Discover x-ray diffractometer (XRD) and MaXXi 5-pin x-ray fluorescence (XRF) spectrometer. In 2010, this collection of procedures was extended to include custom optical and electronic property mapping instruments. 10 Most importantly, these different procedures were integrated into a package allowing processing and cross-correlation of different types of data, as cited in two published manuscripts. 11,12 Since that time, the package has continued to grow as new and continuing users have added new instruments and new functionality, and has since been used to process data and generate figures for a large number of publications. Here, we intentionally cite the publications in which this package was mentioned, but not cited, so that future readers of these publications can find the present manuscript and better understand the software package used. 10, Around 2016, the authors started considering improved methods of data management, usability, and visualization, as well as the potential for the package to be extended by outside users and developers. In the two years that followed, the collection of Igor procedures was restructured and optimized into an interactive and flexible Igor package for loading, storing, and processing combinatorial data, and was given the name COMBIgor (COM-bee-gore).
This newer version has already been used for data analysis and preparation of figures in several recent manuscripts. [49][50][51][52][53][54] Based on this history, COMBIgor brings the experience of almost 20 years of software development at NREL for handling and processing combinatorial data. Additionally, it has been integrated with public data repositories to enable cutting-edge data transparency and openness. 55

COMBIgor Terminology
The terminology utilized within the COMBIgor package is meant to reflect the common descriptors used in HTE literature. A list of the most important terms is shown in Table 1.
For example, it is important to understand the concept of a library in the COMBIgor package. A library is a specimen with spatially-varying processing conditions, such as substrate temperature or plasma flux. A collection of libraries constitutes a project. Libraries are measured on a mapping grid -a discretized, spatial arrangement of points from which data are collected on a set of instruments. A single point of the mapping grid, which corresponds to a specific location on a library, is called a sample. This language is used extensively in COMBIgor for referencing HTE specimens and their corresponding data.
One of the most important conceptual advancements of COMBIgor is that it categorizes the data based on dimension, scope, and type, regardless of its source, allowing for a greater level of abstraction and code reuse. Data scope can include a single sample or all samples on a library; data can be numeric or textual; and the numeric data dimension can be scalar, vector, or matrix. For example, x-ray diffraction patterns and optical absorption spectra are both numeric vector data types comprising one-dimensional data collected for each sample on the library. Other important features within COMBIgor are add-ons, which are categorized as either instruments or plugins. An instrument is a source of synthesis or characterization data from combinatorial experiments, such as XRD or XRF. A plugin is a specific set of operations that process data within COMBIgor. Examples include background removal or applying mathematical operators.

Distribution and Use
At time of publication, the COMBIgor package is housed and maintained through a pub- COMBIgor expands after publication of this manuscript.
After installation (described in section 3.1), the COMBIgor package exists within the Igor Pro environment and can be activated at any time through the native Igor Pro "Data" menu.
Once activated by the user, the COMBIgor procedure files are mounted into the experiment, the user menu is created, and the add-ons selector is displayed. After the desired add-ons are selected and the project (with its mapping grid) is defined, the consequent workflow varies depending on the needs of the user. Generally, it involves repeatedly loading, processing, plotting, and exporting various types of HTE data. A snapshot of COMBIgor package elements within the Igor Pro environment can be seen in Figure 1. More details on the COMBIgor workflow are provided below.

Workflow
The generalized workflow for using COMBIgor is presented in Figure 2. After COMBIgor package activation, the first six steps ("Setting Up COMBIgor" in Figure 2) define the project space, activate the desired add-ons, and initialize the parameters necessary to use them.
A project is defined by a common combinatorial mapping grid for all libraries contained within that project. The user must then define loading parameters related to the individual instruments, such as data type names, location of data in the files, and processing-related variables. Unlike the mapping grid, these can be redefined during the course of the project lifetime, although these steps are only required when starting a new project. Subsequently, data are managed through a project, library, and data type hierarchy. The last five steps ("Analysis of combinatorial data", Figure 2) are executed repeatedly as the scientist loads and analyzes experimental data. At this stage, the user loads combinatorial data collected from instruments using the standard mapping grid into the user-defined library folders. Once data are loaded into the COMBIgor project, they can be analyzed and visualized using instrument-specific routines, plugins, or native Igor Pro routines. The num-ber of libraries loaded, instruments utilized, and processing steps will vary depending on the project and the user, as reflected in the loops of Figure 2. During this process, COMBIgor data loading and processing events are logged into a searchable log book. At any point, the raw data can be exported for distribution into tab-delimited text files for loading into additional COMBIgor experiments or other programs, as needed. This exporting capability is particularly important for multi-institutional projects, such as the High-Throughput Experimental Materials Collaboratory. 57 All figures generated in COMBIgor can be further modified by the user and exported for use in presentations and manuscripts.

Functionality
To demonstrate the functionality of COMBIgor, data from combinatorial Al 1−x Cr x N thin film sample libraries are used in the following sections. This material system has been recently investigated for structural evolution, electrical, and optical properties. 49 The Al 1−x Cr x N heterostructural alloys were deposited from elemental Al and Cr targets in the presence of nitrogen via radio frequency co-sputtering. The compositions of these combinatorial libraries were determined by x-ray fluorescence (XRF), structures by x-ray diffraction (XRD), thicknesses by step-edge profilometry, optical properties by optical transmission/reflection spectroscopy, and electrical conductivity by 4-point probe sheet resistance measurements. More details regarding the deposition or characterization instruments can be found elsewhere. 50

Installation and Preferences
The installation process for the COMBIgor package is designed to be as simple as possible.
An installer experiment file (COMBIgor_installer.pxp) is included in the package folder.
When opened, this file will install the package contents and any necessary Igor Pro extensions.
The user can install the package with a single click from the COMBIgor menu. The installer will preserve a copy of any COMBIgor package files that predate the current installation to protect any modifications a user has made to a previous package version. After installation, the user is directed to COMBIgor activation in the data menu, as well as the COMBIgor help menu and the included tutorial. In addition, we recommend that before using COMBIgor, the users familiarize themselves with the built-in Igor Pro functionality by taking the guided tour from the Igor Pro help menu.
The COMBIgor package has a built-in user preference system. The user can select a set of COMBIgor preferences, including setting a default import or export folder location, controlling the "kill" behavior of windows generated by Igor (e.g. figures, tables), and generating example programmatic call lines for operations performed by COMBIgor in the command history. The package can also generate standard plots upon loading data from instruments and automatically adjust font styling of control panels and plotted figures.

Instruments and plugins
The needs of HTE vary greatly between projects, users, and laboratories. If a single package contained all possible data loading, processing, and visualization functionality applicable to HTE, the package would be too complex to be efficiently navigated. For this reason, the COMBIgor package allows each user to select only the optional capabilities (add-ons) that they plan to use. In addition to keeping the package streamlined, instrument and plugin add-ons provide a mechanism for individual user expansion and laboratory-wide instrument collections.
The lists of the base instruments and plugins included at the time of publication of this manuscript are described in Table 2 and

Data Loading and Processing
Experimental data comes in many different file formats: some are stored as a simple text file, some are contained in proprietary file formats, and most are something in between. Taking advantage of the data-handling features of Igor Pro, COMBIgor is able to import a wide variety of data formats. Data loading involves programmatically opening native instrument file types, transferring the data for each sample into an Igor Pro wave that matches the Masks, fits, and subtracts backgrounds from vector data, such as x-ray diffraction. DiffractionRef Imports, stores, and plots powder diffraction references exported from common diffraction programs and databases. VectorPeakFit Executes constrained peak fits on a library of vector data and extracts fit information.

DataSifter Plugin
Applies a conditional test and, upon true, performs some resulting action across every sample on a library. MathPlugin Performs simple mathematical operations to data across every sample on a library. Piemaps Plots library maps on which each sample marker is a pie chart of multiple scalar data types. TernaryPlotter Generates ternary plots with marker color and size determined by scalar or vector data. SolarCell Extracts solar cell performance parameters from current vs. voltage data.
dimensionality of the incoming data, and storing those waves in the appropriate project and library folders. Loading steps include assigning identifying information, such as project, library, sample index, data type, and data dimension, to the incoming data; creating the data storage in the correct location within the COMBIgor experiment; and populating that storage with the appropriate data. The load event is documented in the project log book to retain a record of the original data source.
In COMBIgor, data are typically loaded through instrument add-ons ( Figure 3). Additionally, data can be imported from other COMBIgor files as COMBIgor text files. Finally, COMBIgor has the ability to fetch data directly from online databases through application programming interfaces (APIs) and store it locally for comparison to other data types. This feature is demonstrated by loading data from the High Throughput Experimental Materials  Data processing is integral to scientific experimentation. For the HTE researcher, the diversity of processing tasks combined with the magnitude of collected data can create a daunting workload. For this reason, COMBIgor data is extremely easy to batch-process, and can be processed in various modes. There are four ways in which COMBIgor data can be processed: • Upon loading by an individual instrument procedure This is the simplest method, and is utilized for standard measurement processing routines. Example: Feature height extraction from profilometry scans of thin film samples.

• By COMBIgor plugins
This is the most powerful method for HTE with high density mapping grids, since the same process can be systematically applied to every sample on a library. Example: Peak fitting to extract the FWHM of an x-ray diffraction peak. See Figure 3 for more detail. •

Data Visualization
Once data are loaded, the COMBIgor package can produce publication-quality graphics.
One of the strengths of COMBIgor is its ability to plot data types of different dimensionality on the same plot. There are four modes of graphics generation: • Upon instrument-specific loading If the user selects the option in package preferences, COMBIgor can automatically generate formatted plots as data are loaded through the instrument procedures. Example: Programmatic generation of a normalized diffraction intensity heat map comparing all samples upon loading X-ray diffraction data (see Figure 4, part A).

• Using the COMBIgor Display panel
The COMBIgor display panel is capable of producing two-dimensional figures with up to four data type-dependent axes: horizontal axis, vertical axis, marker color, and marker size. Any data dimensionality can be handled by each of these axes. Example: The Display panel can be used to generate a map of material resistivity for an entire library, on which the marker size for each sample is determined by film thickness (see Figure 5, part A).

• Utilizing native Igor Pro functionality
Data organized within a COMBIgor project can be utilized directly by Igor Pro graphics functionality to produce fully customized, publication-quality graphics. Example: Adding a visible spectrum color indicator to the axis of a COMBIgor generated 2D absorption coefficient plot greatly increases the visual appeal of this graphic (see Figure 5, part B.)

• Visualization plugins
Additional plugins extend COMBIgor functionality to specialized plot types. Plugins can be created and added to COMBIgor to generate any graphic type Igor Pro can produce. Example: Using the TernaryPlotter plugin to analyze the distribution of peak area as determined by the VectorPeakFitting plugin (see Figure 4, part B).
The magnitude of data generated by HTE can lead to comparison graphics that contain thousands of data points. Graphics produced by the display features of COMBIgor are connected to a display wave specifically created for this visualization and distinct from the original data waves. The source information of the wave data (e.g. library name, data type, data dimension, sample range, etc.) can be accessed and easily saved. However, this also means that the plot has to be remade when the data are updated or reloaded (i.e. the plot is not updated automatically). When plots are created, they can be saved to the export folder and recreation macros can be generated. Closing the plot will trigger deletion of the attached display wave, thus minimizing data duplicity.

Data Access and Porting
COMBIgor data processing and storage is designed to be transparent and easy to access so that the user understands the process and can modify the approach at will. To this end, all COMBIgor data are stored within the folders of the Igor Pro experiment, as shown in  When selected from the project menu, the data are presented in the Igor Pro data browser.
Combinatorial HTE is often collaborative. Results are published in peer-reviewed journals that encourage submission of raw data used in the publication, either as supporting information or in a separate data repository. Journals that publish mainly data, such as Data in Brief and Scientific Data, are also becoming more common. 63,64 For all of these reasons, data stored in COMBIgor must be accessible beyond Igor Pro in a simple file format.
COMBIgor can automatically save any locally-stored data onto the hard drive in a simple tab-delimited text file format with a folder structure that matches the project. As mentioned above, these exported data can also be imported into a different COMBIgor project, while maintaining the library names and sample numbers.

Documentation
A major strength of the COMBIgor package is the breadth and depth of documentation, which is designed to be easily accessed at all stages of use and development. The documentation is compiled using the Igor Pro help file type, as well as in-line procedure comments.
The documentation exists at seven levels: • A beginner's tutorial is included in the help menu and presented upon installation for new COMBIgor users to learn the basics of instruments, plugins, and display features.
The package includes example data for each of the instruments, which are used over the course of the tutorial. While example data are specific to NREL, this is intended to build a conceptual understanding of the work flow.
• General information about the mapping grid, data type dimensions, plugin operations, and instrument details are included in a general help file which gives useful details about COMBIgor and can be accessed through the COMBIgor menu. 2. The Instruments folder contains a single procedure for each instrument. Each of these procedures contains the unique functions needed to load and process data from that instrument.
3. The Plugins folder contains a single procedure file for each plugin, which builds its panel interface and performs the data manipulation processes. Tasks performed by the package elements can be categorized into three categories: core functionality, data handling, and add-ons. For each of these three categories, the package elements that perform or support the sub-tasks are illustrated in Figure 6 and described in more detail below.

Core functionality
COMBIgor core functionality includes installing, mounting, initializing, using, and navigating the package. Installation of the package involves placement of two aliases into the Igor Pro user folders and installation of built in XOPs. These steps can be done manually or by the COMBIgor_installer.pxp experiment. After installation, the user can activate COMBIgor from the data menu, enabling the remaining core functionality. These functions handle the storage and retrieval of global variables necessary for the package as well as for each individual project. Additional global variables can be added by future developers. The core functionality builds and enables the Projects menu featured in Figure 1, which enables the user to navigate the data stored in COMBIgor, create new projects, libraries, and data types, and import and export data from the project.

Data handling
Data handling tasks within COMBIgor are the most robust, and therefore complex, functions.
These functions create data storage waves, move data in and out of these waves, and transfer data in and out of the Igor Pro experiment. In addition to data management, these functions perform the vital roles of displaying and processing data. Because directly inspecting data in an array with more than two dimensions is difficult, data are typically parsed and stored in one-or two-dimensional waves. Each data type is a separate wave and is categorized by the project, library, and data dimensionality. The storage waves are of the Igor binary and Igor text file types, which are compressed and stored in an Igor packed experiment file. This results in an efficient use of memory when compared to the native instrument files provided as example data. The most essential data used for the example experiment occupy 80% less memory when stored in an Igor Pro packed experiment and 50% less memory when stored as COMBIgor text data files.

Add-on packages
Add-on package elements are the most diverse functions due to the wide variety of tasks they perform. By default, COMBIgor has the functions needed to initialize and run any add-on included in the Plugins and Instruments folders. Each plugin and instrument listed in Table 3 and Table 2 has documentation for users; however, programmer documentation does not exist for these add-ons, as they are unlikely to be modified by individual users (with the exception of the ExamplePlugin, ExampleVector, and ExampleScalar procedure files).

Object-oriented programming
COMBIgor was not written with an obvious object-oriented programming (OOP) architecture in mind. However, its hierarchical data structure can be explained in terms relevant to