[go: up one dir, main page]

WO2000068810A9 - Data display software - Google Patents

Data display software

Info

Publication number
WO2000068810A9
WO2000068810A9 PCT/US2000/012364 US0012364W WO0068810A9 WO 2000068810 A9 WO2000068810 A9 WO 2000068810A9 US 0012364 W US0012364 W US 0012364W WO 0068810 A9 WO0068810 A9 WO 0068810A9
Authority
WO
WIPO (PCT)
Prior art keywords
assay
aplates
dim
hdc
pit
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.)
Ceased
Application number
PCT/US2000/012364
Other languages
French (fr)
Other versions
WO2000068810A1 (en
WO2000068810A8 (en
Inventor
Neil Carlson
Michelle A J Palmer
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tropix Inc
Original Assignee
Tropix Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Tropix Inc filed Critical Tropix Inc
Priority to AU48244/00A priority Critical patent/AU4824400A/en
Publication of WO2000068810A1 publication Critical patent/WO2000068810A1/en
Publication of WO2000068810A8 publication Critical patent/WO2000068810A8/en
Anticipated expiration legal-status Critical
Publication of WO2000068810A9 publication Critical patent/WO2000068810A9/en
Ceased legal-status Critical Current

Links

Classifications

    • G06T11/26

Definitions

  • chip-based arrays microplates and chip-based arrays are referred to as plates herein).
  • microplates also known as microplates, or similarly prepared sequences of small cells
  • reaction chambers that constitute reaction chambers is the method of choice for a wide variety of
  • the plates used in such screening methods may have in excess of 400 wells per plate. Frequently, each well is inspected to determine the presence
  • a particular signal such as a chemiluminescent, colorometric, agglutination or
  • reporter gene assays particularly limited, but include reporter gene assays, immunoassays, fingerprint assays, etc.
  • HTS technology involves preparing the mixture of sample and
  • the present invention meets the aforementioned need to a great extent by providing a method and apparatus for displaying data in a form that allows a user to rapidly review the
  • the invention accomplishes this through the presentation of results from a single assay across multiple wells and plates on a single screen in a format that preserves the
  • the invention also provides the user with the ability to
  • quadripartite e.g. good/marginally good/marginally bad/bad division.
  • the invention also displays plate-wide statistics, such as signal-to-noise ratio and variability,
  • the invention provides the user with the
  • Figure 1 is a drawing of a prior art display screen from a high throughput screening
  • Figure 2 is a drawing of an initial display screen from a high throughput screening data analysis program according to one embodiment of the present invention.
  • Figure 3 is a drawing of a display screen subsequent to the display screen of Figure 2.
  • Figure 4 is a drawing of a display screen subsequent to the display screen of Figure 3.
  • Figure 5 is a drawing of a display screen subsequent to the display screen of Figure 4.
  • Figure 6 is a drawing of a display screen subsequent to the display screen of Figure 5.
  • Figure 7 is a drawing of a display screen subsequent to the display screen of Figure 6.
  • Figure 8 is a drawing of a display screen subsequent to the display screen of Figure 7.
  • Figure 9 is a drawing of a display screen subsequent to the display screen of Figure 8.
  • Figure 10 is a drawing of a display screen subsequent to the display screen of Figure 9.
  • Figure 11 is a drawing of a display screen subsequent to the display screen of Figure 10.
  • Figure 12 is a drawing of a display screen subsequent to the display screen of Figure 11.
  • the invention is believed to be particularly well suited to high
  • the invention may be used in any situation in which data is generated and collected in a two dimensional format, and is not
  • a source plate refers to a plate on which material is stored
  • an assay plate refers to a plate on which assays are run. It is a common practice,
  • master and daughter plates are often prepared with material from the source plates.
  • the source (and master and daughter where applicable) plate IDs are
  • a single source or assay plate may
  • the low control is a material which will completely inhibit a reaction
  • the high control is
  • stimulation reactive than the material in the high control well
  • Figure 1 illustrates a display screen 100 from a prior-art data analysis program.
  • display 100 shows the results from a 96-well microplate; accordingly, the results for the assay
  • CD4 identified as CD4 for each well are presented in a well table 110 with 12 columns and 8 rows of
  • Each cell in columns 2-11 includes 2 values: the actual test data is presented on top and the sample number is presented below.
  • the table 120 includes the CN (a measure of variablility), averages
  • the signal-to-noise value is 1596.50 to
  • programs are compound-oriented. Such programs will display, for a single compound, the
  • Figure 2 illustrates the initial screen 200 presented to a user upon program start-up, which is
  • the screen 200 includes a password dialog box 210 for
  • filtering refers to selecting or de-selecting certain data for review and/or analysis: a
  • selection box 270 allows
  • pressing button 291 connects the program to the
  • button 292 disconnects the system from the database and button 293 causes the
  • the table 310 lists the available assays 320a-n as well as the available plate
  • Plates may be further filtered by being selected (or de-selected) at this screen 300. Once the desired plates have been selected at the previous two screens (200, 300), the
  • Thresholding is the division of data into a manageable number of categories; it is done to
  • a binary division e.g. good/bad
  • a quadripartite e.g. a quadripartite
  • the data that may be thresholded includes data relative to single wells as well as to
  • thresholds may be set for "% Inhibition,” Compound Range
  • Ratios (a measure of how much compound performance varies), Assay Plate Signal to Noise,
  • measures includes a plot of all values (all wells and all plates) of the respective measures for
  • Compound Range Ratios may be alternatively expressed in terms of a standard deviation.
  • FIG. 4 illustrates a quadripartite division.
  • a quadripartite division requires setting
  • thresholds are set by either typing the desired threshold in the colored
  • threshold dialog boxes 430a-c associated with each of the windows 420a-d windows (which may be desirable when a desired threshold may be determined in advance independently of the
  • threshold are chosen to be discrete; that is, the colors associated with each threshold are chosen
  • % Stimulation is chosen as 10% (10%-38%); the second threshold is chosen as 38% (38%-
  • thresholds are the equivalent to the "% Inhibition” thresholds but in the opposite direction.
  • Table 510 lists each plate as well as the
  • Table 510 also includes an indication of the number of "hits" for
  • Hits are wells that have surpassed at least one of the thresholds chosen in screen 400 for the well performance
  • the table 510 includes separate bar indicators for
  • the height of the bar indicators represents the number of hits.
  • the Range Limits box 520 includes Low, Medium and High dialog
  • the bar indicators 512 provide a quick look at
  • the screen 500 also allows the user to further filter the plates in light of the bar
  • Each plate may be selected (by clicking on it once; selected plates
  • the screen 500 provides a quick and efficient way for the data to be presented. This should be contrasted with prior art
  • FIG. 7 illustrates the "Assay Plate Patterns" screen 700. This screen displays four
  • the values are displayed in both numerical format and in a color- coded format.
  • the intensity of the colored dots in each cell is displayed in both numerical format and in a color- coded format.
  • the intensity of the colored dots in each cell is displayed in both numerical format and in a color- coded format.
  • the format of screen 700 allows subtle trends in the data, which might escape notice in
  • This type of correlation in the data may be a "fluke,” but it also might be of
  • Figure 8 illustrates the "Assay Plates" screen 800.
  • the assay plates screen 800 displays
  • each table 810a-n representing the results of an assay plate.
  • circle will be solid for hits exhibiting inhibition, while the circle will be "hollow” for hits
  • Screen 800 also provides the user with the ability to select individual wells. Wells are
  • Wells may be selected by left-clicking on the desired
  • inhibition i.e. pass the highest threshold
  • select all cells that exhibit medium inhibition only select all cells that exhibit the lowest inhibition only, etc.
  • This screen includes a table 610 in a format similar to that of the prior
  • This screen also allows individual wells to be marked as bad (by clicking on the
  • This screen also allows entire rows (by clicking on the letter in the left-hand side
  • Figure 9 illustrates the Compound List screen 900, which is presented in a 'pop-up'
  • the compound list screen 900 includes a table 910 listing each compound well selected from
  • Figure 10 illustrates the summary plate screen 1000.
  • the summary plate screen 1000 is
  • microplates are prepared for a single source plate which may have different compounds in
  • Each cell of plate table lOlOa-n in screen 1000 indicates a
  • summary value such as average inhibition, maximum inhibition, minimum inhibition, etc.
  • a color-coded solid dot 1012 or hollow dot 1014 is placed in cells with a "%
  • Figure 11 illustrates the assay plate performance screen 1 100.
  • the purpose of the assay is the assay plate performance screen 1 100.
  • plate performance screen 1100 is to display plate- wide statistics so that poorly performing
  • the screen 1100 includes a plate summary box 1110 including four sub-boxes: a plate CN box 1110a, an unused box 1110b, a plate signal-to-noise box 1110c
  • Each box is color coded, again corresponding to the
  • the row S/ ⁇ box 11 lOd is filled in at locations corresponding to the
  • screen 600 is displayed to the user. As discussed above, this screen allows entire rows or even
  • the screen 1100 allows a user to quickly eliminate assay
  • Screen 1200 displays the results of multiple types of assays for multiple compounds (the
  • Each polar plot 1210a-n includes a number of vectors
  • results for different assays are at different angles and are color-coded to match the assay names 1220 displayed near the
  • each vector represents the result, such as
  • results may be expressed as average, maximum, minimum, or mean (or any other relationship) “% Inhibition.”
  • % Stimulation may be expressed as average, maximum, minimum, or mean (or any other relationship)
  • a program adapted for the display and analysis of high throughput screening data has
  • the display program presents data in a format that facilitates rapid analysis.
  • Aplates (plate) .windowti) cNODATA End If CO End If
  • CVStDevHigh(i) Sqr (CVSumHighSquares (i) ) / Sqr (CVHighCount(i) - 1) Else
  • CVStDevHigh(i) cNODATA End If If CVLowCount(i) > 1 Then
  • ZStDevLowli Sqr (ZSumLowSquares (i) ) / Sqr(ZLowCoun (i) - 1)
  • ZSumLowSquares ZSumLowSquares (cSTATALL) + ( IZLowAverage (cSTATALL) - Aplates (plate) .Well (rw, cl ) .Raw) *
  • InhStDevHigh(i) Sqr(InhSumHighSquares (i) ) / Sqr (InhHighCount (i) - 1)
  • InhStDevLow(i) Sqr (InhSumLowSquares(i) ) / Sqr (InhLowCount (i) - 1)
  • SNStDevLow(i) Sqr (SNSu LowSquares (i) ) / Sqr (SNLowCount (i) - 1) CO Aplates (plate) .
  • Control (i, cLOW) SNLow(i) / SNLowCount (i)
  • CVSumHighSquares CVSumHighSquares (cSTATGOOD) + UCVHighAverage (cSTATGOOD) - Aplates (plate)
  • CVSumLowSquares (cSTATGOOD) + ( (CVLowAverage (cSTATGOOD) - Aplates (plate) .W ell (rw, cl) .Raw) * _
  • SNSumLowSquares (cSTATGOOD) + ( (SNLowAverage (cSTATGOOD) - Aplates (plate) .W ell (rw, cl) .Raw) * _ CO (SNLowAverage (cSTATGOOD) - Aplates (plate) .WelKrw, cD.Raw))
  • ZSumHighSquares ( cSTATALL ) ZSumHighSquares (cSTATALL) + ( (ZHighAverage (cSTATALL) - Aplates (plate) .Well (rw cl) .Raw) * _ m (ZHighAverage (cSTATALL) - Aplates (plate) .WelKrw, cD.Raw)) 'If Aplates (plate) .WelKrw, cl) .Good Then
  • ZSumHighSquares ( cSTATGOOD) + ( (ZHighAverage (cSTATGOOD) - Aplates (plate) .W m elKrw, cl) .Raw) * _ r ⁇ (ZHighAverage (cSTATGOOD) - Aplates (plate) .WelKrw, cD.Raw))
  • InhSumLowSquares InhSumLowSquares (cSTATALL) + ( (InhLowAverage (cSTATALL) - Aplates (plate) .Well( rw, cl) .Raw) * _
  • InhHighAverage (i) InhHigh(i) / InhHighCount (i)
  • InhHighAverage (i) cNODATA End If If SNHighCount(i) ⁇ > 0 Then
  • InhHigh InhHigh (cSTATALL) ⁇ Aplates (plate) .WelKrw, cD.Raw
  • InhLow(cSTATALL) InhLow (cSTATALL) + Aplates (plate) .WelKrw, cD.Raw
  • InhHigh InhHigh (cSTATGOOD) + Aplates (plate) .WelKrw, cl) .Raw
  • InhLow(cSTATGOOD) InhLow(cSTATGOOD) + Aplates (plate) .WelKrw, cD.Raw
  • ZLow(cSTATGOOD) ZLow(cSTATGOOD) ⁇ Aplates (plate) .WelKrw, cl) .Raw
  • Aplates (plate) .BadWells Aplates (plate) .BadWells t • " 6 ChrS (AscCA”) ⁇ rw) & cl + 1
  • i) 0
  • CVStDevHigh(i) 0
  • CVStDevLowli) 0
  • Hm i> strSQL "insert into Tropix_Compound_Svuranary (COMPOUND_ID, splate_id, ASSAY_CODE, AVERAGE_INHIBITION, " (.
  • Public Const ALLALL 0
  • Public Const ALLGOOD 1
  • Public Const SELECTEDALL 2
  • Public Const SELECTEDGOOD 3 c 00 'Used on Splateviews to determine which statistic should be used for displaying Inhibition
  • C ⁇ Public Const cAVERAGE 0
  • Public Const cLIMITINHIB 0
  • Public Const cLIMITCOMPOUNDCV 1
  • Public Const cLIMITPLATESN 2
  • Public Const cLIMITPLATECV 3
  • Threshold Val (txtThreshold.Text)
  • I picKey.DrawWidth 4 m m picKey.Line (ke .keypts (Index) . ⁇ tX(cMax) , key. eypts (Index) .ptY(cMax) )- (key.keyends (Index) .ptX(cMin) , key.keyends! Index) .ptY(cMin)), vbWhite
  • SelectedCompounds (MyLevel + 1) SelectedCompounds (MyLevel + 1) - 1 End If Debug. Print lx & " " I ly t " " St CompoundSuiranary(Sv_mnaryMatrix(MyLevel) .Location !lx, ly) .Index) .CompoundName & _
  • CompoundSummaryIndex (CompoundSummary (SummaryMatrix (MyLevel) .Locationdx, ly) .Index) .CompoundName)

Landscapes

  • Investigating Or Analysing Biological Materials (AREA)

Abstract

A method and apparatus for displaying data represents results from a single assay across multiple wells and plates (1010) on a single screen (1000) in a format that preserves the spatial relationship between a well on a plate and the sequential relationship between plates. Also provided to the user is the ability to display these results from multiple wells in a color coded format (1012) corresponding to a binary (e.g. good/bad) or quadripartite (e.g. good/marginally good/marginally bad/bad) division. Also displayed are plate-wide statistics, such as signal-to-noise ratio and variability, for multiple plates on a single screen so that problem plates can be readily identified. The ability for a user to view a summary of performance on a well-per-well basis across all compounds/plates is also provided to aid the user in detecting general trends, including the possible existence of mechanical errors. Finally, the user is also provided with the ability to select or deselect plates and assays for review in the above formats.

Description

TITLE OF THE INVENTION
DATA DISPLAY SOFTWARE
This application is a regular National application claiming priority from Provisional
Application, U.S. Application Serial No. 60/133,113 filed May 7, 1999. The entirety of that
provisional application is incorporated herein by reference.
BACKGROUND OF THE INVENTION
There are numerous situations in which data is generated and collected in a two
dimensional format. An example of data generated in a two dimensional format occurs in
biology, where assays of many different types are performed using microplates and
chip-based arrays (microplates and chip-based arrays are referred to as plates herein). One
such example is high throughput screening. Increasingly, high throughput screening of
multi-well plates, also known as microplates, or similarly prepared sequences of small
chambers that constitute reaction chambers is the method of choice for a wide variety of
biological assays. In this high throughput screening (HTS) method, hundreds and thousands
of combinations of potential actives, samples, probes and agents are combined, and subjected
to the same reaction conditions. The plates used in such screening methods may have in excess of 400 wells per plate. Frequently, each well is inspected to determine the presence
and strength of a particular signal, such as a chemiluminescent, colorometric, agglutination or
other visibly detectable signal. The types of assays employing HTS technology are not
particularly limited, but include reporter gene assays, immunoassays, fingerprint assays, etc.
In many embodiments, HTS technology involves preparing the mixture of sample and
reagent in each of the wells of a series of microplates, under the same conditions, by robotic means, in a controlled and sealed environment. In this way, each of the wells faces the same
conditions, except for the variable selected. The well plates or other reagent holders move
forward in "assembly line" fashion, until the reaction is complete, and it is time to detect the
absence, presence and/or strength of the signal. In a qualitative assay, either the presence or
absence of the visually detectable signal can be positive. In a quantative assay, measuring the
strength of the signal becomes paramount. In order to inspect, for example, the influence of a
wide variety of genetic modifications to a specific gene on the expression of that gene, it may
be necessary to have many thousands of plates read under the same conditions.
Thus, HTS technology places certain demands on the ability to rapidly inspect,
understand and correlate visually detectable data. Ideally, real time measures, or measures as
close to real time as possible, are sought so that anomalies and events detected can be
investigated. Given the large quantities of information and types of signals to be detected, and the importance of comparing and contrasting each event inspected, computer technology
is preferably employed. Nonetheless, employing computer technology, the human operator is
confronted with the difficulty of treating the vast amounts of information provided on a
reasonable scale.
What is needed is a method and system for displaying data in an easily understood
form that allows a user to rapidly review and assess the data.
SUMMARY OF THE INVENTION
The present invention meets the aforementioned need to a great extent by providing a method and apparatus for displaying data in a form that allows a user to rapidly review the
data and identify assays of interest for further inspection or other action and visualize overall
trends in the data. The invention accomplishes this through the presentation of results from a single assay across multiple wells and plates on a single screen in a format that preserves the
spatial relationship between the wells on a plate and the sequential relationship between
plates. This is done because it has been found that it is easier for a user to make the same
decision about multiple items of the same type than it is to make multiple decisions of
different types for the same item. The invention also provides the user with the ability to
display these results from multiple wells in a color coded format corresponding to a binary
(e.g. good/bad) or quadripartite (e.g. good/marginally good/marginally bad/bad) division.
The invention also displays plate-wide statistics, such as signal-to-noise ratio and variability,
for multiple plates on a single screen so that problem plates can be readily identified. The
ability for a user to view a summary of performance on a well-by-well basis across all
compounds/plates is also provided to aid the user in detecting general trends, including the
possible existence of mechanical errors. Finally, the invention provides the user with the
ability to select or deselect plates and assays for review in the above formats.
BRIEF DESCRIPTION OF THE DRAWINGS
The file of this patent contains at least one drawing executed in color. Copies of this
patent with color drawings will be provided by the Patent and Trademark Office upon request and payment of the necessary fee.
The foregoing and other advantages and features of the present invention will be more readily understood with reference to the following figures, in which:
Figure 1 is a drawing of a prior art display screen from a high throughput screening
data analysis program.
Figure 2 is a drawing of an initial display screen from a high throughput screening data analysis program according to one embodiment of the present invention. Figure 3 is a drawing of a display screen subsequent to the display screen of Figure 2.
Figure 4 is a drawing of a display screen subsequent to the display screen of Figure 3.
Figure 5 is a drawing of a display screen subsequent to the display screen of Figure 4.
Figure 6 is a drawing of a display screen subsequent to the display screen of Figure 5.
Figure 7 is a drawing of a display screen subsequent to the display screen of Figure 6.
Figure 8 is a drawing of a display screen subsequent to the display screen of Figure 7.
Figure 9 is a drawing of a display screen subsequent to the display screen of Figure 8.
Figure 10 is a drawing of a display screen subsequent to the display screen of Figure 9.
Figure 11 is a drawing of a display screen subsequent to the display screen of Figure 10.
Figure 12 is a drawing of a display screen subsequent to the display screen of Figure 11.
DETAILED DESCRIPTION
The present invention will be discussed with reference to a preferred embodiment of a
data analysis program. The invention is believed to be particularly well suited to high
throughput screening applications, and thus will be illustrated by a preferred embodiment
directed toward high throughput screening. The invention should not be understood, however,
to be limited to high throughput screening applications. The invention may be used in any situation in which data is generated and collected in a two dimensional format, and is not
limited to plates. Numerous specific details, such as specific colors, display dimensions, assay
types, etc., are set forth in order to provide a thorough understanding of the present invention.
The preferred embodiment described herein should not be understood to limit the invention.
Before proceeding with the detailed description, an explanation of some of the terms used herein is provided. Throughout the specification, references will be made to "source
plates" and "assay plates." As used herein, a source plate refers to a plate on which material is stored, while an assay plate refers to a plate on which assays are run. It is a common practice,
and often necessary, for material used in assays to be frozen. Furthermore, assays involving the
same material often must be run many times on different days. In order to avoid freezing and
thawing such material multiple times (which may damage the material), temporary storage
plates, referred to herein as master and daughter plates, are often prepared with material from the source plates. The source (and master and daughter where applicable) plate IDs are
maintained in the database along with the assay plate IDs. A single source or assay plate may
contain a single compound or multiple compounds.
Reference is made herein to "% Stimulation" and "% Inhibition." These values are typically measured relative to "control" wells on assay plates. It is customary for the first and
last columns of wells (or some portion thereof) to include a low control and a high control. The low control is a material which will completely inhibit a reaction, while the high control is
a material which is highly reactive. The low control well is taken to represent 100% inhibition
and the high control well is taken to represent 0% inhibition. The "% Inhibition" is thus a
measure of the amount of reaction in a well relative to the controls. If a material is more
reactive than the material in the high control well, this result is referred to as stimulation (rather
than negative inhibition). While inhibition must range between 0% and 100%, stimulation is
unbounded in theory. The signal to noise, or S/N, is simply a ratio of the results from the high
and low control wells. If the S/N for an assay plate is not sufficiently high, then the results from that plate may be unreliable.
Figure 1 illustrates a display screen 100 from a prior-art data analysis program. The
display 100 shows the results from a 96-well microplate; accordingly, the results for the assay
identified as CD4 for each well are presented in a well table 110 with 12 columns and 8 rows of
cells (labeled A-H in Figure 1). Each cell in columns 2-11 includes 2 values: the actual test data is presented on top and the sample number is presented below. The cells in the far left and
right columns 1 and 12 represent the plate control wells and therefore only include the test
values for the controls. Statistics for the entire plate are presented in a plate table 120 located
beneath the well table 110. The table 120 includes the CN (a measure of variablility), averages
and standard deviations for both the controls and samples, as well as the median for the
samples.
When presented with the screen 100, a user must make several decisions. First, the
operator must determine whether the plate is good. This includes determining whether the
plate signal to noise values are sufficient and whether the variability is acceptable. The signal
to noise can be determined with reference to averages for the positive and negative controls
shown in cells 122 and 124 of table 120. In this case, the signal-to-noise value is 1596.50 to
330.50. Once the user has determined that the plate is good, the user must then examine the
numerical values for each well to identify wells of interest. In the table 110, most wells exhibit
values well over 1000. Thus, a possible threshold of interest is 1000. In order to identify the
wells of interest, a user is required to examine each upper value of the table 1 10 in order to
identify which cells, such as cell G3, are below the threshold.
It will be readily appreciated by those of skill in the art that reviewing results in the
format described above from large numbers of wells and plates in a high throughput screening
scenario quickly becomes burdensome. The resulting fatigue may result in mistakes in
identifying wells of interest. Furthermore, determining values for thresholds of interest often
cannot be done without reviewing several plates to get a sense of the "global" results. Thus, the
plates reviewed initially may require a second review after the threshold in determined, resulting in even further inefficiency. The above-described display screen is plate-oriented; that is, the results are presented
relative to the microplates on which the assays were performed. Other prior art display
programs are compound-oriented. Such programs will display, for a single compound, the
results of several assays regardless of whether the assays were performed on the same or
different plates. Such programs suffer from problems analogous to those faced by the plate-
oriented displays. Thus, neither plate-oriented or compound-oriented displays are well suited for high throughput screening.
The operation of the present invention will now be discussed with reference to Figure 2.
Figure 2 illustrates the initial screen 200 presented to a user upon program start-up, which is
entitled "Connect to Database." The screen 200 includes a password dialog box 210 for
security. Also included are a number of boxes that allow the assay data to be filtered (as used
herein, filtering refers to selecting or de-selecting certain data for review and/or analysis): a
database box 220 for selecting the file/database containing the desired data; start and end date
boxes 230, 240 for filtering the assay data by date; a source plate filter box 250 for filtering by
source plate; and an assay plate box 260 for filtering by assay plate. Selection box 270 allows
all plates or good plates only to be selected (how good plates are distinguished from bad plates
is discussed in further detail below). Finally, pressing button 291 connects the program to the
database, button 292 disconnects the system from the database and button 293 causes the
display summary statistics (discussed in further detail below in connection with screen 1200).
Once the plates matching the aforementioned filters have been entered at the screen
200, the plates selected by those filters are listed in table 310 of the third screen 300 shown in
Figure 3. The table 310 lists the available assays 320a-n as well as the available plate
designations 330a-n (or, alternatively, the available dates). Plates may be further filtered by being selected (or de-selected) at this screen 300. Once the desired plates have been selected at the previous two screens (200, 300), the
data is thresholded at the screen 400 entitled "Data Presentation Thresholds" shown in Figure
4. Thresholding is the division of data into a manageable number of categories; it is done to
facilitate high speed review and analysis. A binary division (e.g. good/bad) or a quadripartite
division (e.g. good/marginally good/marginally bad/bad) are often desirable, although other
divisions are also contemplated.
The data that may be thresholded includes data relative to single wells as well as to
entire plates. In the screen 400, thresholds may be set for "% Inhibition," Compound Range
Ratios (a measure of how much compound performance varies), Assay Plate Signal to Noise,
and Assay Plate CN (a measure of plate variance). A window 420a-d for each of the foregoing
measures includes a plot of all values (all wells and all plates) of the respective measures for
either all assay data or all good assay data, depending upon the selection made in box 410 and
filtered as discussed above in connection with screens 200 and 300. Those of skill in the art
will recognize that both well and plate performance may be expressed and thresholded in ways
different from those presented above. For example, "% Inhibition" could be expressed in a raw
form such as a measure of the amount of light observed in a chemiluminescent assay. Rather
than a probability distribution of "% Inhibition," a histogram or cumulative probability
distribution may also be displayed. Similarly, the Compound Range Ratios may be alternatively expressed in terms of a standard deviation.
Figure 4 illustrates a quadripartite division. A quadripartite division requires setting
three thresholds. These thresholds are set by either typing the desired threshold in the colored
threshold dialog boxes 430a-c associated with each of the windows 420a-d windows (which may be desirable when a desired threshold may be determined in advance independently of the
observed data) or by "dragging" the colored threshold lines 431a-c corresponding to the dialog boxes 430a-c of the same color to the desired threshold location (which may be desirable when
thresholds are to be set at natural break points in the observed data). The SET MAX buttons
440a-d allow the user to adjust the upper limit of the horizontal axis of each window 420a-d.
As each threshold is set at screen 400, the results that pass the threshold are color-coded
in the same color as the threshold. It is important to note that the colors associated with each
threshold are chosen to be discrete; that is, the colors associated with each threshold are chosen
such that they are easily distinguishable, and all data between two thresholds are presented in the same color.
It should be noted that thresholds for "% Stimulation" (which will be displayed on other
screens, as discussed below) are also set based upon the "% Inhibition" thresholds. For
example, if the three thresholds for "% Inhibition" were set at 10%, 38% and 75% respectively
(resulting in ranges of 10% - 38%, 38% - 75%, and 75% - 100%), then the first threshold for
"% Stimulation" is chosen as 10% (10%-38%); the second threshold is chosen as 38% (38%-
75%); and the last threshold is chosen as 75% (75%-100%). Thus, the "% Stimulation"
thresholds are the equivalent to the "% Inhibition" thresholds but in the opposite direction.
Other relationships between the "% Inhibition" and "% Stimulation" thresholds are also
possible, of course.
Once thresholds for the data have been set as described above, a listing of all plates is
again presented in table 510 of the "Selected Plates" screen 500 of Figure 5. Screen 500
provides the user with an additional opportunity to filter data based on the results of the thresholds chosen in screen 400 as described above. Table 510 lists each plate as well as the
corresponding signal to noise and CV. Bad wells for each plate are also listed in the far right
hand column of table 510. Table 510 also includes an indication of the number of "hits" for
each plate in the far left hand column in the form of bar indicators 512. Hits are wells that have surpassed at least one of the thresholds chosen in screen 400 for the well performance
measurement ("% Inhibition in this case). The table 510 includes separate bar indicators for
each of the three thresholds. The height of the bar indicators represents the number of hits.
There are four possible bar indicator heights: 0 (no bar), Low, Medium and High. The
relationship between the number of hits and the height of the bar indicators 512 is defined by the Range Limits Box 520. The Range Limits box 520 includes Low, Medium and High dialog
boxes 520a,b,c, respectively. In Figure 5, these values are Low=l, Medium=2 and High=5.
Thus, if a plate has no hits (i.e., no wells above the thresholds set in the screen 400), no bars
will be present in the far left hand column of table 510. If a plate has a single hit, a bar with a
low height will be displayed in the far left hand column of table 510. The color of the bar will
depend upon the thresholds set in screen 400. Thus, the bar 512a of table 510, which is a low
height and red color, signifies that a single well on the plate with ID number TRS01A1014A
had a "% Inhibition" above 32.67%. Similarly, the bar 512b, which is light blue and medium
height, signifies that there were at least 2 and as many as 4 wells with a "% Inhibition" between
20.47% and 26.16% on that same plate. Thus, the bar indicators 512 provide a quick look at
the results for each of the plates.
The screen 500 also allows the user to further filter the plates in light of the bar
indicator 512 information. Each plate may be selected (by clicking on it once; selected plates
are surrounded by a black outline box 550) or de-selected (by clicking on it a second time).
Thus, if a user only desired to review results for plates with hits, the screen 500 provides a quick and efficient way for the data to be presented. This should be contrasted with prior art
review and analysis programs as discussed above, where plates would need to be reviewed one
screen at a time in a numerical (rather than color) format in order to identify plates of interest. After the user has reviewed the plates at the "Selected Plates" screen 500, the user has
the option (via the Show menu 580 of Figure 5) of viewing the data in one of four formats:
"Assay Plate Patterns," "Summary Plates," "Assay Plates," and "Assay Plate Performance." Each format will be discussed in turn below in no specific order. A user will often switch
between these formats in the process of filtering and analyzing data.
Figure 7 illustrates the "Assay Plate Patterns" screen 700. This screen displays four
8x12 cell tables 710a-d, wherein each table cell represents the average "% Inhibition" (or other
well performance measure) for each corresponding well across four possible subsets of data:
all plates/all wells; all plates, good wells only (good wells are those wells not marked as bad,
which may be done at screen 600 discussed below); selected plates only, all wells; and selected
plates only, good wells only. Values other than average, such as mean, maximum, minimum,
etc. could also be displayed. The values are displayed in both numerical format and in a color- coded format. In the color coded-format, the intensity of the colored dots in each cell
represents the magnitude of the value. Thus, cells in the left-most columns of tables 710a-d,
which are used as control cells, exhibit a bright red color representing 100% inhibition, while
non-control cells with lesser magnitudes exhibit a pale red color (cells with very low
magnitudes appear colorless).
The format of screen 700 allows subtle trends in the data, which might escape notice in
a plate-by-plate format, to be quickly spotted. For example, it appears from a brief glance at
Figure 7, that the % Inhibition is highest for cells in the upper left hand quarter of all of the
tables 710a-d. This type of correlation in the data may be a "fluke," but it also might be of
great importance. It will be recognized by those of ordinary skill in the art that a discrete color-coded
format, such as the format depicted in Figure 10, could also be used in place of the continuous
intensity display of Figure 7.
Figure 8 illustrates the "Assay Plates" screen 800. The assay plates screen 800 displays
multiple tables 810a-n, with each table 810a-n representing the results of an assay plate. Each
cell of the tables 810a-n again represents a corresponding plate well. A colored circle appears
in each well in which a hit (relative to the thresholds defined at screen 400) has occurred. The
circle will be solid for hits exhibiting inhibition, while the circle will be "hollow" for hits
exhibiting stimulation. This screen should again be compared with the prior art screen 100. In
screen 800, the results from 23 different plates may be analyzed more quickly than the results
from a single plate in screen 100. This increase in efficiency is especially important in high
throughput screening.
Screen 800 also provides the user with the ability to select individual wells. Wells are
selected so that the compound in that well is added to the compound list, which is discussed
below in connection with screen 900. Wells may be selected by left-clicking on the desired
wells. Furthermore, keys are provided that allow the user to select all compounds, select any
compound that exhibits inhibition or stimulation, select all compounds that exhibit maximum
inhibition (i.e. pass the highest threshold) only, select all cells that exhibit medium inhibition only, select all cells that exhibit the lowest inhibition only, etc.
It should be noted that display of the data in a format similar to the prior art view is also
available. By clicking on a Plate ID from screen 800, a screen 600, as shown in Figure 6, is
presented to the user. This screen includes a table 610 in a format similar to that of the prior
art. This screen also allows individual wells to be marked as bad (by clicking on the
corresponding table cell once) or unmarked (by clicking on the corresponding table cell a second time). This screen also allows entire rows (by clicking on the letter in the left-hand side
of the table 610 corresponding to the bad row, or even the entire plate to be marked as bad (by
clicking on the upper left hand corner of the table). Marking wells as bad allows a user to
examine results from good wells only in a summary form such as the "Assay Plate Patterns"
screen 700 as discussed above.
Figure 9 illustrates the Compound List screen 900, which is presented in a 'pop-up'
background window each time a compound in the same assay is added to the compound list.
The compound list screen 900 includes a table 910 listing each compound well selected from
screen 800 and its source plate ID and assay plate location.
Figure 10 illustrates the summary plate screen 1000. The summary plate screen 1000 is
especially useful in situations in which multiple microplates with identical material in
corresponding wells are used for multiple tests of the same compound (such as when multiple
microplates are prepared for a single source plate which may have different compounds in
respective source plate wells). Each cell of plate table lOlOa-n in screen 1000 indicates a
summary value, such as average inhibition, maximum inhibition, minimum inhibition, etc. As
in screen 800, a color-coded solid dot 1012 or hollow dot 1014 is placed in cells with a "%
Inhibition" or "% Stimulation" above the thresholds set at screen 400. In addition, a
background color 1016 (corresponding to the thresholds set at the threshold screen 400) indicating the compound range ratio is displayed. A continuous intensity color-coded format,
such as the format shown in Figure 7, could be used in place of the discrete format shown in
Figure 10.
Figure 11 illustrates the assay plate performance screen 1 100. The purpose of the assay
plate performance screen 1100 is to display plate- wide statistics so that poorly performing
plates can be quickly identified. The screen 1100 includes a plate summary box 1110 including four sub-boxes: a plate CN box 1110a, an unused box 1110b, a plate signal-to-noise box 1110c
and a row signal-to-noise box 11 lOd. Each box is color coded, again corresponding to the
thresholds set at screen 400. The plate CV and S/Ν boxes 1110a, 1110c are entirely filled with
the appropriate color. The row S/Ν box 11 lOd is filled in at locations corresponding to the
positional locations of rows on the assay plate. Thus, for example, if the upper four rows (out
of eight) on a plate had a poor S/Ν, then the upper half of the row S/Ν box 11 lOd would be
filled in with the appropriate color. By clicking on a summary plate box 1110, the text-based
screen 600 is displayed to the user. As discussed above, this screen allows entire rows or even
plates to be marked as "bad." Thus, the screen 1100 allows a user to quickly eliminate assay
results from plates with poor signal-to-noise ratios by marking the appropriate wells as bad.
The foregoing screens all allow the results of only one assay type to be reviewed at a
time. Screen 1200 displays the results of multiple types of assays for multiple compounds (the
desired assay types are chosen in a prior screen not shown here). Each compound is
represented as a polar plot 1210a-n. Each polar plot 1210a-n includes a number of vectors
1214, 1216, 1218, each with a different magnitude and angle. The results for different assays are at different angles and are color-coded to match the assay names 1220 displayed near the
lower right hand corner of screen 1200. The length of each vector represents the result, such as
"% Inhibition," for each assay, with the longest possible vector representing 100% inhibition.
As above, the results may be expressed as average, maximum, minimum, or mean (or any other relationship) "% Inhibition." Furthermore, rather than "%Inhibition," "% Stimulation" may
also be displayed. Other variations on this display are also possible.
A program adapted for the display and analysis of high throughput screening data has
been described. The display program presents data in a format that facilitates rapid analysis.
This is accomplished through providing the user with the ability to create thresholds by which assay results may be color-coded and by displaying assay results in a single assay, multiple
plate format as well as a multiple compound, multiple assay format. Data analysis is also aided
through the presentation of summary screens which show results of multiple assay iterations as
well as the presentation of plate-wide statistics across multiple plates.
While the invention has been described in detail in connection with the preferred
embodiments known at the time, it should be readily understood that the invention is not
limited to such disclosed embodiments. Rather, the invention can be modified to incorporate
any number of variations, alterations, substitutions or equivalent arrangements not heretofore described, but which are commensurate with the spirit and scope of the invention.
Accordingly, the invention is not to be seen as limited by the foregoing description, but is only
limited by the scope of the appended claims.
The following is a source code listing of a preferred embodiment of the invention.
Else
SplateslcSPLATE, spit) .assay (0) .Well (rw, cl) .ResultsCount (cSTATGOOD) = 0
End If
End If
Next stat
Next cl
Next rw End If 'started End If ' if found aplt = aplt + 1 Wend
Call CalcSPlateCV(splt)
SplateslcSPLATE, spit) .StatsStarted = False End Sub Integer, rw As Integer, cl As Integer)
OOD
spit) . assay (0) .Well (rw, cl) .ResultString(stat) spit) .assa (0) .Well (rw, cl) .ResultsCoun (stat)
Figure imgf000018_0001
9
Functions - 10
SplateslcSPLATE, spit) .assay (0) .Well (rw, cl) .Resul String (cSTATALL) = SplateslcSPLATE, spl t) .assay(O) .Welllrw, cl ). ResultString (cSTATALL) & " , - & Format(Aplates (aplt) .Well (rw, cl) . Inhib(cSTATALL) , "000.000")
Else
If Aplates (aplt) .Well (rw, cl) .Good Then
SplateslcSPLATE, spit) .assay (0) .Well (rw, cl) .ResultsCount (cSTATGOOD) = 1 + SplateslcSP
LATE, spit) .assay (0) .Well (rw, cl) .ResultsCount (cSTATGOOD)
SplateslcSPLATE, spit) .assay(0) .Well (rw, cl) .ResultString (cSTATGOOD) = SplateslcSPLATE
, spit) .assay (0) .Welllrw, cl) .ResultString (cSTATGOOD) & "," & Forma (Aplates (aplt) .Well (rw, cl) . Inhib(cSTATGOOD) , "000.000
End If End If If SplateslcSPLATE, spit) .assay(0) .Well (rw, cl) .ResultsCount(stat) > 0 Then
SplateslcSPLATE, spit) .assay (0) .Well |rw, cl) .Inhib(stat) = SplateslcSPLATE, spit) .assaylO) Welllrw, cl) . Iπhib(stat) / SplateslcSPLATE, spit) .assay(0) .Well (rw, cl) .ResultsCount(stat)
End If If spit = 0 And rw = 3 And cl = 3 And stat = cSTATGOOD Then
Debug. Print SplateslcSPLATE, spit) .assay10) .Well (rw, cl) .Extreme (cHIGH, cSTATGOOD) & " * t
SplateslcSPLATE, spit) .assay(0) .Well |rw, cl) .Extreme (cLOW, cSTATGOOD) I SplateslcSPLATE, spit) .assay (0) .Welllrw, cl ) .Inhib(CSTATGOOD) & " " 6 _ SplateslcSPLATE, spit) .assay(0) .Welllrw, cl) .ResultStringIcSTATGOOD)
End If Next stat Next cl Next rw Else 'Add a new Splate record to the empty slot ' set plate level info
CO SplateslcSPLATE, spit) StatsStarted = True
C Splates (cHPLATE, spit) PlatelD = Aplates (aplt) .PlateΙD(cMPLATE)
CD Splates (cDPLATE, spit) CO PlatelD = Aplates laplt) .PlateΙD(cDPLATE) • set well level info For rw = 0 To 7
For cl = 0 To 11 m SplateslcSPLATE, spit) .assay (0) .Well (rw cll.Type = Aplates (aplt) .Well (rw, cl) .Type SplateslcSPLATE, spi ) .assay (0) .Well (rw cl). Compound = Aplates (aplt) .Well (rw, cl).Compound
(Λ γ1 For stat = cSTATALL To cSTATGOOD
SplateslcSPLATE, spi ) .assay (0) .Well (rw, cl) . Inhib(stat) = Aplates (aplt) .Well (rw, cl).Inhib(st m at) SplateslcSPLATE, spit) .assay (0) .Well (rw, cl) .Extreme (cLOW, stat) = (Aplates laplt) .Well (rw, cl)
.Inhib(stat))
£ SplateslcSPLATE, spit) .assa (0) .Well (rw, cl) .Extreme (cHIGH, stat) = (Aplates(aplt) .Well (rw, cl
|— ) .Inhib(stat)) m If stat = cSTATALL Then SplateslcSPLATE, spit) .assay(0) .Well (rw, cl) .ResultsCount (cSTATALL) = 1
•Z SplateslcSPLATE, spit) .assay (0) .Well (rw, cl) .ResultString (cSTATALL) = ", t Forma (Aplates
(aplt) .Welllrw, cl) .Inhib(cSTATALL) , "000.000")
Else
If Aplates (aplt) .Well (rw, cl) .Good Then
SplateslcSPLATE, spit) .assay(0) .Well (rw, cl) .ResultsCount (cSTATGOOD) = 1
SplateslcSPLATE, spit) .assay (0) .Well (rw, cl) .Resul String (cSTATGOOD) = "," t Format(Ap lates (aplt) .WelKrw, cl ). Inhib(cSTATGOOD) , "000.000")
On Error GoTo finished spit = 0 ,
While SplateslcSPLATE, spit) . PlatelD <> ""
CalcSPlateStat (spit) spit = spit + 1 rmPreSelect.pbrData. value = frmPreSelect.pbrData.value + 1
Wend
Exit Sub finished:
End Sub
Public Sub CalcSPlateStat (spit As Integer)
Dim pit As Integer
Dim aplt As Integer
Dim plttype As Integer
Dim assaynum As Integer
Dim rw As Integer
Dim cl As Integer
Dim i As Integer
Dim stat As Integer
Dim sum(2) As Single CO Dim stdev(2) As Single
C Dim found As Boolean
5 Dim firstrecord As Boolean
^ While Aplates (aplt) .PlateΙD(cAPLATE) <> - - found = False
—I , If (Aplates (aplt) . PlatelD (cSPLATE) = SplateslcSPLATE, spit) . PlatelD) Then r" •—* found = True
W °? End If I If found Then
If SplateslcSPLATE, spit) .StatsStarted Then 'add plate stats to the existing splate For rw = 0 To 7 3 For cl = 0 To 11
C For stat = cSTATALL To cSTATGOOD m SplateslcSPLATE, spit) .assay (0) .Well (rw, cl) .Inhib(stat) = (Aplates (aplt) .Well (rw, cl).Inbib(s
Nj tat) + _ σ> (SplateslcSPLATE, spit) .assay (0) .Well (rw, cl) . Inhib(stat) * SplateslcSPLATE, spit) . assay (0 ) .WelKrw, cl) .ResultsCount (stat) ) )
If SplateslcSPLATE, spit) .assay(0) .Well Irw, cl) .Extreme (cLOW, stat) > (Aplates (aplt) .Welllrw, cl) .Inhib(stat)) Then
SplateslcSPLATE, spit) .assay (0) .Well (rw, cl) .Extreme (cLOW, stat) = (Aplates (aplt) .WelKrw, cl) .Inhib(stat) )
End If
If SplateslcSPLATE, spit) .assay (0) .WelKrw, cl) . Extreme (cHIGH, stat) < (Aplates (aplt) .WelKrw, cl) .Inhib(stat) ) Then
SplateslcSPLATE, spit) .assay (0) .Welllrw, cl) .Extreme (cHIGH, stat) = (Aplates (aplt) .WelKrw cl) .Inhib(stat))
End If
If stat = cSTATALL Then
SplateslcSPLATE, spit) .assay (0) .Welllrw, cl ). ResultsCount IcSTATALL) = 1 + SplateslcSPLATE, spit) .assaylO) .Welllrw, cl) .ResultsCount (cSTATALL)
' the control Z statistic
If ControlSource = cCONTROLS Then
If ZStDevHighli) <> cNODATA And ZStDevLowli) <> cNODATA And IZHighAverage (i) - ZLowAverage(i) <> 0) Then
Aplates (plate) .window(i) = 1 - ( (ZStDevHigh(i) * ZRange + ZRange * ZStDevLowli) ) / IZHighAverage (i) - ZLow
Average (i) ) )
Else
Aplates (plate) .windo (i) = cNODATA End If Else
If .stdevDatali) <> cNODATA And ZStDevLow(i) <> cNODATA And (daverage(i) - ZLowAverage(i) <> 0) Then
Aplates (plate) .window(i) = 1 - ( (stdevDatali ) * ZRange + ZRange * ZStDevLowli)) / Absldaverage(i) - ZLowAv erageli) ) )
Else
Aplates (plate) .windowti) = cNODATA End If CO End If
C D- O H
—I Functions - 9
C H j. If i =„ 0 Then
I -L. Debug. Print Aplates (plate) .PlateΙD(cAPLATE) ; ": Z= " Aplates (plate) .window(i) m ^O End If m ' Next i
H
jg spit = 0
C found = False r~ Do While (SplateslcSPLATE, spit) .PlatelD <> "") And (Not found)
171 If (Aplates (plate) .PlateΙD(cSPLATE) = Splates (cSPLATE, spit) . PlatelD) Then oJ found = True
-— Else spit = spit + 1 End If Loop
If found Then "Splate already entered
Else 'Not found - add a new Splate record to the empty slot
' set plate level info
SplateslcSPLATE, spit) . PlatelD = Aplates (plate) . PlateΙD(cSPLATE)
Splates (cMPLATE, spit) . PlatelD = Aplates (plate) . PlatelDIcMPLATE)
Splates (cDPLATE, spit) . PlatelD = Aplates (plate) . PlateΙD(cDPLATE)
Splates (cDPLATE, spit) .StatsStarted = False
End If 'found
End Sub
Public Sub CalcSPlateStatsl)
Dim spit As Integer
Dim t pstring As String Else
SNStDevLow(i) = cNODATA
Aplates (plate) .Control (i, cLOW) = cNODATA End If
If CVHighCount(i) > 1 Then
CVStDevHigh(i) = Sqr (CVSumHighSquares (i) ) / Sqr (CVHighCount(i) - 1) Else
CVStDevHigh(i) = cNODATA End If If CVLowCount(i) > 1 Then
CO CVStDevLow(i) = Sqr(CVSumLowSquaresli) ) / SqrICVLowCount(i) - 1) c_ Else
DO CVStDevLow(i) = cNODATA
CO End If
^ If ZHighCount (i) > 1 Then
5 i ZStDevHighli ) = Sqr (ZSumHighSquares (i) ) / Sqr (ZHighCoun (i) - 1) m ^ Else ' Z,StDevHigh(i) = cNODATA
I End If m If ZLowCount(i) > 1 Then ] ZStDevLowli) = Sqr (ZSumLowSquares (i) ) / Sqr(ZLowCoun (i) - 1)
-U Else
73 ZStDevLowli) = cNODATA
C End If r- m r σ> If dcount(i) > 1 Then
~—' stdevDatali) = Sqr (SumDataSquares (i) ) / Sqr (dcount (i) - 1)
Aplates (plate) .AvgData(i) = Dsum(i) / dcount(i) Else
StdevDatali) = cNODATA Aplates (plate) .AvgData(i) = cNODATA End If
If ControlSource = cCONTROLS Then
If CVHighAverage(i) <> 0 Then
If CVStDevHigh(i) <> cNODATA Then
Aplates (plate) .cv(i) = 100 * CVStDevHighU ) / CVHighAverage ( i )
Else
Aplates (plate) .cvti) = cNODATA
Figure imgf000022_0001
End If End If
Else ' controlsource <> ccontrols
If daverage(i) <> 0 Then
If stdevDatali) <> cNODATA Then
Aplates (plate) .cv(i) = 100 * stdevData(i) / daverage(i)
Else
Aplates (plate) .cv(i) = cNODATA
End If End If End If
End If
If Aplates (plate) .WelKrw, cl) .Type = zctKcLOW) Then
ZSumLowSquares (cSTATALL) = ZSumLowSquares (cSTATALL) + ( IZLowAverage (cSTATALL) - Aplates (plate) .Well (rw, cl ) .Raw) *
(ZLowAverage (cSTATALL) - Aplates (plate) .WelKrw, cD.Raw))
CO c If Aplates (plate) .WelKrw, cl) .Good Then gj ZSumLowSquares (cSTATGOOD) = ZSumLowSquares (cSTATGOOD) + ( (ZLowAverage (cSTATGOOD) - Aplates (plate) .Well
CO (rw, cl) .Raw) * _
H (ZLowAverage (cSTATGOOD) - Aplates (plate) .WelKrw, cD.Raw))
H End If
C End If m CO lό If Aplates (plate) .WelKrw, cl) .Type = "D" Then ►-• SumDataSquares (cSTATALL) = SumDataSquares (cSTATALL) + ( (daverage (cSTATALL) - Aplates (plate) -WelKrw, cl) .R m ' aw) * _ rπ (daverage (cSTATALL) - Aplates (plate) .WelKrw, cl(.Raw)) ^J If Aplates (plate) .WelKrw, cl) .Good Then
jB SumDataSquares (cSTATGOOD) = SumDataSquares (cSTATGOOD) + ( (daverage (cSTATGOOD) - Aplates (plate) .WelKrw
C . cl) .Raw) * _
I- (daverage (cSTATGOOD) - Aplates (plate) .Well (rw, cl).Raw))
171 End If
& End If
- Next cl Next rw
For i = cSTATALL To CSTATGOOD
If InhHighCount(i) > 1 Then
InhStDevHigh(i) = Sqr(InhSumHighSquares (i) ) / Sqr (InhHighCount (i) - 1)
Else
InhStDevHigh(i) = cNODATA
End If
Aplates (plate) .InhibStDevs (i, cHIGH) = InhStDevHigh(i)
If InhLowCount(i) > 1 Then
InhStDevLow(i) = Sqr (InhSumLowSquares(i) ) / Sqr (InhLowCount (i) - 1)
Figure imgf000023_0001
Functions - 8 Else
InhStDevLow(i) = cNODATA
End If
Aplates (plate) . InhibStDevs (i, cLOW) = InhStDevLow(i)
If SNHighCount(i) > 1 Then
SNStDevHigh(i) = Sqr (SNSumHighSquares (i ) ) / Sqr (SNHighCount (i) - 1)
Aplates (plate) .Control (i, cHIGH) = SNHighAverage(i) Else
SNStDevHigh(i) = cNODATA
Aplates (plate) .ControKi, cHIGH) = cNODATA End If If SNLowCount(i) > 1 Then
SNStDevLow(i) = Sqr (SNSu LowSquares (i) ) / Sqr (SNLowCount (i) - 1) CO Aplates (plate) .Control (i, cLOW) = SNLow(i) / SNLowCount (i)
CD
CO Functions - 7
H
H End If
5 _ If Aplates (plate) .WelKrw, cl).Tyρe = CVCtl(cHIGH) Then m t CVSumHighSquares (cSTATALL) = CVSumHighSquareS (cSTATALL) + ( (CVHighAverage (cSTATALL) - Aplates (plate) .WelK to
CO rw, cl) .Raw) * _
I (CVHighAverage (cSTATALL) - Aplates (plate) .Well (rw, cD.Raw)) m If Aplates (plate) .WelKrw, cl) .Good Then m CVSumHighSquares (cSTATGOOD) = CVSumHighSquares (cSTATGOOD) + UCVHighAverage (cSTATGOOD) - Aplates (plate
H ) .WelKrw, cl) .Raw) * _
*J (CVHighAverage (cSTATGOOD) - Aplates (plate) .Well (rw, cD.Raw))
C End If r- m End If If Aplates (plate) .WelKrw, cl) .Type = CVCtKcLOW) Then r σ> CVSumLowSquares (cSTATALL) = CVSumLowSquares (cSTATALL) ♦ ( (CVLowAverage (cSTATALL) - Aplates (plate) .WelKrw, cl) .Raw) * _
(CVLowAverage (cSTATALL) - Aplates (plate) .WelKrw, cD.Raw)) If Aplates (plate) .WelKrw, cl) .Good Then
CVSumLowSquares (cSTATGOOD) = CVSumLowSquares (cSTATGOOD) + ( (CVLowAverage (cSTATGOOD) - Aplates (plate) .W ell (rw, cl) .Raw) * _
(CVLowAverage (cSTATGOOD) - Aplates (plate) .WelKrw, cD.Raw))
End If End If If Aplates (plate) .WelKrw, cD.Type = SNCtKcHIGH) Then
SNSumHighSquares (cSTATALL) = SNSumHighSquares (cSTATALL) + ( (SNHighAverage (cSTATALL) - Aplates (plate) .Well! rw, cl) .Raw) * _
(SNHighAverage (cSTATALL) - Aplates (plate) .WelKrw, cD.Raw)) If Aplates (plate) .WelKrw, cl) .Good Then
SNSumHighSquares (cSTATGOOD) = SNSumHighSquares (cSTATGOOD) + ( (SNHighAverage (cSTATGOOD) - Aplates (plate
).WelKrw, cD.Raw) * _
(SNHighAverage (cSTATGOOD) - Aplates (plate) .Wellfrw, cD.Raw)) End If End If If Aplates (plate) .WelKrw, cl) .Type = SNCtKcLOW) Then
SNSumLowSquares (cSTATALL) = SNSumLowSquares (cSTATALL) + ( (SNLowAverage (cSTATALL) - Aplates (plate) .WelKrw, cl) .Raw) *
(SNLowAverage (cSTATALL) - Aplates (plate) .Well (rw, cD.Raw)) If Aplates (plate) .WelKrw, cl) .Good Then
SNSumLowSquares (cSTATGOOD) = SNSumLowSquares (cSTATGOOD) + ( (SNLowAverage (cSTATGOOD) - Aplates (plate) .W ell (rw, cl) .Raw) * _ CO (SNLowAverage (cSTATGOOD) - Aplates (plate) .WelKrw, cD.Raw))
JΞ End If
CD CO End If If Aplates (plate) .WelKrw, cl) .Type = ZCtKcHIGH) Then
ZSumHighSquares (cSTATALL) = ZSumHighSquares (cSTATALL) + ( (ZHighAverage (cSTATALL) - Aplates (plate) .Well (rw cl) .Raw) * _ m (ZHighAverage (cSTATALL) - Aplates (plate) .WelKrw, cD.Raw)) 'If Aplates (plate) .WelKrw, cl) .Good Then
CO 3) ZSumHighSquares (cSTATGOOD) = ZSumHighSquares (cSTATGOOD) + ( (ZHighAverage (cSTATGOOD) - Aplates (plate) .W m elKrw, cl) .Raw) * _ rϋ (ZHighAverage (cSTATGOOD) - Aplates (plate) .WelKrw, cD.Raw))
H End If For rw = 0 To 7
|— For ql = 0 To 11 m ' % Inhibition σ NJ> For i = CSTATALL To cSTATGOOD
If InhLowCount(i) <> 0 Then
) / InhLowCount(i) ) )
Figure imgf000025_0001
If (daverage(i) - (InhLow(i) / InhLowCount (i) ) ) 0 0 Then
Aplates (plate) .WelKrw, cl).Inhib(i) = 100 * (1 - (Aplates (plate) .WelKrw, cD.Raw - (InhLowli
) / InhLowCount (i) ) ) / (daverage(i) - (InhLow(i) / InhLowCount (i) )) )
Else ' haverage = 0, No good Data Wells
Aplates (plate) .WelKrw, cl).Inhib(i) = cNODATA
End If
End If
Else
Aplates (plate) .WelKrw, cl).Inhib(i) = cNODATA
End If ' Set the * Stimualtion statistic here If Aplates (plate) .WelKrw, cl).Inhib(i) <> cNODATA Then
Aplates (plate) .WelKrw, cl).Stim(i) = 100 - Aplates (plate) .WelKrw, cl).Inhib(i) Else
Aplates (plate) .WelKrw, cl) .Stim(i) = cNODATA End If
Next i
CO If Aplates (plate) .WelKrw, cl) .Type = ActCtl (cHIGH) Then
£j InhSumHighSquares (cSTATALL) = InhSumHighSquares (cSTATALL) + ( (InhHighAverage (cSTATALL) - Aplates (plate) .We
CD CO lKrw, cl) .Raw) * _
(InhHighAverage (cSTATALL) - Aplates (plate) .WelKrw, cl(.Raw)) ^ If Aplates (plate) .WelKrw, cl) .Good Then
C InhSumHighSquares (cSTATGOOD) = InhSumHighSquares (cSTATGOOD) + ( (InhHighAverage (cSTATGOOD) - Aplates (pi
—I ate) .WelKrw, cD.Raw) * _
171 * (InhHighAverage (cSTATGOOD) - Aplates (plate) .WelKrw, cl(.Raw)) O t End If
£ f* End If η If Aplates (plate) .WelKrw, cl) .Type = ActCtKcLOW) Then
—I InhSumLowSquares (cSTATALL) = InhSumLowSquares (cSTATALL) + ( (InhLowAverage (cSTATALL) - Aplates (plate) .Well( rw, cl) .Raw) * _
7)
C (InhLowAverage (cSTATALL) - Aplates (plate) .WelKrw, cD.Raw)) If Aplates (plate) .WelKrw, cl) .Good Then in InhSumLowSquares (cSTATGOOD) = InhSumLowSquares (cSTATGOOD) + ( (InhLowAverage (cSTATGOOD) - Aplates (plate
NJ ).WelKrw, cD.Raw) * _ σ> (InhLowAverage (cSTATGOOD) - Aplates (plate) .Well (rw, cD.Raw)) End If
' Average High Control
If InhHighCount(i) <> 0 Then
InhHighAverage (i) = InhHigh(i) / InhHighCount (i)
Else
InhHighAverage (i) = cNODATA End If If SNHighCount(i) <> 0 Then
SNHighAverage (i) = SNHigh(i) / SNHighCount (i) Else
SNHighAverage (i) = cNODATA
End If
Figure imgf000027_0001
Figure imgf000028_0001
If SNHighCount(i) = 0 Then
SNHighCount(i) = dcount(i)
SNHigh(i) = Dsum(i)
End If
If ZHighCoun (i) = 0 Then
ZHighCount (i) = dcount(i)
ZHigh(i) = Dsum(i) End If
Row Signal to Noise stats For rw = 0 To 7
CO For i = cSTATALL To cSTATGOOD C Aplates (plate) .RowSN(i, rw) = cNODATA
CD If lsum(i) > 0 And rowsignalcount (rw, i) > 0 Then
CO Aplates (plate) .RowSN(i, rw) = Irowsignallrw, i) / rowsignalcount (rw, i|) / (lsum(i) / lcount(i)) ! End If
P i If InhLow(i) > ) And rowsignalcount (rw, i) > 0 Then
—I £^ Aplates (plate) .RowSNli, rw) = (rowsignaKrw, i) / rowsignalcount (rw, i)) / (InhLowli) / InhLowCount (i) ) m i End If
CO Next i
I Next rw m J For i = cSTATALL To cSTATGOOD
,—« ' Plate Signal to Noise O If SNLow(i) <> 0 Then
^ If ControlSource = cCONTROLS Then fn If SNHigh(i) <> 0 Then
^j Aplates (plate) .sn(i) = (SNHigh(i) / SNHighCoun Ii) ) / (SNLow(i) / SNLowCount (i) ) σ> Else
Aplates (plate) .snli) = (Dsumli) / dcountli)) / (SNLow(i) / SNLowCount (i) ) End If Else
Aplates (plate) .sn(i) = cNODATA End If
All wells, regardless of status
If Aplates (plate) .WelKrw, cl) .Type = ActCtl(cHIGH) Then
InhHigh (cSTATALL) = InhHigh (cSTATALL) ♦ Aplates (plate) .WelKrw, cD.Raw
InhHighCoun (cSTATALL) = InhHighCoun (cSTATALL) + 1
If ControlSource <> cCONTROLS Then ■ If control wells are ignored, subtract it here to cancel out later
rowsignallrw, cSTATALL) = rowsignal (rw, cSTATALL) - Aplates (plate) .WelKrw, cD.Raw rowsignalcount (rw, cSTATALL) = rowsignalcount (rw, cSTATALL) - 1
End If Elself Aplates (plate) .WelKrw, cl) .Type = ActCtKcLOW) Then
InhLow(cSTATALL) = InhLow (cSTATALL) + Aplates (plate) .WelKrw, cD.Raw
InhLowCount (cSTATALL) = InhLowCount (cSTATALL) + 1
'subtract low control from a row so that it can be added in again later, zeroing itself out rowsignaKrw, cSTATALL) = rowsignallrw, cSTATALL) - Aplates (plate) .WelKrw, cl) .Raw rowsignalcoun (rw, cSTATALL) = rowsignalcount (rw, cSTATALL) - 1 Else
Dsum(cSTATALL) = Dsu (cSTATALL) + Aplates (plate) .Well (rw, cD.Raw dcoun (cSTATALL) = dcoun (cSTATALL) + 1 End If rowsignallrw, cSTATALL) = rowsignaKrw, cSTATALL) + Aplates (plate) .WelKrw, cD .Raw rowsignalcount (rw, cSTATALL) = rowsignalcoun Irw, cSTATALL) + 1
C
C \JD Ixfr AΛpplxaatteess (ipilaate-)i ..Wif-eelxlxl.rxw,, cu-l)ι ..Tlyypyeβ =- S-NπC-tι.l-(ιccπHIιG-Hπj) Tihiieenu
CO SNHigh (cSTATALL) = SNHigh (cSTATALL) + Aplates (plate) .WelKrw, cD.Raw i SNHighCount (cSTATALL) = SNHighCount (cSTATALL) + 1
Elself Aplates (plate) .WelKrw, cl) .Type = SNCtl(cLOW) Then m
CO to i -~J Functions - 5 m
SNLow(cSTATALL) = SNLow(cSTATALL) + Aplates (plate) .WelKrw, cD.Raw
7) SNLowCount (cSTATALL) = SNLowCount (cSTATALL) + 1
C End If m If Aplates (plate) .WelKrw, clJ.Type = CVCtKcHIGH) Then
I CVHigh(CSTATALL) = CVHigh (cSTATALL) + Aplates (plate) .WelKrw, cD.Raw
■2 CVHighCount (cSTATALL) = CVHighCount (cSTATALL) + 1
Elself Aplates (plate) .WelKrw, clJ.Type = CVCtKcLOW) Then
CVLo (cSTATALL) = CVLow(cSTATALL) + Aplates (plate) .Welllrw, cD.Raw CVLowCount (cSTATALL) = CVLowCount (cSTATALL) + 1 End If
Figure imgf000029_0001
if Aplates (plate) .WelKrw, cl) .Good Then
If Aplates (plate) .WelKrw, clJ.Type = ActCtl (cHIGH) Then
InhHigh (cSTATGOOD) = InhHigh (cSTATGOOD) + Aplates (plate) .WelKrw, cl) .Raw
InhHighCount (cSTATGOOD) = InhHighCount(cSTATGOOD) + 1
If ControlSource 0 cCONTROLS Then If control wells are ignored, subtract it here to cancel out late r rowsignallrw, cSTATGOOD) = rowsignaKrw, cSTATGOOD) - Aplates (plate) .WelKrw, cD.Raw rowsignalcount(rv), cSTATGOOD) = rowsignalcount (rw, cSTATGOOD) - 1 End If Elself Aplates (plate) .WelKrw, cl) .Type = ActCtl (cLOW) Then
InhLow(cSTATGOOD) = InhLow(cSTATGOOD) + Aplates (plate) .WelKrw, cD.Raw
InhLowCoun (cSTATGOOD) = InhLowCount (cSTATGOOD) + 1
'subtract low control from a row so that it can be added in again later, zeroing itself out rowsignaKrw, cSTATGOOD) » rowsignaKrw, cSTATGOOD) - Aplates (plate) .WelKrw, cD.Raw rowsignalcoun Irw, cSTATGOOD) = rowsignalcoun (rw, cSTATGOOD) - 1
CO Else Dsum(cSTATGOOD) = Dsu (cSTATGOOD) + Aplates (plate) .Well (rw, cD.Raw
DO dcount (cSTATGOOD) = dcoun (cSTATGOOD) + 1
CO End If
Ξd rowsignaKrw, cSTATGOOD) = rowsignaKrw, cSTATGOOD) + Aplates (plate) .WelKrw, cD.Raw
^d rowsignalcoun (rw, cSTATGOOD) = rowsignalcount (rw, cSTATGOOD) + 1 m If Aplates (plate) .WelKrw, cl) .Type = SNCtKcHIGH) Then w SNHigh (cSTATGOOD) = SNHigh (cSTATGOOD) + Aplates (plate) .WelKrw, cD.Raw
I SNHighCount (cSTATGOOD) = SNHighCount (cSTATGOOD) + 1 m , Elself Aplates (plate) .WelKrw, cl) .Type = SNCtKcLOW) Then ] t SNLow(cSTATGOOD) = SNLow(cSTATGOOD) + Aplates (plate) .WelKrw, cl) . Raw
^ 1 SNLowCount (cSTATGOOD) = SNLowCount (cSTATGOOD) + 1
73 End If
C m If Aplates (plate) .WelKrw, cl) .Type = CVCtKcHIGH) Then
CVHigh (cSTATGOOD) = CVHigh (cSTATGOOD) + Aplates (plate) .WelKrw, cD.Raw σ> CVHighCount (cSTATGOOD) = CVHighCount (cSTATGOOD) + 1
—' Elself Aplates (plate) .WelKrw, cl) .Type = CVCtKcLOW) Then
CVLow(cSTATGOOD) = CVLow(cSTATGOOD) + Aplates (plate) .WelKrw, cD.Raw CVLowCount (cSTATGOOD) = CVLowCount (cSTATGOOD) + 1 End If
If Aplates (plate) .WelKrw, clJ.Type = zctl (cHIGHJ Then
ZHigh(cSTATGOOD) = ZHigh (cSTATGOOD) + Aplates (plate) .WelKrw, cD.Raw
ZHighCoun IcSTATGOOD) = ZHighCount (cSTATGOOD) + 1
Elself Aplates (plate) .WelKrw, clJ.Type = ZCtl (cLOW) Then
ZLow(cSTATGOOD) = ZLow(cSTATGOOD) ♦ Aplates (plate) .WelKrw, cl) .Raw
ZLowCoun (CSTATGOOD) = ZLowCount (cSTATGOOD) + 1
End If
Else
Aplates (plate) .BadWells = Aplates (plate) .BadWells t " 6 ChrS (AscCA") ♦ rw) & cl + 1
End If ' Good Wells only
CVHighli) = 0
CVLow(i) = 0
CVHighCount (i) = 0
CVLowCount (i) = 0
CVHighAverage (i) = 0
CVLowAverage (i) = 0
CVSumHighSquares (i) = 0
CVSumLowSquares |i) = 0 CVStDevHigh(i) = 0 CVStDevLowli) = 0
ZHighli) = 0 ZLow(i) = 0 ZHighCoun (i) = 0 ZLowCount (i) = 0 ZHighAverage (i) = 0 ZLowAverage (1) = 0 ZSumHighSquares (i) = 0 CO ZSumLowSquares (i) = 0
C ZStDevHighli) = 0
03 ZStDevLowli ) = 0
CO
^ InhHigh (i) = 0
C InhLowli) = 0
—I InhHighCount (1) = 0 m , InhLowCount (i) = 0
CO ^ InhHighAverage (i) = 0 jE i InhLowAverage (i) = 0 ffj InhSumHighSquares (i) = 0
InhSumLowSquares (i) = 0
InhStDevHigh(i) = 0 c InhStDevLow(i) = 0 Next i m
I Dsum(cSTATALL) = 0
,2 Dsum(cSTATGOOD) = 0 dcount (cSTATALL) = 0
Functions - 4 dcount (cSTATGOOD) = 0 daverage (cSTATALL) daverage (cSTATGOOD) = 0
SumDataSquares (cSTATALL) = 0
SumDataSquares (cSTATGOOD) = 0 stdevData (cSTATALL) = 0 εtdevData (cSTATGOOD) = 0 Aplates (plate) .BadWells = ■-
Functions - 3
Dim SNStDevHigh(2) As Double Dim SNStDevLow(2) As Double
Dim CVHigh (2) As Double
Dim CVLo (2) As Double
Dim CVHighCount (2) As Integer
Dim CVLowCoun (2) As Integer
Dim CVHighAverage (2) As Double
Dim CVLowAverage (2) As Double
Dim CVSumHighSquares (2) As Double Dim CVSumLowSquares (2) As Double Dim CVStDevHigh(2) As Double Dim CVStDevLow(2) As Double
Dim ZHigh (2) As Double Dim ZLow(2) As Double Dim ZHighCoun (2) As Integer Dim ZLowCount (2) As Integer CO Dim ZHighAverage (2) As Double
^ Dim ZLowAverage (2) As Double
C (O, Dim ZSunHighSquares(2) As Double
Dim ZSumLowSquares (2) As Double Dim ZStDevHigh(2) As Double Dim ZStDevLow(2) As Double
171 , Dim InhHigh(2) As Double
!f ω Dim InhLow(2) As Double f *p Dim InhHighCount (2) As Integer m Dim InhLowCount (2) As Integer
—. Dim InhHighAverage (2) As Double
Dim InhLowAverage (2) As Double c 73 Dim InhSumHighSquares (2) As Double Dim InhSumLowSquares (2) As Double in Dim InhStDevHigh(2) As Double r Dim InhStDevLow(2) As Double
For i = CSTATALL To cSTATGOOD SNHigh (i) = 0 SNLow(i) = 0 SNHighCount (i) = 0 SNLowCount (i) = 0
SNHighAverage ti) = 0
SNLowAverage (i) = 0
SNSumHighSquares (i) = 0
SNSumLowSquares (i) = 0
SNStDevHigh(i) = 0
SNStDevLow(i) = 0
Public Sub CalcAStats (plate As Integer) Dim i As Integer
Dim rw As Integer
Dim cl As Integer
Dim cmp As Integer
Dim pit As Integer Dim spit As Integer Dim plttype As Integer Dim assaynum As Integer 'Dim hcount(2) As Integer Dim ahcount(2) As Integer 'Dim lcount(2) As Integer Dim dcount (2) As Integer 'Dim Hsum(2) As Double 'Dim AHsum(2) As Double Dim lsum(2) As Double Dim Dsum(2) As Double Ct> Dim rowsignaKβ, 2) As Single
£ Dim rowsignalcoun (8, 2) As Single φ "Dim haverage (2) As Single
—I 'Dim AHAverage(2) As Single
—I 'Dim leverage (2) As Single Dim daverage (2) As Single m i "Dim SumHighSquares (2) As Double
J-^J 'Dim SumAHSquares(2) As Double
C zO
Il i 'Dim SumLowSquares (2) As Double η Dim SumDataSquares (2) As Double rH 'Dim stdevHigh(2) As Single
H 'Dim stdevAH(2) As Single
^π 'Dim stdevLow(2) As Single
^ Dim stdevData(2) As Single
Im- Dim found As Boolean
N> Dim SNHigh (2) As Double
S Dim SNLow(2) As Double
Dim SNHighCoun (2) As Integer Dim SNLowCoun (2) As Integer Dim SNHighAverage (2) As Double Dim SNLowAverage (2) As Double
Dim SNSumHighSquares (2) As Double
Dim SNSumLowSquares (2 ) As Double
Functions
Format (Splates (cSPLATE, spit) .assay(0) .WelKrw, cl) .Extreme (cHIGH, cSTATGOOD), "###.0000") t " , " &
Format (Splates (cSPLATE, spit) .assay(O) .WelKrw, cl) .Extreme (cLOW, cSTATGOOD), "###.0000") t " , " 6
" tO_date(to_char (SYSDATE, 'DD-MON-YYyY ' ) , 'DD-MON-YYYY' ) ) "
Debug. Print spit, rw, cl, strSQL
Set rsSummary = DB.OpenRecordset (strSQL, dbOpenForwardOnly) rsSummar .Close
End If
Figure imgf000034_0001
Next rw
Next spit End Sub
Public Sub Initl )
' Used to reset ALL values to their defaults
Dim i As Integer
=== Reset Global Variables
CO . -== clear Global Data Structures
Φ 00 ' Clear Assays
H For i = 0 To TtlSplates - 1
—I SplateAssays (i) .AssayCode = ""
C SplateAssays (i) .AssayName = " " m SplateAssays (i) .ttlcount = 0 SplateAssays (i) .GoodCount = 0
£2 OJ SplateAssays (i) .Selected = False m Next i m
~' ' set colors for threshold values For i = C.LIM1TINHIB To cLIMITPLATECV C Clrli, 0) = frmLimits.txtValli * 3). BackColor
I- Clrli, 1) = frmLimits.txtValli * 3 + 1) .BackColor
171 Clrli, 2) = frmLimits.txtValli * 3 + 2) .BackColor
J Next i
=== close All Forms Except Signin Unload frmPreSelect
End Sub
Public Sub UpdateSummary (assay As String)
Dim spit As Integer
Dim rw As Integer
Dim cl As Integer
Dim strSQL As String
Dim rsSummary As Recordset
Dim SplateList As String
' delete existing data for assay from summary
Figure imgf000035_0001
SplateList = Left (SplateList, Len (SplateList) - 1) strSQL = "Delete from tropix_Compound_Summary where assay_code = '" & assay & "' and splate_id in (" 6 SplateList fc ")
Debug. Print strSQL
CO Set rsSummary = DB.OpenRecordse (strSQL, dbOpenSnapshot)
C rsSummary.Close
OD
ZJ ' Popup a status bar here ! For spit = 0 To TtlSplates
C For rw = 0 To 7
For cl = 0 To 11
ITi If SplateslcSPLATE, spit) .assay (0) .Well (rw, cl) .Compound <> "" And _
CO Splates (cSPLATE, spit) .assay(0) .Well (rw, cl) . Inhib(cSTATGOOD) <> cNODATA Then
I ^j ' Not a control well
Hm i> strSQL = "insert into Tropix_Compound_Svuranary (COMPOUND_ID, splate_id, ASSAY_CODE, AVERAGE_INHIBITION, " (.
> " MAXIMUM_INHIBITION, MINIMUM_INHIBITION, MODIFIED_DATE) values " & _ j2 " (" & SplateslcSPLATE, spit) .assay (0) .Welllrw, cl).Compound & "','" & _
C- SplateslcSPLATE, spit) .PlatelD -. "','" & _ rπ assay -. "'," _. _
^j Format (Splates (cSPLATE, spit) .assay(O) .WelKrw, cl) .Inhib(cSTATGOOD) , "###.0000") -. "," & _ σ>
Functions - 1
' Copyright 1999 Tropix, Inc. Option Explicit
Public Sub End_Program( ) Dim answer As Integer Dim summaryDB As Database Dim rslnsert As Recordset answer = MsgBoxI "re-Initialize summary statistics before exit?", vbYesNoCancel, "Exiting Data Display")
Debug. Print answer
If answer = 7 Then ' No
Unload frmAPlateGraphic Unload fππCompoundList Unload frmLimits Unload frmPreSelect Unload fr SelectedPlates Unload frmSignln Unload frmSplash Unload frmSPlateGraphic Unload frmSummaryParent End
Elself answer = 6 Then
UpdateSummary (AssayName) Unload frmAPlateGraphic Unload frmCompoundList Unload frmLimits Unload frmPreSelect
CO Unload frmSelectedPlates c Unload frmSignln oo Unload frmSplash
CO Unload frmSPlateGraphic Unload frmSummaryParent End
End If m ) End Sub
CO ^
Im Public Function min(nl As Double, n2 As Double) As Single m If nl < n2 Then
—| min = nl
Else a5 min = n2
C I- End If m r End Function σ>
Public ControlSource As Integer ' cCONTROLS, cASSAYDATA, cPLATEDATA
' Global Data Structures
Public SplateAssays!) As AssayType ' summary assay plate info for frmPreselect
Public SplateAssaysGridO As SplateAssayGridType ' Array to mirror status settings of flxsplateassays on frmPreselect
Public Aplates () As APlateType ' The Assay plates chosen on frmPreSelect
Public AplatesIndexO As Integer ' Subselected Aplates to be displayed
Public Splates () As SumPlateType ' (Type, number) The Source, Master, and Daughter plates chosen on frmPreSelect
Public SplatesIndexO As Integer ' Subselected Splates to be displayed
Public APlate,Patterns(4) As SumPlateType ' stores average performance and well cv across unrelated plates
Public Assays!) As String ' the array of selected assays - used for finding hte global index of the assay
Public Clr(4, 3) As ColorConstants ' the threshold colors (Set in frmLimits)
Public Limits (4, 3) As Single ' the values of the threshold limits set in frmLimits
Public SelCompounds ( ) As compoundtype ' holds info for compounds clicked on summary screens
Public CompoundSummar ( ) As CompoundSummaryType ' holds all summary info across assays (summary view only)
Public CompoundSummaryIndex As New Collection
Public TempRst (100000) As TempCmpList
Public SelectedCompounds(cMAXSUMMARYLEVEL) As Long ' count of selected dompounds in summary view
Public SummaryMatrix(cMAXSUMMARYLEVEL) As LocationType ' Summarymatric (level) .location (x,y)
Public AvgData(2) As Single ' For calculating stats when control = cASSAYDATA
Public frmSummaryGraphics(cMAXSUMMARYLEVEL) As New frmSummaryGraphic Public SelectedAssayNames(30) As String ' For displaying assayname(s) on keys Public TtlData(2) As Double ' (good, all) when controlsource = cassaydata
Public ShowThird As Boolean
Public ViewStim As Integer
Public ActCtl(2) As String
Public ZCtl(2) As String
Public CVCtl(2) As String
Public SNCtl(2) As String
C_O c Public ZRange As Single
[JJ ' FOR SUMMARY VIEWING - DISTRIBUTE AS NEEDED
CO
" Public Const cMin = 0
H Public Const cMax = 1 m Type KeyType
Φ i AssayNa e(ΞO) As String J-j| keyvals(20, 2) As Double m i keypts(20) As Point ] keyends(20) As Point
^ End Type
73
C Public key As KeyType m r Public KeyLi itstcMAXSUMMARYLEVEL, 20, 2) As Double Public LiηeColσrs (20) As ColorConstants
Public SelectMode As Integer ' cSELSPLATE, cSELASΞAY, or cSELBOTH (frmPreSelect) ' Used to determinse structure of the SQL query for retrieving aplate/awell info
Public SelectStat As Integer ' cSTATLL, cSTATGOOD (frmPreSelect)
' Used to determine what to retrieve
Public WellStat As Integer ' cSTATLL, cSTATGOOD
' Used to determine what to use when calculating plate statistics
Public SLabelType As Integer cSPLATE, cMPLATE, cDPLATE, cAPLATE
' Used to determine the plate label on summary level displays
Public ALabelType As Integer ' cSPLATE, cMPLATE, cDPLATE, cAPLATE
' Used to determine the plate label on assay plate level displays
Public TtlAssayPlates As Long ' Total number of all selected assay plates
Public TtlCompounds As Long ' Total number of all compounds loaded for analysis
Public TtlSplates As Long Total number of Splates loaded for analysis
Public SelAssays As Long ' a count of all assays selected, in whole or in part, for analysis
Public TtlAssays As Long ' a count of all assays in the database
Declarations - 4
Public MaκAssayCompounds As Integer ' the most times a compound has been assayed
Public AplatesSubSelected As Integer the number of Aplates currently selected for detailed viewing
Public SplatesSubSelected As Integer ' the number of Splates currently selected for detailed viewing
Public CompoundsSelected As Long ' the total count of compounds selected by clicking in summary screen views
Public CurrSPlate As Integer ' used for displaying frmsplatetext selection
Public CurrAPlate As Integer ' Used to hold selected APlate during Performance evaluation
Public APlatesInARange As Integer ' used to select assay plates in bulk - the number of plates / group
Public MaxPatternCV As Single ' used for tracking maximum variability for setting color range scale
CO c Public AssayNa e As String Holds the AssayCode of the currently selected assay gj Public AssayCount As Integer ' Sumamry View - assays
CO Public CompoundCount As Long ' Summary view - compounds
H Public AssaysSelected As Integer ' Summary Views - # of assays chosen for comparison
-1 Public SummaryLevel As Integer ' Summaryviews - current summarylevel
^ Public Threshold As Single ' sets the display threshold for trend views j( Public ImportType As Integer ' BYSOURCE or BYDATE (fr Signin) J Public AplateFiϊter As String ' (frmSignin) m 9^ Public SplateFilter As String * (frmSignin) πi Public StartDate As String ' (frmSignin)
^ Public EndDate As String ' (frmSignin)
JO ' Used for Constant Where clause additions, based on info entered on frmSignin
C Public AplateWhere As String m Public SplateWhere As String
Public DateWhere As String O) Public BogusWhere As String
"-' Public AssayWhere As String
Type SumWellType
Inhib(2) As Single
Extreme(2, 2) As Single 'Highest and lowest values (cHIGH, cLOW) , (cSTATALL, cSTATGOOD) AvgResults (2) As Single cv(2) As Single • for compound variability (currently range, NOT cv) p(2) As Single ' for trend analysis
ResultsCount (2) As Integer ResultString(2) As String coun (2) As Integer
Compound As String
Type As String * 1 ' data(NULL), HighCH") / Low("L") Control
Sample As String
Selected As Boolean End Type
Type SumAssayType
AssayName As String
WelKβ, 12) As SumWellType
End Type
Type SumPlateType
PlateCode As Long PlatelD As String ParentCode As Integer ParentID As String MaxAssays As Integer assay0 As SumAssayType i ageindex As String Selected As Boolean StatsStarted As Boolean
CO Top As Single c Left As Single
03 End Type
CO Type Te pCmpList
H PlatelD As String
5 compoundID As String m row As Integer φ i co1 As Integer ~J Raw As Long m Inhib As Single ] End Type
7) ' Global Variables
C Public WS As Workspace m Public CON As Connection r Public DB As Database
Public CommentsText As String ' For printing
Public AltH As String ' Alternate High Control Well type for use in calculating SN and Z
Public RangesRetrieved As Boolean
' Used to see if user got range settings from database
Type co poundtype
Name As String
MW As Single row As Single col As Single
SPlatelD As String End Type ' CompoundType
Type SplateAssayGridType Index As Integer Selected As Boolean
End Type
Type AwellType
Raw As Double
Calc As Double
Type As String * 1 data(NULL), High("H") / Low("L") Control
Inhib(2) As Single
Stim(2) As Single
Compound As String
Sample As String
Good As Boolean
Selected As Boolean
Modified As Boolean
CO
C End Type ' AWellType CO CO Type APlateType assay As String InhibStDevs(2, 2) As Single Well (8, 12) As AwellType m PlateID(4) As String
CO PlateCode(-) As Long
I ImportDate As String m CO BadWells As String m sn(2) As Single cv{2) As Single
to Declarations - 3 sss'Λϊ; i»';;.-.i» sr-! «"s»;1"»'t*^ss-:"-:--.., -, -,«..- «- -». -i-
Control(2. 3) As Single ' s a type, controltype RowSN(2, 8) As Single Good As Boolean Selected As Boolean imageindex As String DataTop As Single DataLeft As Single PerformTop As Single PerformLeft As Single End Type
Declarations - 2
Type AssayType
ΞPlatelD As String
AssayCode As String
AssayName As String ttlcount As Integer ' Count of All Aplates
GoodCount As Integer ' Count of Good Aplates Selected As Boolean
End Type ' AssayType
Type AssayResultType
APlateCode As Long
APlatelD As String
Type ' for viewing summary performance across assays uble ble
Figure imgf000041_0001
ro σ> Type CompoundSummaryType ' For viewing summary performance across assays
' CompoundTJame As String assay () As AssaySummaryType Selected As Boolean ' sub-selections ptY As Single ptx As Single End Type Type CompoundSummarylndexType
Selected As Boolean ' sub-selections
Index As Long
End Type
Type LocationType
Location () As CompoundSummarylndexType End Type
'Used for determining which type of Statistic to Calculate or Display
Public Const cSTATALL = 0
Public Const cSTATGOOD = 1
'Used for determining control value types for Assay plates
Public Const cHIGH = 0
Public Const cLOW = 1
Public Const cAltH = 2
'Used for determining what effect a mouse click has on the Selected Assay List ( rmSelectedPlates) Public Const cSELECT = 0 Public Const cREJECT = 1
'Used for aplate pattern investigation Public Const ALLALL = 0 Public Const ALLGOOD = 1 Public Const SELECTEDALL = 2 φ Public Const SELECTEDGOOD = 3 c 00 'Used on Splateviews to determine which statistic should be used for displaying Inhibition CΛ Public Const cAVERAGE = 0
^ Public Const cMAXIMUM = 1
^ Public Const cMINIMUM = 2
H m _{_,. Public Const CMAXSUMMARYLEVEL = 20
CO <?
1 === Type Definitions m m
H ' For setting whether Activity is displayed as % Inhibition or % Stimuation
' Used in Calc APlateStats
*J
C Public Const cINHIB = 0 ' (1- (D-L) / (H-l) ) * 100 r- Public Const cSTIM = 1 ' (D-L) /(H-L) * 100 m
J ' Display the 3rd performance statistic
Public Const BadZ = 0 Public Const WorseZ = 0.2 Public Const OkayZ = 0.5
' For setting up the initial import string
Public Const cBYSOURCE = 0
Public Const cBYDATE = 1
' The Error Flag value
Public Const cNODATA = -999
Public Const cHIGHRANGE = 100
' Used in frmPreSelect
Public Const .cALLPLATES = 0
Public Const cGOODPLATES = 1 Public Const cBADPLATES = 2
' Used in frmPreSelect to determine where clause form for secondary selection Public Const cSELASSAY = 1 Public Const cSELSPLATE = 2 Public Const cSELBOTH = 4
Used by AssayPlateType to determine which level of Plate ID/Code to us Public Const cAPLATE = 0 Public Const cDPLATE = 1 Public Const cMPLATE = 2 Public Const cSPLATE = 3
' Used in frmLimits to determine which histogram is being used Public Const cLIMITINHIB = 0 Public Const cLIMITCOMPOUNDCV = 1 Public Const cLIMITPLATESN = 2 Public Const cLIMITPLATECV = 3
CO c 'Used for Assay Plate trend statistic
00 Public Const CLEFTRIGHT = 0 CO 'Public Const cTOPBOTTOM = 1
linex = Sin ((Index / AssaysSelected) * 3.14159 * 2) key. eyvals (Index, cMax) liney = Cosl (Index / AssaysSelected) * 3.14159 * 2) key. eyvals (Index, cMax) key. keypts (Index) .ptX(cMax) = linex key. keypts (Index) .ptY(cMax) = liney ' redraw key
73 picKey.DrawWidth = 2
C picKey.Line (key .keypts (Index) .ptX(cMax) , key. keypts (Index) .ptY(cMax) ) -(key. keypts (Index) .ptX(cMin) , key. eypts (In in dex) .ptY(cMin) ) , LineColors (Index)
Ki picKey.DrawWidth = 1
2 End If
End Sub
frmSummaryParent - 1
' Copyright 1999 Tropix, Inc.
Private Stb MDIForm_Load()
Dim i As Integer
SummaryLevel = 0 frτnSummaryGraphics(O) .Tag = "0"
End Sub
frmThreshold - 1
Private Sub btnOkay_click()
Threshold = Val (txtThreshold.Text)
Unload frmThreshold
End Sub
Declarations - 1
' Copyright 1999 Tropix, Inc. Option Explicit
Declare Function SQLAllocEnv% Lib "ODBC32.DLL" (env&l
Declare Function SQLDataSources% Lib "ODBC32.DLL" (ByVal henvt, ByVal fdir%, ByVal szDSN$, ByVal cbDSNMax*. pcbOSN%, ByVal ω szDesc$, ByVal cbDescMax%, pcbDesc%)
03 ' === Global Constants
CO
^ • For determining Control calculation type
H Public Const cCONTROLS = 0
5 Public Const cASSAYDATA = 1 m Public Const cPLATEDATA = 2
CO m ^. m to frmSummaryGraphic - 8
73
C ' if low value now > high value, restore old value, update high value m "~ If Val(txtLo IIndex) .Text) > key.keyvals (Index, cMax) Then txtHigh (Index) .Text = txtLo (Index) .Text σ> txtLow(Index) .Text = For atlkey. keyvals (Index, cMin) , "0.000")
~—' Call txtHigh_LostFocus (Index)
Else ' set key pts key.keyvals (Index, cMin) = Val (txtLow(Index) .Text) txtLo (Index) .Text = Format (txtLo (index) .Text, "0.000") picKey.DrawWidth = 4 picKey.Line (key. eypts (Index) .ptX(cMin) , key.keypts (Index) .ptY(cMin) )- (key.keyends (Index) .ptX(cMax) , key.keyends!
Index) .ptY(cMax)) , vbWhite picKey.Line (key.keyends (Index) .ptX(cMin) , key.keyends (Index) .ptY(cMin) )- (key. keypts (Index) .ptX(cMax) , key.keyptsl
Index) .ptY(cMax)) , vbWhite linex = Sin((Index / AssaysSelected) * 3.14159 * 2) * key. keyvals (Index, cMin) liney = Cos ((Index / AssaysSelected) * 3.14159 * 2) * key. keyvals (Index, cMin)
key.keypts (Index) .ptX(cMin) = linex key. keypts (Index) .ptY(cMin) = liney
' redraw key picKey.DrawWidth = 2 - picKey.Line (key. eypts (Index) .ptX(cMin) , key. eypts(Index) .ptY(cMin) ) -(key. keypts (Index) .ptX(cMax) , key. eypts (In dex) .ptY(cMax) ) , LineColors (Index) picKey.DrawWidth = 1
End If
End Sub
Private Sub txtHigh_LostFocus (Index As Integer)
Dim linex As Single
Dim liney As Single
If Val(txtHigh(Index) .Text) > 1 Then txtHigh (Index) .Text = "1.000"
' if low value now > high value, restore old value, update high value
CO If VaKtxtHigh(Index) .Text) < key. keyvals (Index, cMin) Then txtLo (Index) .Text = txtHigh (Index) .Text
03 txtHigh (Index) .Text = Format (key. eyvals (Index, cMax) , "0.000")
CO Call txtLow_LostFocus (Index) i Else
^ ' set key pts
5 key. keyvals (Index, cMax) = VaKtxtHigh(Index) .Text) m ^ txtHigh (Index) .Text = Forma (txtHigh (Index) .Text, "0.000")
CO J
I picKey.DrawWidth = 4 m m picKey.Line (ke .keypts (Index) .ρtX(cMax) , key. eypts (Index) .ptY(cMax) )- (key.keyends (Index) .ptX(cMin) , key.keyends! Index) .ptY(cMin)), vbWhite
H picKey.Line (key.keyends (Index) .ptX(cMax) , key.keyends (Index) .ptY(cMax) )- (key.keypts (Index) .ptX(cMin) , key.keypts (
*J Index) . ptY (cMin) ) , vbwhite
C
I- lx = Abs(lnt( (X - 1) / 31) m ly = Abs(Int((Y - 1) / 3)) r If SummaryMatrix (MyLevel) .Locationdx, ly). Index <> -1 Then σ> SummaryMatrix(MyLevel) .Location (lx, ly) .Selected = Not SummaryMatrix(MyLevel) .Location(lx, ly). Selected If SummaryMatrix(MyLevel) -Location (lx, ly) .Selected Then
SelectedCompounds (MyLevel + 1) = SelectedCompounds (MyLevel + 1) + 1 Else
SelectedCompounds (MyLevel + 1) = SelectedCompounds (MyLevel + 1) - 1 End If Debug. Print lx & " " I ly t " " St CompoundSuiranary(Sv_mnaryMatrix(MyLevel) .Location !lx, ly) .Index) .CompoundName & _
" " & SummaryMatrix (MyLevel) .Location (lx, ly). Index & " £ _,
CompoundSummaryIndex(CompoundSummary (SummaryMatrix (MyLevel) .Locationdx, ly) .Index) .CompoundName)
Call DrawOneCompoundlSummaryMatrix (MyLevel) .Locationdx, ly) .Index, lx, ly, pictest)
End If
End Sub
Private Function HideCompound (ByVal cmpd As Long) As Boolean
Dim asy As Integer
Dim dataitem As Double Dim hide As Boolean
hide = False
For asy = 0 To AssaysSelected - 1
If IstAvglasy) .Listlndex = 0 Then 'avg
If lstlnhib (asy) .Listlndex = 0 Then 'Inhib data'item = min(0.999, CompoundSummarylcmpd) .assa (asy) .Averagelnhib / 100)
Else ' Stim dataitem = min(0.999, CompoundSummarylcmpd) .assay(asy) .AverageStim / 100) End If Else ' Max
If lstlnhib(asy) .Listlndex = 0 Then 'Inhib dataitem = min(0.999, CompoundSummarylcmpd) .assay(asy) .Maximum / 100) Else * Stim dataitem = min(0.999, CompoundSummarylcmpd) .assa (asy) .Minimum / 100) End If End If
If chkRequired (asy) .value = 1 And Not (dataitem >= key. keyvals (asy, cMin) And dataitem <= key. keyvals (asy, cMax) )
CO c Then
00 hide = True CO End If Next asy
HideCo pound = hide
4^ End Function m 4i>
:". Private Sub txtLow_LostFocus (Index As Integer) m Dim linex As Single rh Dim liney As Single
jg If Val (txtLow(Index) .Text) < 0 Then txtLow(Index) .Text = "0.000"
|— Next i m Printer.EndDoc σ J> Elself KeyCode = Asc("F") Then ' Save text to a file
On Error GoTo theend c dDialog.ShowSave fname = cmdDialog. filename
FNum = FreeFile
Open fname For Output As FNum
' Header
OutLine = "Compound" & tb
Figure imgf000046_0001
frmSumaryGraphic - 7
For asy = 0 To AssaysSelected - 1
OutLine = OutLine & "Assay" & asy + 1 & tb & "Avg. Inhib" & tb & "Avg. Stim" & tb & "Max Inhib" & tb & "Max St i " £. tb
Next asy
Print IFNum, OutLine
' Data for Selected Compounds For rw = 0 To Down
For cl = 0 To Across cmpd = SummaryMatrix (MyLevel) .Locatioπlrw, cl). Index
If cmpd <> -1 And SummaryMatrix (MyLevel) .Location (rw, cl). Selected Then OutLine = CompoundSummary(cmpd) .CompoundName & tb For asy = 0 To AssaysSelected - 1
Debug. Print CompoundSummarylcmpd) .CompoundName & CompoundSummarylcmpd) .assay (asy) .Name OutLine = OutLine & CompoundSummarylcmpd) .assay (asy) .Name & tb
OutLine OutLine CompoundSummarylcmpd) .assay (asy) .Averagelnhib & tb OutLine OutLine CompoundSummarylcmpd) .assay(asy) .AverageStim & tb OutLine OutLine CompoundSummarylcmpd) .assay (asy) .Maximum & tb OutLine OutLine CompoundSummary(cmpd) .assay (asy) .Minimum 6 tb Next asy Print #FNum, OutLine
vbOKOnly)
As Integer, X As Single, Y As Single)
rw, cl) .Selected Then pχ + 1, py + 1) , vbBlack, B = SelectedCompounds (MyLevel + 1) + 1
Figure imgf000047_0001
pictest.Line (px - 1, py D-(px + 1, py + 1), vbWhite, B SelectedCompounds (MyLevel + 1) = SelectedCompounds (MyLevel + D
End If End If
End If cmpd >= 0 and Not Hide Next cl Next rw Elself KeyCode = Asc("P") Then Print
On Error GoTo theend cmdDialog.CancelError = True cmdDialog . ShowPrinter Printer .ScaleHeight = (Down * 3 + 2) Printer. ScaleWidth = (11 / 8.5) * Across 3 + 2 Printer. ScaleTop = 0 Printer. ScaleLeft = 0
For i = 0 To Across For j = 0 To Down
If (SummaryMatrix (MyLevel) .Location (i, j). Index <> -1) Then
Call DrawOneCo poundlSummaryMatrix (MyLevel) .Location (i, j). Index, i. j. Printer) End If Next j Next i
Printer. fontsize = 12
Printer. Font = "Arial"
Printer. fontsize = 12
CO c Printer.CurrentY = 2 * ( (Printer. ontsize 17) / (Printer. Height / Printer .ScaleHeight) )
00 For i = 0 To AssaysSelected - 1 CO Printer .CurrentX = Across * 3 + 1 (200 / (Printer.Width / Printer .ScaleWidth) )
Printer. CurrentY = Printer. CurrentY ( (Printer. fontsize * 17) / (Printer .Height / Printer. ScaleHeight) )
Printer .ForeColor = LineColors(i)
4^
O Printer .Print SelectedAssayNames (i) m Printer. ForeColor = vbBlack
If lstAvg(i) .Listlndex = 0 Then
CO
I OutLine = " Avg. " m Else m OutLine = " Max."
End If
73 If lstlnhib(i) .Listlndex = 0 Then c OutLine = OutLine & " Inhib " m Else
OutLine = OutLine 6 " Stim " r End If
OutLine = OutLine £ txCLow(i) .Text & " - " & txtHigh (i) .Text
Printer. CurrentX = Across * 3 + 1 + (200 / (Printer. Width / Printer. ScaleWidth) )
Printer. CurrentY = Printer. CurrentY + ( (Printer. fontsize * 0.5) / (Printer.Height / Printer. ScaleHeight) )
Printer. Print OutLine
Next asy
If SummaryMatrix (MyLevel) .Location (X, Y) .Selected Then hDC.Line (px - 1, py - 1) - (px + 1, py + 1) , vbBlack, B
Else hDC.Line (px - 1, py - 1) - (px + 1, py + 1), vbWhite, B
End If
' Print CompoundID hDC. CurrentX = px - 1 hDC. CurrentY = py - 1.5 hDC. Print CompoundSummary (cmpd) .CompoundName
End If 'not hide End Sub
Private Sub pictest_KeyUp(KeyCode As Integer, Shift As Integer)
Dim asy As Long
Dim i As Long
Dim j As Long Dim rw As Long Dim cl As Long Dim hide As Boolean
frmSummaryGraphic - 6
CO Dim dataitem As Double
C Dim px As Long
00 Dim py As Long CO Dim cmpd As Long ^ Dim ans As Integer
C Dim fname As String
—I Dim FNum As Integer
111 , Dim OutLine As String
CO -^ Dim tb As String m tb = Chr$(9) m S or s = Select Visible
If KeyCode = Asc("S") Or KeyCode = Asc("s") Then
73 c For rw = 0 To Down
For cl = 0 To Across iTI hide = False r cmpd = SummaryMatri (MyLevel) .Location (rw, cl). Index σ> If cmpd >= 0 Then
If Not HideCo pound(cmpd) Then
SummaryMatrix (MyLevel) .Location (rw, cl). Selected = Not SummaryMatrix(MyLevel) .Location (rw, cl) .Selecte d hDC. (hDC.Height / hDC. ScaleHeight) / 20) * 0.33 + 0.1) hDC.FontName = "Arial" ' size - name - size is needed for fonts < 8 pts! hDC. fontsize = (( (hDC.Height / hDC. ScaleHeight) / 20) * 0.33 + 0.1) hDC.Line (px - 1.1, py - l.l)-(px + 1.1. PY + 1-D. vbWhite, BF
If Not HideCompound(cmpd) Then
If hDC.hDC = pictest.hDC Then hDC. DrawWidth = 1 printerfactor = 1
Else hDC . DrawWidth = 6 printerf actor = 11 / 8 . 5
End If - hDC.FillStyle = vbFSTransparent If optCircles.value = 1 Then For i = 1 To 4 hDC.Circle (px, py) , 0.25 * i, RGB(200, 200, 200) Next i Else hDC.Circle (px, py) , 1, RGB(200, 200, 200) End I,f
For asy = 0 To AssaysSelected - 1
CO c If IstAvg (asy) .Listlndex = 0 Then 'avg J If lstlnhib(asy) .Listlndex = 0 Then 'Inhib
CO dataitem = min(0.999, CompoundSummarylcmpd) .assay(asy) .Averagelnhib / 100)
H Else ' Stim
—I dataitem = min(0.999, CompoundSummarylcmpd) .assay (asy) .AverageStim / 100)
C End If m Else
CO i If lstlnhib(asy) .Listlndex = 0 Then 'Inhib
^ ^ dataitem = min(0.999, CompoundSummarylcmpd) .assay(asy) .Maximum / 100) m ' Else Stim l dataitem = min(0.999, CompoundSummary(cmpd) .assay(asy) .Minimum / 100)
^ End If
^0 End If C
[Z linex = Sin((asy / AssaysSelected) * 3.14159 * 2) * dataitem m liney = Cos ((asy / AssaysSelected) * 3.14159 * 2) dataitem gj hDC.Line (px, py)-(px + linex, py + liney), LineColors (asy)
If dataitem > key.keyvals (asy, cMin) And dataitem < key. keyvals (asy, cMax) Then hDC.FillColor = LineColors (asy) hDC.FillStyle = vbFSSolid hDC. Circle (Sin ((asy / AssaysSelected) * 3.14159 * 2) * printerfactor + px, py + Cos! (asy / AssaysSelected ) * 3.14159 * 2) * printerfactor), 0.05, LineColors (asy) hDC.FillStyle = vbFSTransparent
End If
If dist <= 1 Then key. keypts (BestAssay) .ptX(BestEndPt) = linex key.keypts(BestAssay) .ptY(BestEndPt) = liney key. eyvals (BestAssay, BestEndPt) = dist
If BestEndPt = cMin Then txtLow(BestAssay) .Text = Format (dist, "0.000") Else
txtHigh (BestAssay) .Text = Format(dist, "0.000")
End If
End If
End If
End Sub
Private Sub ρicKey_MouseUp (Button As Integer, Shift As Integer, X As Single, Y As Single)
ButtonDown = False End Sub
Private Sub DisplayCompounds(hDC As Control) • Dim i As Long Dim j As Long
For i = 0 To Across CO For j = 0 To Down
C If (SummaryMatrix (MyLevel) .Location (i, j). Index <> -1) Then
TO Call DrawOneCompound (SummaryMatri (MyLevel) .Location (i, j). Index, i, j, pictest)
C« End If
^ Next j
2 Next i
—I End Sub m
CO Private Sub ^DrawOneCompound (cmpd As Long , ByVal X As Long , ByVal Y As Long, hDC As Control) D Dim asy As Long
[mJJ ' Dim i As Long
73
C m frmSummaryGraphic - 5 σ> Dim linex As Single
~—' Dim liney As Single
Dim hide As Boolean Dim dataitem As Double Dim px As Long Dim py As Long Dim printerfactor As Single px = X * 3 + 2 py = Y * 3 + 2 frmSummaryGraphic - 4
Dim dist As Single
Dim assay As Long Dim endpt As Long Dim MinDist As Single
If Button = 1 Then ' left button
MinDist = 1
For assay = 0 To AssaysSelected - 1
For endpt = cMin To cMax dist = Sqr((X - key .keypts (assay) .ptx(endpt) ) * (X - key. keypts (assay) .ptX(endpt) ) + _
(Y - key. keypts (assay) .ptY (endpt)) * (Y - key. eypts (assay) .ptY (endpt)) 1
If dist < MinDist Then MinDist = dist BestAssay = assay BestEndPt = endpt End If Next endpt Next assay
If MinDist < 0.1 Then
(Button As Integer, Shift As Integer, X As Single, Y As Single)
* Y) ) (BestAssay) .ptX(cMin) , key .keypts (BestAssay) .ptY(cMin) ) -(key.keyends (BestAssay) .ptX(cMax) , (cMax) ) , vbWhite (BestAssay) .ptX(cMin) , key.keyends (BestAssay) .ptY(cMin) ) -(key. keypts (BestAssay) .ptX(cMax) , ) , vbWhite (BestAssay) .ptx (cMin) , key. eypts (BestAssay) .ptY(cMin) )- (key. keypts (BestAssay) .ptXlcMax) , k ) , LineColors (BestAssay)
Figure imgf000052_0001
If dist > 1 Then dist = 1 linex = Sin ( (BestAssay / AssaysSelected) * 3.14159 * 2) * dist liney = Cos ( (BestAssay / AssaysSelected) * 3.14159 * 2) * dist
If key. keyvals (BestAssay, BestEndPt) <= key. keyvals (BestAssay, cMin) And BestEndPt <> cMin Then
BestEndPt = cMin
Elself key. keyvals (BestAssay, BestEndPt) >= key. keyvals (BestAssay, cMax) And BestEndPt <> cMax Then
BestEndPt = cMax
End If
End Sub
Private Sub Fprm_Resize ( ) Dim mindim As Long
If Me.WindowState <> vbMinimized Then
Figure imgf000053_0001
pictest. idth = Me.Width - (picKey.Width + 300) pictest. Height = Me.Height - 500
If pictest.Width > pictest. Height Then pictest.Width = pictest .Height * Across / Down Else pictest.Height = pictest.Width * Down / Across End If pictest. ScaleHeight = Down * 3 + 1 pictest. ScaleWidth = Across * 3 + 1
Framel.Height = Me.Height - (picKey.Height + btnUpdate.Height + 500) Framel.Left = pictest.Width + 100
CO picKey. Left = pictest. idth + 100
C btnUpdate.Left = pictest.Width + 100 00 btnReset.Left = btnUpdate. Le t + btnUpdate.Width + 100 CO btnNew.Left = btnReset.Left + btnReset.Width + 400 optCircles.Left = btnNew.Left Call btnUpdate_Click End If m End Sub
CO l
Ui
I-" Private Sub Form_Unload (Cancel As Integer) m I m frmSummaryGraphics (MyLevel) .Across = 0 frmSummaryGraphics (MyLevel) .Down = 0 ,—! ReDim SummaryMatri (MyLevel) .Location (1, 1)
73 End Sub
C
|-η Private Sub IstAvg_Click (Index As Integer)
1^ Debug. Print Index & " " & IstAvg (Index) .Listlndex & " " St IstAvg (Index) .Text
K7> End Sub
Private Sub menuFileExit_Click()
Call End_Program End Sub
Private- Sub MenuFilePrint_Click()
Call pictest_KeyUp(Asc("P") , 0)
End Sub
Private Sub MenuFileSave_Click()
Call pictest_KeyUp(Asc("F") , 0)
End Sub
Private Sub MenuSelect_Click()
Call pictest_KeyUp(Asc("S") , 0) End Sub
Private Sub picKey_HouseDown (Button As Integer, Shift As Integer, X As Single, Y As Single)
Me. Caption = Me. Tag ' set defaults on key
Call MakeKey (picKey) ' display data
Call DisplayCo pounds (pictest) End Sub
frmSummaryGraphic - 3
CO
C Private Sub MakeKey (ByVal hDC As Control) 00 Dim i As Long CO Dim stepsize As Single Dim X As Single Dim Y As Single m
CO hDC. Circle (0, 0), 0.25, RGB1200, 200, 200)
I hDC. Circle- (0, 0), 0.5, RGBI200, 200, 200) m m hDC. Circle |0, 0), 0.75, RGB(200, 200, 200) hDC. Circle (0, 0). 1, RGB(200, 200, 200)
I
73 For i = 0 To AssaysSelected - 1 c NJ I key.AssayName (i) = CompoundSummary(O) .assay (i) .Name m r X = Sinϋi / AssaysSelected) « 3.14159 * 2) Y = Cosϋi / AssaysSelected) * 3.14159 * 2) key. keypts (i) .ptX(cMin) = X * key. eyvals (i, cMin) key.keypts(i) .ptY(cMin) = Y ' key. keyvals (i, cMin) key. keyptsϋ) .ptX(cMax) = X ' key. keyvals (i, cMax) key. keypts !i) .ptY (cMax) = Y « key. eyvals (i, cMax) key.keyends (i) .ptX(cMin) = X * 0.001 * key. eyvals (i, cMin) key.keyends (i) .ptY(cMin) = Y • 0.001 * key. keyvals (i, cMin) key.keyends (i) .ptX(cMax) = X * key.keyvalsd, cMax) key.keyends (i) .ptY(cMax) = Y key.keyvalsd, cMax) hDC.Line (key. keypts (i) .ptX(cMin) , key. keypts (i) .ptY (cMin) ) -(key. keypts (i) .ptX(cMax) , key. keypts (i) .ptY(cMax)). Li neColors(i) Next i
Istlnhibli) .Visible = True
Istlnhibli) .Top = Istlnhibli - 1) .Top + 500
Istlnhibli) .Left = Istlnhibli - D.Left
Istlnhibli) .Addltem ("Inhib")
Istlnhibli) .Addltem ("Stim") txtLowd) .Visible = True txtLow(i) .Top = txtLowd - 1) .Top + 500 txtLowli) .Left = txtLowli - D.Left txtHighd) .Visible = True txtHighd) .Top = txtHighd - 1) .Top + 500 txtHighd) .Left = txtHighd - D.Left End If
) .Listlndex istlndex
Index = _
Figure imgf000055_0001
Next i Else
Figure imgf000055_0002
Next ay
Next ax End If
o
2 J
>.
<
u w α
Figure imgf000056_0001
If MyLevel = SummaryLevel Then
SummaryLevel = SummaryLevel + 1
Else
SummaryLevel = MyLevel + 1
End If
Unload frmSummaryGraphics (SummaryLevel) frmSummaryGraphics (SummaryLevel) .Show
Else ans = MsgBox ("Please choose at least one compound", vbOKOnly) End If End Sub
Private Sub btnReset_Click()
.Call MakeKey(picKey) End Sub
st. ScaleWidth, pictest.ScaleHeight) , vbWhite, BF est)
ected - 1 i, cMin) = 0 i, cMax) = 1
Figure imgf000057_0001
End If
For i = 0 To AssaysSelected - 1' key.keyvalsd, cMin) = KeyLimits (MyLevel , i, cMin) key. keyvals (i, cMax) = KeyLimits (MyLevel, i, cMax)
Next i
Across = Sqr (SelectedCompounds (MyLevel) )
Down = SelectedCompounds (MyLevel) / Across
If Down * Across < SelectedCompounds (MyLevel) Then
Down = Down + 1 End If
frmSummary - 3
End Sub
Private Sub RetrieveData ( )
Dim strSQL As String
Dim rsAssayCodes As Recordset
Figure imgf000058_0001
strSQL = "select assay_code, count (*) from tropix_compound_summary " & _
" group by assay_code"
Set rsAssayCodes = DB.OpenRecordset (strSQL, dbOpenSnapshot)
AssayCount = 0 rsAssayCodes .MoveFirst While Not rsAssayCodes.EOF
AssayCount = AssayCount + 1 rsAssayCodes.MoveNext Wend rsAssayCodes .MoveFirst flxSumary.Rows = AssayCount + 1 gg flxSummary.Cols = 2
CO
H I For rw = 1 To AssayCount
H J flxSuπwary.TextMatrixtrw, 0) = rsAssayCodes.Fields (0)
^ I flxSummary.TextMatrixfrw, 1) = rsAssayCodes.Fields (1)
11 rsAssayCodes.MoveNext O Next
^ End Sub m ] frmSummaryGraphic - 1
JO ' Copyright 1999 Tropix, Inc.
C Option Explicit
[Z Dim ButtonDown As Boolean
Dim BestAssay As Long cn Dim BestEndPt As Single
~—' Public Across As Long
Public Down As Long
Dim MyLevel As Integer
Private Sub btnNew_Cllck ( ) Dim asy As Integer
Dim ans As Integer
If SelectedCompounds (MyLevel + 1) > 0 Then
For asy = 0 To AssaysSelected - 1 , . ... ,
KeyLimits (MyLevel + 1. asy, cMin) = key. keyvals (asy, cMin
KeyLimits (MyLevel + 1. asy. cMax) = key. keyvals (asy, cMax)
Next asy
If rsQuery.Fields (2) < 0 Then
CompoundSummary ICurrentCompound) .assay ICurrentAssay) .Maximum = 0
Else
CompoundSummaryICurrentCompound) .assayICurrentAssay) .Maximum = rsQuery. Fields (2)
End If
If rsQuery . Fields (3 ) < 0 Then
. CompoundSummar (CurrentCompound) . assay (CurrentAssay) . Minimum = Abs (rsQuery . Fields (3 ) )
Else
CompoundSummary (CurrentCompound) . assay (CurrentAssay) . Minimum = 0
End I f rsQuery.MoveNext prbSummary.value = prbSummary.value + 1 Wend CurrentAssay = CurrentAssay + 1 AssaysSelected = AssaysSelected + 1 Φ End If
C Next
00 prbSummary.Visible = False
CO
^ For cmp = 0 To Co poundCount - 1
^ If CompoundSummary(cmp) .Selected Then
_l SelectedCompoundCount = SelectedCompoundCount + 1 m End If φ Next
I
[J] I SelectedCompounds (0) = SelectedCompoundCount _] --j frmSummaryParent. Show f i
73 .End Sub
C j-η Private Sub flxSummary_Click() l^j , Dim i As Integer flxSummary.row = flxSummary.MouseRow flxSummary.col = 0
If flxSummary.CellFontBold = False And flxSummary.CellForeColor = vbBlack Then fIxSummary.CellFontBold = Not flxSummary.CellFontBold Elself flxSummary.CellFontBold = True And flxSummary.CellForeColor = vbBlack Then For i = 1 To AssayCount flxSummary.row = i
If flxSummary.CellForeColor = vbRed Then flxSummary.CellForeColor = vbBlack
End If
Next i flxSummary.row = flxSummary.MouseRow flxSummary.CellForeColor = vbRed
Elself flxSummary.CellFontBold = True And lxSummary.CellForeColor = vbRed Then flxSummary.CellForeColor = vbBlack flxSummary.CellFontBold = Not flxSummary.CellFontBold
End If End Sub
Private Sub Form_Load()
Call RetrieveData
Debug. Print strSQL
Set rsQuery = DB.OpenRecordset (strSQL, dbOpenSnapshot)
CompoundCount = 0 rsQuery.MoveFirst While Not rsQuery.EOF
CompoundCount = CompoundCount + 1
CompoundSummaryIndex.Add CompoundCount, rsQuery. Fields (0) rsQuery,MoveNext Wend rsQuery.Close CorapoundsLoaded = True
SelectedCompounds (0) = CompoundCount CO End If ϊ; ' retrieve data from selected assays
CO CO CurrentAssay = 0
^ frmSummary - 2 oo 1 AssaysSelected j-η SummaryLevel = 0
CO For Assayi = 1 To AssayCount H prbSummary.Visible = True m prbSummary.Max = RecordCount + 1 m prbSummary. value = 0
' flxSummary.col = 0 jg flxSummary.row = Assayi
C If flxSummary.CellFontBold Then ' Retrieve the data for this assay r" strSQL = "select compound_id, average_inhibition, maximum_inhibition, minimum_inhibition" £ _
* " " from tropix_compound_summary where assay_code = " £ lxSu mary.TextMatrix (Assayi, 0) & "'" £ _ gj " AND compound_id in (select distinct compound_id from tropix_compound_summary where " £ _
—' " assay_code = " £ assaystring £ ")" £ __
" order by compound_id" Debug. Print strSQL
Set rsQuery = DB.OpenRecordset(strSQL, dbOpenSnapshot) 'if in index collection, return key and use it to find record in array rsQuery.MoveFirst
While Not rsQuery.EOF
CurrentCompound = CompoundSummarylndex(rsQuery.Fields (0) )
CompoundSummary(CurrentCompound) .Selected = True
CompoundSummar ICurrentCompound) .CompoundName = rsQuery. Fields (0)
CompoundSummary(CurrentCompound) .assay(CurrentAssay) .Name = lxSummary.TextMatri (Assayi, 0)
CompoundSummary(CurrentCompound) .assay(CurrentAssay) .Name = flxSummary.TextMatrix (Assayi, 0)
If rsQuery. Fields (1) >= 0 Then
CompoundSummary.(CurrentCompound) .assay (CurrentAssay) .Averagelnhib = rsQuery. Fields (1)
CompoundSummary(CurrentCo pound) .assay(CurrentAssay) .AverageStim = 0
Else
CompoundSummary(CurrentCompound) .assay (CurrentAssay) .Averagelnhib = 0 CompoundSummary (CurrentCompound).assay ICurrentAssay).AverageStim = Abs (rsQuery. Fields (1) )
End If
For i = 0 To AssayCount - 1 fIxSummary. row = i + 1 flκSummary.col = 0 If flxSummary.CellForeColor = vbRed Then assaystring = assaystring £ "'" £ fIxSummary.Text £ "',* End If If flxSummary.CellFontBold Then
SelectedAssayNameslj) = fIxSummary. Text
. j = J 1 End If
Φ Next i
C
00 If Len (assaystring) > 0 Then
CO assaystring = LeftS (assaystring, Len (assaystring) - 1)
^ strSQL = "select count (*) from troρix_compound_summary where " £ _
^ "assay_code =" £ assaystring i Else j. m strSQL = "select ma (coun (*)) , assay_code from tropix_compound_summary group by assay_code" φ i End If rπ I Debug. Print strSQL
Set rsQuery = DB.OpenRecordse (strSQL, dbOpenSnapshot) RecordCount = 0 73 rsQuery.MoveFirst
C RecordCount = rsQuery. Fields (0) j-η rsQuery. Close ro σ> ' redim compoundsummary ()
ReDim CompoundSummary (RecordCount + 1)
' redim compoundsummary (x) .Assay!) For cmp = 0 To RecordCount
ReDim CompoundSummary (cmp) .assay (AssayCount + 1)
Debug. Print cmp
Next
If Len (assaystring) > 0 Then strSQL = "select distinct compounded from tropix_compound_summary where " £ _
"compound_id in (select distinct compound_id from tropix_compound_summary where " £ _
"assay_code =" £ assaystring £ ")"
Else strSQL = "select distinct compounded from tropix_compound_summary" End If
'Save the data fl = FreeFile
Open fname For Output As fl
For rw = 0 To (APlateCount * 96)
Figure imgf000062_0001
For cl = 0 To 11
Print Ifl, SaveSigmalrw, cl) £ Chr$(9)
Next cl Next rw Close fl theend:
frmSplateText - 4
CO End Sub
C
00
CO
H
H frmSummary - 1
S I m O ' Copyright 1999 Tropix, Inc.
CO I
J£ ' most recent clicked is placed in Current Assay box (to update) m ' Update deletes and replaces ALL compound_assay info for that assay ] ' View send user to Summary view graphic
^ , ' Text view allows user to sort / view #'s
*J
C Dim Co poundsLoaded As Boolean r- m σ5 Private Sub btnView_Click( )
Dim strSQL As String
Dim rsQuery As Recordset
Dim CurrentAssay As Integer
Dim Assayi As Integer
Dim CurrentCompound As Long
Dim assaystring As String
Dim i As Integer
Dim j As Integer
Dim RecordCount As Long
' retrieve count of unique compounds
If Not CompoundsLoaded Then
' set restrictions based on Red assays assaystring = ""
3 = 0
SaveSigmalO, 0) "APlate ID" SaveSig a (0, 1) "Well" SaveSigmalO, 2) "Compound" SaveSigmalO, 3) "Raw Score" SaveSigma (0, 4) "%Inhib" SaveSigmalO, 5) "Good/Bad" SaveSigmalO, 6) "SPlate ID" SaveSigmalO, 7) "Well" SaveSigmalO, 8) "Compound. " SaveSigmalO, 9) "Avg. %Inhib." SaveSigmalO, 10) : "CV" SaveSigmalO, 11) : "Good Assays"
For rw = 0 To 7
CurrSPlate) .PlatelD
) ) £ TempString £ cl + 1
CurrSPlate) .assay (0) .Well (rw, cl) .Compound CurrSPlate) .assay(O) .WelKrw, cl) . Inhib(WellStat) , CurrSPlate) .assay (0) .Well (rw, cl) .cv(WellStat) , CurrSPlate) .assay (0) .WelKrw, cl) .coun (WellStat)
CurrSPlate) . PlatelD Then
+ 1, 0) = Aplates (aplt) . PlateΙD(cAPLATE)
+ 1, 1) = Chr$(rw + Asc("A")) £ TempString £ cl + 1
+ 1, 2) = Aplates (aplt) .WelKrw, cl) .Compound
+ 1, 3) = Aplates (aplt) .WelKrw, cD . Raw
+ 1, 4) = Aplates (aplt) .WelKrw, cl) .Inhib (cSTATGOOD) cl + 1, 5) = "-"
Figure imgf000063_0001
SaveSigma (APlateCount 96 12 + cl + 1, 5) = End If Next cl Next rw
APlateCount = APlateCount + 1 End If aplt = aplt + 1 Loop ' through aplates
Do While Aplates (aplt) .PlatelD (cAPLATE) <> ""
If Aplates (aplt) .PlatelD(cSPLATE) = SplateslcSPLATE, CurrSPlate) .PlatelD Then
Print #fl, "Assay Plate : * £ Chr$(9) £ Aplates (aplt) . PlateΙD(cAPLATE) £ Chr$(9) & _
"High Control:" £ Chr$(9) £ Aplates (aplt) .ControKWellStat, cHIGH) £ Chr$(9) £ _
"Low Control:" £ Chr$(9) £ Aplates (aplt) .Control (WellStat, cLOW)
Print Hfl, "Raw Data Values : "
For rw = 0 To 7
TempString = Chr$ (Asc ("A" ) + rw) £ Chr$(9)
For cl = 0 To 11
TempString = TempString £ Aplates (aplt) .Well (rw, cl) . Inhib (WellStat) £ Chr$(9) Next cl
Print Ifl, TempString Next rw
Print #fl, "Bad Wells: " For rw = 0 To 7
TempString = Chr$ (Asc ( "A" ) + rw) £ Chr$(9) For cl = 0 To 11
If Aplates (aplt) .Well (rw, cl) .Good Then CO TempString = TempString & "-" £ Chr$(9)
C Else
£D TempString = TempString £ "B" £ Chr$(9) ϊ0, End If Next cl I Print #fl. TempString
—I °J Next rw m 1 Print ifl, ""
CO End If
I mm frmSplateText - 3
^2 aP1,: = aplt + 1
JO Loop
C r- m Close fl theend:
£5 End Sub
Private Sub MenuFileSigma_Click( )
Dim fl As Integer
Dim APlateCount As Integer
Dim fname As String
Dim TempString As String
Dim Average As Single
Dim SaveSigma (1000, 12) As String
Dim opt As Integer
Modify SaveSigma dimensions once you figure out what it is doing....
On Error GoTo theend cmdSaveFile.CancelError = True cmdSaveFi1e . ShowSave fname = cmdSaveFile. filename
fl = FreeFile
Open fname For Output As fl
Print Kfl, "Plate ID:" £ Chr$(9) £ SplateslcSPLATE, CurrSPlate) . PlatelD aplt = 0
TempString = " "
Do While Aplates (aplt) .PlatelD (cAPLATE) <> ""
If Aplates (aplt) .PlatelD (cSPLATE) = SplateslcSPLATE, CurrSPlate) .PlatelD Then
TempString = TempString £ Aplates (aplt) .PlatelD(cAPLATE) & Chr$(9)
End If aplt = aplt + 1 Loop Print #fl, "Assay Plates:" £ Chr$(9) £ TempString
Print Kfl, ""
Print Kfl, "Average Inhibition:"
For rw = 0 To 7
TempString = Chr$ (Asc ("A" ) + rw) £ ChrS (9)
CO c For cl = 0 To 11
TempString = TempString £ Format (Splates (cSPLATE, CurrSPlate) .assay(0) .Well (rw, cl) . Inhib (WellStat) , "#K0. φ 0000") £ Chr$(9)
H Next cl
—I Print #fl, TempString
C Next rw
™ σ> Print Kfl. ""
^ f Print, Kfl, "Well CVs:" m For rw = 0 To 7 m TempString = ChrS (Asc ("A") + rw) £ Chr$(9)
' For cl = 0 To 11 TempString = TempString £ Format (Splates (cSPLATE, CurrSPlate) .assay (0) .Well (rw, cl) .cv(WellStat) , "##0.000
C 0") £ Chr$(9) m Next cl
Print #fl, TempString
•°, Next rw
Print Kfl, ""
Print Kfl, "Compound IDs:"
For rw = 0 To 7
TempString = Chr$ (Asc ( "A" ) + rw) & Chr$(9)
For cl = 0 To 11
TempString = TempString £ SplateslcSPLATE, CurrSPlate) .assay (0) .WelKrw, cl). Compound £ Chr$(9)
Next cl Print #fl, TempString Next rw aplt = 0
Print #fl, ""
Print Kfl, "Assay Plate Data:"
' Save assay plate information associated with this SPlate
Next rw
End Sub
Private Sub Form_Resize ( )
Dim Wsum, Hsum As Integer
If Me.WindowState <> vbMinimized Then Wsum = 0 Hsum = 0 For i = 0 To flxSplate.Cols - 1
Wsum = Wsum + flxSplate.ColWidth(i) Next i For i = 0 To flxSplate.Rows - 1
Hsum = Hsum + flxSplate.RowHeight (i) Next i
CO If frmSplateText.Width > Wsum + 300 Then frmSplateText. idth = Wsum + 300 C If frmSplateText. Height > Hsum + (400) Then frmSplateText. Height = Hsum + 500
00 flxSplate.Height = frmSplateText .Height - (400)
CO flxSplate.Width = frmSplateText.Width - 200 c lxSplate . Re resh End If m End Sub
CO I
I g> Private Sub MenuFileClose_Click() m j " Me.hide
[J] End Sub MenuFilePrint_Click( ) "Not available at this time. Please save the data, and print from another application"
Figure imgf000066_0001
σJ Private Sub MenuFileSave_Click ( )
" — ' Dim fl As Integer
Dim fname, TempString As String
frmSplateText - 2
Dim Average As Single
Dim opt As Integer
On Error GoTo theend cmdSaveFile.CancelError = True cmdSaveFile.ShowSave fname = cmdSaveFile. filename
frmSplateText - 1
• Copyright 1999 Tropix, Inc.
Private Sub flκSPlate_KeyPress(KeyAscii As Integer)
If UCase(ChrSlKeyAscii) ) = "E" Then
Call MenuFileSave_Click
End If 'E pressed to Save data
If UCaselChrSIKeyAscii)) = "S" Then
Call MenuFileSigma_Click End If 'S pressed to Save data End Sub
Private Sub Form_Load() Dim i As Integer Dim title As String title = "Plate: " £ SplateslcSPLATE, CurrSPlate) .PlatelD
CO If WellStat = cSTATGOOD Then C title = title £ " - for GOOD Assays only"
00 Else
CO title = title £ " - for GOOD and BAD Assays* End If
—I I frmSplateText.Caption = title m g) flxSplate.Top = 0
CO I flxSplate.Left = 0
1 flxSplate.Height = frmSplateText .Height - (200) mm flxSplate.Width = frmSplateText.Width - 200 flxSplate. Cols = 15 lxSplate.Rows = 15 flxSplate.ColWidth(O) = 400 ml<j For i = 1 To 14
,£> flxSplate. ColWidth(i) = 1000
~~' Next i flxSplate.. ColWidthl 13) = 300
Call Pop_Grid End Sub
Private Sub Pop_Grid() Dim rw, cl, i As Integer Dim Average As Single
For rw = 0 To 7
For cl = 0 To 11
Average = SplateslcSPLATE, CurrSPlate) .assay(O) .Welllrw, cl) .Inhib(WellStat) flxSplate.TextMatrixlrw + 1, cl + 1) = Format (Average, "«K0.0") k ' / ' t. Format (SplateslcSPLATE, CurrSPlate) .assa y(0) .Welllrw, cl) .cv(WellStat) , *KK0.0") Next cl
fr SPlateGraphic - 8
Private Sub mnuFileExit_Click()
Call End_Program
End Sub
Private Sub picPlate_MouseUp (Button As Integer, Shift As Integer, X As Single, Y As Single) Dim pit, rw, cl As Integer pit = intdx) / 40) pit = pit + Int((Y) / 28) * Across
If pit < .SplatesSubSelected And pit >=* 0 Then it PLATE. splateslndexlplt) ) .Top) ) / 3) PLATE, Splateslndexlplt) ) .Left) ) / 3)
£ pit £ " Plate: " & SplateslcSPLATE, Splateslnde lplt) ) .PlatelD £ *(" £. pit £ SplateslcSPLATE, Splateslndexlplt) ) .assay (0) .WelKrw, cl) .Compound tes (cSPLATE, Splateslndex(pit) ) .Assay(0) .Well (rw, cl) .Compound) d) .Name = SplateslcSPLATE, Splateslndex (pit) ) .assa (0) .Well (rw, cl) .Compound d) .SPlatelD = SplateslcSPLATE, Splateslndexlplt) ) .PlatelD d) .row = rw d) .col = cl Selected + 1
Figure imgf000068_0001
picPlate.Line (SplateslcSPLATE, CurrSPlate) .Left - 0.04, SplateslcSPLATE, CurrSPlate) .Top + 4)- (SplateslcS PLATE, CurrSPlate) .Left - 0.4, Splates (cSPLATE, CurrSPlate) .Top + 24), vbWhite, BF End If
If pit > 0 And pit < TtlSplates Then
CurrSPlate = Splateslndex (pi ) , picPlate.Line (SplateslcSPLATE, CurrSPlate) .Left - 0.04, SplateslcSPLATE, CurrSPlate) .Top + 4) - (Splates IcSPLAT
E, CurrSPlate) .Left - 0.4, Splates (cSPLATE, CurrSPlate) .Top + 20), RGB1200, 100, 100), BF frmSplateText. Show
End If End I
End If
End Sub
If dispstat < 0 Then hDC.FillStyle = vbFSSolid hDC.FillColσr = vbWhite
If hDC. hDC <> picPlate.hDC Then hDC.DrawWidth = 4 End If hDC.Circle (ex - 0.7, cy - 0.7) 0.65, currclr hDC.DrawWidth = 1 Else hDC.FillStyle = vbFSSolid hDC.FillColor = currclr hDC. Circle (ex - 0.7, cy - 0.7) , 0.65, currclr End If End If End If Next rw
CO Next cl c hDC.FillStyle = vbFSTransparent oo For cl = 0 To 11
CO For rw = 0 To 7
CX = (Cl * 3) + 4 + SplateslcSPLATE, Splateslndex (pit) ) .Left cy = (rw * 3) + 4 + SplateslcSPLATE, Splateslndexlplt) ) .Top hDC.Line (ex - 2, cy - 2)-(cx + 1, cy 1), vbBlack, B m Next rw
CO I Next c\
I m --j m I hDC. urrentX = 2 hDC. CurrentY = -8 hDC. ForeColor = vbBlack
73 c hDC.FontName = "Arial" hDC. fontsize = Int ( (hDC. Width / 1400) * (6 / Across)) + 1 m If hDC. fontsize > 12 Then hDC. fontsize = 12 ro If hDC. hDC = picPlate.hDC Or CommeπtsText = "" Then hDC. Print frmSPlateGraphic. Caption Else hDC. Print frmSPlateGraphic. Caption £ ": £ CommentsText End If
End Sub
Figure imgf000069_0001
frmSPlateGraphic - 7
Elself SplateslcSPLATE, Splateslndexlplt) ) .assay (0) .Well (rw, cl) .cv(WellStat) < Limits IcLIMITCOMPOUNDCV, 1 ) Then
currclr = Clr lcLIMITCOMPOUNDCV, 0)
Elself SplateslcSPLATE, Splateslndex (pit) ) .assay(0) .Well (rw, cl) .cv(WellStat) < Limits lcLIMITCOMPOUNDCV, 2
) Then currclr = Clr lcLIMITCOMPOUNDCV, 1)
Else currclr = Clr lcLIMITCOMPOUNDCV, 2) End If
If SplateslcSPLATE, Splateslndexlplt) ) .assay (0) .Well (rw, cl) .cv(WellStat) = cNODATA Then currclr = RGB(200, 200, 200) End If If SplateslcSPLATE, Splateslndex(pit) ) .assay(0) .WelKrw, cl) .ResultsCount (WellStat) < 2 Then currclr = RGB(200, 200, 200) End If
Select Case ViewType
CO Case cAVERAGE C dispstat = SplateslcSPLATE, Splateslndexlplt) ) .assay (0) .Welllrw, cl) .'Inhib (WellStat)
DO Case cMAXIMUM
CO - dispstat = SplateslcSPLATE, Splateslndexlplt) ) .assay (0) .Well (rw, cl) .Extreme (cHIGH, WellStat)
" Case cMINIMUM
H dispstat = SplateslcSPLATE, Splateslndexlplt) ) .assay(0) .Welllrw, cl) .Extreme(cLOW, WellStat)
.""j End Select m . φ ςy, If dispstat <> cNODATA Then
I ∞ If dispstat > Limits (cLIMITINHIB, 0) Or dispstat < - (Limits (cLIMITINHIB, 0)) Then mm ' hDC.Line (ex - 2, cy - 2) -(ex + 1, cy + 1), currclr, BF
End If
73 If Abs (dispstat) > Limits (cLIMITINHIB, 2) Then
C currclr = Clr (cLIMITINHIB, 2) r- m Elself Abs (dispstat) > Limi s (cLIMITINHIB, 1) Then ro currclr = Clr (cLIMITINHIB, 1) σ> Elself Abs (dispstat) > Limits (cLIMITINHIB, 0) Then currclr = Clr (cLIMITINHIB, 0) Else currclr = vbWhite End If
Next cl
N.ext rw
Next pit frmCompoundList.Show fr CompoundList. efresh
End Select End Sub
Private Sub Form_Resize ()
Dim pit As Integer
If Me.WindowState <> vbMinimized Then picPlate.Width = frmSPlateGraphic.Width - 100 picPlate.Height = frmSPlateGraphic. Height - 400 picPlate. ScaleWidth = (Across * 36) + (4 * Across) + 15 picPlate. ScaleHeight = (Down * 24) + (4 * Down) + 30 picPlate. ScaleTop = -10 picPlate.Cls
For pit = 0 To SplatesSubSelected - 1
Call draw_plate(plt, picPlate) Next
CO Call DrawKey (picPlate) c End If
00 End Sub CO
Private Sub draw_plate (ByVal pit As Integer, hDC As Control)
Dim s p As Integer
Dim sum, Average As Single m Dim currclr As ColorConstants
CO Dim dispstat A-, Single
I Dim cl As Integer m I Dim rw As Integer m Dim ex As Long I Dim cy As Long
73 c hDC.FillStyle = vbSolid m ro hDC.FontName = "Arial" hDC. fontsize = Int (( (hDC. Height / hDC.ScaleHeight) / 20) * 2.5) + 1 hDC.CurrentX = SplateslcSPLATE, Splateslndexlplt) ) .Left hDC. CurrentY = SplateslcSPLATE, Splateslndexlplt) ) .Top - 1.25 hDC. Print Splates ISLabelType, Splateslndexlplt) ) .PlatelD
For cl = 0 To 11 For rw = 0 To 7
If SplateslcSPLATE, Splateslndexlplt) ) .assay10) .Welllrw, cl) .Type = "D" Then ex = (cl * 3) + (4) + SplateslcSPLATE, Splateslndex (pit) ) .Lef cy = (rw * 3) + (4) + Splates (cSPLATE, Splateslndex (pit) ) .Top
If SplateslcSPLATE, Splateslndexlplt) ) .assay(0) .Well (rw, cl) .cv(WellStat) < Limits (cLIMITCOMPOUNDCV, 0) Th currclr = vbWhite
Select Case ViewType Case cAVERAGE dispstat = SplateslcSPLATE, Splateslnde (pit) ) .assay (0) .Welllrw, cl) . Inhib (WellStat) !
Case cMAXIMUM dispstat = SplateslcSPLATE, Splateslndexlplt) ) .assay (0) .Well Irw. cl) .Extreme (cHIGH, WellStat)
Case cMINIMUM dispstat = SplateslcSPLATE, Splateslndexlplt) ) .assaylO) .WelKrw, cl) .Extreme IcLOW, WellStat)
End Select
If SplateslcSPLATE, Splateslndexlplt) ) .assay (0) .Well (rw, cl) .Type <> "H* And SplateslcSPLATE, Splatesl ndex(plt) ) .assay(0) .Well (rw, cD.Type <> "L" _
And -dispstat < Limits (cLIMITINHIB, 2) _
And -dispstat >= Limits (cLIMITINHIB, 1) Then
SelCompounds (CompoundsSelected) .Name = Splates (cSPLATE, Splateslndex (pit) ) .assay(O) .WelKrw, cl) .C ompouπd
SelCompounds (CompoundsSelected) .SPlatelD = SplateslcSPLATE, Splateslndexlplt) ) .PlatelD
CO c
00 CO frmSPlateGraphic - 6
SelCompounds (CompoundsSelected) .row = rw m SelCompounds (CompoundsSelected) .col = cl CompoundsSelected = CompoundsSelected + 1
CO End If
I 1 m ~~J Next cl m o Next rw
1 Next pit
73 f r CompoundLis . Show c frmCoπtpoundList . Refresh Case "c" :
111 * Cyan Only σ J°>, For pit = 0 To SplatesSubSelected - 1
For rw = 0 To 7
For cl = 0 To 11
Select Case ViewType Case cAVERAGE dispstat = SplateslcSPLATE, Splateslndexlplt) ) .assay (0) .Well (rw, cl) .Inhib(WellStat) Case cMAXIMUM dispstat = SplateslcSPLATE, Splateslndexlplt) ) .assay (0) .Welllrw, cl) . Extreme (cHIGH, WellStat)
Case cMINIMUM dispstat = SplateslcSPLATE, Splateslndexlplt) ) .assay (0) .Well (rw, cl) .Extreme (cLOW, WellStat)
End Select
If SplateslcSPLATE, Splateslndexlplt) ) .assay (0) .Well (rw, cl) .Type <> "H" And Splates (cSPLATE, Splateslnd ex(plt) ) .assay(O) .WelKrw, cl) .Type <> "L" _
And -dispstat < Limits (cLIMITINHIB, 1) _
And -dispstat >= Limits (cLIMITINHIB, 0) Then
SelCompounds (CompoundsSelected) .Name = Splates (cSPLATE, Splateslπdex(ρlt) ) .assay(O) .Well (rw, cl).C ompound
SelCompounds (CompoundsSelected) .SPlatelD = SplateslcSPLATE, Splateslndex (pit) ) .PlatelD SelCompounds (CompoundsSelected) .row = rw SelCompounds (CompoundsSelected) .col = cl CompoundsSelected = CompoundsSelected + 1 End If
Select Case ViewType
Case CAVERAGE dispstat = SplateslcSPLATE, Splateslndexlplt) ) .assay (0) .WelKrw, cl) .Inhib (WellStat) Case cMAXIMUM dispstat = SplateslcSPLATE, Splateslndexlplt) ) .assay (0) .Welllrw, cl) .Extreme (cHIGH, WellStat) Case cMINIMUM dispstat = SplateslcSPLATE, Splateslndexlplt) ) .assay(O) .Well Irw, cl) .Extreme (cLOW, WellStat) End Select
If SplateslcSPLATE. Splateslndexlplt) ) .assay10) .Welllrw, cl) .Type <> "H" And SplateslcSPLATE, Splatesl ndex(plt)) .assaylO) .Welllrw, cl) .Type <> "L" _
And -dispstat >= Limits (cLIMITINHIB, 0) Then CO SelCompounds (CompoundsSelected) .Name = SplateslcSPLATE, Splateslndexlplt) ) .assay(0) .Well (rw, cl) .C
C o pound
55 SelCompounds (CompoundsSelected) .SPlatelD = SplateslcSPLATE, Splateslndexlplt) ) .PlatelD
CO SelCompounds (CompoundsSelected) .row = rw SelCompounds (CompoundsSelected) .col = cl CompoundsSelected = CompoundsSelected + 1 m End If Next cl
CO . N.ext rw
^ Next pit jη I frmCompoundList.Show
—I ι_. frmCompoundList.Refresh
I Case "r":
73
C High = Red Only
For pit = 0 To SplatesSubSelected - 1 m For rw = 0 To 7 ro For cl = 0 To 11
Select Case ViewType Case cAVERAGE dispstat = SplateslcSPLATE, Splateslndexlplt) ) .assay(0) .WelKrw, cl) .Inhib (WellStat) Case cMAXIMUM dispstat = SplateslcSPLATE, Splateslndexlplt) ) .assay(0) .Well (rw, cl) .Extreme(cHIGH, Wellϋtat) Case cMINIMUM dispstat = SplateslcSPLATE, Splateslndexlplt) ) .assay (0) .WelKrw, cl) .Extreme (cLOW, WellStat) End Select
If SplateslcSPLATE, Splateslndex (pit) ) .assay (0) .Welllrw, clJ.Type <> "H" And SplateslcSPLATE, Splatesl ndex(plt) ) .assay (0) .WelKrw, cl) .Type <> "L" _
And -dispstat >= Limits (cLIMITINHIB, 2) Then
SelCompounds (CompoundsSelected) .Name = SplateslcSPLATE, Splateslndexlplt) ) .assay (0) .WelKrw, cl) .C ompound
SelCo pounds (CompoundsSelected) .SPlatelD = SplateslcSPLATE, Splateslndexlplt) ). PlatelD
SelCompounds (CompoundsSelected) .row = rw
SelCompounds (CompoundsSelected) .col = cl CompoundsSelected = CompoundsSelected + 1 End If
Next cl
Next rw
Next pit frmCompoundList.Show frmCompoundList. efresh
,,,
Case b" :
Blue Only
For pit = 0 To SplatesSubSelected - 1 For rw = 0 To 7
For cl = 0 TO 11
If SplateslcSPLATE, Splateslndexlplt) ) .assay (0) .Well (rw, cl) .Type <> "H" And Splates (cSPLATE, Splates ndex(plt) ) .assay 10) .WelKrw, cl) .Type <■> "L" _
And dispstat < Limits (cLIMITINHIB, 2) _ And dispstat >= Limits (cLIMITINHIB, 1) Then
SelCompounds (CompoundsSelected) .Name = SplateslcSPLATE, Splateslndexlplt) ) .assay(O) .Well (rw, cl). ompound
SelCompounds (CompoundsSelected) .SPlatelD = Splates (cSPLATE, Splateslnde lplt) ). PlatelD CO SelCompounds (CompoundsSelected) . row = rw
£j SelCompounds (CompoundsSelected) .col = cl
00 CO CompoundsSelected = CompoundsSelected + 1 End If
H Next cl Next rw
—I Next pit m frmCompoundList.Show
CO frmCompoundList. efresh
I , Case "C": m ^j ' Cyan Only
[] "° For pit = 0 To SplatesSubSelected - 1
^2 F°r rw = 0 To 7
^TJ For cl = 0 To 11
C Select Case ViewType
I- Case cAVERAGE m dispstat = Splates (cSPLATE, Splateslndexlplt) ) .assaylO) .Well (rw. cl) -Inhib (WellStat)
»σ> Case cMAXIMUM dispstat = SplateslcSPLATE, Splateslndexlplt) ) .assay10) .Welllrw, cl> .Extreme (cHIGH, WellStat) Case cMINIMUM dispstat = SplateslcSPLATE, Splateslndex(plt) ) .assay (0) .Well (rw, cl) .Extreme (cLOW, WellStat) End Select If SplateslcSPLATE, Splateslndex (pit) ) .assay (0) .Well (rw, cl) .Type :> "H" And SplateslcSPLATE, Splateslm ex(plt) ) .assay (0) .Well (rw, cl) .Type <> "L" _
And dispstat < Limits (cLIMITINHIB. 1) _
And dispstat >= Limits (cLIMITINHIB, 0) Then
SelCompounds (CompoundsSelected) .Name = SplateslcSPLATE, Splateslndexlplt) ) .assay (0) .Well (rw, cl).( ompound frmSPlateGraphic - 5
SelCompounds (CompoundsSelected) .SPlatelD = Splates (cSPLATE, Splateslndexlplt) ). PlatelD
SelCompounds (CompoundsSelected) .row = rw
SelCompounds (CompoundsSelected) .col = cl CompoundsSelected = CompoundsSelected + 1 End If Next cl
Cas
Figure imgf000075_0001
frmSPlateGraphic - 4
SelCompounds (CompoundsSelected) .SPlatelD = SplateslcSPLATE, Splateslnde (pit) ). PlatelD
SelCompounds (CompoundsSelected) .row = rw
SelCompounds (CompoundsSelected) .col = cl
CompoundsSelected = CompoundsSelected + 1 Φ End If
C Next cl
DO Next rw
CO Next pit i frmCompoundList.Show
H f mCompoundList.Refresh
^ Case "R": m ' High = Red Only
Φ For pit = 0 To SplatesSubSelected - 1
I I For rw = 0 To 7 m w For cl = 0 To 11 j I Select Case ViewType
^2 Case cAVERAGE
"J dispstat = SplateslcSPLATE, Splateslndexlplt) ) .assay(O) .Well Irw, cl) .Inhib (WellStat)
C Case cMAXIMUM m dispstat = SplateslcSPLATE, Splateslndexlplt) ) .assaylO) .Welllrw, cl) .Extreme (cHIGH, WellStat)
Case cMINIMUM σ> dispstat = SplateslcSPLATE, Splateslndexlplt) ) .assay (0) .Welllrw. cl) .Extreme (cLOW, WellStat)
""' End Select
If SplateslcSPLATE, Splateslndexlplt) ) .assay(0) .Well (rw, cl) .Type <> "H" And SplateslcSPLATE, Splatesl ndexlplt) ) .assay(O) .Well (rw, cD.Type <> "L" _
And dispstat >= Limits (cLIMITINHIB, 2) Then
SelCompounds (CompoundsSelected) .Name = SplateslcSPLATE, Splateslndexlplt) ). assaylO) .Welllrw, cl) .C ompound
SelCompounds (CompoundsSelected) .SPlatelD = Splates (cSPLATE, Splateslndexlplt) ) .PlatelD
SelCompounds (CompoundsSelected) . row = rw
SelCompounds (CompoundsSelected) .col = cl
CompoundsSelected = CompoundsSelected + 1 End If
Next cl
Next rw Next pit rmCompoundList.Show frmCompoundList.Re resh
Case *B":
'Blue Only
For pit = 0 To SplatesSubSelected - 1
For rw = 0 To 7
For cl = 0 To 11
Select Case ViewType
Case cAVERAGE dispstat = SplateslcSPLATE, Splateslndexlplt) ) .assay 10) .Welllrw, cl) .Inhib(WellStat) Case cMAXIMUM dispstat = SplateslcSPLATE, Splateslndexlplt) ) .assay(O) .Welllrw, cl) .Extreme (cHIGH, WellStat) Case cMINIMUM dispstat = SplateslcSPLATE, Splateslndexlplt) ) .assay (0) .Welllrw, cl) .Extreme (cLOW, WellStat) End Select
Private Sub picPlate_KeyPress (KeyAscii As Integer) Φ Dim rw As Integer
C Diro cl As Integer
00 Dim dispstat As Single
CO Dim pit As Long
Select Case ChrS (KeyAscii)
C Case "A": rπ ' ALL compounds reported, regardless of inhibition
Φ For.plt = 0 To SplatesSubSelected - 1 I For rw = 0 To 7 m ^J For cl = 0 To 11
[] I If SplateslcSPLATE, Splateslndex(pit) ) .assay10) .Welllrw, clJ.Type <> "H" And SplateslcSPLATE, Splatesl
^ ndex (pit) ) .assay (0) .Welllrw, cl) .Type <> "L" Then
""J SelCompounds (CompoundsSelected) .Name = SplateslcSPLATE, Splateslndexlplt) ) .assay(0) .Welllrw, cl) .C
C ompound m SelCompounds (CompoundsSelected) .SPlatelD = SplateslcSPLATE, Splateslndexlplt) ) .PlatelD SelCompounds (CompoundsSelected) .row = rw σ> SelCompounds (CompoundsSelected) .col = cl
' CompoundsSelected = CompoundsSelected + 1
End If Next cl Next rw Next pit frmCompoundList . Show frmCompoundList. efresh
Case "M":
' Marked = Red, Dark Blue, Cyan
For pit = 0 To SplatesSubSelected - 1
For rw = 0 To 7
For cl = 0 To 11
Select Case ViewType
Case CAVERAGE dispstat = SplateslcSPLATE, Splateslndexlplt) ) .assay (0) .Well (rw, cl) . Inhi (WellStat) Case cMAXIMUM
dispstat = Splates (cSPLATE, Splateslnde (pit) ) .assay(0) .Well (rw, cl) .Extreme (cHIGH, WellStat)
Case cMINIMUM dispstat = SplateslcSPLATE, Splateslndexlplt) ) .assay(0) .Well (rw, cl) .Extreme (cLOW, WellStat)
End Select
Figure imgf000077_0001
If SplateslcSPLATE, Splateslndexlplt) ) .assay (0) .WelKrw, cl) .Type <> "H" And SplateslcSPLATE, Splatesl ndex(plt) ) .assay(O) .WelKrw, cl) .Type <> "L* _ "
And dispstat >= Limits (cLIMITINHIB, 0) Then
SelCompounds (CompoundsSelected) .Name = SplateslcSPLATE, Splateslndex(plt) ). assay(O) .WelKrw, cl) .C ompound hDC. Print " " £ Format (Limits lcLIMITCOMPOUNDCV, 1), "KK0.0") currclr = Clr lcLIMITCOMPOUNDCV, 0) hDC.FillColor = currclr hDC.Line lex, cy - SpaceFactor * 1.2)-(cx + 0.33 * UnitsPerlnch, cy - SpaceFactor * 0.2), currclr, BF hDC.CurrentX = ex cy = cy + 1.75 * UnitsPerCharacter
Φ frmSPlateGraphic - 3
C
DO hDC.CurrentY = cy
CO hDC. Print " " £ Format (Limits lcLIMITCOMPOUNDCV, 2), "KK0.0")
" currclr = Clr lcLIMITCOMPOUNDCV, 1)
H hDC.FillColor = currclr
^ hDC.Line (ex, cy - SpaceFactor * 1.2)-(cx + 0.33 * UnitsPerlnch, cy - SpaceFactor * 0.2), currclr, BF m cy = cy + 1.75 * UnitsPerCharacter
Φ currclr = Clr (cLlMITCOMPOUNDCV, 2)
I hDC.FillColor = currclr mm hDC.Line (ex, cy - SpaceFactor * 1.2)-(cx + 0.33 * UnitsPerlnch, cy - SpaceFactor * 0.2), currclr, BF
hDC.FillStyle = vbTransparent . fontsize = fontsize
Figure imgf000077_0002
O) Private Sub menuViewStim_Click()
**"' ViewType = cMINIMUM frmSPlateGraphic. Caption = "Summary Plate View, Minimum Inhibition Shown" mnuViewAverage.Checked = False mnuViewMax.Checked = False menuViewStim.Checked = True
Call Form_Resize
End Sub
Private Sub mnuVιewAverage_Click ( )
ViewType = cAVERAGE frmSPlateGraphic.Caption = "Summary Plate View, Average Inhibition Shown" mnuViewAverage.Checked = True mnuViewMax.Checked = False menuViewStim.Checked = False Call Form_Resize
End Sub
Private Sub mnuViewMax_Click()
ViewType .= cMAXIMUM frmSPlateGraphic.Caption = "Summary Plate View, Maximum Inhibition Shown" mnuViewAverage.Checked = False mnuViewMax. Checked = True menuViewStim.Checked = False
Call Form_Resize
End Sub hDC. CurrentX = ex cy = cy + 1.75 * UnitsPerCharacter hDC.CurrentY = cy hDC. Print " 0.0" hDC.CurrentX = ex cy = cy + 1.75 * UnitsPerCharacter hDC.CurrentY = cy hDC. Print " " £ Format (Limits (cLIMITINHIB, 0), "KK0.0") hDC.FillColor = vbWhite hDC.Line (ex, cy - SpaceFactor * 1.2)-(cx + 0.33 * UnitsPerlnch, cy - SpaceFactor * 0.2), vbBlack, B CO hDC.CurrentX = ex
C cy = cy + 1.75 * UnitsPerCharacter
00 hDC.CurrentY = cy
CO hDC. Print " " £ Format (Limits (cLIMITINHIB, 1), "KK0.0")
^ currclr = Clr (cLIMITINHIB, 0) hDC.FillColor = currclr
—I hDC.Line (ex, cy - SpaceFactor * 1.2)-(cx + 0.33 * UnitsPerlnch, cy - SpaceFactor * 0.2), currclr, BF
CO <^ hDC.CurrentX = ex
~: cy = cy + 1.75 * UnitsPerCharacter
PH hDC.CurrentY = cy
H hDC. Print " " £ Format (Limits (cLIMITINHIB, 2), "KK0.0") currclr = Clr (cLIMITINHIB, 1)
73
C hDC.FillColor = currclr hDC.Line (ex, cy - SpaceFactor * 1.2)-(cx + 0.33 * UnitsPerlnch, cy - SpaceFactor * 0.2), currclr, BF JTl hDC.CurrentX = ex ro cy = cy + 1.75 * UnitsPerCharacter
2 hDC.CurrentY = cy currclr = Clr (cLIMITINHIB, 2) hDC.FillColor = currclr hDC.Line (ex, cy - SpaceFactor * 1.2)-(cx + 0.33 * UnitsPerlnch, cy - SpaceFactor * 0.2), currclr, BF hDC.FillStyle = vbTransparent
' Range Key hDC.CurrentX = ex cy = cy + 1.75 * UnitsPerCharacter hDC.CurrentY = cy cy = cy + 1.75 * UnitsPerCharacter hDC.CurrentY = cy hDC. Print "Range" hDC.CurrentX = ex cy = cy + 1.75 * UnitsPerCharacter hDC.CurrentY = cy
hDC. Print " 0.0* hDC.CurrentX = ex cy = cy + 1.75 * UnitsPerCharacter hDC.Cu rentY = cy hDC. Print * " £ Format (Limits (cLIMITCOMPOUNDCV, 0), "KKO.0") hDC.FillColor = vbWhite hDC.Line (ex, cy - SpaceFactor * 1.2)-(cx + 0.33 * UnitsPerlnch, cy - SpaceFactor * 0.2), vbBlack, B hDC.CurrentX = ex cy = cy + 1.75 * UnitsPerCharacter hDC.CurrentY = cy fontsize = picPlate. fontsize hDC. fontsize = 12
TwipsPerHeight = (hDC.Height / hDC. ScaleHeight) TwipsPerWidth = (hDC.Width / hDC. ScaleWidth) UnitsPerlnch = hDC. ScaleWidth / 11 HeightPerlnch = hDC. ScaleHeight / 11
CO UnitsPerCharacter = (hDC. fontsize * 20) / TwipsPerHeight
J= ' Inhib Key
CO hDC.ForeColor = vbBlack frmSPlateGraphic - 2
H 1 If hDC.hDC = picPlate.hDC Then m -J
^J ex = (Across * 40) + 3
CO 1 cy = 3
I m SpaceFactor = 0.15 * HeightPerlnch m Else ' Printer ex = hDC. ScaleWidth - (0.6 * UnitsPerlnch) cy = 1
SpaceFactor = 0.15 * HeightPerlnch End If m hDC.CurrentX = ex ro cy = cy + 1.75 * UnitsPerCharacter
^σ> hDC.CurrentY = cy
"""' hDC.FontBold = True hDC. Print "Inhib" hDC.FontBold = False hDC.CurrentX = ex cy = cy + 1.75 * UnitsPerCharacter hDC.CurrentY = cy hDC. Print "- values" currclr = vbBlack
If hDC.hDC <> picPlate.hDC Then hDC.DrawWidth = 4
End If cy = cy + 1.75 * UnitsPerCharacter hDC. Circle (ex + 0.1666 * UnitsPerlnch, cy - 0.05 * UnitsPerlnch), 0.05 * UnitsPerlnch, currclr hDC.DrawWidth = 1
For pit = 0 To SplatesSubSelected - 1
Call draw_plate (pi . Printer)
Next
Call DrawKeylPrinter)
Printer. EndDoc
Figure imgf000080_0001
Private Sub Form_Load() Dim pit As integer CurrSPlate = -1 pit = 0
Select Case SplatesSubSelected Case 1
Across = 1
Figure imgf000080_0002
ODown = 1 Case 2
Across = 1 Down = 2 rj ODown = 2
CO Case 3
H I Across = 2
H Down = 2
^ I ODown = 2 m Case Else
CO Across = Int (Sqr (SplatesSubSelected) ) 3; ODown = In (SplatesSubSelected / Across) m Down = ODown m If Across * ODown < SplatesSubSelected Then
Down = ODown + 1 3 End If
C End Select rji Call mnuViewAverage_Click ro For pi = 0 To SplatesSubSelected - 1 σ» SplateslcSPLATE, Splateslndexlplt) ) .Top = Unt(lplt) / lAcross)) * 24) + (4 * Intt(plt) / (Across)))
SplateslcSPLATE, Splateslndexlplt) ) .Le = ((pit Mod (Across)) * 36) + (4 * (pit Mod (Across))) + 2 Next ' through all Splateslndex End Sub Private Sub DrawKeyfhDC As Control)
Dim fontsize As Integer
Dim ex As Integer
Dim cy As Integer
Dim currclr As ColorConstants
Dim TwipsPerHeight As Single
Dim TwipsPerWidth As Single
Dim UnitsPerCharacter As Single
Dim UnitsPerlnch As Single Dim HeightPerlnch As Single Dim SpaceFactor As Single
Private Sub optControls_Click (Index As Integer)
ControlSource = Index
End Sub
Private Sub optList_Click(Index As Integer)
ImportType = Index
End Sub frmSplash - 1
' Copyright 1999 Tropix, Inc. Option Explicit
Private Sub Form_KeyPress (KeyAscii As Integer) frmSignln. Show ' set for future use
Inc. As Integer t_Click()
Figure imgf000081_0001
ro 2 rmFreeTex .Show vbModal, Me
If CommentsText = "CANCEL" Then GoTo theend
On Error GoTo theend cmdPrint.CancelError = True cmdPrint . ShowPrinter
Printer. ScaleWidth = (Across * 36) + (4 * Across) + 50
Printer. ScaleHeight = (Down * 24) + (4 * Down) + 30
Printer.ScaleTop = -10
frmSignln - 2
Dim IHenv As Long
Dim DSN As String
Dim DΞNItem As String * 1024
Dim DRVItem As String * 1024
Dim DSNLen, DRVLen As Integer
Figure imgf000082_0001
Dim i As Integer i = 0
If SQLAllocEnv (IHenv) <> -1 Then Do Until i <> 0
DSNItem = Space (1024)
DRVItem = Space (1024) i = SQLDataSources (IHenv, SFN, DSNItem, 1024, DSNLen, DRVItem, 1024, DRVLen)
DSN = Left (DSNItem, DSNLen)
If DSN <> Space (DSNLen) Then cmbDataSource.Addltem DSN
CO End If m oo
5, End If
H
—I End Sub
C
""*] I Private Sub menuFileExit_Click() m ∞ Call End_Program j0. I End Sub m Private Sub menuHelp_Click()
—. Dim i As Integer
' Load online help page
73
C For i = cHIGH To cLOW
ActCtKi) = txtlnhibCtKi) .Text m ZCtl(i) = txtZCtl(i) .Text σro> cvctKi) = txtcvctKi) .Text
SNCtKD = txtSNCtl(i) .Text Next i ZRange = Val (txtZStdevs.Text)
End Sub
Private Sub optAllGood_Click(Index As Integer)
SelectStat = Index
Dim i As Integer
' Load online help page
For i = cHIGH To cLOW
ActCtKi) = txtlnhibCtKi) -Text
ZCtlli) = txtZCtlli) .Text
CVCtlli) = txtCVCtlli) .Text
SNCtlli) = txtSNCtlli) .Text
Next i
ZRange = VailtxtZStdevs.Text)
End Sub __
For i = cHIGH To cLOW
ActCtKi) = txtlnhibCtKi) .Text
ZCtlli) = txtZCtlli) .Text
CVCtlli) = txtCVCtlli) .Text SNCtlli) = txtSNCtl(i) .Text Next i ZRange = Val (txtZStdevs.Text) frmPreSelect. Show
Exit Sub connectError:
MsgBox ("Error During Logon. Please try again.") End Sub
Private Sub cmbDataSource_Click() ff. DBName = cmbDataSource.Text
(-; End Sub
00
CO Private Sub cmdExit_Click ( ) i Call End_Program
H End Sub π I Private Sub cmdSummary_Click() j« oo Dim tDSN, tUser, TPwd, . tConnect As String
-j*; On Error GoTo connectError m Call Init m
' DBName = cmbDataSource.Text
^0 Set WS = CreateWorkspace ( " " , "mdlscreen", txtPassword.Text, dbUseODBC)
C tConnect = "ODBC;UID=mdlscreen;PWD=" & txtPassword.Text & ";DSN=" & DBName m Set CON = WS.OpenConnectionC", dbDriverNoPrompt, False, tConnect)
Set DB = CON. atabase ro
C75
AplateFilter = txtAplateFilter.Text SplateFilter = txtSplateFilter.Text StartDate = txtStartDate.Text EndDate = txtEndDate.Text rmSummary. Show Exit Sub connectError:
MsgBox ("Error During Logon. Please try again.")
End Sub
Private Sub Form_Load()
Figure imgf000083_0001
ImportType = cBYSOURCE
SelectStat = cSTATALL ViewStim = clNHlB Call PopulateDataSσurces
End Sub
Private Sub PopulateDataSources 0
Figure imgf000084_0001
BadNode-.
Debug. Print "Bad Node. Error = " & Err. Number & " " & Err. Description
End Sub
Private Sub txtAplatesInARange_Change ( ) innuSelectRange.Caption = "Select " & txtAplatesInARange.Text & " Assay Plates"
APlatesInARange = Val (txtAplatesInARange.Text) End Sub Text) & " Assay Plates"
l henvt, ByVal fDirection%, ByVal szDSNS, ByVal cbDSNMax*, p ription*) As Integer
Figure imgf000084_0002
Const SFN As Long = 1 Private DBName As String
Private Sub Actype_Click (Index As Integer)
ViewStim = Index
End Sub
Private Sub btnConnect_Click()
Dim tDSN, tUser, TPwd, tConnect As String
Dim i As Integer
On Error GoTo connectError
Call Init
DBName = cmbDataSource.Text
Set WS = CreateWorkspace ( " " , "mdlεcreen", txtPassword.Text, dbUseODBC)
WS.LoginTimeout = 60 tConnect = *ODBC;UID=mdlscreen PWD=" & txtPassword.Text & " DSN=" & DBName
Set CON = WS.OpenConnection("", dbDriverNoPrompt, False, tConnect)
Set DB = CON. Database
AplateFilter = txtAplateFilter.Text SplateFilter = txtSplateFilter.Text StartDate = txtStartDate.Text EndDate = txtEndDate.Text frmSelectedPlates - 10
Call mnuViewAssay_Click ClickEffect = Index End Sub
CO Private Sub optSLabel_Click (Index As Integer)
C SLabelType = Index 00 CO Call Load_Nodes End Sub
Private Sub trvSPlates_NodeClick (ByVal Node As ComctlLib.Node) m Dim currimage As Listlmage Dim pit As Integer CO Debug. Print *trvSPlates_NodeClick" £. " : " & SplateslcSPLATE, 0) .PlatelD mrπ W°° On Error GoTo BadNode pit = 0
While SplateslcSPLATE, pit). PlatelD <> "" And "A" & Format (Splates (cSPLATE, pit) .PlatelD, "_**-«**«#«*#MH") <> Node,
73 c key pit = pit + 1 m Wend ro
If SplateslcSPLATE, pit). PlatelD = "" Then ' the selected plate was NOT a source plate
Set CurrAPlateClicked = lstAPlates.Findltem(Node.key) pit = 0
While ("A" & Format (Aplates (pit) .PlateΙD(cAPLATE) , " * »#*#####„ #" ) ) <> Node. key pit = pit + 1 Wend Aplates (pit) .Selected = Not Aplates (pit) .Selected
If Aplates (pit) .Selected Then
Node. Image = Aplates (pit) . imageindex & "S"
Else
Npde. Image = Aplates (pit) . imageindex & "N"
End If
Else
' it was a source plate
SplateslcSPLATE, pit) .Selected = Not SplateslcSPLATE, pit) .Selected
If SplateslcSPLATE, pit) . Selected Then
Node. Image = SplateslcSPLATE, pit) . imageindex & "S"
Else
Node. Image = SplateslcSPLATE, pit) . imageindex & "N" End If End If
Private Sub mnuViewAssay_Click( ) Dim imagekey As String Dim aplt As Integer Dim templist As Listltem
IstAPlates.Visible = True se e event of selection in the Istaplates view CAPLATE) <> "" And (Aplates (aplt) .Good Or WellStat = cSTATALL) s.FindltemlAplates (aplt) . PlatelDlALabelType) ) d Then (Aplates (aplt) .imageindex & "S") Aplates (aplt) .imageindex & "N"
Figure imgf000086_0001
ro θ> Private Sub mnuViewGood_Click()
.Dim pit As Integer
WellStat = cSTATGOOD
For pit = 0 To TtlAssayPlates
Aplates (pit) .Selected = False
Next pit pit = 0
While Splates (cSPLATE, pit). PlatelD <> ""
SplateslcSPLATE, pit) .Selected = False pit - pit + 1
Wend
Unload frmSelectedPlates frmSelectedPlates.Show
End Sub
Private Sub optALabel_Click(Index As Integer)
ALabelType = Index
If Index <> 0 Then mnuSelectRange. Enabled = False
Else mnuSelectRange.Enabled = True
End I
Call Load_Nodes
End Sub
Private Sub optClickE fect_Click|Index As Integer)
Private Sub mnuShowPatterns_Click( )
Call CalcAPlatePattern frmAPlatePa tern. Show End Sub
Private Sub mnushowPerformance_Click()
Dim i As Integer Co Oim count As Integer
C ' load list of Selected SPlates with index values of location in SPlate array
00 i = 0 tO AplatesSubSelected = 0
^ While Aplates (i) . PlatelD(cAPLATE) <> "" c If Aplates(i) .Selected Then
AplatesSubSelected = AplatesSubSelected + 1 m End If
CO i = i + 1 m J frmSelectedPlates - 9 m i
^ Wend ReDim Aplateslndex (AplatesSubSelected) m i = 0 count = 0
£5 While Aplates(i) .PlatelD (cAPLATE) <> ""
—' If Aplates(i) .Selected Then
Aplateslnde (count) = i count = count + 1 End If i = i + 1
Wend
If AplatesSubSelected <> 0 Then frmAPlatePerform.Show
Else
MsgBox ("Please select at least One Assay Plate")
End If
End Sub
Private Sub mnuViewAll_Click() Dim pit As Integer
WellStat = cSTATALL
For pit = 0 To TtlAssayPlates
Aplateslplt) .Selected = False
Next pi pit = 0
While SplateslcSPLATE, pit). PlatelD <>'"•
SplateslcSPLATE, pit) .Selected = False pit = pit + 1 Wend
Unload frmSelectedPlates frmSelectedPlates .Show End Sub i = i + 1 Wend ted)
<> "
t One Assay Plate")
)
Figure imgf000088_0001
lick() " & " : " & SplateslcSPLATE, 0). PlatelD
' load list of Selected SPlates with index values of location in SPlate array i = 0
SplatesSubSelected = 0
While SplateslcSPLATE, i). PlatelD <> ""
If SplateslcSPLATE, i). Selected Then
SplatesSubSelected = SplatesSubSelected + 1
End If ι = ι + l
Wend
ReDim Splateslndex (SplatesSubSelected) i = 0 count = 0
While SplateslcSPLATE, i). PlatelD <> ""
If SplateslcSPLATE, i). Selected Then
Splateslndex (count) = i count = count + 1
End If i = i + 1 Wend
If SplatesSubSelected <> 0 Then frmSPlateGraphic . Show Else
MsgBox ("Please select at least One Compound Plate") End If
End Sub PLATE) <> "") + cnt) . PlatelD(cAPLATE) , "»##########")) aplt + cnt) .PlatelD (cAPLATE) , "-#####„####"))
+ cnt) .PlateΙD(cAPLATE) )
Figure imgf000089_0001
aolt = 0
While Aplates (aplt) .PlatelD (cAPLATE) <> ""
If Aplates (aplt) .Selected Then spit = 0
While SplateslcSPLATE, spit) .PlatelD 0 Aplates (aplt) .PlateΙD(cSPLATE) spit = spit + 1
Wend
Splates (cSPLATE, spit) .Selected = True
Set tempnode = trvSPlates.Nodes("A" & FormatlAplates (aplt) .PlatelD(cSPLATE) , "##--#--- #tf###-#«") ) tempnode. Image = Splates (cSPLATE, spit) . imageindex & "S" End If
frmSelectedPlates - 8 aplt = aplt + 1 „
Wend
End Sub
Private Sub mnuShowAssay_Click( )
Dim i As Integer
Dim count As Integer
' load list of Selected SPlates with index values of location in SPlate array i = 0
AplatesSubSelected = 0
While Aplates(i) .PlatelD(cAPLATE) <> "" If Aplates (i) .Selected Then
AplatesSubSelected = AplatesSubSelected + 1 End If frmSelectedPlates - 7
CO aplt = aplt + 1
C Wend ψ End Sub
CO
-3 Private Sub Deselect_SPlates ( ) Dim spit As Integer
—I Dim tempnode As Node m spit = 0
CO While SplateslcSPLATE, spit) .PlatelD <> "" jmE SplateslcSPLATE, spit) .Selected = False
m Set tempnode = trvSPlates.Nodes("A" t Format (Splates (cSPLATE, spit) . PlatelD, "#_#####(,#* ###„##") )
• tempnode. Image = SplateslcSPLATE, spit) . imageindex & "N"
00
Oo spit = spit + 1
73 I Wend
End Sub fn
Hj Private Sub mnuSelectDeselAssay_Click( ) σj Call Deselect_APlates
End Sub
Private Sub mnuSelectDeselect_Click()
Call Deselect_SPlates
Call Deselect_APlates End Sub Private Sub mnuSelectDeSelSource_Click()
Call Deselect_SPlates
End Sub
Private Sub mnuSelectRange_Click()
Dim cnt As Integer
Dim aplt As Integer
Dim templist As Listltem
Dim tempnode As Node Dim found As JBoolean
Call Deselect_APlates Call mnuViewAssay_Click found = False
APlatesInARange = Val(txtAplatesInARange.Text)
If Val(txtAplatesInARange.Text) < 1 Then APlatesInARange = 0
If Val(txtAplatesInARange.Text) > TtlAssayPlates Then APlatesInARange = TtlAssayPlates aplt = 0
While Aplates(aplt) . PlatelDlcAPLATE) <> CurrAPlateClicked.Text aplt = aplt + 1 Wend
End If aplt = aplt + 1 Wend ,
Φ spit = spit + 1
C Wend
DO End Sub
CO
— Private Sub mnuSelectAssayS_Click()
^ Dim aplt As Integer
_j Dim tempnode As Node m Dim templist As Listltem
CO
I aplt = 0 πi , While Aplates(aplt) .PlatelDlcAPLATE) <> "" ] CO If WellStat = cSTATALL Or Aplates (aplt) .Good Then
^ *γ Aplates (aplt) .Selected = True
73 Set tempnode = trvSPlates.Nodes ( "A" £< Format (Aplates (aplt) .PlatelD(cAPLATE) , "#####„#„#„#"))
C tempnode . Image = Aplates (aplt) .imageindex & "S" m "~ Set templist = IstAPlates.Listltems ( "A" J. Format(Aplates (aplt) . PlatelD(cAPLATE) , "#„###„ #####") ) ro templist. Smalllcon = Aplates (aplt) . imageindex & "S" σ> End If
""" aplt = aplt + 1
Wend End Sub
Private Sub mnuSelectCompounds_Click()
' select all Splates
Dim spit As Integer
Dim tempnode As Node
Dim templist As Listltem spit = 0
While SplateslcSPLATE, spit) . PlatelD <> ""
SplateslcSPLATE, spit) .Selected = True
Set tempnode = trvSPlates.Nodes ("A" & Format (Splates (cSPLATE, spit) .PlatelD, "################■)) tempnode. Image = SplateslcSPLATE, spit) .imageindex & "S" spit = spit + 1
Wend
End Sub
Private Sub Deselect_APlates ( )
Dim aplt As Integer
Dim tempnode As Node
Figure imgf000092_0001
Dim templist As Listltem aplt = 0
While Aplates (aplt) .PlatelD (cAPLATE) <> ""
If WellStat = cSTATALL Or Aplates (aplt) .Good Then Aplates (aplt) .Selected = False
Set tempnode = trvSPlates.Nodes("A" & FormatlAplates (aplt) .PlatelD(cAPLATE) , -«#«*#*#«#»**) ) tempnode. Image = Aplates (aplt) .imageindex & "N"
Set templist = lstAPlates.FindltemlAplates(aplt) . PlatelD(ALabelType) ) templist.Smalllcon = Aplates (aplt) .imageindex & "N" End If
On Error GoTo theend cmdSave.CancelError = True
CO cmdSave. howSave
C- fname = cmdSave.. filename ro fl = FreeFile
Z Open fname For Output As fl
-**j Print Kfl, "Aplate_ID" ϊt ChrS (9) & "S/N" & ChrS (9) & "CV»" & ChrS (9) & "HighCntrl" & ChrS (9) & "LowCntrl" & Chr$(9) &
C "Bad Wells"
—I For aplt = 0 To TtlAssayPlates - 1 m Print #fl, Aplates (aplt) .PlatelD (cAPLATE) & Chr$(9) & Format (Aplates (aplt) . sn (WellStat) , "0.00") & Chr$(9) & _
CO Format (Aplates (aplt) .cv(WellStat) , "0.00") & "*" & ChrS(9) -■ FormatlAplates (aplt) .Control (cSTATGOOD, cHIGH) , " jlj I *#*##0.00") 6 Chr$(9) & _ πj g Format (Aplates (aplt) .Control (cSTATGOOD, cLOW) , "ft*###0.00" ) & ChrS(9) & Aplates (aplt) .BadWells
_| i Next aplt —. Close fl 73 C r- m
£> frmSelectedPlates - 6 theend: End Sub
Private Sub mnuRefresh_Click()
Call Form_Load
End Sub
Private Sub mnuSelectAssayFromSource_Click()
Dim spit As Integer
Dim aplt As Integer
Dim tempnode As Node
Dim templist As Listltem splt = 0
While SplateslcSPLATE, spit) .PlatelD <> ""
aplt = 0
While Aplates(aplt) .PlatelD(cAPLATE) <> ""
If Aplates (aplt) .PlatelD(cSPLATE) = SplateslcSPLATE, spit) . PlatelD Then
Aplates (aplt) .Selected = SplateslcSPLATE, spit) .Selected
Set tempnode = trvSPlates.NodesCA" S. Forma (Aplates (aplt) .PlateΙD(cAPLATE) , "„######*###"))
If Aplates (aplt) .Selected Then tempnode . Image = (Aplates (aplt) .imageindex & "S")
Else tempnode. Image = Aplates (aplt) .imageindex & "N" End If Set templist = IstAPlates.Listltems ("A" & Format (Aplates (aplt) .PlatelD(cAPLATE) , "M*„*M*MI" ) ) If Aplates (aplt) .Selected And (WellStat = cSTATALL Or Aplates (aplt) .Good) Then templist. Smalllcon = (Aplates (aplt) . imageindex & "S") Else templist.Smalllcon = Aplates (aplt) .imageindex & "N* End If CO While "A" & Format (Aplates (aplt) . PlatelD(cAPLATE) ) <> templist. key
DO aplt = aplt + 1
CO Wend id Aplates (aplt) .Selected = Not Aplates (aplt) .Selected H
~ imagekey = Aplates (aplt) .imageindex πi If Aplates (aplt) .Selected Then tf. templist. Smalllcon = (Aplates (aplt) . imageindex & "S")
I ' Else m ._. templist. Smalllcon = Aplates (aplt) .imageindex & "N" m I End If
""' Next te py
^0 End If ' cSELECT
C ι— Exit Sub m ro σ» BadSelect:
Debug.Print "Bad Item (mouse up) . Error = " & Err.Number & " " & Err.Description Call lstAPlates_MouseUp(l, 0, X, Y - 225) End Sub
Private Sub menuViewSource_Click() Dim imagekey As String Dim aplt As Integer Dim tempnode As Node trvSPlates.Visible = True
IstAPlates.Visible = False menuViewSource.Checked =* True mnuViewAssay.Checked = False
' re-load aplate icons in the event of selection in the Istaplates view aplt = 0
While Aplates(aplt) . PlatelD (cAPLATE) <> ""
If WellStat = cSTATALL Or Aplates (aplt) .Good Then
Set tempnode = trvSPlates.Nodes. Item("A" & Forma (Aplates (aplt) .PlatelD (cAPLATE) ) ) imagekey = Aplates (aplt) .imageindex If Aplates (aplt) .Selected Then tempnode. Image = (Aplates (aplt) . imageindex & "S")
Else tempnode . Image = Aplates (aplt) . imageindex & "N"
End If
End If aplt = aplt + 1
Wend
End Sub
Private Sub mnuFileExit_Click( )
Call End_Program End Sub
Private Sub mnuFileSaveAssay_Click() Dim aplt As Integer Dim fname As String Dim fl As Integer
CO c ' get current image index and change Bad flag
00 Newlndex = MidS (Aplates (aplt) . imageindex, 1, 3) φ If Aplates (aplt) .Good Then
—I Aplates (aplt) . imageindex = Newlndex & "G"
H KΩ Else
C M Aplates (aplt) .imageindex = Newlndex & "B" m End If
Item. Smalllcon = Aplates (aplt) . imageindex & "N"
CO
I m End If m
Exit Sub
73 c BadSelect:
Debug. Print "Bad Item (Click). Error = " & Err.Number & " " & Err.Description m ro End Sub
Private Sub lstAPlates_MouseDown (Button As Integer, Shift As Integer, X As Single, Y As Single) If X < 1200 Then
GroupSelect = False Else
StartY = Y GroupSelect = True End If End Sub Private Sub lstAPlates_MouseUp (Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim tempy As Integer
Dim aplt As Integer
Dim templist As Listltem
Dim imagekey As String
On Error GoTo BadSelect
frmSelectedPlates - 5
If ClickEffect = cSELECT Then If GroupSelect Then
If StartY > Y Then teπtpy = StartY StartY = Y Y = te py End If Else
StartY = Y Co End If
C
00 For tempy = StartY To Y Step 225
^ Set templist = IstAPlates. HitTest(200", tempy)
- aplt = 0
C frmSelectedPlates - 4 m
CO If Me.WindowState <> vbMinimized Then trvSPlates.Top = 0 m IstAPlates.Top = 0 m j trvSPlates.Left = 0
""I κo IstAPlates. eft = 0
C trvSPlates.Width = frmSelectedPlates.Width - (fraClickEffeet.Width + 150)
I- IstAPlates.Width = frmSelectedPlates.Width - (fraClickEffect.Width + 150)
171 trvSPlates. Height = frmSelectedPlates. Height - 900
£> IstAPlates. Height = frmSelectedPlates. Height - 900
Figure imgf000095_0001
D m Up ateSQL As Str ng
On Error GoTo BadSelect
Set CurrAPlateClieked = Item
If ClickEffect = cREJECT Then
' find aplt index value aplt = 0 While Aplates (aplt) .PlateID(cAPLATE) <> Item a,plt = aplt + 1 Wend
' toggle plate status
Aplates (aplt) .Good = Not Aplates (aplt) .Good ' update database If Aplates (aplt) .Good Then flag_val = " " Else flag_val = "T" CO End If
C
D3 insert into Tropix Update Whole Plate table
_l UpdateSQL = "insert into TROPIX_UPDATE_WHOLE_APLATE values ('" & Aplates (aplt) . PlateCode (cAPLATE) & "','" t flag v al Jc "')"
C Set rsUpdateWholePlate = DB.OpenRecordset (UpdateSQL, dbOpenSnapshot)
—mI rsUpdateWholePlate.Close
CO i
-JC ^3 'set font color for SN values m -t currsn = Aplates (aplt) .sn (WellStat) rj ' IstAPlates. Font. Bold = True
^2 If currsn < Limits (cLIMITPLATESN, 0) Then
^0 currclr = Clr (cLIMITPLATESN, 0)
C Elself currsn < Limits (cLIMITPLATESN, 1) Then r~ currclr = Clr (cLIMITPLATESN, 1)
171 Elself currsn < Limits (cLIMITPLATESN, 2) Then
£5 currclr = Clr (cLIMITPLATESN, 2)
—- Else
IstAPlates. Font. Bold = False currclr = vbBlack End If
IstAPlates.ForeColor = currclr tempitem.Subltems(l) = Forma (Aplates (aplt) .sn (WellStat) , "##0.00") currcv = Aplates (aplt) .cv (WellStat)
IstAPlates.Font.Bold = True
If currcv < Limits (cLIMITPLATECV, 0) Then
IstAPlates.Font.Bold = False
currclr vbBlack Elself currcv < Limits (cLIMITPLATECV-, 1) Then currclr = Cl (cLIMITPLATECV, 0) Elself currcv < Limits (cLIMITPLATECV, 2) Then currclr = Cl (cLIMITPLATECV, 1)
Else currclr Clr (cLIMITPLATECV, 2) End If
IstAPlates . ForeColor currclr tempitern. Sublterns (2) Format (Aplates (aplt) . cv (WellStat) , "0.00") £. "%" tempi ern. Sublterns (3 ) Aplates (aplt) .BadWells IstAPlates . Font . Bold False IstAPlates. ForeColor vbBlack End If aplt = aplt + 1
Wend
IstAPlates. iew = lvwReport
CO c trvSPlates. odes (1) .Expanded = True
00 End Sub CO
Private Sub Form_Resize () frmSelectedPlates - 3 m I
CO Elself value > Limits (cLIMITINHIB, 0) Then
I Ol
I plateicon(2) = plateicon(2) + 1 m Else m H plateicon|3) = plateicon(3) + 1 End If ' new "best" value End If c Next cl m Next rw ro
CO Index = "" For i = 0 To 2
If ρlateicon(i) >= RangeLimits (0) Then
Index = Index & "H" Elself plateicon(i) >= RangeLimits (1) Then
Index = Index t "M" Elself plateicon(i) >= RangeLimits (2) Then
Index = Index "L" Else
Index = Index & "N" End If Next i
If Not Aplates (aplt) .Good Then
Index = Index & "B" Else
Index Index & "G" End If
If (WellStat = cSTATALL) Or (Aplates (aplt) .Good) Then Aplates (aplt) . imageindex = Index
Set tempnode = trvSPlates. odes.Add ( "A" & Format (Aplates (aplt) .PlateΙD(cSPLATE) , "################"), tvwChild , "A" £. Format (Aplates (aplt) . PlatelD(cAPLATE) , "###########"), Aplates (aplt) .PlateΙD(ALabelType) ) If Aplates (aplt) .Selected Then
Index = Index &. "S" Else
Index = Index & "N" End If tempnode . Image = Index tempnode. Sorted = True
CO c Set tempitem = IstAPlates. Listltems.Add ( , "A" &. Format (Aplates (aplt) . PlatelD (cAPLATE) ) , Aplates (aplt) .PlateID(
00 ALabelType), Index, Index) CO
I If value >= Limits (cLIMITINHIB, 2) Then
ON plateicon(O) = plateicon(O) + 1 m I Elself value > Limits (cLIMITINHIB. 1) Then
CO plateicon(l) = plateicon(l) + 1
I Elself value > Limi s (cLIMITINHIB, 0) Then m m plateicon(2) = plateicon(2) + 1 Else plateicon(3) = plateicon(3) + 1
73 End If ' value range finding c End If 'data well m Next cl ro Next rw
Index = " " For i = 0 To 2
If plateicon(i) >= RangeLimits (0) Then
Index = Index & "H" Elself plateicon(i) >= RangeLimits (1) Then
Index = Index & "M" Elself plateicon(i) >= RangeLimits (2) Then
Index = Index & "L" i:lse
Index = Index & "N" Hnd If Next i
Index = Index & "G"
Set tempnode = trvSPlates.Nodes.Add( "Assay" , tvwChild, "A" & Format(Splates (cSPLATE, spit) .PlatelD, "############# ###"), Splates (SLabelType, spit) .PlatelD)
SplateslcSPLATE, spit) . imageindex = Index
If SplateslcSPLATE, spit) .Selected Then tempnode . Image = Index & "S"
Else tempnode . Image = Index & "N"
End If spit = spit + 1
Wend
' Add Aplates aplt = 0
While Aplates (aplt) .PlatelD (cAPLATE) <> *" ' determine image index value = 0 For i = 0 To 3 plateicon(i) = 0
Φ Next i
C
DO For rw = 0 To 7
CΛ For cl = 0 To 11
— If Aplates (aplt) .WelKrw, cl).Tyρe = "D" Then c value = Aplates (aplt) .WelKrw, cl) .Inhib(WellStat)
H m If value >= Limits (cLIMITINHIB, 2) Then
CO plateicon(O) = plateicon(O) + 1 j ! Elself value > Limits (cLIMITINHIB, 1) Then η ° plateiconll) = plateicon(l) + 1
-1 I Private Sub Load_Nodes I )
*""η Dim tempnode As Node Dim tempitem As Listltem
["" Dim tempname As String m Dim spit As Integer ro Dim aplt As Integer
32 Dim rw As Integer
Dim cl As Integer Dim value As Double Dim Index As String Dim indexval As Integer
Dim plateicon(3) As Integer
Dim i As Integer
Dim currsn As Single
Dim currcv As Single
Dim currclr As ColorConstants
Dim clh As ColumnHeader trvSPlates.Nodes. Clear
IstAPlates.Listltems.Clear frmSelectedPlates - 2
trvSPlates. ImageList = ImageListl
IstAPlates. Icons = ImageListl
IstAPlates. Smalllcons = ImageListl
IstAPlates .ColumnHeaders . Clear
Set clh = IstAPlates. ColumnHeaders.Add (, , "Plate lD")
Set clh = IstAPlates. ColumnHeaders. Add!, , "SN", 600)
Set clh = IstAPlates. ColumnHeaders. Addl, , "CV", 900)
Set clh = IstAPlates. ColumnHeaders.Addl, , "Bad Wells", 1600)
Create Root Node
Set tempnode = trvSPlates. odes.Add( , , "Assay", Aplates (0) .assay) tempnode. Sorted = True
CO c ' Add Splates
0_0 spit = 0
CO While SplateslcSPLATE, spit) . PlatelD <> ""
' determine image index value = 0
SplateslcSPLATE, spit) . imageindex = 0 m For i = 0 To 3 plateicon(i) = 0
CO Next i m For rw = 0 To 7 m I For cl = 0 To 11 oo If SplateslcSPLATE, spit) .assay(O) .Welllrw, cl) .Type = "D" Then !
73 value = SplateslcSPLATE, spit) .assay (0) .Well (rw, cl) .Inhib(WellStat) cr- On Error GoTo theend m cmdSave.CancelError = True ro cmdSave . ShowSave fname = cmdSave. ilename fl = FreeFile
Open fname For Output As fl
Print #fl, "CompoundlD" & ChrS (9) & "AplatelD" & Chr$(9) & "AssayCode" & ChrS (9) &. "Row" & ChrS (9) & "Column" S Chr$(9 ) & "Raw" & ChrS (9)- & "Inhib" r = 0
While TempRst (r) .PlatelD <> ""
Print #fl, TempRst (r) .compoundlD & ChrS(9) S= TempRst (r) .PlatelD & Chr$(9) & _
AplateslO) .assay & ChrSO) & ChrS (TempRst (r) . row + Asc ("A")) & ChrSO) 6 TempRst (r) .col £i Chr$(9) & _ TempRst (r) .Raw & Chr$(9) & TempRst (r) .Inhib r = r + 1
Wend
Close fl
Exit Sub theend: r = MsgBox (r & " " & Err. Description, vbOKOnly) Close fl End Sub
Private Sub Form_Load()
RangeLimits (0) = Vall'O" & txtCount(O))
RangeLimits <1) = Vall'O" & txtCountll))
RangeLimi s (2) = Val("0" & txtCount(2)) optSLabeKSLabelType) .value = True optALabellALabelType) .value = True
set menu items checked as appropriate If menuViewSource. Checked Then trvSPlates.Visible = True IstAPlates.Visible = False Elself mnuViewAssay.Checked Then trvSPlates. Visible = False IstAPlates.Visible = True Else CO menuViewSource.Checked = True
C trvSPlates. isible = True
00 CO IstAPlates.Visible = False End If mnuSelectRange. Caption = "Select " & txtAplatesInARange.Text & " Assay Plates"
I71 Call loadimages
CO
I Call Load_Nodes m Set CurrAPlateClieked = IstAPlates.GetFirstVisible
—I APlatesInARange = Vail xtAplatesInARange.Text)
-r l End Sub
73 o
C |- «I? Else m ' Individual Cells have been choosen ro strTemp = ""
32 bchoosen = False flxPreSelect.col = EndCol
For rw = 3 To flxPreSelect.Rows - 1 flxPreSelect.row = rw
If flxPreSelect.CellFontBold Then tempSplatelD = "•" & IflxPreSelect.TextMatrixlrw, 0))
If tempSplatelD = "'No Splate" Then tempSplatelD = * •■ strTemp = strTemp & " ' " & IflxPreSelect.TextMatrixlrw, 0) ) £= "', " bchoosen = True
End If
Next rw
If bchoosen Then strTemp = Lefts IstrTemp, LenlstrTemp) - 1)
If ImportType = cBYSOURCE Then ' selection by splate strSQL = strSQL & "sp.splate_id in ( " & strTemp & ")"
Else strSQL = strSQL £ "to_char( ps . import_date, 'YYYY/MM/DD' ) in (" & strTemp & ")'
End If End If
End If
If NullΞPlate Then
If achoosen Or schoosen Then strSQL = strSQL & " AND" strSQL = strSQL & " sp.splate_id is NULL" End If
If SelectMode <> -1 Then strSQL = strSQL & " ) " ' End Assay_code / Splate selection restrictions
SubSelectSQL = "AND (" 5= StrSQL
End Function CO
S t. frmSelectedPlates c —oI Q S • Copyright 1999 Tropix, Inc.
—I I Option Explicit
C Dim GroupSelect As Boolean ' for IstAplates
"j Dim StartY As Integer ' for aplates, if group selecting
Dim CurrAPlateClieked As Listltem ' for determining starting point ranged selection Dim ClickEffect As Integer Dim RangeLimits (3) As Integer
C r- m ro σ>
Else
If EndDate = "" Then
DateWhere = " AND (tps . import_date >= to_date('" & StartDate & " ' , 'MM/DD/YY' ) ) FormTitle = FormTitle & "import_date after " & StartDate & " , "
Else
DateWhere = " AND ( tps. import_date between to_date('" & StartDate & "', 'MM/DD/YY' ) and to_date ( • " t EndDate &
frmPreSelect - 6
', 'MM/DD/YY')) "
FormTitle = FormTitle & "import_date between " & StartDate & " " & EndDate t " "
End If '
End If
If SeleetStat = cSTATALL Then
BogusWhere = " AND (1=1) "
FormTitle = FormTitle & "Good and Bad Assay Plates"
Else
BogusWhere = " AND (tps.bogus_flag is NULL) "
FormTitle = FormTitle & "Good Assay Plates Only"
End If End Sub
Private Function SubSelectSQLt ) As String
Dim strSQL As String
Dim strTemp As String
Dim tempSplatelD As String
Dim tempdate As String
Dim achoosen As Boolean CO Dim schoosen As Boolean Dim bchoosen As Boolean oo Dim rw As Integer
CO Dim cl As Integer H Dim pit As Integer r- I Dim NullSPlate As Boolean rπ -rt AssayName = flxPreSelect.TextMatrix(0, EndCol)
CO '
I m Assay_Code ONLY restrictions m If (flxPreSelect.TextMatrixd, EndCol) = flxPreSelect.TextMatrix(2, EndCol) ) Then ' an assay type has been selected (total = selected) StrTemp = "'" £■ ( flxPreSelect .TextMatrix(0, EndCol)) & "' "
73 c StrSQL = strSQL & " (1=1) " ' assay_code already restricted in assaywhere
I- Else
171 strSQL = "select to_char (tps. import_date, 'YYYY/MM/DD' ) , " & strAssays S. "'X'" & _ b£ " from splate sp, mplate mp, aplate ap, tropix_plate_status tps " & _
—' " where ap.aplate_code = tps.aplate_code AND " k _
" mp.splate_code = sp.splate_code(+) AND " & _
" ap.mplate_id = mp.mplate_id(+) " & _
AplateWhere & SplateWhere & DateWhere & BogusWhere & _
" group by to_char (tps . import_date, 'YYYY/MM/DD' ) " & _
" order by to_char( tps. import_date, 'YYYY/MM/DD' ) "
End U
Set rsPreSelect = DB.OpenRecordset (strSQL, dbOpenSnapshot) rsPreSelect.MoveFirst i = 0
While Not rsPreSelect .EOF i = i + 1- rsPreSelect.MoveNext
Wend
>« α a
-s -»
Figure imgf000104_0001
Debug. Print strSQL
Set rsAssays = DB.OpenRecordse (strSQL, dbOpenSnapshot)
If rsAssays. EOF Then msg = MsgBoxl'No data exists in this. database to match your restrictions. " & _
ChrS (10) & "Please check your conditions and try again", vbOKOnly)
Unload Me
Else ' records were retrieved frmPreSelect - 5 rsAssays .MoveLast-
TtlAssays = rsAssays. RecordCount
ReDim Assays (TtlAssays) rsAssays .MoveFirst i = 0
CO While Not rsAssays. EOF
OD Assays (i) = rsAssays. Fields (0) to strAssays = strAssays & " sum(decode(ap.assay_code, ' " St Assays(i) & _
—, i "',1,0)1 count" & i & ", " rsAssays .MoveNext
O i = i + 1 m I Wend
CO
X 'get counts of assay plates for each well in the flxgrid m
[I] If ImportType = cBYSOURCE Then
«—« strSQL = "select sp.splate_id, " £. strAssays & "'X'" & _
73 • from splate sp, mplate mp, aplate ap, tropix_plate_status tps " & _
^ " where ap.aplate_code = tps.aplate_code AND " & _ η " mp.splate_code = sp.splate_code(+) AND " 6 _
Hj " ap.mplate_id = mp.mplate_id(+) " & _
0> AplateWhere St SplateWhere & DateWhere & BogusWhere & _
" group by sp.splate_id " & _
" order by sp.splate_id"
EndRow = IxPreSelect.MouseRow EndCol = IxPreSelect.MouseCol
If EndRow < StartRow Then rw = EndRow
EndRow = StartRow
StartRow = rw
End If
If EndCol < StartCol Then cl = EndCol
EndCol = StartCol StartCol = cl
End If
If EndCol < 2 Then ' an assay was picked msg = MsgBox! "Please choose either an entire assay, or individual cells in the matrix, all from the same assay", v bOKOnly)
Else fIxPreSelect .col = EndCol count = Int (fIxPreSelect.TextMatrix (2, EndCol) & ".0") flxPreSelect.TextMatrix(2, 1) = Int IfIxPreSelect.TextMatrix(2, 1) & ".0") - count
If St.artRow < 3 Then ' a title row was clicked - choose the whole assay StartRow = EndRow
For rw = 3 To fIxPreSelect .Rows - 1 fIxPreSelect. row = rw flxPreSelect.CellFontBold = Not flxPreSelect.CellFontBold count = count + (1-2 * Int ( fIxPreSelect .CellFontBold) ) - 1) * fIxPreSelect .Text φ Next
C Else ' an individual well (or subset of wells) was clicked
OD For rw = StartRow To EndRow
* fIxPreSelect. row = rw
^ flxPreSelect.CellFontBold = Not flxPreSelect.CellFontBold
^ I count = count + (1-2 * Int (fIxPreSelect.CellFontBold) ) - 1) * Int (fIxPreSelect.Text)
H £ Next m End If
CO ' flxPreSelect .TextMatrix(2, EndCol) = count
I fϊxPreSelect.TextMatrix(2, 1) = Int (flxPreSelect.TextMatrix (2, 1) & ".0") + count
Hm End If
AssayWhere = "AND (ap.assay_code = '" & flxPreSelec .TextMatrix(0, EndCol) &
73
C End Sub ml,j Private Sub Form_Load()
Oi fraLoading. isible = False
Call SetRestrictions frmPreSelect.Caption = FormTitle Call Setup End Sub rsAWellData.MoveNext
Loop rsAWellData.Close
Call CalcAStats (pit) pit = pit + 1 rsPlateData. MoveNext pbrData.value = pbrData.value + 1
Loop
TtlAssayPlates = .pit - 1 set the ranges (if retrieved)
RangesRetrieved = False
If chkRanges = 1 Then
RangesRetrieved = True strSQL = "select assay, statistic, idx, value from TROPIX_RANGE_SETTINGS " £. _ "where assay = ' " & Aplates (0) .assay J. " ' "
Set rsranges = DB.OpenRecordset (strSQL, dbOpenSnapshot) rsranges.MoveFirst
While Not rsranges.EOF
Limits(rsranges.Fieldsll) , rsranges.Fields (2) ) = rsranges. Fields (3) rsranges .MoveNext
Wend φ rsranges. Close
C End If
OD to pbrData.min = 0
^ pbrData.Max = TtlSplates + 1
^ pbrData.value = 0
H m Call CalcSPlateStats
CO I
X t, fraLoading.Visible = False s |_j sI frmLimits. Show
,_» End Sub
^ frmPreSelect - 4 m Private Sub flxPreSelect_MouseDown (Button As Integer, Shift As Integer, X As Single, Y As Single) no StartRow = flxPreSelect .MouseRow
32 StartCol = flxPreSelect. MouseCol
End Sub
Private Sub flxPreSelect_MouseUp (Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim cl As Integer
Dim rw As Integer
Dim msg As Integer
Dim count As Integer frmPreSelect - 3
ReDim Aplates (pit) ' Add records to APlatesl) rsPlateData. MoveFirst pit = 0
Do Until rsPlateData. EOF
Aplates (pit) .PlatelD (cAPLATE) = rsPlateData. Fields ( "aplate_id" ) & ""
Aplates (pit) .PlateCode (cAPLATE) = Val (rsPlateData.Fields ( "aplate_code" ) )
Aplates(plt) .PlatelD(cDPLATE) = rsPlateData.Fields ( "dplate_id" ) t *
Aplates (pit) .PlateCode (cDPLATE) = Val (rsPlateData. Fields ("dplate_code") )
Aplates (pit) .PlatelD (cMPLATE) = rsPlateData. Fields ( "mplate_id" ) & " "
Aplates (pit) .PlateCode [cMPLATE) = Val (rsPlateData. Fields ("mplate_code") )
Aplates (pit) .PlatelD(cSPLATE) = rsPlateData. Fields ( "splate_id" ) & • "
Aplates (pit) .PlateCode (cSPLATE) = Val("0" t rsPlateData.Fields 1 "splate_code" ) )
Aplates (pit) .assay = rsPlateData. Fields ("assay_code" ) & * "
If (rsPlateData.Fields ("bogus_flag") & "") = "T" Then
Aplates (pit) .Good = False Else
Aplates (pit) .Good = True End If
' Get the well data for each plate strSQL = "Select column_number, row_letter, " & _ 52 " raw_value, calc_value, bogus_flag, well_type, " & _ rj " compound_id, sample_id " & _ φ " from awell " & _
—I " where " & _
" aplate_code = '" & Aplates (pit) .PlateCode (cAPLATE) & "" m Set rsAWellData = DB.OpenRecordset (strSQL, dbOpenSnapshot)
CO rsAWellData.MoveFirst cτ>
I 1 Do Until rsAWellData. EOF m rw = Asc(rsAWellData.Fieldsd) ) - AscCA") m ςl = rsAWellData. Fields (0) - 1
H Aplates (pit) .Welllrw, cl) .Raw = Val (rsAWellData.Fields (2) & ".0")
If Aplates (pit) .Welllrw, cl).Raw < 0 Then
C Debug. Print Aplates (pit) .Well (rw, cD.Raw
I- End If m Aplates (pit) .WelKrw, cl) .Calc = Val (rsAWellData. Fields(3) J 0") ro σ> Aplates (pit) .WelKrw, cl) .Type = rsAWellData. Fields (5) & ""
Aplates (pit) .WelKrw, cl) .Compound = rsAWellData. Fields(6) & "•
Aplates (pit) .WelKrw, cl) .Sample = rsAWellData. Fields(7) & ""
If (rsAWellData. Fields (4) & "" = "T") Then Aplates (pit) .WelKrw, cl) .Good = False
Else
Aplates (pit) .Well (rw, cl) .Good = True
End If
' Get Count of MaxAssayCompounds strSQL = "Select maxlcoun (*) ) from aplate group by assay_code, dplate_code"
Set rsAssayCompound = DB.OpenRecordset (strSQL, dbOpenSnapshot)
MaxAssayCompounds = rsAssayCompound.Fields (0) .value
' get count of compounds strSQL = "Select count!*) from compound"
Set rsTtlCompound = DB.OpenRecordset (strSQL, dbOpenSnapshot)
TtlCo pounds = rsTtlCompound.Fields (0) .value ReDim SelCompounds (TtlCompounds / 10)
pbrData.min = 0' pbrData.Max = Int (flxPreSelect.TextMatrix(2, 1) & ".0") + 1 pbrData.value = 0
• === Get the Aplate / Awell data strSQL = "Select ap.aplate_id, ap.aplate_code, ap.assay_code, " & _
" dp.dplate_id, dp.dplate_code, " & _
" mp.mplate_id, mp.mplate_code, " & _
" sp.splate_id, sp.splate_code, " & _
" tps.bogus_flag" & _
" from aplate ap, dplate dp, mplate mp, splate sp, tropix_plate_status tps" & _
" where" & _
" ap.dplate_code = dp.dplate_code AND" & _ " dp.mplate_code = mp.mplate_code(+) AND" t _ " mp.splate_code = sp.splate_code(+) AND" & _ " ap.aplate_code = tps .aplate_code" strSQL = strSQL & AplateWhere & SplateWhere & DateWhere & BogusWhere & AssayWhere & _
SubSelectSQL & " order by ap.aplate_id" ' Execute the SQL statement to retrieve the API'.'- level information Debug. Print strSQL CO Set rsPlateData = DB.OpenRecordset (strSQL, dbOpenSnapshot)
™ • === Place the information into the Aplates!) array
—I ' Count retrieved records
"T"j I rsPlateData.MoveFirst
C f pit = 0
H O Do Until rsPlateData. EOF m I pit = pit + 1
CO rsPlateData.MoveNext m Loop
ITj frmPreSelect
"j 'empty Aplates
C If AplatesSubSelected <> 0 Then r~ For pit = 0 To AplatesSubSelected
1 For i = 0 To 3 n Aplateslplt) .PlateΙD(i) =
—' Aplateslplt) . PlateCode (i)
Next i •
Aplateslplt) .imageindex = •" Aplateslplt) .Selected = False Next pit
AplatesSubSelected = 0 End If
' Choose one or the other of these strSQL lines strSQL = -select count!*) from splate sp, mplate mp, aplate ap, tropix_plate status tps " & where mp.splate_code = sp.splate_code(+) AND • t. _
" mp.mplate_id = ap.mplate_id(+) AND " & _
" ap.aplate_code = tps.aplate_code " & _
SplateWhere & AplateWhere S DateWhere & BogusWhere & AssayWhere
' perhaps, instead strSQL = "select count!*) from splate spl* & _
Figure imgf000110_0001
" where spl .splate_code in " & _
" (select sp.splate_code from splate sp, mplate mp, aplate ap, tropix_plate_status tps
" where mp.splate_code = sp.splate_code (+) AND " & _
" mp.mplate_id(+) = ap.mplate_id AND " & _
" ap.aplate_code = tps.aplate_code " & _
SplateWhere & AplateWhere & DateWhere & BogusWhere & AssayWhere & SubSelectSQL & ")" Debug. Print strSQL
Set rsSplateCount = DB.OpenRecordset IstrSQL, dbOpenSnapshot) rsSplateCount . MoveFirst TtlSplates = rsSplateCount.Fields (0)
CO ReDi Splates (4, TtlSplates) c
OD For i = 0 To TtlSplates CO ReDim SplateslO, i).assay(l)
ReDim Splatesll, i).assay(l)
ReDim Splates (2, i) .assay(l)
ReDim Splates (3, i) .assay(l) m Next
CO
I fraLoading. Caption = "Loading Data, Please Wait m m fraLoading. isible = True o oo ' Set headers
I flxPreSelect.TextMatrixll, 1) = 0
73 c flxPreSelect.TextMatri ll, 0) Total:" flxPreSelect.TextMatri (2, 0) Selected: " m For asy = 0 To TtlAssays - 1 ro flxPreSelect.TextMatrix 10 asy + 2) = Assays (asy) flxPreSelect.TextMatrixll, asy + 2) = assaycounts(asy) flxPreSelect.TextMatrixll, 1) flxPreSelect.TextMatrix(1 , 1) + assaycounts(asy)
Next asy
End Sub
Private Sub btnDeselect_Click() Dim rw As Integer Dim cl As Integer
For cl = 2 To flxPreSelect.Cols - 1
For rw = 3 To fIxPreSelect.Rows - 1 flxPreSelect. row = rw flxPreSelect. col = cl flxPreSelect.CellFontBold = False
Next flxPreSelect. row = 0 flxPreSelect.TextMatrix(2, cl) = "" flxPreSelect. FontBold = False
Next fIxPreSelect.TextMatrix(2, 1) = ""
End Sub
Private Sub btnRetrieve_Click()
Dim strSQL As String
Dim strTemp As String
Dim i As Integer
Dim rw As Integer
Dim cl As Integer
Dim pit As Integer
Dim rsPlateData As Recordset CO Dim rsAWellData As Recordset
C Dim rsAssayCompound As Recordset
£~ Dim rsTtlCompound As Recordset
CO Dim rsCompoundPerformance As Recordset
Dim rsranges As Recordset
Dim rsSplateCount As Recordset l"π 'empty splatesl)
CO ^ If SplatesSubSelected > 0 Then jE O For pit = 0 To SplatesSubSelected η f SplateslcSPLATE, pit). PlatelD = ""
H SplateslcSPLATE, pit) . PlateCode = 0
SplateslcSPLATE, pit) . imageindex = "" SplateslcSPLATE, pit) .Selected = False xt pit latesSubSelected = 0
Figure imgf000111_0001
Printer'uϋ Wl + n"5° hsc^e |' t° + D-lpleft ♦ (-50 * hscale) , ptop + 0), RGB (200. 200. 200)
Printer. Line (pleft + 0, ptop + l)-(pleft -. 0. ptop + 0), RGB1200, 200, 200)
Printer.Line (pleft + 50, ptop + 1) -(pleft + 50, ptop + 0), RGB(200 200 200)
Printer. Line (pleft + 100, ptop + l)-(pleft + 100, ptop + 0), RGBI200, 2 20000, 220000))
Printer. ine (pleft + (-50 * hscale), ptop + 0)-(pleft + 100 * hscale, ptop + 0), RGBI170, 170 1 1770)
Printer. ine (pleft ♦ (-50 * hscale), ptop + 0.5)-(pleft + 100 * hscale ptop .5). RGB(170 170 170)
Figure imgf000111_0002
Printer. DrawWidth = 1 End Sub
frmPreSelect - 1
Copyright 199. Tropix, Inc.
Option Explicit
' Form Wide Globals
Dim FormTitle As String
Dim rsAssays As Recordset
Dim rsPreSelect As Recordset Dim StartRow As Integer Dim StartCol As Integer Dim EndRow As Integer Dim EndCol As Integer
= rsPreSelect. Fields(O) , asy + 2) = rsPreSelect. Fields (asy + 1) (asy) + rsPreSelect. Fields (asy + 1)
0")
Figure imgf000112_0001
X Axis
Printer.CurrentX = pleft + (-50 * hscale)
Printer.CurrentY = ptop + 1.03
Printer. Print Format (MinVaKIndex) , "#0.0")
Printer.CurrentX = pleft + 0 * hscale Printer .CurrentY = ptop + 1.03 Printer. Print ."0.0"
Printer.CurrentX = pleft + 50 * hscale
Printer.CurrentY = ptop + 1.03
Printer. Print Forma (MaxVal (Index) / 2, "10.0")
Printer.CurrentX = pleft + 95 * hscale
Printer.CurrentY = ptop + 1.03
Printer.Print Format (MaxVaKIndex) , " 0.0")
Printer. DrawWidth = 3 For 1 = 0 To 2
Printer.CurrentX = pleft + (Limits llndex, i) * hscale * 100) / MaxVal llndex) Printer.CurrentY = ptop - (0.045 * (i + 1)) Printer. Print Format(Limits (Index, i), "MM.01*)
Printer. ine (pleft + (Limits (Index, i) * hscale * 100) / MaxVal (Index) , ptop - 10.005 + (i * 0.04) ))- (plef + 10
CO + (Limits (Index, i) * hscale * 100) / MaxVal llndex) , ptop - (0.005 + ti * 0.04)1), Clrdndex, i) Cc Next i
0 003 Printer.DrawWidth = 1 CO
""j ' Draw major Axis
H Printer. ine (pleft + (-50 * hscale), ptop + l)-(pleft + 100 * hscale, ptop + 1). RGBU70, 170, 170)
^ Printer. ine (pleft + 0, ptop - 0.05)-(pleft + 0, ptop + II), RGB(170, 170, 170) m 1 ' Draw Minor Axis co I—*.
P"j ' If i - ISO * hscale) < Limits (Index, 2) • hscale * 100 / MaxVal (Index) Then If Index = cLIMITPLATESN Then
^J drawclr = Clrdndex, 2)
73 Else.
C drawclr = Clrdndex, 1) m End If End If σ> If i - (50 * hscale) <■ Limits (Index, 1) * hscale * 100 / MaxValdndex) Then
—' If Index = cLIMITPLATESN Then drawclr = Clrdndex, 1) Else drawclr = Clrdndex, 0) End If End If
If i - (50 « hscale) < Limits (Index, 0) * hscale * 100 / MaxValdndex) Then
If Index = cLIMITPLATESN Then' drawclr = Clrdndex, 0)
Else drawclr = vbWhite
End If
End If
Printer. DrawWidth = 2
Printer. ine (pleft + (i - (50 * hscale)), (ptop + 1) - (hDatadndex, i)))-(pleft + (i - (50 * hscale)), (ptop + 1
) ) , drawclr
Printer. DrawWidth = 1
+ 1) - (h ata(indeχ, 'im ' + " " '" * hscaleJ ' ' ,pt°P + *> " «hDat. (Index, i - l)))-(pleft + (i - ,50 * hscale,,, (ptop
Next i Add Labels
Printer.CurrentX = pleft + (0 * hscale)
Printer.CurrentY = ptop - 0.2
.Printer. FontBold = True
If Index = cLIMITINHIB Then
Printer .Print "% Inhibition" Elself Index = cLIMITPLATECV Then
Printer. Print "Assay Plate %CV" Elself Index = cLIMITPLATESN Then
Printer .Print "Assay Plate Signal / Noise" Else
CO c Printer. Print "Compound %CV across duplicates" n End If
CO Printer.FontBold = False
— Private Sub txtMaxDisplay_LostFocus (Index As Integer) btnMaxDisplay (Index) .Visible = True
—I ^ Call Get_Data m r-j Call picHist_Paintdndex)
CO End Sub I
[J] Private Sub txtVal_GotFocus (Index As Integer)
1] txtVal (Index) .SelStart = 0
—» txtVal (Index) .SelLength = Len(txtValdndex) .Text)
73 End Sub C j-η Private Sub txtVal_LostFocus (Index As Integer)
^ picHistdntdndex / 3)).Line (Limits (Int (Index / 3), (Index Mod 3)) * hscale * 100 / MaxVal (Int (Index / 3)), 1.05)-(Li σ> mitsdntdndex / 3), (Index Mod 3)) * hscale * 100 / MaxVal (Int (Index / 3)), -0.03), vbWhite, BF
""' Limits (Int (Index / 3), Index Mod 3) = Val (txtVal (Index) .Text)
Call Draw_Hist (Int (Index / 3), -50 * hscale, 100 * hscale) End Sub
Private Sub printhist (Index As Integer)
Dim i As Integer
Dim drawclr As ColorConstants
Dim temp As Single
Dim pleft As Single
Dim ptop As Single pleft = (Index Mod 2) * (hscale * 175) ptop = Int (Index / 2) * 1.4 + 0.2
Printer. ScaleHeight = 1.4 * 2 + 0.4
Printer. ScaleWidth = (hscale * 175) * 2 Printer .ScaleLeft = hscale * -65 Printer. ScaleTop = -0.1
For i = 1 To 150
'Set the fill color If Index = cLIMITPLATESN Then drawclr = vbWhite
Else drawclr = Clrdndex, 2)
End If frmLimits - 8 picHlst (Index) .CurrentX = 45 * hscale picHistdndex) .CurrentY = 1.03 picHistdndex) .Print Format (MaxVal (Index) / 2, "10.0") picHistdndex) .CurrentX = 95 * hscale picHistdndex) .CurrentY = 1.03 picHistdndex) .Print Format (MaxVal (Index) , "10.0")
CO
C ' Draw major Axis
OD picHistdndex) .Line (-50 * hscale, 1)-(100 « hscale, 1), RGB(170, 170. 170) to^ picHistdndex) .Line (0, -0.05)-(0, 1.05), RGB(170, 170, 170)
---: ' Draw Minor Axis picHist(Index) .Line (-50 * hscale, l)-(-50 * hscale, 0), RGBI200, 200, 200)
H picHistdndex) .Line (0, l)-(0, 0), RGB(200, 200, 200) m ^ picHistdndex) .Line (50, l)-(50, 0), RGB1200, 200, 200)
CO K-J picHistdndex) .Line {100, 1)-(100, 0), RGBI200, 200, 200)
-E if picHistdndex) .Line (-50 * hscale, 0)-(100 * hscale, 0), RGB1170, 170, 170) m i m picHistdndex) .Line (-50 * hscale, 0.5)-(100 * hscale, 0.5), RGB(170, 170, 170) Call DrawDivLines (Index)
73 End Sub
171 Private Sub DrawDivLines (Index As Integer)
HJ Dim i As Integer
,σ> For i = 0 To 2
Call DrawOneline (Index, i) Next End Sub
Private Sub DrawOneline (Index As Integer, unit As Integer)
Call Update_txtVal (Index, unit, Limits (Index, unit)) picHistdndex) .Line (Limits (Index, unit) * hscale * 100 / MaxValdndex,, -0.03) - (Limits (Index, unit) * hscale * 100 /
MaxValdndex,, 1.03), Clrdndex, unit)
End Sub
Private Sub Update_txtVal( Index As Integer, cell As Integer, NewVal As Single) txtVal (Index * 3 + cell).Text = Format (NewVal , " 0.00")
End Sub
Private Sub picHist_Resize (Index As Integer)
Call picHist_Paint (Index) End Sub
If Index <> cLIMITPLATESN Then
If drawclr = Clrdndex, 0) Then percents (Index, 0, = dmaxdndex, * hDatadndex, i) + percents (Index, 0, Elself drawclr = Clrdndex, 1) Then percents (Index, 1, = dmaxdndex) * hDatadndex, i) + percents dndex, 1) Elself drawclr = Clrdndex, 2) Then percents (Index, 2) = dmaxdndex, * hDatadndex, i, + percents (Index, 2) End If' Else
If drawclr = Clrdndex, 0, Then percents (Index, 0, = dmaxdndex, * hDatadndex, i) + percents dndex, 0, Elself drawclr = Clrdndex, 1) Then percents (Index, 1, = dmaxdndex, * hDatadndex, i) + percents dndex, 1, Elself drawclr = Clrdndex, 2) Then percents (Index, 2) = dmaxdndex) * hDatadndex, i) + percents (Index, 2) End If
CO End If c
OD picHistdndex) .Line <(i - (50 * hscale)), 1 - (hDatadndex, i)))-((i - (50 * hscale)), 1), drawclr CO picHistdndex) .Line ( (i - (51 * hscale)), 1 - (hDatadndex, i - l)))-((i - (50 * hscale)), 1 - (hDatadndex, i)))
Next i
4>- If counts (Index) <> 0 Then m I lblPercent (Index * 3 + 0) .Caption Format (percents (Index, 0) * 100 / counts (Index) , * M # .0" ) & "%*
CO lblPercent (Index * 3 + 1) .Caption Format (percents (Index, 1) * 100 / counts (Index) , M I . 0 * ) k "%"
I lblPercent (Index 3 + 2) .Caption = Forma (percents (Index, 2) * 100 / counts (Index) , " # # # . 0 " ) & . "%" m End If m
73 ' Add Labels
C • Y Axis m picHistdndex, .CurrentX = -60 * hscale picHis dndex, .CurrentY = -0.05 ro picHistdndex, .Print Format (dmaxdndex, , "M.0", picHistdndex) .CurrentX = -60 * hscale picHistdndex) .CurrentY = 0.45 picHistdndex) .Print Format (dmax (Index) / 2, "##.0")
' X Axis
Call Update_txtVal(Index, 0, Limits (Index, 0))
Call Update_txtVal (Index, 1, Limits (Index, 1))
Call Update_txtVal( Index, 2, Limits (Index, 2)) picHistdndex) .CurrentX = -60 * hscale picHis dndex, .CurrentY = 1.03 picHistdndex) .Print Format (MinVal (Index) , #0.0" picHistdndex) .CurrentX = 0 * hscale picHistdndex) .CurrentY = 1.03 picHistdndex) .Print "0.0"
End If Datalnitialized True
' Calculate needed values If StartVal > EndVal Then temp = StartVal StartVal = EndVal EndVal = temp End If
' Draw Data If StartVal < -50 Then StartVal = -50 frmLimits - 7 to If EndVal > 100 Then EndVal = 100
Φ percent s llndex, 0, = 0
—I percent s (Index, 1, = 0
"""j percents (Index, 2, = 0 m r-1 For i = StartVal + 52 To EndVal + 49 j- tn 'Set the fill color
^ I If Index = cLIMITPLATESN Then
171 drawclr = vbWhite m Else drawclr = Clrdndex, 2)
7 „3 End If c C If i - (50 * hscale) < Limits (Index, 2) * hscale * 100 / MaxValdndex) Then
If Index = cLIMITPLATESN Then in drawclr = Clrdndex, 2) ro Else drawclr = Clrdndex, 1) End If End If
If i - (50 * hscale) < Li itsdndex, 1) * hscale * 100 / MaxValdndex) Then If Index = cLIMITPLATESN Then drawclr = Clrdndex, 1) Else drawclr = Clrdndex, 0) '
End If
End If
If i - (50 * hscale) < Limitsdndex, 0) * hscale * 100 / MaxValdndex) Then
If Index = cLIMITPLATESN Then drawclr = Clrdndex, 0)
Else drawclr = vbWhite
End If End If
Else
MaxVal (cLIMITCOMPOUNDCV) = VaKtxtMaxDisplay(cLIMITCOMPOUNDCV) .Text) End If
If MinVaKcLIMITCOMPOUNDCV) > SplateslcSPLATE, pit) .assay(O) .Well (rw, cl) .cv(WellStat) Then MinVal (cLIMITCOMPOUNDCV) = SplateslcSPLATE, pit) .assaylO) .WelKrw, cl) .cv(WellStat) End If Next cl Next rw pit = pit + 1 Loop pit = 0
Do While SplateslcSPLATE pit) .PlatelD <> For rw = 0 To 7
For cl = 0 To 11
If SplateslcSPLATE, pit) .assay(O) .Well (rw, clJ.Type <> "H" _
CO c And SplateslcSPLATE, pit) .assay (0) .Welllrw, cl) .Type <> "L" _ And SplateslcSPLATE, pit) .assay(O) .Well (rw, cl) .cv(WellStat) <> cNODATA Then
OD CO ' If MaxVal (cLIMITCOMPOUNDCV) <> 0 Then dpoint = (100 * hscale * SplateslcSPLATE, pit) .assay (0) .Well (rw cl) .ev(WellStat) / MaxVal (cLIMITC OMPOUNDCV) ) + (50 * hscale)
If dpoint < 150 Then m hData (cLIMITCOMPOUNDCV, dpoint) = hData (cLIMITCOMPOUNDCV, dpoint) counts (cLIMITCOMPOUNDCV) = counts (cLIMITCOMPOUNDCV) + 1
CO If hData (CLIMITCOMPOUNDCV,
I dpoint) > dmax (cLIMITCOMPOUNDCV) And dpoint <> 0 And dpoint <> 150 m Then m a dmax (cLIMITCOMPOUNDCV) = hData (cLIMITCOMPOUNDCV, dpoint) I End If
End If
73 c End If End If ' well contains a compound m Next cl ro Next rw pit = pit + 1 Loop
For i = 0 To (hscale * 150) - 1 hData (cLIMITINHIB, i) = hData (cLIMITINHIB, i) / dmax (cLIMITINHIB) hData (CLIMITCOMPOUNDCV, i) = hData (cLIMITCOMPOUNDCV, i) / dmax (cLIMITCOMPOUNDCV) hData (cLIMITPLATESN, i) = hData (cLIMITPLATESN, i) / dmax (cLIMITPLATESN) hData (cLIMITPLATECV, i) = hData (cLIMITPLATECV, i) / dmax (cLIMITPLATECV)
Next i
End Sub
Private Sub Draw_Hist (Index As Integer, StartVal As Single, EndVal As Single)
Dim i As Integer
Dim drawclr As ColorConstants
Dim temp As Single
Dim totalcount As Long
If Not RangesRetrieved Then
If Not Datalnitialized Then
For i = cLIMITINHIB To cLIMITPLATECV Limitsli, 0) = (MaxValli) * 0.25) Limits!!, 1) = (MaxValli) * 0.5) Limitsli, 2) = (MaxValli) * 0.75) Next i End If
End If
If MinVal (cLIMITPLATESN) > Aplates (pit) . sn (WellStat) Then MinVal (cLIMITPLATESN) = Aplates (pit) .sn (WellStat)
If MaxVal (cLIMITPLATECV) < Aplates (pit) .cv (WellStat) Then If Val (txtMaxDisplay (cLIMITPLATECV) .Text) = 0 Then
CO c MaxVal (cLIMITPLATECV) = Aplates (pit) . cv (WellStat) Else
OD CO MaxVaKcLIMITPLATECV) = Val (txtMaxDisplay (cLIMITPLATECV) .Text) End If End If
If MinVallcLIMITPLATECV) > Aplates (pit) .cv (WellStat) Then MinVaKcLIMITPLATECV) = Aplates (pit) .cv(WellStat) Next pit m
CO For pit = 0 To TtlAssayPlates
I m ' plate SN stats m If MaxVal(cLIMITPLATESN) <> 0 And Aplates (pit) . sn (WellStat) <> cNODATA Then dpoint = (100 * hscale * Aplates (pit) .sn (WellStat) / MaxVal (cLIMITPLATESN) ) + (50 * hscale)
I If dpoint > (150 * hscale) Then dpoint = 150 * hscale
73 c If dpoint < (0) Then dpoint = 0 If dpoint < 150 Then m hData (cLIMITPLATESN, dpoint) = hData (cLIMITPLATESN, dpoint) + 1 ro counts (cLIMITPLATESN) = counts (cLIMITPLATESN) + 1
If hData (cLIMITPLATESN, dpoint) > dmax (cLIMITPLATESN) And dpoint <> 0 And dpoint <> 150 Then dmax (cLIMITPLATESN) = hData (cLIMITPLATESN, dpoint, End If End If End If
' plate CV stats
If MaxVaKcLIMITPLATECV, <> 0 And Aplates (pit, .cv(WellStat) <> cNODATA Then dpoint = (100 * hscale * Aplates (pit, . evlWellStat, / MaxVal(cLIMITPLATECV) ) + (50 * hscale) If dpoint < 150 Then hData (cLIMITPLATECV, dpoint) = hData (cLIMITPLATECV, dpoint) + 1 counts (cLIMITPLATECV) = counts (cLIMITPLATECV) + 1
If hData (cLIMITPLATECV, dpoint) > dmax (cLIMITPLATECV) And dpoint <> 0 And dpoint <> 150 Then dmax (cLIMITPLATECV) = hData (cLIMITPLATECV, dpoint)
frmLimits - 6
Figure imgf000120_0001
Next pit
' data for the compound CV profile pit = 0
Do While SplateslcSPLATE, pit). PlatelD <> ." "
For rw = 0 To 7
For cl = 0 To 11
If VailtxtMaxDisplay (cLIMITCOMPOUNDCV) .Text) = 0 Then
If MaxVaKcLIMITCOMPOUNDCV) < SplateslcSPLATE, pit) .assay (0) .Welllrw, cl) .cv(WellStat) Then
MaxVal lcLIMITCOMPOUNDCV) = Splates (cSPLATE, pit) .assay(0) .Well (rw, cl) .cv(WellStat)
End If
ta" & " : " & SplateslcSPLATE, 0, . PlatelD ata arrays (hscale * 150, o 4 , pit, = 0
0.001 -0.001 0
Figure imgf000120_0002
MaxVaKcLIMITINHIB) = 100 MinVaKcLIMITINHIB) = -50 For pit = 0 To TtlAssayPlates
'data for the inhibition profile
For rw = 0 To 7
F .o.r. cCll == 0U TToO 1 ±1±
If (Aplateslplt) .WelKrw, clJ.Type = "D") Or (Aplates (pit) .Welllrw, clJ.Type <> ActCtl (cHIGH) And Aplates pit) .Well (rw, clJ.Type <> ActCtl (cLOW) And _
Aplateslplt) .WelKrw, cl) .Inhib(WellStat) <> cNODATA) Then If ViewStim Then dpoint = (Aplateslplt) .WelKrw, cl) .Stim(WellStat) * hscale) + (50 * hscale)
Else dpoint = (Aplateslplt) .WelKrw, cl) .Inhib(WellStat) * hscale) + (50 * hscale)
End If
If dpoint > (150 * hscale) Then dpoint = 150 * hscale
If dpoint < (0) Then dpoint = 0 hData (cLIMITINHIB, dpoint) = hData (cLIMITINHIB, dpoint) + 1 counts (cLIMITINHIB) = counts (cLIMITINHIB) + 1
If hData (cLIMITINHIB, dpoint) > dmax (cLIMITINHIB) And dpoint <> 0 And dpoint <> 150 Then dmax (cLIMITINHIB) = hData (cLIMITINHIB, dpoint)
End If
End If
Next cl
Next rw
CO 'data for plate SN and plate CV
C If MaxVal (cLIMITPLATESN) < Aplates Iplt, .sn (WellStat) Then
03 If Val (txtMaxDisplay(cLIMITPLATESN) .Text) = 0 Then
Jϋj MaxVaKcLIMITPLATESN) = Aplates (pit) . sn (WellStat)
"""■ Else
C MaxVaKcLIMITPLATESN, = Val ( xtMaxDisplay(cLIMITPLATESN) .Text)
H End If m
Φ i Private Sub picHist_MouseDown(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
-JL \-> Dim dist As Single m (^ Dim i As Integer ' ro i Debug. Print Index & " " & X & " , " & Y
^2 MouseDown = True
JJ dist = 10
C li itchoice = cNODATA m For i = 0 To 2
If Abs(X - (Limitsdndex, i) * hscale * 100 / MaxVal (Index) ) ) < dist Then |) limitchoice = i
—' dist = Abs(X - (Limitsdndex, i, * hscale * 100 / MaxVal (Index) , )
LimitStartVal = X Debug. Print dist End If Next i
End Sub
Private Sub picHist_Paint (Index As Integer)
Debug.Print "picHist_Paint ( ) " & " : " & SplateslcSPLATE, 0). PlatelD icHist(Iπdex) .Cls picHistdndex) .ScaleHeight = 1.4 picHistdndex) .ScaleWidth = (hscale * 175) picHistdndex) .ScaleLeft = hscale * -65
Figure imgf000121_0001
picHistdndex, .ScaleTop = -0.1 Call Draw_His (Index, -50 * hscale, 100 * hscale) Debug. Print picHis dndex) .Top
End Sub
Private Sub Get_Data()
Dim i As Integer
Dim pit As Integer
Dim rw As Integer
Dim cl As Integer
Dim cmp As Integer
Dim assay As Integer
Dim dpoint As Long frmLimits - 4 End Sub
Private Sub optWellStat_Click(Index As Integer,
WellStat = Index
Call Get_Data
Call picHist_Paint (cLIMITINHIB)
Call picHist_Paint (cLIMITCOMPOUNDCV)
CO c Call picHist_Paint (cLIMITPLATESN) g Call picHist_Paint (cLIMITPLATECV)
CO En Sub
—I Private Sub picHist_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
C Dim StartVal As Single τi Dim EndVal As Single
CO If MouseDown And (limitchoice <> cNODATA) Then _ Limitsdndex, limitchoice) = (X * MaxValdndex) ) / (hscale * 100) m ' If (Limits ndex, limitchoice, < LimitStartVal) Then m Jo StartVal = X - 2
9 EndVal = LimitStartVal + 2
3 Else C StartVal = LimitStartVal - 2
I- EndVal = X + 2
171 End If
Jj* StartVal = -50 * hscale
-— EndVal = 100 * hscale picHist ndex) .Line (LimitStartVal, 1.05)-(LimitStartVal, -0.03), vbWhite, BF
Call Draw_Hist (Index, StartVal, EndVal) Call Draw_Hist dndex, -50 * hscale, 100 * hscale) LimitStartVal = X End If End sub Private Sub pιcHist_MouseUp llndex As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim i As Integer
If MouseDpwn And (limitchoice <> cNODATA) Then
Limitsdndex, limitchoice) = X * MaxValdndex) / (hscale * 100)
If limitchoice <> 0 Then
If Limitsdndex, limitchoice) < Limitsdndex, limitchoice - 1) Then Limits ndex, limitchoice - 1) = Limits (In dex, limitchoice, - MaxValdndex) / 100
End If
If limitchoice <> 2 Then ,. . -. . ,. , . .......
If Limitsdndex. limitchoice) > Limitsdndex, limitchoice + 1) Then Limitsdndex, limitchoice + 1) = Limits (In dex, limitchoice) + MaxValdndex) / 100
End If picHist ndex) .Cls
Call Draw_Hist (Index, -50 * hscale, 100 * hscale) MouseDown = False End If
End Sub
'Calc New Sta s pbrData.Visible = True
On Error GoTo finished
Φ pbrData.Max = TtlAssayPlates
C For aplt = 0 To TtlAssayPlates
OD Call CalcAStats (aplt)
CO pbrData.value = aplt
- Next
H f I If ControlSource = cASSAYDATA Then m . ro ' sum *H datawells φ t-1 TtlData (cSTATGOOD) = 0
I ' TtlData (cSTATALL) = 0 m For aplt = 0 To TtlAssayPlates ] For Stt = CSTATALL To cSTATGOOD
^2 TtlData (stt) = Aplates (aplt) .AvgData (stt) + TtlData(stt)
JJ Ne>t stt
C Next m ro TtlData (cSTATGOOD) = TtlData (cSTATGOOD) / (TtlAssayPlates + 1)
3) TtlData(cSTATALL) = TtlData (cSTATALL) / (TtlAssayPlates + 1)
' recalc ALL stats
For aplt = 0 To TtlAssayPlates
Call CalcAStats_II(aplt) Next
End If spit = 0
While SplateslcSPLATE, spit) .PlatelD <> ""
CalcSPlateStat (spit) spit = spit + 1 pbrData.value = spit + 1
Wend
pbrData.Visible = False
Call Get_Data
Call picHist_Paint (cLIMITINHIB)
Call picHist_Paint (cLIMITCOMPOUNDCV)
Call picHist_Paint (cLIMITPLATESN) Call picHist_Paint (cLIMITPLATECV)
Exit Sub finished: pbrData. isible = False
Call SizeHist (cLIMITINHIB) Call SizeHist (cLIMITCOMPOUNDCV) Call SizeHist (cLIMITPLATESN)
CO Call SizeHist (cLIMITPLATECV)
C End If ' form minimized
OD End Sub
CO
- ! Private Sub menuFileExit_Click()
"d I-H Call End_Program
Zi ^ End Sub m i frmLimits - 3 Private Sub MenuFilePrint_Click() On Error GoTo theend
^0 cmdPrint.CancelError = True
C cmdPrint.ShowPrinter
I- cmdPrint. Flags = vbPRPQHigh Or vbPRCMColor Or vbPRPSLetter
171 Call printhist(O)
£5 Call printhistd)
-— Call printhist(2)
Call printhist(3) Printer. EndDoc theend:
1 frmLimits. PrintFor
End Sub
Private Sub mnuShowSelected_Click( ) frmSelectedPlates. Show
End Sub
Private Sub optControls_Clic (Index As Integer)
Dim aplt As Integer
Dim spit As Integer
Dim stt As Integer
Figure imgf000125_0001
Private Sub Form_Resize()
Debug. Print *Form_Resize() " & * : " & SplateslcSPLATE, 0). PlatelD fraWellStat.Left = frmLimits.Width - 2000 fraWellStat.Top = 0 fraControls. Left = raWellStat.Left raControls. Top = fraWellStat .Height + 200 btnSaveRanges.Top = fraControls.Top + ( raControls.Height + 100) btnSaveRanges.Left = fraWellStat.Lef If frmLimits.WindowState <> vbMinimized Then
If frmLimi s.Width < 6000 Then frmLimits.Width = 6000 hscale = IntlpicHis (0) .Width / 2500) hscale = 1
ReDim hData (4. hscale * 150)
Call Get_Data
Private Sub btnMaxDisplay_Click (Index As Integer) btnMaxDisplay (Index) .Visible = False φ End Sub
C CD Private Sub btnOnt_Click()
CΛ Dim aplt As Long Dim fn As Integer Dim fname As String
—I ^ Dim rw As Integer m I Dim cl As Integer
Im On Error GoTo theend
_| cdlSave.ShowSave
.—. fname = cdlΞave. ilename
73 fn = FreeFile ()
£ Open fname For Output As fn rji Print #fn, "Compound" & Chr$(9) & _
M "Raw" & Chr$(9) & _ σ> "Inhib" Chr$(9) & _
"■"' "Type" & Chr$(9) & _
"Good/Bad" & Chr$(9) si _ "Assay Plate" & Chr$(9) & _ Row" & Chr$(9) & _ "Col" & Chr$(9) & _
"Source Plate"
For aplt = 0 To TtlAssayPlates
For rw = 0 To 7
For cl = 0 To 11
Print #fn, Aplates (aplt) .Well (rw, cl). ompound & Chr$(9) & _
Aplates (aplt) .WelKrw, cD.Raw & ChrS (9) £. _
Aplates (aplt) .WelKrw, cl) .Inhib (cSTATGOOD) & Chr$(9) &
Aplates (aplt) .WelKrw, cll.Type & Chr$(9) 6 _
Aplates (aplt) .WelKrw, cl) .Good & Chr$(9) &
f rmLimi ts - 2
Aplates (aplt) . PlatelD(cAPLATE) & ChrSO) & _
ChrSlrw + Asc ("A")) & ChrSO) - cl + 1 I ChrSO) -. _
Aplates (aplt) .PlatelD(cSPLATE)
Next cl
Next rw
Next aplt Close fn Exit Sub theend: Close fn
Debug. Print MsgBo ("Leaving", vbOKOnly) End Sub frmLimits - 1 φ Copyright 1999 Tropix, Inc.
C Option Explicit
OD J Dim hscale As Integer
-j Dim hData () As Single Dim Clr(4, 3) As ColorConstants
H Dim divlines(4, 3) As Single m Dim percents(4, 3) As Single
CO Dim counts (4) As Long jE Dim DisplayStat As Integer
Ej Dim dmax (4) As Single
—I Dim MaxVal (4) As Single
—> Dim MinVal (4) As Single
^1 Dim MouseDown As Boolean
£ Dim limitchoice As Integer m I Dim LimitStartVal As Single io t~i Dim Datalnitialized AS. Boolean σ -> h
I Private Sub SizeHis (Hist As Integer)
Dim formVisHeight As Integer Dim formViswidth As Integer Debug. Print -SizeHist O " & " : " £. Splates lcSPLATE, 0) . PlatelD formVisHeight = frmLimits . Height - 700 formViswidth = frmLimits . Width - 2100
' Frame Dimensions / placement fraLimit (Hist) .Width = formViswidth / 2 fraLimit (Hist) . Height = formVisHeight / 2 fraLimit (Hist) .Top = Int ( (Hist / 2 ) ) * ( formVisHeight / 2 ) fraLimit (Hist) . Left = (Hist Mod 2 ) * ( formViswidth / 2 )
' picHist placement and dimensions picHist (Hist) .Top = 200 picHist(Hist) .Left = 100 picHist (JJist) .Height = fraLimit (Hist) .Height - (500 + txtVal (0) .Height) picHist (Hist) .Width = raLimit (Hist) .Width - 200
' button placement txtVal (Hist * 3).Top = picHist (Hist) .Height + 225 txtVaKHist * 3 + 1) .Top = picHist (Hist) .Height + 225 txtVaKHist * 3 + 2). op = picHist (Hist) .Height + 225 lblPercent (Hist * 3).Top = txtVaKHist * 3).Top + txtVaKHist * 3).Height + 20 lblPercent (Hist * 3 + D.Top = txtVaKHist * 3) .Top + (txtVaKHist * 3 + 1) .Height + 20) lblPercent (Hist * 3 + 2) .Top = txtVaKHist * 3) .Top + (txtVaKHist * 3 + 2) .Height + 20) txtMaxDisplay(Hist) .Top = picHist (Hist) -Height + 225
CO c txtMaxDisplay(Hist) .Left = picHist (Hist) .Left + picHist(Hist) .Width - btnMaxDisplay (Hist) .Width fjj btnMaxDisplay (Hist) .Top = picHist(Hist) .Height + 225
CO btnMaxDisplay (Hist) .Left = picHist(Hist) .Left + picHist (Hist) .Width - btnMaxDisplay (Hist) .Width
H End Sub Private Sub MenuEditSelectAll_Click()
—I rtfCompound's. SetFocus m I rt Compounds. SelStart = 0
CO |^ rtfCompounds. SelLength = Len(rtfCo pounds.Text)
I cr> End Sub m _l ' Private Sub MenuFileClose_Click() —. Me.hide
73 End Sub m Private Sub MenuFilePrint_Click() l Dim opt As Integer
0> On Error GoTo theend crodPrint.CancelError = True c dPrint.ShowPrinter Printer. rint rtfCompounds.Text Printer.EndDoc theend: End Sub
Private Sub MenuFileSave_Clic l)
Dim fl As Integer Dim fname As String cmdFileSave.CancelError = True
On Error GoTo theend cmdFileSave.ShowSave fname = cmdFileSave. ilename rtfCompounds. SaveFile fname, rtfText
Figure imgf000128_0001
theend:
End Sub
frmFreeText - 1
Private Sub btnCancel_Click ( ) txtComments.Text = "" CommentsText = "CANCEL"
Unload Me
End Sub
Private Sub btnClear_Click() txtComments.Text = "" End Sub
Private Sub btnPrint_Click ( )
CommentsText = txtComments.Text
Unload Me End Sub
CO Private Sub Form_Load()
CO txtComments.Text = CommentsText
CO End Sub
-J dplt = 0
""j Do While SplateslcSPLATE, dplt) . PlatelD <> SelCompounds (cmp) .SPlatelD
^ dplt = dplt + 1 m , Loop
CO t, m ' m If SplateslcSPLATE, dplt) .assa (0) .Well (rw, cl) .cv (WellStat) <> cNODATA Then rt Compounds. SelText = "Avg Inhib: " & ChrSO) & Format(Splates (cSPLATE, dplt) .assay(0) .Well (rw, cl) . Inhib(WellSt
—. at), "###.00") & ChrSO) & "%Range: " S. ChrSO) & Format (Splates (cSPLATE, dplt) .assay (0) .Well (rw, cl) .cv(WellStat) , •###.
Λ 00") & "%" £. _ p ChrSO) & "As.says: * £. SplateslcSPLATE, dplt) .assay (0) .WelKrw, cl) .count (WellStat) & ChrS (10) m Else i rtfCompounds. SelText = "Avg Inhib: " & ChrSO) & Forma (Splates (cSPLATE, dplt) .assay (0) .WelKrw, cl) .Inhib(WellSt σ> at), "###.00") & ChrSO) & "%Range: " & ChrSO) & "Not Calculated" Jt _
ChrSO) & "Assays: " & SplateslcSPLATE, dplt) .assay (0) .WelKrw, cl) .count (WellStat) & Chr$(10)
End If frmCompoundList - 4
Inhib"
Figure imgf000129_0001
cLOW) i ChrS (9) rtfCompounds. SelText = Forma (Aplates (aplt) .WelKrw, cl) .Inhib(WellStat) , "###.00") & ChrSO) If Aplates (aplt) .WelKrw, cl) .Good Then rt Compounds.SelText = "Good" Else rtfCompounds. SelText = "Bad" End If rtfCompounds. SelText = ChrS (10) End If aplt = aplt + 1 Loop rtfCompounds. SelText = ChrS (10)
Next cmp
CO End Sub c 3 Private Sub MenuEditCopy_Click() CO rtfCompounds . SetFocus
Clipboard. SetText rtfCompounds. SelText, vbCFText End Sub m For cmp = 0 To CompoundsSelected - 1
CO rw = SelCompounds (cmp) .row
I cl = SelCompounds (cmp) .col m m
H CLine = ""
CLine = SelCompounds (cmp) .Name 6 ChrSO) & SelCompounds (cmp) .SPlatelD & Chr$(9) & _
1 Chr$(rw + Asc ("A")) & cl + 1
C N>
I- OO m 1 dplt = 0 ro Do While SplateslcSPLATE, dplt) .PlatelD <> SelCompounds (cmp) .SPlatelD σ> dplt = dplt + 1 Loop
CLine = CLine & ChrSO) & Format (Splates (cSPLATE, dplt) .assay (0) .Well (rw, cl) .Inhib(WellStat) , "##0.000") CLine = CLine & ChrSO) & Format (Splates (cSPLATE, dplt) .assay(O) .WelKrw, cl) .cv(WellStat) , "##0.000") CLine = CLine & ChrSO) 6 SplateslcSPLATE, dplt) .assay (0) .WelKrw, cl) .count (WellStat) aplt = 0
FirstAPlate = True
Do While Aplates (aplt) .PlatelD(cSPLATE) If Aplates (aplt) . PlateΙD(cSPLATE) = SelCompounds (cmp) .SPlatelD Then If Not FirstAPlate Then
CLine = ChrSO) & ChrSO) &. ChrSO) & ChrSO) & ChrSO)
End If
FirstAPlate = False
CLine = CLine & ChrSO) S, ChrSO) & SelCompounds (cmp) .Name & ChrSO) & _
Aplates(aplt) .PlatelD (cAPLATE) k ChrSO) £, SelCompounds (cmp) .SPlatelD
CLine = CLine & ChrSO) £ Aplates (aplt) .WelKrw, cD.Raw
CLine = CLine C. ChrSO) & Aplates (aplt) .Control (WellStat, cHIGH)
CLine = CLine £. ChrSO) & Aplates (aplt) .Control (WellStat, cLOW)
CLine = CLine & ChrSO) & Forma (Aplates (aplt) .Well (rw, cl) . Inhib(WellStat) , "##0 00") If Aplates(aplt) .WelKrw, cl) .Good Then
CLine = CLine & ChrSO) & "-" Else
CLine = CLine & ChrSO) £. "B" End If rtfCompounds. Selstart = Len (rtfCompounds. Text) rtfCompounds. SelText = ChrS (10) & CLine End If £- aplt = aplt + 1 Loop fjj Next cmp
CO End Sub
H
H Private Sub MenuDisplayReport_Click()
5 Dim cmp, dplt, aplt, rw, cl As Integer
Ul rtfCompounds.Text = "" For cmp = 0 To CompoundsSelected - 1 rw = SelCompounds (cmp) .row cl = SelCompounds (cmp) .col rtfCompounds. SelText = "Compound: " & ChrSO) & SelCompounds (cmp) .Name & ChrS(lO) rtfCompounds. SelText = "SPlate: " & ChrSO) & SelCompounds (cmp) .SPlatelD & ChrSO) & "Well: (" & ChrS (SelCompound s (cmp). row + Asc ("A")) £. " , " & SelCompounds (cmp*) .col + 1 & *)* & ChrS (10)
Figure imgf000131_0001
IO Private Sub Form_Resize ( ) σ>
If Me.WindowState <> vbMinimized Then flxCompound. ColWidth (0) = 1500 flxCompound.ColWidth(l) = 1500 flxCompound.ColWidth(2) = 500 flxCompound.ColWidth(3) = 500 flxCompound.Width = 4400 flxCompound.TextMatrixlO, 0) = "Compound flxCo pound.TextMatri (0 , 1) = "Plate ID flxCompoun .TextMatrix (0 , 2) = "Row" flxCompoun .TextMatrix (0 , 3) = "Col"
If frmCompoundList.Width < 4500 Then frmCompoundList. idth = 4500
flxCompound. Left = 0 flxCompound. op = 0 flxCompound.Height = (frmCompoundList.Height - 700) / 2 rt Compounds.Left = 0 rtfCompounds.Width = frmCompoundList. idth - 100 rtfCompounds .Height = flxCompound.Height rtfCompounds.Top = flxCompound.Height btnClear.Le t = flxCompound.Width + 100 btnClear.Top = flxCompound.Top btnDuplicates.Top = btnClear.Top + btnClear. Height + 200 btnDuplicates.Le t = btnClear.Left btnTecan.Top = btnDuplicates.Top + btnDuplicates.Height + 200 btnTecan.Left = btnDuplicates .Left
End If
Sub MenuDisplayEvaluation_Click ( ) , dplt, aplt, rw, cl As Integer ne As String stAPlate As Boolean
Figure imgf000132_0001
co i j^ rmCompoundList m m i rtfCompounds.Text =
73 If WellStat = cSTATGOOD Then
C I rtfCompounds.Text = "For m- GOOD Assays only" Else 1^" ' rtfCompounds.Text = "For ALL (GOOD and BAD) Assays" σ> End If rtfCompounds.Text = "Compound" & ChrS (9) & "Plate ID" & ChrSO) k "Well" S. ChrSO) & _ "Avg. %Inhib" Σ. ChrS ) & "%Range" & ChrSO) & "Assays" £. ChrS ) & ChrS (9) & _ "Compound" & ChrSO) & "APlate ID" & ChrSO) & "Splate ID" £< ChrSO) & Raw Value" & ChrSO) & "High Control: & ChrSO) & " Low Control" & ChrSO) & _ "%Inhib" {. ChrSO) & "Good/Bad" frmCompoundList - 2 rw = Asc(rowletter) - Asc ("A") cl = Val (column_n--tnber) - 1
SelCompounds (CompoundsSelected) .Name = Aplates (pit) .Well (rw, cl).Compound
SelCompounds (CompoundsSelected) .SPlatelD = Aplates (pit) .PlatelD (cSPLATE)
SelCompounds (CompoundsSelected) .row = rw
SelCompounds (CompoundsSelected) .col = cl CompoundsSelected = CompoundsSelected + 1
Wend
End Sub
Private Sub flxCompound_KeyUp (KeyCode As Integer, Shift As Integer) Dim rw, cl As Integer
If KeyCode = 46 Then 'delete has been pressed
For rw = flxCompound. ow To flxCompound. Rows - 2 For cl = 0 To 3 flxCompound.TextMatri (rw, cl) = flxCompound. TextMatrix (rw 1, cl) Next cl
SelCompounds (rw 1) = SelCompounds (rw) Next rw If rw > 0 Then
CO SelCompounds (rw - 1) = SelCompounds (rw) c CompoundsSelected = CompoundsSelected -
CO End If CO End If
Call Form_Paint End Sub m I
I— ' Private Sub Form_Load ( ) co > •rtfCompounds.Text = ""
I End Sub m I m
H Private Sub Fdrm_Paint()
Dim cmp As Integer flxCompound.Rows = CompoundsSelected + 1 C r For cmp = 0 To CompoundsSelected - 1 m flxCompound.TextMatrix (cmp + 1, 0) = SelCompounds (cmp) .Name ro flxCompound.TextMatrix (cmp + 1, 1) = SelCompounds (cmp) .SPlatelD n flxCompound.TextMatrix (cmp + 1, 2) = ChrS (SelCompounds (cmp) .row + Asc ("A")) flxCompound.TextMatri (cmp + 1, 3) = SelCompounds (cmp) .col + 1
Next cmp
End Sub cmdFileSave.CancelError = True On Error GoTo theend cmdFileSave . ShowSave fname = cmdFileSave. filename fl = FreeFile
Open fname For Output As fl
For i = 1 To flxCompound. ows spit = 0
While Splates lcSPLATE, spit) . PlatelD <> flxCompound .TextMatrix f i , 1 ) spit = spit + 1
Wend
Print #fl. Splates (cMPLATE, spit) . PlatelD S. "," & flxCompound.TeκtMatrixfi, 2) & flxCompound.TextMatrixU, 3)
Next i
Close fl
Exit Sub theend: Close fl End Sub
Private Sub Commandl_Click() Dim platename As String Dim rowletter As String Dim column_number As Integer Dim pit As Long Dim rw As Integer
CO c Dim cl As Integer
C Dim fl As Integer
ΦO Dim fname As String
—1 cmdOpen . ShowOpen
C fname = cmdOpen. ilename
"""] fl = FreeFile
Open fname For Input As fl
If*η ' While Not EOF(fl) rH to Input #fl, platename, rowletter, column_number
H I pit = 0 While Aplateslplt) .PlatelD (cSPLATE) 0 platename And Aplates (pit) .PlatelD(cAPLATE) 0
|— pit = pit + 1 m Wend ro frmAPlateText - 4
flxPlate. Refresh End If ' not minimzed
End Sub
frmCompoundList - 1 • Copyright 1999 Tropix, Inc.
Option Explicit
Figure imgf000134_0001
Private Sub btnClear_Click()
Dim i As Long
For i = 0 To CompoundsSelected - 1
SelCompounds (i) .Name = ""
SelCompounds (i) .SPlatelD = ""
SelCompounds (i) .row = 0
SelCompounds (i) .col = 0 flxCompound. row = 1 Call flxCompound_KeyUp(46, 0)
Next i
CompoundsSelected = 0 End Sub
Private Sub btnDuplicates_Click ( )
Dim i As Long CO Dim j As Long
C i = 1
£~ While flxCompound. ows > i
H j = i + 1
"""■ While flxCompound. Rows > j
C If flxCompound.TextMatrix (i, 0) = lxCompound. extMatrixfj , 0) Then
H I flxCompound. row = j
171 i-1 Call flxCompound_KeyUp(46, 0) to & 3 = 3 - 1 m S I End If m 3 = j. + ,i
H Wend i = i + 1
73
C Wend End Sub m ro Private Sub btnTecan_Click()
32 Dim fl As Integer
Dim fname As String
Dim i As Integer
Dim rw As Integer
Dim cl As Integer
Dim spit As Integer
End If
End If ' cl > 11
End If ' flxPlate, .Row = 0 And flxPlate . Col = 0
End If ' 1 (row <=8)
Else button = 2
Figure imgf000135_0001
End Sub
Private Sub Form_Load() Dim i As Integet
fillmode = RAWVALS frmAPlateText. Caption = "Plate: " & Aplates (CurrAPlate) .PlatelD(cAPLATE) flxPlate.Top = 0 flxPlate.Left = 0 flxPlate.Height = frmAPlateText.Height - (200 + Commandl .Height) flxPlate.Width = frmAPlateText.Width - 200 flxPlate.Cols = 15 flxPlate. ows = 15 flxPlate. ColWidth (0) = 400
Commandl.Visible = False
Commandl.Top = flxPlate. Height - (Commandl .Height + 100)
For i = 1 To 14 to c flxPlate.ColWidth(i) = 650
CO Next i CO flxPlate.ColWidth (13) = 300 FillGrid (CurrAPlate) End Sub m Private Sub Form_Resize ( )
Dim Wsum, Hsum As Integer to , f*η £J If Me.WindowState <> vbMinimized Then rπ J Wsum = 0
H I Hsum = 0
73 For i = 0 To flxPlate.Cols - 1 c Wsum = Wsum + flxPlate.ColWidth(i)
Next i m For i = 0 To flxPlate. ows - 1 * Hsum = Hsum + lxPlate. RowHeight(i) 2 Next i
If frmAPlateText.Width > Wsum + 700 Then frmAPlateText.Width = Wsum + 700
If frmAPlateText.Height > Hsum + (400 + Commandl .Height) Then frmAPlateText.Height = Hsum + 500 flxPlate. Height = frmAPlateText. Height - (400 + Commandl.Height) flxPlate. idth = frmAPlateText.Width - 200
Commandl.Top = lxPlate.Height
' toggle plate status
Aplates (CurrAPlate).Good = Not Aplates (CurrAPlate) .Good
1 update database
If Aplates (CurrAPlate) .Good Then flag_val = " "
Else flag_val = "T" End If
' Insert into Tropix Update Whole Plate table
UpdateSQL = "insert into TROPIX_UPDATE_WHOLE_APLATE values ( " & Aplates (CurrAPlate) . PlateCode (cAPLATE) & " , " & flag_val & " ) "
Set rsUpdateWholePlate = DB.OpenRecordset (UpdateSQL, dbOpenSnapshot) rsUpdateWholePlate.Close frmAPlateText - 3
Aplates (CurrAPlate) .Good = Not Aplates (CurrAPlate) .Good For rw = 0 To 7
For cl = 0 To 11
Aplates (CurrAPlate) .WelKrw, cD.Good = Aplates (CurrAPlate) .Good Aplates (CurrAPlate) .WelKrw, cl) .Modified = True Next cl Next rw
FillGrid (CurrAPlate) rmAPlateText. Show c to Elself rw > -1 Then
CO If cl > 11 Or cl = -1 Then CO For cl = 0 To 11 I Aplates (CurrAPlate) .WelKrw, cl) .Good = Not Aplates (CurrAPlate) .WelKrw, cD.Good J Aplates (CurrAPlate) .Well (rw, cl) .Modified = True
<-" Next m frmAPlateText.hide
CO FillGrid (CurrAPlate)
ID frmAPlateText . Show rπ Else
I Aplates (CurrAPlate) .Well ( rw, cD . Good = Not Aplates (CurrAPlate) . Well (rw, cD . Good
jg Aplates (CurrAPlate) . WelKrw, cl ) . Modi fied = True crm If Aplates (CurrAPlate) .WelKrw, cD.Good Then flxPlate.CellBackColor = vbWhite ro Else flxPlate. CellBackColor = vbRed End If If fillmode = RAWVALS Then . flxPlate.TextMatrix (flxPlate. row, flxPlate. col) = Aplates (CurrAPlate) .WelKrw, cl).Raw Else flxPlate.TextMatrix (flxPlate. row, flxPlate. col) = Format (Aplates (CurrAPlate) .WelKrw, cl).Inhib(We
HStat), *##0.00")
For rw = 0 To 7
For cl = 0 To 11
If Aplates (CurrAPlate) .Welllrw, cl).Modified Then
BF = " " ' "
I f Not Aplates (CurrAPlate) . Well l rw, cD . Good Then
BF = " ' T ' "
End If
If cl < 9 Then clt = "0" & cl + 1
Else clt = cl +
End If strSQL = " 'iinnsseerrt into TROPIX_UPDATE_BOGUS_FLAG values!" & _ Aplates (CurrAPlate) .PlateCode (cAPLATE) & ",'" & _ ChrS (Asc ("A") + rw) & " ','" & clt & "'," & BF & ")" Debug. Print strSQL
Aplates (CurrAPlate) .Well (rw, cl) .Modified = False Set rsTropixϋpdate = DB.OpenRecordse (strSQL, dbOpenSnapshot) rsTropixUpdate.Close End If Next cl
CO c Next rw
CO Commandl.Visible = False φ Call CalcAStats (CurrAPlate) spit = 0
While SplateslcSPLATE, spit) . PlatelD <> Aplates (CurrAPlate) .PlateΙD(cSPLATE) spit = spit + 1 m Wend co SplateslcSPLATE, spit) .StatsStarted = False
-£ Call CalcSPlateStat(splt) m I m i-j 'Update summary Stats
For rw = 0 To 7
-JJ I flxPlate.TextMatrix (rw + 1, 14) = Format (Aplates (CurrAPlate) . RowSN(WellStat, rw) , "###0.0") Next rw
I- flxPlate. TextMatrixdO, 3) = Format (Aplates (CurrAPlate) .ControKWellStat, cLOW) , "#####0.0")
171 flxPlate.TextMatrixO, 3) = Format (Aplates (CurrAPlate) .Control (WellStat, cHIGH) , "#####0.0")
•°, flxPlate.TextMatrixdl, 3) = Format (Aplates (CurrAPlate) . sn (WellStat) , "#####0.00")
-— flxPlate. extMatrixdl, 5) = Format (Aplates (CurrAPlate) . cv (WellStat) , "##0.0")
End Sub
Private Sub flxPlate_MouseUp (Button As Integer, Shift As Integer, X As Single, Y As Single) Dim rw, cl, pit As Integer
If (Button = 1) Then cl = flxPlate.col - 1 rw = flxPlate. row - 1
If flxPlate. row <= 8 Then
Commandl.Visible = True
If flxPlate. row = 0 And flxPlate. col = 0 Then
Commandl.Visible = False rmAPlateText .hide
Next j
If Aplates (plate) .RowS (WellStat, i) = cNODATA Then flxPlate.TextMatrixd + 1, 14) = " "
Else flxPlate.TextMatriκd + 1, 14) = Format (Aplates (plate) .RowSN(WellStat, i) , "###0.0") End If Next i flxPlate. extMatrixO, 1) = "Plate:" flxPlate.TextMatrixO, 2) = "Hgh Cntrl" flxPlate. extMatrixdO, 2) = "Low Cntrl" flxPlate. TextMatrixdl, 2) = "S/N" flxPlate.TextMatrixdl, 4) = "CV"
If Aplates (plate) .Control (WellStat, cLOW) = cNODATA Then flxPlate.TextMatrix (10, 3) = * "
CO Else flxPlate.TextMatrix(10, 3) = Format (Aplates (plate) .ControKWellStat, cLOW) , "#####0.0")
CO End If
CO If Aplates (plate) -ControKWellStat, cHIGH) = cNODATA Then
-.2 flxPlate. extMatrixO, 3) = " "
" Else
_, flxPlate.TextMatrixO, 3) = FormatlAplates (plate) .ControKWellStat, cHIGH) , "#####0.0") m End If
CO If Aplates (plate) .sn (WellStat) = cNODATA Then
I flxPlate.TextMatrix (11, 31 = * m 1 Else m
H <_υ flxPlate. extMatrixdl, 3) = Forma (Aplates (plate) .sn (WellStat) , "#####0.00")
^J End If
( If Aplates (plate) .cv(Wellstat) = cNODATA Then
C flxPlate.TextMatrixdl, S) = " •
I- m Else ro flxPlate.TextMatrixdl, 5) = Format (Aplates (plate) .cv(WellStat) , "##0.0") σ> End If frmAPlateText - 2 End Sub
Private Sub Commandl_Click()
Dim rw As Integer
Dim cl As Integer
Dim pit As Integer
Dim spit As Integer
Dim UpdateSQL As String
Dim InClause As String
Dim BF As String Dim clt As String Dim rsTropixUpdate As Recordset Dim strSQL As string
frmAPlateText - 1
' Copyright 1999 Tropix, Inc. Dim fillmode As Boolean
Public Sub FillGrid (plate As Integer)
Dim i, j As Integer
Dim title As String title = "Assay Plate : " & Aplates (plate) .PlatelDlcAPLATE) If fillmode = RAWVALS Then title = title & " - raw data values" Else title = title & * - %inhibition" End If
If Aplates (plate) .Good Then title = title & ", plate is good" φ Else title = title & ", plate marked as bad"
[TJ End If CO
" frmAPlateText. Caption = title H
^ For i = 1 To 12 πi I flxPlate. extMatrixlO, i) = i
Φ Next i oo flxPlate.TextMatrixO, 14) = "S/N" m ' For i = 0 To 7
[JJ flxPlate.TextMatrixli + 1, 0) = ChrS (Asc ( "A" ) + i)
^2 Next * 73
C flxPlate. row = 0 m flxPlate. col = 0
If Aplates(plate) .Good Then
<°, flxPlate.CellBackColor = vbWhite
-— Else flxPlate.CellBackColor = vbRed End If
For i = 0 To 7
For j = 0 To 11
If fillmode = RAWVALS Then flxPlate.TextMatrixli + 1, j + 1) = Aplates (plate) .WelKi, j).Raw
Else flxPlate.TextMatrixli + 1. j + 1) = Format (Aplates (plate) .WelKi, j ) . Inhib(WellStat) , "##0.00")
End If flxPlate. row = i + 1 flxPlate. col = j + 1
If Aplates (plate) .WelKi, j).Good Then flxPlate. CellBackColor = vbWhite
Else flxPlate.CellBackColor - vbRed
End If
Private Sub mnuOptionsZ_Click()
ShowThird = Not ShowThird
Call Form_Resize End Sub
Private Sub picPlate_MouseUp (Button As Integer, Shift As Integer, X As Single, Y As Single) Dim pit, rw, cl As Integer pit = Int((X) / 4) pit = pit + Int((Y) / 29) * Across
If pit < AplatesSubSelected And pit >= 0 Then
Debug. Print x & " " & y 4. " " & pit
CO c If Button = 1 Then
CO CO Lf CurrAPlate <> -1 Then
Debug. Print X & " " & Y & & pit Plate: & Aplates (Aplateslndex (pit) ) .PlatelD (cAPLATE) (, "(" . t & ")' picPlate.Line (Aplates (CurrAPlate) .PerformLeft 0.02, Aplates (CurrAPlate) .PerformTop + 4) - (Aplates (Cur m late) .PerformLeft - 0.4, Aplates (CurrAPlate) .PerformTop + 20), vbWhite, BF End If co CurrAPlate = Aplateslndex(plt) m frmAPlatePerform.Caption = "Assay Plate View - Plate: " & Aplates (Aplateslnde (pit) ). PlatelDlcAPLATE) j-η (-.. picPlate.Line (Aplates (CurrAPlate) .PerformLeft - 0.05, Aplates (CurrAPlate) .PerformTop + 4) - (Aplates (CurrAPl
W (.PerformLeft - 0.4, Aplates (CurrAPlate) .PerformTop + 20), RGBI200, 100, 100), BF
_ I Unload f mAPlateText
C frmAPlateText . Show Else ' button = 2 in ' Mark Plate as Bad without showing text ro End If 2 End If
End Sub
frmAPlatesToSelect - 1
• Copyright 1999 Tropix, Inc.
Option Explicit
Private Sub Labell_Click ( )
APlatesInARange = Val (txtAPlateCount.Text)
If Val (txtAPlateCount .Text) < 1 Then APlatesInARange = 0
If Val(txtAPlateCount.Text) > AplatesSubSelected Then APlatesInARange = AplatesSubSelected
Figure imgf000141_0001
Unload frmAPlatesToSelect
End Sub
For rw = 0 To 7
If Aplates (Aplateslndex (pit) ) .RowSNIWellStat, rw) <> cNODATA Then If Aplates (Aplateslndex (pit)) .RowSNIWellStat rw) < Limits (cLIMITPLATESN, 0) Then currclr = Clr (cLIMITPLATESN, 0) Elself Aplates (Aplateslndex (pit) ) .RowSNIWellStat rw) < Limits (cLIMITPLATESN, 1) Then currclr = Clr (cLIMITPLATESN, 1) Elself Aplates (Aplateslndex (pit)) .RowSNIWellStat rw) < Limits (cLIMITPLATESN, 2) Then currclr = Clr (cLIMITPLATESN, 2) Else currclr = vbWhite End If Else currclr = RGB(200, 200, 200) End If hDC.FillStyle = vbFSSolid hDC.FillColor = currclr hDC.Line (ex + 2, cy + (rw 3)) -lex + 3, cy + (rw + l) * 3), currclr, BF
CO Next rw c
CO draw outline CO hDC.Line lex, cy)-lcx, cy + 24), vbBlack hDC.Line (ex, cy)-(cx + 3, cy) , vbBlack hDC.Line (cκ + 3, cy)-(cx + 3, cy + 24), vbBlack hDC.Line (ex, cy + 24) -(ex + 3, cy + 24), vbBlack m hDC.Line (ex, cy + 8) -(ex + 2, cy + 8) , vbBlack co hDC.Line (ex, cy + 16) -(ex + 2, cy + 16), vbBlack hDC.Line (ex + 2, cy)-(cx + 2, cy + 24), vbBlack m 4 m O I hDC.CurrentX = 1
73 hDC.CurrentY = hDC.ScaleTop + 2 c hDC.FontName = "Arial" m hDC. ( (hDC. Width / 1800) * (14 / Across)) + 1 ro frmAPlatePerform - 5
If hDC. ontsize > 12 Then hDC. fontsize = 12 If hDC. hDC = picPlate.hDC Or CommentsText = " Then hDC. Print frmAPlatePerform. Caption Else hDC. Print frmAPlatePerform. Caption & *: & CommentsText End If
End Sub
Private Sub MenuEditCopy_Click()
Clipboard. Clear
Clipboard. SetData picPlate. Image, vbCFBitmap End Sub
Private Sub mnuFileExit_Click()
Call End_Program End Sub
frmAPlatePerform
Elself Aplates (Aplateslndex(plt) ) .cv(WellStat) Limits (cLIMITPLATECV, 1) Then currclr = Clr (cLIMITPLATECV, 1) Elself Aplates (Aplateslndex (pit) ) .cv (WellStat) > Limits (cLIMITPLATECV, 0) Then currclr = Clr (cLIMITPLATECV, 0) Else currclr = vbWhite
End If Else currclr = RGB(200, 200, 200) End If hDC.FillStyle = vbFSSolid hDC.FillColor = currclr hDC.Line (ex, cy)-(cx + 2, cy 8), currclr. BF If ShowThird Then ' Currently a constant
If AplateslAplatesIndexlplt) ) .windo (WellStat) <> cNODATA Then
CO If Aplates (Aplateslndex (pit) ) .window(WellStat) >= OkayZ Then c currclr = vbWhite
CO Elself Aplates (Aplateslndex (pit) ) .window (WellStat) >= WorseZ Then CO currclr = RGB (204, 204, 255) Elself Aplates (Aplateslndex (pit) ) ..window (WellStat) >= BadZ Then currclr = RGB(130, 130, 255) Elself Aplates (Aplateslnde (pit) ) .window(WellStat) < BadZ Then m currclr = RGB(0, 0, 255) co I End If
I—• m 4^ Else currclr = RGB(200, 200, 200)
"! i
End If
73 Debug. Print Aplates(plt) .window(WellStat)
C hDC.FillStyle = vbFSSolid jn hDC.FillColor = currclr ro hDC.Line (ex, cy + 8) -(ex + 2, cy + 16), currclr, BF 2 End If
If
Figure imgf000143_0001
Else currclr = RGB(200, 200, 200)
End If hDC.FillStyle = vbFSSolid hDC.FillColor = currclr hDC.Line (ex, cy + 16) -(ex + 2, cy + 24), currclr, BF
Private Sub Form_Resize ( ) ' was Form_Paint
Dim pit As Integer
If Me.WindowState <> vbMinimized Then picPlate. Width = frmAPlatePerform.Width - 100 picPlate. Height = frmAPlatePerform. Height - 400 picPlate. ScaleWidth = (Across * 3) + (1 * Across) + 6 picPlate. ScaleHeight = (Down * 24) + (5 * Down) + 20 picPlate. ScaleTop = -10 picPlate.Cls
For pit = 0 To AplatesSubSelected - 1
Call draw_plate(plt, picPlate)
Next
Call DrawKey (picPlate)
CO End If
JΞ End Sub
CO
_l Private Sub draw_plate (ByVal pit As Integer, ByVal hDC As Control)
"T"j Dim sum As Single
C Dim currclr As ColorConstants
Dim rw As Integer m c too hDC.FillStyle = vbSolid mm -t hDC.FontName = "Arial"
^ hDC. fontsize = In (( (hDC.Height / hDC. ScaleHeight) / 20) * 3) + 1 hDC.CurrentX = Aplates (Aplateslndex (pit) ) .PerformLeft
73
C hDC.CurrentY = Aplates (Aplateslndex (pit) ). PerformTop - 4
If Aplates (Aplateslndex (pit) ) .Good Then jn hDC. ForeColor = vbBlack ro Else
32 hDC.ForeColor = vbRed
End If hDC. Print Aplates (Aplateslndex (pit) ) . PlatelD (ALabelType) ex = Aplates (Aplateslndex (pit) ) .PerformLeft cy = Aplates (Aplateslnde (pit) ) .PerformTop
If Aplates (Aplateslndex (pit)) .cv(WellStat) <> cNODATA Then
If Aplates (Aplateslndex (pit) ) .cv(WellStat) > Limits (cLIMITPLATECV, 2) Then currclr = Clr (cLIMITPLATECV, 2)
frmAPlatePerform - 3
End Sub
Private Sub Form_Load ( )
Dim pit As Integer
ShowThird = True pit = 0
Select Case AplatesSubSelected Case 1
Across = 1 jn Down = 1 ODown = 1
(JJ Case 2
CO Across = 1
" Down = 2
""j ODown = 2
! Case 3 m Across = 2 φ I Down = 2
I ODown = 2 m o Case Else
*_ \ ' Across = Int (Sqr (AplatesSubSelected) )
, , ODown = Int (AplatesSubSelected / Across)
73 Down = ODown
C If Across * ODown < AplatesSubSelected Then m Down = ODown + 1 ro End If σ> End Select
For pit = 0 To AplatesSubSelected - 1
Aplates (Aplateslndex (pit) ) .PerformTop = (Int(lplt) / (Across)) * 24) + (5 * Int((plt) / (Across))) + 5 Aplates (Aplateslndex (pit) ) .PerformLeft = ((pit Mod (Across)) * 3) + (1 * (pit Mod (Across))) + 1 txtControls. SelText = Aplates (Aplateslndex(plt) ) .PlateΙD(O)
For rw = 0 To 7 txtControls. SelText = ChrSO) & Aplates (Aplateslndex (pit) ) .WelKrw, 0).Raw
Next rw txtControls. SelText = ChrS (13)
Next 'through all APlatesIndex
End Sub
' CV Key hDC. CurrentX = ex cy = cy + 1.75 * Uni sPerCharacter hDC.CurrentY = cy cy = cy + 1.75 * UnitsPerCharacter hDC.CurrentY = cy hDC. Print "CV" hDC.CurrentX = ex' cy = cy + 1.75 * UnitsPerCharacter hDC.CurrentY = cy hDC. Print " 0.0" hDC.CurrentX = ex cy = cy + 1.75 * UnitsPerCharacter hDC.CurrentY = cy hDC. Print " " & Format (Limits (cLIMITPLATECV, 0), "##0.0")
C_O c hDC.FillColor = vbWhite fj hDC.Line (ex, cy - SpaceFactor * 1.2)-(cx + 0.33 * UnitsPerlnch, cy - SpaceFactor * 0.2), vbBlack, B
CO hDC.CurrentX = ex
H cy = cy + 1.75 * UnitsPerCharacter
—I hDC.CurrentY = cy
C hDC. Print " " & Format (Limits (cLIMITPLATECV, 1), "##0.0")
Jj currclr = Clr (cLIMITPLATECV, 0) j« 1 hDC.FillColor = currclr
-jC J. hDC.Line (ex, cy - SpaceFactor * 1.2)-(cx + 0.33 * UnitsPerlnch, cy - SpaceFactor * 0.2), currclr,. BF m J hDC.CurrentX = ex m ' cy = cy + 1.75 * UnitsPerCharacter
' hDC.CurrentY = cy jrj hDC. Print " " & Format (Limits (cLIMITPLATECV, 2), "##0.0")
C currclr = Clr (cLIMITPLATECV, 1) m hDC.FillColor = currclr hDC.Line (ex, cy - SpaceFactor * 1.2)-(cx + 0.33 * UnitsPerlnch, cy - SpaceFactor * 0.2), currclr, BF ro cy = cy + 1.75 * UnitsPerCharacter
— currclr = Clr (cLIMITPLATECV, 2) hDC.FillColor = currclr hDC.Line (ex, cy - SpaceFactor * 1.2)-(cx + 0.33 * UnitsPerlnch, cy - SpaceFactor * 0.2), currclr, BF
hDC.FillStyle = vbTransparent hDC. fontsize = fontsize
Figure imgf000146_0001
frmAPlatePerform - 2 hDC. Print " " & Forma (Limits (cLIMITPLATESN, 2), "##0.0") currclr = Clr(cLIMITPLATESN, 2) hDC.FillColor = currclr hDC.Line (ex, cy - SpaceFactor ' 1.2)-(cx + 0.33 * UnitsPerlnch, cy - SpaceFactor * 0.2), currclr, BF cy = cy + 1.75 * UnitsPerCharacter hDC.FillColor = vbWhite hDC.Line (ex, cy - SpaceFactor ' 1.2)-(cx + 0.33 * UnitsPerlnch, cy - SpaceFactor * 0.2), vbBlack, B hDC.FillStyle = vbTransparent
• Z Key hDC.CurrentX = cy = cy + 1.75 * UnitsPerCharacter hDC.CurrentY = cy cy = cy + 1.75 * UnitsPerCharacter
CO hDC.CurrentY = cy c hDC. Print "Z Factor"
CO hDC.CurrentX = ex CO cy = cy + 1.75 * UnitsPerCharacter hDC.CurrentY = cy hDC. Print " 1.0" hDC. CurrentX = ex m cy = cy + 1.75 * UnitsPerCharacter co + hDC.CurrentY = cy m hDC. Print " " & Forma (OkayZ, " ##0.0") m hDC.FillColor = vbWhite hDC.Line (ex, cy - SpaceFactor * 1.2)-(cx + 0.33 * UnitsPerlnch, cy - SpaceFactor * 0.2), vbBlack, B hDC. CurrentX = ex
73 cy = cy + 1.75 * UnitsPerCharacter
C hDC.CurrentY = cy m hDC. Print " " & Format (WorseZ, ##0.0") ro currclr = RGB(204, 204, 255)
CO hDC.FillColor = currclr hDC.Line (ex, cy - SpaceFactor 1.2)-(cx + 0.33 * UnitsPerlnch, cy - SpaceFactor * 0.2), currclr, BF hDC.CurrentX = ex cy = cy + 1.75 * UnitsPerCharacter hDC.CurrentY = cy hDC. Print " " & FormatlBadZ, "##0.0") currclr = RGB(130, 130, 255) hDC.FillColor = currclr hDC.Line (ex, cy - SpaceFactor * 1.2)-(cx + 0.33 * UnitsPerlnch. cy - SpaceFactor * 0.2), currclr, BF cy = cy + 1.75 * UnitsPerCharacter hDC.CurrentY = cy currclr = RGB(0, 0, 255) hDC.FillColor = currclr hDC.Line (ex, cy - SpaceFactor * 1.2)-(cx + 0.33 * UnitsPerlnch, cy - SpaceFactor * 0.2), currclr, BF
TwipsPerHeight = (hDC.Height / hDC.ScaleHeight)
TwipsPerWidth = (hDC.Width / hDC. ScaleWidth)
UnitsPerlnch = hDC. ScaleWidth / 11
HeightPerlnch = hDC. ScaleHeight / 11
UnitsPerCharacter = (hDC. fontsize * 20) / TwipsPerHeight SN Key hDC. ForeColor = vbBlack If hDC. hDC = picPlate.hDC Then ex = (Across * 4) + 3 cy = 3
SpaceFactor = 0.15 * HeightPerlnch Else ' Printer ex = hDC. ScaleWidth - (0.6 * UnitsPerlnch) cy = 1 to SpaceFactor = 0.15 * HeightPerlnch
C CO End If CO hDC.CurrentX = ex cy = cy i- 1.75 * UnitsPerCharacter hDC. Curr 2ntY = cy hDC.Prin- "SN" m hDC.CurrentX = ex cy = cy + 1.75 * UnitsPerCharacter co I hDC.CurrentY = cy m hDC. Print " 0.0" rri < hDC. CurrentX = ex cy = cy + 1.75 * UnitsPerCharacter
73 hDC.Cur entY = cy hDC. Print " " & Format (Limits (cLIMITPLATESN, 0), "##0.0")
|— hDC.FillStyle = vbSolid m currclr = Clr (cLIMITPLATESN, 0)
J hDC.FillColor = currclr
■—» hDC.Line (ex, cy - SpaceFactor * 1.2)-(cx + 0.33 * UnitsPerlnch, cy - SpaceFactor * 0.2), currclr, BF hDC. CurrentX = ex cy = cy + 1.75 * UnitsPerCharacter hDC.CurrentY = cy hDC. Print " " & Format (Limits (cLIMITPLATESN, 1), "##0.0") currclr = Clr (cLIMITPLATESN, 1) hDC.FillColor = currclr hDC.Line (ex, cy - SpaceFactor * 1.2)-(cx + 0.33 * UnitsPerlnch. cy - SpaceFactor * 0.2), currclr, BF hDC.CurrentX = ex cy = cy + 1.75 * UnitsPerCharacter hDC.CurrentY = cy
frmAPlatePerform - 1
' Copyright 1999 Tropix, Inc.
Dim PData(96) As Single
' Dim PCV(96) As Single
Dim Across, Down, ODown As Integer
Private Sub FileMenuPrint_Click() Dim opt As Integer Dim pit As Long frmFreeText.Show vbModal, Me
If CommentsText = "CANCEL" Then GoTo theend d r = True r = (Across * 3) + (1 * Across) + 6 = (Down * 24) + (5 * Down) + 20 -15 tesSubSelected - 1 (plt. Printer) r)
Figure imgf000149_0001
c Private Sub DrawKey(hDC As Control)
Dim fontsize As Integer
Dim ex As Integer
Dim cy As Integer
Dim currclr As ColorConstants
Dim TwipsPerHeight As Single
Dim TwipsPerWidth As Single
Dim UnitsPerCharacter As Single
Dim UnitsPerlnch As Single
Dim HeightPerlnch As Single
Dim SpaceFactor As Single fontsize = picPlate. fontsize hDC. fontsize = 12
Private Sub p.cPlate_MouseUp (Button As Integer, Shift As Integer, X As Single. Y As Single)
Dim pit, rw, cl As Integer
Dim File As String
Dim fn As Integer
On Error GoTo theend pit = Int( (X) / 40) pit = pit + Iπt((Y) / 28) * Across
If pit < 4 Then
If Button = 1 Then
CO
C cmdSave.ShowSave
00 fname = cmdSave. ilename CO
- fn = FreeFile
"""! Open fname For Output As #fn
.""j If pit = ALLALL Then m Print #fn, "Stats for All Plates, Good and Bad Wells" φ Elself pit = ALLGOOD Then
1 Print #fn, "Stats for All Plates, Good Wells Only" m Elself pit = SELECTEDALL Then ] Print #fn, "Stats for Selected Plates, Good and Bad Wells"
«—« I Else
73 r-1 Print #fn, "Stats for Selected Plates, Good Wells Only"
C £ End If
L_ I For rw = 0 To 7
[^ For cl = 0 To 11
CO Print #fn, ChrS (Asc ( "A") + rw) £ cl + 1 Se " Inhib: " & Format (APlatePatterns (pit) .assay (0) .WelKrw, c
-— D.Inhib(O), "0.000")
Print #fn, APlatePatterns (pit) .assay (0) .Well (rw, cl) .ResultString(O) Next cl Next rw Close fn Else
Figure imgf000150_0001
theend:
Debug. Print Err.Number, Err.Description
End Sub
' Stimulation r = Abslcl * 2.5) g = Abslcl * 2.5) b = Abslcl * 2.5)
If r > 255 Then r = 255 If g > 255 Then g = 255 If b > 255 Then b = 255
Figure imgf000151_0001
currclr = RGBI200, 200, 200) End If
fr APlatePattern - 3 to
C hDC.Line l(cx + 4) / 2, 64)-((cx + 4) / 2 + (hDC. ScaleWidth - 5) / 100, 65), currclr, BF
CO Next cl to hDC.CurrentX = 4
^ hDC.CurrentY = 61
P hDC. Print "Stim*
_l I hDC.CurrentY = 59 m hDC.CurrentX = hDC. ScaleWidth - 15
CO f> hDC. rint "Inhib"
I '
[J If hDC.hDC <> picPlate.hDC Then ϋ] hDC. fontsize = Int (( (hDC.Height / hDC. ScaleHeight) / 20) * 2#) + 1
,—« If hDC. fontsize > 12 Then hDC. fontsize = 12
73 hDC.CurrentX = 4
^ hDC.CurrentY = 66
11 hDC. Print CommentsText io End If σ>
End Sub
Private Sub MenuEditCopy_Click()
Clipboard.Clear
Clipboard. SetData picPlate. Image, vbCFBitmap End Sub
Private Sub mnuFileExit_Click( )
Call End_Program
End Sub
Private Sub mnuThreshold_Click() frmThreshold. Show vbModal, Me picPlate.Cls
Call Form_Resize
Pnr. ζilh
3 u co
+
Figure imgf000152_0001
Private Sub draw_plate (ByVal pit As Integer, hDC As Control)
Dim smp As Integer
Dim sum. Average As Single
Dim currclr As ColorConstants
Dim cv As Single
Dim r As Single Dim g As Single Dim b As Single hDC.FillStyle = vbSolid hDC.FontName = "Arial" hDC. I ( (hDC. Height / hDC. ScaleHeight) / 20) * 2.6) + 1 hDC.CurrentX = APlatePatterns (pit) .Left hDC. CurrentY = APlatePatterns (pit) .Top - 1.75 hDC. Print APlatePatterns (pit) .PlatelD
CO c For cl = 0 To 11
(H CO For rw = 0 To 7 ex = (cl * 3) + (4) + APlatePatterns (pit) .Left cy = (rw * 3) + (4) + APlatePatterns (pit) .Top m If APlatePatterns (pit) .assay(O) .Welllrw, cl) .ResultsCount (0) Then to , Average = (APlatePatterns (pit) .assay(0) .Well (rw, cl) . Inhib(O) ) m *~* Else η *£ Average = cNODATA
—I I End If
73 c If Average <> cNODATA Then m If Average >= 0 Then l^j r = Average * 2.5 σ> frmAPlatePattern - 2 g = Average * 2.5 b = Average * 2.5
If r > 255 Then r = 255
If g > 255 Then g = 255
If b > 255 Then b = 255 currclr = RGB(255, 255 - g, 255 - b)
Else r = Abs (100 + Average) * 2.5 g = Abs I 100 + Average) * 2.5 b = Abs (100 + Average) * 2.5
If r > 255 Then r = 255
If g > 255 Then g = 255
If b > 255 Then b = 255 currclr = RGB(r, g, 255)
End If
frmAPlatePattern - 1
' Copyright 1999 Tropix, Inc.
' Dim PData(96) As Single
' Dim PCVI96) As Single
Dim Across, Down, ODown As Integer
Dim ShowText As Boolean
Private Sub FileMenuPrint_Click ( ) frmFreeText.Show vbModal, Me
If CommentsText = "CANCEL" Then GoTo theend
On Error GoTo theend cmdPrint.CancelError = True cmdPrint. ShowPrinter
Printer. ScaleWidth = (Across * 36) + (4 * Across) + 10 CO Printer.ScaleHeight = (Down * 24) + (4 * Down) + 21
^ Printer. ScaleTop = -3
CO
—I For pit = ALLALL To SELECTEDGOOD
_l Call draw_plate(plt, Printer)
C Next m Printer .EndDoc theend: to I End Sub
I i-j mrπ "h-" Pri.vate Su,b Form_Load ( )
—. Dim stat As Integer
C Across = 2 I Down = 2 m-
JO For stat = ALLALL To SELECTEDGOOD
«— APlatePatterns (stat) .Top = (IntUstat) / (Across)) * 26) + (4 * Int((stat) / (Across))) + 2
APlatePatterns (stat) .Left = ((stat Mod (Across)) * 36) + (4 * (stat Mod (Across))) + 2 Next End Sub
Private Sub Form_Resize() Dim pit As Integer
If Me.WindowState <> vbMinimized Then picPlate.Width = frmAPlatePattern. Width - 100 picPlate.Height = frmAPlatePattern.Height - 400 picPlate. ScaleWidth = (Across * 36) + (4 * Across) + 10 picPlate. ScaleHeight = (Down * 24) + (4 * Down) + 20 picPlate.Cls For pit = ALLALL To SELECTEDGOOD
Call draw_plate(plt, picPlate) Next End If End Sub
End Sub
Private Sub picPlate_MouseUp (Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim pit, rw, cl As Integer pit = Intl(X) / 40) pit = pit + Int(lY) / 28) * Across
If pit < AplatesSubSelected And pit >= 0 Then frmAPlateGraphic - 10
Debug. Print X & " " & Y & " " & pit 2 If Button = 1 Then rj-j rw = Int((Y - (2 + Aplates (Aplateslndex(plt) ) .DataTop) ) / 3) φ cl = Int (IX - (2 + AplateslAplatesIndexlplt) ) .DataLeft) ) / 3)
H If rw < 0 Then rw = 0
—I If cl < 0 Then cl = 0
C If rw > 7 Then rw = 7 m If cl > 11 Then cl = 11 co Debug. Print X S. " " & Y & " " & pit & " Plate: " & Aplates (Aplateslndex (pit) ). PlatelD (cSPLATE) t "(" 6 pit & ") (" 4 tw i '," t cl i "I - Compound: "; Aplates (Aplateslndex(plt) ) .Well (rw, cl) .Compound m , ' MsgBox ("Compound : " & APlates (APlatesIndex(plt) ) .Well (rw, cl) .Compound) m oi SelCompounds (CompoundsSelected) .Name = Aplates (Aplateslndex (pit) ) .Well (rw, cl) .Compound
' i SelCompounds (CompoundsSelected) .SPlatelD = Aplates (Aplateslndex (pit) ) .PlateΙD(cSPLATE) jg SelCompounds (CompoundsSelected) .row = rw
C SelCompounds (CompoundsSelected) .col = cl
I- CompoundsSelected = CompoundsSelected + 1
^ frmCompoundList . Show ø5 frmCompoundList. Refresh
—' Else ' button = 2
If CurrAPlate <> -1 Then picPlate.Line (Aplates (CurrAPlate) .DataLef - 0.02, Aplates (CurrAPlate) .DataTop + 4) - (Aplates (CurrAPlate) . DataLeft - 0.4, Aplates (CurrAPlate) .DataTop + 20), vbWhite, BF End If
CurrAPlate = Aplateslndex (pit) frmAPlateGraphic. Caption = "Assay Plate View - Plate: " & Aplates (Aplateslndex (pit) ) .PlatelD (cAPLATE) picPlate.Line (Aplates (CurrAPlate) . DataLeft - 0.02, Aplates (CurrAPlate) .DataTop + 4) - (Aplates (CurrAPlate) .Data
Left - 0.4, Aplates (CurrAPlate) .DataTop + 20), RGB(200, 100, 100), BF
Unload frmAPlateText frmAPlateTex .Show
End If
Figure imgf000155_0001
Next cl
Next rw
Next pit frmCompoundList.Show frmCompoundList. Refresh
Case "b":
'Blue Only (Stim)
For pit = 0 To AplatesSubSelected - 1
For rw = 0 To 7
For cl = 0 To 11
If ViewStim Then dispstat = AplateslAplatesIndex(plt) ) .WelKrw, cl) .Stim(WellStat) Else dispstat = Aplates (Aplateslndex(plt) ) .WelKrw, cl) .Inhib(WellStat) End If
If ( (AplateslAplatesIndexlplt) ) .WelKrw, clJ.Type = "D") Or (Aplates (Aplateslndex(pit) ) .Well (rw, cl) .T ype <> ActCtl (cHIGH) And Aplates (Aplateslndex(plt) ) .WelKrw, cl) .Type <> ActCtl (cLOW) ) ) _
And -dispstat < Limits (cLIMITINHIB, 2) _ And -dispstat >= Limits (cLIMITINHIB, 1) Then CO SelCompounds (CompoundsSelected) .Name = AplateslAplatesIndexlplt) ) .Well (rw, cl) .Compound
C SelCompounds (CompoundsSelected) .SPlatelD = Aplates (Aplateslndex(plt) ). PlatelD(cSPLATE) y~ SelCompounds (CompoundsSelected) .row = rw
_l SelCompounds (CompoundsSelected) .col = cl
^ CompoundsSelected = CompoundsSelected + 1
C End If
—I Next cl
171 Next rw to ( Next pit ϊ l-π frmCompoundList.Show fji I frmCompoundList. Refresh
—I Case "c":
-r: ' Cyan Only (Stim) 2 For pit = 0 To AplatesSubSelected - 1
|— For rw = 0 To 7 m For cl = 0 To 11 r If ViewStim Then
32 dispstat = Aplates (Aplateslndex (pit) ) .WelKrw. cl) .Stim(WellStat)
Else dispstat = AplateslAplatesIndexlplt) ) .WelKrw, cl) .Inhib(WellStat) End If
If ( (Aplates (Aplateslndex (pit)) .WelKrw, clJ.Type = "D") Or (Aplates (Aplateslndex (pit) ) .WelKrw, cl) .T ype <> ActCtl (cHIGH) And Aplates (Aplateslndex (pit) ) .Well (rw, clJ.Type <> ActCtKcLOW) ) ) _
And -dispstat < Limits (cLIMITINHIB, 1) _
And -dispstat >= Limits (cLIMITINHIB, 0) Then
SelCompounds (CompoundsSelected) .Name = Aplates (Aplateslndex (pit) ) .WelKrw, cl) .Compound
SelCompounds (CompoundsSelected) .SPlatelD = Aplates (Aplateslnde (pit) ) .PlatelD (cSPLATE)
SelCompounds (CompoundsSelected) .row = rw
SelCompounds (CompoundsSelected) .col = cl
CompoundsSelected = CompoundsSelected + 1
End If
Next cl Next rw Next pit
frmCompoundLis .Show frmCompoundList. efresh
End Select
Next cl
Next rw
φ ype
C
CD
CO
^d
5 m
Figure imgf000157_0001
φ I Next cl
X i-1 Next rw Next pit
!_j I frmCompoundList.Show
«« frmAPlateGraphic - 9
[— frmCompoundList. efresh
[71 Case "r":
KO ' Red Only (Stim)
32 For pit = 0 To AplatesSubSelected - 1
For rw = 0 To 7
For cl = 0 To 11
If ViewStim Then dispstat = AplateslAplatesIndexlplt)) .WelKrw, cl) . Stim(WellStat) Else dispstat = Aplates (Aplateslndex (pit)) .WelKrw, cl) .Inhib(WellStat)
End If
If ((AplateslAplatesIndexlplt)) .WelKrw, cl) .Type = "D") Or (AplateslAplatesIndexlplt)) WelKrw ell T ype <> ActCtKcHIGH) And Aplates (Aplateslndex (pit) ) .Welllrw, cl) .Type <> ActCtl(eLOW))) _. P '
And -dispstat >= Limits (cLIMITINHIB, 2) Then
SelCompounds (CompoundsSelected) .Name = Aplates (Aplateslnde (pit) ) .WelKrw, cl).Compound
SelCompounds (CompoundsSelected). SPlatelD = Aplates(AplatesIndex(plt) ) .PlatelD (cSPLATE)
SelCompounds (CompoundsSelected) .row = rw
SelCompounds (CompoundsSelected) .col = cl CompoundsSelected = CompoundsSelected + 1 End If
Case "B":
Blue Only
For pit = 0 To AplatesSubSelected - 1
For rw = 0 To 7
For cl = 0 To 11
If ViewStim Then dispstat = Aplates (AplateslndexIplt) ) .Welllrw, cl) .Stim(WellStat) Else dispstat = Aplates (Aplateslndex (pit) ) .Welllrw, cl) . InhibtWellStat) End If
If ( (Aplates (Aplateslndex(plt) ) .Welllrw, cD.Type = "D") Or (Aplates {Aplateslndex (pit) ) .Welllrw, cl) .T ype <> ActCtKcHIGH) And Aplates (Aplateslndex (pit) ) .Wellfrw, cD.Type <> ActCtKcLOW) ) ) _
And dispstat < Limits (cLIMITINHIB, 2) _ And dispstat >= Limits (cLIMITINHIB, 1) Then φ SelCompounds (CompoundsSelected) .Name = Aplates (Aplateslnde (pit) ) .Well (rw, cl).Compound
C, SelCompounds (CompoundsSelected) .SPlatelD = AplateslAplatesIndexlplt) ) . PlatelD(cSPLATE)
CD SelCompounds (CompoundsSelected) .row = rw
CO SelCompounds (CompoundsSelected) .col = cl
— CompoundsSelected = CompoundsSelected + 1 jd End If
_l Next cl m Next rw
1 O l—1 Next pit
I Ul frmCompoundList. Show m C m 1 frmCompoundLis . ef esh
H Case "C": ' Cyan Only
73 For pit = 0 To AplatesSubSelected - 1
C r~ For rw = 0 To 7 m For cl = 0 To 11 ro If ViewStim Then σi dispstat = AplateslAplatesIndexlplt) ) .WelKrw, cl) .Stim(Wellstat) Else dispstat = Aplates (Aplateslndex (pi ) ) .WelKrw, cl) . Inhib(WellStat) End If
If ( (Aplates (Aplateslndex (pit) ) .WelKrw, cD.Type = "D") Or (Aplates (Aplateslndex (pit) ) .Well (rw, cl) .T ype <> ActCtKcHIGH) And Aplates (Aplateslndex (pit) ) .Well(rw, cD.Type <> ActCtl(cLOW) ) ) _
And dispstat < Limits (cLIMITINHIB, 1) _
And dispstat >= Limits (cLIMITINHIB, 0) Then
SelCompounds (CompoundsSelected) .Name = Aplates (Aplateslndex(plt) ) .Well(rw, cl). Compound
SelCompounds (CompoundsSelected) .SPlatelD = Aplates (Aplateslndex (pit) ) .PlatelD(cSPLATE)
SelCompounds (CompoundsSelected) .row = rw
SelCompounds (CompoundsSelected) .col = cl
CompoundsSelected = CompoundsSelected + 1
End If
Case "M":
Marked = Red, Dark Blue, Cyan
For pit = 0 To AplatesSubSelected - 1
For rw = 0 To 7
For cl = 0 To 11
If ViewStim Then dispstat = Aplates lAplatesIndexlplt) ) .WelKrw, cl) .Stim(WellStat)
Else dispstat = Aplates (Aplateslnde (pit) ) .WelKrw, cl) . Inhib (WellStat) End If
If ((AplateslAplatesIndexlplt)) .WelKrw, cl) .Type = "D") Or (Aplates (Aplateslnde (pit) ) .Well (rw, cl) .T ype <> ActCtKcHIGH) And Aplates (Aplateslndex (pit) ) .WelKrw, cD.Type <> ActCtl(cLOW) ) ) _
And dispstat >= Limits (cLIMITINHIB, 0) Then
SelCompounds (CompoundsSelected) .Name = Aplates (Aplateslndex (pit) ) .Well (rw, cl) .Compound SelCompounds (CompoundsSelected) .SPlatelD = Aplates (Aplateslndex(plt) ) .PlatelD(cSPLATE) SelCompounds (CompoundsSelected) .row = rw SelCompounds (CompoundsSelected) .col = cl CompoundsSelected = CompoundsSelected + 1 to. End If
_J Next cl
CO Next rw
H Next pit
—I frmCompoundList. Show
C frmCompoundList. efresh m i . Case "R":
C ,_. High = Red Only
■jOϊ rU-l* For pit = 0 To AplatesSubSelected - 1 fn "j"1 For rw = 0 To 7 m For cl = 0 To 11
""' If ViewStim Then
jg dispstat = Aplates (Aplateslnde (pit) ) .WelKrw, cl) .Stim (WellStat)
C Else
I- dispstat = Aplates (Aplateslndex (pit) ) .WelKrw, cl) . Inhib(WellStat) m End If
J, If ((AplateslAplatesIndexlplt) ) .Welllrw, clJ.Type = "D") Or (Aplates (Aplateslndex (pit) ) .Welllrw, cl) .T frmAPlateGraphic - 8 ype <> ActCtKcHIGH) And Aplates (Aplateslndex (pit) ) .Welllrw, cD.Type <> ActCtl (cLOW) ) )
And dispstat >= Limits (cLIMITINHIB, 2) Then
SelCompounds [CompoundsSelectedJ .Name = AplateslAplatesInde lpl )).Welllrw cl) Comoounrl
SelCompounds CompoundsSelected). SPlatelD = Aplates (Aplateslndex pitD PlatelD cSPLATE?
SelCompounds (CompoundsSelectedJ .row = rw ι<»teιuιc-,_<j-Aii.)
SelCompounds (CompoundsSelected) .col = cl
CompoundsSelected = CompoundsSelected + 1
End If
Next cl
Figure imgf000159_0001
frmAPlateGraphic - 7
ViewStDevs = Abs (ViewStDevs - 1)
End Sub
Private Sub mnuViewStimulation_Click( ) mnuViewInhibition.Checked = False mnuViewStimulation.Checked = True
ViewStim = 1 Call Form_Resize
End Sub
Private Sub mπuViewTreπds_Click()
ViewMode = 1 . mnuViewTrends.Checked = True mnuViewDiscrete.Checked = False mnuViewWelltype.Checked = False -_"
Call Form_Resize
End Sub CO m Private Sub mnuViewWelltype_Click() φ ViewMode = 2
H mnuViewTrends.Checked = False
—I mnuViewDiscrete.Checked = False
C . mnuViewWelltype.Checked = True j i-J Call Form_Resize
Φ S End sub
I I
171 Private Sub picPlate_KeyPress (KeyAscii As Integer) rH Dim rw As Integer
-' Dim cl As Integer
-JQ Dim dispstat As Single
( Dim pit As Long r
IT! Select Case Chr$ (KeyAscii) compounds reported, regardless of inhibition
Figure imgf000160_0001
it = 0 To AplatesSubSelected - 1 For rw = 0 To 7
For cl = 0 To 11
If ( (Aplates (Aplateslndex (pit) ) .WelKrw, cD.Type = "D") Or (Aplates (Aplateslndex (pit) ) .Well (rw, cl) .T
ype <> ActCtKcHIGH) And Aplates (Aplateslndex(pi ) ) .WelKrw, clJ.Type <> ActCtKcLOW))) Then
SelCompounds (CompoundsSelected) .Name = AplateslAplatesIndexlplt) ) .Well (rw, cl) .Compound
SelCompounds (CompoundsSelected) .SPlatelD = Aplates (Aplateslndex(plt) ) .PlateΙD(cSPLATE)
SelCompounds (CompoundsSelected) .row = rw
SelCompounds (CompoundsSelected) .col = cl
CompoundsSelected = CompoundsSelected + 1
End If
Next cl
Next rw Next pit frmCompoundList.Show frmCompoundList . efresh
hDC.FillStyle = vbFSSolid hDC.FillColor = currclr hDC.Circle (ex - 0.7, cy - 0.7), 0.65, currclr Next rw
Next .cl hDC.FillStyle = vbFSTransparent hDC.DrawWidth = 1
For cl = 0 To 11
For rw = 0 To 7 ex = (cl * 3) + 4 + Aplates(AplatesIndex(plt) ) .DataLeft cy = (rw * 3) + 4 + Aplates (Aplateslndex(plt) ) .DataTop hDC.Line (ex - 2, cy - 2)-(cx + 1, cy + 1) , RGB(225, 225, 225), B Next rw Next cl hDC.Line (Aplates (Aplateslndex (pit) ) .DataLeft + 2, Aplates (Aplateslndex (pit) ) .DataTop + 2) -(Aplates (Aplateslndex (p It) ) .DataLeft + 38, Aplates (Aplateslndex(plt) ) .DataTop + 26), RGB(51, 51, 51), B hDC.CurrentX = 2 to hDC.CurrentY = -8
C hDC.ForeColor = vbBlack CD CO hDC.FontName = "Arial" hDC. fontsize = Int ( (hDC.Width / 1400) * (6 / Across)) + 1
If hDC. fontsize > 12 Then hDC. fontsize = 12
If hDC.hDC = picPlate.hDC Or CommentsText = Then m hDC. Print frmAPlateGraphic.Caption Else co
I hDC. Print frmAPlateGraphic. Caption & ": & CommentsText <-" End If
[TI f End If
-1 End Sub _■ Private Sub MenuEditCopy_Click( )
I- Clipboard. Clear m Clipboard.SetData picPlate. Image, vbCFBitmap
Figure imgf000161_0001
Private Sub mnuFileExit_Click()
Call End_Program End Sub
Private Sub mnuViewDiscrete_Click( ) ViewMode = 0 mnuViewTrends.Checked = False mmnnuuVViieewwDDiissccrreettee..CChheecckkeedd == TTrruuee mnuViewWelltype.Checked = False
Call Form_Resize
End Sub
—- _-.
Figure imgf000161_0002
Figure imgf000162_0001
Figure imgf000163_0001
ft. If Average <= -1 Then hDC.FillStyle = vbFSSolid hDC.FillColor = vbWhite
If hDC.hDC <> picPlate.hDC Then hDC.DrawWidth = 4
Figure imgf000164_0001
End If hDC. Circle (ex - 0.7, cy - 0.7), 0.65, currclr hDC.DrawWidth = 1
Else hDC.FillStyle = vbFSSolid hDC.FillColor = currclr ' hDC.Circle (ex - 0.7, cy - 0.7), 0.65, currclr
End If
End If φ End If ' data wells only
C Next rw
0D Next cl
CO hDC.FillStyle = vbFSTransparent
-.2 hDC.DrawWidth = 1
^ For cl = 0 To 11
. For rw = 0 To 7 m ex = (cl * 3) + 4 + Aplates (Aplateslndex (pit) ) .DataLeft φ cy = (rw * 3) + 4 + Aplates (Aplateslndex (pit) ) .DataTop
I hDC.Line (ex - 2, cy - 2) -(ex + 1, cy + 1) , RGB(225, 225, 225), B m I Next rw
!3j ς Next cl
—« >
73 I hDC . Line (Aplates (Aplateslnde (pit) ) . DataLeft + 2 , Aplates (Aplateslndex (pit) ) . DataTop + 2 ) - (Aplates (Aplateslndex (p
C It) ) . DataLeft + 38 , Aplates (Aplateslnde (pi t ) ) . DataTop + 26 ) , RGB ( 51 , 51 , 51 ) , B m frmAPlateGraphic hDC.CurrentX = 2 hDC.CurrentY = -8 hDC.ForeColor = vbBlack hDC.FontNajne = "Arial" hDC. fontsize = Int ( (hDC.Width / 1400) * (6 / Across)) + 1 If hDC. fontsize > 12 Then hDC. fontsize = 12
If hDC. DC = picPlate.hDC Or CommentsText = "" Then hDC. Print frmAPlateGraphic.Caption
Else hDC. Print frmAPlateGraphic.Caption & " -. " & CommentsText End If
Elself ViewMode = 1 Then ' viewmode = 1 (Trends) frmAPlateGraphic - 4
If ViewMode = 0 Then 'The default View mode, Discrete Colors
For cl = 0 To 11
For rw = 0 To 7
If (Aplates (Aplateslndex (pit) ) .Well (rw, cD.Type = "D") Then Data wells only ex = (cl * 3) + (4) + Aplates(AplatesIndex(plt) ) .DataLeft cy = (rw * 3) + (4) + AplateslAplatesIndexlplt) ) .DataTop
If Not Aplates (Aplateslndex(plt| ) .WelKrw, cD.Good Then currclr = vbBlack Else currclr = vbWhite End If
I£ ViewStim Then
Average = AplateslAplatesIndexlplt) ) .WelKrw, cl) .Stim(WellStat) to c Else
Average = Aplates (Aplateslndex(plt) ) .Well (rw, cl) .Inhib(WellStat)
CO CO End If
If Average <> cNODATA Then hDC.Line (ex - 2, cy - 2)-(cx + 1, cy + 1), currclr, BF m ω If Abs (Average) > Limits (cLIMITINHIB, 2) Then
CO ' currclr = Clr (cLIMITINHIB, 2)
I Elself Abs (Average) > Limits (cLIMITINHIB, 1) Then
[J] currclr = ClrlcLIMITINHIB, 1)
[j Elself Abs (Average) > Limits (cLIMITINHIB, 0) Then
_^ currclr = ClrlcLIMITINHIB, 0)
73 Else
C currclr = vbWhite m. End If α σ5> If currclr <> vbWhite Then ' an active compound
If ViewStDevs = 1 Then draw a background color
StDevsAway = Abs( (Aplates(AplatesIndextplt) ) .Well (rw. cD.Raw - Aplates (Aplateslndex (pit) ) .ControKWellStat, cHIGH) ) / Aplates (Aplateslndex(plt) ) .InhibStDevs (WellStat, cHIGH) )
If StDevsAway > 3 Then stdevclr = vbWhite Elself StDevsAway : 2 Then stdevclr = Clr(cLIMITPLATECV, 0)
Elself StDevsAway > 1 Then stdevclr = Clr(cLIMITPLATECV, 1)
Else stdevclr = Clr(cLIMITPLATECV, 2)
End I f hDC. Line (ex - 2, cy - 2) - (cx + 1 , cy + 1 ) , stdevclr, BF
End If End If
Private Sub Form_Resize () ' was Form_Paint Dim pit As Integer
Figure imgf000166_0001
If Me.WindowState <> vbMinimized Then picPlate.Width = frmAPlateGraphic. idth - 100 picPlate.Height = frmAPlateGraphic. Height - 400 picPlate. ScaleWidth = (Across * 36) + (4 * Across) + 10 picPlate. ScaleHeight = (Down * 24) + (4 * Down) + 30 picPlate. ScaleTop = -10 picPlate.Cls
For pit = 0 To AplatesSubSelected - 1
Call draw_plate(plt, picPlate) Next yj End If Call DrawKey(picPlate)
CD
CO End Sub
H
H Private Sub draw_plate (ByVal pit As Integer, hDC As Control)
5 Dim smp As Integer m Dili sum As Single
Φ Dim Average As Single ι_ Dim currclr As ColorConstants m CT Dim cl As Integer ] ^" Dim rw As Integer
_____ Dim ex As Single
JO Dim cy As Single
C Dim r As Long m Dim g As Long
Dim b As Long O) Dim stdevclr As ColorConstants
'—' Dim StDevsAway As Single
Dim welltype As String hDC.FillStyle = vbSolid hDC. FontName = "Arial" hDC. (( (hDC.Height / hDC.ScaleHeight) / 20) * 2.6) + 1 hDC.CurrentX = Aplates (Aplateslndex (pit) ) .DataLeft hDC.CurrentY = Aplates (Aplateslndex(pit) ) .DataTop - 1.25
If Aplates (Aplateslndex (pit)) .Good Then hDC.ForeColor = vbBlack
Figure imgf000166_0002
End If hDC. Print Aplates (Aplateslndex(pit) ) .PlateΙD(ALabelType)
Elself ViewMode = 2 Then ' viewmode = 1, false color trend analysis
' Well Type Key hDC. ForeColor = vbBlack
If hDC. hDC = picPlate.hDC Then ex = (Across * 40) + 3 cy = 3
SpaceFactor = 0.15 * HeightPerlnch
Else ' Printer ex = hDC. ScaleWidth - (0.6 * UnitsPerlnch) cy = 1
SpaceFactor = 0.15 * HeightPerlnch End If hDC. CurrentX = ex cy = cy + 1.75 * Uni sPerCharacter hDC.CurrentY = cy hDC.FontBold = True hDC. Print "Type" φ hDC.FontBold = False
C ^ frmAPlateGraphic - 3
ZJ hDC.CurrentX = ex
(___; cy = cy + 1.75 * UnitsPerCharacter
—I hDC. CurrentY = cy m hDC. Print "Data"
CO hDC.CurrentX = ex
_m cy = cy + 1.75 * UnitsPerCharacter m I hDC. CurrentY = cy hDC. Print "High"
—« iJi hDC.FillColor = vbYellow
73 I hDC.Line (ex, cy - SpaceFactor * 1.2)-(cx + 0.33 * UnitsPerlnch, cy - SpaceFactor * 0.2), vbYellow, BF
£ hDC. CurrentX = ex m cy = cy + 1.75 * UnitsPerCharacter no hDC.CurrentY = cy
32 hDC. Print "Low" currclr = vbBlue hDC.FillColor = currclr hDC.Line (ex, cy - SpaceFactor * 1.2)-(cx + 0.33 * UnitsPerlnch, cy - SpaceFactor * 0.2), currclr, BF hDC.CurrentX = ex cy = cy + 1.75 * UnitsPerCharacter hDC.CurrentY = cy hDC. Print "Other" currclr = vbCyan hDC.FillColor = currclr hDC.Line (ex, cy - SpaceFactor * 1.2)-(cx + 0.33 * UnitsPerlnch, cy - SpaceFactor * 0.2), currclr, BF hDC.CurrentX = ex cy = cy + 1.75 * UnitsPerCharacter hDC.CurrentY = cy currclr = vbRed hDC.FillColor = currclr hDC.Line (ex, cy - SpaceFactor * 1.2)-(cx + 0.33 * UnitsPerlnch, cy - SpaceFactor * 0.2), currclr, BF hDC.FillStyle = vbTransparent
Figure imgf000168_0001
hDC.CurrentX = ex cy = cy + 1.75 * UnitsPerCharacter hDC.CurrentY = cy hDC. Print "- values" currclr = vbBlack
If hDC.hDC <> picPlate.hDC Then hDC.DrawWidth = 4 End If cy = cy + 1.75 * UnitsPerCharacter hDC. Circle (ex + 0.1666 * UnitsPerlnch, cy - 0.05 * UnitsPerlnch), 0.05 * UnitsPerlnch, currclr hDC.DrawWidth = 1
CO hDC. CurrentX = ex c cu cy = ,cy + 1.75 * UnitsPerCharacter co hDC.CurrentY = cy hDC. Print " 0.0" hDC.CurrentX = ex cy = cy + 1.75 * UnitsPerCharacter m hDC.CurrentY = cy hDC. Print " " & Format (Limits (cLIMITINHIB, 0), "##0.0") co hDC.FillColor = vbWhite m hDC.Line (ex, cy - SpaceFactor * 1.2) -(ex + 0.33 * UnitsPerlnch, cy - SpaceFactor * 0.2), vbBlack, B m hDC. CurrentX = ex cy = cy + 1.75 * UnitsPerCharacter
73 hDC.CurrentY = cy c cy. hDC. Print " " & Format (Limits (cLIMITINHIB, 1), "##0.0")
I currclr = ClrlcLIMITINHIB, 0) m hDC.FillColor = currclr ro co hDC.Line (ex, cy - SpaceFactor * 1.2)-(cx + 0.33 * UnitsPerlnch, cy - SpaceFactor * 0.2), currclr, BF hDC.CurrentX = ex cy = cy + 1.75 * UnitsPerCharacter hDC.CurrentY = cy hDC. Print " " & Format (Limits (cLIMITINHIB, 2), "##0.0") currclr = ClrlcLIMITINHIB, 1) hDC.FillColor = currclr hDC.Line (ex, cy - SpaceFactor * 1.2)-(cx + 0.33 * UnitsPerlnch, cy - SpaceFactor * 0.2), currclr, BF hDC.CurrentX = ex cy = cy + 1.75 * UnitsPerCharacter hDC. CurrentY = cy currclr = ClrlcLIMITINHIB, 2) hDC.FillColor = currclr hDC.Line (ex, cy - SpaceFactor * 1.2)-(cx + 0.33 * UnitsPerlnch, cy - SpaceFactor * 0.2), currclr, BF hDC.FillStyle = vbTransparent
Figure imgf000168_0002
For pit = 0 To AplatesSubSelected - 1
Aplates (Aplateslndex (pit) ) .DataTop = (Int((plt) / (Across)) * 24) + (4 * Int((plt) / (Across))) + 2
AplateslAplatesIndexlplt) ) .DataLeft = ((pit Mod (Across)) * 36) + (4 * (pit Mod (Across))) + 2
Next 'through all Aplateslndex
End Sub
Private Sub DrawKeydiDC As Control)
Dim fontsize As Integer
Dim ex As Integer
Dim cy As Integer
Dim currclr As ColorConstants
Dim TwipsPerHeight As Single
Dim TwipsPerWidth As Single
Dim UnitsPerCharacter As Single
Dim UnitsPerlnch As Single
Dim HeightPerlnch As Single
Dim SpaceFactor As Single fontsize = picPlate. fontsize hDC. fontsize = 12
TwipsPerHeight = (hDC.Height / hDC. ScaleHeight) TwipsPerWidth = (hDC.Width / hDC. ScaleWidth) I UnitsPerlnch = hDC. ScaleWidth / 11 HeightPerlnch = hDC.ScaleHeight / 11 cy. to I frmAPlateGraphic - 2
UnitsPerCharacter = (hDC. fontsize * 20) / TwipsPerHeight
If ViewMode = 0 Then ' Default, Discrete colors ' Inhib Key hDC. ForeColor = vbBlack If hDC.hDC = picPlate.hDC Then ex = (Across * 40) + 3 cy = 3
SpaceFactor = 0.15 * HeightPerlnch Else ' Printer ex = hDC. ScaleWidth - (0.6 * UnitsPerlnch) cy = 1
SpaceFactor = 0.15 * HeightPerlnch
End If hDC.CurrentX = ex cy = cy + 1.75 * UnitsPerCharacter hDC.CurrentY = cy hDC.FontBold = True hDC. Print "Inhib" hDC.FontBold = False
frmAPlateGraphic - 1
Select Case AplatesSubSelected
' Copyright 1999 Tropix, inc. Case 1
Option Explicit Across = 1
Dim Across, Down, ODown As Integer Down = 1
Dim ViewMode As Integer ODown = 1
Dim ViewStDevs As Integer Case 2
Across = 1 Down = 2
Private Sub FileMenuPrint_Click() ODown = 2 Dim opt As Integer Case 3 Dim pit As Long Across = 2 Down = 2 frmFreeText.Show vbModal, Me ODown = 2 Case Else
If CommentsText = "CANCEL" Then GoTo theend
Across = In (Sqr (AplatesSubSelected) ) ODown = In (AplatesSubSelected / Across)
On Error Goϊo theend Down = ODown cmdPrint.CaiicelError = True n nt . ShowPrinter If Across * ODown < AplatesSubSelected Ther cn c dPri V Down = ODown + 1 I End If
Printer. ScaleWidth = (Across * 36) + (4 * Across) + 50 End Select Printer. ScaleHeight = (Down * 24) + (4 * Down) + 30 Printer. ScaleTop = -10
For pit = 0 To AplatesSubSelected - 1
Call draw_plate(plt, Printer) Next
Call DrawKey (Printer)
Printer. EndDoc theend: End Sub
Pri
Figure imgf000170_0001

Claims

WHAT IS CLAIMED IS:
1. A method for displaying assay results, the method comprising the steps of:
presenting assay results for a single assay from multiple assay plates and wells in a
graphical form;
providing a user with the ability to set at least one assay threshold;
presenting well results for each well on multiple plates on a single display screen, the
assay results being in a discrete color-coded format based upon at least one assay threshold.
2. The method of Claim 1, wherein the assay results and well results are expressed as a
percentage of inhibition.
3. The method of Claim 2, wherein the graphical form is a plot of the probability distribution of the percentage of inhibition.
4. The method of Claim 2, wherein the graphical form is a histogram of the percentage
of inhibition.
5. The method of Claim 1, wherein the threshold is set by entering a numerical value.
6. The method of Claim 1, wherein the threshold is set by dragging a threshold bar to a
desired location on the graphical form.
7. The method of Claim 1, wherein the well results are presented in multiple tables,
each of the tables corresponding to an assay plate, each of the tables having multiple cells, each
cell corresponding to a well on a respective assay plate.
8. The method of Claim 7, wherein each of the cells is partially filled with a color
corresponding to the at least one threshold.
9. The method of Claim 8, wherein the cells are partially filled with colored circles
corresponding to the at least one threshold.
-167-
10. A method for displaying assay results, the method comprising the step of displaying
assay results for a plurality of assay plates in a single table, the table having a plurality of cells,
each of the cells being in a spatial relationship with respect to each other corresponding to a
spatial relationship of a respective well on the assay plates with respect to other wells on the
assay plate, each of the cells having a cell value based on combined assay plate results from
respective wells from at least a first portion of the plurality of assay plates.
11. The method of Claim 10, wherein the cell value is based on combined assay plate
results from respective wells from all of the plurality of assay plates.
12. The method of Claim 10, wherein the cell value is based on combined assay plate
results from respective wells from assay plates selected by a user.
13. The method of Claim 10, wherein the compounds in corresponding wells of each
assay plate in the first portion are the same.
14. The method of Claim 10, further comprising the steps of repeating the displaying
step for a second portion, the compounds in each well of each assay plate of the second portion
being the same as compounds in corresponding wells of plates in the second portion and being
different from compounds in other wells of plates in the first portion.
15. The method of Claim 10, wherein the cell value is expressed in a color-coded
format wherein a color intensity indicates the magnitude of the cell value.
16. The method of Claim 10, further comprising the step of providing a user with the
ability to set at least one threshold, wherein the cell value is expressed in a discrete color-coded
format based on the threshold.
17. The method of Claim 10, wherein the cell value is an average of results from
respective wells.
-168-
18. The method of Claim 10, wherein the cell value is a minimum of results from
respective wells.
19. The method of Claim 10, wherein the cell value is a maximum of results from
respective wells.
20. A method for displaying assay results comprising the steps of:
providing a user with the ability to set at least one assay threshold for a value relevant to
an entire assay plate;
displaying values from multiple assay plates on a single screen, the values
corresponding to the value for which the assay threshold is set, the value being presented in a
discrete color-coded format based on the assay threshold.
21. The method of Claim 20, wherein the value represents the signal to noise ratio for a
respective assay plate.
22. The method of Claim 20, wherein the value represents the variability for a
respective assay plate.
23. The method of Claim 20, wherein the color-coded format comprises a box.
24. The method of Claim 20, wherein a plurality of values relevant to an assay plate are
displayed for each plate.
25. The method of Claim 24, wherein the plurality of values include values
representing signal to noise and variability.
26. A method for displaying assay results for a plurality of assays and a plurality of
compounds on a single screen, the method comprising the steps of: allowing a user to set at least one threshold for each of a plurality of assays; and
for each compound, displaying the assay result in the form of a polar plot;
-169- each polar plot including a vector for each of the plurality of assays, the bearing of the
vector corresponding to a respective assay, the magnitude of the vector representing the result
of the respective assay.
27. The method of Claim 26, wherein the assay result is expressed as a percentage of
inhibition.
28. The method of Claim 26, wherein the vector has a color, the color corresponding to
a respective assay.
29. The method of Claim 1, wherein the assay results are generated using high
throughput screening.
30. The method of Claim 10, wherein the assay results are generated using high
throughput screening.
31. The method of Claim 20, wherein the assay results are generated using high
throughput screening.
32. The method of Claim 26, wherein the assay results are generated using high
throughput screening.
-170-
PCT/US2000/012364 1999-05-07 2000-05-05 Data display software Ceased WO2000068810A1 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
AU48244/00A AU4824400A (en) 1999-05-07 2000-05-05 Data display software

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13311399P 1999-05-07 1999-05-07
US60/133,113 1999-05-07

Publications (3)

Publication Number Publication Date
WO2000068810A1 WO2000068810A1 (en) 2000-11-16
WO2000068810A8 WO2000068810A8 (en) 2001-03-01
WO2000068810A9 true WO2000068810A9 (en) 2001-11-22

Family

ID=22457079

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/US2000/012364 Ceased WO2000068810A1 (en) 1999-05-07 2000-05-05 Data display software

Country Status (2)

Country Link
AU (1) AU4824400A (en)
WO (1) WO2000068810A1 (en)

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6023694A (en) * 1996-01-02 2000-02-08 Timeline, Inc. Data retrieval method and apparatus with multiple source capability
US5989835A (en) * 1997-02-27 1999-11-23 Cellomics, Inc. System for cell-based screening

Also Published As

Publication number Publication date
WO2000068810A1 (en) 2000-11-16
WO2000068810A8 (en) 2001-03-01
AU4824400A (en) 2000-11-21

Similar Documents

Publication Publication Date Title
US12067720B2 (en) Quality control of automated whole-slide analyses
Herzenberg et al. Interpreting flow cytometry data: a guide for the perplexed
KR101106201B1 (en) Clinical examination analyzing device, clinical examination analyzing method, and storing computer readable recording medium program for allowing computer to execute the method
US4763274A (en) Machine implemented analysis eddy current data
US5523207A (en) Method for accurate counting of probe spots in cell nuclei
JPH1151942A (en) Clinical test system and test status management method
US5764824A (en) Clustering mechanism for identifying and grouping of classes in manufacturing process behavior
US7333907B2 (en) System and methods for characterization of chemical arrays for quality control
US5943048A (en) Method and apparatus for testing a graphic control area
US6631211B1 (en) Interactive system for analyzing scatter plots
Barlow et al. Case Study: Visualization for Decision Tree Analysis in Data Mining.
US20060098011A1 (en) Method and apparatus for displaying information
DE10323897B4 (en) Method for identifying image positions of a color sample of a test strip
US6690399B1 (en) Data display software for displaying assay results
CN101470746A (en) Multi-layer statistical chart system with data association function and method thereof
JP2005351690A (en) Multilaned electrophoresis analysis method, electrophoresis analyzer used therefor, multilaned electrophoresis analysis program, and medium
WO2000068810A9 (en) Data display software
US20080270845A1 (en) Methods and Apparatus That Enable a Viewer to Distinguish Different Test Data Entries and Test Data Items
Krieger et al. A practical guide to Papanicolaou smear rescreens: how many slides must be reevaluated to make a statistically valid assessment of screening performance?
Tucker CERVISCAN: An image analysis system for experiments in automatic cervical smear prescreening
JP3054273B2 (en) Automatic determination of disease type
Knudson et al. Automated Duet spot counting system and manual technologist scoring using dual-fusion fluorescence in situ hybridization (D-FISH) strategy: comparison and application to FISH minimal residual disease testing in patients with chronic myeloid leukemia
Mokhles et al. Advances in rock petrography: image processing techniques for automated textural thin section analysis
Morton et al. A model for coding pollen size in reference to phylogeny using examples from the Ebenaceae
JPS59218579A (en) Inspecting data output processing system

Legal Events

Date Code Title Description
AK Designated states

Kind code of ref document: A1

Designated state(s): AE AL AM AT AU AZ BA BB BG BR BY CA CH CN CR CU CZ DE DK DM EE ES FI GB GD GE GH GM HR HU ID IL IN IS JP KE KG KP KR KZ LC LK LR LS LT LU LV MA MD MG MK MN MW MX NO NZ PL PT RO RU SD SE SG SI SK SL TJ TM TR TT TZ UA UG UZ VN YU ZA ZW

AL Designated countries for regional patents

Kind code of ref document: A1

Designated state(s): GH GM KE LS MW SD SL SZ TZ UG ZW AM AZ BY KG KZ MD RU TJ TM AT BE CH CY DE DK ES FI FR GB GR IE IT LU MC NL PT SE BF BJ CF CG CI CM GA GN GW ML MR NE SN TD TG

121 Ep: the epo has been informed by wipo that ep was designated in this application
AK Designated states

Kind code of ref document: C1

Designated state(s): AE AL AM AT AU AZ BA BB BG BR BY CA CH CN CR CU CZ DE DK DM EE ES FI GB GD GE GH GM HR HU ID IL IN IS JP KE KG KP KR KZ LC LK LR LS LT LU LV MA MD MG MK MN MW MX NO NZ PL PT RO RU SD SE SG SI SK SL TJ TM TR TT TZ UA UG UZ VN YU ZA ZW

AL Designated countries for regional patents

Kind code of ref document: C1

Designated state(s): GH GM KE LS MW SD SL SZ TZ UG ZW AM AZ BY KG KZ MD RU TJ TM AT BE CH CY DE DK ES FI FR GB GR IE IT LU MC NL PT SE BF BJ CF CG CI CM GA GN GW ML MR NE SN TD TG

WR Later publication of a revised version of an international search report
DFPE Request for preliminary examination filed prior to expiration of 19th month from priority date (pct application filed before 20040101)
AK Designated states

Kind code of ref document: C2

Designated state(s): AE AL AM AT AU AZ BA BB BG BR BY CA CH CN CR CU CZ DE DK DM EE ES FI GB GD GE GH GM HR HU ID IL IN IS JP KE KG KP KR KZ LC LK LR LS LT LU LV MA MD MG MK MN MW MX NO NZ PL PT RO RU SD SE SG SI SK SL TJ TM TR TT TZ UA UG UZ VN YU ZA ZW

AL Designated countries for regional patents

Kind code of ref document: C2

Designated state(s): GH GM KE LS MW SD SL SZ TZ UG ZW AM AZ BY KG KZ MD RU TJ TM AT BE CH CY DE DK ES FI FR GB GR IE IT LU MC NL PT SE BF BJ CF CG CI CM GA GN GW ML MR NE SN TD TG

COP Corrected version of pamphlet

Free format text: PAGES 16-166, DESCRIPTION, REPLACED BY NEW PAGES 16-166B; PAGES 1/12-12/12, DRAWINGS, REPLACED BY NEW PAGES 1/12-12/12; DUE TO LATE TRANSMITTAL BY THE RECEIVING OFFICE

REG Reference to national code

Ref country code: DE

Ref legal event code: 8642

122 Ep: pct application non-entry in european phase
NENP Non-entry into the national phase

Ref country code: JP