Performing Quantitative Imaging Acquisition, Analysis and Visualization Using the Best of Open Source and Commercial Software Solutions.

As the tools for developing software become more accessible, scientists are increasingly applying their ingenuity to innovate not only sample preparation and instrumentation, but also to customize the software that is responsible for data acquisition, analysis and visualization. The ultimate control that a developer has when synthesizing code can lead to a precisely integrated solution that one can distribute easily and at no cost, to either the developer or end-user, online using resources such as GitHub [1]. Usually, a developer would like to achieve a level of abstraction between the solution and the actual hardware utilized by the researchers. For example, when authoring software to acquire data, it often would be desirable to abstract the image acquisition device so that the solution is not device or driver specific. If not, the end-users of the solution would be bound to use a configuration identical to that of the developer. For that reason and others, the best practice for developers is to use an open source standard as the baseline code from which to develop a solution. For example, one may use Micro-Manager for building an image acquisition solution [2] or ImageJ for building an image analysis function [3]. While the developer needs to conform to the programming conventions of the open source solution, the advantage of developing a solution using an open source standard is that the developer has a jump start on the process of making the solution. The authors of open source standards have deployed architectures that apply programming best-practices that lead to more manageable code. Also, the laboratory that develops a solution may choose to distribute the result of its development effort freely as a plugin that integrates with the open source software. The research community may then download and use the entire solution at will and at no cost. A particular challenge in this model for sharing developments is how to maintain a good set of documentation for the software and how to provide adequate training to end-users. Too often the strengths of an innovative software developer do not align well with the strengths necessary for providing clear and consistent documentation or training. Also, sustaining the project as an active development endeavor is often difficult as the primary developers move to work on other innovative projects. Industry provides mature development environments that developers may use as a resource for prototyping and developing solutions using a library of pre-built resources that are well documented and supported by experts. For example, one may use LabVIEW for building and image acquisition solution [4] or MATLAB for building and image analysis tool [5]. The advantage of using these mature platforms is that the developer can concentrate on providing the unique intellectual contribution to the field without having to reinvent portions of code that already exist in a mature form. These development platforms provide rich user interface options that make the end product easier to learn and use. The disadvantages are the costs associated with buying the software and maintaining the software licenses annually. Also, there are often technical and license restrictions that govern how the developer may distribute the final product, which in many cases leads to the end user needing to purchase a license for the development platform in order to use the solution. Industry also provides countless feature-rich solutions that do not provide much flexibility for the end-user to innovate. These solutions provide value to the community as they offer a stable experience that is ubiquitous across a product line and over time as the product is actively developed to take advantage of features in new operating systems or to use new hardware. The advantage of this approach is that the commercial partner has taken the responsibility of assuring, for example, the proper integration of the software with the hardware. A potential hazard with using this approach is having to use proprietary file formats or not being able to share with others configuration files for software settings. There are practical considerations for how a laboratory most efficiently achieves its goals with reasonable value. An emerging criterion for evaluating software is how a lab may document its methods for publication and distribution to others in an electronic fashion. The need to be able to communicate methods and findings concisely is becoming more important as data sharing becomes a mandate in academic research.