Christopher Jones


Microarray::File::Data::Quantarray - A Perl module for managing Perkin Elmer 'Scanarray' microarray files


        use Microarray::File::Data::Quantarray;

        my $data_file = quantarray_file->new("/file.csv");
        my $ch1_image = quantarray_image->new("/image1.tif");


Microarray::File::Data::Quantarray is an object-oriented Perl module for managing microarray files created by Perkin Elmer's 'Scanarray' software. It inherits from Microarray::File, and maps data fields in a Scanarray data file to those used by Microarray::File::Data, as well as extracting header information from image files. The data file and image file headers that are created by Scanarray are richly annotated with a lot of useful information about your scans, allowing automated file handling that is impossible with other formats.


quantarray_file methods

In case you didn't guess - where a method exists for "channel1" in the following methods, there is an equivalent method for "channel2".

General methods - typically retrieving information from the header


Measured in micrometers.


i.e. Cyanine 3, or Cyanine 5. This comes from Scanarray's fluorochrome list, and represents whatever fluor you chose in the scan set up.


The full path of the image file when saved by Scanarray.


The full path of the GAL file, when/if imported by Scanarray during data extraction.


No idea where this comes from. But its there in the data file.

array_columns, array_rows

Number of columns and rows of blocks on the array

spot_columns, spot_rows

Number of columns and rows of spots in each block

And other methods that don't need any explanation;

channel1_pmt, channel1_laser

Spot methods

Pass the data row index to these methods to return information for a particular spot. The first row of data is index 0.

block_row, block_col, spot_row, spot_col, spot_index

There is no 'block number' field in Scanarray files, so all coordinates are at row/column level.

feature_id, synonym_id

The 'Name' and 'ID' columns respectively.

x_pos, y_pos

Spot centre location in pixels, from the top-left of the image.


You'd better look this one up... but its something like how far away the spot centre is, compared to where it was expected to be.


The flag associated with the spot.

ch1_median_f, ch1_mean_f, ch1_sd_f

Median, mean and SD values for the fluorescence measurements of spot pixels.

ch1_median_b, ch1_mean_b, ch1_sd_b

Median, mean and SD values for the fluorescence measurements of background pixels.

ch1_b1sd, channel1_quality, channel1_sat

The percent of spot pixels 1 SD above background, percent of spot pixels 2 SD above background, and percent of spot pixels that are saturated.


Scanarray calculates signal to noise ratio as the median signal/background SD.

quantarray_image methods


Returns the barcode, if there is only one, or if there is one at each end of the array and they are identical. Otherwise, if there are two barcodes that are different it will die with an error.


Returns the lower barcode


Returns the upper barcode

protocol_name, protocol_id, protocol_description

These methods return details of the Scanarray protocol used to scan and extract array data


Pixel size in microns

fluor_name, fluor_id, fluor_colour_name, fluor_description, fluor_excitation, fluor_emission

These methods return details of the fluorochrome specified in the scan protocol and visualised in this image. Not necessarily the fluorochrome used in the experiment!

laser_id, filter_id

The Scanarray IDs of the filter and laser used in the scan

pmt_gain, laser_power

Percentage values specified in the scan protocol


User comment can contain the slide barcode

Setting a new barcode

You can change the value of a barcode in the header information. You can't overwrite the original file, but you can write these header changes to a new image file. This is achieved using the Image::ExifTool module.

        my $success = $image->set_new_barcode('new barcode','/new_file.tif');

The returned values are; 1=write success, 2=write success no changes, 0=write error. If you need to change any other values, you can do by manipulating the embedded Image::ExifTool object.

        my $exiftool = $image->get_exiftool_object;


This distribution does not include a data file for testing purposes, since the one used for the test is very large. If you would like to run the full test you can download the file at


Microarray, Microarray::File, Microarray::File::Data, Image::ExifTool


Christopher Jones, Gynaecological Cancer Research Laboratories, Institute for Women's Health, University College London.


Copyright 2008 by Christopher Jones, University College London

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.