WO2000068810A1 - Data display software - Google Patents

Data display software Download PDF

Info

Publication number
WO2000068810A1
WO2000068810A1 PCT/US2000/012364 US0012364W WO0068810A1 WO 2000068810 A1 WO2000068810 A1 WO 2000068810A1 US 0012364 W US0012364 W US 0012364W WO 0068810 A1 WO0068810 A1 WO 0068810A1
Authority
WO
WIPO (PCT)
Prior art keywords
assay
dim
hdc
aplates
index
Prior art date
Application number
PCT/US2000/012364
Other languages
French (fr)
Other versions
WO2000068810A9 (en
WO2000068810A8 (en
Inventor
Neil Carlson
Michelle A. J. Palmer
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
Publication of WO2000068810A9 publication Critical patent/WO2000068810A9/en

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/20Drawing from basic elements, e.g. lines or circles
    • G06T11/206Drawing of charts or graphs

Definitions

  • chip-based arrays microplates and chip-based arrays are referred to as plates herein).
  • 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
  • reporter gene assays particularly limited, but include reporter gene assays, immunoassays, fingerprint assays, etc.
  • the invention also displays plate-wide statistics, such as signal-to-noise ratio and variability,
  • Figure 1 is a drawing of a prior art display screen from a high throughput screening
  • 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 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 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
  • control wells on assay plates 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
  • stimulation reactive than the material in the high control well
  • 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
  • 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
  • Each cell in columns 2-11 includes 2 values: the actual test data is presented on top and the sample number is presented below.
  • 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
  • pressing button 291 connects the program to the
  • button 292 disconnects the system from the database and button 293 causes 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
  • 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
  • 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 such that they are easily distinguishable, and all data between two thresholds are presented in the same color.
  • % Stimulation is chosen as 10% (10%-38%); the second threshold is chosen as 38% (38%-
  • 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
  • Table 510 also includes an indication of the number of "hits" for
  • the height of the bar indicators represents the number of hits.
  • 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 are surrounded by a black outline box 550) or de-selected (by clicking on it a second time).
  • the screen 500 provides a
  • 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.
  • This type of correlation in the data may be a "fluke,” but it also might be of
  • cell of the tables 81 Oa-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.
  • circle will be solid for hits exhibiting inhibition, while the circle will be "hollow” for hits
  • Wells may be selected by left-clicking on the desired
  • This screen includes a table 610 in a format similar to that of the prior
  • 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 respective source plate wells).
  • Each cell of plate table 101 Oa-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 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 CV 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
  • the row S/N 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 121 Oa-n includes a number of vectors
  • each vector represents the result, such as
  • results may be expressed as average, maximum, minimum, or mean (or any other relationship) "% Inhibition.”
  • %Inhibition 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
  • Aplates (plate) -window(i) 1 - ( (stdevData(i) * ZRange + ZRange * ZStDevLowli) ) / Abs (daverage(i) - ZLowAv erage(i) ) )
  • CVSumHighSquares CVSumHighSquares (cSTATALL) + ( (CVHighAverage (cSTATALL) - Aplates (plate) -Well ( rw, cl) .Raw) * _
  • CVSumHighSquares (cSTATGOOD) + ( (CVHighAverage (cSTATGOOD) - Aplates (plate ) -WelKrw, cl) -Raw) * _
  • CVSu LowSquares CVSumLowSquares (cSTATALL) + I (CVLowAverage (cSTATALL) - Aplates (plate) -Welllrw, cl) -Raw) * _
  • CVSumLowSquares (cSTATGOOD) + ( (CVLowAverage (cSTATGOOD) - Aplates (plate) -W ell (rw, cl) .Raw) * _
  • SNSumHighSquares SNSumHighSquares (cSTATALL) + ( (SNHighAverage(cSTATALL) - Aplates (plate) -Well I i rw, cl) .Raw) * _
  • SNSumHighSquares SNSumHighSquares (cSTATGOOD) + ( (SNHighAverage (cSTATGOOD) - Aplates (plate ) .Welllrw, cl) .Raw) * _
  • SNSumLowSquares SNSumLowSquares (cSTATGOOD) + ( (SNLowAverage (cSTATGOOD) - Aplates (plate) .W ell (rw, cl) .Raw) * _
  • ZSumHighSquares ZSumHighSquares (cSTATALL) + ( (ZHighAverage (cSTATALL) - Aplates (plate) -WelKrw, cl) -Raw) * _
  • ZSumHighSquares ZSumHighSquares (cSTATGOOD) + ( (ZHighAverage (cSTATGOOD) - Aplates (plate) .W ell(rw, cl) .Raw) * _
  • Aplates (plate) .Welllrw, cl).Inhib(i) 100 * (1 - (Aplates (plate) -Well (rw, cD.Raw - (InhLowli ) / InhLowCount ( i )) ) / (daverageli) - (InhLowli) / InhLowCount (i) )) )
  • InhSumHighSquares (cSTATGOOD) + ( (InhHighAverage (cSTATGOOD) - Aplates (pi ate) .WelKrw, cD.Raw) *
  • InhSumLowSquares (cSTATALL) + I (InhLowAverage (cSTATALL) - Aplates (plate) -Well( rw, cl) .Raw) * _
  • SNHighAverage (i) SNHigh(i) / SNHighCount (i)
  • CVHighAverage (i) cNODATA End If If ZHighCount (i) ⁇ > 0 Then
  • ZLowAverage (i ) ZLow(i) / ZLowCount(i)
  • CVHigh ( cSTATALL) CVHigh (cSTATALL) + Aplates (plate) .Well (rw, cD.Raw
  • InhHigh InhHigh (cSTATGOOD) + Aplates (plate ) .Well (rw, cD .
  • CVHigh (cSTATGOOD) CVHigh (cSTATGOOD) + Aplates (plate) -Well (rw, cD.Raw
  • CVLowl cSTATGOOD CVLow (cSTATGOOD) + Aplates (plate) -WelKrw, cD.Raw
  • Aplates (plate) .BadWells Aplates (plate) .BadWells & " " & ChrS (Asc ( “A” ) + rw) - cl t 1
  • Public Const cMin 0
  • Public Const cMax 1
  • Av g Data ( 2 ) As S ingle ' window ( 2, A S S ingle ⁇ of se p eration f or control values
  • Type AssaySummaryType for viewing summary performance across assays Name As String Averagelnhib As Double AverageStim As Double Maximum As Double Minimum As Double
  • SelectedCompounds IMyLevel + 1) SelectedCompounds IMyLevel + 1) - 1
  • FNu FreeFile Open fname For Output As FNum
  • OutLine OutLine & "Assay” & asy + 1 & tb & "Avg. Inhib” & tb & “Avg. Stim” & tb & "Max Inhib” & tb & “Max St im” & tb
  • OutLine OutLine & CompoundSummary (cmpd) .assay (asy) .Name & tb
  • OutLine OutLine & CompoundSummary (cmpd) .assay (asy) .Averagelnhib & tb
  • OutLine OutLine & CompoundSummary (cmpd) .assay (asy) .AverageStim & tb
  • OutLine OutLine & CompoundSummary(cmpd) .assay(asy) .Maximum & tb
  • OutLine OutLine & CompoundSummary (cmpd) .assay(asy) -Minimum & tb
  • Printer .CurrentY 2 * ( (Printer . fontsize 17) / (Printer.Height / Printer .ScaleHeight) ]
  • Printer. CurrentY Printer .CurrentY + ( (Printer . fontsize * 0.5) / (Printer .Height / Printer .ScaleHeight) )
  • hDC. fontsize (( (hDC.Height / hDC. ScaleHeight) / 20) * 0.33 + 0.1)
  • hDC.Line (px - 1.1, py - l.l)-(px + 1.1. py + 1.1), vbWhite, BF

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 CV (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 CV (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 TRS01 A1014A
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 81 Oa-n, with each table 81 Oa-n representing the results of an assay plate. Each
cell of the tables 81 Oa-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 101 Oa-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 CV 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/N boxes 1 110a, 1110c are entirely filled with
the appropriate color. The row S/N 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/N, then the upper half of the row S/N box 1 1 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 121 Oa-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(O) .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)
Splates(cSPLATE, spit) .StatsStarted = False End Sub
Public Sub CalcCompoundCVIsplt As Integer, rw As Integer, cl As Integer)
Dim stdev(2) As Double
Dim suπιsq(2) As Double
Dim avg(2) As Double
Dim Sample As Integer
Dim stat As Integer
Dim value As Double
Dim valstr As String
Dim valent As Integer ,' . Dim pos As Integer Dim highval(2) As Double Dim lowval(2) As Double
For stat = cSTATALL To cSTATGOOD su sq(stat) = 0 pos = 0 valstr = SplateslcSPLATE, spit) .assay(O) .Well (rw, cl) .ResultString(stat) valent = SplateslcSPLATE, spit) .assay (0) .Well (rw, cl) .ResultsCount (stat) highval(stat) = -999999999
Functions - 10
SplateslcSPLATE, spit) .assay(0) .Well (rw, cl ). ResultString (cSTATALL) = SplateslcSPLATE, spl t) -assay(O) .Well (rw, cl) .ResultStrin (cSTATALL) & " , " & Forma (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(O) .Well (rw, cl) .ResultsCoun (cSTATGOOD)
SplateslcSPLATE, spit) .assay(0) .Well (rw, cl) .ResultString(cSTATGOOD) = SplateslcSPLATE , spit) .assay (0) .Welllrw, cl) .ResultString (cSTATGOOD) & " , " & Format (Aplates (aplt) .Well (rw, cl) .Inhib(cSTATGOOD) , "000.000 ")
End If End If If SplateslcSPLATE, spit) .assay(O) .Well (rw, cl) .ResultsCount(stat) > 0 Then
SplateslcSPLATE, spit) .assay(0) .Well (rw, cl) . Inhib(stat) = SplateslcSPLATE, spit) .assay(O) .WelKrw, cl) . Inhiblstat) / 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) .assa (0) .Well (rw, cl) .Extreme (cHIGH, cSTATGOOD) & " " &
SplateslcSPLATE, spit) .assay(O) .Well (rw, cl) .Extreme (cLOW, cSTATGOOD) & SplateslcSPLATE, spit) . assay (0) .Welllrw, cl) .Inhib IcSTATGOOD) & " " & _ SplateslcSPLATE, spit) .assay(0) .Welllrw, cl) .ResultString (cSTATGOOD)
End If Next stat Next cl Next rw Else 'Add a new Splate record to the empty slot ' set plate level info SplateslcSPLATE, spit) StatsStarted = True
Splates(cMPLATE, spit) PlatelD = Aplates (aplt) . PlateΙD(cMPLATE) SplateslcDPLATE, spit) PlatelD = Aplates (aplt) . PlatelD(cDPLATE) ' set well level info For rw = 0 To 7
For cl = 0 To 11
SplateslcSPLATE, spit) .assay(0) .Well (rw, cl) .Type = Aplates (aplt) .Well (rw, cl) .Type SplateslcSPLATE, spit) .assay(0) .Well (rw, cl).Compound = Aplates (aplt) .Well (rw, cl) .Compound For stat = cSTATALL To cSTATGOOD
SplateslcSPLATE, spit) .assay (0) .Well (rw, cl) . Inhiblstat) = Aplates (aplt) .Well (rw, cl).Inhib(st at)
SplateslcSPLATE, spit) .assay(0) .Well (rw, cl) .Extreme (cLOW, stat) = (Aplates (aplt) .Well (rw, cl)
.Inhib(stat) )
SplatestcSPLATE, spit) .assay(0) .Well (rw, cl) .Extreme IcHIGH, stat) = (Aplates (aplt) .Well (rw, cl ) .Inhiblstat) )
If stat = cSTATALL Then
(aplt) .Welllrw, cl) . Inhib(c
Figure imgf000019_0001
If Aplates (aplt) .Well (rw, cl) .Good Then
SplatestcSPLATE, spit) .assay (0) .Well (rw, cl) . ResultsCoun (cSTATGOOD) = 1 SplateslcSPLATE, spit) .assay(0) .Well (rw, cl) .ResultString (cSTATGOOD) = "," & Format (Ap lates (aplt) .WelKrw, cl) . Inhib(cSTATGOOD) , "000.000")
On Error spit
Whil
Figure imgf000020_0001
Wend
Exit Sub finished: End Sub
Public Sub CalcSPlateStat (spit As Integer) Dim pit As Integer Dim aplt As Integer ' Dim pl type 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 Dim stdev(2) As Single Dim found As Boolean Dim firstrecord As Boolean
While Aplates (aplt) . PlatelDIcAPLATE) <> " " ►L. found = False oo if (Aplates (aplt) . PlatelD IcSPLATE) = SplateslcSPLATE, spi ). PlatelD) Then found = True End If
If found Then
If SplateslcSPLATE, spit) . StatsStarted Then 'add plate stats to the existing splate For rw = 0 To 7
For cl = 0 To 11
For stat = cSTATALL To cSTATGOOD
SplateslcSPLATE, spit) .assay (0) .Well (rw, cl) . Inhiblstat) = (Aplates (aplt) .Well (rw, cU.Inhibls tat) + _
(SplateslcSPLATE, spit) .assay(0) .Well (rw, cl) .Inhib(stat) * SplateslcSPLATE, spit) .assaylO ) .WelKrw, cl) .ResultsCount (stat) ) )
If SplatestcSPLATE, spit) . assay(0) .Well (rw, cl) -Extreme (cLOW, stat) > (Aplates (aplt) .Well (rw, cl) .Inhib(stat) ) Then
SplateslcSPLATE, spit) .assay(0) -Well (rw, cl ) .Extreme IcLOW, stat) = (Aplates (aplt) .Well (rw, cl) . Inhiblstat) )
End If
If SplatestcSPLATE, spit) .assay(0) -Welllrw, cl) . Extreme (cHIGH, stat) < (Aplates (aplt) -WelKrw, cl) .Inhiblstat) ) Then
SplatestcSPLATE, spit) .assay (0) -WelKrw, cl) -Extreme tcHIGH, stat) = (Aplates (aplt) -Well (rw cl) . Inhiblstat) )
End I
If stat = cSTATALL Then
SplateslcSPLATE, spit) .assay (0) .Welllrw, cl) -ResultsCount (cSTATALL) = 1 + SplateslcSPLATE, spit) -assay(O) .Well (rw, cl) . esultsCount (cSTATALL)
' the control Z statistic
If ControlSource = cCONTROLS Then
If ZStDevHigh(i) <> cNODATA And ZStDevLow(i) <> cNODATA And (ZHighAverage (i) - ZLowAverage (i) <> 0) Then
Aplates (plate) .window(i) = 1 - ( (ZStDevHigh (i) * ZRange + ZRange * ZStDevLow(i) ) / (ZHighAverage (i) - ZLow
Average (i) ) )
Else
Aplates (plate) -window(i) = cNODATA
End If
Else
If .stdevData(i) <> cNODATA And ZStDevLow(i) <> cNODATA And (daverage(i) - ZLowAverage (i) <> 0) Then
Aplates (plate) -window(i) = 1 - ( (stdevData(i) * ZRange + ZRange * ZStDevLowli) ) / Abs (daverage(i) - ZLowAv erage(i) ) )
Else
Aplates (plate) -window(i) = cNODATA End If End If
Functions - 9
If i = 0 Then
Debug. Print Aplates (plate) -PlatelD(cAPLATE) ; ": Z= " ; Aplates (plate) .window(i) End If Next i vθ spit = 0 found = False
Do While (SplatestcSPLATE, spit) . PlatelD <> "") And (Not found)
If (Aplates (plate) .PlatelD(cSPLATE) = SplatestcSPLATE, spit) . PlatelD) Then found = True Else spit = spit + 1 '
End If Loop I
If found Then 'Splate already entered
Else 'Not found - add a new Splate record to the empty slot ' set plate level info
SplatestcSPLATE, spit) . PlatelD = Aplates (plate) . PlatelD(cSPLATE)
SplateslcMPLATE, spit) . PlatelD = Aplates (plate) . PlateΙD(cMPLATE)
SplateslcDPLATE, spit) . PlatelD = Aplates (plate) .PlatelD(cDPLATE)
SplateslcDPLATE, spit) . StatsStarted = False
End If 'found
End Sub
Public Sub CalcSPlateStatsl) Dim spit As Integer Dim t pstring As String
Figure imgf000022_0001
Figure imgf000023_0001
Functions - 7
End If
If Aplates (plate) .Well (rw, cl) .Type = CVCtllcHIGH) Then CVSumHighSquares (cSTATALL) = CVSumHighSquares (cSTATALL) + ( (CVHighAverage (cSTATALL) - Aplates (plate) -Well ( rw, cl) .Raw) * _
(CVHighAverage (cSTATALL) - Aplates (plate) .Well (rw, cD.Raw)) If Aplates (plate) -Well (rw, cl).Good Then
CVSumHighSquares (cSTATGOOD) = CVSumHighSquares (cSTATGOOD) + ( (CVHighAverage (cSTATGOOD) - Aplates (plate ) -WelKrw, cl) -Raw) * _
(CVHighAverage (cSTATGOOD) - Aplates (plate) .Well (rw, cD.Raw)) End If End If If Aplates (plate) .WelKrw, cl) .Type = CVCtKcLOW) Then
CVSu LowSquares (cSTATALL) = CVSumLowSquares (cSTATALL) + I (CVLowAverage (cSTATALL) - Aplates (plate) -Welllrw, 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 = SNCtl(cHIGH) Then
SNSumHighSquares (cSTATALL) = SNSumHighSquares (cSTATALL) + ( (SNHighAverage(cSTATALL) - Aplates (plate) -Well I i rw, cl) .Raw) * _
^ (SNHighAverage (cSTATALL) - Aplates (plate) .WelKrw, cD.Raw)) i If Aplates (plate) .Well (rw, cD.Good Then
SNSumHighSquares (cSTATGOOD) = SNSumHighSquares (cSTATGOOD) + ( (SNHighAverage (cSTATGOOD) - Aplates (plate ) .Welllrw, cl) .Raw) * _
(SNHighAverage (cSTATGOOD) - Aplates (plate) .Well (rw, cD.Raw)) End If End If If Aplates (plate) .WelKrw, cl) .Type = SNCtl (cLOW) Then
SNSumLowSquares (cSTATALL) = SNSumLowSquares (cSTATALL) + ( (SNLowAverage (cSTATALL) - Aplates (plate) -WelKrw, cl) -Raw) *
(SNLowAverage (cSTATALL) - Aplates (plate) -Welllrw, cD.Raw)) If Aplates (plate) .Well (rw, cl) .Good Then
SNSumLowSquares (cSTATGOOD) = SNSumLowSquares (cSTATGOOD) + ( (SNLowAverage (cSTATGOOD) - Aplates (plate) .W ell (rw, cl) .Raw) * _
(SNLowAverage (cSTATGOOD) - Aplates (plate) .Well (rw, cD.Raw)) End If End If
If Aplates (plate) -Well (rw, cD.Type = ZCtKcHIGH) Then
ZSumHighSquares (cSTATALL) = ZSumHighSquares (cSTATALL) + ( (ZHighAverage (cSTATALL) - Aplates (plate) -WelKrw, cl) -Raw) * _
(ZHighAverage (cSTATALL) - Aplates (plate) .WelKrw, cD.Raw))
If Aplates (plate) -Welllrw, cD.Good Then
ZSumHighSquares (cSTATGOOD) = ZSumHighSquares (cSTATGOOD) + ( (ZHighAverage (cSTATGOOD) - Aplates (plate) .W ell(rw, cl) .Raw) * _
(ZHighAverage (cSTATGOOD) - Aplates (plate) .WelKrw, cD.Raw)) End If
For rw = 0 To 7
For ςl = 0 To 11
' % Inhibition
For i = CSTATALL To cSTATGOOD
If InhLowCoun (i) <> 0 Then
If ControlSource = cCONTROLS Then
If (InhHighAverage(i) - (InhLowli) / InhLowCount (i) ) ) <> 0 Then
Aplates (plate) .Welllrw, cl).Inhib(i) = 100 * (1 - (Aplates (plate) -Well (rw, cl) .Raw - (InhLowli
) / InhLowCount (i) ) ) / (InhHighAverageli) - (InhLowli) / InhLowCount (i) )) )
Else ' haverage = 0, No good High Control Wells
Aplates (plate) .WelKrw, cl).Inhib(i) = cNODATA End If Else
If (daverage(i) - (InhLowli) / InhLowCount (i) ) ) <> 0 Then
Aplates (plate) .Welllrw, cl).Inhib(i) = 100 * (1 - (Aplates (plate) -Well (rw, cD.Raw - (InhLowli ) / InhLowCount ( i )) ) / (daverageli) - (InhLowli) / 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) .Welllrw, cl).Inhib(i) <> cNODATA Then to Aplates (plate) -Welllrw, cl).Stim(i) = 100 - Aplates (plate) -WelKrw, cl).Inhib(i)
<-° Else
Aplates (plate) .WelKrw, cl) .Stim(i) = cNODATA ' End If
Next i
If Aplates (plate) .Welllrw, cD.Type = ActCtl (cHIGH) Then
InhSumHighSquares (cSTATALL) = InhSumHighSquares (cSTATALL) + ( (InhHighAverage (cSTATALL) - Aplates (plate) .We 11 (rw, cl) .Raw) * _
(InhHighAverage (cSTATALL) - Aplates (plate) -Well (rw, cD.Raw)) If Aplates (plate) .Well (rw, cD.Good Then
InhSumHighSquares (cSTATGOOD) = InhSumHighSquares (cSTATGOOD) + ( (InhHighAverage (cSTATGOOD) - Aplates (pi ate) .WelKrw, cD.Raw) *
(InhHighAveragelcSTATGOOD) - Aplates (plate) -Well (rw, cD.Raw))
End If End If
If Aplates (plate) .WelKrw, cD.Type = ActCtl (cLOW) Then
InhSumLowSquares (cSTATALL) = InhSumLowSquares (cSTATALL) + I (InhLowAverage (cSTATALL) - Aplates (plate) -Well( rw, cl) .Raw) * _
(InhLowAverage (cSTATALL) - Aplates (plate) .Well (rw, cD.Raw))
If Aplates (plate) .WelKrw, cD.Good Then
InhSumLowSquares (cSTATGOOD) = InhSumLowSquares (cSTATGOOD) + ( (InhLowAverage (cSTATGOOD) - Aplates (plate
) .WelKrw, cl) .Raw) * _
(InhLowAverage (cSTATGOOD) - Aplates (plate) .WelKrw, cD.Raw)) End If
' Average High Control
If InhHighCount (i) <> 0 Then
InhHighAverage Ii) = InhHighli) / 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 If CVHighCount(i) <> 0 Then
CVHighAverage(i) = CVHlgh(i) / CVHighCount (i) Else
CVHighAverage (i) = cNODATA End If If ZHighCount (i) <> 0 Then
Functions - 6
ZHighAverage (i) = ZHigh(i) / ZHighCount (i) Else
ZHighAverage ( i ) = cNODATA End If
If InhLowCount (i) <> 0 Then
InhLowAverage (i) = InhLow(i) / InhLowCount (i) Else
InhLowAverage (i) = cNODATA End If If SNLowCount (i) <> 0 Then
SNLowAverage (i ) = SNLow(i) / SNLowCount (i) Else
SNLowAverage (i) = cNODATA End If If CVLowCount (i ) <> 0 Then
CVLowAverage (i ) = CVLow(i) / CVLowCount (i) Else
CVLowAverage (i) = cNODATA End If "
If ZLowCount(i) <> 0 Then
ZLowAverage (i ) = ZLow(i) / ZLowCount(i)
Else
ZLowAverage (i) = cNODATA
End If
If dcount (i ) <> 0 Then
Figure imgf000026_0001
daverage ( i ) = Dsum ( i ) / dcount ( i )
Else daverage (i) = cNODATA
End If Next i
Figure imgf000027_0001
A C
3 o c e
. — . u
3 o — z c
^ u c c -. 3 u o z u 3
^ c z cn —
3 o 3 ^-. 3 o - —
. — . z c — c -
A 3 . — .
" a. u — —
— c g c
3
3
- o 3 3 o
< — c c z υ o 3 "- 3.
< c cn <
Figure imgf000027_0002
' All wells, regardless of status
If Aplates (plate) .WelKrw, cD.Type = ActCtllcHIGH) Then
InhHigh IcSTATALL) = InhHigh(cSTATALL) + Aplates Iplate) .Well (rw, cD.Raw
InhHighCount (cSTATALL) = InhHighCount (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) -Well (rw, cD.Raw rowsignalcount (rw, cSTATALL) = rowsignalcount (rw, cSTATALL) - 1
End If
Elself Aplates (plate ) .WelK rw, cD . Type = ActCtKcLOW) Then
InhLow (cSTATALL) = I nhLow (cSTATALL) + Aplates (plate) . WelKrw, cD . Raw
InhLowCoun (cSTATALL) = InhLowCount (CSTATALL) + 1
'subtract low control from a row so that it can be added in again later, zeroing itself out rowsignallrw, cSTATALL) = rowsignallrw, cSTATALL) - Aplates (plate) .Well (rw, cD.Raw rowsignalcount (rw, cSTATALL) = rowsignalcount (rw, cSTATALL) - 1 Else
Dsum (cSTATALL) = Dsum (cSTATALL) + Aplates (plate) .WelKrw, cD . Raw dcount (cSTATALL) = dcount (cSTATALL) + 1 End If rowsignaKrw, cSTATALL) = rowsignallrw, cSTATALL) + Aplates (plate) .Well (rw, cD.Raw rowsignalcoun (rw, cSTATALL) = rowsignalcount (rw, cSTATALL) + 1
If Aplates (plate) .WelKrw, cD.Type = SNCtKcHIGH) Then
SNHigh (cSTATALL) = SNHigh (cSTATALL) + Aplates (plate) .WelKrw, cD.Raw
SNHighCount (cSTATALL) = SNHighCount (cSTATALL) + 1 Elself Aplates (plate) .Welllrw, cD.Type = SNCtltcLOW) Then
Functions - 5
SNLowtcSTATALL) = SNLowlcSTATALL) + Aplates (plate) .Well (rw, cD.Raw SNLowCount (cSTATALL) = SNLowCount (cSTATALL) + 1 End If
If Aplates (plate) .WelKrw, cD.Type = CVCtKcHIGH) Then
CVHigh (cSTATALL) = CVHigh (cSTATALL) + Aplates (plate) .Well (rw, cD.Raw
CVHighCount (cSTATALL) = CVHighCount (cSTATALL) + 1 Elself Aplates (plate) .WelKrw, cD.Type = CVCtKcLOW) Then
CVLow (cSTATALL) = CVLow(cSTATALL) + Aplates (plate) .Well (rw, cD.Raw
CVLowCoun (cSTATALL) = CVLowCount (cSTATALL) + 1
End If
If Aplates (plate ) .Well lrw, cD . Type = ZCtl lcHIGH) Then
ZHigh (CSTATALL) = ZHigh (cSTATALL) + Aplates (plate) . Well ( rw, cD . Raw
ZHighCount (cSTATALL) = ZHighCount (cSTATALL) + 1
Elself Aplates (plate) . WelK rw, cD . Type = ZCtKcLOW) Then
ZLow (cSTATALL) = ZLow (cSTATALL) + Aplates (plate) . WelK rw, cD . Raw ZLowCount (cSTATALL) = ZLowCount (CSTATALL) + 1
End If
' High / Low Control gathering For rw = 0 To 7
For cl = 0 To 11
If Aplates (plate) - Well lrw, cD . Good Then
I f Aplates (plate) . Well ( rw, cD . Type = ActCtl ( cHIGH) Then
InhHigh (CSTATGOOD) = InhHigh (cSTATGOOD) + Aplates (plate ) .Well (rw, cD . Raw
InhHighCount (cSTATGOOD) = InhHighCount (cSTATGOOD) + 1
If ControlSource <> cCONTROLS Then ' If control wells are ignored, subtract it here to cancel out late rowsignallrw, cSTATGOOD) = rowsignallrw, cSTATGOOD) - Aplates (plate) .WelKrw, cD.Raw rowsignalcount (rw, cSTATGOOD) = rowsignalcoun (rw, cSTATGOOD) - 1 End If Elself Aplates (plate) .WelKrw, cD.Type = ActCtl (cLOW) Then
InhLow(cSTATGOOD) = InhLowl cSTATGOOD) + Aplates (plate) -WelKrw, cD.Raw InhLowCount (cSTATGOOD) = InhLowCount (cSTATGOOD) + 1
'subtract low control from a row so that it can be added in again later, zeroing itself out rowsignallrw, cSTATGOOD) = rowsignal (rw, cSTATGOOD) - Aplates (plate) .WelKrw, cD.Raw rowsignalcount (rw, cSTATGOOD) = rowsignalcount (rw, cSTATGOOD) - 1 Else
Dsum (cSTATGOOD) = Dsum (cSTATGOOD) + Aplates (plate) .WelKrw, cD.Raw dcount (cSTATGOOD) = dcount (cSTATGOOD) + 1 End If rowsignallrw, cSTATGOOD) = rowsignallrw, cSTATGOOD) + Aplates (plate) .Well (rw, cD.Raw rowsignalcount (rw, cSTATGOOD) = rowsignalcount (rw, cSTATGOOD) + 1
If Aplates (plate) .WelKrw, cD.Type = SNCtl(cHIGH) Then , SNHigh (cSTATGOOD) = SNHigh (cSTATGOOD) + Aplates (plate) -WelKrw, cD.Raw
^ SNHighCount (cSTATGOOD) = SNHighCount (cSTATGOOD) + 1 i Elself Aplates (plate) .WelKrw, cD.Type = SNCtKcLOW) Then
SNLowl cSTATGOOD) = SNLow (cSTATGOOD) + Aplates (plate) -Wellfrw, cD.Raw SNLowCount (cSTATGOOD) = SNLowCount (cSTATGOOD) + 1 End If
If Aplates (plate) .WelKrw, cD.Type = CVCtl(cHIGH) Then
CVHigh (cSTATGOOD) = CVHigh (cSTATGOOD) + Aplates (plate) -Well (rw, cD.Raw
CVHighCount (cSTATGOOD) = CVHighCount (cSTATGOOD) + 1 Elself Aplates (plate) .WelKrw, cD.Type = CVCtl(cLOW) Then
CVLowl cSTATGOOD) = CVLow (cSTATGOOD) + Aplates (plate) -WelKrw, cD.Raw
CVLowCount (cSTATGOOD) = CVLowCount (cSTATGOOD) + 1 End If
If Aplates (plate) .WelKrw, clJ.Type = ZCtKcHIGH) Then
ZHigh (cSTATGOOD) = ZHigh (cSTATGOOD) + Aplates (plate) .Well (rw, cl).Raw
ZHighCount (cSTATGOOD) = ZHighCount (cSTATGOOD) + 1
Elself Aplates (plate) -Well (rw, cD.Type = ZCtKcLOW) Then
ZLow (cSTATGOOD) = ZLow(cSTATGOOD) + Aplates (plate) .WelKrw, cD.Raw
ZLowCount (cSTATGOOD) = ZLowCount (cSTATGOOD) + 1
End If
Else
Aplates (plate) .BadWells = Aplates (plate) .BadWells & " " & ChrS (Asc ( "A" ) + rw) - cl t 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 CVStDevLow(i) = 0
ZHigh (i) = 0 ZLow(i) = 0 ZHighCount (i) = 0 ZLowCount (i) = 0 ZHighAverage (i) = 0 ZLowAverage (i) = 0 ZSumHighSquares (i) = 0 ZSumLowSquares (i) = 0 ZStDevHigh(i) = 0 ZStDevLow(i) = 0
InhHighli) = 0 InhLowli) = 0 InhHighCount (i) = 0 , InhLowCount (i) = 0 t InhHighAverage (i) = 0
^ InhLowAverage (i) = 0
InhSumHighSquares (i) = C InhSumLowSquares (i ) = 0 InhStDevHigh(i) = 0 InhStDevLow(i) = 0 Next i
Dsum(cSTATALL) = 0 Dsum(cSTATGOOD) = 0 dcount (cSTATALL) = 0
Functions - 4 dcoun (cSTATGOOD) = 0 daverage (cSTATALL) = 0 daverage (cSTATGOOD) = 0
SumDataSquares (cSTATALL) = 0
SumDataSquares (cSTATGOOD) = 0 stdevData (cSTATALL) = 0 stdevData (cSTATGOOD) = 0
Aplates (plate) -BadWells = " "
Functions -
Dim SNStDevHigh(2) As Double
Dim SNStDevLow(2) As Double Dim CVHigh (2) As Double
Dim CVLow(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 ZLo\-Count (2) As Integer
Dim ZHighAverage (2) As Double
Dim ZLowAverage (2) As Double
Dim ZSuriHighSquares (2) As Double
Dim ZSumLowSquares (2) As Double , Dim ZStDevHigh(2) As Double
NJ Dim ZStDevLow(2) As Double
Dim, InhHigh (2) As Double Dim I InhLow (2 ) As Double Dim InhHighCount (2) As Integer Dim InhLowCount (2) As Integer Dim InhHighAverage (2) As Double Dim InhLowAverage (2 ) As Double Dim InhSumHighSquares (2) As Double Dim InhSumLowSquares (2) As Double Dim InhStDevHigh (2) As Double Dim InhStDevI,ow(2) As Double
For i = cSTATALL To cSTATGOOD
SNHigh (i) = 0
SNLow(i) = 0
SNHighCount (i) = 0
SNLowCount (i) = 0
SNHighAverage (i) = 0
SNLowAverage (i) = 0
SNSumHighSquares ( i ) = 0
SNSumLowSquares (i ) = 0 SNStDevHigh(i) = 0 SNStDevLσw(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
Dim rowsignaltθ, 2) As Single
Dim rowsignalcount (8, 2) As Single
'Dim haverage (2) As Single
'Dim AHAverage(2) As Single
'Dim leverage (2) As Single
Dim daverage (2) As Single
'Dim SumHighSquares (2) As Double
'Dim SumAHSquares (2) As Double ,
'Dim SumLowSquares(2) As Double tjj Dim SumDataSquares (2) As Double O 'Dim stdevHigh(2) As Single
'Dim stdevAH(2) As Single
'Dim stdevLow(2) As Single
Dim stdevData (2) As Single
Dim found As Boolean
Dim SNHigh (2) As Double Dim SNLow(2) As Double Dim SNHighCount (2) As Integer Dim SNLowCount (2) As Integer Dim SNHighAverage (2) As Double Dim SNLowAverage (2) As Double Dim SNSumHighSquares (2) As Double Dim SNSumLowSquares (2) As Double
Figure imgf000032_0001
Functions - 2
Format (SplatestcSPLATE, spit ) .assay(0) .Well (rw, cl) .Extreme (cHIGH, cSTATGOOD), -###.0000") -. ", &
Format (SplateslcSPLATE, spit) .assay (0) .Well (rw, cl) .Extreme (cLOW, cSTATGOOD), "###.0000'') fc " , " & " to_date ( to_char (SYSDATE, ' DD-MON-YYYY ' ) , ' DD-MON-YYYY ' ) ) "
Debug. Print spit, rw, cl, strSQL
Set rsSu mary = DB.OpenRecordset (strSQL, dbOpenForwardOnly) rsS-unmary.Close End If Next cl Next rw Next spit
End Sub
Public Sub Initt)
' Used to reset ALL values to their defaults
Dim i As Integer
' === Reset Global Variables
' === Clear Global Data Structures
' Clear Assays
For i = 0 To TtlSplates - 1
SplateAssays (i) .AssayCode = " " SplateAssays (i) .AssayName = "" SplateAssays (i) . ttlcount = 0 SplateAssays (i) .GoodCount = 0 SplateAssays (i) .Selected = False ■ Next i
' set colors for threshold values For i = cLIMITINHIB To cLIMITPLATECV
Clrli, 0) = frmLimits.txtValti * 3) .Bac Color Clrti, 1) = frmLimits. txtValli * 3 + 1) .BackColor Clrti, 2) = frmLimits. txtValli * 3 + 2). BackColor
Figure imgf000033_0001
' === Close All Forms Except Signin
Unload frmPreSelect End Sub
Public Sub UpdateSummarylassay 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 spit = 0
SplateList = ""
While SplateslcSPLATE, spit) . PlatelD <>
SplateList = SplateList S " '" & SplatestcSPLATE, spit) . PlatelD & spit = spit + 1 Wend
SplateList = Left (SplateList, Len (SplateList) - 1) strSQL = "Delete from
Figure imgf000034_0001
where assay_code = '" & assay fc "' and splate_id in ( " & SplateList & ")
Debug. Print strSQL
Set rsSummary = DB.OpenRecordset (strSQL, dbOpenSnapshot) rsSummary.Close i ' Popup a status bar here!
^ For spit = 0 To TtlSplates
' For rw = 0 To 7
For cl = 0 To 11
If SplateslcSPLATE, spit) .assay (0) .Well (rw, cl) .Compound <> *" And _
SplateslcSPLATE, spit) .assay(0) .Well (rw, cl) . Inhib (cSTATGOOD) <> cNODATA Then ' Not a control well strSQL = "insert into Tropix_Compound_Summary (COMPOUND_ID, splate_id, ASSAY_CODE, AVERAGE_INHIBITION, • fc
" MAXIMUM_INHIBITION, MINIMUM_INHIBITION, MODIFIED_DATE) values " fc
" ('" & SplateslcSPLATE, spit) .assay(O) .WelKrw, cl) .Compound & •,•« & _
SplatestcSPLATE, spit) . PlatelD fc ' , ' & _ assay & " ' , " fc _
Format (SplatestcSPLATE, spit) .assay (0) .Well (rw, cl) . Inhib (cSTATGOOD) , "###.0000") fc "," fc _
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 = MsgBoxl "re-Initialize summary statistics before exit?", vbYesNoCancel , "Exiting Data Display")
Debug. Print answer
If answer = 7 Then ' No
Unload frmAPlateGraphic
Unload frmCompoundList
Unload frmLimits
Unload frτnPreSelect
Unload frmSelectedPlates
Unload frmSignln
Unload frmSplash
Unload frmSPlateGraphic § Unload rmSummaryParent
C-J End
V Elself answer = 6 Then
UpdateSummary (AssayName)
Unload frmAPlateGraphic
Unload f mCompoundList
Unload frmLimits
Unload frmPreSelect
Unload frmSelectedPlates
Unload frmSignln
Unload frmSplash
Unload frmSPlateGraphic
Unload frmSummaryParent
End . End If End Sub
Public Function mintnl As Double, n2 As Double) As Single
If nl < n2 Then min = nl
Else min = n2 End If
End Function
Public ControlSource As Integer ' cCONTROLS, CASSAYDATA, CPLATEDATA
' Global Data Structures
Public SplateAssays I) As AssayType ' summary assay plate info for frmPreselect
Public SplateAssaysGridl ) 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 SplatesO As SumPlateType ' (Type, number) The Source, Master, and Daughter plates chosen on frmPreselect
Public Splateslndexl ) 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 CompoundSummary( ) As CompoundSummaryType ' holds all summary info across assays (summary view only)
Public CortipoundSummarylndex As New Collection
Public TempRs (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
CJ Public ViewStim As Integer J
Public ActCtl (2) As String
Public ZCtl(2) As String
Public CVCtl(2) As String
Public SNCtl(2) As String
Public ZRange As Single
' FOR SUMMARY VIEWING - DISTRIBUTE AS NEEDED
Public Const cMin = 0 Public Const cMax = 1
Type KeyType
AssayName(20) As String keyvals(20, 2) As Double keypts(20) As Point keyends(20) As Point
End Type
Public key As KeyType
Public KeyLimits (cMAXSUMMARYLEVEL, 20, 2) As Double
Public LineColors (20) As ColorConstants
Public SelectMode As Integer ' cSELSPLATE, cSELASSAY, or cSELBOTH (frmPreSelect)
' Used to determinse structure of the SQL query for retrieving aplate/awell info
Public SelectStat As Integer ' cSTATLL, cSTATGOOD ( rmPreSelect)
' 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 MaxAssayCompounds As Integer ' the most times a compound has been assayed CJJ Public AplatesSubSelected As Integer ' the number of Aplates currently selected for detailed viewing Y1 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
Public AssayName As String ' Holds the AssayCode of the currently selected assay
Public AssayCount As Integer ' Sumamry View - assays
Public CompoundCount As Long ' Summary view - compounds
Public AssaysSelected As Integer ' Summary Views - # of assays chosen for comparison
Public SummaryLevel As Integer ' Summaryviews - current summarylevel
Public Threshold As Single ' sets the display threshold for trend views
Public ImportType As Integer ' BYSOURCE or BYDATE (frmSignin)
Public AplateFilter As String ' IfrmSignin)
Public SplateFilter As String ' (frmSignin)
Public StartDate As String ' (frmSignin)
Public EndDate As String ' (frmSignin)
' Used for Constant Where clause additions, based on info entered on frmSignin
Public AplateWhere As String
Public SplateWhere As String
Public DateWhere As String
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 count (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 SumPlate,Type
PlateCode As Long
PlatelD As String
ParentCode As Integer
ParentID As String
MaxAssays As Integer assay() As SumAssayType imageindex As String
Selected As Boolean
StatsStarted As Boolean
Top As Single
Left As Single End Type
Type Te pCmpList
PlatelD As String compoundID As String row As Integer col As Integer
Raw As Long
Inhib As Single End Type
Global Variables
Public WS As Workspace
Public CON As Connection
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 compoundtype
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), HighPH") / LowC'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 End Type ' AWellType UJ -J Type APlateType assay As String InhibStDevs(2, 2) As Single Well(8, 12) As AwellType PlatelD (4) As String PlateCode(4) As Long ImportDate As String BadWells As String sn(2) As Single cv(2) As Single
Declarations - 3
AvgData(2) As Single ' window(2, AS Single of seperation for control values
Control (2. 3) As Sing
Figure imgf000039_0001
RowSN(2, 8) As Single
Good As Boolean
Selected As Boolean imageindex As String
DataTop As Single DataLeft As Single PerformTop As Single Perfor Left As Single End Type
Declarations - 2 Type AssayType
SPlatelD 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 row As Integer col As Integer
Inhib(2) As Single
Good As Boolean End Type ' AssayResultType
Type AssaySummaryType ' for viewing summary performance across assays Name As String Averagelnhib As Double AverageStim As Double Maximum As Double Minimum As Double
Date As Date End Type
Type Point ptX(2) As Single ptY(2) As Single End Type
Type CompoundSummaryType ' For viewing summary performance across assays
CompoundName 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
'Used on Splateviews to determine which statistic should be used for displaying Inhibition Public Const cAVERAGE = 0 Public Const CMAXIMUM = 1 Public Const cMINIMUM = 2
§ Public Const cMAXSUMMARYLEVEL = 20 UJ
^ === Type Definitions
' For setting whether Activity is displayed as % Inhibition or % Stimuation
' Used in Calc APlateStats
Public Const cINHIB = 0 ' (1- (D-L) / (H-l) ) * 100
Public Const cSTIM = 1 ' (D-L) /(H-L) * 100
' 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 i 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 'Used for Assay Plate trend statistic
Public Const cLEFTRIGHT = 0 Public Const cTOPBOTTOM = 1
linex = Sin( (Index / AssaysSelected) * 3.14159 * 2) * key . eyvals (Index, cMax) liney = Cos ( (Index / AssaysSelected) * 3.14159 * 2) * key . keyvals (Index, cMax) key. eypts (Index) .ptX(cMax) = linex key. keypts (Index) .ptY(cMax) = liney
' redraw key picKey.DrawWidth = 2 picKey.Line (key .keypts (Index) .pt (cMax) , key. keypts (Index) .ptY (cMax) )- (key .keypts (Index) .ptX(cMin) , key. keypts (In dex) .ptY(cMin) ) , LineColors (Index) picKey.DrawWidth = 1 End If
End Sub
frmSummaryParent - 1
Copyright 1999 Tropix, Inc. Private Sub MDIForm_Load ( )
Dim i As Integer
SummaryLevel = 0 frmSummaryGraphics(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" (envS)
Declare Function SQLDataSources% Lib "ODBC32.DLL" (ByVal henvi, ByVal fdir%, ByVal szDSN$, ByVal cbDSNMax%, pcbDSN% , ByVal szDesc$, ByVal cbDescMax%, pcbDesc%)
' === Global Constants
' For determining Control calculation type Public Const cCONTROLS = 0 Public Const CASSAYDATA = 1 Public Const CPLATEDATA = 2
f rmSummaryGraphic - 8
' if low value now > high value, restore old value, update high value
If Val I txtLowtIndex) .Text) > key. eyvals (Index, cMax) Then txtHigh(Index) .Text = txtLow(Index) .Text txtLowlIndex) .Text = Format (key.keyvals (Index, cMin) , "0.000")
Call txtHigh_LostFocus (Index)
Else
' set key pts key. keyvals (Index, cMin) = Val (txtLowtIndex) .Text) txtLow(Index) .Text = Forma (txtLowlIndex) -Text, "0.000") picKey.DrawWidth = 4 picKey.Line (key. keypts (Index) .ptX(cMin) , key. eypts (Index) .ptY(cMin) ) - (key.keyends (Index) .ptX(cMax) , key.keyendsl Index) -ptY(cMax) ) , vbWhite picKey.Line (key.keyends (Index) .ptX(cMin) , key.keyends (Index) .ptY(cMin) ) - (key. eypts (Index) .ptX(cMax) , key. keypts! Index) .ptY(cMax) ) , vbWhite linex = Sin! (Index / AssaysSelected) * 3.14159 * 2) * key. keyvals (Index, cMin) liney = Cost (Index / AssaysSelected) * 3.14159 * 2) * key. keyvals (Index, cMin) key. keypts (Index) .ptX(cMin) = linex key.keypts (Index) .ptY(cMin) = liney ' redraw key ι 4__. picKey.DrawWidth = 2 tjJ picKey.Line (key. keypts (Index) .ptX(cMin) , key. keypts (Index) .ptY (cMin) )- (key.keypts (Index) .ptX(cMax) , key. keypts (In dex) .ptY(cMax) ) , LineColors (Index) picKey.DrawWidth = 1 End If
I End Sub Private Sub txtHigh_LostFocus (Index As Integer)
Dim linex As Single
Dim liney As Single
If Val (tx,tHigh(Index) -Text) > 1 Then txtHightIndex) -Text = "1.000"
' if low value now > high value, restore old value, update high value
If Val (txtHighllndex) .Text) < key. keyvals (Index, cMin) Then txtLow(Index) .Text = txtHigh (Index) -Text txtHighllndex) -Text = Format (key. keyvals (Index, cMax) , "0.000")
Call txtLow_LostFocus (Index)
Else
' set key pts key. keyvals (Index, cMax) = Val (txtHigh (Index) .Text) txtHighllndex) .Text = Forma (txtHighllndex) .Text, "0.000") picKey.DrawWidth = 4
Figure imgf000044_0001
picKey.Line (key.keypts (Index) .ptX(cMax) , key. eypts (Index) .ptY(cMax) )- (key. keyends (Index) .ptX (cMin) , key.keyends!
Index) .ptY(cMin) ) , vbWhite picKey.Line (key.keyends (Index) .ptX(cMax) , key.keyends (Index) .ptY(cMax) )- (key. eypts (Index) .ptX(cMin) , key.keypts(
Index) .ptY(cMin) ) , vbWhite
Ix = AbsdntttX - 1) / 3)) ly = Abstlntt (Y - 1) / 3))
If SummaryMatrixlMyLevel) .Location Ilx, ly). Index <> -1 Then
SummaryMatrixlMyLevel) .Locationtlx, ly) .Selected = Not SummaryMatrixlMyLevel) .Location (lx, ly). Selected
If SummaryMatrixlMyLevel) .Locationllx, ly) .Selected Then
SelectedCompounds IMyLevel + 1) = SelectedCompounds IMyLevel + 1) + 1
Else
SelectedCompounds IMyLevel + 1) = SelectedCompounds IMyLevel + 1) - 1
End If Debug. Print lx 4 " " 6 ly t " " & CompoundSummary(SummaryMatri (MyLevel) -Locationllx, ly) . Index) .CompoundName & _
" " & SummaryMatrixlMyLevel) .Locationllx, ly). Index & " " & _
CompoundSummarylndextCompoundS-ummary(SummaryMatrixlMyLevel) .Locationllx, ly) .Index) .CompoundName)
Call DrawOneCompound(SummaryMatrixlMyLevel) .Locationllx, 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 lstAvg(asy) .Listlndex = 0 Then 'avg , If lstlnhib(asy) .Listlndex = 0 Then 'Inhib
-f^ dataitem = min(0.999, CompoundSummarylcmpd) .assay(asy) .Averagelnhib / 100)
V^ Else ' Stim dataitem = min(0.999, CompoundSummary(cmpd) .assay(asy) .AverageStim / 100) End If Else ' Max
If lstlnhib(asy) .Listlndex = 0 Then 'Inhib dataitem = min (0.999, CompoundSummary (cmpd) .assay(asy) .Maximum / 100) Else ' Stim dataitem = min(0.999, CompoundSummary(cmpd) .assay(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) ) Then i hide = True End If Next asy
HideCompound = hide
End Function
Private Sub txtLow_LostFocus (Index As Integer)
Dim linex As Single
Dim liney As Single
Figure imgf000045_0001
If Val(txtLowtIndex) .Text) < 0 Then txtLowtIndex) .Text = "0.000"
Els
Figure imgf000046_0001
cmdDialog.ShowSave fna e = cmdDialog. filename
FNu = FreeFile Open fname For Output As FNum
' Header
OutLine = "Compound" & tb
frmSummaryGraphic - 7
For asy = 0 To AssaysSelected - 1
OutLine = OutLine & "Assay" & asy + 1 & tb & "Avg. Inhib" & tb & "Avg. Stim" & tb & "Max Inhib" & tb & "Max St im" & tb
Next asy
Print #FNum, OutLine
' Data for Selected Compounds L For rw = 0 To Down -. For cl = 0 To Across ι
1 cmpd = SummaryMatrix(MyLevel) .Location Irw, cl). Index
If cmpd <> -1 And SummaryMatri lMyLevel ) . Locationlrw, cl) .Selected Then OutLine = CompoundSummary (cmpd) .CompoundName & tb For asy = 0 To AssaysSelected - 1
Debug. Print CompoundSummary (cmpd) .CompoundName & CompoundSummary (cmpd) .assay(asy) .Name
OutLine = OutLine & CompoundSummary (cmpd) .assay (asy) .Name & tb
OutLine = OutLine & CompoundSummary (cmpd) .assay (asy) .Averagelnhib & tb
OutLine = OutLine & CompoundSummary (cmpd) .assay (asy) .AverageStim & tb
OutLine = OutLine & CompoundSummary(cmpd) .assay(asy) .Maximum & tb
OutLine = OutLine & CompoundSummary (cmpd) .assay(asy) -Minimum & tb
Next asy
Print #FNum, OutLine
End If
Next cl
Next rw
Close FNum
End If
Exit Sub theend :
Close FNum ans = MsgBo lErr. Number & " " & Err.D* -SI
End Sub
Private Sub pictest_MouseUp (Button As Integer, Shift As Integer, X As Single, Y As Single) Dim lx As Long Dim ly As, Long
px = rw * 3 + 2 py = cl * 3 + 2
If SummaryMatrixlMyLevel ) -Location (rw, cl) -Selected Then pictest Line (px - 1, py - l)-(pχ t i, py * 1), vbBlack. B SelectedCompounds IMyLevel + 1) = SelectedCompounds IMyLevel
Else + 1) + 1 pictest. Line (px - l, py - l) - (px + 1, py + 1), vbWhite B SelectedCompounds IMyLevel 1) = SelectedCompounds (MyLevel
End If + 1) + 1 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 poun (SummaryMatri (MyLevel) -Location (i, j). Index, i, j. Printer) End If Next j Next i
Printer. fontsize = 12
Printer. Font = "Arial"
Printer . fontsize = 12
Printer .CurrentY = 2 * ( (Printer . fontsize 17) / (Printer.Height / Printer .ScaleHeight) ]
For i = 0 To AssaysSelected - 1
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)
Printer. Print SelectedAssayNames (i)
Printer .ForeColor = vbBlack
If lstAvg(i) .Listlndex = 0 Then OutLine = " Avg."
Else
OutLine = " Max. "
End If
If lstlnhib(i) .Listlndex = 0 Then OutLine = OutLine & " Inhib "
Else
OutLine = OutLine & " Stim "
End If
OutLine = OutLine & txtLow(i) . ext & " - " & 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) .LocationlX, Y). Selected Then hDC.Line (px - 1, py - D-(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
4-^
ON frmSummaryGraphic - 6
Dim dataitem As Double Dim px As Long Dim py As Long Dim cmpd As Long Dim ans As Integer Dim fname As String Dim FNum As Integer Dim OutLine As String Dim tb As String tb = Chr$(9)
' S or s = Select Visible
If KeyCode = Asc("S") Or KeyCode = Asc("s") Then For rw = 0 To Down
For cl = 0 To Across hide = False cmpd = SummaryMatrix (MyLevel) .Location (rw, cl). Index If cmpd >= 0 Then
If Not HideCompound (cmpd) Then
SummaryMatrix (MyLevel) .Location (rw, cl). Selected = Not SummaryMatrix (MyLevel) .Location (rw, cD.Selecte
hDC. fontsize = (( (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.1), vbWhite, BF
If Not HideCompoun (cmpd) Then
If hDC.hDC = pictest. hDC Then hDC.DrawWidth = 1 printerfactor = 1 Else hDC.DrawWidth = 6 printerfactor = 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
-J
For asy = 0 To AssaysSelected - 1
If lstAvg(asy) -Listlndex = 0 Then 'avg
If lstlnhib(asy) .Listlndex = 0 Then 'Inhib dataitem = min(0.999, CompoundSummary(cmpd) .assay(asy) .Averagelnhib / 100) Else ' Stim dataitem = min(0.999, CompoundSummary (cmpd) .assay(asy) .AverageStim / 100) End If Else
If lstlnhib(asy) .Listlndex = 0 Then 'Inhib dataitem = min(0.999, CompoundSummary(cmpd) .assay(asy) .Maximum / 100) Else ' Stim dataitem = min(0.999, CompoundSummary(cmpd) .assay (asy) .Minimum / 100) End If End If linex = Sin ((asy / AssaysSelected) * 3.14159 * 2) * dataitem liney = Cos ((asy / AssaysSelected) * 3.14159 * 2) * dataitem 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 = Formatldist, "0.000") Else txtHigh(BestAssay) .Text = Formatldist, "0.000") End If End If End If End Sub
Private Sub picKey_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 For j = 0 To Down , If (SummaryMatrix(MyLevel) .Location (i, j). Index <> -1) Then
-P* Call DrawOneCompound (SummaryMatrixlMyLevel) .Location (i, j). Index, i, j, pictest)
•?° End If
Next j Next i End Sub
Private Sub DrawOneCompoun (cmpd As Long, ByVal X As Long, ByVal Y As Long, hDC As Control) Dim asy As Long Dim i As Long
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 (endp ) ) + _
(Y - key. keypts (assay) .ptY(endpt) ) * (Y - key. keypts (assay) .pt (endpt) ) ) If dist < MinDist Then MinDist = dist BestAssay = assay BestEndPt = endpt End If Next endpt Next assay
If MinDist < 0.1 Then ButtonDown = True End If End If ' left button End Sub
Private Sub picKey_MouseMove (Button As Integer, Shift As Integer, X As Single, Y As Single) Dim linex As Single Dim liney As Single Dim dist As Single
If ButtonDown Then dist = Sqr((X * X) + (Y * Y) ) picKey.DrawWidth = 4 picKey.Line (key. keypts (BestAssay) .ptX(cMin) , key. keypts (BestAssay) .ptY(cMin) ) - (key.keyends (BestAssay) . ptX(cMax) , key.keyends (B,estAssay) .ptY(cMax) ) , vbWhite picKey.Line (key.keyends (BestAssay) .ptX(cMin), key.keyends (BestAssay) .ptY(cMin) )- (key. eypts (BestAssay) .ptX(cMax), key. keypts (BestAssay) .ptY(cMax) ) , vbWhite I picKey.DrawWidth = 2 picKey.Line (key. keypts (BestAssay) .ptX(cMin) , key .keypts (BestAssay) .ptY(cMin) )- (key. keypts (BestAssay) .ptX(cMax), k ey. eypts (BestAssay) .ptY(cMax) ) , LineColors (BestAssay) picKey . DrawWidth
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 Fρrm_Resize ( )
Dim mindim As Long If Me.WindowState <> vbMinimized Then pictest.Width = 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 picKey. Left = pictest .Width + 100 btnUpdate.Left = pictest.Width + 100 btnReset.Left = btnUpdate .Left + btnUpdate.Width + 100 btnNew.Left = btnReset.Left + btnReset.Width + 400 optCircles.Left = btnNew.Left Call btnUpdate_Click End If End Sub
^ Private Sub Form_Unload (Cancel As Integer) i frmSummaryGraphics (MyLevel) .Across = 0 frmSummaryGraphics (MyLevel) .Down = 0
ReDim SummaryMatrix (MyLevel) .Location (1, 1) End Sub
Private Sub lstAvg_Click(Index As Integer)
Debug. Print Index & " " & IstAvg (Index) .Listlndex St " " & IstAvgtIndex) .Text 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( )
C Caalll pictest_KeyUp(Asc("F") , 0) End Sub
Private Sub MenuSelect_Click( )
Call pictest_KeyUp(Asc("S") , 0)
End Sub
Private Sub picKey_MouseDown (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 DisplayCompounds (pictest)
End Sub
frmSummaryGraphic - 3
Private Sub MakeKey(ByVal hDC As Control) Dim i As Long Dim stepsize As Single Dim X As Single Dim Y As Single hDC. Circle (0, 0), 0.25, RGBI200, 200, 200) hDC.Circle (0, 0), 0.5, RGB(200, 200, 200) hDC.Circle (0, 0), 0.75, RGB(200, 200, 200) hDC. Circle (0, 0), 1, RGBI200, 200, 200)
C-/1
For i = 0 To AssaysSelected - 1 key.AssayName(i) = CompoundSummary(0) .assay(i) .Name
X = Sinlti / AssaysSelected) * 3.14159 * 2) Y = Costli / AssaysSelected) * 3.14159 * 2) key. keypts (i) .pt IcMin) = X * key.keyvals (i , cMin) key. keypts (i) .ptY(cMin) = Y * key. eyvals (i, cMin) key. eypts (i) .ptX(cMax) = X * key. keyvals (i, cMax) key.keypts (i) .ptY(cMax) = Y * key.keyvals (i, cMax) key.keyends (i) .ptX(cMin) = X * 0.001 * key. eyvals (i, cMin) key.keyends(i) .ptY(cMin) = Y * 0.001 * ke .keyvals (i, cMin) key.keyends (i) .ptX(cMax) = X * key. keyvals (i , cMax) key.keyends (i) .ptY IcMax) = Y * key. keyvals (i, cMax) hDC.Line (key. keypts (i) .ptX(cMin) , key. keypts (i) .ptY(cMin) )- (ke . eypts (i) .ptX(cMax) , key. keypts (i) .ptY(cMax) ) , Li neColors(i)
Next i
Istlnhibli) .Visible = True
Istlnhibli) .Top = Istlnhibli - 1) .Top + 500 lstlnhib(i) .Left = Istlnhibli - 1) .Left
Istlnhibli) -Addltem ("Inhib") lstlnhib(i) .Addltem ("Stim") txtLow(i) -Visible = True txtLow(i) -Top = txtLowd - D.Top + 500 txtLow(i) -Left = txtLow(i - D.Left txtHigh (i) .Visible = True txtHigh (i) .Top = txtHighd - D.Top + 500 txtHigh (i) .Left = txtHighd - D.Left End If
If MyLevel > 0 Then txtLow(i) .Text = frmSummaryGraphics (MyLevel - 1) . txtLow(i) -Text txtHighd) -Text = frmSummaryGraphics (MyLevel - 1) . txtHigh (i) .Text
Istlnhibli) .Listlndex = frmSummaryGraphics (MyLevel - 1) .lstlnhibd) .Listlndex
IstAvgd) .Listlndex = frmSummaryGraphics (MyLevel - 1) . IstAvg (i) -Listlndex Else txtLow(i) -Text = "0.000" txtHighd) .Text = "1.000" lstlnhibd) .Listlndex = 0 i^-, IstAvgd) .Listlndex = 0 to End If lblAssay ) .ForeColor = LineColorsd) lblAssay(i) .Caption = SelectedAssayNamesd) Next i
If MyLevel = 0 Then 'First display page For i = 1 To SelectedCompounds (0)
If CompoundSummary (i ). CompoundName <> "" Then
SummaryMatrix(MyLevel) -Location! (i Mod Across), Int(i / Across) ). Index = _
CompoundSummarylndex (CompoundSummary(i) .CompoundName) End If Next i Else j = 0
For ax = 0 To frmSummaryGraphics (MyLevel - 1).Across
For ay = 0 To frmSummaryGraphics (MyLevel - D.Down
If SummaryMatrixlMyLevel - 1) . Location (ax, ay). Selected Then
SummaryMatrixlMyLevel) .Location) (j Mod (Across)), Int(j / Across) ). Index = _
SummaryMatrixlMyLevel - 1) -Locationlax, ay). Index
3 = 3 + 1
End If
Next ay
Next ax
End If
ReDim SummaryMatrix(MyLevel) .Location(Down + 1, Across + 1)
For i = 0 To Down
For j = 0 To Across
SummaryMatrixlMyLevel) .Location (i, ). Index = -1
Next .
Next pictest. ScaleWidth = Across * 3 + 1 pictest.ScaleHeight = Down * 3 + 1 lstAvg(O) .Addltem ("Avg") lstAvg(O) .Addltem ("Max") lstlnhib(O) .Addltem ("Inhib") lstlnhib(O) .Addltem ("Stim") lstAvg(O) .Listlndex = 0
frmSummaryGraphic - 2 lstlnhib(O) .Listlndex = 0 , txtLow(O) .Top = txtLow(O) .Top - 100
^ txtHigh (0) .Top = txtHigh (0) .Top - 100
For i = 0 To AssaysSelected - 1
LineColorsd) = RGB(255 - (255 * (i / AssaysSelected)), 255 * d / AssaysSelected), (64 * (i / AssaysSnlected) ) Mo 256)
If i <> 0 Then
Load lblAssayd) Load chkRequired(i) Load txtLowd) Load txtHighd) Load IstAvgd) Load lstlnhibd) lblAssayd) .Visible = True lblAssayd) .Top = lblAssayd - D.Top + 500 lblAssayd) .Left = lblAssayd - D.Left chkRequiredd) .Visible = True
Figure imgf000055_0001
chkRequiredd) -Top = chkRequiredd - D.Top + 500 chkRequiredd) -Left = chkRequiredd - D.Left lstAvg ) -Visible = True
IstAvgd) -Top = IstAvgd - D -Top ♦ 500
IstAvgd) -Left = IstAvgd - D.Left
IstAvgd) .Addltem ("Avg"). IstAvgd) .Addltem ("Max")
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
Private Sub btnUpdate_Click( )
Dim i As Long pictest. Line (0, 0) - (pictest. ScaleWidth, pictest. ScaleHeight) , vbWhite, BF
Call Disp ayCompounds (pictest) End Sub )
Figure imgf000056_0001
MyLevel = SummaryLevel Me. Tag = MyLevel Me.Caption = MyLevel
If MyLevel = 0 Then
For i = 0 To AssaysSelected - 1
KeyLimits (MyLevel, i, cMin) = 0 KeyLimits (MyLevel, i, cMax) = 1 Next i End If
For i = 0 To AssaysSelected - 1 key. keyvals d, cMin) = KeyLimits (MyLevel, i, cMin) key. keyvals d, cMax) = KeyLimits (MyLevel, i, cMax)
Next i
Across = Sqr (SelectedCompounds (MyLevel) )
Down = SelectedCompounds (MyLevel) / Across
If Down * Across < SelectedCompounds (MyLevel) Then
Down = Down + 1
Figure imgf000056_0002
End If
rmSummary - 3
End Sub
Private Sub RetrieveData I ) Dim strSQL As String Dim rsAssayCodes As Recordset 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 f lxSurnmary . Rows AssayCount + 1 f lxSummary . Cols 2
For rw = 1 To AssayCount ι-Λ flxSummary. TextMatrix ( rw, 0) = rsAssayCodes. Fields (0) t-ι flxSummary. Tex Matrix(rw, 1) = rsAssayCodes. Fields (1) rsAssayCodes .MoveNext
Next
End Sub
frmSummaryGraphic - 1
' Copyright 1999 Tropix, Inc. Option Explicit Dim ButtonDown As Boolean Dim BestAssay As Long Dim BestEndPt As Single Public Across As Long Public Down As Long Dim MyLevel As Integer
Private Sub btnNew_Click( ) 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. eyvals (asy, cMax)
Next asy
Figure imgf000058_0001
If rsQuery. Fields (3) < 0 Then
CompoundSummarylCurrentCompound) .assay ICurrentAssay) .Minimum = Abs (rsQuery. Fields (3 ) )
Else
CompoundSummary (CurrentCompound) .assay ICurrentAssay) .Minimum = 0 End If rsQuery .MoveNext prbSummary . value = prbSummary. value + 1 Wend CurrentAssay = CurrentAssay + 1 AssaysSelected = AssaysSelected + 1 End If Next prbSummary.Visible = False
For cmp = 0 To CompoundCount - 1
If CompoundSummary (cmp) .Selected Then
SelectedCompoundCount = SelectedCompoundCount + 1
End If Next i SelectedCompounds (0) = SelectedCompoundCount
(-^ frmSummaryParent. Show
End Sub
Private Sub lxSummary_Click( ) Dim i As Integer flxSummary. row = flxSummary.MouseRow flxSummary. col = 0
If flxSummary.CellFontBold = False And flxSummary. CellForeColor = vbBlack Then flxSummary. CellFontBold = Not flxSummary.CellFontBold Elself flxSummary.CellFontBold = True And flxSummary.CellForeColor = vbBlack Then For i = 1 To AssayCount lxSummary. 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 flxSummary. 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
CompoundsLoaded = True
SelectedCompounds (0) = CompoundCount End If
' retrieve data from selected assays CurrentAssay = 0
frmSummary - 2
AssaysSelected = 0 ' SummaryLevel = 0
--j For Assayi = 1 To AssayCount prbSummary.Visible = True prbSummary.Max = RecordCount + 1 prbSummary.value = 0 flxSummary. col = 0 flxSummary. row = Assayi
If flxSummary.CellFontBold Then ' Retrieve the data for this assay strSQL = "select compound_id, average_inhibition, maximum_inhibition, minimum_inhibition" & _
" from tropix_compound_summary where assay_code = ' * & flxSummary.TextMatrix (Assayi, 0) & "'" fc _ " AND compound_id in (select distinct compound_id from tropix_compound_summary where " & _ " assay_code = " fc assaystring & *)" & _ " order by compound_id" Debug. rint strSQL
Set rsQuery = DB.OpenRecordset (strSQL, dbOpenSnapshot) 'if in index collection, return key and use it to find record in array rsQuery.MoveFirs While Not rsQuery.EOF
CurrentCompound = CompoundSummarylndex (rsQuery. Fields (0) )
CompoundSummary(CurrentCompound) .Selected = True
CompoundSummary (CurrentCompound) .CompoundName = rsQuery. Fields (0)
CompoundSummary (CurrentCompound) .assay (CurrentAssay) .Name = flxSummary.TextMatrix(Assayi , 0)
CompoundSummary (CurrentCompound) .assay (CurrentAssay) .Name = lxSummary.TextMatri (Assayi, 0)
If rsQuery. Fields (1) >= 0 Then
CompoundSummary(CurrentCompound) .assay (CurrentAssay) .Averagelnhib = rsQuery .Fields (1)
CompoundSummary (CurrentCompound) .assay (CurrentAssay) .AverageStim = 0
Else
CompoundSummary (CurrentCompound) .assay (CurrentAssay) .Averagelnhib = 0
CompoundSummary (CurrentCompound) .assay(CurrentAssay) .AverageStim = Abs (rsQuery. Fields (1) ) End If
For i = 0 To AssayCount - 1 flxSummary. row = i + 1
' flxSummary.col = 0
If flxSummary. CellForeColor = vbRed Then assaystring = assaystring & "'" fc flxSummary. ext & "',"
End If
If flxSummary.CellFontBold Then
SelectedAssayNames(j ) = flxSummary. Text
. j = j + 1 End If
Next i
If Len (assaystring) > 0 Then assaystring = Left$ (assaystring, Len (assaystring) - 1) strSQL = "select count!*) from tropix_compound_summary where " fc _ "assay_code =" & assaystring Else strSQL = "select max(count (*) ) , assay_code from tropix_compound_summary group by assay_code" End If
Debug. Print strSQL
Set rsQuery = DB. OpenRecordse (strSQL, dbOpenSnapshot)
RecordCount = 0 , rsQuery. MoveFirst
<* RecordCount = rsQuery.Fields (0) i rsQuery.Close
' 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 compound_id from tropix_compound_suιnmary where " & _
"compound_id in (select distinct compound_id from tropix_compound_summary where " & _
"assay_code =" & assaystring 4 ")"
Else strSQL = "select distinct compound_id from tropix_compound_summary"
End If
' Save the data fl = FreeFile
Open fname For Output As fl
For rw = 0 To (APlateCount * 96)
For cl = 0 To 11
Print #fl, SaveSigma (rw, cl) & Chr$(9) Next cl Next rw Close fl theend:
frmSplateText - 4 End Sub
frmSummary - 1
J-ζ ' Copyright 1999 Tropix, Inc.
' most recent clicked is placed in Current Assay box (to update)
' Update deletes and replaces ALL compound_assay info for that assay
1 View send user to Summary view graphic
' Text view allows user to sort / view #'s
Dim CompoundsLoaded As Boolean
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 = " " j = 0
SaveSigma (0, 0) = "APlate ID"
SaveSigmalO, 1) = "Well"
SaveSigmalO, 2) = "Compound"
SaveSigmalO, 3) = "Raw Score"
SaveSigmatO, 4) = "%Inhib"
SaveSigma (0, 5) = "Good/Bad"
SaveSigmalO, 6) = "ΞPlate ID"
SaveSigmalO, 7) = Well"
SaveSigma (0, 8) = "Compound. "
SaveSigmalO, 9) = "Avg. %Inhib."
SaveSigmalO, 10) = "CV"
SaveSigma (0, ID = "Good Assays"
For rw = 0 To 7
For cl = 0 To 11
TempString = " "
If c 1 < 9 Then TempString = »0"
SaveSigma I rw * 12 + cl + 1 6) = Splates (cSPLATE, CurrSPlate) .PlatelD
SaveSigma (rw * 12 + cl + 1 7) = Chr$ (rw + Asc ("A' ) ) & TempString & cl + 1
SaveSigma (rw * 12 + cl + 1 8) = SplatestcSPLATE, CurrSPlate) .assay (0) .Well Irw, cl) .Compound
SaveSigma (rw * 12 + cl + 1 9) = Splates (cSPLATE, CurrSPlate) . assay (0) .Well (rw, cl) .Inhib(WellStat)
SaveSigma (rw * 12 + cl + 1 10) = SplateslcSPLATE, CurrSPlate) . assa (0) .Well (rw, cl) .cv(WellStat)
SaveSigma (rw * 12 + cl + 1 11) = SplateslcSPLATE, CurrSPlate) .assay(O) .Well (rw, cl) .count (WellStat) o Next cl
. rw aplt = 0
APlateCount = 0
Do While Aplates (aplt) .PlatelD (CAPLATE) <> ""
If Aplates (aplt) .PlatelD (cAPLATE) = SplateslcSPLATE, CurrSPlate) . PlatelD Then For rw = 0 To 7
For cl = 0 To 11
TempString = " "
If cl < 9 Then TempStringg = "0"
SaveSigma (APlateCount 96 + rw * 12 + cl + 1, 0) Aplates (aplt) . PlateΙD(cAPLATE) SaveSigma (APlateCount 96 + rw * 12 + cl * 1, 1) Chr$(rw + Asc ("A")) & TempString & cl + 1 SaveSigma (APlateCount 96 + rw * 12 + cl * 1, 2) Aplates (aplt) .Well(rw, cl) .Compound SaveSigma (APlateCount 96 + rw * 12 + cl + 1, 3) Aplates (aplt) .Well (rw, cD.Raw SaveSigma (APlateCount 96 + rw * 12 + cl + 1, 4) Aplates(aplt) .Welllrw, cl) .Inhib (cSTATGOOD) If Aplates (aplt) .WelKrw, cl) .Good Then SaveSigma (APlateCount * 96 + rw * 12 + cl + 1, 5) = Else
SaveSigma (APlateCount 96 12 + cl + 1, 5) = "B" 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) .PlateΙD(cSPLATE) = SplateslcSPLATE, CurrSPlate) . PlatelD Then
Print #fl, "Assay Plate : " & Chr$(9) fc Aplates (aplt) . PlatelD (cAPLATE) fc Chr$(9) & _
"High Control:" fc Chr$(9) & Aplates (aplt) .Control (WellStat, cHIGH) & Chr$(9) & _
"Low Control:" & Chr$(9) & Aplates (aplt) .Control (WellStat, cLOW)
Print #fl, "Raw Data Values : "
For rw = 0 To 7
TempString = Chr$ (Asc ( "A" ) + rw) fc Chr$(9)
For cl = 0 To 11
TempString = TempString i Aplates (aplt) -Well (rw, cl) . Inhib (WellStat) & Chr$(9) Next cl
Print #fl, 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) .WelKrw, cl) .Good Then
TempString = TempString & "-" & ChrS(9) Else
TempString = TempString & "B" & Chr$(9) End If Next cl
Print #fl, TempString Next rw Print #fl, " End If
frmSplateText - 3 aplt = aplt + 1
Loop
Close fl theend: 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
Figure imgf000063_0001
' Modify SaveSigma dimensions once you figure out what it is doing. On Error GoTo theend c dSaveFile.CancelError = True cmdSaveFile . ShowSave fname = cmdSaveFile. filename
fl = FreeFile
Open fname For Output As fl
Print #fl, "Plate ID:" & Chr$(9) & SplateslcSPLATE, CurrSPlate) . PlatelD aplt = 0
TempString = " "
Do While Aplateslaplt) .PlateΙD(cAPLATE) <> ""
If Aplateslaplt) .PlatelD (cSPLATE) = SplatestcSPLATE, 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 #fl, ""
Print #fl, "Average Inhibition:"
For rw = 0 To 7
TempString = Chr$ (Asc I "A" ) + rw) & Chr$(9)
For cl = 0 To 11
TempString = TempString & Format(Splates (cSPLATE, CurrSPlate) .assay(0) .Well (rw, cl) . Inhib(WellStat) , "##0. 0000") & Chr$(9)
Next cl
Print #fl, TempString Next rw
l CVs:"
Figure imgf000064_0001
TempString = Chr$ (Asc ( "A" ) + rw) fc Chr$(9) For cl = 0 To 11
TempString = TempString & Format (SplateslcSPLATE, CurrSPlate) .assay(O) .WelKrw, cl) .cv (WellStat) , -##0.000 0") & Chr$<9)
Next cl
Print #fl, TempString Next rw
Print #fl, ""
Print #fl, "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) .Well (rw, cl) .Compound fc Chr$(9)
Next cl
Print #fl, TempString
Next rw aplt = 0
Print #fl, ""
Print #fl, "Assay Plate Data:"
' Save assay plate information associated with this SPlate
Next rw
End Sub
Private Sub Form_Resιze I )
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
If fr SplateText.Width > Wsum + 300 Then frmSplateText.Width = Wsum + 300
If frmSplateText.Height > Hsum + (400) Then frmSplateText. Height = Hsum + 500 flxSplate. Height = frmSplateText.Height - (400) ; flxSplate.Width = frmSplateText.Width - 200 ; flxSplate . Refresh End If End Sub
0\ Private Sub MenuFileClose_Click ( ) t-° Me. hide
End Sub
Private Sub MenuFilePrint_Click()
MsgBox "Not available at this time. Please save the data, and print from another application" End Sub
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. ilename
frmSplateText - 1
' Copyright 1999 Tropix, Inc.
Private Sub lxSPlate_KeyPress (KeyAscii As Integer)
If UCase(Chr$ (KeyAscii) ) = "E" Then
Call MenuFileSave_Click
End If 'E pressed to Save data
If UCase(Chr$ (KeyAscii) ) = "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 If WellStat = cSTATGOOD Then title = title & " - for GOOD Assays only" Else title = title & " - for GOOD and BAD Assays" End If
1 frmSplateText.Caption = title
^ flxSplate.Top = 0
■ flxSplate. Left = 0 flxSplate.Height = frmSplateText.Height - (200) flxSplate.Width = frmSplateText.Width - 200 flxSplate.Cols = 15 flxSplate. ows = 15 flxSplate.ColWidth(O) = 400
For i = 1 To 14 flxSplate. ColWidthd) = 1000 Next i flxSplate..ColWidth (13) = 300
Call Pop_Grid End Sub Private Sub Pop_Grid()
Dim rw, cl, i As Integer
Dim Average As Single
Figure imgf000066_0001
Average = SplateslcSPLATE, CurrSPlate) .assay (0) .Well (rw, cl) .Inhib(WellStat) flxSplate. extMatrixlrw + 1, cl + 1) = Format (Average, "##0.0") i " / " fc Format (Splates (cSPLATE, CurrSPlate) .assa y(0).WelKrw, cl) -cv(WellStat) , "##0.0") Next cl
frmSPlateGraphic - 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 = Int(IX) / 40) pit = pit + Intl(Y) / 28) * Across
If pit < SplatesSubSelected And pit >= 0 Then
Debug. Print X 4 " " & Y & " " & pit
If Button = 1 Then rw = Int((Y - (2 + SplatestcSPLATE, Splateslndex(plt) ) .Top) ) / 3) cl = InttlX - (2 + SplatestcSPLATE, Splateslndex(plt) ) .Left) ) / 3) If rw < 0 Then rw = 0 If cl < 0 Then cl = 0 If rw > 7 Then rw = 7 If cl > 11 Then cl = 11 ζj. Debug. Print X fc " " fc Y fc " " & pit 4 * Plate: " & SplateslcSPLATE, Splateslndex (pit) ). PlatelD S "(" & pit &
<-*< ") ( " & rw fc " , " fc cl & ") - Compound: ; SplateslcSPLATE, Splateslndex (pit) ) .assay (0) .WelKrw, cl) .Compound
' MsgBox ("Compound : " & SplatestcSPLATE, Splateslndex (pit) ) .Assay(0) .WelKrw, cl) .Compound)
SelCompounds (Co poundsSelected) .Name = SplateslcSPLATE, Splateslndex (pit) ) . assay(0) .WelKrw, cl) .Compound SelCompounds(CompoundsSelected) .SPlatelD = SplatestcSPLATE, Splateslndex (pit) ) .PlatelD SelCompounds (CompoundsSelected) . row = rw SelCompounds (CompoundsSelected) .col = cl CompoundsSelected = CompoundsSelected + 1 frmCompoundList. Show frmCompoundList . Refresh Else ' button = 2
If CurrSPlate <> -1 Then picPlate.Line (SplateslcSPLATE, CurrSPlate) .Left - 0.04, SplatestcSPLATE, CurrSPlate) .Top + 4) - (Splates (cS PLATE, CurrSPlate) .Left - 0.4, SplateslcSPLATE, CurrSPlate) .Top + 24), vbWhite, BF End If
If pit > 0 And pit < TtlSplates Then
CurrSPlate = Splateslndexlplt) picPlate.Line (SplatestcSPLATE, CurrSPlate) .Left - 0.04, SplatestcSPLATE, CurrSPlate) .Top + 4) - (Splates (cSPLAT
E, CurrSPlate) .Left - 0.4, SplatestcSPLATE, CurrSPlate) .Top + 20), RGBI200, 100, 100), BF frmSp1ateText. Show
End If End If
End If End Sub
If dispstat < 0 Then hDC.FillStyle = vbFSSolid hDC.FillColor = 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 Next cl hDC.FillStyle = vbFSTransparent For cl = 0 To 11
For rw = 0 To 7 ex = (cl * 3) + 4 + Splates (cSPLATE, Splateslndex (pit) ) .Left cy = (rw * 3) + 4 + SplateslcSPLATE, Splateslndex (pit) ) .Top hDC.Line (ex - 2 , cy - 2) -(ex + 1, cy + 1), vbBlack, B Next rw , Next cl hDC. CurrentX = 2 hDC. CurrentY = -8 hDC. ForeColor = vbBlack 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 hDC. Print frmSPlateGraphic. Caption Else hDC. Print frmSPlateGraphic. Caption & * : 4 CommentsText End If
End Sub
Private Sub MenuEditCopy_Click ( )
Clipboard. Clear
Clipboard. SetData picPlate . Image, vbCFBitmap End Sub
frmSPlateGraphic - 7
Elself SplatestcSPLATE, Splateslndex (pit) ) .assay (0) -Well (rw, cl) .cv(WellStat) < Limits (cLIMITCOMPOUNDCV, 1
Then currclr = Clr (cLIMITCOMPOUNDCV, 0) Elself Splates (cSPLATE, Splateslndex (pit) ) .assay (0) -Well (rw, cl) .cv(WellStat) < Limits (cLIMITCOMPOUNDCV, 2
) Then currclr = Clr (cLIMITCOMPOUNDCV, 1) Else currclr = Clr (cLIMITCOMPOUNDCV, 2) End If
If SplateslcSPLATE, Splateslndex (pit) ) .assay (0) .WelKrw, cl) .cv (WellStat) = cNODATA Then currclr = RGBI200, 200, 200) End If If SplateslcSPLATE, Splateslndex (pit) ). assay(0 ) .Well (rw, cl) .ResultsCount (WellStat) < 2 Then currclr = RGBI200, 200, 200) End If
Select Case ViewType Case cAVERAGE dispstat = SplateslcSPLATE, Splateslndex (pit) ) .assay(O) .Well (rw, cl) .'Ιnhib(WellStat) Case cMAXIMUM dispstat = SplateslcSPLATE, Splateslndex(plt) ) .assay (0) .Well (rw, cl) .Extreme (cHIGH; WellStat) Case cMINIMUM dispstat = SplateslcSPLATE, Splateslndex(plt) ) .assay (0) .WelKrw, cl) .Extreme (cLOW, WellStat) End Select
If dispstat <> cNODATA Then
If dispstat > Limits (cLIMITINHIB, 0) Or dispstat < - (Limits (cLIMITINHIB, 0)) Then hDC.Line (ex - 2, cy - 2)-(cx + 1, cy + 1), currclr, BF End If
If Abs (dispstat) > Limits (cLIMITINHIB, 2) Then currclr = Clr (cLIMITINHIB, 2) Elself Abs (dispstat) > Limits (cLIMITINHIB, 1) Then 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 rmCompoundList . Refresh
End Select End Sub
Private Sub Form_Resize ( )
Dim pit As Integer
If Me.WindowState <> vbMinimized Then picPlate.Width = frmSPlateGraphic -Width - 100 picPlate. Height = rmSPlateGraphic. 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
Call DrawKey (picPlate) End If End Sub
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 dispstat As Single
Dim cl As Integer
Dim rw As Integer
Dim ex As Long
Dim cy As Long hDC.FillStyle = vbSolid hDC.FontName = "Arial" hDC. fontsize = Intl I (hDC. Height / hDC. ScaleHeight) / 20) * 2.5) hDC.-CurrentX = SplateslcSPLATE, Splateslndex (pit) ) .Left hDC. CurrentY = SplateslcSPLATE, Splateslndex (pit )) .Top - 1. 25 hDC. Print Splates ISLabelType, Splateslndex (pit) ). PlatelD
For cl = 0 To 11
For rw = 0 To 7
If SplatestcSPLATE, Splateslndex (pit) ) .assay (0) .WelKrw, cD.Type = "D" Then ex = (cl * 3) + (4) + SplateslcSPLATE, Splateslndex (pit) ) .Lef cy = (rw * 3) + (4) + SplateslcSPLATE, Splateslndex (pit ) ) .Top
If SplateslcSPLATE, Splateslndex (pit) ) .assay (0) .WelKrw, cl) .cv(WellStat) < Limits (cLIMITCOMPOUNDCV, 0) Th currclr = vbWhite
Select Case ViewType
Case CAVERAGE dispstat = SplateslcSPLATE, Splateslndexlplt) ) .assay (0) -Welllrw, cl) . Inhib(WellStat)
Case cMAXIMUM dispstat = SplateslcSPLATE, Splateslndex (pit) ) .assay(0) -WelKrw, cl) -Extreme (cHIGH, WellStat)
Figure imgf000071_0001
Case cMINIMUM dispstat = SplateslcSPLATE. Splateslndex (pit) ) .assay (0) -WelKrw, cl) .Extreme (cLOW, WellStat)
End Select
If SplateslcSPLATE, Splateslndexlplt) ) .assay (0) .WelKrw, cl) .Type <> "H" And SplatestcSPLATE, Splatesl ndexlplt) ) .assay (0) .Well (rw, cD.Type <> "L" _
And -dispstat < Limits (cLIMITINHIB, 2)
And -dispstat >= Limits (cLIMITINHIB, 1) Then
SelCompounds (CompoundsSelected) .Name = SplateslcSPLATE, Splateslndexlplt) ) .assay (0) .WelKrw, cl) .C ompound
SelCompounds (CompoundsSelected) .SPlatelD = SplateslcSPLATE, Splateslnde (pit) ). PlatelD
frmSPlateGraphic - 6
SelCompounds (CompoundsSelected) .row = rw SelCompounds (CompoundsSelected) .col = cl CompoundsSelected = CompoundsSelected + 1 End If
<J Next cl
^O Next rw Next pit frmCompoundList . Show frmCompoundList . Refresh Case "c" : ' Cyan 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 (0) .Well (rw, cl) .Inhib (WellStat)
Casee ccMMAAXXIIMMUUMM ddiissppssttaatt == SplateslcSPLATE, Splateslndexlplt) ) .assay (0) .Welllrw, cl) .Extreme (cHIGH, WellStat) Casee ccMMIINNIIMMUUMM ddijspstat = SplatestcSPLATE, Splateslndexlplt) ) .assay (0) .Well (rw, cl) .Extreme (cLOW, WellStat)
EEnndd SSeelleecctt
IIf: SplatestcSPLATE, Splateslndex (pit) ) .assay (0) .WelKrw, cD.Type <> "H" And SplatestcSPLATE, Splateslnd ex(plt) ) -assay(O) -WelKrw, cl) -Type <> "L" _
And -dispstat < Limits (cLIMITINHIB, 1) _
And -dispstat >= Limits (cLIMITINHIB, 0) Then
SelCompounds (CompoundsSelected) .Name = SplateslcSPLATE, Splateslndexlplt) ) .assay (0) -Well (rw, cl) .C
SelCompounds (CompoundsSelected) .SPlatelD = SplateslcSPLATE, Splateslndexlplt) ). PlatelD SelCompounds (CompoundsSelected) .row = rw SelCompounds (CompoundsSelected) .col = cl CompoundsSelected = CompoundsSelected + 1 End If
Select Case ViewType Case CAVERAGE dispstat = SplateslcSPLATE, Splateslndexlplt) ) -assay(0) -Welllrw, cl) . Inhib(WellStat)
Case cMAXIMUM dispstat = Splates (cSPLATE, Splateslnde lplt) ) -assay(0) -Well (rw, cl) -Extreme (cHIGH, WellStat)
Case cMINIMUM dispstat = SplateslcSPLATE, Splateslndexlplt) ) .assay(0) -Welllrw, cl) . Extreme (cLOW, WellStat)
End Select
If SplateslcSPLATE, Splateslndex (pit) ) .assay(0) -Well (rw, cD.Type <> "H" And SplatestcSPLATE, Splatesl ndex(plt) ) .assay(0) -Well (rw, cD.Type <> "L" _
And -dispstat >= Limits (cLIMITINHIB, 0) Then
SelCompounds (CompoundsSelected) -Name = Splates (cSPLATE, Splateslndex (pit) ) .assay(0) .Well (rw, cl) .C ompound
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 . Refresh Case "r" :
' High = Red Only
For pit = 0 To SplatesSubSelected - 1 For rw = 0 To 7 i For cl = 0 To 11
^ Select Case Viewype
■ Case CAVERAGE dispstat = SplateslcSPLATE, Splateslndex (pit) ) .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) .Well (rw, cl) .Extreme (cLOW, WellStat) End Select
If SplatestcSPLATE, Splateslndexlplt) ) .assay (0) .Well (rw, cD.Type <> "H" And SplateslcSPLATE, Splatesl ndex (pit) ) .assay(O) .Well (rw, cD.Type <> "L" _
And -dispstat >= Limits (cLIMITINHIB, 2) Then
SelCompounds (CompoundsSelected) .Name = SplatestcSPLATE, Splateslndexlplt) ) .assay(O) .Welllrw, cl) .C ompound
SelCompounds (CompoundsSelected) .SPlatelD = SplateslcSPLATE, Splateslnde (pit) ). PlatelD
SelCompounds (CompoundsSelected) . row = rw
SelCompounds (CompoundsSelected) .col = cl
CompoundsSelected = CompoundsSelected + 1
End If
Next cl
Next rw
Next pit frmCompoundList . Show frmCompoundList .Refresh
Case "b" :
'Blue Only
For pit = 0 To SplatesSubSelected - 1 For rw = 0 To 7
For cl = 0 To 11
If SplateslcSPLATE, Splateslndex (pit) ) .assay (0) .Welllrw, cD.Type <> "H" And SplateslcSPLATE, Splatesl ndexlplt) ) .assay (0) .Well (rw, cD.Type <> "L" _
And dispstat < Limits (cLIMITINHIB, 2) _
And dispstat >= Limits (cLIMITINHIB, 1) Then
SelCompounds (CompoundsSelected) .Name = SplatestcSPLATE, Splateslndexlplt) ) .assay(0) .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 Next cl Next rw Next pit frmCompoundList . Show frmCompoundLis . e resh Case "C": ' Cyan 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(O) .Well (rw, cl) . Inhib (WellStat) Case cMAXIMUM dispstat = SplatestcSPLATE, Splateslndexlplt) ) .assay(0) .Welllrw, cl) .Extreme (cHIGH, WellStat) Case cMINIMUM dispstat = SplateslcSPLATE, Splateslndexlplt) ) .assay(O) .WelKrw, cl) .Extreme (cLOW, WellStat) End Select ! If SplateslcSPLATE, Splateslndexlplt) ) .assay(0) .Well (rw, cD.Type <> "H" And SplateslcSPLATE, Splateslnd ex(plt) ) .assay (0) .Well (rw, cD.Type <> "L" _
And dispstat < Limits (cLIMITINHIB, 1) _ And dispstat >= Limits (cLIMITINHIB, 0) Then
SelCompounds (CompoundsSelected) .Name = SplatestcSPLATE, Splateslndex (pit) ) .assay (0) .WelKrw, cl) .C ompound
frmSPlateGraphic - 5
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 .Refresh Case "m" :
' Marked = Red, Dark Blue, Cyan For pit = 0 To SplatesSubSelected - 1 For rw = 0 To 7
For cl = 0 To 11
frmSPlateGraphic - 4
SelCompounds (CompoundsSelected) .SPlatelD = SplateslcSPLATE, Splateslndexlplt) ) .PlatelD SelCompounds ICompoundsSeleeted) .row = rw
SelCompounds (CompoundsSelected) .col = cl
CompoundsSelected = CompoundsSelected + 1
End If
Next cl
Next rw
Next pit frmCompoundList . Show frmCompoundList . Refresh Case "R":
' High = Red 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(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 _Jj If SplatestcSPLATE, Splateslndexlplt) ) .assay (0) .Well (rw, cD.Type <> "H" And SplatestcSPLATE, Splatesl t ndexlplt) ) .assay(0) .Well (rw, cD.Type <> "L" _ 1 And dispstat >= Limits (cLIMITINHIB, 2) Then
SelCompounds (CompoundsSelected) .Name = SplateslcSPLATE, Splateslndexlplt) ) . assay(0) .Welllrw, cl).C ompound
SelCompounds (CompoundsSelected) .SPlatelD = SplateslcSPLATE, Splateslndex (pit) ) .PlatelD SelCompounds (CompoundsSelected) .row = rw SelCompounds (CompoundsSelected) .col = cl CompoundsSelected = CompoundsSelected + 1 End If Next cl Next rw Next pit frmCompoundList . 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, Splateslndex (pit) ) -assay(0) -Well (rw, cl) . Inhib(WellStat)
Case cMAXIMUM dispstat = SplatestcSPLATE, Splateslndexlplt) ) .assay (0) .WelKrw, cl) .Extreme (cHIGH, WellStat)
Case cMINIMUM dispstat = SplatestcSPLATE, Splateslndex (pit) ) .assay (0) .WelKrw, cl ) .Extreme (cLOW, WellStat) End Select
Private Sub picPlate_KeyPress (KeyAscii As Integer)
Dim rw As Integer
Dim cl As Integer
Dim dispstat As Single
Dim pit As Long
Select Case ChrS (KeyAscii) Case "A":
' ALL compounds reported, regardless of inhibition For pit = 0 To SplatesSubSelected - 1 For rw = 0 To 7
For cl = 0 To 11
If SplateslcSPLATE, Splateslndexlplt) ) .assay(0) .Welllrw, cD.Type <> "H" And SplateslcSPLATE, Splatesl ndexlplt) ) .assay(0) .Well (rw, cD.Type <> "L" Then
SelCompounds (CompoundsSelected) .Name = SplateslcSPLATE, Splateslndex(pit) ) .assay(0) .Well (rw, cD.C ompound
SelCompounds (CompoundsSelected) .SPlatelD = SplateslcSPLATE, Splateslndexlplt) ). PlatelD SelCompounds (CompoundsSelected) .row = rw
SelCompounds (CompoundsSelected) .col = cl '
CompoundsSelected = CompoundsSelected + 1 End If Next cl Next rw -!j Next pit
<J- frmCompoundList . Show frmCompoundList .Refresh 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 = SplatestcSPLATE, Splateslndex (pit) ) .assay (0) .Well (rw, cl) . Inhib(WellStat) Case cMAXIMUM dispstat = SplatestcSPLATE, Splateslndex (pit) ) .assay(0) .Well (rw, cl) .Extreme (cHIGH, WellStat) Case cMINIMUM dispstat = SplateslcSPLATE, Splateslndexlplt) ) .assay(0) .Well (rw, cl) .Extreme (cLOW, WellStat) End Select '
If SplateslcSPLATE, Splateslndex (pit) ) .assay(0) .WelKrw, cD.Type <> "H" And SplateslcSPLATE, Splatesl ndexlplt) ) .assay(O) .WelKrw, cD.Type <> "L"
And dispstat >= Limits (cLIMITINHIB, 0) Then
SelCompounds (CompoundsSelected) .Name = Splates (cSPLATE, Splateslndexlplt) ) .assay(0) .Well (rw, cl) .C ompound
Figure imgf000075_0001
00/68810
. fc, cα «
- . u a υ u
Figure imgf000076_0001
hDC. CurrentX = ex cy = cy + 1.75 * UnitsPerCharacter hDC. CurrentY = cy hDC. Print " 0.0" hDC. CurrentX = ex cy = cy + 1.75 * UnitsPerCharacter hDC.CurrejntY = cy hDC. Print " " i Format (Limits (cLIMITINHIB, 0), "##0.0") hDC.FillColor = vbWhite hDC.Line (ex, cy - SpaceFactor * 1.2)-(cx + 0.33 * UnitsPerlneh, cy - SpaceFactor * 0.2), v hDC.CurrentX = ex cy = cy + 1.75 * UnitsPerCharacter hDC. CurrentY = cy hDC. Print " " S Format (Limits (cLIMITINHIB, 1), "##0.0") currclr = Clr (cLIMITINHIB, 0) hDC.FillColor = currclr hDC.Line (ex, cy - SpaceFactor * 1.2)-(cx + 0.33 * UnitsPerlneh, cy - SpaceFactor * 0.2), c hDC.CurrentX = ex cy = cy + 1.75 * UnitsPerCharacter hDC.CurrentY = cy hDC. Print " " & Format (Limits (cLIMITINHIB, 2), "##0.0") currclr = Clr (cLIMITINHIB, 1) hDC.FillColor = currclr i hDC.Line (ex, cy - SpaceFactor * 1.2)-(cx + 0.33 * UnitsPerlneh, cy - SpaceFactor * 0.2), c
C ^J1 hDC.CurrentX = ex cy = cy + 1.75 * UnitsPerCharacter hDC. CurrentY = cy currclr = Clr (cLIMITINHIB, 2) hDC.FillColor = currclr hDC.Line (ex, cy - SpaceFactor * 1.2)-(cx + 0.33 * UnitsPerlneh, cy - SpaceFactor * 0.2), c 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. CurrentY = cy hDC. Print " " fc Format ILimitslcLIMITCOMPOUNDCV, 0), "##0.0") hDC.FillColor = vbWhite hDC.Line (ex, cy - SpaceFactor * 1.2)-(cx + 0.33 * UnitsPerlneh, cy - SpaceFactor * 0.2), 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)
Figure imgf000078_0001
UnitsPerlneh = hDC. ScaleWidth / 11 HeightPerlnch = hDC. ScaleHeight / 11
UnitsPerCharacter = (hDC. fontsize * 20) / TwipsPerHeight ' Inhib Key hDC. ForeColor = vbBlack
frmSPlateGraphic - 2
If hDC. hDC = picPlate.hDC Then ex = (Across * 40) + 3 cy = 3
SpaceFactor = 0.15 * HeightPerlnch Else ' Printer ex = hDC. ScaleWidth - (0.6 * UnitsPerlneh) cy = 1
SpaceFactor = 0.15 * HeightPerlnch c_h End If hDC. CurrentX = ex 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 * UnitsPerlneh, cy - 0.05 * UnitsPerlneh), 0.05 * UnitsPerlneh, currclr hDC.DrawWidth = 1
For pit = 0 To SplatesSubSelected - 1
Call draw_plate(plt. Printer)
Next
Call DrawKeylPrinter)
Printer .EndDoc theend:
End Sub
Private Sub Form_Load() Dim pit As Integer
CurrSPlate = -1 pit = 0
Select Case SplatesSubSelected Case 1
Across = 1 Doirn = 1 ODown = 1 Case 2
Across = 1 Down = 2 ODown = 2 , Case 3
-J Across = 2
T"1 Down = 2
! ODown = 2 Case Else
I Across = Int (Sqr (SplatesSubSelected) ) ODown = Int (SplatesSubSelected / Across) Down = ODown If Across * ODown < SplatesSubSelected Then
Down = ODown + 1 End If End Select
Call mnuViewAverage_Click
For pit = 0 To SplatesSubSelected - 1
SplatestcSPLATE, Splateslndexlplt) ) .Top = (Intttplt) / (Across)) * 24) + (4 * IntMplt) / (Across))) + 2
SplatestcSPLATE, Splateslndexlplt) ) .Left = ((pit Mod (Across)) * 36) + (4 * (pit Mod (Across))) + 2
Next 'through all Splateslndex
End Sub
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 UnitsPerlneh As Single
Dim Hei htPerlnch s n l
Private Sub optControls_Clic (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
Threshold = 0
APlatesInARange = 50
WellStat = cSTATALL
SLabelT pe = cSPLATE
ALabelType = cAPLATE
Unload Me End Sub ex frmSPlateGraphic - 1
' Copyright 1999 Tropix, Inc. Option Explicit
Dim Across, Down, ODown As Integer Dim ViewType As Integer
Private Sub FileMenuPrint_Click() Dim pit As Long 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) + 50 Printer .ScaleHeight = (Down * 24) + (4 * Down) + 30 Printer. ScaleTop = -10
frmSignln - 2
Dim IHenv As Long
Dim DSN As String
Dim DSNItem As String * 1024
Dim DRVItem As String * 1024
Dim DSNLen, DRVLen As Integer
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 End If '
Loop End If ' I
End Sub
Private Sub menuFileExit_Click( ) , Call End_Program
-J End Sub
Private Sub menuHelp_Click( ) Dim i As Integer
' Load online help page ■
For i = cHIGH To cLOW
ActCtl (i) = txtlnhibCtl(i) -Text
ZCtl(i) = txtZCtl(i) -Text
CVCtl(i) = txtCVCtl(i) -Text (
SNCtlti) = txtSNCtl(i) -Text |
Next i j
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
ActCtl (i) = txtlnhibCtl(i) -Text
ZCtl(i) = txtZCtl(i) .Text
CVCtl(i) = txtCVCtl(i) .Text ι
SNCtl(i) = txtSNCtl(i) .Text Next i '
ZRange = Val (txtZStdevs.Text)
End Sub
Figure imgf000082_0001
Exit Sub
BadNode :
Debug. Print "Bad Node. Error = " 4 Err.Number 4 " " 4 Err -Description
End Sub
Private Sub txtAplatesInARange_Change ( ) mnuSelectRange. Caption = "Select " 4 txtAplatesInARange.Text 4 " Assay Plates"
APlatesInARange = Val (txtAplatesInARange.Text)
End Sub
Private Sub txtAplatesInARange_LostFocus 0 mnuSelectRange. Caption = "Select " 4 Val (txtAplatesInARange.Text) 4 " Assay Plates" End Sub
Private Sub txtCount_LostFocus (Index As Integer)
RangeLimits (Index) = Val("0" & txtCount (Index) )
Call Load_Nodes End Sub frmSignln - 1
' Copyright 1999 Tropix, Inc. Option Explicit
, Private Declare Function SQLDataSources Lib "ODBC 2.DLL" (ByVal henv4, ByVal fDirection%, ByVal szDSNS, ByVal cbDSNMax% , p o cbDSN%, ByVal szDescriptionS, ByVal cbDescriptionMax%, pcbDescription%) As Integer i Private Declare Function SQLAllocEnv% Lib "ODBC32.DLL" (env4)
Const SFN As Long = 1 Private DBNa e As String
Private Sub Actype_Clic (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
SSeett WWSS == CCrreeaatteeWWoorrkkssprace ( " " , "mdlscreen", txtPassword.Text, dbUseODBC) WS.LoginTimeout = 60 tConnect = ODBC;UID=mdlscreen;PWD=" 4 txtPassword.Text 4 ";DSN=" 4 DBName
Set CON = WS.OpenConnectionC", dbDriverNoPrompt, False, tConnect)
Set DB = CON. Database
AplateFilter = txtAplateFilter.Text SplateFilter = txtSplateFilter.Text Star Date = txtStartDate.Text EndDate = txtEndDate.Text
frmSelectedPlates - 10
Call mnuViewAssay_Click
ClickEffect = Index
End Sub
Private Sub optSLabel_Click( Index As Integer)
SLabelType = Index
Call Load_Nodes End Sub
Private Sub trvSPlates_NodeClick (ByVal Node As ComctlLib.Node)
Dim currimage As Listlmage
Dim pit As Integer
Debug. Print "trvSPlates_NodeClick" & " : " 4 SplateslcSPLATE, 0). PlatelD
On Error GoTo BadNode pit = 0
While SplateslcSPLATE, pit). PlatelD <> " " And "A" 4 Forma (Splates (cSPLATE, pit) . PlatelD, ################) <> Node, key pit = pit + 1
Wend
If SplatestcSPLATE, pit). PlatelD = " " Then i ' the selected plate was NOT a source plate
°° Set CurrAPlateClicked = IstAPlates . Findltern (Node. key) pit = 0
While ("A" 4 Format (Aplates (pit) .PlatelD (cAPLATE) , "##„########")) <> Node . key pit = pit + 1 Wend
Aplates (pit) .Selected = Not Aplates (pit) . Selected If Aplates (pit) .Selected Then
Node. Image = Aplates (pit) . imageindex 4 "S" Else
Npde. Image = Aplates (pit) . imageindex 4 "N" End If
Else
' it was a source plate
SplateslcSPLATE, pit) .Selected = Not SplateslcSPLATE, pit) .Selected
If SplatestcSPLATE, pit ) .Selected Then
Node. Image = SplatestcSPLATE, pit) . imageindex 4 "S"
Else
Node. Image = SplatestcSPLATE, pit) . imageindex 4 "N"
End If
Figure imgf000084_0001
Private Sub mnuViewAssay_Clic ( )
Dim imagekey As String
Dim aplt As Integer
Dim templist As Listltem
IstAPlates.Visible = True trvSPlates. Visible = False menuViewSource. Checked = False mnuViewAssay. Checked = True
' re-load aplate icons in the event of selection in the lstaplates view aplt = 0
While Aplateslaplt) . PlateΙD(cAPLATE) <> "" And (Aplates (aplt) -Good Or WellStat = cSTATALL) Set templist = IstAPlates. FindltemtAplates (aplt) . PlatelD (ALabelType) ) If Aplates (aplt) -Selected Then templist . Ξmalllcon = (Aplates (aplt) . imageindex 4 "S") Else templist -Smalllcon = Aplates (aplt) . imageindex 4 "N" End If aplt = aplt + 1 Wend
End Sub i Private Sub mnuViewGood_Click() i^j Dim pit As Integer
WellStat = cSTATGOOD
Foriplt = 0 To TtlAssayPlates
Aplates (pit) .Selected = False Next pit pit = 0 While SplateslcSPLATE, 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 If
Call Load_Nodes
End Sub
Private Sub optClickEffect_Click(Index As Integer)
Private Sub mnuShowPatterns_Click( )
Call CalcAPlatePattern frmAPlatePattern . Show End Sub
Private Sub mnuShowPerformance_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 i = i + 1
frmSelectedPlates - 9 Wend
ReDim Aplateslndex (AplatesSubSelected) i = 0 count = 0
While Aplatesli) .PlateΙD(cAPLATE) <> "'
If Aplates (i) .Selected Then Aplateslndex (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_Clic ( ) Dim pit As Integer
WellStat = cSTATALL
For pit = 0 To TtlAssayPlates
Aplates (pit) .Selected = False Next pit pit = 0
While SplatestcSPLATE, pit). PlatelD <> "" SplatestcSPLATE, pit) -Selected = False pit = pit + 1 Wend
Unload frmSelectedPlates frmSelectedPlates . Show End Sub
i = i + 1 Wend
ReDim Aplateslndex (AplatesSubSelected) i = 0 count = 0
While Aplates (i ) . PlatelD (cAPLATE) <> ""
Figure imgf000087_0001
If Aplates (i) .Selected Then
Aplateslndex (count) = i count = count + 1 End If i = i + 1 Wend
If AplatesSubSelected <> 0 Then frmAPlateGraphic . Show Else
MsgBox ("Please select at least One Assay Plate") End If
End Sub
Private Sub mnuShowCompound_Click ( ) Dim i As Integer Dim count As Integer
Debug. Print "mnuShowCompound_Click ( ) " 4 " : " 4 Splates (cSPLATE, 0). PlatelD ' load list of Selected SPlates with index values of location in SPlate array i = 0
SplatesSubSelected = 0
While SplatestcSPLATE, i) .PlatelD <> "" If SplatestcSPLATE, i). Selected Then
SplatesSubSelected = SplatesSubSelected + 1 End If i = i + 1 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 rmSPlateGraphic. Show
Else
MsgBox ("Please select at least One Compound Plate") End If
End Sub
cnt = 0
While (cnt < APlatesInARange) And (Aplateslaplt + cnt) . PlatelD (cAPLATE) <> "") If (WellStat = cSTATALL) Or Aplateslaplt + cnt). Good Then
Aplateslaplt + cnt) . Selected = True
Set te pnode = trvSPlates .Nodes I "A" 4 Format (Aplates (aplt + cnt) . PlatelD (cAPLATE) , "„##########")) tempnode . Image = Aplateslaplt + cnt) . imageindex 4 "S"
Set templist = IstAPlates .Listltems I "A" 4 Forma (Aplates (aplt + cnt) . PlatelD (cAPLATE) , "###########")) templist .Smalllcon = Aplateslaplt + cnt) . imageindex & "S"
End If cnt = cnt + 1
Wend
While Not found And (Aplateslaplt + cnt) .PlatelDlcAPLATE) <> "") If (WellStat = cSTATALL) Or Aplateslaplt + cnt) .Good Then
Set CurrAPlateClicked = IstAPlates. Findltem (Aplates (aplt + cnt) . PlatelD (cAPLATE) ) found = True End If cnt = cnt + 1 Wend End Sub
Private Sub mnuSelectSourceFromAssay_Click() Dim spit As Integer Dim aplt As Integer Dim tempnode As Node aplt = 0
While Aplateslaplt) .PlatelD (cAPLATE) <> " If Aplates (aplt) .Selected Then spit = 0 While SplatestcSPLATE, spit) . PlatelD <> Aplates (aplt) . PlateΙD(cSPLATE) spit = spit + 1 Wend
SplatestcSPLATE, spit) . Selected = True
Set tempnode = trvSPlates. Nodes ( "A" 4 Format (Aplates (aplt) . PlateΙD(cSPLATE) , "################")) tempnode . Image = SplateslcSPLATE, spit) .imageindex 4 "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
1 = 0
AplatesSubSelected = 0
While Aplates (i) .PlatelD (cAPLATE) <> ""
If Aplates (i) .Selected Then
AplatesSubSelected = AplatesSubSelected + 1
End If
frmSelectedPlates - 7 aplt = aplt + 1
Wend
End Sub
Private Sub Deselect_SPlates ( )
Dim spit As Integer
Dim tempnode As Node spit = 0
While SplateslcSPLATE, spit) .PlatelD <> "" SplateslcSPLATE, spit) .Selected = False
Set tempnode = trvSPlates. Nodes ( "A" 4 Format (Splates (cSPLATE, spit) .PlatelD, ################)) tempnode. Image = SplatestcSPLATE, spit) .imageindex 4 "N" spit = spit + 1 Wend End Sub
Private Sub mnuSelectDeselAssay_Click( )
Call Deselect_APlates End Sub
Private Sub mnuSelectDeselect_Clic ( )
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 Boolean
Call Deselect_APlates Call mnuViewAssay_Click found = False
APlatesInARange = Val I txtAplatesInARange.Text)
If Val (txtAplatesInARange.Text) < 1 Then APlatesInARange = 0
If Val (txtAplatesInARange.Text) > TtlAssayPlates Then APlatesInARange = TtlAssayPlates aplt = 0
While Aplates(aplt) .PlatelD (cAPLATE) <> CurrAPlateClicked.Text aplt = aplt + 1
Wend
End If aplt = aplt + 1
Wend spit = spit + 1
Wend
End Sub
Private Sub mnuSelectAssayS_Click( ) Dim aplt As Integer Dim tempnode As Node Dim templist As Listltem aplt = 0
While Aplateslaplt) .PlatelDlcAPLATE) <> ""
If WellStat = cSTATALL Or Aplates (aplt) .Good Then Aplates (aplt) .Selected = True
Set tempnode = trvSPlates. Nodes ( "A" 4 Format (Aplates (aplt) .PlatelD (cAPLATE) , "###########")) tempnode . Image = Aplates (aplt) . imageindex 4 "S"
Set templist = IstAPlates . Listltems ( "A" 4 Format (Aplates (aplt) .PlatelD (cAPLATE) , "###########")) templist . Smalllcon = Aplates (aplt) . imageindex 4 "S" End If aplt = aplt + 1 Wend End Sub
, Private Sub mnuSelectCompounds_Click ( ) ∞ ' select all Splates i Dim spit As Integer
Dim tempnode As Node
Dim templist As Listltem spit = 0
While SplatestcSPLATE, spit) . PlatelD <> ""
SplatestcSPLATE, spit) . Selected = True
Set tempnode = trvSPlates.Nodes ( "A" 4 Format (Splates (cSPLATE, spit) .PlatelD, "################")) tempnode . Image = SplateslcSPLATE, spit) . imageindex 4 "S" spit = spit + 1 Wend End Sub
Private Sub Deselect_APlates ( )
Dim aplt As Integer
Dim tempnode As Node
Dim
Figure imgf000090_0001
Figure imgf000090_0002
On Error GoTo theend cmdSave.CancelError = True cmdSave. ShowSave fname = cmdSave . filename fl = FreeFile
Open fname For Output As fl
Print #1.1, "Aplate_ID" 4 Chr$(9) 4 "S/N" 4 Chr$(9) 4 "CV%" 4 Chr$(9) 4 "HighCntrl" 4 Chr$(9) 4 "LowCntrl" 4 Chr$(9) &
"Bad Wells"
For aplt = 0 To TtlAssayPlates - 1
Print #fl, Aplates (aplt) . PlatelDlcAPLATE) 4 Chr$<9) 4 Format (Aplates (aplt) . sn (WellStat) , "0.00") 4 Chr$(9) 4 _
Forma (Aplates (aplt) .cv(WellStat) , "0.00") 4 "%" Chr$(9) 4 Format (Aplates (aplt) .Control (cSTATGOOD, cHIGH) , "
#####0.00") & ChrSO) 4 _
Format (Aplates (aplt) .Control (cSTATGOOD, cLOW) , "#####0.00") Chr$(9) 4 Aplates (aplt) .BadWells Next aplt Close fl
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 spit = 0
While SplateslcSPLATE, spit) . PlatelD <> •• aplt = 0 While Aplateslaplt) .PlatelD (cAPLATE) <> ""
If Aplateslaplt) -PlateΙD(cSPLATE) = SplateslcSPLATE, spit) .PlatelD Then
Aplates (aplt) .Selected = SplateslcSPLATE, spit) . Selected
Set tempnode = trvSPlates .Nodes ( "A" 4 Format (Aplates (aplt) . PlatelD(cAPLATE) , "###########"))
If Aplateslaplt) .Selected Then tempnode. Image = (Aplates (aplt) .imageindex 4 "S")
Else tempnode . Image = Aplates (aplt) . imageindex 4 "N"
End If
Set templist = IstAPlates -Listltems ("A" 4 Format (Aplates (aplt) . PlatelDlcAPLATE) , "###########"))
If Aplateslaplt) -Selected And (WellStat = cSTATALL Or Aplates (aplt) -Good) Then templist.Smalllcon = (Aplateslaplt) .imageindex 4 "S") Else templist. Smalllcon = Aplates (aplt) .imageindex 4 "N" End If
While "A" 4 Format (Aplates (aplt) -PlatelDlcAPLATE) ) <> templist. ey aplt = aplt + 1
Wend
Aplates (aplt) .Selected = Not Aplates (aplt) .Selected imagekey = Aplates (aplt >. imageindex
If Aplates (aplt) .Selected Then templist .Smalllcon = (Aplates (aplt) . imageindex 4 "S")
Else templist .Smalllcon = Aplates (aplt) . imageindex 4 "N" End If Next tempy End If ' cSELECT
Exit Sub
BadSelect:
-Debug. Print "Bad Item (mouse up). Error = " 4 Err.Number 4 " " 4 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 lstaplates view aplt = 0
While Aplates(aplt) . PlatelD(cAPLATE) <> ""
If WellStat = cSTATALL Or Aplates (aplt) -Good Then
Set tempnode = trvSPlates -Nodes. Item! "A" 4 Forma (Aplates (aplt) . PlatelD (cAPLATE) ) ) imagekey = Aplates (aplt) . imageindex If Aplates (aplt) .Selected Then tempnode . Image = (Aplates (aplt) .imageindex 4 "S") Else tempnode . Image = Aplates (aplt) . imageindex 4 "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
' get current image index and change Bad flag
Newlndex = MidS (Aplates (aplt) . imageindex, 1, )
If Aplates (aplt) -Good Then
Aplates (aplt) -imageindex = Newlndex 4 "G"
Else
Aplates (aplt) . imageindex = Newlndex 4 "B"
End If Item. Smalllcon = Aplates (aplt) . imageindex 4 "N"
End If
Exit Sub
BadSelect:
Debug. Print "Bad Item (Click). Error = " 4 Err.Number 4 " " 4 Err.Description
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 D 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 tempy = StartY
StartY = Y
Y = tempy
End If
Else
StartY = Y End If
For tempy = StartY To Y Step 225
Set templist = IstAPlates. HitTest (200', tempy) aplt = 0
frmSelectedPlates - 4
If Me.WindowState <> vbMinimized Then trvSPlates. Top = 0
IstAPlates. op = 0 trvSPlates. Left = 0
IstAPlates. eft = 0 trvSPlates. Width = frmSelectedPlates .Width - (fraClickEffeet .Width + 150) IstAPlates. Width = frmSelectedPlates. idth - (f aClickEffeet .Width + 150) trvSPlates.Height = frmSelectedPlates .Height - 900 IstAPlates. Height = rmSelectedPlates .Height - 900 fraClickEffeet. Left = frmSelectedPlates. Width - (fraClickEffeet. Width + 100) fraSLabel.Left = fraClickEffeet. Left fraALabel.Left = fraClickEffeet .Left fraCounts.Left = fraClickEffeet -Left lblAPlatesInARange.Lef = frmSelectedPlates -Width - (lblAPlatesInARange .Width + 100) txtAplatesInARange.Left = frmSelectedPlates.Width - ItxtAplatesInARange. Width + 300) End If End Sub
Private Sub lstAPlates_ItemClick (ByVal Item As ComctlLib. Listltem)
Dim Newlndex As String
Dim rsUpdateWholePlate As Recordset i Dim aplt As Integer J Dim flag_val As String i Dim UpdateSQL As String
On Error GoTo BadSelect
Set CurrAPlateClicked = Item If ClickEffect = cREJECT Then ' find aplt index value aplt = 0 While Aplates (aplt) . PlatelD (cAPLATE) <> Item
^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"
End If ' Insert into Tropix Update Whole Plate table
UpdateSQL = "insert into TROPIX_UPDATE_WHOLE_APLATE values ('" 4 Aplates (aplt) . PlateCode (cAPLATE) 4 "','" & flag_v al 4 "' ) "
Set rsUpdateWholePlate = DB. OpenRecordset (UpdateSQL, dbOpenSnapshot) rsUpdateWholePlate . Close
'set font color for SN values currsn = Aplates (aplt) . sn (WellStat) IstAPlates. Font -Bold = True If currsn < Limits (cLIMITPLATESN, 0) Then currclr = Clr (cLIMITPLATESN, 0)
Elself currsn Limits (CLIMITPLATESN, 1) Then currclr = Clr (cLIMITPLATESN, 1) Elself currsn < LLiimmiittss ((ccLLIIMMIITTPPLLAATTEESSNN,, 2) Then currclr = Clr (cLIMITPLATESN, 2) Else
IstAPlates. Font. Bold = False currclr = vbBlack End If
IstAPlates .ForeColor = currclr tempitem.Subltems(l) = Format (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 = Clr (cLIMITPLATECV, 0) Elself currcv < Limits (cLIMITPLATECV, 2) Then currclr Clr (cLIMITPLATECV, 1)
SO Else t J currclr Clr (CLIMITPLATECV, 2) End If
IstAPlates . ForeColor currclr tempitern . Sublterns (2 ) Format (Aplates (aplt) .cv(WellStat) , "0.00") 4 %- tempitern. Sublterns (3) Aplateslaplt) .BadWells IstAPlates . Font .Bold False IstAPlates . ForeColor vbBlack End If aplt = aplt + 1 Wend IstAPlates.View = lvwReport trvSPlates.Nodes (1) .Expanded True End Sub
Private Sub Form_Resize ( )
rmSelectedPlates
Figure imgf000096_0001
End If Next cl Next rw
Index = " " For i = 0 To 2
If plateiconli) >= RangeLimits (0) Then
Index = Index 4 "H" Elself plateiconli) >= RangeLimits (1) Then
Index = Index 4 "M" Elself plateiconli) >= RangeLimits (2) Then
Index = Index 4 "L" Else
Index = Index 4 "N" End If Next i
If Not Aplates (aplt) .Good Then Index = Index 4 "B"
Else
Index = Index 4 "G"
End If
If (WellStat = cSTATALL) Or (Aplates (aplt) .Good) Then Aplates (aplt) . imageindex = Index
Set tempnode = trvSPlates -Nodes .Add( "A" 4 Format (Aplates (aplt ). PlatelD (cSPLATE) , "################"), tvwChild , "A" 4 Format (Aplates (aplt) .PlatelD (cAPLATE) , "###########"), Aplates (aplt) . PlateID(ALabelType) ) If Aplates (aplt) -Selected Then
Index = Index 4 "S" Else
Index = Index 4 "N" End If tempnode . Image = Index tempnode. Sorted = True
Set tempitem = IstAPlates .Listltems .Add( , "A" 4 Format (Aplates (aplt) . PlatelD (cAPLATE) ) , Aplates (aplt) . PlateID( ALabelType), Index, Index)
If value >= Limits (cLIMITINHIB, 2) Then plateieonlO) = plateicon(O) + 1 Elself value > Limits (cLIMITINHIB, 1) Then plateicon(l) = plateicon(l) + 1
Elself value > Limits (cLIMITINHIB, 0) Then plateicon(2) = plateicon(2) + 1
Else plateicon (3) = plateicon (3) + 1
End If ' value range finding
End If 'data well
Next cl
Next rw
Index = " " For i = 0 To 2
If plateiconli) >= RangeLimits (0) Then
Index = Index 4 "H" Elself plateiconli) >= RangeLimits (1) Then
Index = Index 4 "M" Elself plateiconli) >= RangeLimits (2) Then
Index = Index 4 "L" i:lse
Index = Index 4 "N" I.nd If Next i
Index = Index 4 "G"
Set tempnode = trvSPlates.Nodes.Add! "Assay" , tvwChild, "A" 4 Format (Splates (cSPLATE, spit) .PlatelD, "############# ), Splates I SLabelType, spit) . PlatelD) SplateslcSPLATE, spit) . imageindex = Index i
If SplatestcSPLATE, spit) .Selected Then tempnode . Image = Index 4 "S"
Else tempnode . Image = Index 4 "N"
End If spit = spit + 1
Wend
' Add Aplates aplt = 0
While Aplateslaplt) .PlateΙD(cAPLATE) <> • •
' determine image index value = 0
For i = 0 To 3 plateiconli) = 0
Next i
For rw = 0 To 7
For cl = 0 TO 11
If Aplateslaplt) .Welllrw, cD.Type = "D" Then value = Aplateslaplt) .Welllrw, cl) .Inhib(WellStat)
If value >= Limits (cLIMITINHIB, 2) Then plateicon (0) = plateicon (0) + 1 Elself value > Limits (cLIMITINHIB, 1) Then plateicon(l) = plateicon(l) + 1
Private Sub Load_Nodes ( )
Dim tempnode As Node
Dim tempitern As Listltem
Dim tempname As String
Dim spit As Integer
Dim aplt As Integer
Dim rw As Integer
Dim cl As Integer
Dim value As Double im Index As String im indexval As Integer im plateicon (3) As Integer im i As Integer im currsn As Single im currcv As Single im currclr As ColorConstants im clh As ColumnHeader trvSPlates . odes . Clear IstAPlates . Listltems . Clear
frmSelectedPlates - 2 trvSPlates. ImageList = ImageListl IstAPlates. Icons = ImageListl IstAPlates . Smalllcons = ImageListl
IstAPlates . ColumnHeaders . Clear
Set clh = IstAPlates. ColumnHeaders. Add (, , "Plate ID")
Set clh = IstAPlates. ColumnHeaders.Add (, , "SN", 600)
Set clh = IstAPlates. ColumnHeaders. Add(, , "CV", 900)
Set clh = IstAPlates. ColumnHeaders.Add (, , "Bad Wells", 1600)
' Create Root Node
Set tempnode = trvSPlates.Nodes.Add ( , , "Assay", Aplates (0) .assay) tempnode. Sorted = True ' Add Splates spit = 0
While SplateslcSPLATE, spit) .PlatelD <> determine image index value = 0
SplateslcSPLATE, spit ). imageindex = 0
For i = 0 To 3 plateiconli) = 0
Next i
For rw = 0 To 7
For cl = 0 To 11
If SplatestcSPLATE, spit) .assay (0) .Well (rw, cD.Type = "D" Then value = SplateslcSPLATE, spit) .assay (0) .Well (rw, cl) .Inhib(WellStat)
On Error GoTo theend cmdSave.CancelError = True cmdSave . ShowSave fname = cmdSave. filename fl = FreeFile
Open fname For Output As fl
Print #fl, "CompoundID" 4 Chr$(9) 4 "AplatelD" 4 Chr$(9) 4 "AssayCode" 4 Chr$(9) 4 "Row" 4 Chr$(9) 4 "Column" 4 Chr$(9 ) 4 "Raw" 4 Chr$(9) 4 "Inhib" r = 0
While TempRst (r) -PlatelD <> ""
Print #fl, TempRst (r) .compoundlD 4 Chr$(9) 4 TempRst(r) .PlatelD 4 ChrS (9) 4 _ Aplates(O) -assay 4 Chr$(9) 4 ChrS (TempRst (r) .row + Asc ("A")) 4 Chr$(9) 4 TempRst (r) . col 4 Chr$(9) TempRst (r) .Raw 4 Chr$(9) 4 TempRst (r) .Inhib r = r + 1
Wend
Close fl
Exit Sub theend: r = MsgBox(r 4 4 Err.Description, vbOKOnly) Close fl End Sub
Private Sub Form_Load()
RangeLimits (0) = Val("0" 4 txtCount(O)) RangeLimits (1) = ValC'O" 4 txtCount(l)) RangeLimits (2) = ValC'O" 4 txtCount(2)) optSLabel (SLabelType) .value = True optALabel (ALabelType) .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 menuViewSource.Checked = True trvSPlates.Visible = True
IstAPlates.Visible = False End If mnuSelectRange.Caption = "Select 4 txtAplatesInARange.Text 4 " Assay Plates" Call loadimages
Call Load_Nodes
Set CurrAPlateClicked = IstAPlates.GetFirstVisible APlatesInARange = Val (txtAplatesInARange.Text) End Sub
Else
' Individual Cells have been choosen strTemp = " " bchoosen = False flxPreSelect .col = EndCol
For rw = 3 To flxPreSelect .Rows - 1 lxPreSelect .row = rw
If flxPreSelect. CellFontBold Then tempSplatelD = 4 (flxPreSelect . extMatrix (rw, 0))
If tempSplatelD = "'No Splate" Then tempSplatelD = strTemp = strTemp 4 "'" 4 ( lxPreSelect .TextMatri (rw, 0) ) 4 " ' , " bchoosen = True End If Next rw
If bchoosen Then strTemp = LeftS (strTemp, Len(strTemp) - 1)
If ImportType = cBYSOURCE Then ' selection by splate strSQL = strSQL 4 "sp. splate_id in ( " 4 strTemp 4 ")" Else strSQL = strSQL 4 " to_char (tps . import_date, ' YYYY/MM/DD' ) in (" 4 strTemp 4 ")" End If End If End If
If NullSPlate Then ' If achoosen Or schooseπ Then strSQL = strSQL 4 " AND" c strSQL = strSQL 4 " sp.splate_id is NULL" 1 End If
If SelectMode <> -1 Then strSQL = strSQL 4 " ) " ' End Assay_code / Splate selection restrictions
SubSelectSQL = "AND (" 4 strSQL End Function
frmSelectedPlates - 1
' Copyright 1999 Tropix, Inc.
Option Explicit
Dim GroupSelect As Boolean ' for IstAplates
Dim StartY As Integer ' for aplates, if group selecting
Dim CurrAPlateClicked As Listltem ' for determining starting point ranged selection
Dim ClickEffect As Integer
Dim RangeLimits (3) As Integer
Private Sub Coιnmandl_Click ( )
Dim aplt As Integer
Dim fname As String D Diimm ffll AAss IInntteeger Dim r As Long
Else
If EndDate = "" Then
DateWhere = " AND (tps. import_date >= to_date ( ' " 4 StartDate 4 "', 'MM/DD/YY ') ) "
FormTitle = FormTitle 4 "import--date after " 4 StartDate 4 ", " Else
DateWhere = " AND ( tps . import_date between to_date('" 4 StartDate 4 "', 'MM/DD/YY' ) and to_date ( ' " 4 EndDate 4
Figure imgf000101_0001
frmPreselect
" ' , 'MM/DD/YY' ) ) "
FormTitle = FormTitle 4 "import_date between " 4 StartDate 4 " " 4 EndDate 4 ", " End If End If
If SelectStat = cSTATALL Then
BogusWhere = " AND (1=1) "
FormTitle = FormTitle 4 "Good and Bad Assay Plates* Else
BogusWhere = " AND (tps.bogus_flag is NULL) "
FormTitle = FormTitle 4 "Good Assay Plates Only" End If
End Sub
■ Private Function SubSelectSQ ( ) As String £> Dim strSQL As String 1 Dim strTemp As String
Dim tempSplatelD As String
Dim tempdate As String
Dim achoosen As Boolean
Dim schoosen As Boolean
Dim bchoosen As Boolean
Dim rw As Integer
Dim cl As Integer
Dim pit As Integer
Dim NullSPlate As Boolean
AssayName = flxPreSelect .TextMatrix(0, EndCol)
Assay_Code ONLY restrictions
If (flxPreSelect.TextMatrixd, EndCol) = flxPreSelect. TextMatrix(2, EndCol)) Then
' an assay type has been selected (total = selected) strTemp = "'" 4 ( lxPreSelect . extMatrix (0, EndCol)) 4 "' " strSQL = strSQL 4 " (1=1) " ' assay_code already restricted in assaywhere
Else strSQL = "select to_char (tps. import_date, 'YYYY/MM/DD' ) , " 4 strAssays 4 "'X'" 4 _
" from splate sp, mplate mp, aplate ap, tropix_plate_status tps * 4 _
I " where ap.aplate_code = tps.aplate_code AND " 4 _
1 " mp.splate_code = sp. splate_code(+) AND " 4 _
" ap-mplate_id = mp.mplate_id(+) " 4 _
AplateWhere 4 SplateWhere 4 DateWhere 4 BogusWhere 4 _
" group by to--char (tps . import_date, 'YYYY/MM/DD' ) " 4
" order by to_char (tps. import_date, 'YYYY/MM/DD' ) "
End I,f
Set rsPreSelect = DB. OpenRecordset (strSQL, dbOpenSnapshot) rsPreSelect .MoveFirst i = 0
While Not rsPreSelec .EOF i = i + 1 rsPreSelect . MoveNext Wend rsPreSelect .MoveFirst flxPreSelect. Rows = 3 + i flxPreSelect .Cols = 2 + TtlAssays flxPreSelect.ColWidth(O) = 1500 flxPreSelect.ColWidth(l) = 600
Call FillFlxPreSelect g End If i End Sub
Private Sub SetRestrictions ( )
FormTitle = "Where:
If (AplateFilter = "") Then
AplateWhere = " AND (1=1) " Else
AplateWhere = " AND (ap.aplate_id like '" 4 AplateFilter 4 "') "
FormTitle = FormTitle 4 "aplate_id like '" 4 AplateFilter 4 "', " End If
If (SplateFilter = "") Then SplateWhere = " AND (1=1
Else
Figure imgf000102_0001
If StartDate = " Then
If ESnnddDDaattee == """ TThben DateWhere = " AND (1=1)
Else
DateWhere = " AND (tps.import_date <= to_date('" 4 EndDate 4 "', 'MM/DD/YY' ) ) FormTitle = FormTitle 4 "import_date before " 4 EndDate 4 ", "
End If
Private Sub Setup!)
Dim strSQL As String
Dim strAssays As String -
Dim i As Integer
Dim msg As Integer ' Retrieve AssayCode information strSQL = "Select distinct ap.assay_code " 4 _
" from aplate ap, splate sp, mplate mp, tropix_plate_status tps " 4 _ " where ap.mplate_id = mp.mplate_id AND" 4 _ " sp. splate_code = mp.splate_code AND * 4 _ " ap.aplate_code = tps .aplate_code " 4 _ AplateWhere 4 SplateWhere 4 DateWhere 4 BogusWhere 4 _ " order by ap.assay_code"
Debug. Print strSQL
Set rsAssays = DB.OpenRecordsetlstrSQL, dbOpenSnapshot)
I rsAssays. EOF Then msg = MsgBo ( "No data exists in this database to match your restrictions. " 4 _ ChrS (10) 4 "Please check your conditions and try again", vbOKOnly)
Unload Me Else ' records were retrieved
frmPreSelect - 5 i rsAssays. MoveLast
JTtlAssays = rsAssays. ecordCount
ReDim Assays (TtlAssays) rsAssa s . Mo eFirst i = 0
While Not rsAssays. EOF
Assays (i) = rsAssays. Fields (0) strAssays = strAssays 4 " sum (decode (ap. assay_code, ' • 4 Assays(i) 4
"',1,0)) count" 4 1 4 ", " rsAssays .MoveNext i = i + 1
Wend
'get counts of assay plates for each well in the flxgrid
If ImportType = cBYSOURCE Then strSQL = "select sp. splate_id, " 4 strAssays 4 "'X'" 4 _
" from splate sp, mplate mp, aplate ap, tropix_plate_status tps " 4
" where ap.aplate_code = tps.aplate_code AND " 4 _
" mp.splate_code = sp.splate_code ( + ) AND " 4 _
" ap.mplate_id = mp.mplate_id(+) " 4 _ AplateWhere 4 SplateWhere 4 DateWhere 4 BogusWhere 4 " group by sp.splate_id " 4 _ " order by sp. splate_id"
EndRow = flxPreSelect -MouseRow
EndCol = flxPreSelect -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 flxPreSelect .col = EndCol count = Int (flxPreSelect. TextMatrix (2, EndCol) 4 ".0") flxPreSelect.TextMatrix(2, 1) = Int ( flxPreSelect -TextMatrix (2, 1) 4 ".0") - count
If S>artRow < 3 Then ' a title row was clicked - choose the whole assay , StartRow = EndRow
•—' For rw = 3 To flxPreSelect -Rows - 1
(3 flxPreSelect .row = rw
' flxPreSelect. CellFontBold = Not flxPreSelect .CellFontBold count = count + ((-2 * Int IflxPreSelect. CellFontBold) ) - 1) * flxPreSelect .Text Next Else ' an individual well (or subset of wells) was clicked For rw = StartRow To EndRow flxPreSelect . row = rw flxPreSelect. CellFontBold = Not flxPreSelect. CellFontBold count = count + ((-2 * Int ( flxPreSelec -CellFontBold) ) - 1) * Int (flxPreSelect -Text) Next End If flxPreSelect. TextMatrix (2, EndCol) = count flxPreSelect. TextMatri (2, 1) = Int (flxPreSelect .TextMatrix (2 , 1) 4 ".0") + count End If
AssayWhere = "AND (ap.assay_code = '" 4 flxPreSelect .TextMatrix (0, EndCol) 4 "') "
End Sub
Private Sub Form_Load ( ) 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 " 4 _ "where assay = '" 4 Aplates (0) .assay 4 "'"
Set rsranges = DB. OpenRecordset (strSQL, dbOpenSnapshot) rsranges.MoveFirst While Not rsranges.EOF
Limits (rsranges . Fields (1) , rsranges .Fields (2) ) = rsranges.Fields (3) rsranges.MoveNext Wend rsranges.Close End If
,' . pbrData.min = 0
O pbrData. ax = TtlSplates + 1 "* pbrData. value = 0
Call CalcSPlateStats fraLoading.Visible = False frmLimits . Show End Sub
frmPreselect - 4
Private Sub flxPreSelect_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
StartRow = flxPreSelect .MouseRow 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 APlates ( ) rsPlateData.MoveFirst pit = 0
Do Until rsPlateData. EOF
Aplates (pit) -PlatelD (cAPLATE) = rsPlateData. Fields ( "aplate_id" ) 4 ""
Aplates(plt) .PlateCode (cAPLATE) = Val (rsPlateData. Fields ( "aplate_code" ) )
Aplates (pit) . PlateΙD(cDPLATE) = rsPlateData. Fields ( "dplate_id") 4 ""
Aplates(plt) . PlateCode(cDPLATE) = Val (rsPlateData.Fields! "dplate_code" ) )
Aplates (pit) .PlatelD(cMPLATE) = rsPlateData.Fields ( "mρlate_id" ) 4 •
Aplates(plt) . PlateCode (cMPLATE) = Val (rsPlateData. Fields 1 "mplate_code" ) )
Aplateslplt) .PlatelD (cSPLATE) = rsPlateData. Fields ( "splate_id" ) 4 ""
Aplates (pit) .PlateCode (cSPLATE) = Val("0" 4 rsPlateDa a.Fields I "splate_code") )
Aplates (pit) .assay = rsPlateData.Fields ( "assay_code" ) 4 ""
If (rsPlateData.Fields ("bogus_flag") 4 "") = "T" Then
Aplates (pit) .Good = False Else
Aplates (pit) .Good = True End If
' Get the well data for each plate il-. strSQL = "Select column_number, row_letter, " 4 _ " raw_value, calc_value, bogus_flag, well_type, " 4 _ i " comρound_id, sample_id " 4 _
" from awell " 4 _ " where " 4 _ " aplate_code = ' " 4 Aplates (pit) . PlateCode (cAPLATE) 4 "'"
Set rsAWellData = DB.OpenRecordset (strSQL, dbOpenSnapshot) rsAWellData.MoveFirst Do Until rsAWellData.EOF rw = Asc (rsAWellData. Fields (1) ) - Asc ("A") ςl = rsAWellData. Fields(O) - 1
Aplates (pit) .WelKrw, cl) .Raw = Val (rsAWellData. Fields (2) 4 ".0")
If Aplates (pit) .Well (rw, cD.Raw < 0 Then
Debug. Print Aplates (pit) .Well (rw, cD.Raw
End If
Aplateslplt) .WelKrw, cl) .Calc = Val (rsAWellData. Fields(3) 4 ".0")
Aplateslplt) .WelKrw, cD.Type = rsAWellData. Fields (5) 4 ""
Aplates (pit) -Well (rw, cl). Compound = rsAWellData.Fields (6) 4 ""
Aplateslplt) .WelKrw, cl). Sample = rsAWellData.Fields (7) 4 ""
If (rsAWellData.Fields (4) 4 " = "T") Then
Aplates (pit) .Well (rw, cD.Good = False
Else
Aplates (pit) .Well (rw, clJ.Good = True
End If
' Get Count of MaxAssayCompounds strSQL = "Select maxtcount (*) ) from aplate group by assay_code, dplate_code"
Set rsAssayCompound = DB. OpenRecordset (strSQL, dbOpenSnapshot)
MaxAssayCompounds = rsAssayCompound. Fields (0) . alue
' get count of compounds strSQL = "Select count!*) from compound"
Set rsTtlCo pound = DB. OpenRecordset (strSQL, dbOpenSnapshot)
TtlCompounds = rsTtlCompound. Fields (0) .value
ReDim SelCompounds (TtlCompounds / 10) pbrData.min = 0 pbrData. Max = In (flxPreSelect.TextMatrix(2, 1) 4 ".0") + 1 pbrData. value = 0
' === Get the Aplate / Awell data strSQL = "Select ap.aplate_id, ap.aplate_code, ap . assay_code , " 4 _
" dp.dplate_id, dp . dplate_code , " 4 _
" mp.mplate_id, mp.mplate_code, " 4 _
" sp.splate_id, sp.splate_code, " 4 _
" tps.bogus_flag" 4 _
" from aplate ap, dplate dp, mplate mp, splate sp, tropix_plate_status tps" 4 _
" where" 4 _
" ap.dplate_code = dp . plate_code AND" 4 _
" dp.mplate_code = mp.mplate_code(+) AND" 4 _
" mp.splate_code = sp. splate_code(+) AND" 4 _ o " ap . aplate_code = tps .aplate_code"
C-Λ strSQL = strSQL 4 AplateWhere 4 SplateWhere 4 DateWhere 4 BogusWhere 4 Assay here 4 _
SubSelectSQL 4 " order by ap.aplate_id" ' Execute the SQL statement to retrieve the APl=te le"el information Debug. Print strSQL Set rsPlateData = DB.OpenRecordset (strSQL, dbOpenSnapshot)
' === Place the information into the Aplates () array
' Count retrieved records rsPlateData.MoveFirst pit = 0 Do Until rsPlateData. EOF pit = pit + 1 rsPlateData . MoveNext Loop
frmPreselect - 2
'empty Aplates
If AplatesSubSelected <> 0 Then
For pit = 0 To AplatesSubSelected
For i = 0 To 3
Aplates (pit) .PlateΙD(i) = ""
Aplateslplt) -PlateCode (i) = 0
Next i
Aplates (pit) .imageindex = "" Aplates (pit) -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_ρlate_status tps " 4 _ " where mp.splate_code = sp.splate_code (+) AND " 4 _ " mp.mplate_id = ap.mplate_id(+) AND " 4 _ " ap.aplate_code = tps.aplate_code " & _
SplateWhere 4 AplateWhere 4 DateWhere 4 BogusWhere 4 AssayWhere ' perhaps, instead strSQL = "select count!*) from splate spl" 4 _ i " where spl . splate_code in " 4 _
Q " (select sp.splate_code from splate sp, mplate mp, aplate ap, tropix_plate_status tps " 4 _
Os " where mp. splate_code = sp.splate_code (+) AND " 4 _
1 " mp.mplate_id(+) = ap.mplate_id AND " 4 _
" ap.aplate_code = tps.aplate_code " 4 _
SplateWhere 4 AplateWhere 4 DateWhere 4 BogusWhere 4 AssayWhere 4 SubSelectSQL & " ) " Debug. Print strSQL
Set rsSplateCount = DB.OpenRecordset (strSQL, dbOpenSnapshot) rsSplateCount. oveFirst TtlSplates = rsSplateCount. Fields (0)
ReDim Splates (4, TtlSplates)
For i = 0 To TtlSplates
ReDim Splates(0, i) -assay (1) ReDim Splates (1, i). assay (1)
ReDim Splates(2, i).assay(l)
ReDim Splates (3, i). assay(1)
Next fraLoading. Caption = "Loading Data, Please Wait" fraLoading.Visible = True
' Set headers flxPreSelect.TextMatrixll, 1) = 0 flxPreSelect.TextMatrixll, 0) = " Total:" flxPreSel.ect. TextMatrix (2, 0) = " Selected:"
For asy = 0 To TtlAssays - 1 flxPreSelect -TextMatrix (0, asy + 2) = Assays (asy) flxPreSelect.TextMatrixll, asy + 2 ) = assaycouπts (asy) flxPreSelect.TextMatrixll, 1) = flxPreSelect.TextMatrixll, 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 flxPreSelect. Rows - 1 flxPreSelect . row = rw flxPreSelect .col = cl flxPreSelect.CellFontBold = False Next flxPreSelect. row = 0 flxPreSelect.TextMatrix(2, cl) = "" flxPreSelect. FontBold = False Next ,___ flxPreSelect.TextMatrix(2, 1) = •■
O 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 Dim rsAWellData As Recordset Dim rsAssayCompound As Recordset Dim rsTtlCompound As Recordset Dim rsCompoundPerformance As Recordset Dim rsranges As Recordset
Dim rsSplateCount As Recordset
'empty splates!)
If SplatesSubSelected > 0 Then
For pit = 0 To SplatesSubSelected
SplateslcSPLATE, pit). PlatelD = ""
SplateslcSPLATE, pit) .PlateCode = 0
SplateslcSPLATE, pit) . imageindex = ""
SplateslcSPLATE, pit) .Selected = False
Next pit
SplatesSubSelected = 0 End If
frmLimits - 10
Printer. Line (pleft + (-50 * hscale), ptop + l)-(pleft + (-50 * hscale), ptop + 0), RGB(200, 200, 200)
Printer. Line (pleft + 0, ptop + 1)- (pleft + 0, ptop + 0), RGB(200, 200, 200)
Printer. Line (pleft + 50, ptop + l)-(pleft + 50, ptop + 0), RGB(200, 200, 200)
Printer. Line (pleft + 100. ptop + D- (pleft + 100, ptop + 0), RGB(200, 200, 200)
Printer. Line (pleft + (-50 * hscale), ptop + 0)-(pleft + 100 * hscale, ptop + 0), RGB(170, 170, 170)
Printer.Line (pleft + (-50 * hscale), ptop + 0.5)-(pleft + 100 * hscale, ptop + 0.5), RGB(170, 170, 170) Printer .DrawWidth = 2 For i = 0 To 2
Printer. Line (pleft + (Limits (Index, i) * hscale * 100) / MaxVaKIndex) , ptop - 0.02) -(pleft + (Limits (Index, i) * hscale * 100) / MaxVal (Index) , ptop + 1.03), Clr (Index, i) Next
Printer .DrawWidth = 1 End Sub
frmPreselect - 1
Copyright 199S Tropix, Inc. Option Explicit
, ' Form Wide Globals ^ Dim FormTitle As String o Dim rsAssays As Recordset ' Dim rsPreSelect As Recordset
Dim StartRow As Integer
Dim StartCol As Integer
Dim EndRow As Integer
Dim EndCol As Integer
Private Sub FillFlxPreSelec ( )
Dim asy As Integer
Dim rw As Integer
Dim assaycounts ( ) As Integer
ReDim assaycounts (TtlAssays)
' label rows, fill cells, calculate totals rsPreSelect.MoveFirst rw = 0
While Not rsPreSelec .EOF flxPreSelect. TextMatri (rw + 3, 0) = rsPreSelect .Fields (0)
For asy = 0 To TtlAssays - 1 flxPreSelect .TextMatrix (rw + 3, asy + 2) = rsPreSelect .Fields (asy + 1) assaycounts (asy) = assaycounts (asy) + rsPreSelect .Fields (asy + 1)
Figure imgf000110_0001
Wend
Y Axis
Printer. CurrentX = pleft + (-60 * hscale)
Printer .CurrentY = ptop - 0.05
Printer .Print Format (dmax! Index) , "##.0")
Printer -CurrentX = pleft + (-60 * hscale)
Printer .CurrentY = ptop + 0.45
Printer .Print Format (dmax (Index) / 2, "##.0")
Printer. CurrentX = pleft + (-60 * hscale)
Printer .CurrentY = ptop + 0.95
Printer .Print Format ( "0.0" )
' X Axis
Printer .CurrentX = pleft + (-50 * hscale)
Printer .CurrentY = ptop + 1.03
Printer. Print Format (MinVal (Index) , "#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 Format (MaxVal (Index) / 2, "#0.0")
Printer .CurrentX = pleft + 95 * hscale Printer.CurrentY = ptop + 1.03 Printer .Print Format (MaxVal (Index) , "#0.0") Printer .DrawWidth = 3 For i = 0 To 2
Printer. CurrentX = pleft + (Limits (Index, i) * hscale * 100) / MaxVal (Index) Printer.CurrentY = ptop - (0.045 * (i + 1)) Printer. Print Format (Limits (Index, i), "####.0#")
Printer. Line (pleft + (Limits (Index, i) * hscale * 100) / MaxVal (Index) , ptop - (0.005 + (i * 0.04) ))- (pleft + 10 + (Limits (Index, i) * hscale * 100) / MaxVal (Index) , ptop - (0.005 + (i * 0.04))), Clrflndex, i) Next i Printer .DrawWidth = 1
' Draw major Axis
Printer. Line (pleft + (-50 * hscale), ptop + 1)- (pleft + 100 * hscale, ptop + 1), RGB(170, 170, 170)
Printer. Line (pleft + 0, ptop - 0.05)-(pleft + 0, ptop + 1#), RGB1170, 170, 170)
' Draw Minor Axis
frmLimits - 9
If i - (50 * hscale) < Limits (Index, 2) • hscale * 100 / MaxVal(Index) Then
If IInnddeexx == ccLLIIMMIITTPPLLAATTEESSNN TThheenn drawclr = Clr (Index, 2)
Else. drawclr = Clr (Index, 1) End If End If
If i - (50 * hscale) < Limits (Index, 1) * hscale * 100 / MaxVal (Index) Then If Index = cLIMITPLATESN Then drawclr = Clrllndex, 1) Else drawclr = Clrllndex, 0) End If End If
If i - (50 * hscale) < Limits (Index, 0) * hscale * 100 / MaxVal(Index) Then If Index = cLIMITPLATESN Then drawclr = Clrllndex, 0) Else drawclr = vbWhite End If End If
Printer. DrawWidth = 2
Printer. Line (pleft + (i - (50 * hscale)), (ptop + 1) - (hData (Index, i)))- (pleft + (i - (50 * hscale)), (ptop + 1 ) ) , drawclr
Printer .DrawWidth = 1
Printer. Line (pleft + (i - (51 * hscale)), (ptop + 1) - (hData (Index, i - l)))-(pleft + (i - (50 * hscale)), (ptop + 1) - (hData ( Index, i) ) ) 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
Printer .Print "Compound %CV across duplicates"
End If
Printer -FontBold = False
Private Sub txtMaxDisplay_LostFocus (Index As Integer) btnMaxDisplayfIndex) -Visible = True
Call Get_Data
Call picHist_Paint (Index)
End Sub
Private Sub txtVal_GotFocus (Index As Integer) txtVaK Index) .SelStart = 0 txtVal (Index) .SelLength = Len (txtVal (Index) .Text) End Sub
Private Sub txtVal_LostFocus (Index As Integer) picHist (Int (Index / 3)). Line (Limits (In (Index / 3), (Index Mod 3)) * hscale * 100 / MaxVal (Int (Index / 3)), 1.05)-(Li mits (Int (Index / 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 priπthis (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 = Clr (Index, 2) End If
frmLimits picHist (Index) -CurrentX = 45 * hscale picHist (Index) -CurrentY = 1.03 picHist (Index) -Print Format (MaxVaKIndex) / 2, "#0.0") picHist (Index) .CurrentX = 95 * hscale picHist (Index) .CurrentY = 1.03 picHis (Index) .Print Format (MaxVaKIndex) , #0.0")
' Draw major Axis picHist (Index) .Line (-50 * hscale 1)-(100 * hscale, 1) , RGB (170, 170, 170) picHist (Index) .Line (0, -0.05)-(0 1.05), RGB1170, 170, 170)
' Draw Minor Axis picHist (Index) .Line (-50 * hscale, l)-(-50 * hscale, 0 RGB1200, 200, 200) picHist (Index) .Line (0, l)-(0, 0), RGB(200, 200, 200) picHist (Index) .Line (50, l)-(50, 0), RGB(200, 200, 200) picHist (Index) .Line (100, 1)-(100, 0), RGB(200, 200, 200) picHist (Index) -Line (-50 * hscale, 0)-(100 * hscale, 0), RGB1170 170, 170) picHist (Index) -Line (-50 hscale, 0.5)-(100 * hscale, 0.5), RGB(170, 170, 170) Call DrawDivLines (Index)
End Sub
Private Sub DrawDivLines (Index As Integer) 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, Limitsdndex, unit)) picHist (Index) .Line (Limitsdndex, unit) * hscale * 100 / MaxVaKIndex) , -0.03) - (Limits (Index, unit) * hscale * 100 / MaxVaKIndex) , 1.03), Clr (Index, unit) End Sub
Private Sub Update_txtVal (Index As Integer, cell As Integer, NewVal As Single) txtValdndex * 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 = Clrllndex, 0) Then ] percents (Index, 0) = dmax(Index) hData (Index, i) + percents (Index, 0)
Elself drawclr = Clrdndex, 1) Then percents (Index, 1) = dmax(Index) hData (Index, i) + percents (Index, 1) Elself drawclr = Clrdndex, 2) Then percents (Index, 2) = dmax(Index) hData (Index, i) + percents (Index, 2) End If ' Else
If drawclr = Clrdndex, 0) Then percents (Index, 0) = dmax(Index) (Index, i) + percents (Index, 0) Elself drawclr = Clrdndex, 1) Then percents (Index, 1) = dmaxϋndex) (Index, i) + percents (Index, 1) Elself drawclr = Clrdndex, 2) Then percents (Index, 2) = dmax( Index) (Index, i) + percents (Index, 2) End If End If picHist (Index) ■Line ( (i - (50 * hscale)) , 1 (hData dndex, i ) ) ) - ( (i - (50 * hscale)), 1), drawclr picHist (Index) -Line ( (i - • (51 * hscale) ) , 1 (hData ( Index, i - l ) ) ) - ( ( i - (50 * hscale)), 1 - (hDatadndex, i)))
Next i
If counts (Index) <> 0 Then lblPercent (Index * 3 + 0).Caption = Format (percents (Index, 0) 100 / countsdndex) , "###.0") 4 " " lblPercent (Index * 3 + 1). Caption = Format (percents (Index, 1) 100 / countsdndex), "###.0") 4 "%" lblPercent (Index * 3 + 2).Caption = Format (percents (Index, 2) 100 / countsdndex), "###.0") 4 "%•
End If
' Add Labels ' Y Axis picHis (Index) -CurrentX = -60 * hscale picHist (Index) .CurrentY = -0.05 picHist (Index) . Print Format (dmax(Index) , "##.0") picHist (Index) .CurrentX = -60 * hscale picHist (Index) .CurrentY = 0.45 picHist (Index) .Print Format (dmax(Index) / 2, "##.0")
' X Axis
Call Update_txtVal (Index, 0, Limits ndex, 0))
Call Update_txtVal (Index, 1, Limits (Index, 1) )
Call Update_txtVal (Index, 2, Limits (Index, 2) ) picHist (Index) .CurrentX = -60 * hscale picHist (Index) .CurrentY = 1.03 picHist (Index) . Print Forma (MinVal (Index) , '#0.0") picHis (Index) .CurrentX = 0 * hscale picHist (Index) .CurrentY = 1.03 picHist (Index) .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
If EndVal > 100 Then EndVal = 100 percent s (Index, 0) = 0 percent s (Index, 1) = 0 percent s (Index, 2) = 0
For i = StartVal + 52 To EndVal + 49 'Set the fill color If Index = cLIMITPLATESN Then drawclr = vbWhite ! Else
! drawclr = Clrdndex, 2) 1 End If
If i - (50 * hscale) < Limitsdndex, 2) * hscale * 100 / MaxVal (Index) Then If Index = cLIMITPLATESN Then drawclr = Clrdndex, 2) Else drawclr = Clrllndex, 1) End If End If
If i - (50 * hscale) < Limitsdndex, 1) * hscale * 100 / MaxVal (Index) Then If Index = cLIMITPLATESN Then drawclr = Clrdndex, 1) Else drawclr = Clrdndex, 0)
End If
End If
If i - (50 * hscale) < Limitsdndex, 0) * hscale * 100 / MaxVal (Index) Then
If Index = cLIMITPLATESN Then drawclr = Clrdndex, 0)
Else drawclr = vbWhite
End If End If
Else
MaxVaKcLIMITCOMPOUNDCV) = ValltxtMaxDisplay (cLIMITCOMPOUNDCV) -Text) End If If MinVaKcLIMITCOMPOUNDCV) > SplateslcSPLATE, pit) .assay (0) -Welllrw, cl) .cv(WellStat) Then
MinVal (cLIMITCOMPOUNDCV) = SplateslcSPLATE pit) -assay (0) -Well (rw, 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 (0) .Welllrw, cD.Type <> "H"
And SplateslcSPLATE, pit) .assay (0) .Well (rw, cD.Type <> "L" _ And SplateslcSPLATE, pit) .assay(O) .Welllrw, cl) .cv(WellStat) <> cNODATA Then If MaxVaKCLIMITCOMPOUNDCV) <> 0 Then dpoint = (100 * hscale * SplateslcSPLATE, pit) .assay (0) .Well (rw, cl) .cv(WellStat) / MaxVal (cLIMITC
OMPOUNDCV) ) (50 * hscale)
If dpoint < 150 Then hData (cLIMITCOMPOUNDCV, dpoint) = hData (cLIMITCOMPOUNDCV, dpoint) + 1 counts (CLIMITCOMPOUNDCV) = counts (CLIMITCOMPOUNDCV) + 1
If hData (CLIMITCOMPOUNDCV, dpoint) > dmax (cLIMITCOMPOUNDCV) And dpoint <> 0 And dpoint <> 150
Then dmax (cLIMITCOMPOUNDCV) = hData (cLIMITCOMPOUNDCV, dpoint) End If End If End If End If ' well contains a compound Next cl Next rw pit = pit + 1 Loop !
For i = 0 To (hscale * 150) 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
Limits (i. 0) = (MaxVaKi) * 0.25) Limits (i, 1) = (MaxVaKi) * 0.5) Limits (i, 2) = (MaxVaKi) * 0.75) Next i End If
Figure imgf000118_0001
frmLimits - 5
Debug. Print "Get Data" & " : " & SplatestcSPLATE, 0). PlatelD ' zero out the data arrays
For pit = 0 To (hscale * 150) For i = 0 To 4 hDatali, pit) = 0 Next i Next pit
For i = 0 To 3
MaxVal (i) = 0.001
MinVal (i) = -0.001 dma (i ) = 1 counts (i) = 0 Next i
MaxVal (cLIMITINHIB) = 100 MinVal (cLIMITINHIB) = -50 For pit = 0 To TtlAssayPlates
'data for the inhibition profile For rw = 0 To 7
For cl = 0 To 11
If (Aplates (pit) .WelKrw, cD.Type = "D") Or (Aplates (pit) .Well (rw, cD.Type <> ActCtl (cHIGH) And Aplates! pit) .WelKrw, cD.Type <> ActCtl (cLOW) And
Aplateslplt) .WelKrw, cl) . Inhib(WellStat) <> cNODATA) Then If Viewstim Then dpoint = (Aplates (pit) .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) > dma (cLIMITINHIB) And dpoint <> 0 And dpoint <> 150 Then dmax(cLIMITINHIB) = hData (cLIMITINHIB, dpoint) End If
End If Next cl
Next rw
'data for plate SN and plate CV
If MaxVaKcLIMITPLATESN) < Aplates (pit) . sn (WellStat ) Then
If VaKtxtMaxDisplay (CLIMITPLATESN) .Text) = 0 Then
MaxVal (cLIMITPLATESN) = Aplates (pit). sn (WellStat) Else
MaxVal (cLIMITPLATESN) = Val (txtMaxDisplay (cLIMITPLATESN) -Text) End If
Private Sub picHist_MouseDown (Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim dist As Single
Dim i As Integer
Debug. Print Index & " " & X & " , " 4 Y
MouseDown = True dist = 10 limitchoice = cNODATA
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 / MaxVaK Index) ) ) Li itStartVal = X Debug. Print dist End If Next i End Sub
Private Sub picHist_Pain (Index As Integer)
Debug. Print "picHist_Paint ( ) " & " : " & SplateslcSPLATE, 0). PlatelD picHist (Index) .Cls picHist (Index) .ScaleHeight = 1.4 picHist (Index) .ScaleWidth = (hscale * 175) picHist (Index) .ScaleLef = hscale * -65 picHist (Index) .ScaleTop = -0.1
Call Draw_Hist (Index, -50 * hscale, 100 * hscale)
Debug. Print picHist (Index) .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
End Sub
Private Sub optWellStat_Clic (Index As Integer) WellStat = Index Call Get_Data
Call picHist_Paint (cLIMITINHIB) Call picHist_Paint (cLIMITCOMPOUNDCV) Call picHist_Pain (cLIMITPLATESN) Call picHist_Pain (cLIMITPLATECV)
End Sub
Private Sub picHist_MouseMove (Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single) Dim StartVal As Single Dim EndVal As Single
If MouseDown And (limitchoice <> cNODATA) Then
Limitsdndex, limitchoice) = (X * MaxVal (Index) ) / (hscale 100)
I f (Limits dndex, limitchoice) < LimitStartVal) Then
StartVal = X - 2
EndVal = LimitStartVal + 2 Else
StartVal = LimitStartVal
EndVal = X + 2 End If
StartVal = -50 * hscale EndVal = 100 * hscale picHist (Index) Line (LimitStartVal, 1.05) (LimitStartVal, -0.03.) , vbWhite, BF
Call Draw_His (Index StartVal, EndVal) Call Draw_Hist (Index, 50 * hscale, 100 * hscale) LimitStartVal = X
End If End Sub
Private Sub picHist_MouseUp( Index 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 * MaxVal (Index) / (hscale * 100) If limitchoice <> 0 Then
If Limits (Index, limitchoice) < Limitsdndex, limitchoice - 1) Then Limitsdndex, limitchoice - 1) = Limits (In dex, limitchoice) - MaxVal(Index) / 100 End If If limitchoice <> 2 Then
If Limits (Index, limitchoice) > Limitsdndex, limitchoice + 1) Then Limitsdndex, limitchoice + 1) = Limits (In dex, limitchoice) + MaxVal (Index) / 100 End If picHis (Index) .Cls
Call Draw_Hist (Index, -50 * hscale, 100 * hscale) MαuseDown = False End If End Sub
'Calc New Stats pbrData. Visible = True On Error GoTo finished pbrData.Max = TtlAssayPlates For aplt = 0 To TtlAssayPlates Call CalcAStats (aplt) pbrData.value = aplt Next
If ControlSource = CASSAYDATA Then ' sum all datawells TtlData (cSTATGOOD) = 0 TtlData (cSTATALL) = 0 For aplt = 0 To TtlAssayPlates
For stt = CSTATALL To cSTATGOOD
TtlData(stt) = Aplates (aplt) .AvgData (stt) + TtlData(stt) Ne>t stt Next
TtlData (cSTATGOOD) = TtlData (cSTATGOOD) / (TtlAssayPlates + 1) , TtlData(cSTATALL) = TtlData (cSTATALL) / (TtlAssayPlates + 1)
Q ' recalc ALL stats
1 For aplt = 0 To TtlAssayPlates
1 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.Visible = False
Call SizeHist (cLIMITINHIB)
Call SizeHist (cLIMITCOMPOUNDCV)
Call SizeHist (cLIMITPLATESN)
Call SizeHist (cLIMITPLATECV)
End If ' form minimized
End Sub
Private Sub menuFileExit_Click( )
Call End_Program End Sub
frmLimits - 3
Private Sub MenuFilePrint_Click( ) On Error GoTo theend cmdPrint.CancelError = True "^ cmdPrint. ShowPrinter ' cmdPrint. Flags = vbPRPQHigh Or vbPRCMColor Or vbPRPSLetter * Call printhist(O) Call printhistd) Call printhist(2) Call printhistO) Printer. EndDoc theend: frmLimits . PrintForm End Sub
Private Sub mnuShowSelected_Click( ) frmSelectedPlates . Show End Sub
Private Sub optControls_Click( Index As Integer)
Dim aplt As Integer
Dim spit As Integer
Dim stt As Integer ControlSource = Index
' Clear Splate Info
ReDim Splates (4, TtlSplates)
For spit = 0 To TtlSplates
ReDim SplatesfO, spit) .assay(l)
ReDim Splatesd, spit) .assay (1)
ReDim Splates(2, spit) .assay (1) .ReDim Splates (3, spit) .assay(l) Next
Private Sub btnSaveRanges_Click I )
Dim rsranges As Recordset
Dim stat As Integer
Dim idx As Integer
Dim strSQL As String strSQL = "delete from tropix_range_settιngs where assay = ' " & Aplates (0) .assay & * ' "
Set rsranges = DB.OpenRecordset (strSQL, dbOpenSnapshot) rsranges.Close For Stat = cLIMITINHIB To cLIMITPLATECV strSQL = "Insert into tropix_range_settings (assay, statistic, idx, value) values ('" & _
Aplates (0) .assay & "'," & stat & "," & idx & "," & Limits (stat, idx) & " ) " Set rsranges = DB.OpenRecordset (strSQL, dbOpenSnapshot) rsranges. Close Next idx Next stat
End Sub
Private Sub Form_Initialize ( )
Datalnitialized = False End Sub
Private Sub Form_Load() Dim i As Integer i pbrData.Visible = False j^ hscale = 1
NJ optControls (ControlSource) = True
' ReDim hData (4, hscale * 150) ' (Histogram*, data) For i = cLIMITINHIB To CLIMITPLATECV
Clr(i, 0) = txtVaKi * 3). BackColor Clrli, 1) = txtValli * 3 + 1). BackColor Clrli, 2) = txtValli * 3 + 2).BackColor Next i
DisplayStat = SelectStat Datalnitialized = False End Sub
Private Sub Form_Resize I )
Debug. Print "Form_Resize( ) " & " : " & SplateslcSPLATE, 0). PlatelD fraWellStat.Left = frmLimits.Width - 2000 fraWellStat.Top = 0 fraControls.Left = fraWellStat.Left fraControls.Top = fraWellSta .Height + 200 btnSaveRanges .Top = fraControls.Top + (fraControls .Height + 100) btnSaveRanges.Left = fraWellStat.Left
If frmLimits.WindowState <> vbMinimized Then
If frmLimits.Width < 6000 Then frmLimits.Width = 6000 hscale = Int (picHist (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
Private Sub btnOnt_Click( ) Dim aplt As Long Dim fn As Integer Dim fname As String Dim rw As Integer Dim cl As Integer
On Error GoTo theend cdlSave . ShowSave fname = cdlSave. filename fn = FreeFile () Open fname For Output As fn Print #fn, "Compound" & Chr$(9) & _ "Raw" & Chr$(9) & _ Inhib" & ChrS (9) & _ "Type" & Chr$(9) & _ "Good/Bad" & Chr$(9) & _ "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) -Welllrw, cl) -Compound & Chr$(9) & Aplates (aplt) .WelKrw, cl) .Raw & Chr$(9) & Aplates (aplt) -Welllrw, cl) . Inhib (cSTATGOOD) & Chr$(9) & Aplates (aplt) -Welllrw, cD.Type & Chr$(9) & Aplateslaplt) .Welllrw, cD.Good & Chr$(9) n
frmLimits
Aplateslaplt) -PlatelD(cAPLATE) J. -. Chr$(9) & _ Chr$(rw + Asc I "A")) & chr$(9) & cl + 1 & Chr$(9) Aplateslaplt) .PlatelD (cSPLATE) Next cl Next rw Next aplt Close fn Exit Sub theend: Close fn
Debug. Print MsgBox ( "Leaving" , vbOKOnly) End Sub
frmLimits
' Copyright 1999 Tropix, Inc. Option Explicit
Dim hscale As Integer
Dim hData 1) As Single
Dim Clr (4, 3) As ColorConstants
Dim divlines(4, 3) As Single
Dim percents (4, 3) As Single
Dim counts (4) As Long
Dim DisplayStat As Integer
Dim dmax (4) As Single
Dim MaxVal(4) As Single
Dim MinVal!4) As Single
Dim MouseDown As Boolean
Dim limitchoice As Integer
Dim LimitStartVal As Single
Dim Datalnitialized As Boolean
Private Sub SizeHist (Hist As Integer)
Dim formVisHeight As Integer
Dim formViswidth As Integer
Debug. Print "SizeHist!)" & " : " & SplateslcSPLATE, 0) .PlatelD formVisHeight = frmLimits -Height - 700
KJ formViswidth = frmLimits.Width - 2100 J ' Frame Dimensions / placement fraLimit (Hist) -Width = formViswidth / 2 fraLimit (Hist) .Height = formVisHeight / 2 fraLimit (Hist) .Top = Int((Hist 1 2 ) ) * (formVisHeight / 2) fraLimit (Hist) .Left = (Hist Mod 2) * (formViswidth / 2)
' picHist placement and dimensions picHist (Hist) -Top = 200 picHist (Hist) -Left = 100 picHist (Hist) -Height = fraLimit (Hist) -Height - (500 + txtVal(O) -Height) picHist (Hist) -Width = fraLimi (Hist) -Width - 200
' button placement txtVaKHist * 3). Top = picHist (Hist) -Height + 225 txtVaKHist * 3 + D.Top = picHist (Hist) .Height + 225 txtVaKHist * 3 + 2) .Top = 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 + D .Height + 20) lblPercent (Hist * 3 + 2). Top = txtVaKHist * 3). Top + (txtVaKHist * 3 + 2). Height + 20) txtMaxDisplay (Hist) .Top = picHist (Hist) .Height + 225 txtMaxDisplay (Hist) .Left = picHist (Hist) .Left + picHist (Hist) .Width - btnMaxDisplay(Hist) .Width btnMaxDisplay(Hist) .Top = picHist (Hist) .Height + 225 btnMaxDisplay (Hist) .Left = picHist (Hist) .Le t + picHist (Hist) .Width - btnMaxDisplay(Hist) .Width End Sub
Private Sub MenuEditSelectAll_Click( )
Figure imgf000127_0001
Private Sub MenuFileClose_Click ( )
Me. hide
End Sub
Private Sub MenuFilePrint_Click ( )
Dim opt As Integer
On Error GoTo theend cmdPrint. CancelError = True cmdPrint . ShowPrinter
Printer. Print rtfCompounds.Text
Printer . EndDoc theend : End Sub
Private Sub MenuFileSave_Click( )
Dim fl As Integer
Dim fname As String cmdFileSave. CancelError = True >__, On Error GoTo theend K cmdFileSave. ShowSave Y1 fname = cmdFileSave. filename rtfCompounds. SaveFile fname, rtfText theend:
End Sub
frmFreeText - 1
Private Sub btnCancel_Clic ( ) 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
Private Sub Form_Load() txtComments.Text = CommentsText End Sub
dplt = 0
Do While SplateslcSPLATE, dplt) . PlatelD <> SelCompounds (cmp) . SPlatelD dplt = dplt + 1 Loop
I Iff SSppllaatteessttccSSPPLLAATTEE,, ddpplltt)) ..aassssaayy((00)) ..WWeellll ((rrww,, ccll)) ..ccvv((WWeellllSSttaatt)) <<>> ccNNOODDAATTAA TThheenn rtfCompounds.SelText = "Avg Inhib: " 4 ChrSO) 4 Format (Splates (cSPLATE, dplt) .assay(0) .Well (rw, cl) .Inhib(WellSt , "###.00") 4 Chr$(9) & "%Range: " 4 Chr$(9) 4 Format (Splates (cSPLATE, dplt) .assay(0) .WelKrw, cl) .cv(WellStat) , "###. ) 4 "%" 4 _
Chr$(9) 4 "Assays: " 4 SplatestcSPLATE, dplt) .assay (0) .Well (rw, cl) .count (WellStat) & Chr$(10) E Ellssee rtfCompounds.SelText = "Avg Inhib: " & ChrSO) & Format (Splates (cSPLATE, dplt) .assay(0) .Well (rw, cl) . Inhib(WellSt at), "###.00") & Chr$(9) & "%Range: " & ChrSO) & "Not Calculated" & _
Chr$ (9) & "Assays: " 4 SplatestcSPLATE, dplt) .assay(0) .Well (rw, cl) .count (WellStat) & ChrS (10)
End If
frmCompoundList - 4
rtfCompounds.SelText = "APlate" 4 Chr$(9) 4 "Raw" 4 Chr$(9) 4 "High Control" 4 ChrSO) 4 "Low Control" & ChrSO) 4 "Inhib" 4 ChrSO) 4 "Good/Bad" 4 ChrS (10) aplt = 0 _, Do While Aplates (aplt) . PlatelD(cSPLATE) <> "• If Aplates (aplt) .PlatelD(cSPLATE) = SplatestcSPLATE, dplt) .PlatelD Then ^ i rtfCompounds.SelText = Aplates (aplt) .PlatelD(cAPLATE) & ChrSO) j rtfCompounds.SelText = Aplates (aplt) .WelKrw, cD.Raw 4 ChrSO)
I rtfCompounds.SelText = Aplates (aplt) .ControKWellStat, cHIGH) 4 ChrSO) 4 Aplates (aplt) .Control (WellStat, cLOW) 4 ChrSO) rtfCompounds.SelText = Format (Aplateslaplt) .Well (rw, cl) . Inhib(WellStat) , "###.00") & ChrSO) If Aplates (aplt) .WelKrw, cD.Good Then rtfCompounds.SelText = "Good" Else rtfCompounds.SelText = "Bad" End If rtfCompounds.SelText = ChrS (10) End If aplt = aplt + 1 Loop rtfCompounds.SelText = ChrS (10)
Next cmp
End Sub Private Sub MenuEditCopy_Click()
Figure imgf000128_0001
rtfCompounds . SetFocus
Clipboard. SetText rtfCompounds.SelText, vbCFText End Sub
For cmp = 0 To CompoundsSelected rw = SelCompounds (cmp) .row cl = SelCompounds (cmp) .col
CLine = ""
CLine = SelCompounds (cmp) Name ChrSO) 4 SelCompounds (cmp) -SPlatelD 4 ChrSO) & _ ChrSfrw + Asc ("A") ) 4 cl + dplt = 0
Do While SplatestcSPLATE, dplt) -PlatelD <> SelCompounds (cmp) .SPlatelD dplt = dplt + 1 Loop
CLine = CLine & ChrSO) 4 Format (Splates (cSPLATE, dplt) .assay (0) .Well (rw, cl) . Inhib (WellStat) , "##0.000") CLine = CLine 4 ChrSO) & Format (Splates (cSPLATE, dplt) .assay (0) .WelKrw, cl) .cv(WellStat) , "##0.000") CLine = CLine 4 ChrSO) & SplateslcSPLATE, dplt) .assay (0) -Welllrw, cl) .count (WellStat) aplt = 0
FirstAPlate = True
Do While Aplateslaplt) . PlatelD (cSPLATE) If Aplates (aplt) .PlatelD (cSPLATE) = SelCompounds (cmp) .SPlatelD Then If Not FirstAPlate Then
CLine = ChrSO) 4 ChrSO) 4 ChrSO) 4 ChrSO) 4 ChrSO)
End If
FirstAPlate = False
CLine = CLine 4 ChrSO) & ChrSO) & SelCompounds (cmp) .Name 4 ChrSO) 4 _
Aplateslaplt) -PlatelD (cAPLATE) 4 ChrSO) 4 SelCompounds (cmp) -SPlatelD CLine = CLine 4 ChrSO) & Aplates (aplt) .Well (rw, cD.Raw CLine = CLine 4 ChrSO) 4 Aplates (aplt) .ControKWellStat, cHIGH) CLine = CLine 4 ChrSO) 4 Aplates (aplt) .ControKWellStat, cLOW) \ CLine = CLine 4 ChrSO) 4 Format (Aplates (aplt) .WelKrw, cl) .Inhib(WellStat) ##0.00")
If Aplates (aplt) .WelKrw, cl) .Good Then
CLine = CLine 4 ChrSO) 4 "-" Else
CLine = CLine 4 ChrSO) 4 "B" End If rtfCompounds. SelStart = Len (rtfCompounds .Text) rtfCompounds.SelText = ChrS (10) 4 CLine End If aplt = aplt + 1 Loop Next cmp End Sub
Private Sub MenuDisplayReport_Click( ) Dim cmp, dplt, aplt, rw, cl As Integer rtfCompounds. Text = ""
For cmp = 0 To CompoundsSelected - 1 rw = SelCompounds (cmp) .row cl = SelCompounds (cmp) .col rtfCompounds.SelText = "Compound: " 4 Chr$(9) 4 SelCompounds (cmp) .Name 4 Chr$(10) rtfCompounds.SelText = "SPlate: " 4 ChrSO) 4 SelCompounds (cmp) .SPlatelD 4 ChrSO) 4 "Well: (" 4 ChrS (SelCompound s(cmp).row + Asc ("A")) 4 "," 4 SelCompounds (cmp*) . col + 1 4 ")" 4 ChrS(lO)
Private Sub Form_Resize I )
If Me.WindowState <> vbMinimized Then IxCompound . ColWidth (0 ) 1500 IxCompound. ColWidth (1 ) 1500 fIxCompound. ColWidth (2) = 550000 IxCompound.ColWidth (3) = 550000 IxCompound.Width = 4400 IxCompound. TextMatrix (0, 0) = "Compound" fIxCompound. extMatrix 10 , 1) = "Plate ID" IxCompound. TextMatrix 10 , 2) = "Row" fIxCompound.TextMatri (0 , 3) = "Col"
If frmCompoundList. idth < 4500 Then frmCompoundList .Width = 4500 fIxCompound. Left = 0 fIxCompound. op = 0 fIxCompound. Height = (frmCompoundList.Height - 700) / 2 rtfCompounds.Left = 0 rtfCompounds.Width = frmCompoundList.Width - 100 rtfCompounds. Height = fIxCompound. Height rtfCompounds.Top = fIxCompound. Height btnClear .Left = fIxCompound.Width + 100 btnClear.Top = fIxCompound.Top , btnDuplicates.Top = btnClear.Top + btnClear .Height + 200 j- btnDuplicates.Left = btnClear.Left oo btnTecan.Top = btnDuplicates.Top + btnDuplicates .Height + 200
1 btnTecan.Left = btnDuplicates .Left
End If
End Sub
Private Sub MenuDisplayEvaluation_Click( ) Dim cmp, dplt, aplt, rw, cl As Integer Dim CLine As String Dim FirstAPlate As Boolean
frmCompoundList - 3 rtfCompounds.Text = ""
If WellStat = cSTATGOOD Then rtfCompounds.Text = "For GOOD Assays only"
Else rtfCompounds. Text = "For ALL (GOOD and BAD) Assays"
End If rtfCo pounds.Text = "Compound" 4 ChrS (9) 4 "Plate ID" 4 ChrSO) 4 "Well" 4 ChrSO) &
"Avg. %Inhib" & ChrSO) 4 "%Range" 4 ChrSO) 4 "Assays" 4 ChrSO) 4 ChrSO) 4 "Compound" 4 ChrSO) & "APlate ID" 4 ChrS (9) 4 "Splate ID" 4 ChrSO) 4
"Raw Value" 4 ChrSO) 4 "High Control. 4 ChrSO) 4 " Low Control" 4 ChrSO) 4 _ '
"%Inhib" 4 ChrSO) 4 "Good/Bad"
frmCompoundList rw Asclrowletter) - Asc ("A") cl Val (column_nuπ-ber) - 1
SelCompounds (CompoundsSelected) .Name = Aplates (pit) -Well (rw, cl). Compound SelCompounds (CompoundsSelected) .SPlatelD = Aplateslplt) . 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 = fIxCompound. row To fIxCompound. ows - 2 For cl = 0 To 3 fIxCompound. TextMatrix (rw, cl) = fIxCompound. TextMatri (rw + 1, cl) Next cl
KJ SelCompounds (rw - 1) = SelCompounds (rw) D Next rw
If rw > 0 Then
SelCompounds (rw - 1) = SelCompounds (rw)
CompoundsSelected = CompoundsSelected -
End If
End If
Call Form_Paint
End Sub
Private Sub Form_Load()
-rtfCompounds. Text = ""
End Sub
Private Sub Form_Paint ( )
Dim cmp As Integer IxCompound. Rows = CompoundsSelected
For cmp = 0 To CompoundsSelected - 1 fIxCompound. TextMatri (cmp 1, 0) SelCompounds (cmp) .Name fIxCompound.TextMatrix (cmp 1, 1) SelCompounds (cmp) .SPlatelD fIxCompound . TextMatrix (cmp 1, 2) ChrS (SelCompounds (cmp) .row + Asc ("A")) fIxCompound.TextMatrix (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 fIxCompound. Rows spit = 0
While SplateslcSPLATE, spit) . PlatelD <> flxCompound.TextMatrixli, 1) spit = spit + 1 Wend
Print #fl, Splates (cMPLATE, spit) . PlatelD 4 "," 4 flxCompound.TextMatrixli, 2) 4 flxCompound.TextMatrixli, 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 Dim cl As Integer Dim fl As Integer
Dim fname As String cmdOpen . ShowOpen fname = cmdOpen. filename fl = FreeFile
Open fname For Input As fl
While Not EOF(fl)
Input #fl, platename, rowletter, column_number pit = 0
While Aplates(plt) .PlatelD (cSPLATE) <> platename And Aplates (pit) . PlatelDlcAPLATE) <> pit = pit + 1 Wend
frmAPlateText -
Figure imgf000133_0001
frmCompoundList - 1
' Copyright 1999 Tropix, Inc. Option Explicit
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 ID .col = 0 fIxCompound. row = 1
Call flxCompound_KeyUp(46, 0) Next i
CompoundsSelected = 0
End Sub
Private Sub btnDuplicates_Click( ) Dim i As Long Dim j As Long i = 1
While fIxCompound. Rows > i 3 = 1 + 1 While fIxCompound. ows > j
If flxCompound.TextMatrixli, 0) = fIxCompound. TextMatrix!j , 0) Then fIxCompound. row = j Call flxCompound_KeyUp(46, 0) j = j - 1
End If j = j + 1 Wend i = i + 1 Wend End Sub
Private Sub btnTecan_Click( )
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 ' (row <=8)
Else ' button = 2 fillmode = Not fillmode
FillGrid (CurrAPlate)
Figure imgf000134_0001
End Sub
Private Sub Form_Load ( ) Dim i As Integer fillmode = RAWVALS frmAPlateText.Caption = "Plate: " 4 Aplates (CurrAPlate) .PlateΙD(cAPLATE) flxPlate. op = 0 flxPlate. Left = 0 flxPlate. Height = frmAPlateText .Height - (200 + Com andl. Height) flxPlate.Width = frmAPlateText .Width - 200 flxPlate. Cols = 15 flxPlate. ows = 15 flxPlate. ColWidth(O) = 400
Commandl. Visible = False
Commandl. op = flxPlate. Height - (Commandl .Height + 100) j For i = 1 To 14
KJ flxPlate.ColWidth(i) = 650
Next.i flxPlate. ColWidth(13) = 300
FillGrid (CurrAPlate) End Sub
Private Sub Form_Resize ( )
Dim Wsum, Hsum As Integer
If Me.WindowState <> vbMinimized Then Wsum = 0 Hsum = 0 For i = 0 To flxPlate. Cols - 1
Wsum = Wsum + flxPlate. Colwidth(i) Next i
For i = 0 To flxPlate. ows - 1 .
Hsum = Hsum + flxPlate. RowHeigh (i)
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 = rmAPlateText. Height - (400 + Commandl . Height ) flxPlate.Width = frmAPlateText.Width - 200
Commandl. op = flxPlate. Height
' toggle plate status
Aplates (CurrAPlate) .Good = Not Aplates (CurrAPlate) .Good ' 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 ('" 4 Aplates (CurrAPlate) .PlateCode (cAPLATE) 4
' " 4 flag_val 4 " ' ) "
Set rsUpdateWholePlate = DB. OpenRecordset (UpdateSQL, dbOpenSnapshot) rsUpdateWholePlate.Close
frmAPlateText
'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) frmAPlateText . Show Elself rw > -1 Then
If cl > 11 Or cl = -1 Then For cl = 0 To 11
Aplates (CurrAPlate) .WelKrw, cD.Good = Not Aplates (CurrAPlate) .WelKrw, cD.Good Aplates (CurrAPlate) .WelKrw, cl) .Modified = True Next frmAPlateText. hide FillGrid (CurrAPlate) frmAPlateTex . Show
Else
Aplates (CurrAPlate) .WelKrw, cD.Good = Not Aplates (CurrAPlate) .Well (rw, cD.Good Aplates (CurrAPlate) .WelKrw, cl) .Modified = True
If Aplates (CurrAPlate) .WelKrw, cD.Good Then flxPlate. CellBackColor = vbWhite Else flxPlate. CellBackColor = vbRed End If If fillmode = RAWVALS Then flxPlate. TextMatrix (flxPlate. row, flxPlate. col) = Aplates (CurrAPlate) -Well (rw, cD.Raw Else flxPlate. TextMatrix (flxPlate. row, flxPlate. col) = Format (Aplates (CurrAPlate) -Well (rw, cl).Inhib(We llstat), "##0.00")
For rw = 0 To 7
For cl = 0 To 11
If Aplates (CurrAPlate) .Well (rw, cl). Modified Then
BF = " ' ' "
If Not Aplates (CurrAPlate) .Well (rw, cD.Good Then
BF = " 'T' "
End If
If cl < 9 Then clt = "0" & cl + 1 Else clt = cl + 1 End If
StrSQL = "insert into TROPIX_UPDATE_BOGUS_FLAG values!" 4 _ Aplates (CurrAPlate) .PlateCode (cAPLATE) 4 ",'" 4 _ ChrS (Asc ( "A" ) + rw) 4 " ' , ' " 4 clt 4 " ' , " 4 BF 4 " ) " Debug. Print strSQL
Aplates (CurrAPlate) .Well (rw, cl) .Modified = False Set rsTropixUpdate = DB. OpenRecordset (strSQL, dbOpenSnapshot) rsTropixUpdate .Close End If Next cl Next rw
Commandl .Visible = False Call CalcAStats (CurrAPlate) ■_, spit = 0 cjj While SplatestcSPLATE, spit) .PlatelD <> Aplates (CurrAPlate) .PlatelD (cSPLATE) -j2' spit = spit + 1
Wend
SplatestcSPLATE, spit) .StatsStarted = False Call CalcSPlateSta (spit)
'Update summary Stats For rw = 0 To 7 flxPlate. TextMatri (rw + 1, 14) = Format (Aplates (CurrAPlate) .RowSN (WellStat, rw) , "###0.0") Next rw flxPlate.TextMatrix (10, 3) = Format (Aplates (CurrAPlate) .Control (WellStat, cLOW) , "#####0.0") flxPlate.TextMatrixO, 3) = Forma (Aplates (CurrAPlate) .ControKWellStat, cHIGH) , "#####0.0") flxPlate.TextMatrix(11, 3) = Format (Aplates (CurrAPlate) . sn (WellStat) , "#####0.00") flxPlate.TextMatrix (11, 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 frmAPlateText .hide
Next j
If Aplates (plate) .RowSN (WellStat, i) = cNODATA Then flxPlate.TextMatrix(i + 1, 14) = " "
Else flxPlate. extMatrix(i + 1, 14) = Format (Aplates (plate) .RowSN(WellStat, i), "###0.0")
End If
Next i flxPlate. TextMatrix O, 1) = "Plate:" flxPlate.TextMatrix , 2) = "Hgh Cntrl" flxPlate.TextMatrix (10, 2) = "Low Cntrl" flxPlate. extMatrix (11, 2) = "S/N" flxPlate. extMatrixlll, 4) = "CV" If Aplates (plate) .ControKWellStat, cLOW) = cNODATA Then flxPlate.TextMatrix (10, 3) = " "
Else flxPlate.TextMatri (10, 3) = Format (Aplates (plate) .Control (WellStat, cLOW) , "#####0.0") End If If Aplates (plate) .ControKWellStat, cHIGH) = cNODATA Then flxPlate.TextMatrixO, 3) = " "
Else flxPlate.TextMatrixO, 3) = Format (Aplates (plate) .ControKWellStat, cHIGH) , "#####0.0") End If ates (plate) .sn (WellStat) = cNODATA Then xPlate.TextMatri (11, 3) = " xPlate.TextMatrix (11, 3) = Format (Aplates (plate) . sn (WellStat) , "#####0.00")
Figure imgf000137_0001
If Aplates (plate) .cv(WellStat) = cNODATA Then flxPlate. extMatri (11, 5) = " "
Else flxPlate.TextMatri (11, 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, 3 As Integer Dim title As String title = "Assay Plate : " 4 Aplates (plate) . PlatelD (cAPLATE)
If fillmode = RAWVALS Then title = title 4 " - raw data values" Else title = title & " - %inhibition" End If
If Aplates (plate) -Good Then title = title 4 ", plate is good" Else title = title 4 ", plate marked as bad" End If frmAPlateText.Caption = title
For i = 1 To 12 flxPlate.TextMatrixO, i) = i
Next i ►!_ flxPlate.TextMatrixO, 14) = "S/N" <_ For i = 0 To 7 i flxPlate. TextMatrix (i + 1, 0) = Chr$ (Asc ( "A" ) + i)
Next i flxPlate. row = 0 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. extMatrixli + 1, j + 1) = Aplates (plate) .Well(i, j).Raw
Else flxPlate.TextMatri li + 1, j + 1) = Format (Aplates (plate) -Well (i, 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_Clic ( )
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 4 " " 4 y 4 " " plt
If Button = 1 Then
I-f CurrAPlate <> -1 Then
Debug. Print X 4 " " 4 Y & " " 4 pit 4 " Plate: " & Aplates (Aplateslndex (pit )). PlateΙD(cAPLATE) 4 "(" 4 pi t 4 ")" picPlate.Line (Aplates (CurrAPlate) . PerformLeft - 0.02, Aplates (CurrAPlate) .PerformTop + 4) - (Aplates (CurrAP late) .PerformLeft - 0.4, Aplates (CurrAPlate) .PerformTop + 20), vbWhite, BF End If
CurrAPlate = Aplateslndex (pit) X ' frmAPlatePerform.Caption = "Assay Plate View - Plate: " 4 Aplates (Aplateslndex (pit) ). PlatelD (cAPLATE) J picPlate.Line (Aplates (CurrAPlate) . PerformLeft - 0.05, Aplates (CurrAPlate) . PerformTop + 4) - (Aplates (CurrAPlate
T4 (.PerformLeft - 0.4, Aplates (CurrAPlate) . PerformTop + 20), RGB1200, 100, 100), BF Unload frmAPlateText frmAPlateText . Show Else ' button = 2 ' Mark Plate as Bad without showing text
End If End If End Sub
frmAPlatesToSelect - 1
' Copyright 1999 Tropix, Inc. Option Explicit
Private Sub Labell_Click( )
APlatesInARange = Val (txtAPlateCoun -Text)
If Val (txtAPlateCount -Text) < 1 Then APlatesInARange = 0
If Val (txtAPlateCount.Text) > AplatesSubSelected Then APlatesInARange = AplatesSubSelected
Unload frmAPlatesToSelect
End Sub
For rw = 0 To 7
If Aplates (Aplateslnde (pit) ) .RowSN (WellStat, rw) <> cNODATA Then
If Aplates (Aplateslndex (pit) ) . owSN (WellStat , rw) < Limits (cLIMITPLATESN, 0) Then currclr = Clr (cLIMITPLATESN, 0) Elself Aplates (Aplateslndex (pit) ) -RowSN (WellStat, rw) < Limits (cLIMITPLATESN, D Then currclr = Clr (cLIMITPLATESN, 1) Elself Aplates (Aplateslndex (pit) ) .RowSN (WellStat, 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))-(cx + 3, cy + (rw + 1) * 3), currclr, BF Next rw
' draw outline hDC.Line (ex, cy)-(cx, cy + 24), vbBlack hDC.Line (ex, cy)-(cx + 3, cy) , vbBlack hDC.Line (ex + 3, cy) - (ex + 3, cy + 24), vbBlack hDC.Line (ex, cy + 24) -(ex + 3, cy + 24), vbBlack hDC.Line (ex, cy + 8) -(ex + 2, cy + 8), vbBlack hDC.Line (ex, cy + 16) -(ex + 2, cy + 16), vbBlack hDC.Line (ex + 2, cy)-(cx + 2, cy + 24), vbBlack hDC. CurrentX = 1 hDC.CurrentY = hDC.ScaleTop + 2 hDC.FontName = "Arial" hDC. fontsize = Int ( (hDC. Width / 1800) (14 / Across) ) + 1
frmAPlatePerform - 5
If hDC. fontsize > 12 Then hDC. fontsize = 12 If hDC. hDC = picPlate.hDC Or CommentsText = Then hDC. Print frmAPlatePerform. Caption Else hDC. Print frmAPlatePerform.Caption 4 ": 4 CommentsText End If
Figure imgf000140_0001
Private Sub MenuEditCopy_Click()
Clipboard, Clear
Clipboard. SetData picPlate. Image, vbCFBitmap End Sub
Private Sub mnUFileExit_Click()
Call End_Program End Sub
Figure imgf000141_0001
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) picPlate. ScaleHeight = (Down * 24) + (5 * Down) -t 20 picPlate. ScaleTop = -10 picPlate. Cls
For pit = 0 To AplatesSubSelected - 1
Call draw_plate(plt, picPlate) Next
Call DrawKey (picPlate) End If End Sub
Private Sub draw_plate (ByVal pit As Integer, ByVal hDC As Control)
Dim sum As Single
Dim currclr As ColorConstants
Dim rw As Integer hDC.FillStyle = vbSolid hDC.FontName = "Arial" hDC. fontsize = Int (( (hDC. Height / hDC. ScaleHeight) / 20) 3) + 1 hDC. CurrentX = Aplates (Aplateslndex (pit) ) .PerformLeft hDC. CurrentY = Aplates (Aplateslndex (pit) ) .PerformTop - 4 If Aplates (Aplateslndex (pit) ) .Good Then hDC. ForeColor = vbBlack Else hDC. ForeColor = vbRed End If hDC. Print AplateslAplatesIndexlplt)) .PlatelD (ALabelType)
Aplates (Aplateslndex (pit) ) PerformLeft cy Aplates (Aplateslndex (pit) ) PerformTop
If Aplates (Aplateslndex (pit) ) .cv(WellStat) <> cNODATA Then
If Aplates (Aplateslndex (pit) ) .cv(WellStat) > Limits (cLIMITPLATECV, 2) Then currclr = Clr (cLIMITPLATECV, 2)
Figure imgf000142_0001
frmAPlatePerform - 3
End Sub
Private Sub Form_Load()
Dim pit As Integer
ShowThird = True pit = 0
Select Case AplatesSubSelected Case 1
Across = 1
Down = 1
ODown = 1 Case 2
Across = 1
Down = 2
ODown = 2 Case 3
Across = 2
Down = 2
ODown = 2 Case Else
Across = Int (Sqr (AplatesSubSelected) )
ODown = Int (AplatesSubSelected / Across)
Down = ODown
If Across * ODown < AplatesSubSelected Then Down = ODown + 1
End If End Select
For pit = 0 To AplatesSubSelected - 1
AplateslAplatesIndexlplt) ) .PerformTop = (Int(lplt) / (Across)) * 24) + (5 * Intllplt) / (Across))) + 5 Aplates (Aplateslnde (pit) ) -PerformLeft = ((pit Mod (Across)) * 3) + (1 * (pit Mod (Across))) + 1 txtControls.SelText = Aplates (Aplateslnde (pit) ). PlateΙD(O)
For rw = 0 To 7 txtControls.SelText = Chr$(9) & AplateslAplatesIndexlplt) ) .Well (rw, 0).Raw
Next rw txtControls.SelText = ChrS (13)
Next 'through all APlatesIndex
End Sub
CV Key hDC.CurrentX = ex cy = cy + 1.75 * UnitsPerCharacter 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") hDC.FillColor = vbWhite hDC.Line (ex, cy - SpaceFactor * 1.2)-(cx + 0.33 * UnitsPerlneh, cy - SpaceFactor * 0.2), vbBlack, B hDC.CurrentX = ex cy = cy + 1.75 * UnitsPerCharacter hDC.CurrentY = cy hDC. Print " " & Format (Limits (cLIMITPLATECV, 1), "##0.0") currclr = Clr (cLIMITPLATECV, 0) , hDC.FillColor = currclr
^ hDC.Line (ex, cy - SpaceFactor * 1.2)-(cx + 0.33 * UnitsPerlneh, cy - SpaceFactor * 0.2), currclr, BF t hDC. CurrentX = ex
1 cy = cy + 1.75 * UnitsPerCharacter hDC.CurrentY = cy hDC. Print " & Format (Limits (cLIMITPLATECV, 2), "##0.0") currclr = Clr (cLIMITPLATECV, 1) hDC.FillColor = currclr hDC.Line (ex, cy - SpaceFactor * 1.2)-(cx + 0.33 * UnitsPerlneh, cy - SpaceFactor * 0.2), currclr, BF cy = cy + 1.75 * UnitsPerCharacter currclr = Clr (cLIMITPLATECV, 2) hDC.FillColor = currclr hDC.Line (ex, cy - SpaceFactor * 1.2)-(cx + 0.33 * UnitsPerlneh, cy - SpaceFactor * 0.2), currclr, BF hDC.FillStyle = vbTransparent hDC. fontsize = fontsize
frmAPlatePerform - 2 hDC. Print " " & Format (Limits (cLIMITPLATESN, 2), "##0.0") currclr = Clr (cLIMITPLATESN, 2) hDC.FillColor = currclr hDC.Line (ex, cy - SpaceFactor * 1.2)-(cx + 0.33 * UnitsPerlneh, cy - SpaceFactor * 0.2), currclr, BF cy = cy + 1.75 * UnitsPerCharacter hDC.FillColor = vbWhite hDC.Line (ex, cy - SpaceFactor * 1.2) -(ex + 0.33 * UnitsPerlneh, cy - SpaceFactor * 0.2), vbBlack, B hDC.FillStyle = vbTransparent
' Z Key hDC.CurrentX = ex cy = cy + 1.75 * UnitsPerCharacter hDC. CurrentY = cy cy = cy + 1.75 * UnitsPerCharacter hDC.CurrentY = cy hDC. Print "Z Factor" hDC.CurrentX = ex cy = cy + 1.75 * UnitsPerCharacter hDC.CurrentY = cy hDC. Print " 1.0" hDC.CurrentX = ex cy = cy + 1.75 * UnitsPerCharacter -^ hDC. CurrentY = cy
^ hDC. Print " " & Format (OkayZ, "##0.0") i hDC.FillColor = vbWhite hDC.Line (ex, cy - SpaceFactor * 1.2) -(ex + 0.33 * UnitsPerlneh, cy - SpaceFactor * 0.2), vbBlack, B hDC. CurrentX = ex cy = cy + 1.75 * UnitsPerCharacter hDC. CurrentY = cy hDC. Print " " & Format (WorseZ, "##0.0") currclr = RGB(204, 204, 255) hDC.FillColor = currclr hDC.Line (ex, cy - SpaceFactor * 1.2)-(cx + 0.33 * UnitsPerlneh, cy - SpaceFactor * 0.2), currclr, BF hDC. CurrentX = ex cy = cy +# 1.75 * UnitsPerCharacter hDC. CurrentY = cy hDC. Print " " & Foππat(BadZ, "##0.0") currclr = RGB(130, 130, 255) hDC.FillColor = currclr hDC.Line (ex, cy - SpaceFactor * 1.2)-(cx + 0.33, * UnitsPerlneh, cy - SpaceFactor * 0.2), currclr, BF cy = cy + 1.75 * UnitsPerCharacter hDC.CurrentY = cy currclr = RGB10, 0, 255) hDC.FillColor = currclr hDC.Line (ex, cy - SpaceFactor * 1.2)-(cx + 0.33 * UnitsPerlneh, cy - SpaceFactor * 0.2), currclr, BF
Figure imgf000145_0001
TwipsPerHeight = (hDC. Height / hDC. ScaleHeight)
TwipsPerWidth = (hDC. Width / hDC. ScaleWidth)
UnitsPerlneh = 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 * UnitsPerlneh) cy = 1
SpaceFactor = 0.15 * HeightPerlnch End If hDC. CurrentX = ex cy = cy r 1.75 * UnitsPerCharacter hDC.Curr-ntY = cy hDC. Print "SN" hDC. CurrentX = ex cy = cy + 1.75 * UnitsPerCharacter hDC. CurrentY = cy hDC. Print " 0.0"
-t-. hDC. CurrentX = ex cy =; cy + 1.75 * UnitsPerCharacter hDC.fcurrentY = cy hDC. Print " " St Format (Limits (cLIMITPLATESN, 0), "##0.0") hDC.FillStyle = vbSolid currclr = Clr (cLIMITPLATESN, 0) hDC.FillColor = currclr hDC.Line (ex, cy - SpaceFactor * 1.2) -(ex + 0.33 * UnitsPerlneh, 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 * UnitsPerlneh, 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
On Error GoTo theend cmdPrint .CancelError = True cmdPrint . ShowPrinter
Printer. ScaleWidth = (Across * 3) + (1 * Across) + 6
Printer .ScaleHeight = (Down * 24) + (5 * Down) + 20
Printer .ScaleTop = -15
For pit = 0 To AplatesSubSelected - 1 t-#ι Call draw_plate(plt. Printer)
Next
Call DrawKey (Printer)
Printer . EndDoc theend: . End Sub '
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 UnitsPerlneh As Single
Dim HeightPerlnch As Single
Dim SpaceFactor As Single fontsize = picPlate. fontsize hDC. fontsize = 12
Private Sub pj.cPlate_MouseUp IButton 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 + Int((Y) / 28) * Across
If pit < 4 Then
If Button = 1 Then cmdSave. ShowSave fname = cmdSave. filename fn = FreeFile
Open fname For Output As #fn
If pit = ALLALL Then
Print #fn, "Stats for All Plates, Good and Bad Wells" Elself pit = ALLGOOD Then
Print #fn, "Stats for All Plates, Good Wells Only" Elself pit = SELECTEDALL Then
Print #fn, "Stats for Selected Plates, Good and Bad Wells" i Else Print #fn, "Stats for Selected Plates, Good Wells Only"
O End If
' For rw = 0 To 7
For cl = 0 To 11
Print #fn, ChrS (Asc ( "A" ) + rw) . cl * 1 - " Inhib: " & Format (APlatePatterns (pit) .assay(O) .Well (rw, c l).Inhib(O), "0.000")
Print #fn, APlatePatterns (pit) .assay(0) .Well (rw, cl) .ResultString(O) Next cl Next rw Close fn Else
ShowText = Not ShowText Call Form_Resize End If End If Exit Sub theend:
Debug. Print Err. umber, Err .Description
End Sub
' Stimulation r = Abslcl * 2.5) g = Abs(cl * 2.5) b = Abs(cl * 2.5)
If r > 255 Then r = 255 If g > 255 Then g = 255 If b > 255 Then b = 255
If r >= 0 Then currclr = RGB(r., g, 255) Else currclr = RGB1200, 200, 200) End If
frmAPlatePattern hDC.Line ((ex + 4) / 2, 64) -((ex + 4) / 2 + (hDC. ScaleWidth - 5) / 100, 65), currclr, BF Next cl hDC. CurrentX = 4 hDC. CurrentY = 61 hDC. Print "Stim" hDC. CurrentY = 59 ^ hDC. CurrentX = hDC. ScaleWidth - 15 hDC. Print "Inhib"
If hDC. hDC <> picPlate.hDC Then hDC. fontsize = Int (( (hDC. Height / hDC. ScaleHeight) / 20) * 2#) + 1
If hDC. fontsize > 12 Then hDC. fontsize = 12 hDC. CurrentX = 4 hDC. CurrentY = 66 hDC. Print CommentsText End If
End Sub
Private Sub MenuEditCopy_Click()
Clipboard. Clear
Clipboard. SetData picPlate. Image, vbCFBit ap End Sub
Private Sub mnuFileExit_Click( )
Call End_Program End Sub
Private Sub mnuThreshold_Click( ) frmThreshold. Show vbModal, Me picPlate. Cls
Call Form_Resize End. Sub
If Average = cNODATA Then hDC.FillStyle = vbFSSolid hDC.FillColor = RGB(170, 170, 170) hDC. Circle (ex - 0.7, cy - 0.7), 0.65, RGB(170, 170, 170)
Else
If Abs (Average) >= Threshold Then hDC.FillStyle = vbFSSolid hDC.FillColor = currclr hDC.Circle (ex - 0.7, cy - 0.7), 0.65, currclr
End If End If If ShowText Then hDC. fontsize = hDC. fontsize / 2 hDC. CurrentX = ex - 1.1 hDC. CurrentY = cy - 0.45 hDC.FillStyle = vbFSTransparent hDC. Print Forma (APlatePatterns (pit) .assay (0) .Well (rw, cl) . Inhib(O) , "##0") hDC. fontsize = Int (( (hDC. Height / hDC. ScaleHeight) / 20) * 2.6) + 1 End If
End If
Next rw
Next cl hDC, .FillStyle = vbFSTicans]
For cl = 0 To 11
For rw = 0 To 7 ex = Icl ' ' 3) + 4 APlatePatterns (pit) .Left cy = 1 rw * 3) + 4 APlatePatterns (pit) -Top
■4^ hhDDCC .. LLiinnee i( (eexx - - 22,, cy - 2) -(ex + 1, cy + 1), vbBlack,
OO Next rw
Next cl
' Draw Keys
For cl = 0 To 100
' Inhib r = cl g = cl * 2 .5 b = cl * 2 .5 ex = cl * (hDC. ScaleWidth - 10) / 100 + 2
If r > 255 Then r = 255
If g > 255 Then g = 255
If b > 255 Then b = 255
If r >= 0 Then currclr = RGBI255, 255 - g, 255 - b)
Else currclr = RGB1200, 200, 200)
End If hDC.Line ( (hDC. ScaleWidth - 10) / 2 + ex / 2, 62) - ( (hDC. ScaleWidth - 10) / 2 + ex / 2 + (hDC. ScaleWidth - 5) / 100 63) , currclr, BF
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. fontsize = Int ( 1 IhDC.Height / hDC. ScaleHeight) / 20) 2.6) + l hDC. CurrentX = APlatePatterns (pit) . Left hDC. CurrentY = APlatePatterns (pit) .Top - 1.75 hDC. Print APlatePatterns (pit) .PlatelD
For cl = 0 To 11
For rw = 0 To 7 ex = (cl * 3) + (4) + APlatePatterns (pit) .Left cy = (rw * 3) + (4) + APlatePatterns (pit) .Top
If APlatePatterns (pit) .assay(O) .WelKrw, cl) .ResultsCount 10) Then Average = (APlatePatterns (pit) .assay (0) .Well (rw, cl) . Inhib(O) )
Else
Average = cNODATA
End If
If Average <> cNODATA Then
If Average >= 0 Then r = Average * 2.5
frmAPlatePattern 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 = RGB1255, 255 - g, 255 - b) Else
Figure imgf000151_0001
currclr = RGB(r, g, 255) End If
frmAPlatePattern - 1
' Copyright 1999 Tropix, Inc.
' Dim PData(96) As Single
' Dim PCV(96) 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
Printer. ScaleHeight = (Down * 24) + (4 * Down) + 21
Printer. ScaleTop = -3
For pit = ALLALL To SELECTEDGOOD Call draw_plate(plt, Printer)
Next
Printer .EndDoc theend: End Sub cyi Private Sub Form_Load ( )
" Dim stat As Integer i
Across = 2
Down = 2
For stat = ALLALL To SELECTEDGOOD
APlatePatterns Istat) .Top = (Int! (stat) / (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 (pit, 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 + Intl(Y) / 28) * Across
If pit < AplatesSubSelected And pit >= 0 Then '
frmAPlateGraphic - 10
Debug. Print X & " " & Y & " " i plt
If Button = 1 Then rw = Int((Y - (2 + AplateslAplatesIndexlplt) ) -DataTop) ) / 3) cl = Int (IX - (2 + AplateslAplatesIndexlplt) ) .DataLeft)) / 3)
If rw < 0 Then rw = 0
If cl < 0 Then cl = 0
If rw > 7 Then rw = 7
If cl > 11 Then cl = 11
Debug. Print X & " " & Y & " " & pit & " Plate: " & Aplates (Aplateslnde (pit) ) .PlateΙD(cSPLATE) & "(" & pit & ") I" & rw & "," & cl & ι") - Compound: "; Aplates (Aplateslndex(plt) ) -Well (rw, cl) .Compound MsgBox ("Compound : " & APlates (APlatesIndex (pit) ) .Well (rw, cl) .Compound)
<-ι SelCompounds (CompoundsSelected) .Name = Aplates (Aplateslndex(pit) ) .Well (rw, cl) .Compound
SelCompounds (CompoundsSelected) .SPlatelD = Aplates (Aplateslndex (pit) ) .PlateΙD(cSPLATE)
SelCompounds (CompoundsSelected) .row = rw
SelCompounds (CompoundsSelected) .col = cl
CompoundsSelected = CompoundsSelected + 1 frmCompoundList . Show frmCompoundList .Refresh Else ' button = 2
If CurrAPlate <> -1 Then picPlate.Line (Aplates (CurrAPlate) .DataLeft - 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 (Aplateslnde (pit) ). PlatelD (cAPLATE) picPlate.Line (Aplates (CurrAPlate) .DataLeft - 0.02, Aplates (CurrAPlate) .DataTop + 4) - (Aplates (CurrAPlate) .Data
Left - 0.4, Aplates (CurrAPlate) .DataTop + 20), RGBI200, 100, 100), BF
Unload frmAPlateText frmAPlateText. Show
End If
End If
End Sub
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
I ViewS im Then dispstat = Aplates (Aplateslnde (pit)) .Welllrw, cl) .Stim(WellStat) Else dispstat = Aplates (Aplateslndex (pit) ) .Well (rw, cl) . Inhib(WellStat) End If
If ( (AplateslAplatesIndexlplt) ) .Well (rw, cl) -Type = "D") Or (Aplates (Aplateslndex (pit) ) .Well (rw, cl) .T ype <> ActCtllcHIGH) And Aplates (Aplateslndex (pit) ) .Well (rw, cD.Type <> ActCtl (cLOW) ) )
And -dispstat < Limits (cLIMITINHIB, 2) _ And -dispstat >= Limits (cLIMITINHIB, 1) Then
SelCompounds (CompoundsSelected) .Name = Aplates (Aplateslndex (pit) ) .Well (rw, cl) .Compound SelCompounds (CompoundsSelected) .SPlatelD = Aplates (Aplateslndex (pit) ) .PlateΙD(cSPLATE) SelCompounds (CompoundsSelected) .row = rw SelCompounds (CompoundsSelected) -col = cl CompoundsSelected = CompoundsSelected + 1 End If Next cl Next rw Next pit I—. frmCompoundList .Show
VJ frmCompoundList. Refresh i Case "c":
' Cyan Only (Stim)
For pit = 0 To AplatesSubSelected - 1 For rw = 0 To 7
For cl = 0 To 11
If ViewStim Then dispstat = Aplates (Aplateslnde (pit) ) .WelKrw, cl) .Stim(WellStat) Else dispstat = AplateslAplatesIndexlplt) ) .Welllrw, cl) .Inhib(WellStat) End If
If I (AplateslAplatesIndexlplt) ) .WelKrw, cl) .Type = "D") Or (Aplates (Aplateslndex(pit) ) .Welllrw, cl) .T ype <> ActCtllcHIGH) And AplateslAplatesIndexlplt) ) .WelKrw, cD.Type <> ActCtllcLOW) ) ) _
And -dispstat < Limits (cLIMITINHIB, 1)
And -dispstat >= Limits (cLIMITINHIB, 0) Then
SelCompounds (CompoundsSelected) .Name = Aplates (Aplateslndexlplt) ) .Well (rw, cl) .Compound
SelCompounds (CompoundsSelected) -SPlatelD = Aplates (Aplateslndexlplt) ). PlatelD(cSPLATE)
SelCompounds (CompoundsSelected) . row = rw
SelCompounds (CompoundsSelected) -col = cl
CompoundsSelected = CompoundsSelected + 1
End If
Next cl
Next rw
Next pit frmCompoundList. Show , frmCompoundList .Refresh
End Select
Next cl
Next rw
Next pit frmCompoundList. Show frmCompoundLis .Refresh
Case " " :
' Marked = Red, Dark Blue, Cyan (Stim)
For pit = 0 To AplatesSubSelected - 1
For rw = 0 To 7
For cl = 0 To 11
If ViewStim Then dispstat = Aplates (Aplateslndex(pit) ) .Welllrw, cl) .Stim(WellStat) Else dispstat = Aplates (Aplateslndex(pit) ) .WelKrw, cl) .Inhib(WellStat) End If
If ( (Aplates (Aplateslndex(plt) ) .WelKrw, cD.Type = "D") Or (Aplates (Aplateslndexlplt) ) .WelKrw, cl) .T ype <> ActCtl (cHIGH) And Aplates (Aplateslndexlplt) ) .WelKrw, cD.Type <> ActCtl (cLOW) ) ) _
And -dispstat >= Limits (cLIMITINHIB, 0) Then
SelCompounds (CompoundsSelected) -Name = Aplates (Aplateslndexlplt) ) .WelKrw, cl) .Compound SelCompounds (CompoundsSelected) .SPlatelD = AplateslAplatesInde lplt) ) .PlatelD(cSPLATE) SelCompounds (CompoundsSelected) .row = rw SelCompounds (CompoundsSelected) .col = cl CompoundsSelected = CompoundsSelected + 1 End If Next cl i Next rw
^ Next pit
CJ frmCompoundList . Show
frmAPlateGraphic - 9 rmCompoundList . Refresh Case "r":
' Red Only (Stim)
For pit = 0 To AplatesSubSelected - 1 For rw = 0 To 7
For cl = 0 To 11
If ViewStim Then dispstat = AplateslAplatesIndexlplt)) .Welllrw, cl) .stim(WellStat)
Else dispstat = AplateslAplatesIndexlplt)) .Welllrw, cl) -Inhib(WellStat)
End If
If ( (Aplates lAplatesIndex lplt) ) . Well lrw, cD . Type = "D" ) Or (Aplates (ABlates - p- r., . ι- ι i u.i n-„ „ι , * ype <> ActCtKcHIGH) And Aplates (Aplateslndex (plt ) ) . WelKrw, cD .Type <> ActCtKcLOwr ,AplatesIndex (plt> » -WelKrw, cl) - T
And -dispstat >= Limits (cLIMITINHIB, 2) Then
SelCompounds (CompoundsSelected).Name = AplateslAplatesIndexlplt)) .WelKrw, cl) Compound
SelCompounds (CompoundsSelected) .SPlatelD = Aplates (Aplateslndexlplt) ) .PlatelD (cSPLATE) SelCompounds (CompoundsSelected) .row = rw SelCompounds (CompoundsSelected) .col = cl CompoundsSelected = CompoundsSelected + 1 End If
68810
Figure imgf000156_0001
Case "M":
' Marked = Red, Dark Blue, Cyan For
ype <> ActC
Figure imgf000157_0001
Next cl Next rw .
Next pit ' rmCompoundList . Show frmCompoundList . Refresh Case "R":
' High = Red Only
For pit = 0 To AplatesSubSelected - 1 For rw = 0 To 7
For cl = 0 To 11
If ViewStim Then dispstat = Aplates (Aplateslnde (pit) ) .Well (rw, cl) .Stim(WellStat) Else dispstat = Aplates (Aplateslndexlplt) ) .Welllrw, cl) . Inhib (WellStat) End If If ( (Aplates (Aplateslndexlplt) ) .Welllrw, cl) .Type = "D") Or (Aplates (Aplateslndexlplt) ) .Well (rw, cl) .T
frmAPlateGraphic - 8 ype <> ActCtllcHIGH) And Aplates (Aplateslndex (pit) ) -Well (rw, cD.Type <> ActCtl (cLOW) ) )
And dispstat >= Limits (cLIMITINHIB, 2) Then
SelCompounds (CompoundsSelected) .Name = Aplates (Aplateslndexlplt) ) .Well (rw, cl). Compound SelCompounds (CompoundsSelected) .SPlatelD = AplateslAplatesIndexlplt)) . PlatelD (cSPLATE) SelCompounds (CompoundsSelected) . row = rw SelCompounds (CompoundsSelected) .col = cl CompoundsSelected = CompoundsSelected + 1 End If Next cl Next rw Next pit frmCompoundList . Show frmCompoundList . Refresh
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 mnuViewTrends_Click( )
ViewMode = 1 mnuViewTrends. Checked = True mnuViewDiscrete. Checked = False mnuViewWelltype. Checked = False
Call Form_Resize End Sub
Private Sub mnuViewWelltype_Click( ) ViewModi. = 2 mnuViewTrends. Checked = False mnuViewDiscrete. Checked = False mnuViewWelltype. Checked = True Call Form_Resize
End Sub
Private Sub picPlate_KeyPress (KeyAscii As Integer)
Dim rw As Integer
Dim cl As Integer
Dim dispstat As Single
Dim pit As Long
. Select Case Chr$ (KeyAscii) Case "A" :
' ALL, compounds reported, regardless of inhibition For pit = 0 To AplatesSubSelected - 1 For rw = 0 To 7
For cl = 0 To 11 ype <> ActCt
Figure imgf000158_0002
Figure imgf000158_0001
Next rw Next pit frmCompoundList . Show frmCompoundList . Refresh
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 (Aplateslnde lplt) ) .DataLe t cy = (rw * 3) + 4 + Aplates (Aplateslndexlplt) ) .DataTop hDC.Line (ex - 2, cy - 2) -(ex + 1, cy + 1) , RGB1225, 225, 225), B Next rw Next cl hDC.Line (Aplates (Aplateslndexlplt) ) .DataLeft + 2, Aplates (Aplateslndexlplt) ) .DataTop + 2) - (Aplates (Aplateslndex (p It) ) .DataLeft + 38, Aplates (Aplateslndex (pit) ). DataTop + 26), RGB(51, 51, 51), B hDC. CurrentX = 2 hDC. CurrentY = -8 hDC. ForeColor = vbBlack 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 hDC . Print rmAPlateGraphic . Caption , Else i
H hDC. Print frmAPlateGraphic. Caption & " : " St CommentsText
^ End If
' 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 mnuViewDiscrete_Click( ) ViewMode = 0 mnuViewTrends. Checked = False mnuViewDiscrete. Checked = True mnuViewWelltype. Checked = False
Call Form_Resize
End Sub
Private Sub mnuViewInhibition_Click() mnuViewInhibition. Checked = True mnuViewStimulation. Checked = False
ViewStim = 0
End Sub
Private Sub mnuViewStdevs_Click( )
Next rw Next cl hDC.FillStyle = vbFSTransparent For cl = 0 To 11
For rw = 0 To 7
Figure imgf000160_0001
hDC.CurrentX = 2 ' hDC.CurrentY = -8 hDC.ForeColor = vbBlack hDC .FontName = "Arial" hDC. fontsize = Int 1 (hDC.Width / 1400) * (6 / Across)) + 1
If hDC. fontsize > 12 Then hDC. fontsize = 12
If hDC.hDC = picPlate.hDC Or CommentsText = "" Then hDC. Print frmAPlateGraphic.Caption Else hDC. Print frmAPlateGraphic .Caption & ": & CommentsText End If
frmAPlateGraphic - 6
C-/1 Else ' view mode = 2 - show well types
00
For cl = 0 To 11
For rw = 0 To 7 ex = (cl * 3) + (4) + AplateslAplatesIndexlplt) ) -DataLeft cy = (rw * 3) + (4) + Aplates (Aplateslndexlplt) ) -DataTop welltype = Aplates (Aplateslndex(pit) ) .Well (rw, cD.Type If welltype = "D" Then currclr = vbYellow Elself welltype = "H" Then currclr = vbBlue
Elself welltype = "L" Then currclr = vbCyan
Elself welltype = "T" Then currclr = vbRed
Else
If Not Aplates(AplatesIndexlplt) ) .Welllrw, cl) .Good Then currclr = vbBlack
Else currclr = vbWhite
End If End If
o
Figure imgf000161_0001
fc, x
£
3
o, o
Q
Figure imgf000162_0001
frmAPlateGraphic - 4
If ViewMode = 0 Then "The default View mode, Discrete Colors
For cl = 0 To 11
For rw = 0 To 7
If (Aplates (Aplateslndexlplt) ) .Well (rw, cD.Type = "D" ) Then ' Data wells only ex = (cl * 3) + (4) + AplateslAplatesIndexlplt) ) .DataLeft cy = (rw * 3) + (4) + Aplates (Aplateslndexlplt) ) .DataTop
If Not AplateslAplatesIndexlplt) ) .Welllrw, cD.Good Then currclr = vbBlack Else currclr = vbWhite End If
If ViewStim Then
Average = Aplates (Aplateslndexlplt) ) .Well (rw, cl) .Stim(WellStat) Else
Average = Aplates (Aplateslndex (pit) ) .Well (rw, cl) .Inhib (WellStat) End If
If Average <> cNODATA Then hDC.Line (ex - 2, cy - 2)- (ex + 1, cy + 1), currclr, BF
If Abs (Average) > Limits (cLIMITINHIB, 2) Then currclr = Clr (cLIMITINHIB, 2) Elself Abs (Average) > Limits (cLIMITINHIB, 1) Then currclr = Clr (cLIMITINHIB, 1) Elself Abs (Average) > Limits (cLIMITINHIB, 0) Then currclr = Clr (cLIMITINHIB, 0) Else currclr = vbWhite End If
If currclr <> vbWhite Then ' an active compound
If ViewStDevs = 1 Then ' draw a background color
StDevsAway = Abs ( (Aplates (Aplateslndex(plt) ) .Well (rw, cD.Raw - AplateslAplatesIndexlplt)) .ControKWellStat, cHIGH) ) / Aplates (Aplateslndexlplt) ). 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 If hDC.Line (ex - 2 , cy - 2)-(cx + 1, cy + 1), stdevclr, BF
End If End If
Private Sub Form_Resize 1 )
' was Form_Paint
Dim pit As Integer If Me.WindowState <> vbMinimized Then picPlate.Width = frmAPlateGraphic.Width - 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
End If
Call DrawKey(picPlate)
End Sub
Private Sub draw_plate (ByVal pit As Integer, hDC As Control)
Dim smp As Integer
Dim sum As Single
Dim Average As Single i Dim currclr As ColorConstants J^ Dim cl As Integer J Dim rw As Integer
Dim ex As, Single
Dim cy As] Single
Dim r As Long
Dim g As Long
Dim b As Long
Dim stdevclr As ColorConstants
Dim StDevsAway As Single
Dim welltype As String hDC.FillStyle = vbSolid hDC.FontName = "Arial" hDC. fontsize = Int (( (hDC.Height / hDC.ScaleHeight) / 20) * 2.6) + 1 hDC.CurrentX = Aplates (Aplateslndexlplt) ) .DataLeft hDC. CurrentY = Aplates (Aplateslndexlplt) ) .DataTop - 1.25
If Aplates (Aplateslndex (pit) ) .Good Then hDC.ForeColor = vbBlack
Else hDC. ForeColor = vbRed
End If hDC.Print Aplates (Aplateslndex (pit) ). PlatelD!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 * UnitsPerlneh) cy = 1
SpaceFactor = 0.15 * HeightPerlnch
End If hDC. CurrentX = ex cy = cy + 1.75 * UnitsPerCharacter hDC. CurrentY = cy hDC.FontBold = True hDC. Print "Type" hDC.FontBold = False frmAPlateGraphic - 3 hDC. urrentX = ex cy = cy + 1.75 * UnitsPerCharacter hDC. CurrentY = cy hDC. Print "Data" hDC.CurrentX = ex cy = cy + 1.75 * UnitsPerCharacter !<_. hDC. CurrentY = cy hDC. Print "High" > hDC.FillColor = vbYellow hDC.Line (ex, cy - SpaceFactor * 1.2)-(cx + 0.33 * UnitsPerlneh, cy - SpaceFactor * 0.2), vbYellow, BF hDC.CurrentX = ex cy = cy + 1.75 * UnitsPerCharacter hDC.CurrentY = cy , hDC.Print "Low" currclr = vbBlue hDC.FillColor = currclr hDC.Line (ex, cy - SpaceFactor * 1.2) -(ex + 0.33 * UnitsPerlneh, 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 * UnitsPerlneh, cy - SpaceFactor * 0.2), currclr, BF hDC.CurrentX = ex cy = cy + 1.75 * UnitsPerCharacter hDC. urrentY = cy currclr = vbRed hDC.FillColor = currclr hDC.Line (ex, cy - SpaceFactor * 1.2)-(cx + 0.33 * UnitsPerlneh, cy - SpaceFactor * 0.2), currclr, BF hDC.FillStyle = vbTransparent
End If hDC. font-jize = fontsize End Sub
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 * UnitsPerlneh, cy 0.05 * UnitsPerlneh), 0.05 * UnitsPerlneh, currclr hDC.DrawWidth = 1 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), "##0.0") hDC.FillColor = vbWhite hDC.Line (ex, cy - SpaceFactor * 1.2)-(cx + 0.33 * UnitsPerlneh, cy SpaceFactor * 0.2), vbBlack, B hDC. CurrentX = ex cy = cy + 1.75 * UnitsPerCharacter hDC. CurrentY = cy hDC. Print " " & Forma (Limits (cLIMITINHIB, 1), "##0.0") currclr = Clr (cLIMITINHIB, 0) hDC.FillColor = currclr hDC.Line (ex, cy - SpaceFactor * 1.2)-(cx + 0.33 * UnitsPerlneh, 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 = Clr (cLIMITINHIB, 1) hDC.FillColor = currclr hDC.Line (ex, cy - SpaceFactor * 1.2)- (ex + 0.33 * UnitsPerlneh, cy - SpaceFactor * 0.2), currclr, BF hDC. CurrentX = ex cy = cy + 1.75 * UnitsPerCharacter hDC. CurrentY = cy currclr = Clr (cLIMITINHIB, 2) hDC.FillColor = currclr hDC.Line (ex, cy - SpaceFactor * 1.2)-(cx + 0.33 * UnitsPerlneh, cy - SpaceFactor * 0.2), currclr, BF hDC.FillStyle = vbTransparent
For pit = 0 To AplatesSubSelected - 1
AplateslAplatesIndexlplt) ) .DataTop = (Int(lplt) / (Across)) * 24) + (4 * IntMplt) / (Across))) + 2
AplateslAplatesIndexlplt) ) .DataLeft = ((pit Mod (Across)) * 36) + (4 * (pit Mod (Across))) + 2
Next ' through all Aplateslndex
End Sub
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 UnitsPerlneh As Single
Dim HeightPerlnch As Single
Dim SpaceFactor As Single fontsize = picPlate. ontsize hDC. fontsize = 12
TwipsPerHeight = (hDC. Height / hDC. ScaleHeight)
TwipsPerWidth = (hDC.Width / hDC. ScaleWidth) i UnitsPerlneh = hDC. ScaleWidth / 11
^ HeightPerlnch = hDC. ScaleHeight / 11 -Λ
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 * UnitsPerlneh) 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
A
Figure imgf000168_0001
a ui
Figure imgf000168_0002
o —. c c§
o o
Figure imgf000168_0003

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.
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.
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; 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.
PCT/US2000/012364 1999-05-07 2000-05-05 Data display software 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 true WO2000068810A1 (en) 2000-11-16
WO2000068810A8 WO2000068810A8 (en) 2001-03-01
WO2000068810A9 WO2000068810A9 (en) 2001-11-22

Family

ID=22457079

Family Applications (1)

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

Country Status (2)

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

Citations (2)

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

Patent Citations (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
WO2000068810A9 (en) 2001-11-22
WO2000068810A8 (en) 2001-03-01
AU4824400A (en) 2000-11-21

Similar Documents

Publication Publication Date Title
Yan GGEbiplot—A Windows application for graphical analysis of multienvironment trial data and other types of two‐way data
US7333907B2 (en) System and methods for characterization of chemical arrays for quality control
US7446769B2 (en) Tightly-coupled synchronized selection, filtering, and sorting between log tables and log charts
US6868342B2 (en) Method and display for multivariate classification
JPS6379058A (en) Mechanical analyzing method and device for eddy-current test data of tube for heat exchanger
CN108090032A (en) The Visual Explanation method and device of Logic Regression Models
US5764824A (en) Clustering mechanism for identifying and grouping of classes in manufacturing process behavior
Duncan et al. A simulator and training technique for diagnosing plant failures from control panels
US6631211B1 (en) Interactive system for analyzing scatter plots
US6569096B2 (en) System and method of automating multidimensional scaling for psychophysics
US6690399B1 (en) Data display software for displaying assay results
DE10323897B4 (en) Method for identifying image positions of a color sample of a test strip
CN101470746A (en) Multi-layer statistical diagram system and method with data correlation function
WO2000068810A1 (en) Data display software
Rogers Taximetrics-new name, old concept
CN111272679B (en) High-resolution-based remote sensing reflectivity product generation system and method
JPS59218579A (en) Inspecting data output processing system
US7006922B2 (en) Stellar icon for data representation and system and method forming the stellar icon
Lima et al. A Visual-Interactive Idiom to Diagnose Missing Data Mechanisms
Goeman et al. The Global Test and the globaltest R package
WO2023209421A1 (en) Sediment analysis software along with scanning electron microscope toolbox for image processing
Mokhles et al. Advances in rock petrography: image processing techniques for automated textural thin section analysis
Baker et al. An Introduction to TITAN2
Tripodi Development, Preparation, and Curation of High-Throughput Phenotypic Data for Genome-Wide Association Studies: A Sample Pipeline in R
Korthauer Identifying differential distributions in single-cell RNA-seq experiments with scDD

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