Light Analysis on the NetBeans Platform
I'm Aaron Gage, Software Engineering Manager at Ocean Optics, a photonics technology firm. I create standard procedures and policies to govern how software development will be done, provide input on software architectures, and do a fair amount of coding in C, C++, Java, and occasionally Ruby on a variety of platforms.
The basic background of our work is that SpectraSuite is a data acquisition, processing, and visualization application. Ocean Optics builds a number of different types of photonic spectrometers, meaning devices that measure light from the ultraviolet (down to about 150nm) and up into the near-infrared (about 2500nm, with new products pushing out even further). All matter in the universe interacts with light, and so by measuring light one can learn all sorts of interesting things about just about anything. This includes reflection off of surfaces, transmission through materials, and absorbance of light by materials. Others want to measure the properties of light sources directly.
The above screenshot shows a lot of things at once. In the middle is a transmission spectrum and the colors represented by each wavelength have been filled in under the graph to aid the viewer. This is being used to compute the color of the light that is transmitted through the filter; color values are shown to the upper right, and the lower right shows the color on a chromaticity diagram (where the dark circle is around the sample color, the white circle is around the theoretical illuminant, and the lines through them show the dominant wavelength and purity; the heavy arc in the center of the diagram is the continuum of blackbody emitters generated as the color temperature is increased, which is useful for reference). The lower left shows the value of transmission at one wavelength over time, where the filter was moved in and out to change the transmission.
As you can imagine, there is a tremendous range of applications for these products, so we just try to give our customers flexible tools so they can take whatever measurement it is that interests them.
We went with the NetBeans Platform because we wanted to use Java for its cross-platform portability and because the NetBeans Platform would give us the framework for window docking, menus, toolbars, and automatic updates. We don't necessarily use all of the NetBeans Platform capabilities, since most of our TopComponents are data displays rather than editors, but as you can see, from the screenshots below, we have managed to get a lot out of it.
The above screenshot shows a sample spectrum (of a filter) from a single spectrometer being interpreted in four different ways. The top-left is the raw output from the detector. Relative irradiance is in the upper right (essentially a properly scaled version of the graph in the upper left, which due to optical inefficiency has some errors in its shape). The lower left shows a transmission measurement (indicating the percentage of light that got through relative to when the filter is removed), and the lower right shows absorbance (note that where transmission is low, the absorbance is high). This also demonstrates docking of four windows to clearly show a lot of information.
The next two screenshots show different parts of a wizard that was created using the NetBeans Wizard API. This is an iterator based wizard, which has a number of different paths depending on what information is provided by the user.
Finally, above is a screenshot showing a false color image of the detector of one of our spectrometers while being illuminated by a mercury-argon lamp. The lamp produces a number of emission lines (an emission line refers to light that is emitted at over an extremely narrow wavelength range). These show up on the detector as intense bands, to which the screenshot adds some color for improved contrast.