CA2328408C - Zero dead time architecture and method for flow cytometer - Google Patents
Zero dead time architecture and method for flow cytometer Download PDFInfo
- Publication number
- CA2328408C CA2328408C CA002328408A CA2328408A CA2328408C CA 2328408 C CA2328408 C CA 2328408C CA 002328408 A CA002328408 A CA 002328408A CA 2328408 A CA2328408 A CA 2328408A CA 2328408 C CA2328408 C CA 2328408C
- Authority
- CA
- Canada
- Prior art keywords
- data
- data storage
- pointer
- storage areas
- event
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Lifetime
Links
- 238000000034 method Methods 0.000 title claims abstract description 37
- 238000013500 data storage Methods 0.000 claims abstract description 174
- 239000000872 buffer Substances 0.000 claims abstract description 108
- 238000005070 sampling Methods 0.000 claims abstract description 81
- 238000012545 processing Methods 0.000 claims abstract description 44
- 238000005259 measurement Methods 0.000 claims abstract description 41
- 238000013480 data collection Methods 0.000 claims description 24
- 230000008569 process Effects 0.000 claims description 17
- 235000019800 disodium phosphate Nutrition 0.000 claims description 16
- 238000012958 reprocessing Methods 0.000 abstract description 3
- 239000002245 particle Substances 0.000 description 16
- 230000008901 benefit Effects 0.000 description 9
- 239000007850 fluorescent dye Substances 0.000 description 6
- 239000011324 bead Substances 0.000 description 5
- 230000001965 increasing effect Effects 0.000 description 5
- 230000003287 optical effect Effects 0.000 description 5
- 238000004458 analytical method Methods 0.000 description 4
- 230000008859 change Effects 0.000 description 4
- 238000001514 detection method Methods 0.000 description 4
- 230000000694 effects Effects 0.000 description 4
- 230000005284 excitation Effects 0.000 description 4
- 238000000684 flow cytometry Methods 0.000 description 4
- 238000010276 construction Methods 0.000 description 3
- 238000001914 filtration Methods 0.000 description 3
- 239000012530 fluid Substances 0.000 description 3
- 230000003595 spectral effect Effects 0.000 description 3
- 238000012360 testing method Methods 0.000 description 3
- 230000009286 beneficial effect Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 238000000926 separation method Methods 0.000 description 2
- 239000000725 suspension Substances 0.000 description 2
- 239000013598 vector Substances 0.000 description 2
- COCLLEMEIJQBAG-UHFFFAOYSA-N 8-methylnonyl 2-methylprop-2-enoate Chemical compound CC(C)CCCCCCCOC(=O)C(C)=C COCLLEMEIJQBAG-UHFFFAOYSA-N 0.000 description 1
- 101100502324 Arabidopsis thaliana FAD6 gene Proteins 0.000 description 1
- QIVBCDIJIAJPQS-VIFPVBQESA-N L-tryptophane Chemical compound C1=CC=C2C(C[C@H](N)C(O)=O)=CNC2=C1 QIVBCDIJIAJPQS-VIFPVBQESA-N 0.000 description 1
- QIVBCDIJIAJPQS-UHFFFAOYSA-N Tryptophan Natural products C1=CC=C2C(CC(N)C(O)=O)=CNC2=C1 QIVBCDIJIAJPQS-UHFFFAOYSA-N 0.000 description 1
- 150000001413 amino acids Chemical class 0.000 description 1
- 230000003321 amplification Effects 0.000 description 1
- 230000003466 anti-cipated effect Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 230000001351 cycling effect Effects 0.000 description 1
- 230000003247 decreasing effect Effects 0.000 description 1
- 230000002708 enhancing effect Effects 0.000 description 1
- 238000000695 excitation spectrum Methods 0.000 description 1
- 230000001747 exhibiting effect Effects 0.000 description 1
- 238000002189 fluorescence spectrum Methods 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 238000009499 grossing Methods 0.000 description 1
- 238000009652 hydrodynamic focusing Methods 0.000 description 1
- 238000003199 nucleic acid amplification method Methods 0.000 description 1
- 108090000765 processed proteins & peptides Proteins 0.000 description 1
- 108090000623 proteins and genes Proteins 0.000 description 1
- 102000004169 proteins and genes Human genes 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000012552 review Methods 0.000 description 1
- 230000011664 signaling Effects 0.000 description 1
- 239000012536 storage buffer Substances 0.000 description 1
- 239000000454 talc Substances 0.000 description 1
- 229910052623 talc Inorganic materials 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G01—MEASURING; TESTING
- G01N—INVESTIGATING OR ANALYSING MATERIALS BY DETERMINING THEIR CHEMICAL OR PHYSICAL PROPERTIES
- G01N21/00—Investigating or analysing materials by the use of optical means, i.e. using sub-millimetre waves, infrared, visible or ultraviolet light
- G01N21/62—Systems in which the material investigated is excited whereby it emits light or causes a change in wavelength of the incident light
- G01N21/63—Systems in which the material investigated is excited whereby it emits light or causes a change in wavelength of the incident light optically excited
- G01N21/64—Fluorescence; Phosphorescence
- G01N21/645—Specially adapted constructive features of fluorimeters
-
- G—PHYSICS
- G01—MEASURING; TESTING
- G01N—INVESTIGATING OR ANALYSING MATERIALS BY DETERMINING THEIR CHEMICAL OR PHYSICAL PROPERTIES
- G01N15/00—Investigating characteristics of particles; Investigating permeability, pore-volume, or surface-area of porous materials
- G01N15/10—Investigating individual particles
- G01N15/14—Electro-optical investigation, e.g. flow cytometers
- G01N15/1456—Electro-optical investigation, e.g. flow cytometers without spatial resolution of the texture or inner structure of the particle, e.g. processing of pulse signals
-
- G—PHYSICS
- G01—MEASURING; TESTING
- G01N—INVESTIGATING OR ANALYSING MATERIALS BY DETERMINING THEIR CHEMICAL OR PHYSICAL PROPERTIES
- G01N21/00—Investigating or analysing materials by the use of optical means, i.e. using sub-millimetre waves, infrared, visible or ultraviolet light
- G01N21/17—Systems in which incident light is modified in accordance with the properties of the material investigated
- G01N21/47—Scattering, i.e. diffuse reflection
- G01N21/49—Scattering, i.e. diffuse reflection within a body or fluid
- G01N21/53—Scattering, i.e. diffuse reflection within a body or fluid within a flowing fluid, e.g. smoke
-
- G01N15/149—
-
- G—PHYSICS
- G01—MEASURING; TESTING
- G01N—INVESTIGATING OR ANALYSING MATERIALS BY DETERMINING THEIR CHEMICAL OR PHYSICAL PROPERTIES
- G01N15/00—Investigating characteristics of particles; Investigating permeability, pore-volume, or surface-area of porous materials
- G01N15/10—Investigating individual particles
- G01N2015/1006—Investigating individual particles for cytology
-
- G—PHYSICS
- G01—MEASURING; TESTING
- G01N—INVESTIGATING OR ANALYSING MATERIALS BY DETERMINING THEIR CHEMICAL OR PHYSICAL PROPERTIES
- G01N15/00—Investigating characteristics of particles; Investigating permeability, pore-volume, or surface-area of porous materials
- G01N15/10—Investigating individual particles
- G01N15/14—Electro-optical investigation, e.g. flow cytometers
- G01N2015/1477—Multiparameters
-
- G—PHYSICS
- G01—MEASURING; TESTING
- G01N—INVESTIGATING OR ANALYSING MATERIALS BY DETERMINING THEIR CHEMICAL OR PHYSICAL PROPERTIES
- G01N15/00—Investigating characteristics of particles; Investigating permeability, pore-volume, or surface-area of porous materials
- G01N15/10—Investigating individual particles
- G01N15/14—Electro-optical investigation, e.g. flow cytometers
- G01N2015/1486—Counting the particles
-
- G—PHYSICS
- G01—MEASURING; TESTING
- G01N—INVESTIGATING OR ANALYSING MATERIALS BY DETERMINING THEIR CHEMICAL OR PHYSICAL PROPERTIES
- G01N15/00—Investigating characteristics of particles; Investigating permeability, pore-volume, or surface-area of porous materials
- G01N15/10—Investigating individual particles
- G01N15/14—Electro-optical investigation, e.g. flow cytometers
- G01N2015/1493—Particle size
-
- G—PHYSICS
- G01—MEASURING; TESTING
- G01N—INVESTIGATING OR ANALYSING MATERIALS BY DETERMINING THEIR CHEMICAL OR PHYSICAL PROPERTIES
- G01N21/00—Investigating or analysing materials by the use of optical means, i.e. using sub-millimetre waves, infrared, visible or ultraviolet light
- G01N21/17—Systems in which incident light is modified in accordance with the properties of the material investigated
- G01N21/47—Scattering, i.e. diffuse reflection
- G01N2021/4704—Angular selective
- G01N2021/4707—Forward scatter; Low angle scatter
-
- G—PHYSICS
- G01—MEASURING; TESTING
- G01N—INVESTIGATING OR ANALYSING MATERIALS BY DETERMINING THEIR CHEMICAL OR PHYSICAL PROPERTIES
- G01N21/00—Investigating or analysing materials by the use of optical means, i.e. using sub-millimetre waves, infrared, visible or ultraviolet light
- G01N21/17—Systems in which incident light is modified in accordance with the properties of the material investigated
- G01N21/47—Scattering, i.e. diffuse reflection
- G01N2021/4704—Angular selective
- G01N2021/4726—Detecting scatter at 90°
-
- G—PHYSICS
- G01—MEASURING; TESTING
- G01N—INVESTIGATING OR ANALYSING MATERIALS BY DETERMINING THEIR CHEMICAL OR PHYSICAL PROPERTIES
- G01N21/00—Investigating or analysing materials by the use of optical means, i.e. using sub-millimetre waves, infrared, visible or ultraviolet light
- G01N21/62—Systems in which the material investigated is excited whereby it emits light or causes a change in wavelength of the incident light
- G01N21/63—Systems in which the material investigated is excited whereby it emits light or causes a change in wavelength of the incident light optically excited
- G01N21/64—Fluorescence; Phosphorescence
- G01N21/6428—Measuring fluorescence of fluorescent products of reactions or of fluorochrome labelled reactive substances, e.g. measuring quenching effects, using measuring "optrodes"
- G01N2021/6439—Measuring fluorescence of fluorescent products of reactions or of fluorochrome labelled reactive substances, e.g. measuring quenching effects, using measuring "optrodes" with indicators, stains, dyes, tags, labels, marks
- G01N2021/6441—Measuring fluorescence of fluorescent products of reactions or of fluorochrome labelled reactive substances, e.g. measuring quenching effects, using measuring "optrodes" with indicators, stains, dyes, tags, labels, marks with two or more labels
-
- G—PHYSICS
- G01—MEASURING; TESTING
- G01N—INVESTIGATING OR ANALYSING MATERIALS BY DETERMINING THEIR CHEMICAL OR PHYSICAL PROPERTIES
- G01N21/00—Investigating or analysing materials by the use of optical means, i.e. using sub-millimetre waves, infrared, visible or ultraviolet light
- G01N21/62—Systems in which the material investigated is excited whereby it emits light or causes a change in wavelength of the incident light
- G01N21/63—Systems in which the material investigated is excited whereby it emits light or causes a change in wavelength of the incident light optically excited
- G01N21/64—Fluorescence; Phosphorescence
- G01N21/645—Specially adapted constructive features of fluorimeters
- G01N2021/6482—Sample cells, cuvettes
Landscapes
- Health & Medical Sciences (AREA)
- Chemical & Material Sciences (AREA)
- Biochemistry (AREA)
- Physics & Mathematics (AREA)
- Life Sciences & Earth Sciences (AREA)
- Analytical Chemistry (AREA)
- General Health & Medical Sciences (AREA)
- General Physics & Mathematics (AREA)
- Immunology (AREA)
- Pathology (AREA)
- Dispersion Chemistry (AREA)
- Nuclear Medicine, Radiotherapy & Molecular Imaging (AREA)
- Investigating Or Analysing Biological Materials (AREA)
- Investigating, Analyzing Materials By Fluorescence Or Luminescence (AREA)
- Automatic Analysis And Handling Materials Therefor (AREA)
Abstract
A method and apparatus for providing a zero dead time for flow analyzers, flow cytometers, and other measurement devices. A circular buffer is used to store data from a flow analyzer in a plurality of data storage areas, until it is convenient to implement more time consuming data processing procedures. User specified parameters, including sampling rate and/or sampling period, size and number of data storage areas, size of the circular or other buffer, signal-to-noise threshold, order of processing when a plurality of Digital Signal Processors (DSPs) is used, and fixed trailing distance, are used to provide flexible and convenient operation by a user. The probability of missing a rare event occurring within the laser beam or other light beam of a flow analyzer or other measurement device is reduced to zero. Functional equivalents may be used in place of the circular buffer, for example, First In-First Out buffers which route data to a cache for potential re-reading and/or reprocessing or additional processing of data, cascading buffers, etc. Circular and functionally equivalent buffers permit sophisticated data processing in which preceding data (for example, data not meeting the S/N threshold) subsequently are re-analyzed for the possibility that the data ar e part of a developingevent peak, such as a developing shoulder thereof, or part of a declining peak. In addition, logic and algorithms to permit re-examination and potential reprocessing of "old" subthreshold data is utilized to improve the SIN ratio of an event peak.</SD OAB>
Description
ZERO DEAD TIME ARCHITECTURE AND METHOD FOR FLOW CYTOMETER
FIELD OF THE INVENTION
The present invention relates generally to an apparatus for, and a method of, increasing the quantity of information obtained from flow analyzers or other data collection devices by temporarily storing data relating to, for example, particles, cells, and inter-event background noise from flow through an examination zone. In particular, the present invention relates to an apparatus for and a method of achieving zero dead time by temporarily storing such data in a circular buffer, or similar buffer or temporary storage capability, for later processing.
BACKGROUND OF THE INVENTION
Flow cytometry is conveniently used to quickly measure one or more optical parameters of the cells andlor particles that pass through a light beam that impinges on a narrow examination zone. Background information on flow cytometry is found, for example, in Shapiro's Practical Flow Cvtometry, Third Edition (Alan R. Liss, lnc. 1995.
In conventional flow cytometers, sample fluid containing sample cells andlor particles is introduced from a sample tube into or near the center of a faster flowing stream of sheath fluid, which draws the sample toward the center of the combined streams. This process, known a hydrodynamic focusing, allows the cells and/or particles to be delivered reproducibly to the center of the measuring point in the flow cell or other examination zone. Typically, the cells and/or particles are in suspension in the flow cell.
WO 99/5955 PC'f/US99/10318 A continuous wave laser focuses a laser beam on the cells and/or particles as they pass through the examination zone by a flow of a stream of the suspension. When an object of interest in the flow stream is struck by the laser beam, certain signals result and are sensed by detectors.
For example, these signals include forward light scatter intensity, which provides information concerning the size of individual cells and/or particles, and side light scatter intensity, which provides information regarding the relative size and refractive properties of individual cells and/or particles.
Other signals which may be sensed by detectors include fluorescence emissions from one or more fluorescent dyes and/or other fluorescent molecules, for example, tryptophan or other fluorescent amino acids) or other molecules) that is native to a protein or other peptide, or to another biomolecule or man-made molecule. Typically, when a plurality of different fluorescing molecules is employed in an analytical scheme, fluorescence emission peaks are selected to minimize or, ideally, eliminate spectral overlap between the respective fluorescence emission peaks.
For example, ideally, fluorescence emission peaks will differ by 50 wm, though lesser (or larger) spectral separation also can be accommodated and used to advantage, for example, 20, 30 or 40 pm, where the greater the spectral separation, the more powerful is the discrimination between the respective fluorescence emitters. In addition, quantum efficiency is considered in the choice of fluorescent molecules. In the case of use of a plurality of different fluorescent molecules, a separate detector is tuned to and used for the different wavelength of emission of each fluorescence emitter. The excitation wavelength for more than one fluorescent molecule can be the same, or different excitation wave lengths can be used to match the excitation spectrum of each different fluorescent molecule.
The optical signals that are generated by an analytical procedure are transmitted to an output meters) andlor data storage means. Signal processing, for example, by a Digital Signal Processor or ~DSP,~ can be employed before and/or after intensity data on the measured optical signals are transmitted to the output meters) and/or data storage means.
In flow cytometry, an "event" occurs when a cell or particle passes through the beam of the laser or other light source. As the event progresses, the light measured from scattering andlor fluorescence emission increases as the cell or particle enters the beam, reaches a maximum at the center of the beam, and tapers to a nominal value as it leaves the beam.
FIELD OF THE INVENTION
The present invention relates generally to an apparatus for, and a method of, increasing the quantity of information obtained from flow analyzers or other data collection devices by temporarily storing data relating to, for example, particles, cells, and inter-event background noise from flow through an examination zone. In particular, the present invention relates to an apparatus for and a method of achieving zero dead time by temporarily storing such data in a circular buffer, or similar buffer or temporary storage capability, for later processing.
BACKGROUND OF THE INVENTION
Flow cytometry is conveniently used to quickly measure one or more optical parameters of the cells andlor particles that pass through a light beam that impinges on a narrow examination zone. Background information on flow cytometry is found, for example, in Shapiro's Practical Flow Cvtometry, Third Edition (Alan R. Liss, lnc. 1995.
In conventional flow cytometers, sample fluid containing sample cells andlor particles is introduced from a sample tube into or near the center of a faster flowing stream of sheath fluid, which draws the sample toward the center of the combined streams. This process, known a hydrodynamic focusing, allows the cells and/or particles to be delivered reproducibly to the center of the measuring point in the flow cell or other examination zone. Typically, the cells and/or particles are in suspension in the flow cell.
WO 99/5955 PC'f/US99/10318 A continuous wave laser focuses a laser beam on the cells and/or particles as they pass through the examination zone by a flow of a stream of the suspension. When an object of interest in the flow stream is struck by the laser beam, certain signals result and are sensed by detectors.
For example, these signals include forward light scatter intensity, which provides information concerning the size of individual cells and/or particles, and side light scatter intensity, which provides information regarding the relative size and refractive properties of individual cells and/or particles.
Other signals which may be sensed by detectors include fluorescence emissions from one or more fluorescent dyes and/or other fluorescent molecules, for example, tryptophan or other fluorescent amino acids) or other molecules) that is native to a protein or other peptide, or to another biomolecule or man-made molecule. Typically, when a plurality of different fluorescing molecules is employed in an analytical scheme, fluorescence emission peaks are selected to minimize or, ideally, eliminate spectral overlap between the respective fluorescence emission peaks.
For example, ideally, fluorescence emission peaks will differ by 50 wm, though lesser (or larger) spectral separation also can be accommodated and used to advantage, for example, 20, 30 or 40 pm, where the greater the spectral separation, the more powerful is the discrimination between the respective fluorescence emitters. In addition, quantum efficiency is considered in the choice of fluorescent molecules. In the case of use of a plurality of different fluorescent molecules, a separate detector is tuned to and used for the different wavelength of emission of each fluorescence emitter. The excitation wavelength for more than one fluorescent molecule can be the same, or different excitation wave lengths can be used to match the excitation spectrum of each different fluorescent molecule.
The optical signals that are generated by an analytical procedure are transmitted to an output meters) andlor data storage means. Signal processing, for example, by a Digital Signal Processor or ~DSP,~ can be employed before and/or after intensity data on the measured optical signals are transmitted to the output meters) and/or data storage means.
In flow cytometry, an "event" occurs when a cell or particle passes through the beam of the laser or other light source. As the event progresses, the light measured from scattering andlor fluorescence emission increases as the cell or particle enters the beam, reaches a maximum at the center of the beam, and tapers to a nominal value as it leaves the beam.
State of the art flow cytometers commonly use one of two systems to measure events. One system uses peak detectors, including peak hold circuits, to sustain the maximum signal level obtained from an event, and to measure optical parameters relating to cells andlor particles passing through a laser beam. Once a peak detector has sensed and measured an event, the peak detectors are fumed off to provide sufficient time for an analog to digital, or ~A/D,0 converter to digitize that maximum value of the signal.
During the time that the peak detectors are off, termed "dead time," any event occurring within the laser beam will go undetected.
The second system uses an integrator to measure the area under the peak collected for an event. With either system, when an event occurs within the cytometer's light beam during the dead time, the event will go undetected.
Normally, such lack of detection of an event does not constitute a significant problem because, for a large number of events, only a tiny number will be missed. However, applications which require the detection of rare, critical events, for example, identification of one special cell or particle in a thousand or a million, suffer from the possible non-detection of a rare event when current generation flow cytometers are used for detection and measurement. The higher the throughput, the greater is the probability that such a critical event will be missed per unit time period.
One solution to problems encountered in sorting samples in flow cytometry is provided by United States Patent No.
5,550,058 to Corio, et al. Corio, et al. provides a means of flexibly controlling decisions on the sorting of events detected in a flow cytometer. Events are pre-qualified according to user selectable parameters to permit reduction of events missed during dead time. However, the Corio, et al. reference does not teach or suggest a means of reducing the probability of missing a dead time event to zero.
Thus, it would be beneficial in the an of flow analyzers, including flow cytometers or other analyzing equipment, to have a means to reduce to zero the probability of missing any event, including a rare, dead time event.
It is also desirable to efficiently and inexpensively provide a system and/or method of reducing the probability of missing an event.
During the time that the peak detectors are off, termed "dead time," any event occurring within the laser beam will go undetected.
The second system uses an integrator to measure the area under the peak collected for an event. With either system, when an event occurs within the cytometer's light beam during the dead time, the event will go undetected.
Normally, such lack of detection of an event does not constitute a significant problem because, for a large number of events, only a tiny number will be missed. However, applications which require the detection of rare, critical events, for example, identification of one special cell or particle in a thousand or a million, suffer from the possible non-detection of a rare event when current generation flow cytometers are used for detection and measurement. The higher the throughput, the greater is the probability that such a critical event will be missed per unit time period.
One solution to problems encountered in sorting samples in flow cytometry is provided by United States Patent No.
5,550,058 to Corio, et al. Corio, et al. provides a means of flexibly controlling decisions on the sorting of events detected in a flow cytometer. Events are pre-qualified according to user selectable parameters to permit reduction of events missed during dead time. However, the Corio, et al. reference does not teach or suggest a means of reducing the probability of missing a dead time event to zero.
Thus, it would be beneficial in the an of flow analyzers, including flow cytometers or other analyzing equipment, to have a means to reduce to zero the probability of missing any event, including a rare, dead time event.
It is also desirable to efficiently and inexpensively provide a system and/or method of reducing the probability of missing an event.
It is further desirable to efficiently and inexpensively provide a system andlor method of reducing the probability of missing an event for high sampling rates, for example, on the order of approximately a sampling period, such as one sample per millisecond or shorter period.
SUMMARY OF THE INVENTION
According to the present invention, there is provided a data collection and measurement device collecting data with substantially zero dead time, comprising:
a) a flow analyzer;
b) a circular buffer comprising:
a plurality of data storage areas that are linked to receive and consecutively store incoming data from a plurality of successive sampling periods for at least one event of the flow analyzer, where each data storage area is configured to receive and store data from one sampling period, and the data storage areas are linked in an order that provides storage for data from a next-in-time sampling period into the next-in-order data storage area;
a First Pointer; and a Second Pointer;
c) at least one Digital Signal Processor (DSP), where the First Pointer directs receipt and 2 0 storage of data of the next-in-time sampling period into the next-in-order data storage area, and, once all data storage areas contain data, directs receipt of data of the next-in-time sampling period, and storage by overwriting therewith data in the next-in-order data storage area, the Second Pointer is directed to the data storage area that stores data from a sample period preceding a current time of data receipt and storage by a fixed trailing distance as referenced to the First Pointer, and directs one of the at least one DSPs to read and process data in the data storage area to which the Second pointer is directed, and wherein once the next-in-time data have been stored, the First Pointer advances to the next-in-order data storage area, and once data in the data storage area to which the Second Pointer is directed have been processed, the Second Pointer advances to the next-in-order data storage area, and wherein said collection and measurement apparatus collects and processes data from the at least one event.
4a According to the present invention, there is also provided a flaw analyzer collecting data with substantially zero dead time for at least one event, comprising:
at least one circular buffer having a plurality of data storage areas that are adapted to receive and store incoming data from a plurality of sampling periods for the at least one event collected by said flow analyzer, said at least one circular buffer including at least a First Pointer used to direct receipt and storage of the data collected by said flow analyzer into at least one of said plurality of data storage areas including overwriting of stored data therein in accordance with predetermined criteria, and at least a Second Pointer used to direct reading of the data from at least one of the plurality of data storage areas including previously stored data from a sample period preceding a current time of the receipt and the storage of the data directed by the at least First Pointer; and at least one processor connected to said at least one circular buffer, receiving the data from the at least one of the plurality of data storage areas of said at least one circular buffer responsive to direction by the at least one Second Pointer, and said flow analyzer collecting and processing the data from the at (east one event with substantially zero dead time.
According to the present invention, there is also provided a flow analyzer collecting data with substantially zero dead time for at least one event, comprising:
at least one buffer having a plurality of data storage areas that are adapted to receive and store incoming data from a plurality of sampling periods for the at least one event collected by said flow analyzer, said at least one buffer including previously stored data from a sample period preceding a current time of the receipt and the storage of the data and including an addressable range of the plurality of data storage areas to go sufficiently backward in the plurality of sampling periods;
at least one processor connected to said at Least one buffer, receiving the data from the at least one of the plurality of data storage areas of said at least one buffer, and said flow analyzer collecting and processing the data from the at least one event with substantially zero dead time by reading from said at least one buffer the previously stored data from the sampling period preceding the current time of the plurality of sampling periods.
4b According to the present invention, there is also provided a flow analyzer collecting data with substantially zero dead time for at least one event, comprising:
at least one buffer means far having a plurality of data storage areas that are adapted to receive and store incoming data from a plurality of sampling periods for the at least one event collected by said flow analyzer, said at least one buffer means for including previously stored data from a sample period preceding a current time of the receipt and the storage of the data and including an addressable range of the plurality of data storage areas to go sufficiently backward in the plurality of sampling periods;
at least one processor for receiving the data from the at least one of the plurality of data storage areas of said at least one buffer means, and said flow analyzer collecting and processing the data from the at least one event with substantially zero dead time by reading from said at least one buffer means the previously stored data from the sampling period preceding the current time of the plurality of sampling periods.
According to the present invention, there is also provided a method of collecting data used in a flow analyzer with substantially zero dead time for at least one event, comprising the steps of:
(a) receiving incoming data from a plurality of sampling periods for the at least one event 2 0 collected by said flow analyzer via at least one circular buffer having a plurality of data storage areas;
(b) storing the incoming data in the at least one circular buffer via at least a First Pointer used to direct the receipt and the storage of the data collected by said flow analyzer into at least one of the plurality of data storage areas including overwriting of stored data therein in accordance with predetermined criteria;
(c) directing the reading of the data by at least one processor from at least one of the plurality of data storage areas including previously stored data from a sample period preceding a current time of the receipt and the storage of the data directed by the at least First Pointer via at least a Second Pointer;
3 0 (d) receiving the data by the at least one processor from the at least one of the plurality of data storage areas of said at least one circular buffer responsive to direction by the at least one Second Pointer; and (e) collecting and processing the data from the at least one event with substantially zero dead time.
4c The following provides a non-restrictive outline of certain possibly preferable features of the invention which will be more fully described hereinafter.
Accordingly, it is a feature and advantage of the present invention to provide an apparatus and a method for reducing the dead time to zero in ffow analyzers, flow cytometers, and other measurement devices.
It is another feature and advantage of the present invention to provide a means to reduce the dead time to zero in flow analyzers, flow cytometers, and other measurement devices by use of, for example, a circular buffer to store optical data until the data can be processed by at least one digital signal processor or other processor.
It is a further feature and advantage of the present invention to provide a means to reduce the dead time to zero in flow analyzers, flow cytometers, and other measurement devices by providing software that permits the user to specify one or more of data collection, data storage, and data processing parameters, such as size of data storage areas, number of data storage areas, sampling rate (and/or the inverse: length of sampling or sample period), signal-to-noise (SM) threshold, and fixed trailing distance.
It is a feature and advantage of the present invention to efficiently and inexpensively provide a system and/or method of reducing the probability of missing an event.
It is another feature and advantage of the present invention to efficiently and inexpensively provide a system and/or method of reducing the probability of missing an event in the presence of a high sampling rate.
It is yet another feature and advantage of the instant invention to provide the capability of enhancing data analytical capability by going back in time to re-examine and reprocess data in "old" data storage areas in order, potentially, to recreate a more complete event peaks) by applying special algorithms to subthreshold data.
The instant invention provides an apparatus and a method of use of that apparatus to reduce dead time to zero or substantially zero in a measurement device. The apparatus includes 1 ) a circular buffer that has a) a plurality of data storage areas that are linked to receive and consecutively store incoming data from a p(uralih~
3 0 of successive sampling periods of a measurement device that measures events occurring in a measurement zone.
SUMMARY OF THE INVENTION
According to the present invention, there is provided a data collection and measurement device collecting data with substantially zero dead time, comprising:
a) a flow analyzer;
b) a circular buffer comprising:
a plurality of data storage areas that are linked to receive and consecutively store incoming data from a plurality of successive sampling periods for at least one event of the flow analyzer, where each data storage area is configured to receive and store data from one sampling period, and the data storage areas are linked in an order that provides storage for data from a next-in-time sampling period into the next-in-order data storage area;
a First Pointer; and a Second Pointer;
c) at least one Digital Signal Processor (DSP), where the First Pointer directs receipt and 2 0 storage of data of the next-in-time sampling period into the next-in-order data storage area, and, once all data storage areas contain data, directs receipt of data of the next-in-time sampling period, and storage by overwriting therewith data in the next-in-order data storage area, the Second Pointer is directed to the data storage area that stores data from a sample period preceding a current time of data receipt and storage by a fixed trailing distance as referenced to the First Pointer, and directs one of the at least one DSPs to read and process data in the data storage area to which the Second pointer is directed, and wherein once the next-in-time data have been stored, the First Pointer advances to the next-in-order data storage area, and once data in the data storage area to which the Second Pointer is directed have been processed, the Second Pointer advances to the next-in-order data storage area, and wherein said collection and measurement apparatus collects and processes data from the at least one event.
4a According to the present invention, there is also provided a flaw analyzer collecting data with substantially zero dead time for at least one event, comprising:
at least one circular buffer having a plurality of data storage areas that are adapted to receive and store incoming data from a plurality of sampling periods for the at least one event collected by said flow analyzer, said at least one circular buffer including at least a First Pointer used to direct receipt and storage of the data collected by said flow analyzer into at least one of said plurality of data storage areas including overwriting of stored data therein in accordance with predetermined criteria, and at least a Second Pointer used to direct reading of the data from at least one of the plurality of data storage areas including previously stored data from a sample period preceding a current time of the receipt and the storage of the data directed by the at least First Pointer; and at least one processor connected to said at least one circular buffer, receiving the data from the at least one of the plurality of data storage areas of said at least one circular buffer responsive to direction by the at least one Second Pointer, and said flow analyzer collecting and processing the data from the at (east one event with substantially zero dead time.
According to the present invention, there is also provided a flow analyzer collecting data with substantially zero dead time for at least one event, comprising:
at least one buffer having a plurality of data storage areas that are adapted to receive and store incoming data from a plurality of sampling periods for the at least one event collected by said flow analyzer, said at least one buffer including previously stored data from a sample period preceding a current time of the receipt and the storage of the data and including an addressable range of the plurality of data storage areas to go sufficiently backward in the plurality of sampling periods;
at least one processor connected to said at Least one buffer, receiving the data from the at least one of the plurality of data storage areas of said at least one buffer, and said flow analyzer collecting and processing the data from the at least one event with substantially zero dead time by reading from said at least one buffer the previously stored data from the sampling period preceding the current time of the plurality of sampling periods.
4b According to the present invention, there is also provided a flow analyzer collecting data with substantially zero dead time for at least one event, comprising:
at least one buffer means far having a plurality of data storage areas that are adapted to receive and store incoming data from a plurality of sampling periods for the at least one event collected by said flow analyzer, said at least one buffer means for including previously stored data from a sample period preceding a current time of the receipt and the storage of the data and including an addressable range of the plurality of data storage areas to go sufficiently backward in the plurality of sampling periods;
at least one processor for receiving the data from the at least one of the plurality of data storage areas of said at least one buffer means, and said flow analyzer collecting and processing the data from the at least one event with substantially zero dead time by reading from said at least one buffer means the previously stored data from the sampling period preceding the current time of the plurality of sampling periods.
According to the present invention, there is also provided a method of collecting data used in a flow analyzer with substantially zero dead time for at least one event, comprising the steps of:
(a) receiving incoming data from a plurality of sampling periods for the at least one event 2 0 collected by said flow analyzer via at least one circular buffer having a plurality of data storage areas;
(b) storing the incoming data in the at least one circular buffer via at least a First Pointer used to direct the receipt and the storage of the data collected by said flow analyzer into at least one of the plurality of data storage areas including overwriting of stored data therein in accordance with predetermined criteria;
(c) directing the reading of the data by at least one processor from at least one of the plurality of data storage areas including previously stored data from a sample period preceding a current time of the receipt and the storage of the data directed by the at least First Pointer via at least a Second Pointer;
3 0 (d) receiving the data by the at least one processor from the at least one of the plurality of data storage areas of said at least one circular buffer responsive to direction by the at least one Second Pointer; and (e) collecting and processing the data from the at least one event with substantially zero dead time.
4c The following provides a non-restrictive outline of certain possibly preferable features of the invention which will be more fully described hereinafter.
Accordingly, it is a feature and advantage of the present invention to provide an apparatus and a method for reducing the dead time to zero in ffow analyzers, flow cytometers, and other measurement devices.
It is another feature and advantage of the present invention to provide a means to reduce the dead time to zero in flow analyzers, flow cytometers, and other measurement devices by use of, for example, a circular buffer to store optical data until the data can be processed by at least one digital signal processor or other processor.
It is a further feature and advantage of the present invention to provide a means to reduce the dead time to zero in flow analyzers, flow cytometers, and other measurement devices by providing software that permits the user to specify one or more of data collection, data storage, and data processing parameters, such as size of data storage areas, number of data storage areas, sampling rate (and/or the inverse: length of sampling or sample period), signal-to-noise (SM) threshold, and fixed trailing distance.
It is a feature and advantage of the present invention to efficiently and inexpensively provide a system and/or method of reducing the probability of missing an event.
It is another feature and advantage of the present invention to efficiently and inexpensively provide a system and/or method of reducing the probability of missing an event in the presence of a high sampling rate.
It is yet another feature and advantage of the instant invention to provide the capability of enhancing data analytical capability by going back in time to re-examine and reprocess data in "old" data storage areas in order, potentially, to recreate a more complete event peaks) by applying special algorithms to subthreshold data.
The instant invention provides an apparatus and a method of use of that apparatus to reduce dead time to zero or substantially zero in a measurement device. The apparatus includes 1 ) a circular buffer that has a) a plurality of data storage areas that are linked to receive and consecutively store incoming data from a p(uralih~
3 0 of successive sampling periods of a measurement device that measures events occurring in a measurement zone.
b) a First Pointer (or first logical pointer), and c) a Second Pointer (or second logical pointer); and 2) at least one Digital Signal Processor (DSP) or other data processor.
Each data storage area is configured to receive and store data from one sampling period. Furthermore, the data storage areas are linked in an order that provides storage for data from a next-in-time sampling period into the next-in-order data storage area. The First Pointer directs receipt and storage of data of the next-in-time sampling period into the next-in-order data storage area; and, once all data storage areas contain data, the First Pointer directs receipt of data of the next-in-time sampling period, and storage by overwriting therewith the data in the next-in-order data storage area, which contains the oldest data of the circular buffer.
The Second Pointer is directed to the data storage area that stores data from a sample period preceding the current time by at least a fixed trailing distance, referenced to the First Pointer; and the Second Pointer directs one of the at least one DSPs to read and process data in the data storage area to which the Second Pointer is directed.
Once the next-in-time data from the current sampling period have been stored, the First Pointer advances to the next-in-order data storage area. In addition, once data in the data storage area to which the Second Pointer is directed have been processed, the Second Pointer advances to the next-in-order data storage area to repeat the cycle of data processing, followed by advancement to the next-in-order data storage area.
Other addressable buffers can alternatively be used where the addressable range of data allows the system to go forward and sufficiently backward to obtain previously collected samples. For example, a FIFO
and backward cache combination can alternatively be used in the present invention, as can a cascading buffer.
The method of the instant invention entails applying the above apparatus to collect and process data from events occurring in a measurement device, particularly a measurement device with a flowcell, such as a flow cytometer or other flow analyzer.
The fixed trailing distance is set by the user to equal the longest possible time.for an event, or longer, often falling in the 10 to 100 millisecond range. The size and number of data storage areas in the circular buffer also are user specified. Data storage areas often are set to 12 to 16 bits, though larger and smaller sizes may be used to adjust for particular applications. The number of data storage areas often is set to about one thousand, or greater. However, numbers of data storage areas less than a thousand also can be used advantageously.
The sampling rate, and/or its inverse which is length of sampling period, also are user specified. A
Each data storage area is configured to receive and store data from one sampling period. Furthermore, the data storage areas are linked in an order that provides storage for data from a next-in-time sampling period into the next-in-order data storage area. The First Pointer directs receipt and storage of data of the next-in-time sampling period into the next-in-order data storage area; and, once all data storage areas contain data, the First Pointer directs receipt of data of the next-in-time sampling period, and storage by overwriting therewith the data in the next-in-order data storage area, which contains the oldest data of the circular buffer.
The Second Pointer is directed to the data storage area that stores data from a sample period preceding the current time by at least a fixed trailing distance, referenced to the First Pointer; and the Second Pointer directs one of the at least one DSPs to read and process data in the data storage area to which the Second Pointer is directed.
Once the next-in-time data from the current sampling period have been stored, the First Pointer advances to the next-in-order data storage area. In addition, once data in the data storage area to which the Second Pointer is directed have been processed, the Second Pointer advances to the next-in-order data storage area to repeat the cycle of data processing, followed by advancement to the next-in-order data storage area.
Other addressable buffers can alternatively be used where the addressable range of data allows the system to go forward and sufficiently backward to obtain previously collected samples. For example, a FIFO
and backward cache combination can alternatively be used in the present invention, as can a cascading buffer.
The method of the instant invention entails applying the above apparatus to collect and process data from events occurring in a measurement device, particularly a measurement device with a flowcell, such as a flow cytometer or other flow analyzer.
The fixed trailing distance is set by the user to equal the longest possible time.for an event, or longer, often falling in the 10 to 100 millisecond range. The size and number of data storage areas in the circular buffer also are user specified. Data storage areas often are set to 12 to 16 bits, though larger and smaller sizes may be used to adjust for particular applications. The number of data storage areas often is set to about one thousand, or greater. However, numbers of data storage areas less than a thousand also can be used advantageously.
The sampling rate, and/or its inverse which is length of sampling period, also are user specified. A
typical sampling rate is one million per second, which equates to sampling periods of one millisecond each.
However, larger and smaller figures can be utilized according to the particular application.
When a plurality of DSPs is used, the user may specify the order of use of the respective DSPs. For example, one DSP can control storage of data incoming to the circular buffer, and one or a plurality of DSPs can handle processing of the data, as directed by the Second Pointer.
Buffers that are functionally equivalent to circular buffers also can be used, for example, a First In-First Out buffer which temporarily stores data (or lack thereof) from the respective data storage areas into one or more caches for possible later processing; double or triple cascading buffers;
etc.
In another embodiment, an FPGA (Field Programmable Gate Array) may be programmed as a state machine, for example, with four or five states, to replace use of a DSP for inputting data into the circular buffer or functional equivalent.
The above broad outline of the more important features of the instant invention has been presented 1 ) to facilitate understanding of the following sections, which provide greater detail with respect to components of the instant invention, and 2) to succinctly highlight contributions of the instant invention to the art. However, it is to be understood that the above outline, as well as the terminology and details as to construction, arrangement and practice of the instant invention presented in the following sections, are exemplary and not limiting; i.e., the instant invention is capable of other embodiments as to construction, arrangement and practice.
As such, those skilled in the art will appreciate that the conception, upon which this disclosure is based, can readily be utilized as a basis for designing other structures and methods of practice to execute the purposes of the instant invention. Therefore, it is important that the instant disclosure and claims be regarded as embracing equivalent constructions and practices insofar as they do not depart from the spirit and scope of the invention as disclosed herein.
Another purpose for this SUMMARY OF THE INVENTION section is to enable the U.S. Patent Office and the public generally, including scientists, engineers and practitioner in the art who are not familiar with patent or legal terms or phraseology herein, to quickly determine the nature and essence of the instant disclosure with only cursory review. Thus, the intention of this section is not to limit the scope of the instant invention in any way.
For a more complete understanding of the instant invention, including its operating advantages and various uses, reference should be made to the following drawings, descriptive matter, and claims, which illustrate preferred embodiments of the invention.
BRIEF DESCRIPTION OF THE DRAWINGS
Fig. 1 is an embodiment of a circular buffer according to the instant invention.
Fig. 2 is a flow chart of an embodiment for writing data from a flow analyzer to the circular buffer of Fig.
1.
Fig. 3 is a flow chart of an embodiment for reading and processing data from the circular buffer of Fig. 1.
Fig. 4 is a schematic showing the functioning of a circular buffer within a flow analyzer.
DESCRIPTION OF THE PREFERRED EMBODIMENTS
The present invention provides a system and method of reducing the dead time to zero or substantially zero in flow analyzers, flow cytometers; and other measurement devices.
Advantageously, the present invention provides the user the ability to specify one or more data collection, data storage, and data processing parameters, such as size of data storage areas, number of data storage areas, sampling rate (and/or the inverse:
length of sampling or sample period), signal-to-noise (S/N) threshold, and fixed trailing distance.
Each data storage area is configured to receive and store data from, for example, one or more sampling periods. The data storage areas are optionally linked in an order that provides storage for data from a next-in-time sampling period into the next-in-order data storage area. A First Pointer (or first logical pointer) directs receipt and storage of data of the next-in-time sampling period into the next-in-order data storage area. Once all data storage areas contain data, the First Pointer directs receipt of data of the next-in-time sampling period, and storage by overwriting therewith the data in the next-in-order data storage area, which contain the oldest data of the buffer, such as a standard circular buffer.
A Second Pointer (or second logical pointer) is directed to the data storage area that stores data from a sample period preceding the current time by at least a fixed or predetermined trailing distance with reference, for example, to the First Pointer or other reference. The Second Pointer directs at least one digital signal processor (DSP) or other data processor to read and process data in the data storage area to which the Second Pointer is directed.
Once the next-in-time data from the current sampling period have been stored, the First Pointer advances to the next-in-order data storage area. In addition, once data in the data storage area to which the Second Pointer is directed have been processed, the Second Pointer advances to the next-in-order data storage area to repeat the cycle of data processing, followed by advancement to the next-in-order data storage area.
The present invention is based, in part, on my discovery that samples containing important data were being lost in data collection of analyzing equipment, such as flow analyzers or cytometers. As a result, the overall accuracy of the cytometer was questionable or could be improved. Accordingly, having realized that important samples were being lost for certain applications described above, I determined that an addressable buffer having the capability of obtaining a predetermined amount of data backward in time would improve the overall accuracy and effciency of the flow analyzer or cytometer.
Other addressable buffers can alternatively be used where the addressable range of data allows the system to go forward and sufficiently backward to obtain previously collected samples. For example, a FIFO and backward cache combination can alternatively be used in the present invention, as can a cascading buffer. The number of samples for which the buffer need go backward in time varies, depending on the application, but may be anywhere from 1 sample, 20 samples, and higher.
Referring to Fig. 1, an embodiment of a circular buffer (also referred to as a "circular buffer means" or "circular memory structure") 100 having 30 data storage areas is presented.
The 30 data storage areas are represented by consecutive even numbers 102 through 160. First Pointer (or first logical pointer) 170 indicates the data storage area to which the next data sample from the next sample period is to be stored by, for example, overwriting the existing data (if any) when the next data sample is transmitted from a flow analyzer, flow cytometer, or other measurement device to circular buffer 100.
First Pointer 170 is directed to data storage area 102, which, at this particular instant in time, holds the oldest data of the circular buffer, as is indicated by a single asterisk. When data are transmitted to circular storage buffer at the beginning of an analytical procedure, instead of overwriting old data, new data are added consecutively to the data storage areas of circular buffer 100, thus creating a series of linked next-in-time data storage areas.
Circular arrow 190 indicates the forward-in-time direction of advancement both for data acquisition and usual data processing (i.e., not back-in-time processing). Thus, data storage area 104 holds the second oldest data at this instant in time, 106 holds the third oldest data, etc., to data storage area 160, which holds the newest data, as is indicated by a double asterisk. The next set of incoming data from a sample period will overwrite the old data of 102.
Just prior to arrival of the next set of incoming data transmitted to circular buffer 100 from the next sample period, First Pointer 170 advances to data storage area 104, to direct overwriting of the (now) oldest data consecutively for each data storage area, thus continuously advancing in the forward-in-time direction of circular arrow 190. This process continuously creates and updates a series of next-in-order data storage areas that store next-in-time data. Referring again to Fig. 1, Second Pointer (or second logical pointer) 180 is shown as being directed to data storage area 156 of circular buffer 100.
Second Pointer 180 indicates the current data storage area whose data are to be read next and processed by, for example, a DSP or other processor (not shown in the figure) if the data reach a user specified threshold signal-to-noise (S/N) ratio. After the DSP reads the data stored in data storage area 156, Second Pointer 180 advances in the direction of arrow 190 to data storage area 158, and so forth in sequence. As indicated above, other buffer devices may be used that are addressable; therefore, there is no requirement that the above operations necessarily be performed sequentially or in a specific linear manner or order.
The number of data storage areas in a circular buffer or other buffer is flexibly specified by the user to be as large or as small as the requirements of the particular application. For example, a thousand data storage areas provide sufficient means to store one thousand sampling periods, where each sampling period is one microsecond. Circular buffer 100 can comprise more than or less than 1,000 data storage areas; and the length of time of a sampling period can be greater than or less than one millisecond (i.e., the sampling rate can be less than or greater than one million per second).
Similarly, the size of the data storage areas is defined by the user or is user selectable in concert with the requirements of the particular application. For example, a capacity of 12-16 bits per data storage area will suffice for some applications, whereas more than 20 bits will be required in other applications, such as complex and/or high amplitude fluorescence emission or other peaks.
Practice of the present invention does not require a one-to-one (i.e., in locked-step) direct correspondence between the quantity of data read and processed by the DSP (or the time required therefor), as directed by Second Pointer 180, and the quantity of incoming data that overwrites the oldest data (or the time required therefor), as directed by First Pointer 170. For example, First Pointer 170 advances in steady cadence in step with the sampling rate, for example, one million per second. When data in a data storage area do not meet the user specified S/N threshold, Second Pointer 180 also moves in cadence with the sampling rate.
On the other hand, when data in a data storage area do meet a user specified S/N threshold and thus indicate an event in progress, Second Pointer 180 advances quickly to the next-in-time data of the next-in-order 10 data storage area. As long as the data in a data storage area do not meet the user specified S/N threshold, a minimum, fixed lag time z or fixed trailing distance is maintained relative to First Pointer 170, which lag time must be at least equal to z"~, the longest time for an event. Thus, the fixed trailing distance serves as a minimum lag time criterion when data in a data storage area do not meet the S/N threshold.
In other words,z is the user defined lag time between the current transmission of data from a sampling period to circular buffer 100, and the reading by the DSP of insufficient S/N
data stored z sec. previously.
Thus, the DSP is programmed to examine data collected from a point back in time r, which is equal to or greater than z,"~, measured from the time that First Pointer 170 is directed to the data storage area into which the next set of incoming data (from the next sampling period) are to be stored.
Stated differently, when First Pointer 170 advances to the next-in-order data storage area, Second Pointer 180 also advances to the next data storage area if data in the preceding data storage area did not meet the S/N
threshold. However, if those data did reach the S/N ratio, then Second Pointer 180 advances rapidly ahead to permit the DSP to read and process the data of that storage area forward in time, as well as to read and processes the data of subsequent next-in-order data storage areas relating to the event.
Thus, when an event is detected, Second Pointer 180 advances in the direction of circular arrow 190 to the next-in-order data storage area with the next-in-time data for the event. In so doing, Second Pointer 180 will "overrun" fixed lag time r, but will not overrun First Pointer 170 because z is at least equal to the longest possible event.
Alternative embodiments can employ a plurality of DSPs or other standard processors to increase processing efficiency as Second Pointer 180 advances rapidly to process an event. With such a plurality of DSPs, the user can specify their order of processing as Second Pointer 180 advances through the series of data storage areas with data from the event.
In addition, more sophisticated standard protocols or other standard protocols can be employed for determining whether data in a given data storage area belong to a peak from an event. For example, when each WO 99/57955 PCf/US99/10318 II
set of data in a series of data storage areas does not meet the user specified S/N threshold, but the values of each set of data from the series of data storage areas are monotonically increasing or otherwise substantially increasing by a user specified amount, and/or within a few data storage areas the increasing sets of data mature into a peak or other recognizable event, then Second Pointer 180 retreats to the first-in-order data storage area with data now deemed (by virtue of the logic programmed into the software therefor) consistent with the occurrence of an event. Therefore, the data of such a series of data storage areas are thereby processed as being part of a peak of an event.
This is the reason for the requirement of having a circular buffer or a functional equivalent; i.e., a means to reexamine previous data in view of data subsequent in time that confirm the presence of an event. Thus, this embodiment provides powerful additional analytical power over prior art flow analyzers and other measurement devices. The term circular buffer (and other equivalent expressions, such as "circular buffer means" and "circular memory structure") refers to a memory structure or device comprising data storage areas that are linked or related in a prescribed order in a fashion that permits a number of functional capabilities. One functional capability comprises the capability of ordered or predetermined filling (for example, next-in-time or other addressable fashion) of those data storage areas with consecutive packets of data. Alternatively, or in addition, another functional capability is to store data and permit the data to be output in a predetermined manner, while also allowing a predetermined amount of back or past data to be retrieved therefrom.
Once all of the discrete number of data storage areas each have a packet of data, a second cycle of ordered filling commences with the next-in-time data overwriting the data in the data storage area having the oldest data, and so forth for all subsequent cycles, where each cycle transmits consecutive data packets into data storage areas in the same order or in the same addressable fashion as the previous cycle.
A second functional capability is that of permitting a pointer (for example, Second Pointer 180) to go back in time and reexamine data in view of subsequent data, per one or more user specified criteria. In addition, it is important to recognize that other buffer structures (whether presently available or developed in the future) that accomplish results that are functionally equivalent to those described herein above, as required by the instant invention, are encompassed by the instant invention.
Two non-limiting examples can be mentioned: 1) cascading double or triple buffers, and/or 2) First In-First Out buffers which are coupled with at least one cache to which data from each respective data storage area are transferred when Second Pointer 180 advances to the next data storage area. In addition, any other buffer exhibiting the above two functional capabilities are hereby explicitly encompassed by the instant invention.
Referring to Fig. 2, the processing logic of data transfer to circular buffer 100 of Fig. 1 is shown. Step 200 shows that First Pointer 170 is directed to the storage area of circular buffer 100 having the oldest data. Sample Period N then occurs 202, and sensors sample and measure light parameters, and high speed analog to digital (A/D) converters digitize the data 204. Digitized data from the sensors are then transmitted 206 to the data storage area to which First Pointer 170 is directed, and the oldest data are overwritten. When the length of a sample period (inverse of the sampling frequency) has passed, measured from the position of First Pointer 170 at step 200, First Pointer 170 advances 210 to the next-in-order data storage area or predetermined data storage area, which has the next-in-time data, which now are the oldest data in the circular buffer; and the cycle (equivalent to the sequential combination of steps 204, 206, and 210) continues, beginning with the next sampling period N + 1 (212).
In the case of an analytical process that is just starting, the equivalent of steps 200 - 206 will apply, though the data storage areas initially will be empty, because there are no data to be overwritten. For example, if the sampling rate is one million per second, and if there are one thousand data storage areas, such a state of empty data storage areas will exist for substantially only one thousandth of a second.
For purposes of analysis, an event is defined by the user with respect to a minimum datum criterion, for example, when the signal-to-noise (S/N) ratio is equal to a threshold value of about 2 or 3, or other threshold value. The S/N threshold value may be increased or decreased to compensate for the degree of purity of the samples (for example, whether integrity of the particles is high, or many of the particles have crumbled into smaller entities) and/or the purity of the fluid, or to compensate for any other situation (for example, bubbles) affecting background noise in the cytometric or other flow measurement readings, or in readings from any other measurement device.
In effect, the SM threshold may be adjusted to reflect the range of anticipated small signal amplitudes, particularly including amplitudes of background signals. As is indicated above in the discussion of Fig. 1, more sophisticated SIN threshold strategies can be employed when the application will benefit.
The rate of sampling also is selected by the user, for example, one million sampling periods per second, or smaller or greater. Typically, a fixed rate of oversampling is used that creates about 8-12 sampling periods per average event, with a maximum of about 20 sampling moments per event. However, greater or lesser values may be used according to a particular application; for example, when there is a complex or broad, multi-peak fluorescence emission spectrum, more than 50 or 100 sampling periods per event can be specified advantageously.
Referring now to Fig. 3, at times not distant from the measuring, transmitting, and storing of new data, as outlined by consecutive steps 200, 202, 204, 206, and 210 of Fig. 2, data processing occurs with respect to data stored elsewhere in circular buffer 100, starting with step 300. At step 300, Second Pointer 180 is directed to the data storage area that stores data collected no less than r sec.
previously, which period of time is also referred to as the "fixed trailing distance." The DSP then reads the data 302, and determines 304 whether the data reach the user selected S/N threshold so as to warrant processing 306 by the DSP.
If the S/N ratio threshold has been reached, the data in that data storage area are processed 306, Second Pointer 180 advances to the next-in-order data storage area 330, and a determination is made as to whether the data in that storage area reach the S/N threshold 304.
On the other hand, if the S/N ratio threshold has not been reached by the data in the particular data storage area, then more sophisticated standard analytical strategies are employed, such as asking if there is an upward trend in consecutive subthreshold data 340. If the answer is "yes," then Second Pointer I80 goes back to data at the beginning of the trend 350, and processes the data in the series of consecutive data storage areas that constitute the "trend" 360. Subsequently, Second Pointer 180 advances to the data storage area with the next-in-time data 370, and the cycle begins again with the question "Has the S/N
threshold been reached" 304.
Alternative or additional algorithms can be employed at steps 340 and/or 360.
For example, a "small signal detector algorithm" that facilitates inter-processor (for example, inter-DSP) communication with respect to data that do not meet the S/N threshold. For example, when a plurality of DSPs is employed, such an algorithm will direct each of the plurality of DSPs to cooperatively go back in time to preceding data that, individually or collectively, may constitute a portion of an event peak that is developing.
Likewise, such an algorithm also can be employed for the "end" portion of an event peak. In effect, this kind of algorithm signals the need for additional scrutiny by one or more analytical programs that can include, for example, fitting and/or smoothing and/or rounding and/or other programs that provide a basis for additional signal processing.
On the other hand, if there is no upward trend in subthreshold data (or if any other user specified criterion applies, such as length of an event), then a pause or wait 308 is made. Next, the question "Has lag time z been met?" is posed 310; i.e., were the data in the data storage area collected and stored no less than z sec. previous to current time, as measured relative to First Pointer 170? If the answer is "No," a further wait 308 is imposed, and cycling back to the question of step 310 is performed. If the answer is "Yes," Second Pointer 180 then advances 320 to the next-in-order data storage area that has the next-in-time data. The particular data storage area to be examined next is always the one with data stored from the sampling period immediately following the sampling period just examined, i.e., next-in-time (see direction of circular arrow 190 in Fig. 1). Subsequently, a new cycle of data reading and processing commences.
A number of such cycles of collecting and processing of data can occur before the next event occurs. For example, if there are one million sampling periods per second (i.e., the sampling rate), and if 20,000 cells and/or particles ("events") are read per second, which is the fastest rate currently commercially available, then the average eventless time between samples is about 40 milliseconds if 10 sampling periods are required to collect the data of a single event. When circular buffer 100 is selected to have one thousand data storage areas, then data in those thousand data storage areas represent sampling over a period of one thousandth of a second.
Thus, the average eventless time of about 40 milliseconds translates into an average of about 40 sampling periods with no detectable data until the next event. Calculation also shows that, at a given instant in time, a circular buffer with 1,000 data storage areas will have data from about 20 events [1,000 milliseconds/(10 milliseconds event length + 40 milliseconds eventless time)]. Data storage areas holding data for inter-event periods are filled with background noise data.
In a preferred embodiment, simultaneous data samples (for example, from a single sampling period) from each of a plurality of channels of data that have been detected and digitized are stored in a single data storage area. For example, a detector for one channel will collect and transmit data on scattered excitation light; a detector for a second channel will collect and transmit data on fluorescence emission data of a first fluorescent dye; a detector from a third channel will collect and transmit data on fluorescence emission from a second fluorescent dye; and all of these data are stored in or on a single data storage area.
A larger number of data storage areas may be employed for simultaneous data from a multitude of channels, with order of processing being specified by the user. For example, three channels can be used to collect emission data from three spectrally distinct fluorescent dyes; one channel can collect forward scattered 5 light; one channel can collect side scattered light; and the order for processing data from the five channels is specified by the user. Alternatively, five separate data storage areas can be used respectively to store data from the five channels, where the order of storage is user specified.
In another embodiment, more than one DSP can be employed to work in concert with Second Pointer 180 as a solution to the problem that processing activities often take considerable time. For example, time 10 consuming digital filtering (for example, standard finite impulse response filtering, or "FIR") can be used, and/or any of various waveform analysis procedures that are often employed to improve the quality of data extracted in the presence of noise. When more than one DSP is so employed, the user specifies the order of processing by the respective DSPs or other processors. For example, a first DSP processes data of the next-in-order data storage area, a second DSP processes data of the (now) next-in-order data storage area, and so forth.
15 Other configurations are also possible in accordance with the present invention.
It is beneficial that the present invention permits the user to specify not only the S/N threshold, but also optionally the order of transmission and processing of multiple channels of data from events, the order of processing when there are multiple DSPs, the size of a data storage area, the number of data storage areas and/or the total size of circular buffer. Thus, in instances of complex emission peaks, multiple data inputs, or any other complicated data stream, the user can readily adapt the data storage parameters and other parameters to fit the current use, thus ensuring efficient processing and ample data storage capacity to accommodate at least the largest possible quantity of data resulting from one or more events occurring in close time proximity.
In a preferred embodiment, circular buffer 100 has 1,000 or more data storage areas that each hold all incoming data from two or more channels (or three or more in complex analytical applications). A typical minimum configuration includes one channel collecting scattered light from excitation light, a second channel collecting fluorescence emission light from a first fluorescent dye, and a third channel collecting fluorescence emission light from a second fluorescent dye. However, depending on the application, as few as one channel or as many as five or more channels can provide the incoming data to circular buffer 100. The upper limit of channels is immaterial to the present invention, but more than five channels clearly is within the scope of the present invention.
Referring to Fig. 4, a schematic is shown for functioning of circular buffer 100 within a flow analyzer 420, for example, a flow cytometer. Laser light beam 402 from laser 400 is shown to impinge on a particle 406 as it passes through examination zone 404 of a flow cuvette. Light 422, 424 that is scattered, emitted (for example, fluorescence emission), refracted, or otherwise produced is then sensed by one or more detectors 408, 410, which then transmit their data 426, 428 to their respective FADC (filtering, amplification, and digital conversion) units 412, 414. The FADCs then transmit 430, 432 their respective resulting digitized data to circular buffer 100. By the processes described herein above, circular buffer 100 then transmits 434 data meeting the user specified S/N threshold to a DSP or other data processor 416 for final data processing. Results of processing by the DSP or other processor 416 are then output 436 as the final, processed data 418. It is important to recognize that circular buffer 100 may comprise a part of DSP or other processor 416, or be operatively coupled thereto.
Also, it is important to recognize that other buffers can be used in place of circular buffer 100, and yet fulfill the accomplishments described herein above with respect to circular buffer 100, for example, cascading buffers, and First In-First Out buffers which utilize a cache for re-reading and/or reprocessing data when so directed by Second Pointer 180.
The present invention is directed to use with flow cytometers, flow analyzers, other flow measurement devices, etc. The processing logic of the present invention that, in effect, permits digitized signals to be stored rapidly, and thereafter be processed by at least one DSP or other processor (using eventless time periods to conduct the time consuming procedures of signal processing), can be applied equally well to other measurement applications.
Attached hereto as part of the instant Specification in the APPENDIX is a copy of an assembly language program that implements one embodiment of the present invention.
.MODULE/ABS=0 LX1;
.pagelength 44;
/* This software is written in the native assembly language of the Analog Devices 2181 Digital Signal Processor.
The purpose of this code is to oversample bead fluorescence in each of 5 consecutive channels to isolate single bead events and report the fluor area in each channel. The program double buffers the data for the 187 micro, and uses the following interrupts for interprocessor signalling From 167 to IRQ this program:
p2.0 1RQ0 go to idle state p2.1 1RQ1 new data in control area p2.2 FI begin capture (this is a state, not IRQ) p2.3-PWRDN nmi begin execution at PM Ox2c From this program to IRQ 167:
FLO_EXOIN buffer 0 is ready FL1 EX11N buffer 1 is ready FL2-F~C21N error occurred during capture state All PM and DM are accessible from the 167 thru IDMA so mem areas are asigned and restricted.
PM is loaded from EPROM but may be rewritten by:
1) IRQO (p2.0) 2) rewrite with vector to first instruction at Ox2c 3) PWRDN nmi (p2.3) DM allocation (in hex) is:
0-ff reserved for 2181 100-1 ff DSP status area, read only to 167 200-2ff DSP control area, read alll write restricted to 167 300-3ff DSP command area, read/write 167, read / restricted write to DSP
400-9ff buffer 0, 1536 words, 384 max block size a00-fff buffer 1 1000-3dff reserved for DSP raw AID data */
.CONST PFLAGS=OX3FE5;
I" DSPs variable area */
.VAR/dm/ABS = 0 version,actbuf,pki5,wid,svi6,svavg,svlft,fstart,Ils,hls,svi3,svi7,svcry,haf,lo5 ,recbuf[5],left;
.VAR/dm/ABS = 0x80 bkgnd[10];
.VARIdm/ABS = 0x90 inbkgnd[10];
.VAR/dm/ABS = OxaO x8bkgnd(10];
.VAR/dm/ABS = OxbO histbk[10];
r DSP status */
.VAR/dm/ABS = OX100 misscnt, xxl, bufOcnt, xx2, buflcnt, xx3, otrcnt,xx4,afreg,xx5,nobgsub;
/* DSP control *I
.VAR/dm/ABS = 0X200 bufOsiz, xa1, buflsiz, xa2, thresh, xa3, mcready, xa4, clock, xa5, lena,xa6,bcntl,xa7,bcnth;
/" DSP command */
.VARIdm/ABS = OX300 address,xxbl,hiword,xxb2,lobyte,xxb3,msg;
.VAR/dm/ABS = OX400 outbuf0;
.VAR/dm/ABS = OXa00 outbuf1;
I* raw data area *I
.VAR/dm/abs = 0x1000 hist[0x1000] ;
VAR/dm/circ/abs = 0x2000 workbut[0x1 e00] ;
I* interrupt vectors *I
dis ints;
jump begin; /*reset irq*/
nop;
nop;
jump irqfl; !*read 4 fluorescence measurements*/
nop;
nop;
nop;
rti; /*irqL1 '/
nop;
nop;
nop;
rti; /*irqLO */
nop;
nop;
nop;
rti; /*sp0 tx*/
nop;
nop;
nop;
rti; /'sp0 rx*/
nop;
nop;
nop;
rti; /*irq E */
nop;
nop;
nop;
jump bdmadone;1*irq BdmA'/
nop;
nop;
nop;
jump procnewctl;/*irq1-new data in control area'/
nop;
nop;
nop;
jump doidle; /*go to idle mode, wait for nmi*/
nop;
nop;
nop;
jump tim exp; /*timer*/
nop;
nop;
nop;
softload:
m0=0;
l0=0;
i0="address;
ax0=-1;
dm(i0,m0)=ax0;
11=0;
12=0;
15=0;
ax0=Oxd000; !" set up restart params */
dm(Ox3fef)=ax0;
i1 ~hiword;
i2=~lobyte;
Idpgm: ay0=dm(i0,m0);
ar=pass ay0;
if It jump Idpgm;l' negative number means no new program yet */
i5=ay0; /* point to addr of new instruction *I
ax0=dm(i2,m0); I* get low byte *I
px=ax0;
ax0=dm(i1,m0); /" get hi word */
pm(i5,m5)=ax0; /*m reg doesn't matter */
ax0=-1;
dm(i0,m0)=ax0;
ar=pass ay0; 1* if 0 then its the last instruction *I
if eq jump Idend;
set fl2;
nop;
reset f12;
jump Idpgm;
Idend: idle ;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
/* initalization sequence */
begin: imask=0;
icntl=0x7; /*no nesting, irq2,1,0=edge*/
dis timer;
10=0;
11=0;
12=0;
13=0;
17=0;
16=0x1 e00;
mstat=0x10; /'integer placement*l ax0=0;
dm(lena)=ax0;
m0=2;
m1=-1;
m2=1;
m3=0;
m4=-20;
m5=1;
m6=5;
m7=0;
i 1=Ox3fff;
dm(i1,m1)=0;
dm(il,m1)=Ox3ff8; /* atod is ZERO wait state */
dm(il,m1)=0; /*tperiod*/
dm(il,m1)=0; !'tcount*/
dm(il,m1)=15; /*tscale to 1 us per cnt*/
dm(il,m1)=0; I*sp0*/
dm(il,m1)=0;
dm(il,m1)=0;
dm(i1,m1)=0;
dm(i1,m1)=0; /'3ff6*/
dm(i1,m1 )=0;
drri(i1,m 1 )=0;
dm(il,m1)=0;
dm(i1,m1)=0x4000; /'ena internal clock gen*/
dm(il,m1)=15; !*ser clock out to 1.024 MHz*/
dm(i1,m1)=0; /"' addr 3ff0*/
dm(il,m1)=Oxd000; /* set up power down options */
i1 = Ox3fe5;
dm(i1,m2)=0x0; /*set pf0-7 to 0 */
dm(i1,m1)=Ox78ff; I*pf0-7 are outputs*/
reset f10;
reset fl1;
reset fl2;
reset flag out; /* set flags for reg control */
ax0=0;
dm(msg)=ax0;
dm(mcready)=ax0;
dm(bcntl)=ax0;
dm(bcnth)=ax0;
dm(nobgsub)=ax0;
cntr=Oxc00;
i0=~outbuf0;
do clrmem until ce;
clrmem: dm(i0,m2)=ax0;
14=0x1 e00;
i4=~workbuf;
r let system stabilize'/
cntr=1000;
do bpirq until ce;
cntr=16000;
do bpirql until ce;
bpirq1: nop;
bpirq: nop;
irqfl:
my1=io(0); /" init for first readapds */
i1 = Ox3fe5;
dm(il,m2)=0x0; l*set pf0-7 to 0 */
call lightsoff;
ifc=Oxff; /*clear all pending irqs*/
jump mainbody; I* for testing only *I
jump waitmc; /* wait for micro to init data areas *I
/* INTERRUPT SERVICE ROUTINES- */
my1=io(1);/* read 0 setup 1 */
.
dm(i4,m5)=my1;
my1=io(2);/* read 1 setup 2 */
dm(i4,m5)=my1;
my1=io(3);/* read 2 setup 3'/
/* ******'"*'"*"*'"'*"'***"*****"*********
for new board, change to io(4) below */
/* ******"*******"*********"*'******"
for old board, change to io(3) below */
dm(i4,m5)=my1;
my1=io(4);/* read 3 setup 4 */
dm(i4,m5)=my1;
my1=io(0);/* read 4 setup 0 */
dm(i4,m5)=my1, af=of+1;
rti;
procnewctl:
rti;
doidle:
rti;
bdmadone:
rti;
tim exp:
rti;
I* This loop is executed while NOT capturing. It only responds to 2 interrupts IRQ 1 means that there is new data in the control area so reinit all variables IRQ 0 means that there is new code in dm that must be moved to pm and executed */
Mainbody:
if flag in call capture;
ax0=dm(lena); !"turn on lasers */
ar=setbit 7 of ax0; !*enable overflow bit of a/d converter */
dm(pflags)=ar;
imask = 0x206; !"allow idle or new ctl msg */
ena ints;
nop;
nop;
nop;
nop;
i0="workbuf;
ax0=dm(i0,m2); /* write background in same order as recbuf */
dm(bkgnd)=ax0;
ax0=dm(i0,m2);
dm(bkgnd+2)=ax0;
ax0=dm(i0,m2);
dm(bkgnd+4)=ax0;
ax0=dm(i0,m2);
dm(bkgnd+6)=ax0;
ax0=dm(i0,m2);
dm(bkgnd+8)=ax0;
jump mainbody;
/* All subroutines here at the end */
capture:
14=0x1 e00;
15=0x1 e00;
ax0=dm(lena); /"turn on lasers */
ar=clrbit 7 of ax0; /* disable overflow bit of ald convt */
dm(ptlags)=ar;
dis ints;
call clrhist;
af=pass 0;
i4="workbuf;
i3="hist;
i5=~workbuf;
i7=~x8bkgnd;
imask=0x200;
ena ints;
cntr--4; /* do four background histograms */
do bigloop until ce;
cntr=4000; /* take 4000 samples for histogram */
do bldhist until ce;
pace: ar=pass af; /* any samples to proc */
if le jump pace;
ax0=dm(i5,m6); /* get samp */
ar=ax0-0x1000; I* range check *I
if ge jump bldhist;
ay0=~hist; I* base addr *I
ar=ax0+ay0; /' base + offset *!
i3=ar; /*point into hist */
ay1=dm(i3,m3); /' get current val */
ar=ay1+1;
dm(i3,m3)=ar;
bldhist: nop;
/* now find most frequent occurrance in hist */
i3="hist;
cntr=Oxfff;
ax0=dm(i3,m2); /' get first entry *I
dm(svi3)=i3;
ayt)=axt); /" ay0 holds highest val so far */
do findmax until ce;
ax0=dm(i3.m2);
ar=ax0-ayl);
if le.jump findmax;
ay0=ax0; rnew high val found *l dm(svi3)=i3; l' save offset +1 (post inc) *I
findmax: nop;
axt)=dm(svi3);I' get ptr to best +1 */
ay0=~hist + l' since i3 is plus 1 *I
1;
ar=ax0-ay0; hcompensate for base */
si=ar; I" save bkgnd for shift later *I
ay0--~hist;
ar=ar+ay0; /'talc index to peak */
i3=ar; /'point to peak in hist */
ay0=dm(i3,m1);/"get pk, pnt to previous */
ax0=dm(i3,mt));/*get prev, pnt to other side of pk */
ay1=dm(i3,m1);/" pnt back to peak */
ax1=1;
ar=ax0-ay1; r which pk is second highest */
if It jump poside;
ax1=-1; r int pk will be less */
ay1=axt);
poside: !* now ay1 has val of 2nd peak *I
sr=Ishift si o); !* mutt by 8 *I
by 3 (l si=ay0;
ay0=srt); I"ay0 is 8x bkgnd and is ready for adj *I
sr=Ishift si by -2(l0);
/' get 1/4 of peak height */
intlp: ar=ay1-sr0;/' reduce 2nd pk by 1/4 of main */
if It jump intend;
ay1=ar;
ar=ax1+ayt); !'adjust background + or -'!
ay0=ar;
jump intlp;
intend: dm(i7,m5)=ay0;I* save final bkgnd */
call clrhist;
bigloop: modify(i5,m5); /*point to next channel *I
i3=~x8bkgnd;
i1="bkgnd;
cntr=4;
do div8 until ce;
si=dm(i3,m2); /'get avg background , inc +2*/
sr=Ishift si by -3 (lo);
div8: dm(il,ml))=sr0;
af=pass 0;
ax0=0;
dm(misscnt)=ax0;
dm(bufOcnt)=ax0;
dm(bufl cnt)=ax0;
dm(otrcnt)=ax0;
dm(actbuf)=ax0;
ax0=dm(clock);
dm(Ox3ff1)=ax0; /* set sample clk freq */
i4=~workbuf;
i5=~workbuf;
ifc=Oxff;
imask=0x200; r ena fl ints */
i0=~outbuf0;
resetc: if not flag in jump capexit;
ax0=0;
ar=pass af;
dm(afreg)=ar;
ena ints;
newsamp: if not flag in jump capexit;
ar=pass af; /* load ax0 with # of new samps */
ar=ar-64; /* are we 64 records ahead */
if le jump newsamp;
af=of l,ay0=dm(i5,m6); /"get ssc, inc to next record */
ax0=dm(thresh);
ar=ax0-ay0; /* above thresh then its a bead *J
if ge jump newsamp;
!* got a bead */
dm(pki5)=i5;
dm(fstart)=i5;
ax1=ay0; I* init peak ssc */
ay1=0; I* init width count *l moresamp:
af=of 1,ay0=dm(i5,m6); /* next next ssc, dec rec count */
ar=ay1+1; I" inc width count *I
ay1=ar,ar=ax1-ay0 ; 1" is new ssc higher *I
if ge jump ckdone;
dm(pki5)=i5;
ax1=ay0; I* save peak ssc *I
ckdone: ar=pass af; I* out of records *I
if eq jump bubble; /* if 0 then bubble */
ar=ax0-ay0; /' back below thresh yet? */
if le jump moresamp;
i6=dm(pki5);
modify(i6,m4); I" since past inc, sub 20 *I
dm(wid)=ay1;
!* build a record with peaks or estimates of peaks */
12=0x1 e00;
i2=i6;
call i2sum;
dm(recbuf)=ay1; store ssc in recbuf'/
modify(i6,m5); I" add 1 to point to fl2 pk -15 */
i2=i6;
call i2sum;
dm(recbuf+1 )=ay1; !* store cl1 sum */
modify(i6,m5); /* add 1 to point to fl3 pk -15 */
i2=i6;
call i2sum;
dm(recbuf+2)=ay1; I* store cl2 sum *I
modify(i6,m5); I* add 1 to point to fl4 pk -15 *I
i2=i6;
call i2sum;
dm(recbuf+3)=ay1; r store cl3 sum */
modify(i6,m5); I* add 1 to point to fl1 pk -15 *I
dm(svi6)=i6; I'align point with red laser */
modify(i6,m4); I* back up 20 more to fl1 peak -35 */
modify(i6,m4); I* back up 20 more to fl1 peak -55 */
/*modify(i6,m4); back up 20 more to fl1 peak -75 */
1* since fl1 is a different laser, refind peak to allow for alignment differences, search from -15 to +16 *I
ax0=dm(i6,m6); I" get 1st fl1 sample *I
m7=160;
m7=350; !'for new filter at 50 khz '/
modify(i6,m7};
m7=0;
ay0=dm(i6,m6);
ar=ax0+ay0;
sr=Ishift ar by -2 (LO);
ay0=sr0;
ar=ar+ay0;
dm(x8bkgnd+4)=ar;
i6=dm(svi6); !* test using no peak find */
m7=40;
modify(i6,m7); /'move right 8 samples due to skew of 50k filter *I
m7=0;
cntr=7;
modify(i6,m6);
dm(pki5)=i6;
ay0=dm(i6,m6); /* get 1 st fl1 sample */
ax1=ay0; /* move to old fl1 val */
do rp1 pk until ce;
ay0=dm(i6,m6);
ar=ax1-ay0; /* is it a new peak?*/
if gt jump rp1 pk;
dm(pki5)=i6; I* store addr +5 of new peak (post inc) *I
ax1=ay0;
rp1 pk: nop;
i6=dm(pki5);
modify(i6,m4); h sub 20 to back up 3 samples from pk (was +5)*/
modify(i6,m4); r sub 20 to back up 4 samples 50 k version'/
i2=i6;
call i2sum14;
sr=Ishift si by -3 (HI); I" shift carry *I
sr=sr or Ishift ar by -3 (LO);
dm(recbuf+4)=sr0; /'store rp1 */
12=0; /* restore for non circ buffr use */
r ok, we have singlet and recbuf is built *!
i7=~recbuf;
i3=~x8bkgnd;
cntr-4;
WO 99/57955 PCT/US99/1031 ti do subback until ce;
ax0=dm(i7,m7); /* get val inc 0 */
ay0=dm(i3,m2);
ar=ax0-ay0;
if It ar=pass 0;
subback: dm(i7,m5)=ar;
ax0=dm(nobgsub);
ar=pass ax0;
if ne jump recbdone;
ax0=dm(i7,m7); /* get val inc 0 */
ay0=dm(i3,m2);
ar=ax0-ay0;
if It ar=pass 0;
dm(i7,m5)=ar;
/********Sub rlt bg from rp1*******"'*/
recbdone:
I* record bead count *I
ay1=dm(bcntl);
ar=ay1 +1;
dm(bcntl)=ar;
ar=dm(bcnth);
ar=ar+C;
dm(bcnth)=ar;
i2=~recbuf;
ay1=dm(actbuf);
none=pass ay1;
if ne jump usebufl;
ay1=dm(bufOcnt);
none=pass ayl;
if gt jump noi0init; !* is this first of block */
i0="outbuf0;
noi0init:
ax1=dm(bufOsiz); !" check for overflow */
none = ax1 - ay1;
if ne jump noover;
ay1=dm(misscnt);
ar=ay1 +1;
dm(misscnt)=ar;
jump resetc;
noover: cntr=5;
do movout0 until ce;
ar=dm(i2,m2);
movout0: dm(i0,m0)=ar; r store ssc inc by 2 for even addr*/
ay0=dm(bufOcnt);
ar=ay0+1;
dm(bufOcnt)=ar;
ay0=dm(bufOsiz); /' enough records to irq 167? */
ar=ar-ay0;
if ne jump resetc;
set f10;
nop; I* c167 needs 50 ns min to get edge */
nop;
reset fl0;
ay1=1;
dm(actbuf)=ay1; I" change to buffer 1 */
jump resetc;
usebufl ayi =dm(buf1 cnt);
none=pass ay1;
if gt jump noii init; I* is this first of block *I
i0="outbufl ;
noil init:
ax1=dm(buflsiz); /* check for overflow */
none = ax1 - ay1;
if ne jump noover1;
ay1=dm(misscnt);
ar=ay1 +1;
dm(misscnt)=ar;
jump capture; /* major overflow reset and restart capture */
noover1: cntr=5;
do movout1 until ce;
ar=dm(i2,m2):
movoutl : dm(i0,m0)=ar; I" store ssc inc by 2 for even addr*/
ay0=dm(buf1 cnt);
ar=ay0+1;
dm(bufl cnt)=ar;
ay0=dm(buf1siz); I* enough records to irq 167? *I
ar-ar-ay0;
if ne jump resetc;
set fl1;
nop; /* c167 needs 50 ns min to get edge */
nop;
reset fl1;
ay1=0;
dm(actbuf)=ay1; /* change back to buffer 0 *I
jump resetc;
capexit:
i1 = Ox3fe5;
dm(il,m2)=0x0; /*set pf0-7 to 0 */
ifc=Oxff;
rts;
i2sum14:
m0=5;
ar=pass O,ay1=dm(i2,m0);
si=0; /* use for carry */
dm(svcry)=si;
cntr=20;
do grate4 until ce;
ar=ar+ay1,ay1=dm(i2,m0);
if not ac jump grate4;
dis ints;
ena sec reg;
ay0=dm(svcry);
ar=ay0+1;
dm(svcry)=ar;
dis sec reg;
ena ints;
grate4: nop;
ay1=ar;
si=dm(svcry);
m0=2;
rts;
i2sum: m0=5;
ar=pass O,ay1=dm(i2,m0);
cntr=8;
do grate until ce;
grate: ar=ar+ay1,ay1=dm(i2,m0);
ay1=ar;
m0=2;
rts;
bubble:
lightsoff:
if not flag in jump capexit;
ar=pass /* load ax0 with # of af; new samps */
ar=ar-256;r are we 64 records *4 ahead '/
if le jump bubble;
af=of 1,ay0=dm(i5,m6);
I*get ssc, inc to next record */
ax0=dm(thresh);
ar=ax0-ay0;/* are we below thresh yet */
if le jumph no, keep waiting "/
bubble;
jump newsamp;
ax0=Ox24d;
ax0=0x63; l*****"*'"*****"'*''test**"**''****/
dm(version)=ax0;
rts;
Grhist:
i3=~hist;
ax0=0;
cntr=0x1000;
do zit until ce;
zit: dm(i3,m2)=ax0;
rts;
waitmc:
toggle fo;
ax0=dm(mcready); h wait until me writes non zero to mcready *!
ar=pass ax0;
if eq jump waitmc;
jump malnbody;
.ENDMOD;
However, larger and smaller figures can be utilized according to the particular application.
When a plurality of DSPs is used, the user may specify the order of use of the respective DSPs. For example, one DSP can control storage of data incoming to the circular buffer, and one or a plurality of DSPs can handle processing of the data, as directed by the Second Pointer.
Buffers that are functionally equivalent to circular buffers also can be used, for example, a First In-First Out buffer which temporarily stores data (or lack thereof) from the respective data storage areas into one or more caches for possible later processing; double or triple cascading buffers;
etc.
In another embodiment, an FPGA (Field Programmable Gate Array) may be programmed as a state machine, for example, with four or five states, to replace use of a DSP for inputting data into the circular buffer or functional equivalent.
The above broad outline of the more important features of the instant invention has been presented 1 ) to facilitate understanding of the following sections, which provide greater detail with respect to components of the instant invention, and 2) to succinctly highlight contributions of the instant invention to the art. However, it is to be understood that the above outline, as well as the terminology and details as to construction, arrangement and practice of the instant invention presented in the following sections, are exemplary and not limiting; i.e., the instant invention is capable of other embodiments as to construction, arrangement and practice.
As such, those skilled in the art will appreciate that the conception, upon which this disclosure is based, can readily be utilized as a basis for designing other structures and methods of practice to execute the purposes of the instant invention. Therefore, it is important that the instant disclosure and claims be regarded as embracing equivalent constructions and practices insofar as they do not depart from the spirit and scope of the invention as disclosed herein.
Another purpose for this SUMMARY OF THE INVENTION section is to enable the U.S. Patent Office and the public generally, including scientists, engineers and practitioner in the art who are not familiar with patent or legal terms or phraseology herein, to quickly determine the nature and essence of the instant disclosure with only cursory review. Thus, the intention of this section is not to limit the scope of the instant invention in any way.
For a more complete understanding of the instant invention, including its operating advantages and various uses, reference should be made to the following drawings, descriptive matter, and claims, which illustrate preferred embodiments of the invention.
BRIEF DESCRIPTION OF THE DRAWINGS
Fig. 1 is an embodiment of a circular buffer according to the instant invention.
Fig. 2 is a flow chart of an embodiment for writing data from a flow analyzer to the circular buffer of Fig.
1.
Fig. 3 is a flow chart of an embodiment for reading and processing data from the circular buffer of Fig. 1.
Fig. 4 is a schematic showing the functioning of a circular buffer within a flow analyzer.
DESCRIPTION OF THE PREFERRED EMBODIMENTS
The present invention provides a system and method of reducing the dead time to zero or substantially zero in flow analyzers, flow cytometers; and other measurement devices.
Advantageously, the present invention provides the user the ability to specify one or more data collection, data storage, and data processing parameters, such as size of data storage areas, number of data storage areas, sampling rate (and/or the inverse:
length of sampling or sample period), signal-to-noise (S/N) threshold, and fixed trailing distance.
Each data storage area is configured to receive and store data from, for example, one or more sampling periods. The data storage areas are optionally linked in an order that provides storage for data from a next-in-time sampling period into the next-in-order data storage area. A First Pointer (or first logical pointer) directs receipt and storage of data of the next-in-time sampling period into the next-in-order data storage area. Once all data storage areas contain data, the First Pointer directs receipt of data of the next-in-time sampling period, and storage by overwriting therewith the data in the next-in-order data storage area, which contain the oldest data of the buffer, such as a standard circular buffer.
A Second Pointer (or second logical pointer) is directed to the data storage area that stores data from a sample period preceding the current time by at least a fixed or predetermined trailing distance with reference, for example, to the First Pointer or other reference. The Second Pointer directs at least one digital signal processor (DSP) or other data processor to read and process data in the data storage area to which the Second Pointer is directed.
Once the next-in-time data from the current sampling period have been stored, the First Pointer advances to the next-in-order data storage area. In addition, once data in the data storage area to which the Second Pointer is directed have been processed, the Second Pointer advances to the next-in-order data storage area to repeat the cycle of data processing, followed by advancement to the next-in-order data storage area.
The present invention is based, in part, on my discovery that samples containing important data were being lost in data collection of analyzing equipment, such as flow analyzers or cytometers. As a result, the overall accuracy of the cytometer was questionable or could be improved. Accordingly, having realized that important samples were being lost for certain applications described above, I determined that an addressable buffer having the capability of obtaining a predetermined amount of data backward in time would improve the overall accuracy and effciency of the flow analyzer or cytometer.
Other addressable buffers can alternatively be used where the addressable range of data allows the system to go forward and sufficiently backward to obtain previously collected samples. For example, a FIFO and backward cache combination can alternatively be used in the present invention, as can a cascading buffer. The number of samples for which the buffer need go backward in time varies, depending on the application, but may be anywhere from 1 sample, 20 samples, and higher.
Referring to Fig. 1, an embodiment of a circular buffer (also referred to as a "circular buffer means" or "circular memory structure") 100 having 30 data storage areas is presented.
The 30 data storage areas are represented by consecutive even numbers 102 through 160. First Pointer (or first logical pointer) 170 indicates the data storage area to which the next data sample from the next sample period is to be stored by, for example, overwriting the existing data (if any) when the next data sample is transmitted from a flow analyzer, flow cytometer, or other measurement device to circular buffer 100.
First Pointer 170 is directed to data storage area 102, which, at this particular instant in time, holds the oldest data of the circular buffer, as is indicated by a single asterisk. When data are transmitted to circular storage buffer at the beginning of an analytical procedure, instead of overwriting old data, new data are added consecutively to the data storage areas of circular buffer 100, thus creating a series of linked next-in-time data storage areas.
Circular arrow 190 indicates the forward-in-time direction of advancement both for data acquisition and usual data processing (i.e., not back-in-time processing). Thus, data storage area 104 holds the second oldest data at this instant in time, 106 holds the third oldest data, etc., to data storage area 160, which holds the newest data, as is indicated by a double asterisk. The next set of incoming data from a sample period will overwrite the old data of 102.
Just prior to arrival of the next set of incoming data transmitted to circular buffer 100 from the next sample period, First Pointer 170 advances to data storage area 104, to direct overwriting of the (now) oldest data consecutively for each data storage area, thus continuously advancing in the forward-in-time direction of circular arrow 190. This process continuously creates and updates a series of next-in-order data storage areas that store next-in-time data. Referring again to Fig. 1, Second Pointer (or second logical pointer) 180 is shown as being directed to data storage area 156 of circular buffer 100.
Second Pointer 180 indicates the current data storage area whose data are to be read next and processed by, for example, a DSP or other processor (not shown in the figure) if the data reach a user specified threshold signal-to-noise (S/N) ratio. After the DSP reads the data stored in data storage area 156, Second Pointer 180 advances in the direction of arrow 190 to data storage area 158, and so forth in sequence. As indicated above, other buffer devices may be used that are addressable; therefore, there is no requirement that the above operations necessarily be performed sequentially or in a specific linear manner or order.
The number of data storage areas in a circular buffer or other buffer is flexibly specified by the user to be as large or as small as the requirements of the particular application. For example, a thousand data storage areas provide sufficient means to store one thousand sampling periods, where each sampling period is one microsecond. Circular buffer 100 can comprise more than or less than 1,000 data storage areas; and the length of time of a sampling period can be greater than or less than one millisecond (i.e., the sampling rate can be less than or greater than one million per second).
Similarly, the size of the data storage areas is defined by the user or is user selectable in concert with the requirements of the particular application. For example, a capacity of 12-16 bits per data storage area will suffice for some applications, whereas more than 20 bits will be required in other applications, such as complex and/or high amplitude fluorescence emission or other peaks.
Practice of the present invention does not require a one-to-one (i.e., in locked-step) direct correspondence between the quantity of data read and processed by the DSP (or the time required therefor), as directed by Second Pointer 180, and the quantity of incoming data that overwrites the oldest data (or the time required therefor), as directed by First Pointer 170. For example, First Pointer 170 advances in steady cadence in step with the sampling rate, for example, one million per second. When data in a data storage area do not meet the user specified S/N threshold, Second Pointer 180 also moves in cadence with the sampling rate.
On the other hand, when data in a data storage area do meet a user specified S/N threshold and thus indicate an event in progress, Second Pointer 180 advances quickly to the next-in-time data of the next-in-order 10 data storage area. As long as the data in a data storage area do not meet the user specified S/N threshold, a minimum, fixed lag time z or fixed trailing distance is maintained relative to First Pointer 170, which lag time must be at least equal to z"~, the longest time for an event. Thus, the fixed trailing distance serves as a minimum lag time criterion when data in a data storage area do not meet the S/N threshold.
In other words,z is the user defined lag time between the current transmission of data from a sampling period to circular buffer 100, and the reading by the DSP of insufficient S/N
data stored z sec. previously.
Thus, the DSP is programmed to examine data collected from a point back in time r, which is equal to or greater than z,"~, measured from the time that First Pointer 170 is directed to the data storage area into which the next set of incoming data (from the next sampling period) are to be stored.
Stated differently, when First Pointer 170 advances to the next-in-order data storage area, Second Pointer 180 also advances to the next data storage area if data in the preceding data storage area did not meet the S/N
threshold. However, if those data did reach the S/N ratio, then Second Pointer 180 advances rapidly ahead to permit the DSP to read and process the data of that storage area forward in time, as well as to read and processes the data of subsequent next-in-order data storage areas relating to the event.
Thus, when an event is detected, Second Pointer 180 advances in the direction of circular arrow 190 to the next-in-order data storage area with the next-in-time data for the event. In so doing, Second Pointer 180 will "overrun" fixed lag time r, but will not overrun First Pointer 170 because z is at least equal to the longest possible event.
Alternative embodiments can employ a plurality of DSPs or other standard processors to increase processing efficiency as Second Pointer 180 advances rapidly to process an event. With such a plurality of DSPs, the user can specify their order of processing as Second Pointer 180 advances through the series of data storage areas with data from the event.
In addition, more sophisticated standard protocols or other standard protocols can be employed for determining whether data in a given data storage area belong to a peak from an event. For example, when each WO 99/57955 PCf/US99/10318 II
set of data in a series of data storage areas does not meet the user specified S/N threshold, but the values of each set of data from the series of data storage areas are monotonically increasing or otherwise substantially increasing by a user specified amount, and/or within a few data storage areas the increasing sets of data mature into a peak or other recognizable event, then Second Pointer 180 retreats to the first-in-order data storage area with data now deemed (by virtue of the logic programmed into the software therefor) consistent with the occurrence of an event. Therefore, the data of such a series of data storage areas are thereby processed as being part of a peak of an event.
This is the reason for the requirement of having a circular buffer or a functional equivalent; i.e., a means to reexamine previous data in view of data subsequent in time that confirm the presence of an event. Thus, this embodiment provides powerful additional analytical power over prior art flow analyzers and other measurement devices. The term circular buffer (and other equivalent expressions, such as "circular buffer means" and "circular memory structure") refers to a memory structure or device comprising data storage areas that are linked or related in a prescribed order in a fashion that permits a number of functional capabilities. One functional capability comprises the capability of ordered or predetermined filling (for example, next-in-time or other addressable fashion) of those data storage areas with consecutive packets of data. Alternatively, or in addition, another functional capability is to store data and permit the data to be output in a predetermined manner, while also allowing a predetermined amount of back or past data to be retrieved therefrom.
Once all of the discrete number of data storage areas each have a packet of data, a second cycle of ordered filling commences with the next-in-time data overwriting the data in the data storage area having the oldest data, and so forth for all subsequent cycles, where each cycle transmits consecutive data packets into data storage areas in the same order or in the same addressable fashion as the previous cycle.
A second functional capability is that of permitting a pointer (for example, Second Pointer 180) to go back in time and reexamine data in view of subsequent data, per one or more user specified criteria. In addition, it is important to recognize that other buffer structures (whether presently available or developed in the future) that accomplish results that are functionally equivalent to those described herein above, as required by the instant invention, are encompassed by the instant invention.
Two non-limiting examples can be mentioned: 1) cascading double or triple buffers, and/or 2) First In-First Out buffers which are coupled with at least one cache to which data from each respective data storage area are transferred when Second Pointer 180 advances to the next data storage area. In addition, any other buffer exhibiting the above two functional capabilities are hereby explicitly encompassed by the instant invention.
Referring to Fig. 2, the processing logic of data transfer to circular buffer 100 of Fig. 1 is shown. Step 200 shows that First Pointer 170 is directed to the storage area of circular buffer 100 having the oldest data. Sample Period N then occurs 202, and sensors sample and measure light parameters, and high speed analog to digital (A/D) converters digitize the data 204. Digitized data from the sensors are then transmitted 206 to the data storage area to which First Pointer 170 is directed, and the oldest data are overwritten. When the length of a sample period (inverse of the sampling frequency) has passed, measured from the position of First Pointer 170 at step 200, First Pointer 170 advances 210 to the next-in-order data storage area or predetermined data storage area, which has the next-in-time data, which now are the oldest data in the circular buffer; and the cycle (equivalent to the sequential combination of steps 204, 206, and 210) continues, beginning with the next sampling period N + 1 (212).
In the case of an analytical process that is just starting, the equivalent of steps 200 - 206 will apply, though the data storage areas initially will be empty, because there are no data to be overwritten. For example, if the sampling rate is one million per second, and if there are one thousand data storage areas, such a state of empty data storage areas will exist for substantially only one thousandth of a second.
For purposes of analysis, an event is defined by the user with respect to a minimum datum criterion, for example, when the signal-to-noise (S/N) ratio is equal to a threshold value of about 2 or 3, or other threshold value. The S/N threshold value may be increased or decreased to compensate for the degree of purity of the samples (for example, whether integrity of the particles is high, or many of the particles have crumbled into smaller entities) and/or the purity of the fluid, or to compensate for any other situation (for example, bubbles) affecting background noise in the cytometric or other flow measurement readings, or in readings from any other measurement device.
In effect, the SM threshold may be adjusted to reflect the range of anticipated small signal amplitudes, particularly including amplitudes of background signals. As is indicated above in the discussion of Fig. 1, more sophisticated SIN threshold strategies can be employed when the application will benefit.
The rate of sampling also is selected by the user, for example, one million sampling periods per second, or smaller or greater. Typically, a fixed rate of oversampling is used that creates about 8-12 sampling periods per average event, with a maximum of about 20 sampling moments per event. However, greater or lesser values may be used according to a particular application; for example, when there is a complex or broad, multi-peak fluorescence emission spectrum, more than 50 or 100 sampling periods per event can be specified advantageously.
Referring now to Fig. 3, at times not distant from the measuring, transmitting, and storing of new data, as outlined by consecutive steps 200, 202, 204, 206, and 210 of Fig. 2, data processing occurs with respect to data stored elsewhere in circular buffer 100, starting with step 300. At step 300, Second Pointer 180 is directed to the data storage area that stores data collected no less than r sec.
previously, which period of time is also referred to as the "fixed trailing distance." The DSP then reads the data 302, and determines 304 whether the data reach the user selected S/N threshold so as to warrant processing 306 by the DSP.
If the S/N ratio threshold has been reached, the data in that data storage area are processed 306, Second Pointer 180 advances to the next-in-order data storage area 330, and a determination is made as to whether the data in that storage area reach the S/N threshold 304.
On the other hand, if the S/N ratio threshold has not been reached by the data in the particular data storage area, then more sophisticated standard analytical strategies are employed, such as asking if there is an upward trend in consecutive subthreshold data 340. If the answer is "yes," then Second Pointer I80 goes back to data at the beginning of the trend 350, and processes the data in the series of consecutive data storage areas that constitute the "trend" 360. Subsequently, Second Pointer 180 advances to the data storage area with the next-in-time data 370, and the cycle begins again with the question "Has the S/N
threshold been reached" 304.
Alternative or additional algorithms can be employed at steps 340 and/or 360.
For example, a "small signal detector algorithm" that facilitates inter-processor (for example, inter-DSP) communication with respect to data that do not meet the S/N threshold. For example, when a plurality of DSPs is employed, such an algorithm will direct each of the plurality of DSPs to cooperatively go back in time to preceding data that, individually or collectively, may constitute a portion of an event peak that is developing.
Likewise, such an algorithm also can be employed for the "end" portion of an event peak. In effect, this kind of algorithm signals the need for additional scrutiny by one or more analytical programs that can include, for example, fitting and/or smoothing and/or rounding and/or other programs that provide a basis for additional signal processing.
On the other hand, if there is no upward trend in subthreshold data (or if any other user specified criterion applies, such as length of an event), then a pause or wait 308 is made. Next, the question "Has lag time z been met?" is posed 310; i.e., were the data in the data storage area collected and stored no less than z sec. previous to current time, as measured relative to First Pointer 170? If the answer is "No," a further wait 308 is imposed, and cycling back to the question of step 310 is performed. If the answer is "Yes," Second Pointer 180 then advances 320 to the next-in-order data storage area that has the next-in-time data. The particular data storage area to be examined next is always the one with data stored from the sampling period immediately following the sampling period just examined, i.e., next-in-time (see direction of circular arrow 190 in Fig. 1). Subsequently, a new cycle of data reading and processing commences.
A number of such cycles of collecting and processing of data can occur before the next event occurs. For example, if there are one million sampling periods per second (i.e., the sampling rate), and if 20,000 cells and/or particles ("events") are read per second, which is the fastest rate currently commercially available, then the average eventless time between samples is about 40 milliseconds if 10 sampling periods are required to collect the data of a single event. When circular buffer 100 is selected to have one thousand data storage areas, then data in those thousand data storage areas represent sampling over a period of one thousandth of a second.
Thus, the average eventless time of about 40 milliseconds translates into an average of about 40 sampling periods with no detectable data until the next event. Calculation also shows that, at a given instant in time, a circular buffer with 1,000 data storage areas will have data from about 20 events [1,000 milliseconds/(10 milliseconds event length + 40 milliseconds eventless time)]. Data storage areas holding data for inter-event periods are filled with background noise data.
In a preferred embodiment, simultaneous data samples (for example, from a single sampling period) from each of a plurality of channels of data that have been detected and digitized are stored in a single data storage area. For example, a detector for one channel will collect and transmit data on scattered excitation light; a detector for a second channel will collect and transmit data on fluorescence emission data of a first fluorescent dye; a detector from a third channel will collect and transmit data on fluorescence emission from a second fluorescent dye; and all of these data are stored in or on a single data storage area.
A larger number of data storage areas may be employed for simultaneous data from a multitude of channels, with order of processing being specified by the user. For example, three channels can be used to collect emission data from three spectrally distinct fluorescent dyes; one channel can collect forward scattered 5 light; one channel can collect side scattered light; and the order for processing data from the five channels is specified by the user. Alternatively, five separate data storage areas can be used respectively to store data from the five channels, where the order of storage is user specified.
In another embodiment, more than one DSP can be employed to work in concert with Second Pointer 180 as a solution to the problem that processing activities often take considerable time. For example, time 10 consuming digital filtering (for example, standard finite impulse response filtering, or "FIR") can be used, and/or any of various waveform analysis procedures that are often employed to improve the quality of data extracted in the presence of noise. When more than one DSP is so employed, the user specifies the order of processing by the respective DSPs or other processors. For example, a first DSP processes data of the next-in-order data storage area, a second DSP processes data of the (now) next-in-order data storage area, and so forth.
15 Other configurations are also possible in accordance with the present invention.
It is beneficial that the present invention permits the user to specify not only the S/N threshold, but also optionally the order of transmission and processing of multiple channels of data from events, the order of processing when there are multiple DSPs, the size of a data storage area, the number of data storage areas and/or the total size of circular buffer. Thus, in instances of complex emission peaks, multiple data inputs, or any other complicated data stream, the user can readily adapt the data storage parameters and other parameters to fit the current use, thus ensuring efficient processing and ample data storage capacity to accommodate at least the largest possible quantity of data resulting from one or more events occurring in close time proximity.
In a preferred embodiment, circular buffer 100 has 1,000 or more data storage areas that each hold all incoming data from two or more channels (or three or more in complex analytical applications). A typical minimum configuration includes one channel collecting scattered light from excitation light, a second channel collecting fluorescence emission light from a first fluorescent dye, and a third channel collecting fluorescence emission light from a second fluorescent dye. However, depending on the application, as few as one channel or as many as five or more channels can provide the incoming data to circular buffer 100. The upper limit of channels is immaterial to the present invention, but more than five channels clearly is within the scope of the present invention.
Referring to Fig. 4, a schematic is shown for functioning of circular buffer 100 within a flow analyzer 420, for example, a flow cytometer. Laser light beam 402 from laser 400 is shown to impinge on a particle 406 as it passes through examination zone 404 of a flow cuvette. Light 422, 424 that is scattered, emitted (for example, fluorescence emission), refracted, or otherwise produced is then sensed by one or more detectors 408, 410, which then transmit their data 426, 428 to their respective FADC (filtering, amplification, and digital conversion) units 412, 414. The FADCs then transmit 430, 432 their respective resulting digitized data to circular buffer 100. By the processes described herein above, circular buffer 100 then transmits 434 data meeting the user specified S/N threshold to a DSP or other data processor 416 for final data processing. Results of processing by the DSP or other processor 416 are then output 436 as the final, processed data 418. It is important to recognize that circular buffer 100 may comprise a part of DSP or other processor 416, or be operatively coupled thereto.
Also, it is important to recognize that other buffers can be used in place of circular buffer 100, and yet fulfill the accomplishments described herein above with respect to circular buffer 100, for example, cascading buffers, and First In-First Out buffers which utilize a cache for re-reading and/or reprocessing data when so directed by Second Pointer 180.
The present invention is directed to use with flow cytometers, flow analyzers, other flow measurement devices, etc. The processing logic of the present invention that, in effect, permits digitized signals to be stored rapidly, and thereafter be processed by at least one DSP or other processor (using eventless time periods to conduct the time consuming procedures of signal processing), can be applied equally well to other measurement applications.
Attached hereto as part of the instant Specification in the APPENDIX is a copy of an assembly language program that implements one embodiment of the present invention.
.MODULE/ABS=0 LX1;
.pagelength 44;
/* This software is written in the native assembly language of the Analog Devices 2181 Digital Signal Processor.
The purpose of this code is to oversample bead fluorescence in each of 5 consecutive channels to isolate single bead events and report the fluor area in each channel. The program double buffers the data for the 187 micro, and uses the following interrupts for interprocessor signalling From 167 to IRQ this program:
p2.0 1RQ0 go to idle state p2.1 1RQ1 new data in control area p2.2 FI begin capture (this is a state, not IRQ) p2.3-PWRDN nmi begin execution at PM Ox2c From this program to IRQ 167:
FLO_EXOIN buffer 0 is ready FL1 EX11N buffer 1 is ready FL2-F~C21N error occurred during capture state All PM and DM are accessible from the 167 thru IDMA so mem areas are asigned and restricted.
PM is loaded from EPROM but may be rewritten by:
1) IRQO (p2.0) 2) rewrite with vector to first instruction at Ox2c 3) PWRDN nmi (p2.3) DM allocation (in hex) is:
0-ff reserved for 2181 100-1 ff DSP status area, read only to 167 200-2ff DSP control area, read alll write restricted to 167 300-3ff DSP command area, read/write 167, read / restricted write to DSP
400-9ff buffer 0, 1536 words, 384 max block size a00-fff buffer 1 1000-3dff reserved for DSP raw AID data */
.CONST PFLAGS=OX3FE5;
I" DSPs variable area */
.VAR/dm/ABS = 0 version,actbuf,pki5,wid,svi6,svavg,svlft,fstart,Ils,hls,svi3,svi7,svcry,haf,lo5 ,recbuf[5],left;
.VAR/dm/ABS = 0x80 bkgnd[10];
.VARIdm/ABS = 0x90 inbkgnd[10];
.VAR/dm/ABS = OxaO x8bkgnd(10];
.VAR/dm/ABS = OxbO histbk[10];
r DSP status */
.VAR/dm/ABS = OX100 misscnt, xxl, bufOcnt, xx2, buflcnt, xx3, otrcnt,xx4,afreg,xx5,nobgsub;
/* DSP control *I
.VAR/dm/ABS = 0X200 bufOsiz, xa1, buflsiz, xa2, thresh, xa3, mcready, xa4, clock, xa5, lena,xa6,bcntl,xa7,bcnth;
/" DSP command */
.VARIdm/ABS = OX300 address,xxbl,hiword,xxb2,lobyte,xxb3,msg;
.VAR/dm/ABS = OX400 outbuf0;
.VAR/dm/ABS = OXa00 outbuf1;
I* raw data area *I
.VAR/dm/abs = 0x1000 hist[0x1000] ;
VAR/dm/circ/abs = 0x2000 workbut[0x1 e00] ;
I* interrupt vectors *I
dis ints;
jump begin; /*reset irq*/
nop;
nop;
jump irqfl; !*read 4 fluorescence measurements*/
nop;
nop;
nop;
rti; /*irqL1 '/
nop;
nop;
nop;
rti; /*irqLO */
nop;
nop;
nop;
rti; /*sp0 tx*/
nop;
nop;
nop;
rti; /'sp0 rx*/
nop;
nop;
nop;
rti; /*irq E */
nop;
nop;
nop;
jump bdmadone;1*irq BdmA'/
nop;
nop;
nop;
jump procnewctl;/*irq1-new data in control area'/
nop;
nop;
nop;
jump doidle; /*go to idle mode, wait for nmi*/
nop;
nop;
nop;
jump tim exp; /*timer*/
nop;
nop;
nop;
softload:
m0=0;
l0=0;
i0="address;
ax0=-1;
dm(i0,m0)=ax0;
11=0;
12=0;
15=0;
ax0=Oxd000; !" set up restart params */
dm(Ox3fef)=ax0;
i1 ~hiword;
i2=~lobyte;
Idpgm: ay0=dm(i0,m0);
ar=pass ay0;
if It jump Idpgm;l' negative number means no new program yet */
i5=ay0; /* point to addr of new instruction *I
ax0=dm(i2,m0); I* get low byte *I
px=ax0;
ax0=dm(i1,m0); /" get hi word */
pm(i5,m5)=ax0; /*m reg doesn't matter */
ax0=-1;
dm(i0,m0)=ax0;
ar=pass ay0; 1* if 0 then its the last instruction *I
if eq jump Idend;
set fl2;
nop;
reset f12;
jump Idpgm;
Idend: idle ;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
/* initalization sequence */
begin: imask=0;
icntl=0x7; /*no nesting, irq2,1,0=edge*/
dis timer;
10=0;
11=0;
12=0;
13=0;
17=0;
16=0x1 e00;
mstat=0x10; /'integer placement*l ax0=0;
dm(lena)=ax0;
m0=2;
m1=-1;
m2=1;
m3=0;
m4=-20;
m5=1;
m6=5;
m7=0;
i 1=Ox3fff;
dm(i1,m1)=0;
dm(il,m1)=Ox3ff8; /* atod is ZERO wait state */
dm(il,m1)=0; /*tperiod*/
dm(il,m1)=0; !'tcount*/
dm(il,m1)=15; /*tscale to 1 us per cnt*/
dm(il,m1)=0; I*sp0*/
dm(il,m1)=0;
dm(il,m1)=0;
dm(i1,m1)=0;
dm(i1,m1)=0; /'3ff6*/
dm(i1,m1 )=0;
drri(i1,m 1 )=0;
dm(il,m1)=0;
dm(i1,m1)=0x4000; /'ena internal clock gen*/
dm(il,m1)=15; !*ser clock out to 1.024 MHz*/
dm(i1,m1)=0; /"' addr 3ff0*/
dm(il,m1)=Oxd000; /* set up power down options */
i1 = Ox3fe5;
dm(i1,m2)=0x0; /*set pf0-7 to 0 */
dm(i1,m1)=Ox78ff; I*pf0-7 are outputs*/
reset f10;
reset fl1;
reset fl2;
reset flag out; /* set flags for reg control */
ax0=0;
dm(msg)=ax0;
dm(mcready)=ax0;
dm(bcntl)=ax0;
dm(bcnth)=ax0;
dm(nobgsub)=ax0;
cntr=Oxc00;
i0=~outbuf0;
do clrmem until ce;
clrmem: dm(i0,m2)=ax0;
14=0x1 e00;
i4=~workbuf;
r let system stabilize'/
cntr=1000;
do bpirq until ce;
cntr=16000;
do bpirql until ce;
bpirq1: nop;
bpirq: nop;
irqfl:
my1=io(0); /" init for first readapds */
i1 = Ox3fe5;
dm(il,m2)=0x0; l*set pf0-7 to 0 */
call lightsoff;
ifc=Oxff; /*clear all pending irqs*/
jump mainbody; I* for testing only *I
jump waitmc; /* wait for micro to init data areas *I
/* INTERRUPT SERVICE ROUTINES- */
my1=io(1);/* read 0 setup 1 */
.
dm(i4,m5)=my1;
my1=io(2);/* read 1 setup 2 */
dm(i4,m5)=my1;
my1=io(3);/* read 2 setup 3'/
/* ******'"*'"*"*'"'*"'***"*****"*********
for new board, change to io(4) below */
/* ******"*******"*********"*'******"
for old board, change to io(3) below */
dm(i4,m5)=my1;
my1=io(4);/* read 3 setup 4 */
dm(i4,m5)=my1;
my1=io(0);/* read 4 setup 0 */
dm(i4,m5)=my1, af=of+1;
rti;
procnewctl:
rti;
doidle:
rti;
bdmadone:
rti;
tim exp:
rti;
I* This loop is executed while NOT capturing. It only responds to 2 interrupts IRQ 1 means that there is new data in the control area so reinit all variables IRQ 0 means that there is new code in dm that must be moved to pm and executed */
Mainbody:
if flag in call capture;
ax0=dm(lena); !"turn on lasers */
ar=setbit 7 of ax0; !*enable overflow bit of a/d converter */
dm(pflags)=ar;
imask = 0x206; !"allow idle or new ctl msg */
ena ints;
nop;
nop;
nop;
nop;
i0="workbuf;
ax0=dm(i0,m2); /* write background in same order as recbuf */
dm(bkgnd)=ax0;
ax0=dm(i0,m2);
dm(bkgnd+2)=ax0;
ax0=dm(i0,m2);
dm(bkgnd+4)=ax0;
ax0=dm(i0,m2);
dm(bkgnd+6)=ax0;
ax0=dm(i0,m2);
dm(bkgnd+8)=ax0;
jump mainbody;
/* All subroutines here at the end */
capture:
14=0x1 e00;
15=0x1 e00;
ax0=dm(lena); /"turn on lasers */
ar=clrbit 7 of ax0; /* disable overflow bit of ald convt */
dm(ptlags)=ar;
dis ints;
call clrhist;
af=pass 0;
i4="workbuf;
i3="hist;
i5=~workbuf;
i7=~x8bkgnd;
imask=0x200;
ena ints;
cntr--4; /* do four background histograms */
do bigloop until ce;
cntr=4000; /* take 4000 samples for histogram */
do bldhist until ce;
pace: ar=pass af; /* any samples to proc */
if le jump pace;
ax0=dm(i5,m6); /* get samp */
ar=ax0-0x1000; I* range check *I
if ge jump bldhist;
ay0=~hist; I* base addr *I
ar=ax0+ay0; /' base + offset *!
i3=ar; /*point into hist */
ay1=dm(i3,m3); /' get current val */
ar=ay1+1;
dm(i3,m3)=ar;
bldhist: nop;
/* now find most frequent occurrance in hist */
i3="hist;
cntr=Oxfff;
ax0=dm(i3,m2); /' get first entry *I
dm(svi3)=i3;
ayt)=axt); /" ay0 holds highest val so far */
do findmax until ce;
ax0=dm(i3.m2);
ar=ax0-ayl);
if le.jump findmax;
ay0=ax0; rnew high val found *l dm(svi3)=i3; l' save offset +1 (post inc) *I
findmax: nop;
axt)=dm(svi3);I' get ptr to best +1 */
ay0=~hist + l' since i3 is plus 1 *I
1;
ar=ax0-ay0; hcompensate for base */
si=ar; I" save bkgnd for shift later *I
ay0--~hist;
ar=ar+ay0; /'talc index to peak */
i3=ar; /'point to peak in hist */
ay0=dm(i3,m1);/"get pk, pnt to previous */
ax0=dm(i3,mt));/*get prev, pnt to other side of pk */
ay1=dm(i3,m1);/" pnt back to peak */
ax1=1;
ar=ax0-ay1; r which pk is second highest */
if It jump poside;
ax1=-1; r int pk will be less */
ay1=axt);
poside: !* now ay1 has val of 2nd peak *I
sr=Ishift si o); !* mutt by 8 *I
by 3 (l si=ay0;
ay0=srt); I"ay0 is 8x bkgnd and is ready for adj *I
sr=Ishift si by -2(l0);
/' get 1/4 of peak height */
intlp: ar=ay1-sr0;/' reduce 2nd pk by 1/4 of main */
if It jump intend;
ay1=ar;
ar=ax1+ayt); !'adjust background + or -'!
ay0=ar;
jump intlp;
intend: dm(i7,m5)=ay0;I* save final bkgnd */
call clrhist;
bigloop: modify(i5,m5); /*point to next channel *I
i3=~x8bkgnd;
i1="bkgnd;
cntr=4;
do div8 until ce;
si=dm(i3,m2); /'get avg background , inc +2*/
sr=Ishift si by -3 (lo);
div8: dm(il,ml))=sr0;
af=pass 0;
ax0=0;
dm(misscnt)=ax0;
dm(bufOcnt)=ax0;
dm(bufl cnt)=ax0;
dm(otrcnt)=ax0;
dm(actbuf)=ax0;
ax0=dm(clock);
dm(Ox3ff1)=ax0; /* set sample clk freq */
i4=~workbuf;
i5=~workbuf;
ifc=Oxff;
imask=0x200; r ena fl ints */
i0=~outbuf0;
resetc: if not flag in jump capexit;
ax0=0;
ar=pass af;
dm(afreg)=ar;
ena ints;
newsamp: if not flag in jump capexit;
ar=pass af; /* load ax0 with # of new samps */
ar=ar-64; /* are we 64 records ahead */
if le jump newsamp;
af=of l,ay0=dm(i5,m6); /"get ssc, inc to next record */
ax0=dm(thresh);
ar=ax0-ay0; /* above thresh then its a bead *J
if ge jump newsamp;
!* got a bead */
dm(pki5)=i5;
dm(fstart)=i5;
ax1=ay0; I* init peak ssc */
ay1=0; I* init width count *l moresamp:
af=of 1,ay0=dm(i5,m6); /* next next ssc, dec rec count */
ar=ay1+1; I" inc width count *I
ay1=ar,ar=ax1-ay0 ; 1" is new ssc higher *I
if ge jump ckdone;
dm(pki5)=i5;
ax1=ay0; I* save peak ssc *I
ckdone: ar=pass af; I* out of records *I
if eq jump bubble; /* if 0 then bubble */
ar=ax0-ay0; /' back below thresh yet? */
if le jump moresamp;
i6=dm(pki5);
modify(i6,m4); I" since past inc, sub 20 *I
dm(wid)=ay1;
!* build a record with peaks or estimates of peaks */
12=0x1 e00;
i2=i6;
call i2sum;
dm(recbuf)=ay1; store ssc in recbuf'/
modify(i6,m5); I" add 1 to point to fl2 pk -15 */
i2=i6;
call i2sum;
dm(recbuf+1 )=ay1; !* store cl1 sum */
modify(i6,m5); /* add 1 to point to fl3 pk -15 */
i2=i6;
call i2sum;
dm(recbuf+2)=ay1; I* store cl2 sum *I
modify(i6,m5); I* add 1 to point to fl4 pk -15 *I
i2=i6;
call i2sum;
dm(recbuf+3)=ay1; r store cl3 sum */
modify(i6,m5); I* add 1 to point to fl1 pk -15 *I
dm(svi6)=i6; I'align point with red laser */
modify(i6,m4); I* back up 20 more to fl1 peak -35 */
modify(i6,m4); I* back up 20 more to fl1 peak -55 */
/*modify(i6,m4); back up 20 more to fl1 peak -75 */
1* since fl1 is a different laser, refind peak to allow for alignment differences, search from -15 to +16 *I
ax0=dm(i6,m6); I" get 1st fl1 sample *I
m7=160;
m7=350; !'for new filter at 50 khz '/
modify(i6,m7};
m7=0;
ay0=dm(i6,m6);
ar=ax0+ay0;
sr=Ishift ar by -2 (LO);
ay0=sr0;
ar=ar+ay0;
dm(x8bkgnd+4)=ar;
i6=dm(svi6); !* test using no peak find */
m7=40;
modify(i6,m7); /'move right 8 samples due to skew of 50k filter *I
m7=0;
cntr=7;
modify(i6,m6);
dm(pki5)=i6;
ay0=dm(i6,m6); /* get 1 st fl1 sample */
ax1=ay0; /* move to old fl1 val */
do rp1 pk until ce;
ay0=dm(i6,m6);
ar=ax1-ay0; /* is it a new peak?*/
if gt jump rp1 pk;
dm(pki5)=i6; I* store addr +5 of new peak (post inc) *I
ax1=ay0;
rp1 pk: nop;
i6=dm(pki5);
modify(i6,m4); h sub 20 to back up 3 samples from pk (was +5)*/
modify(i6,m4); r sub 20 to back up 4 samples 50 k version'/
i2=i6;
call i2sum14;
sr=Ishift si by -3 (HI); I" shift carry *I
sr=sr or Ishift ar by -3 (LO);
dm(recbuf+4)=sr0; /'store rp1 */
12=0; /* restore for non circ buffr use */
r ok, we have singlet and recbuf is built *!
i7=~recbuf;
i3=~x8bkgnd;
cntr-4;
WO 99/57955 PCT/US99/1031 ti do subback until ce;
ax0=dm(i7,m7); /* get val inc 0 */
ay0=dm(i3,m2);
ar=ax0-ay0;
if It ar=pass 0;
subback: dm(i7,m5)=ar;
ax0=dm(nobgsub);
ar=pass ax0;
if ne jump recbdone;
ax0=dm(i7,m7); /* get val inc 0 */
ay0=dm(i3,m2);
ar=ax0-ay0;
if It ar=pass 0;
dm(i7,m5)=ar;
/********Sub rlt bg from rp1*******"'*/
recbdone:
I* record bead count *I
ay1=dm(bcntl);
ar=ay1 +1;
dm(bcntl)=ar;
ar=dm(bcnth);
ar=ar+C;
dm(bcnth)=ar;
i2=~recbuf;
ay1=dm(actbuf);
none=pass ay1;
if ne jump usebufl;
ay1=dm(bufOcnt);
none=pass ayl;
if gt jump noi0init; !* is this first of block */
i0="outbuf0;
noi0init:
ax1=dm(bufOsiz); !" check for overflow */
none = ax1 - ay1;
if ne jump noover;
ay1=dm(misscnt);
ar=ay1 +1;
dm(misscnt)=ar;
jump resetc;
noover: cntr=5;
do movout0 until ce;
ar=dm(i2,m2);
movout0: dm(i0,m0)=ar; r store ssc inc by 2 for even addr*/
ay0=dm(bufOcnt);
ar=ay0+1;
dm(bufOcnt)=ar;
ay0=dm(bufOsiz); /' enough records to irq 167? */
ar=ar-ay0;
if ne jump resetc;
set f10;
nop; I* c167 needs 50 ns min to get edge */
nop;
reset fl0;
ay1=1;
dm(actbuf)=ay1; I" change to buffer 1 */
jump resetc;
usebufl ayi =dm(buf1 cnt);
none=pass ay1;
if gt jump noii init; I* is this first of block *I
i0="outbufl ;
noil init:
ax1=dm(buflsiz); /* check for overflow */
none = ax1 - ay1;
if ne jump noover1;
ay1=dm(misscnt);
ar=ay1 +1;
dm(misscnt)=ar;
jump capture; /* major overflow reset and restart capture */
noover1: cntr=5;
do movout1 until ce;
ar=dm(i2,m2):
movoutl : dm(i0,m0)=ar; I" store ssc inc by 2 for even addr*/
ay0=dm(buf1 cnt);
ar=ay0+1;
dm(bufl cnt)=ar;
ay0=dm(buf1siz); I* enough records to irq 167? *I
ar-ar-ay0;
if ne jump resetc;
set fl1;
nop; /* c167 needs 50 ns min to get edge */
nop;
reset fl1;
ay1=0;
dm(actbuf)=ay1; /* change back to buffer 0 *I
jump resetc;
capexit:
i1 = Ox3fe5;
dm(il,m2)=0x0; /*set pf0-7 to 0 */
ifc=Oxff;
rts;
i2sum14:
m0=5;
ar=pass O,ay1=dm(i2,m0);
si=0; /* use for carry */
dm(svcry)=si;
cntr=20;
do grate4 until ce;
ar=ar+ay1,ay1=dm(i2,m0);
if not ac jump grate4;
dis ints;
ena sec reg;
ay0=dm(svcry);
ar=ay0+1;
dm(svcry)=ar;
dis sec reg;
ena ints;
grate4: nop;
ay1=ar;
si=dm(svcry);
m0=2;
rts;
i2sum: m0=5;
ar=pass O,ay1=dm(i2,m0);
cntr=8;
do grate until ce;
grate: ar=ar+ay1,ay1=dm(i2,m0);
ay1=ar;
m0=2;
rts;
bubble:
lightsoff:
if not flag in jump capexit;
ar=pass /* load ax0 with # of af; new samps */
ar=ar-256;r are we 64 records *4 ahead '/
if le jump bubble;
af=of 1,ay0=dm(i5,m6);
I*get ssc, inc to next record */
ax0=dm(thresh);
ar=ax0-ay0;/* are we below thresh yet */
if le jumph no, keep waiting "/
bubble;
jump newsamp;
ax0=Ox24d;
ax0=0x63; l*****"*'"*****"'*''test**"**''****/
dm(version)=ax0;
rts;
Grhist:
i3=~hist;
ax0=0;
cntr=0x1000;
do zit until ce;
zit: dm(i3,m2)=ax0;
rts;
waitmc:
toggle fo;
ax0=dm(mcready); h wait until me writes non zero to mcready *!
ar=pass ax0;
if eq jump waitmc;
jump malnbody;
.ENDMOD;
Claims (27)
1. A data collection and measurement device collecting data with substantially zero dead time, comprising:
a) a flow analyzer;
b) a circular buffer comprising:
a plurality of data storage areas that are linked to receive and consecutively store incoming data from a plurality of successive sampling periods for at least one event of the flow analyzer, where each data storage area is configured to receive and store data from one sampling period, and the data storage areas are linked in an order that provides storage for data from a next-in-time sampling period into the next-in-order data storage area;
a First Pointer; and a Second Pointer;
c) at least one Digital Signal Processor (DSP), where the First Pointer directs receipt and storage of data of the next-in-time sampling period into the next-in-order data storage area, and, once all data storage areas contain data, directs receipt of data of the next-in-time sampling period, and storage by overwriting therewith data in the next-in-order data storage area, the Second Pointer is directed to the data storage area that stores data from a sample period preceding a current time of data receipt and storage by a fixed trailing distance as referenced to the First Pointer, and directs one of the at least one DSPs to read and process data in the data storage area to which the Second pointer is directed, and wherein once the next-in-time data have been stored, the First Pointer advances to the next-in-order. data storage area, and once data in the data storage area to which the Second Pointer is directed have been processed, the Second Pointer advances to the next-in-order data storage area, and wherein said collection and measurement apparatus collects and processes data from the at least one event.
a) a flow analyzer;
b) a circular buffer comprising:
a plurality of data storage areas that are linked to receive and consecutively store incoming data from a plurality of successive sampling periods for at least one event of the flow analyzer, where each data storage area is configured to receive and store data from one sampling period, and the data storage areas are linked in an order that provides storage for data from a next-in-time sampling period into the next-in-order data storage area;
a First Pointer; and a Second Pointer;
c) at least one Digital Signal Processor (DSP), where the First Pointer directs receipt and storage of data of the next-in-time sampling period into the next-in-order data storage area, and, once all data storage areas contain data, directs receipt of data of the next-in-time sampling period, and storage by overwriting therewith data in the next-in-order data storage area, the Second Pointer is directed to the data storage area that stores data from a sample period preceding a current time of data receipt and storage by a fixed trailing distance as referenced to the First Pointer, and directs one of the at least one DSPs to read and process data in the data storage area to which the Second pointer is directed, and wherein once the next-in-time data have been stored, the First Pointer advances to the next-in-order. data storage area, and once data in the data storage area to which the Second Pointer is directed have been processed, the Second Pointer advances to the next-in-order data storage area, and wherein said collection and measurement apparatus collects and processes data from the at least one event.
2. The data collection and measurement device of claim 1, where the flow analyzer is a flow cytometer.
3. The data collection and measurement device of claim 1, where the fixed trailing distance equals at least a longest possible time for an event.
4. The data collection and measurement device of claim 3, where the fixed trailing distance is about 10 to about 100 milliseconds.
5. The data collection and measurement device of claim 1, where the fixed trailing distance is user specified.
6. The data collection and measurement device claim 1, where the sampling periods are of a fixed length of time, and the fixed length of time is user specified.
7. The data collection and measurement device of claim 6, where the sampling periods are each about one millionth of a second.
8. The data collection and measurement device of claim 6, where the sampling periods are each less than one millionth of a second.
9. The data collection and measurement device of claim 1, where the number of data storage areas is user specified.
10. The data collection and measurement device of claim 9, where the number of data storage areas is at least one thousand.
11. The data collection and measurement device of claim 1, where each data storage area has a size, and the size is user specified.
12. The data collection and measurement device of claim 11, where the size of each data storage area is from about 12 bits to about 16 bits.
13. The data collection and measurement device of claim 11, where the size of each data storage area is greater than 16 bits.
14. The data collection and measurement device of claim 11, where the size of each data storage area is less than 12 bits.
15. The data collection and measurement device of claim 1, further comprising an order of data processing by DSPs when a plurality of DSPs is employed.
16. The data collection and measurement device of claim 15, where the order of data processing by DSPs is user specified.
17. The data collection and measurement device of claim 1, further comprising a signal-to-noise ratio threshold that serves as a criterion as to whether data are processed by the at least one DSP.
18. The data collection and measurement device of claim 17, where the signal-to-noise ratio threshold is user specified.
19. The data collection and measurement device of claim 17, further comprising logic to re-examine and reprocess previous data that do not meet the signal-to-noise ratio threshold.
20. A flow analyzer collecting data with substantially zero dead time for at least one event, comprising:
at least one circular buffer having a plurality of data storage areas that are adapted to receive and store incoming data from a plurality of sampling periods for the at least one event collected by said flow analyzer, said at least one circular buffer including at least a First Pointer used to direct receipt and storage of the data collected by said flow analyzer into at least one of said plurality of data storage areas including overwriting of stored data therein in accordance with predetermined criteria, and at least a Second Pointer used to direct reading of the data from at least one of the plurality of data storage areas including previously stored data from a sample period preceding a current time of the receipt and the storage of the data directed by the at least First Pointer; and at least one processor connected to said at least one circular buffer, receiving the data from the at least one of the plurality of data storage areas of said at least one circular buffer responsive to direction by the at least one Second Pointer, and said flow analyzer collecting and processing the data from the at least one event with substantially zero dead time.
at least one circular buffer having a plurality of data storage areas that are adapted to receive and store incoming data from a plurality of sampling periods for the at least one event collected by said flow analyzer, said at least one circular buffer including at least a First Pointer used to direct receipt and storage of the data collected by said flow analyzer into at least one of said plurality of data storage areas including overwriting of stored data therein in accordance with predetermined criteria, and at least a Second Pointer used to direct reading of the data from at least one of the plurality of data storage areas including previously stored data from a sample period preceding a current time of the receipt and the storage of the data directed by the at least First Pointer; and at least one processor connected to said at least one circular buffer, receiving the data from the at least one of the plurality of data storage areas of said at least one circular buffer responsive to direction by the at least one Second Pointer, and said flow analyzer collecting and processing the data from the at least one event with substantially zero dead time.
21. The flow analyzer of claim 20, where the flow analyzer is a flow cytometer.
22. A flow analyzer collecting data with substantially zero dead time for at least one event, comprising:
at least one buffer having a plurality of data storage areas that are adapted to receive and store incoming data from a plurality of sampling periods for the at least one event collected by said flow analyzer, said at least one buffer including previously stored data from a sample period preceding a current time of the receipt and the storage of the data and including an addressable range of the plurality of data storage areas to go sufficiently backward in the plurality of sampling periods;
at least one processor connected to said at least one buffer, receiving the data from the at least one of the plurality of data storage areas of said at least one buffer, and said flow analyzer collecting and processing the data from the at least one event with substantially zero dead time by reading from said at least one buffer the previously stored data from the sampling period preceding the current time of the plurality of sampling periods.
at least one buffer having a plurality of data storage areas that are adapted to receive and store incoming data from a plurality of sampling periods for the at least one event collected by said flow analyzer, said at least one buffer including previously stored data from a sample period preceding a current time of the receipt and the storage of the data and including an addressable range of the plurality of data storage areas to go sufficiently backward in the plurality of sampling periods;
at least one processor connected to said at least one buffer, receiving the data from the at least one of the plurality of data storage areas of said at least one buffer, and said flow analyzer collecting and processing the data from the at least one event with substantially zero dead time by reading from said at least one buffer the previously stored data from the sampling period preceding the current time of the plurality of sampling periods.
23. The flow analyzer of claim 22, where the flow analyzer is a flow cytometer.
24. A flow analyzer collecting data with substantially zero dead time for at least one event, comprising:
at least one buffer means for having a plurality of data storage areas that are adapted to receive and store incoming data from a plurality of sampling periods for the at least one event collected by said flow analyzer, said at least one buffer means for including previously stored data from a sample period preceding a current time of the receipt and the storage of the data and including an addressable range of the plurality of data storage areas to go sufficiently backward in the plurality of sampling periods;
at least one processor for receiving the data from the at least one of the plurality of data storage areas of said at least one buffer means, and said flow analyzer collecting and processing the data from the at least one event with substantially zero dead time by reading from said at least one buffer means the previously stored data from the sampling period preceding the current time of the plurality of sampling periods.
at least one buffer means for having a plurality of data storage areas that are adapted to receive and store incoming data from a plurality of sampling periods for the at least one event collected by said flow analyzer, said at least one buffer means for including previously stored data from a sample period preceding a current time of the receipt and the storage of the data and including an addressable range of the plurality of data storage areas to go sufficiently backward in the plurality of sampling periods;
at least one processor for receiving the data from the at least one of the plurality of data storage areas of said at least one buffer means, and said flow analyzer collecting and processing the data from the at least one event with substantially zero dead time by reading from said at least one buffer means the previously stored data from the sampling period preceding the current time of the plurality of sampling periods.
25. The flow analyzer of claim 24, where the flow analyzer is a flow cytometer.
26. A method of collecting data used in a flow analyzer with substantially zero dead time for at least one event, comprising the steps of:
(a) receiving incoming data from a plurality of sampling periods for the at least one event collected by said flow analyzer via at least one circular buffer having a plurality of data storage areas;
(b) storing the incoming data in the at least one circular buffer via at least a First Pointer used to direct the receipt and the storage of the data collected by said flow analyzer into at least one of the plurality of data storage areas including overwriting of stored data therein in accordance with predetermined criteria;
(c) directing the reading of the data by at least one processor from at least one of the plurality of data storage areas including previously stored data from a sample period preceding a current time of the receipt and the storage of the, data directed by the at least First Pointer via at least a Second Pointer;
(d) receiving the data by the at least one processor from the at least one of the plurality of data storage areas of said at least one circular buffer responsive to direction by the at least one Second Pointer; and (e) collecting and processing the data from the at least one event with substantially zero dead time.
(a) receiving incoming data from a plurality of sampling periods for the at least one event collected by said flow analyzer via at least one circular buffer having a plurality of data storage areas;
(b) storing the incoming data in the at least one circular buffer via at least a First Pointer used to direct the receipt and the storage of the data collected by said flow analyzer into at least one of the plurality of data storage areas including overwriting of stored data therein in accordance with predetermined criteria;
(c) directing the reading of the data by at least one processor from at least one of the plurality of data storage areas including previously stored data from a sample period preceding a current time of the receipt and the storage of the, data directed by the at least First Pointer via at least a Second Pointer;
(d) receiving the data by the at least one processor from the at least one of the plurality of data storage areas of said at least one circular buffer responsive to direction by the at least one Second Pointer; and (e) collecting and processing the data from the at least one event with substantially zero dead time.
27. The method of claim 26, wherein the flow analyzer is a flow cytometer.
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US8538198P | 1998-05-14 | 1998-05-14 | |
US8541598P | 1998-05-14 | 1998-05-14 | |
US60/085,381 | 1998-05-14 | ||
US60/085,415 | 1998-05-14 | ||
PCT/US1999/010318 WO1999057955A1 (en) | 1998-05-14 | 1999-05-13 | Zero dead time architecture and method for flow cytometer |
Publications (2)
Publication Number | Publication Date |
---|---|
CA2328408A1 CA2328408A1 (en) | 1999-11-18 |
CA2328408C true CA2328408C (en) | 2005-02-15 |
Family
ID=26772654
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CA002328408A Expired - Lifetime CA2328408C (en) | 1998-05-14 | 1999-05-13 | Zero dead time architecture and method for flow cytometer |
Country Status (5)
Country | Link |
---|---|
US (3) | US6411904B1 (en) |
JP (1) | JP3946444B2 (en) |
AU (1) | AU4184099A (en) |
CA (1) | CA2328408C (en) |
WO (1) | WO1999057955A1 (en) |
Families Citing this family (59)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2279574C (en) | 1997-01-31 | 2007-07-24 | The Horticulture & Food Research Institute Of New Zealand Ltd. | Optical apparatus |
US6149867A (en) | 1997-12-31 | 2000-11-21 | Xy, Inc. | Sheath fluids and collection systems for sex-specific cytometer sorting of sperm |
JP3946444B2 (en) * | 1998-05-14 | 2007-07-18 | ルミネックス コーポレイション | Configuration and method for zero dead time of flow cytometer |
US6696304B1 (en) | 1999-02-24 | 2004-02-24 | Luminex Corporation | Particulate solid phase immobilized protein quantitation |
US6813017B1 (en) | 1999-10-20 | 2004-11-02 | Becton, Dickinson And Company | Apparatus and method employing incoherent light emitting semiconductor devices as particle detection light sources in a flow cytometer |
US7024316B1 (en) * | 1999-10-21 | 2006-04-04 | Dakocytomation Colorado, Inc. | Transiently dynamic flow cytometer analysis system |
US7208265B1 (en) | 1999-11-24 | 2007-04-24 | Xy, Inc. | Method of cryopreserving selected sperm cells |
US6809804B1 (en) | 2000-05-11 | 2004-10-26 | Becton, Dickinson And Company | System and method for providing improved event reading and data processing capabilities in a flow cytometer |
US7465540B2 (en) | 2000-09-21 | 2008-12-16 | Luminex Corporation | Multiple reporter read-out for bioassays |
US7713687B2 (en) | 2000-11-29 | 2010-05-11 | Xy, Inc. | System to separate frozen-thawed spermatozoa into x-chromosome bearing and y-chromosome bearing populations |
WO2002043486A1 (en) | 2000-11-29 | 2002-06-06 | Xy, Inc. | System for in-vitro fertilization with spermatozoa separated into x-chromosome and y-chromosome bearing populations |
CA2464144A1 (en) * | 2001-11-14 | 2003-10-16 | Luminex Corporation | Functionalized compositions for improved immobilization |
US8486618B2 (en) | 2002-08-01 | 2013-07-16 | Xy, Llc | Heterogeneous inseminate system |
MXPA05001100A (en) | 2002-08-01 | 2005-04-28 | Xy Inc | Low pressure sperm cell separation system. |
MXPA05001654A (en) | 2002-08-15 | 2005-10-18 | Xy Inc | High resolution flow cytometer. |
US7169548B2 (en) | 2002-09-13 | 2007-01-30 | Xy, Inc. | Sperm cell processing and preservation systems |
US6941427B2 (en) * | 2002-12-20 | 2005-09-06 | Lsi Logic Corporation | Method and apparatus for improving queue traversal time |
ITMI20030339A1 (en) * | 2003-02-26 | 2004-08-27 | Pranha 50 Ltda | METHOD, APPARATUS AND DEVICES FOR THE RENOVATION OF PIPES BY INTRODUCTION OF PLASTIC PIPES. |
MX347048B (en) | 2003-03-28 | 2017-04-07 | Inguran Llc * | Apparatus, methods and processes for sorting particles and for providing sex-sorted animal sperm. |
ES2541121T3 (en) | 2003-05-15 | 2015-07-16 | Xy, Llc | Efficient classification of haploid cells by flow cytometry systems |
US20060235629A1 (en) * | 2003-05-21 | 2006-10-19 | Walker Jeffrey S | Flow meter monitoring and data logging system |
US8012768B2 (en) * | 2003-07-18 | 2011-09-06 | Bio-Rad Laboratories, Inc. | System and method for multi-analyte detection |
WO2005008219A2 (en) | 2003-07-18 | 2005-01-27 | Bio-Rad Laboratories, Inc. | System and method for multi-analyte detection |
US7260485B2 (en) * | 2003-07-18 | 2007-08-21 | Luminex Corporation | Method and systems for distinguishing between materials having similar spectra |
EP1660679B1 (en) * | 2003-08-01 | 2012-11-14 | Dynal Biotech Inc. | Self-hybridizing multiple target nucleic acid probes and methods of use |
US7692773B2 (en) * | 2003-08-05 | 2010-04-06 | Luminex Corporation | Light emitting diode based measurement systems |
US7069191B1 (en) | 2003-08-06 | 2006-06-27 | Luminex Corporation | Methods for reducing the susceptibility of a peak search to signal noise |
KR101149880B1 (en) * | 2003-08-13 | 2012-05-24 | 루미넥스 코포레이션 | Methods for controlling one or more parameters of a flow cytometer type measurement system |
CN1910441A (en) * | 2004-01-14 | 2007-02-07 | 卢米尼克斯股份有限公司 | Methods for altering one or more parameters of a measurement system |
US7229778B2 (en) * | 2004-02-26 | 2007-06-12 | The Procter & Gamble Company | Methods for determining the relative benefits and/or evaluating quantitative changes of products on epithelial tissue |
CA2561661C (en) | 2004-03-29 | 2015-11-24 | Monsanto Technology Llc | Sperm suspensions for sorting into x or y chromosome-bearing enriched populations |
US7635563B2 (en) * | 2004-06-30 | 2009-12-22 | Massachusetts Institute Of Technology | High throughput methods relating to microRNA expression analysis |
AR049732A1 (en) | 2004-07-22 | 2006-08-30 | Monsanto Co | PROCESS TO ENRICH A Sperm Cell Population |
CN101044213B (en) | 2004-10-12 | 2014-04-02 | 卢米尼克斯股份有限公司 | Methods for forming dyed microspheres and populations of dyed microspheres |
US8088629B1 (en) | 2004-10-12 | 2012-01-03 | Luminex Corporation | Methods for forming dyed microspheres and populations of microspheres |
JP4988578B2 (en) * | 2004-10-12 | 2012-08-01 | ルミネックス コーポレーション | Method for changing the surface properties of microspheres |
US7142938B2 (en) * | 2004-10-13 | 2006-11-28 | Taiwan Semiconductor Manufacturing Co., Ltd. | Manufacturing management system and method |
EP1820001A1 (en) * | 2004-11-12 | 2007-08-22 | Luminex Corporation | Methods and systems for positioning microspheres for imaging |
JP2008523354A (en) * | 2004-11-17 | 2008-07-03 | ルミネックス・コーポレーション | Apparatus and method for managing data from a flow analyzer |
US20060115908A1 (en) * | 2004-11-30 | 2006-06-01 | Tetracore, Inc. | Multiplexed analyses of contaminant-laden gas in a particle impact collector |
EP1828748A1 (en) * | 2004-12-17 | 2007-09-05 | Luminex Corporation | Systems, illumination subsystems, and methods for increasing fluorescence emitted by a fluorophore |
DE602006015908D1 (en) * | 2005-01-20 | 2010-09-16 | Luminex Corp | MICROBALLS WITH FLUORESCENT AND MAGNETIC CHARACTERISTICS |
CN102621053B (en) * | 2005-09-21 | 2015-05-06 | 卢米尼克斯股份有限公司 | Methods and systems for image data processing |
US8309025B1 (en) | 2006-01-26 | 2012-11-13 | Luminex Corporation | Methods and systems for determining composition and completion of an experiment |
US20070207513A1 (en) * | 2006-03-03 | 2007-09-06 | Luminex Corporation | Methods, Products, and Kits for Identifying an Analyte in a Sample |
US8124943B1 (en) | 2006-04-06 | 2012-02-28 | Lugade Ananda G | Methods and systems for altering fluorescent intensities of a plurality of particles |
US7795040B2 (en) * | 2006-04-17 | 2010-09-14 | Luminex Corporation | Methods, particles, and kits for determining activity of a kinase |
WO2008105893A2 (en) * | 2006-06-27 | 2008-09-04 | Biovigilant Systems, Inc. | Pathogen detection by simultaneous size/fluorescence measurement |
US20080003665A1 (en) * | 2006-07-03 | 2008-01-03 | Potyrailo Radislav Alexandrovi | Methods and systems for detecting particles |
US20080010019A1 (en) * | 2006-07-06 | 2008-01-10 | Thomas Richard A | High speed spectrum analyzer |
WO2008061058A2 (en) | 2006-11-10 | 2008-05-22 | Luminex Corporation | Flow cytometer and fluidic line assembly with multiple injection needles |
EP2857526B1 (en) | 2006-12-13 | 2016-08-17 | Luminex Corporation | Systems and methods for multiplex analysis of PCR in real time |
US20080282293A1 (en) * | 2007-05-07 | 2008-11-13 | 2 Be, Llc | System and method for an event scheduler |
US20090170214A1 (en) * | 2007-12-27 | 2009-07-02 | Luminex Corporation | Luminescent Reporter Modality for Analyzing an Assay |
US8154273B2 (en) * | 2008-10-10 | 2012-04-10 | Beckman Coulter, Inc. | Detecting and handling coincidence in particle analysis |
WO2013049613A1 (en) | 2011-09-29 | 2013-04-04 | Luminex Corporation | Hydrolysis probes |
EP3957743A1 (en) | 2013-06-19 | 2022-02-23 | Luminex Corporation | Real-time multiplexed hydrolysis probe assay |
EP3461913B1 (en) | 2013-08-09 | 2020-06-24 | Luminex Corporation | Probes for improved melt discrimination and multiplexing in nucleic acid assays |
EP3967771B1 (en) | 2014-08-11 | 2023-10-04 | Luminex Corporation | Probes for improved melt discrimination and multiplexing in nucleic acid assays |
Family Cites Families (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US555058A (en) * | 1896-02-18 | Eason l | ||
US4019174A (en) * | 1971-12-08 | 1977-04-19 | Monarch Marking Systems, Inc. | Data collecting and transmitting system |
US4091367A (en) * | 1974-02-28 | 1978-05-23 | Robert Keith Harman | Perimeter surveillance system |
US4293221A (en) * | 1979-04-17 | 1981-10-06 | Research Corporation | Multidimensional slit-scan flow system |
US4338950A (en) * | 1980-09-22 | 1982-07-13 | Texas Instruments Incorporated | System and method for sensing and measuring heart beat |
US4478088A (en) * | 1981-01-13 | 1984-10-23 | The Perkin-Elmer Corporation | Flowmeter system with ultrasonic energy improvement in equilibration |
US4661913A (en) * | 1984-09-11 | 1987-04-28 | Becton, Dickinson And Company | Apparatus and method for the detection and classification of articles using flow cytometry techniques |
US5091951A (en) * | 1989-06-26 | 1992-02-25 | Pioneer Electronic Corporation | Audio signal data processing system |
US5299141A (en) * | 1989-12-22 | 1994-03-29 | American Sigma, Inc. | Automatic fluid monitoring and sampling apparatus and method |
US5250856A (en) * | 1989-12-28 | 1993-10-05 | North American Philips Corp. | Differential input buffer-inverters and gates |
US5150313A (en) * | 1990-04-12 | 1992-09-22 | Regents Of The University Of California | Parallel pulse processing and data acquisition for high speed, low error flow cytometry |
US5325509A (en) * | 1991-03-05 | 1994-06-28 | Zitel Corporation | Method of operating a cache memory including determining desirability of cache ahead or cache behind based on a number of available I/O operations |
US5199576A (en) | 1991-04-05 | 1993-04-06 | University Of Rochester | System for flexibly sorting particles |
US5278988A (en) * | 1991-06-14 | 1994-01-11 | A. C. Nielsen Company | Automated receiver monitoring method and apparatus |
US5448706A (en) * | 1992-05-13 | 1995-09-05 | Sharp Microelectronics Technology, Inc. | Address generator for multi-channel circular-buffer style processing |
US5367474A (en) * | 1993-02-08 | 1994-11-22 | Coulter Corporation | Flow cytometer |
US5556764A (en) * | 1993-02-17 | 1996-09-17 | Biometric Imaging, Inc. | Method and apparatus for cell counting and cell classification |
US5745793A (en) * | 1995-06-07 | 1998-04-28 | Seagate Technology, Inc. | Apparatus having a circular buffer that maintains a one entry gap between elements written to the microprocessor and elements operated on by the clock |
US5734422A (en) | 1996-05-17 | 1998-03-31 | Tektronix, Inc. | Digital video error analyzer |
US5909278A (en) * | 1996-07-29 | 1999-06-01 | The Regents Of The University Of California | Time-resolved fluorescence decay measurements for flowing particles |
JP2957488B2 (en) * | 1996-09-09 | 1999-10-04 | 日本電気アイシーマイコンシステム株式会社 | FM teletext receiver |
US6285377B1 (en) * | 1997-06-26 | 2001-09-04 | Bayer Corporation | Method and apparatus for generating a smooth normalized star diagram |
US5880474A (en) | 1997-08-29 | 1999-03-09 | Becton Dickinson And Company | Multi-illumination-source flow particle analyzer with inter-location emissions crosstalk cancelation |
JP3946444B2 (en) * | 1998-05-14 | 2007-07-18 | ルミネックス コーポレイション | Configuration and method for zero dead time of flow cytometer |
US6148365A (en) * | 1998-06-29 | 2000-11-14 | Vlsi Technology, Inc. | Dual pointer circular queue |
-
1999
- 1999-05-13 JP JP2000547829A patent/JP3946444B2/en not_active Expired - Lifetime
- 1999-05-13 CA CA002328408A patent/CA2328408C/en not_active Expired - Lifetime
- 1999-05-13 AU AU41840/99A patent/AU4184099A/en not_active Abandoned
- 1999-05-13 US US09/310,755 patent/US6411904B1/en not_active Expired - Lifetime
- 1999-05-13 WO PCT/US1999/010318 patent/WO1999057955A1/en active Application Filing
-
2002
- 2002-05-09 US US10/140,943 patent/US6658357B2/en not_active Expired - Lifetime
-
2003
- 2003-10-28 US US10/694,086 patent/US7047138B2/en not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
US7047138B2 (en) | 2006-05-16 |
CA2328408A1 (en) | 1999-11-18 |
US6411904B1 (en) | 2002-06-25 |
US20040098231A1 (en) | 2004-05-20 |
WO1999057955A1 (en) | 1999-11-18 |
WO1999057955A8 (en) | 2000-02-03 |
US20020138206A1 (en) | 2002-09-26 |
AU4184099A (en) | 1999-11-29 |
JP2002514741A (en) | 2002-05-21 |
JP3946444B2 (en) | 2007-07-18 |
US6658357B2 (en) | 2003-12-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CA2328408C (en) | Zero dead time architecture and method for flow cytometer | |
US7274316B2 (en) | System and method for managing data from a flow analyzer | |
JP4215397B2 (en) | Multiple analyte diagnostic system | |
Kamentsky et al. | Microscope‐based multiparameter laser scanning cytometer yielding data comparable to flow cytometry data | |
EP0801295B1 (en) | Particle analyzer | |
US5962238A (en) | Method and apparatus for cell counting and cell classification | |
JP3213334B2 (en) | Urine cell analyzer | |
EP2219021A2 (en) | Particle or cell analyzer and method | |
EP0361503A1 (en) | Particle analyzing apparatus and method for determining nuclear shift index | |
EP0361504A2 (en) | Particle analyzing apparatus and method for determining nuclear shift index | |
CN100592071C (en) | Biological flow type analyzer | |
CN211478007U (en) | Sample analyzer, optical system thereof and flow cytometer | |
JP3213333B2 (en) | Apparatus and method for analyzing cells in urine. | |
JP4659242B2 (en) | Particle analyzer | |
CN115015089B (en) | Stream type detection device and method | |
JPH0229184B2 (en) | ||
JP2626008B2 (en) | Cell analyzer | |
JPH05180831A (en) | Cell analyzer | |
WO2007119263A2 (en) | System for acquiring 2d and 3d imagse ofsingle particles in a flow stream | |
JPS62112035A (en) | Particle analyzing instrument | |
JP2943249B2 (en) | Cell analyzer | |
JPS5979835A (en) | Apparatus for analysis of minute particle | |
JPH0560750A (en) | Cell analyzer | |
JP2625935B2 (en) | Cell analyzer | |
JPH04258763A (en) | Cell analyzer |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
EEER | Examination request | ||
MKEX | Expiry |
Effective date: 20190513 |