The present invention is related to microarrays and, in particular, to a method and system for generating feature data associated with user-specified virtual microarrays from a combination of a traditional catalog microarray and associated data and logic.
The present invention is related to microarrays. A general background of microarray technology is first provided, in this section, to facilitate discussion of the scanning techniques described in following sections. Microarrays are also referred to as “molecular arrays” and simply as “arrays” in the literature. Microarrays are not arbitrary regular patterns of molecules, such as occur on the faces of crystalline materials, but, as the following discussion shows, are manufactured articles specifically designed for analysis of solutions of compounds of chemical, biochemical, biomedical, and other interests.
Array technologies have gained prominence in biological research and are likely to become important and widely used diagnostic tools in the healthcare industry. Currently, microarray techniques are most often used to determine the concentrations of particular nucleic-acid polymers in complex sample solutions. Microarray-based analytical techniques are not, however, restricted to analysis of nucleic acid solutions, but may be employed to analyze complex solutions of any type of molecule that can be optically or radiometrically scanned or read and that can bind with high specificity to complementary molecules synthesized within, or bound to, discrete features on the surface of an array. Because arrays are widely used for analysis of nucleic acid samples, the following background information on arrays is introduced in the context of analysis of nucleic acid solutions following a brief background of nucleic acid chemistry.
Deoxyribonucleic acid (“DNA”) and ribonucleic acid (“RNA”) are linear polymers, each synthesized from four different types of subunit molecules. The subunit molecules for DNA include: (1) deoxy-adenosine, abbreviated “A,” a purine nucleoside; (2) deoxy-thymidine, abbreviated “T,” a pyrimidine nucleoside; (3) deoxy-cytosine, abbreviated “C,” a pyrimidine nucleoside; and (4) deoxy-guanosine, abbreviated “G,” a purine nucleoside.
The DNA polymers that contain the organization information for living organisms occur in the nuclei of cells in pairs, forming double-stranded DNA helixes. One polymer of the pair is laid out in a 5′ to 3′ direction, and the other polymer of the pair is laid out in a 3′ to 5′ direction. The two DNA polymers in a double-stranded DNA helix are therefore described as being anti-parallel. The two DNA polymers, or strands, within a double-stranded DNA helix are bound to each other through attractive forces including hydrophobic interactions between stacked purine and pyrimidine bases and hydrogen bonding between purine and pyrimidine bases, the attractive forces emphasized by conformational constraints of DNA polymers. Because of a number of chemical and topographic constraints, double-stranded DNA helices are most stable when deoxy-adenylate subunits of one strand hydrogen bond to deoxy-thymidylate subunits of the other strand, and deoxy-guanylate subunits of one strand hydrogen bond to corresponding deoxy-cytidilate subunits of the other strand.
FIGS. 2A-B illustrates the hydrogen bonding between the purine and pyrimidine bases of two anti-parallel DNA strands. AT and GC base pairs, illustrated in FIGS. 2A-B, are known as Watson-Crick (“WC”) base pairs. Two DNA strands linked together by hydrogen bonds forms the familiar helix structure of a double-stranded DNA helix.
Double-stranded DNA may be denatured, or converted into single stranded DNA, by changing the ionic strength of the solution containing the double-stranded DNA or by raising the temperature of the solution. Single-stranded DNA polymers may be renatured, or converted back into DNA duplexes, by reversing the denaturing conditions, for example by lowering the temperature of the solution containing complementary single-stranded DNA polymers. During renaturing or hybridization, complementary bases of anti-parallel DNA strands form WC base pairs in a cooperative fashion, leading to reannealing of the DNA duplex.
The ability to denature and renature double-stranded DNA has led to the development of many extremely powerful and discriminating assay technologies for identifying the presence of DNA and RNA polymers having particular base sequences or containing particular base subsequences within complex mixtures of different nucleic acid polymers, other biopolymers, and inorganic and organic chemical compounds. One such methodology is the array-based hybridization assay.
Once an array has been prepared, the array may be exposed to a sample solution of target DNA or RNA molecules (410-413 in
Finally, as shown in
One, two, or more than two data subsets within a data set can be obtained from a single microarray by scanning or reading the microarray for one, two or more than two types of signals. Two or more data subsets can also be obtained by combining data from two different arrays. When optical scanning or reading is used to detect fluorescent or chemiluminescent emission from chromophore labels, a first set of signals, or data subset, may be generated by scanning or reading the microarray at a first optical wavelength, a second set of signals, or data subset, may be generated by scanning or reading the microarray at a second optical wavelength, and additional sets of signals may be generated by scanning or reading the molecular at additional optical wavelengths. Different signals may be obtained from a microarray by radiometric scanning or reading to detect radioactive emissions one, two, or more than two different energy levels. Target molecules may be labeled with either a first chromophore that emits light at a first wavelength, or a second chromophore that emits light at a second wavelength. Following hybridization, the microarray can be scanned or read at the first wavelength to detect target molecules, labeled with the first chromophore, hybridized to features of the microarray, and can then be scanned or read at the second wavelength to detect target molecules, labeled with the second chromophore, hybridized to the features of the microarray. In one common microarray system, the first chromophore emits light at a red visible-light wavelength, and the second chromophore emits light at a green, visible-light wavelength. The data set obtained from scanning or reading the microarray at the red wavelength is referred to as the “red signal,” and the data set obtained from scanning or reading the microarray at the green wavelength is referred to as the “green signal.” While it is common to use one or two different chromophores, it is possible to use one, three, four, or more than four different chromophores and to scan or read a microarray at one, three, four, or more than four wavelengths to produce one, three, four, or more than four data sets.
A second, commonly used approach for experimental design is to design and build a custom microarray based on the probe molecules directly or indirectly specified in the list 802. As shown in
One embodiment of the present invention is a method and system for generating virtual-microarray feature data from a virtualizing catalog array comprising a catalog microarray associated with data that can be together processed to produce any of numerous sets of virtual-microarray feature data. The catalog array portion of the virtualizing microarray may include many thousands, tens of thousands, or hundreds of thousands of different features from which a very large number of feature subsets may be generated. The data associated with the virtualizing microarray allows for rapid and transparent partitioning of the catalog-microarray features. Logic included within a microarray scanner, a computer system used to process data scanned from microarrays, a microarray-data visualization system, or other microarray-related processing entities can be used to generate feature data for any number of user-specified virtual arrays based on partitioning of the features included in the catalog-microarray component of the virtualizing microarray. Thus, the virtualizing microarray can be used to relatively transparently generate any of numerous user-specified virtual microarrays in a time-and-cost-efficient manner.
FIGS. 2A-B illustrate the hydrogen bonding between the purine and pyrimidine bases of two anti-parallel DNA strands.
One embodiment of the present invention provides a virtualizing-microarray method and system that enables transparent and time-and-space-efficient generation of numerous user-specified virtual-microarray data sets. The present invention is described, below, in three subsections. A first subsection provides additional information about microarrays. A second subsection provides an overview of one embodiment of the present invention with reference to
An array may include any one-, two- or three-dimensional arrangement of addressable regions, or features, each bearing a particular chemical moiety or moieties, such as biopolymers, associated with that region. Any given array substrate may carry one, two, or four or more arrays disposed on a front surface of the substrate. Depending upon the use, any or all of the arrays may be the same or different from one another and each may contain multiple spots or features. A typical array may contain more than ten, more than one hundred, more than one thousand, more ten thousand features, or even more than one hundred thousand features, in an area of less than 20 cm2 or even less than 10 cm2. For example, square features may have widths, or round feature may have diameters, in the range from a 10 μm to 1.0 cm. In other embodiments each feature may have a width or diameter in the range of 1.0 μm to 1.0 mm, usually 5.0 μm to 500 μm, and more usually 10 μm to 200 μm. Features other than round or square may have area ranges equivalent to that of circular features with the foregoing diameter ranges. At least some, or all, of the features may be of different compositions (for example, when any repeats of each feature composition are excluded the remaining features may account for at least 5%, 10%, or 20% of the total number of features). Interfeature areas are typically, but not necessarily, present. Interfeature areas generally do not carry probe molecules. Such interfeature areas typically are present where the arrays are formed by processes involving drop deposition of reagents, but may not be present when, for example, photolithographic array fabrication processes are used. When present, interfeature areas can be of various sizes and configurations.
Each array may cover an area of less than 100 cm2, or even less than 50 cm2, 10 cm2 or 1 cm2. In many embodiments, the substrate carrying the one or more arrays will be shaped generally as a rectangular solid having a length of more than 4 mm and less than 1 m, usually more than 4 mm and less than 600 mm, more usually less than 400 mm; a width of more than 4 mm and less than 1 m, usually less than 500 mm and more usually less than 400 mm; and a thickness of more than 0.01 mm and less than 5.0 mm, usually more than 0.1 mm and less than 2 mm and more usually more than 0.2 and less than 1 mm. Other shapes are possible, as well. With arrays that are read by detecting fluorescence, the substrate may be of a material that emits low fluorescence upon illumination with the excitation light. Additionally in this situation, the substrate may be relatively transparent to reduce the absorption of the incident illuminating laser light and subsequent heating if the focused laser beam travels too slowly over a region. For example, a substrate may transmit at least 20%, or 50% (or even at least 70%, 90%, or 95%), of the illuminating light incident on the front as may be measured across the entire integrated spectrum of such illuminating light or alternatively at 532 nm or 633 nm.
Arrays can be fabricated using drop deposition from pulsejets of either polynucleotide precursor units (such as monomers) in the case of in situ fabrication, or the previously obtained polynucleotide. Such methods are described in detail in, for example, U.S. Pat. No. 6,242,266, U.S. Pat. No. 6,232,072, U.S. Pat. No. 6,180,351, U.S. Pat. No. 6,171,797, U.S. Pat. No. 6,323,043, U.S. patent application Ser. No. 09/302,898 filed Apr. 30, 1999 by Caren et al., and the references cited therein. Other drop deposition methods can be used for fabrication, as previously described herein. Also, instead of drop deposition methods, known photolithographic array fabrication methods may be used. Interfeature areas need not be present particularly when the arrays are made by photolithographic methods as described in those patents.
A microarray is typically exposed to a sample including labeled target molecules, or, as mentioned above, to a sample including unlabeled target molecules followed by exposure to labeled molecules that bind to unlabeled target molecules bound to the array, and the array is then read. Reading of the array may be accomplished by illuminating the array and reading the location and intensity of resulting fluorescence at multiple regions on each feature of the array. For example, a scanner may be used for this purpose, which is similar to the AGILENT MICROARRAY SCANNER manufactured by Agilent Technologies, Palo Alto, Calif. Other suitable apparatus and methods are described in U.S. patent applications: Ser. No. 10/087,447 “Reading Dry Chemical Arrays Through The Substrate” by Corson et al., and Ser. No. 09/846,125 “Reading Multi-Featured Arrays” by Dorsel et al. However, arrays may be read by any other method or apparatus than the foregoing, with other reading methods including other optical techniques, such as detecting chemiluminescent or electroluminescent labels, or electrical techniques, for where each feature is provided with an electrode to detect hybridization at that feature in a manner disclosed in U.S. Pat. No. 6,251,685, U.S. Pat. No. 6,221,583 and elsewhere.
A result obtained from reading an array may be used in that form or may be further processed to generate a result such as that obtained by forming conclusions based on the pattern read from the array, such as whether or not a particular target sequence may have been present in the sample, or whether or not a pattern indicates a particular condition of an organism from which the sample came. A result of the reading, whether further processed or not, may be forwarded, such as by communication, to a remote location if desired, and received there for further use, such as for further processing. When one item is indicated as being remote from another, this is referenced that the two items are at least in different buildings, and may be at least one mile, ten miles, or at least one hundred miles apart. Communicating information references transmitting the data representing that information as electrical signals over a suitable communication channel, for example, over a private or public network. Forwarding an item refers to any means of getting the item from one location to the next, whether by physically transporting that item or, in the case of data, physically transporting a medium carrying the data or communicating the data.
As pointed out above, array-based assays can involve other types of biopolymers, synthetic polymers, and other types of chemical entities. A biopolymer is a polymer of one or more types of repeating units. Biopolymers are typically found in biological systems and particularly include polysaccharides, peptides, and polynucleotides, as well as their analogs such as those compounds composed of, or containing, amino acid analogs or non-amino-acid groups, or nucleotide analogs or non-nucleotide groups. This includes polynucleotides in which the conventional backbone has been replaced with a non-naturally occurring or synthetic backbone, and nucleic acids, or synthetic or naturally occurring nucleic-acid analogs, in which one or more of the conventional bases has been replaced with a natural or synthetic group capable of participating in Watson-Crick-type hydrogen bonding interactions. Polynucleotides include single or multiple-stranded configurations, where one or more of the strands may or may not be completely aligned with another. For example, a biopolymer includes DNA, RNA, oligonucleotides, and PNA and other polynucleotides as described in U.S. Pat. No. 5,948,902 and references cited therein, regardless of the source. An oligonucleotide is a nucleotide multimer of about 10 to 100 nucleotides in length, while a polynucleotide includes a nucleotide multimer having any number of nucleotides.
As an example of a non-nucleic-acid-based microarray, protein antibodies may be attached to features of the array that would bind to soluble labeled antigens in a sample solution. Many other types of chemical assays may be facilitated by array technologies. For example, polysaccharides, glycoproteins, synthetic copolymers, including block copolymers, biopolymer-like polymers with synthetic or derivitized monomers or monomer linkages, and many other types of chemical or biochemical entities may serve as probe and target molecules for array-based analysis. A fundamental principle upon which arrays are based is that of specific recognition, by probe molecules affixed to the array, of target molecules, whether by sequence-mediated binding affinities, binding affinities based on conformational or topological properties of probe and target molecules, or binding affinities based on spatial distribution of electrical charge on the surfaces of target and probe molecules.
Scanning of a microarray by an optical scanning device or radiometric scanning device generally produces a scanned image comprising a rectilinear grid of pixels, with each pixel having a corresponding signal intensity. These signal intensities are processed by an array-data-processing program that analyzes data scanned from an array to produce experimental or diagnostic results which are stored in a computer-readable medium, transferred to an intercommunicating entity via electronic signals, printed in a human-readable format, or otherwise made available for further use. Microarray experiments can indicate precise gene-expression responses of organisms to drugs, other chemical and biological substances, environmental factors, and other effects. Microarray experiments can also be used to diagnose disease, for gene sequencing, and for analytical chemistry. Processing of microarray data can produce detailed chemical and biological analyses, disease diagnoses, and other information that can be stored in a computer-readable medium, transferred to an intercommunicating entity via electronic signals, printed in a human-readable format, or otherwise made available for further use.
The data component of a virtualizing microarray needs to be at least tightly conceptually associated with a particular type of catalog microarray. More desirable is a physical association between the data component and the catalog-microrarray components of a virtualizing microarray. For example, a physical microarray may include a small microchip-memory that can be electronically queried to provide for a self-describing catalog-array component. Alternatively, the catalog microarray may include a smaller, electronic data-storage device from which an identification number and/or alpha-numeric descriptive string can be obtained in order to match the catalog array with a corresponding data component within a data-processing system.
A virtualizing microarray allows a single catalog microarray to be conveniently used as any of a huge number of user-specified virtual microarrays. Each virtual microarray represents a subset of data related to features of the catalog microarray that can be treated computationally as data related to a different, smaller microarray. In other words, by using a virtualizing microarray, a researcher can specify a custom virtual array needed for a particular experiment, and obtain the data by using a standard, catalog array. The virtual microarray is nearly transparently obtained by computational methods, one example of which is provided below. The researcher neither needs to design a custom, physical microarray, nor needs to develop ad hoc methods for extracting the needed data from a catalog microarray. Moreover, the virtual microarray can be made available at each step in the microarray scanning, data processing, and data visualization stages.
In this subsection, a brief pseudocode implementation of an embodiment of the data component and associated logic for a virtualizing microarray is provided. This C++-like pseudocode implementation is provided merely as an illustration of one possible approach for implementing the data component and associated logic for a virtualizing microarray. The pseudocode implementation omits detailed error detection and correction and other features commonly included in commercial implementations, in the interest of clarity and brevity. Note that there are an almost limitless number of different ways for implementing even the simplest logic component, including different modular structures, data structures, control structures, programming languages, and other such parameters and characteristics.
First, several constants are defined:
Next, the class “stringValCategory” is declared below:
The class “stringValCategory” contains the different values that may be assigned to a particular field within a record that describes a feature. Each value is also associated with a Boolean mask flag, which may be set ON or OFF to indicate whether or not the particular value should serve as a positive mask or filter for selecting features for a virtual microarray. Thus, for example, if the value “carbohydrate metabolism” for the field “biological process” is associated with a mask flag set to the value ON or TRUE, then, when a virtual microarray is created, features of the catalog microarray for which the field “biological process” has the value “carbohydrate metabolism” will be included in the virtual microarray. A field for which no values have the Boolean mask flag set does not participate in the masking or filtering process. The class “stringValCategory” contains the following private data members, declared above on lines 4-7: (1) “vals,” declared above on line 4, an array of text strings that represent the different possible values for a particular field; (2) “masks,” an array of Boolean mask flags, each flag associated with a corresponding field value in the above-described array vals; (3) “num,” the number of values defined for the field; and (4) “anyMask,” a Boolean flag indicating whether or not the field participates in the masking or filtering process by which virtual microarrays are generated. The class “stringValCategory” includes the following public function members, declared above on lines 10-17: (1) “addVal,” a function member that adds a text-string value to the list of values for the field represented by an instance of the class “stringValCategory,” (2) “getIndex,” a function member that returns a numeric index of a value provided by the argument “val,” the returned index equivalent to the position of the value within the private data member “vals;” (3) “getString,” a function member that returns the text-string value associated with a particular numerical index into the private data member “vals;” (4) “setMaskOn” and “setMaskOff,” functions members that turn on and off, respectively, the Boolean mask flag associated with a field value supplied as argument “val;” (5) “mask,” a member function that returns a Boolean value indicating whether or not the value represented by the supplied index “dex” is a positive mask; (6) “clearMasks,” a function member that clears all Boolean mask flags for an instance of the class “stringValCategory”; and (7) a constructor for the class “stringValCategory.”
Next, two dummy class declarations are provided, one for a class representing a header that may describe a particular category microarray, and one for the data that is stored for each feature in the data component of a virtualizing microarray:
An array header may include an identification number, an identifying text string, or other such information. It may also include a date of manufacture, a version number, and other types of product information. An instance of the class “data” may include raw pixel-based intensity data, averaged background and region-of-interest intensity data, a normalized numeric intensity value, and other such scanned-data-related information. Because, in both cases, the precise nature of the member data and member functions are unnecessary for describing an exemplary implementation of one embodiment of the present invention, these details are omitted. Next, following two initial class-name declarations, a declaration for the class “arrayElement” is provided:
The class “catalogArray” represents a data record corresponding to a feature of a catalog array. The class “arrayElement” includes, in the illustrative implementation, the following private data members, declared above on lines 6-14: (1) “dt,” the scanned-feature data described by an instance of the class “data;” (2) “molecular function,” the index of a text-string value describing the molecular function of the product of the target mRNA for the probe of the feature described by an instance of the class “arrayElement;” (3) indexes for the text-string values for fields that describe the biological process, cellular component, name, biological source, strand, and sequence for the probe or translational product of the mRNA target of the probe; and (4) a pointer to a next instance of the class “arrayElement,” used for constructing a virtual microarray, as described below. The class “arrayElement” additionally includes two private function members, declared above on lines 16-17: (1) “getNext,” which returns a pointer to a next instance of the class “arrayElement”; (2) “setNext,” which sets the private data member “next” to a supplied value. The class “arrayElement” includes 14 public function members, declared above on lines 20-33, which allow the field values to be retrieved and to be set, as well as a constructor, declared above on line 34.
Next, a declaration for the class “catalogArray” is provided:
The class “catalogArray” includes the following private data members, declared above on lines 4-21: (1) “rows” and “columns,” integers representing the number of rows and columns in the corresponding catalog array; (2) “header,” an instance of the class “arrayHeader” that includes header information for the corresponding catalog array; (3) six instances of the class “stringValCategory,” declared above on lines 8-13, each representing the possible values for, and Boolean mask flags associated with, six different fields in records describing features within the catalog array; (4) “elements,” a two-dimensional array of records representing features in the catalog array; (5) “virtualArray,” a Boolean flag indicating whether or not filters and masking should be applied to produce a virtual array from the catalog array; (6) “vRows” and “vCols,” indications of the number of rows and the number of columns in the currently specified virtual array based on the catalog array; and (7) “elDex,” a one-dimensional array containing pointers to instances of the class “arrayElement,” used to index rows of the currently specified virtual array. The class “catalogArray” includes the following public function members, declared above on lines 24-50: (1) “set” and “get” function members for setting and getting the values of the private data members “rows,” “columns,” and “header,” declared above on lines 24-30; (2) “get” function members that return pointers to array elements and instances of the class “stringValCategory” that describe field values, declared above on lines 32-38; (3) “setVirtualArrayMasks,” a function member that may be repeatedly called to set, as positive masks, various values of the various fields used within records describing features of the catalog array; (4) “clearVirtualArrayMasks,” a function member that clears all masks set by the previously described function; (5) “setVirtual,” a function member that initiates transformation of a catalog array described by an instance of the class “arrraycatalog” into a virtual array, as specified by one or more calls to the above-described function member “setVirtualArrayMasks;” (6) “getVRows” and “getVCols,” function members that return indications of the number of rows and the number of columns in the last row of the currently specified virtual microarray; (7) “setCatalog,” a function member that transforms the currently specified virtual microarray back to the underlying catalog microarray; (8) “output” and “input,” two function members, implementations for which are not provided in the interest of brevity and clarity, that output the contents of an instance of the class “catalogArray” to and from a computer-readable file, object, or other computer-readable data storage entity; and (9) a constructor for the class “catalogArray.”
Next, implementations for various function members of the class “stringValCategory” are provided:
The above-provided implementations are, for the most part, straightforward, and do not require detailed commentary. The function member “addVal” simply copies a newly provided text-string value into a list of values. The function member “getIndex” searches the current list of values for a text-string value supplied as argument “val,” and, if such a value is found, returns the index of that text-string value. If no such value is found, a value “−1” is returned. The function member “getString” returns a pointer to a text string corresponding to a supplied index, or the value NULL, if no such text string is currently included in the instances of the class “stringValCategory.” The function member “setMaskOn” sets the Boolean mask value associated with a supplied text-string value so that the text-string value becomes a positive mask for generating virtual microarrays. Note that the data member “anyMask” is set to the value TRUE whenever a Boolean mask flag is set to the value TRUE. The function member “setMaskOff” disables a Boolean mask flag corresponding to a supplied text-string value, and if no other Boolean mask flags are set to TRUE, sets the data member “anyMask” to FALSE, to indicate that the field represented by the instance of the class “stringValCategory” is not involved in the masking and filtering operation used to produce a virtual microarray. The function member “mask” returns the Boolean value of the Boolean mask flag associated with the text-string-value index supplied as argument “dex.” Note that if the index is not valid, a value TRUE is returned. The value TRUE is also returned if the field is not participating within the filtering and masking operations. The final two function members simply clear the Boolean mask flag and initialize an instance of the class “stringValCategory.”
Next, several straightforward representative implementations of member functions of the class “arrayElement” are provided, without further description:
Next, implementations for various function members of the class “catalogArray” are provided:
The function member “getElement” returns a pointer to an instance of the class “arrayElement” specified by the supplied row and column. Note that this function member tests the data member “virtualArray,” on line 5, to determine whether or not the instance of the class “catalogArray” is currently being treated as a virtual microarray or as the catalog array. In the former case, the virtual-microarray index “elDex” is used to obtain a pointer to the appropriate virtual-microarray row, and that row is traversed, on line 8, to find the instance of the class “arrayElement” corresponding to the supplied column. If the instance of the class “catalogArray” is being treated as a catalog array, then a pointer to the appropriate element of the catalog array is returned on line 11.
The function member “setVirtualArrayMasks” simply calls corresponding “setMaskOn” function members for the various instances of the class “stringValCategory” that represent various fields within a record that describes a feature within the catalog array. Note that this function can be repeatedly called to specify numerous text-string values for each field to be used as positive masks. The function member “clearVirtualArrayMasks” is straightforward.
The function member “setVirtual” transforms an instance of the class “catalogArray” from a catalog array to a virtual array. This is accomplished by accessing each element of the catalog array, in the nested for-loops of lines 10-42, testing each element to see if it is positively masked, in the if statement of lines 15-22, and if the element is positively masked, including the element into row lists that describe the virtual microarray, in the code of lines 24-40. Finally on lines 43-52, the private data members “vRows” and “vCols” are set according to the number of elements included into the virtual microarray.
Although the present invention has been described in terms of a particular embodiment, it is not intended that the invention be limited to this embodiment. Modifications within the spirit of the invention will be apparent to those skilled in the art. For example, as described above, an almost limitless number of different implementations of a virtualizing microarray may be obtained by varying the programming language, data structures, control structures, modular organizations, and other features and characteristics of the implementation. Moreover, the logic component of a virtualizing microarray may be implemented in hardware, firmware, software, or a combination of two or more of these implementation types. As discussed above, virtualizing microarrays may be employed at any of many different stages and microarray scanning, data processing, and data visualization. Additional functionality may be included to provide more flexible and capable objects and routines. As one example, methods for removing values from instances of the class “stringValCategory” may be included, to allow for editing of field values. As another example, a more flexible and powerful description for category-array features may be developed for describing non-oligonucleotide probes or oligonucleotide probes directed to non-protein-encoding RNAs. XML or other languages may be used to conveniently provide for self-describing catalog microarrays.
Other methods of handling array data can be used as described in U.S. patent application titled “Masking Chemical Arrays”, filed by Peter Webb, Laurakay Bruhn, et al. on the same day as the present application and assigned to Agilent Technologies, Inc. (attorney docket number 10021296-1). The foregoing application is incorporated by reference into the present application.
The foregoing description, for purposes of explanation, used specific nomenclature to provide a thorough understanding of the invention. However, it will be apparent to one skilled in the art that the specific details are not required in order to practice the invention. The foregoing descriptions of specific embodiments of the present invention are presented for purpose of illustration and description. They are not intended to be exhaustive or to limit the invention to the precise forms disclosed. Obviously many modifications and variations are possible in view of the above teachings. The embodiments are shown and described in order to best explain the principles of the invention and its practical applications, to thereby enable others skilled in the art to best utilize the invention and various embodiments with various modifications as are suited to the particular use contemplated. It is intended that the scope of the invention be defined by the following claims and their equivalents: