CytoSpec - an APPLICATION FOR HYPERSPECTRAL IMAGING



 

File Pulldown Menu

Load
Save
Save Matlab
Import ASCII
Import Binary
Export
Delete
Clear
Plot
Customize
Batch Multiple Files
Exit

Spectral Preprocessing

Calculation of Derivative Spectra
Normalization (Vector, Offset)
Cut
Interpolate
Smooth
ABS <--> TR Conversion
Subtraction
Dispersion Correction
Quality Test
Baseline Correction
Water Vapor Compensation
Noise Correction
Cosmic Spike Removal
Batch Preprocessing

Spatial Preprocessing

Crop
Interpolate/Binning
Filter Images
3D-FSD

Univariate Imaging

Chemical Imaging
Chemical Movie
Frequency Imaging

Multivariate Imaging

HCA Imaging
KMC Imaging
FCM Cluster Imaging
PCA Imaging
VCA Imaging
n-findr Imaging
ANN Imaging
Synthon Imaging
Imaging with Distance Values

Tools

Display Spectra
Set Display Limits
Grid On/Off
Set Colors
Capture
Export Maps
Map Statistics
Display Large Maps
Define ROI
Display Colorbar
Swap Data Blocks
Rotate
Flip

File Information

Show History
Show Instrument Parameters
Show measurement Parameters
Show Additional Parameters
Edit Parameters
About
Using the Help Function

PULL DOWN MENU "FILE"

 
File Menu

Load and Save Data

 
    The workspace, i.e. the spectral hypercube containing the original spectral data as well as all processed data (up to 4 different 3D data blocks) and the instrument-, data acquisition-, and additional data parameters can be stored/loaded in form of one single file. This file can be loaded/stored by choosing the 'load' (or 'save') option of the 'file' pull down menu. A standard Windows dialog box allows you to browse the directory structure and to select an appropriate data file name.
     
    To save disk space, data are stored as single precision values (float32) while all calculations are carried out with floating 64 bit point numbers.
     
    Please note: The default file name extension of binary CytoSpec workspace files is '*.cyt'. Files ending with '.dis', '.cls', or '.pca' contain results of HCA, or PCA and have a different format than standard CytoSpec workspace files. These files cannot be loaded by the 'load' function of the 'file' pull down menu. Please note also that CytoSpec's (ver. 1.05.09 and older) older data files ('.mat') or obsolete. To load these files use the 'import' option.
     
 
save a binary file
 
    Example: saving the workspace of a focal plane array detector experiment.
 
 

Save Matlab

 
      This option permits to save the spectral hypercube in a data format that is compatible with Matlab (The Mathworks Inc., Natick, MA).
       
      Save Data:
       
      To store the data file select 'Save Matlab' from the 'File' pulldown menu. A standard Windows file dialog box will appear. Use the dialog box to find a logical location on your disk and enter a filename (e.g. 'fname') with '.mat' as the file extension.
       
      Load data in Matlab:
       
      To open the Matlab file 'fname' cd to the directory where this file resides and type 'load fname' in the Matlab shell. This will cause Matlab to open the file. As a result you will get access to the variable 'C' - the spectral hypercube, a 4D array of double precision or float64 values, and a structure array 'Minfo' containing strings with the file information data.
       
      The array 'C' will have the following dimensions: xdim x ydim x zdim x data block number (1: original data, 2: preprocessed data, 3: derivative data, 4: (de)convolution data, for details see also the chapter Internal Data Organization. The second variable 'Minfo' is a structure array of the following fields:
       
      • Minfo.Readme: The readme information

      •  
      • Minfo.Ver: Version information of the multispectral data file

      •  
      • Minfo.File: A structure array of three letter code fields such as 'Minfo.File.INS', 'Minfo.File.MAN', Minfo.File.'SRC', etc.). These strings contain important data acquisition parameters and are required for further analyses. The meanings of these parameters are described in the chapter Edit Parameters.

      •  
      • Minfo.Org: A string describing the manipulations performed with the data block of original spectra

      •  
      • Minfo.Pre: A string describing the manipulations performed with the data block of preprocessed spectra

      •  
      • Minfo.Der: A string describing the manipulations performed with the data block of derivative spectra

      •  
      • Minfo.Dec: A string describing the manipulations performed with the data block of (de)convolution spectra

      •  

Load ASCII Data files

 

Import Single Column ASCII Data

 
    Data format: Single column ASCII data contain one column of absorbance/transmittance/Raman intensity data (see example below) from high to low wavenumbers, or frequencies. The user is prompted to enter the high (upper wvn limit) and low (lower wvn limit) value of the IR spectra (in wavenumbers). Upon loading the data, the program determines the wavenumber step increment and the number of data points from the data file.
     
    Single column ASCII data - data structure:
     
0.0061677871 ---> absorbance value at the highest wavenumber
0.0065018409
0.0068493136
0.0071548000
0.0073572793
. . . . . . . .
. . . . . . . .
. . . . . . . .
0.0058157393
0.0051814606
0.0045940578
0.0041149510
0.0037795175 ---> absorbance value at the lowest wavenumber
importing single column ASCII files

 
    xdim & ydim: the dimensions of the map to be imported (in pixel). In the example files (see directory CytoSpecRootDir\Testdata\ASCII\y\) these are xdim x xydim = 11 x 16 (176 spectra). In order to import all ASCII spectra, the files must reside in one single directory. Please make sure that all data files contain the same number of lines.
     
    Wavenumber values: Please indicate the highest (upper wvn limit) and the lowest (lower wvn limit) wavenumber values. Please note that CytoSpec assumes a constant (equidistant) wavenumber step.
     
    Increment extension: The checkbox marked 'increment extension' determines the complete file names of the files to be read. You can either import single column ASCII data incremented by file extension (e.g. spec.0, spec.1 ... spec.999) or you can import files in which a numeric part of the filename is incremented (for example spec00001.0, spec0002.0, spec0003.0, ..... , spec9999.0). For the former option, check the 'increment extension' option box. Up to 1000 spectra can be loaded using this method. If the file number is encoded by the filename, it is possible to load maximally 10.000 spectra. The fields xdim and ydim determine the number of x- and y- data points of the mapping experiment ((x,y) dimensions of the map). They determine which of the consecutively read spectra defines a new row in the map.
     
    After pressing the 'load' button, a standard file window will appear, in which you may browse the directory structure of your computer or network connections. Select the first ASCII data file of the map. A progress indicator shows you then the progress of loading the data files. If problems are encountered during loading of single column ASCII files, try first to import the data of the CytoSpecRootDir/Testdata/ASCII/y/.. directory of the program CD before contacting CytoSpec.
     

 

Import Double Column ASCII Data

 
    Data format: Double column ASCII data contain the wavenumber/frequency values in the first column and the absorbance/transmittance/Raman intensity values in the second column (see example below, in which data are comma delimited.
     
    Double column ASCII data - data structure:
     
    3999.91862793,   0.00158696
    3997.99002686,   0.00158500
    3996.06142578,   0.00167975
    3994.13282471,   0.00180794
    3992.20422363,   0.00191176
    3990.27562256,   0.00198500
    3988.34702148,   0.00204885
    . . . . . . . . . . . . . . . . . .
    . . . . . . . . . . . . . . . . . .
    . . . . . . . . . . . . . . . . . .
    904.51390381,   0.00141472
    902.58530273,   0.00132679
    900.65670166,   0.00110762
importing double column ASCII files

 
    xdim & ydim: the dimensions of the map to be imported (in pixel). In the example files (see directory CytoSpecRoot\testdata\ASCII\xy\) these are xdim x xydim = 11 x 16 (176 spectra). In order to import all ASCII spectra, the files must reside in one single directory. Please make sure that all data files contain the same number of lines.
     
    Wavenumber values: These options are not available in the double column ASCII import routine as these data are directly obtained from the spectral data files. Please note that CytoSpec assumes a constant (equidistant) wavenumber step.
     
    Delimiter format: You can choose between the following delimiters: comma, space, tab, and semicolon.
     
    Lines to skip: Some data formats may contain header lines (text), which cannot be loaded by the CytoSpec program. To avoid errors upon loading please indicate the number of lines, which should be skipped by the ASCII import routine.
     
    The double column ASCII import function expects files to be incremented by the file extension (e.g. spec.0, spec.1 ... spec.999). This permits to load 1000 double column ASCII spectra at the maximum.
     
    After pressing the 'load' button, a standard file window will appear, in which you may browse the directory structure of your computer or network connections. Select the first ASCII data file of the map and press the 'load' button. A progress indicator shows you then the progress of loading the data files. If problems are encountered during loading of double column ASCII files, try first to import the data of the CytoSpecRootDir/Testdata/ASCII/xy/.. directory of the program CD before contacting CytoSpec. Once the ASCII data are loaded you can Store them in a binary file format.
     
 

Import yxz ASCII Data (1)

 
    This option permits to load ASCII data of a Raman mapping experiment written in one single multifile.
    The example below shows the content of a xyz-ASCII file (4 x 4 spectra)
     
      first column: x-coordinates
      second column: y-coordinates
      first line: wavenumber values of the spectra
      second line: spectrum at the coordinates x(1) y(1)
      separator is tab
   1641.691640.831639.981639.121638.271637.411636.561635.7 1634.84. . .702.739701.726
14 0.12450.12420.12500.12630.12490.12620.12410.12540.1251. . .0.12440.1244
17 0.12330.12430.12470.12510.12750.12540.12490.12490.1237. . .0.12450.1256
1100.12590.12200.12420.12390.12520.12250.12230.12420.1245. . .0.12790.1240
1130.12430.12580.12540.12250.12560.12590.12610.12310.1252. . .0.12550.1258
34 0.12370.12180.12540.12350.12440.12560.12420.12470.1249. . .0.12400.1239
37 0.12430.12200.12540.12520.12470.12460.12490.12370.1234. . .0.12400.1264
3100.12480.12550.12470.12110.12420.12470.12460.12410.1245. . .0.12320.1263
3130.12250.12350.12390.12410.12370.12420.12500.12410.1241. . .0.12370.1248
54 0.12560.12390.12520.12490.12510.12540.12520.12520.1241. . .0.12320.1244
57 0.12360.12330.12500.12310.12400.12260.12340.12430.1235. . .0.12400.1252
5100.12260.12460.12440.12580.12250.12330.12480.12370.1243. . .0.12550.1232
5130.12510.12360.12470.12520.12470.12660.12430.12490.1248. . .0.12470.1266
74 0.12660.12380.12440.12520.12720.12380.12600.12520.1259. . .0.12290.1266
77 0.12780.12480.12690.12610.12460.12550.12380.12490.1250. . .0.12540.1257
7100.12590.12370.12380.12390.12450.12430.12590.12460.1220. . .0.12520.1237
7130.12330.12230.12470.12320.12450.12520.12410.12580.1250. . .0.12690.1247

 
    After pressing the 'load' button, a standard file window will appear, in which you may browse the directory structure of your computer or network connections. Select the ASCII data file and press the 'load' button. If problems are encountered during loading, try first to import the example files in the directory CytoSpecRoot/Testdata/ASCII/xyz/ (xyz-1.txt - xyz-1d.txt).. before contacting CytoSpec. Once the ASCII data are loaded you can save them in a binary file format.
     

Import yxz ASCII Data (2)

 
    The second option for importing XYZ-2 ASCII data of a mapping experiments.
    The example below shows the content of a xyz-ASCII file. This file contains four columns:
     
      first column: x-coordinates
      second column: y-coordinates
      third column: ordinate values (wavenumber or frequency positions)
      second line: abscissa values (intensities)
      separator is tab
       
      6.97 -89.09 2000.61 12461
      6.97 -89.09 1999.65 12585.6
      6.97 -89.09 1998.69 12474.8
      6.97 -89.09 1997.72 12543.1
      6.97 -89.09 1996.76 12616.5
      6.97 -89.09 1995.8 12464.2
      6.97 -89.09 1994.83 12576.6
      6.97 -89.09 1993.87 12432.1
      6.97 -89.09 1992.9 12461.5
      ... ... ... ...
      ... ... ... ...
      24.97 -71.09 103.726 74.2909
      24.97 -71.09 102.481 54.2039
      24.97 -71.09 101.235 18.0652
      24.97 -71.09 99.9897 26.0901

     
    After pressing the 'load' button, a standard file window will appear, in which you may browse the directory structure of your computer or network connections. Select the ASCII data file and press the 'load' button. If problems are encountered during loading, try first to import the example files in the directory CytoSpecRoot/Testdata/ASCII/xyz/xyz-2.txt before contacting CytoSpec. Once the ASCII data are loaded you can save them in a binary file format.
     

Import Binary Data


 
    CytoSpec offers to import hyperspectral data in various formats, among them in a number of proprietary data formats.
     
     
      Agilent®
      (Digilab®)
      Hyperspectral imaging data (*.dat) files acquired with the Resolutions Pro software from Agilent®, former Varian® former Digilab® or BioRad®) can be loaded in their native file format. Please note that the *.bsp file (same file name!) must reside in the same directory.
      Agilent®
      (Mosaic files)
      CytoSpec's import filter for mosaic files acquired with Agilent's Resolutions Pro software. Please note that the *.dmt file and the complete series of mosaic tiles (*.dmd files) must reside in one directory. Please do not change files names. The root file name must not be modified!
      AFMIR AFMIR data files. Import filter for AFMIR data.
      Alfasoft®
      (Grams 3D)
      Alfasoft Grams 3D Grams 3D multifiles (*.spc) can be imported. No problems have been reported so far.
      Bruker®
      With CytoSpec version 1.03.03 and later the import filter for Bruker OPUS multifiles has been updated. The filter allows importing OPUS-3D data files, including mapping and FPA data.
        Known limitations and restrictions:
      Problems may occur when loading data collected with earlier OPUS (OS/2 and OPUS pre 3.0 versions). In order to import the data you may have to convert the spectra into an ASCII data format. Problems may also occur if the option 'calculate integral' (measurements --> special measurements --> mapping) has been selected in the OPUS data acquisition software.
      CytoSpec The import filter for hyperspectral data in the CytoSpec data format.
      Horiba Jobin-Yvon® Horiba Jobin-Yvon data files. The import filter for Horiba Jobin-Yvon ASCII (xyz) data files. Horiba 3D data files can be also imported by CytoSpec in the Alfsasoft® spc data format. This requires conversion of Raman maps into the spc data format by the manufacturer-specific data acquisition software.
      Kaiser® Kaiser Raman Holospec data files. Import filter for Kaiser Raman Holospec data files.
      Matlab® The import filter for hyperspectral mapping files in a Matlab data format. Details of this file format can be found in CytoSpec's online documentation for the Matlab file format.
      NT-MDT® NT-MDT data files. The import filter for NT-MDT multispectra (Matlab script files).
      PerkinElmer® The filter allows to load data collected with PerkinElmer's SpectrumSpotlight IR data collection software. No problems reported so far.
      Renishaw®
      (WiRE 4.0)
      Import filter for Renishaw WiRE *.wdf spectral hyperspectral data files. With version 2.00.02 CytoSpec supports importing of WiRE 4.0 *.wdf mapping data files in Renishaw's data file format.
      Renishaw®
      (ASCII)
      Import filter for Renishaw WiRE *.txt Raman data files (ASCII data format). Renishaw 3D data files can be also imported by CytoSpec via the Alfasoft® spc data data format. This requires conversion of Raman maps into the spc data format by the manufacturer-specific data acquisition software. When loading the *.spc data you may have to enter the values for xdim and ydim (number of pixel spectra in x- and y-direction). This information is sometimes not contained in the converted spc data files.
      Thermo®
      (Nicolet)
      Thermo Atlus (former Nicolet®) *.map data files. Updated (CytoSpec v. 2.00.01) import filter for Atlus version 7 mapping data files.
      Thermo®
      (Thermo/Raman)
      Import routine for Thermo/Raman data files acquired by OMNICxi Raman imaging software for the DXR®xi Raman Imaging Microscope . CytoSpec allows importing of Raman maps stored in the HDF5 data format (*.h5, hdf5 libraries version 1.6.4). Note that the *.h5 import filter is supported only by CytoSpec's 64-bit toolbox (Matlab pcode).
      WITec® Import filter for WITec confocal Raman microspectrometer data produced by the WITec Project software (pre-versions 2.10 and v.2.10 and later). Requires conversion into an ASCII data format. Please note that CytoSpec assumes the presence of two ASCII text files in the same directory (see also here for details).

       
      Note that some import filters are still in an experimental stage and may be based on incomplete information of the internal file structures.
      Bug free operation of these filters cannot be guaranteed! All import filters have been tested using data of the directory "CytoSpecRootDir"/Testdata/bin on the program CD.
       
      Please e-mail data files and the version number of the CytoSpec program you are using to support@cytospec.com when encountering problems with one of the import filters.
       
 

Export Spectral Data

 
    This function permits exporting spectral data to other applications. Spectral data can be exported for re-classification (complete maps) or as a selection of spectra for teaching classification models. The routine offers furthermore an number of options for data reduction such as the selection of spectral windows and an average function working in the spectral domain. The export function offers furthermore specialized routines for automated feature selection such as ANOVA, COVAR, and PCA. Data can be exported in the format for the following applications:
     
    • SNNS/JavaNNS: the Stuttgart Neural Network Simulator
    •  
    • GA_ORS: Genetic Algorithm - Optimal Region Selection, a command line based UNIX/LINUX tool for analysis of IR, Raman and MRI data (optimization, feature selection).
    •  
    • TOOLDIAG: TOOLDIAG is a command line based UNIX/LINUX tool for multivariate data analysis (classification, feature extraction, feature selection, etc.)
    •  
    • Plain ASCII text files: simple export function for spectra export to applications software such as OPUS ( Bruker Optics), Grams/AI ( Alfasoft®), Microsoft Excel, or Origin ( OriginLab).
    •  
    • JCAMP-dx: export of spectral data files into the JCAMP-dx data format.

    •  
    Options of the CytoSpec data export/feature selection routine:
export spectral data to SNNS/JavaNNS export selection: if this check box is activated, only a selection of spectra will be exported (details of how to select spectra for export are given below).
 
export all spectra: a complete 3D spectral data block will be exported. Note that this option is available only in combination with the options 'export plain ASCII' or 'export JCAMP-dx' data files. To export complete hyperspectral maps into a format compatible with SNNS, GA_ORS or TOOLDIAG select the 'use log file' option.
 
print wvn table: a file 'wvn_conversion_table.dat' is created. This file contains the wavenumber positions of the spectral features.
 
average data: to lower the computational efforts the data point spacing can be increased by averaging in the spectral domain. Please select an average factor.
 
average factor: this factor indicates the degree of reduction of the spectral resolution.
 
source block: please choose one of the four data blocks: original, pre-processed, derivative, or (de)convolution data.
 
feature selection: if activated, you can select between the options ANOVA, COVAR and PCA. Please indicate also the number of data points, that is the number of the best discriminative spectral features. According to the feature selection criterion only the best n features are exported.
Note that only the feature selection option ANOVA has been implemeted yet.
 
use spectral windows: permits to restrict the spectral information on distinct spectral windows.
 
number of spectral windows: please indicate the number of spectral windows.
 
use log file: a log file from a previous CytoSpec export session can be loaded. This function is required for creating external validation (image) tests sets. When this option is chosen the settings for feature selection and spectral windows of a previous CytoSpec export session are utilized. IMPORTANT: after loading the log file the checkbox 'export all spectra' which is routinely inactivated becomes activated. In this way it is possible to export a complete imaging data set for external validation (classification) to the SNNS or ga_ors.
 
export: pressing this button opens the standard Windows file browser. Please choose an appropriate file name and the target directory.
 
cancel: the export function is canceled
 
Either the entire 3D spectral data set, or a selection of spectra can be exported. Spectra can be selected and assigned to defined classes in the following way:
 
context menu of hyperspectral maps
 
1. The context menu which is shown in the screen shot below, can be obtained by a right mouse click over the hyperspectral maps.
 
2. Choose 'class 1' --> and 'add/start' if you want to assign spectra to class 1. Now, you are in the 'select spectra' mode. In this mode, the mouse cursor changes its appearance (arrow plus cross).
 
3. You can select now an unlimited number of spectra by left mouse clicks. Please note that spectra are not displayed in this mode. The spatial coordinates will be given in the command line window.
 
4. To assign spectra to another class select 'class X' --> and 'add/start'. Then add spectra by mouse clicks.
 
5. If all spectra are selected, stop the selection mode by choosing 'selection mode off' from the context menu. CytoSpec returns to the mode 'show spectra' and the mouse pointer will regain its normal appearance. You can now call the 'export' function and export selected spectra.
 
Deleting class assignments: Deleting class assignments can be carried out for a class of your choice by the 'class X' --> and 'delete' function (see figure below); or for all classes by selecting 'delete class assignments' from the context menu.
 
Show class assignments: To display class assignments for an individual class of spectra you can select the 'class X' --> and 'show' function. Alternatively, you can use the 'show class assignments' function from the context menu. The screen output of the 'show class assignments' function is exemplary illustrated in a screen shot of the command line window.
 

 
Example of the screen output (command line window) of the 'show class assignments' function available from
the context menu of hyperspectral maps.
 
selecting data for export: screenshot of the command line window

 

Delete Data Blocks

 
    This function helps you to organize the spectral data (save disk or memory space). Choose one of the following data blocks that can be deleted:
     
    • preprocessed data.
    • derivative data.
    • (de)convolution data.

     
    A detailled description of CytoSpec's internal data organization can be found here .
 

Clear Workspace

 
    This function clears the existing workspace and removes all existing hyperspectral maps from the main window. All existing data are lost if they are not stored before. The 'clear'-function may be useful to free memory before performing memory-consuming calculations such as hierarchical clustering (HCA).
 
clear workspace window
 
 

Plot Data

 
    This function permits to plot the gui into an eps (encapsulated postscript) file. These files are ready to import into vector graphic programs such as CorelDraw.
     
    Alternatively, you can either Capture the spectral maps and store them in an bitmap format or save the zdata information (the data parameters used to generate the surface maps) in an ASCII format by using the Export function of the 'tools' menu. Furthermore, it is possible to produce a screen shot of the program window ('see function Capture')
 

Customize

 
    Customize: This function allows to set a permanent path.
     
    Memory management modes: CytoSpec offers two distinct memory management modes. This functionality was introduced to allow highly memory consuming operations also with limited RAM resources. With version 2.00.01 and the availability of the 64-bit version of CytoSpec the memory mode 'compress' is obsolete and has been removed.
     
    1. 'speed' the fastest mode, but highly memory consuming. Recommended for HCA with hyperspectral data sets containing up to 128 x 128 pixel spectra (32-bit version, 4 GB of RAM required). In this mode all spectral data are hold in memory with 8 byte precision as float64 values. The option is recommended also for HCA of larger hyperspectral data sets when using the 64-bit version of CytoSpec (Matlab toolbox)

    2.  
    3. 'intermediate' - relatively fast, but less memory consuming. Try this option when datasets are large and/or the amount of installed RAM is reduced. Spectral data are stored with 4 byte precision as float32 values on disk. Only the required data block will be loaded and is held during the calculations in memory. When performing HCA, the distance matrix will be held in RAM.

    4.  
    5. 'compression' - this memory option has been removed with version 2.00.01 (see 64-bit version of CytoSpec for details).

    6.  
setting program options
 
 

Batch Multiple Spectra Files

 
    Batch multiple files. CytoSpec versions 1.2.02 and later permit to automatically batch-process hyperspectral data. The 'batch multiple files' function is based on the Batch Preprocessing routine and requires a functional predefined macro file (*.cbt -CytoSpec batch)
    Before starting the 'batch multiple files' routine it is strongly recommended to carefully check the 'batch preprocessing' function for errors.
     
    Using the function 'batch multiple files':
     
      First, it is required to create a text file which contains path and file name of the batch preprocessing file (first line) followed by paths and file names of the spectral multifiles to be processed (next lines). An example of the file content is given here . This file should have the extension '*.fnm'
       
      The 'batch multiple file' function can be used to import and process multifiles of many origins. Supported data formats are Matlab (*.mat), Varian (former Digilab) Resolutions Pro, Bruker OPUS, Thermo OMNIC (former Nicolet), Grams/32 (*.spc), PerkinElmer (*.fsm) and CytoSpec (*.cyt).
       
      Spectral data are processed as defined by the batch file order and are stored when finished in the respective file directory by using CytoSpec's own data format and the original file name + '_b.cyt'.
       
      It is not possible to batch-process multivariate imaging functions such as agglomerative hierarchical clustering.
       

Exit

 
    Exit: Closes all windows and performs a shutdown of the program. Data not stored are lost  
exit program window
 
 

[ GENERAL | FILE | SPECTRAL PREPROCESSING | SPATIAL PREPROCESSING | UNIVARIATE IMAGING | MULTIVARIATE IMAGING | TOOLS | FILE INFO | GLOSSARY ]

Copyright (c) 2000-2017 CytoSpec. All rights reserved.