Container

Collection Objects are physically located in containers, and the concept of Containers reflects that reality. Not only are collection objects located in containers, but containers are located within larger containers and this relationship is reflected in a recursive, parent-child relationship. Thus, every container has one parent container, except for “Container Zero” (the Parentless Void). For example, a tissue sample is typically in a cryovial, within a position in a freezer box, within a position in a freezer rack, within a freezer in a room…seven containers.

With each container uniquely labeled with a barcode, tracking objects becomes is done by scanning a new parent-container ID into the record of a child container. In the example above, the approximately 1,300 samples in a freezer rack can be tracked from one freezer to another by the scanning barcode on the freezer rack and its new parent ID (the barcode on the freezer).

Top

Container . Container_Type
VARCHAR(20) not null
ctcontainer_type

Container Type: Vials, jars, boxes, shelves, and rooms are all Container Types. Vocabulary is controlled, and should be limited to unambiguous, and mutually exclusive kinds of containers.

The Container Type "Position" is locked by programmed logic within its Parent Container. Examples of Positions include entities which cannont be physically moved from their Parent Container such as slots within freezer racks, slots for vials within freezer boxes, and positions for racks within freezers. In order create a Position, a Parent Container must be assigned.

Top

Container . Parent_Container_id
NUMBER not null

Parent Container:
This is the value that identifies the container into which another (child) Container has been placed. The value is not displayed in applications because Parent Containers are generally displayed by their Labels and entered into forms by their Barcode.

Top

Container . Barcode
VARCHAR(50) null

Barcode: Within the database, a barcode is a string of characters unique to a container. Most barcode values are meaningless “dumb numbers” that serve simply to associate a physical container with the information about the container.

On labels, these characters are represented in one of several possible machine-readable fonts. Code Three of Nine (usually called Code 39), Code 128, and the two-dimensional DataMatrix codes are being used at this time. Most modern one-dimensional scanners will automatically recognize most one-dimensional codes, and most two-dimensional scanners will recognize both one-dimensional and two-dimensional codes.

Many barcode labels are preprinted, purchased in lots, and made in particular sizes with particular adhesives, etc., for fairly specific applications. Others are printed in-house. Code 39 labels can be generated by installing a barcode font on a computer and printing to a laser printer. Code 39 can be downloaded for free. Asterisks are the stop and start codons for Code 39, so an expression such as *1234* will be read as 1234 by a barcode scanner.

In order to assure that barcode values are unique within an institution, barcodes are entered into the database as containers of the type label. This is done at the time labels are ordered so that the range of values is reserved. This practice also allows us to limit the values accepted by the database to known barcode values.

Top

Container . Label
VARCHAR(255) not null

Label is the descriptive value that is displayed in most of our object-tracking applications. It should usually represent something that appears on the container. In many cases, this will be the value of the barcode which is displayed in human-readable fonts on most barcode labels.

Many legacy containers are not easily barcoded, especially if they are numerous and stored at low temperatures. Therefore, Label should certainly be the value that appears in physical searches for un-barcoded containers.

Some object-tracking applications simplify the container hierarchy by reporting only the positions (Containers of the type Position) for a Collection Object. Thus, in order to find a tissue sample in the freezers, you do not need to know the label of the freezer box or the freezer rack. You need know only the positions of the box and rack. For these applications, the Labels of positions might usefully indicate the parent container of the position. For example, the Label of position 6-B in Freezer 6 is "Frzr6 6-B," not just "6-B."

Top

Container . Description
VARCHAR(255) null

Description is a useful expansion of Label. “Room 363″ is useful as a label, but something like "The processing room in the south wing of the Biology Annex" may be expeditious.

Top

Container_History . Install_Date
DATETIME not null

Install Date This is the date on which the Parent Container was last changed, i.e., the date on which the Container was placed in its parent. Often, this is defaulted to the system date.

Top

Container . container_remarks
VARCHAR(255) null

Remarks
is the place to record notes and about the container or its contents. Remarks are especially useful in explaining the nature and treatment of legacy containers (i.e., containers without barcode labels).

Top

Container . print_fg
NUMBER(1) null

Print Flag is a temporary flag that can be set for the purpose of printing container labels.

Top

Container . width
Container . height
Container . length
NUMBER null

Width, Height, Length are dimensions of a container in centimeters. Decimal fractions can be used. Because movement of objects involves two barcode scans that relate a child container to a parent container, there is a risk of accidentally reversing these two values. These dimensions are used in logic that prevents scanning a container into a parent that is smaller than itself.

Some common container dimensions:

Container Width Height Length
13-slot freezer rack 14 73 14
slot in freezer rack 13.5 5.5 13.5
regular (2 inch) freezer box 13 5 13
2-dram shell vial 2 5.6 2

Top

Container . Number_Positions
INTEGER null

Number of Positions: Some containers have immovable subcontainers of the Container Type Position. For example, many freezer boxes designed to contain cryovials have either 81 (9 X 9 rows) or 100 (10 X 10 rows) subdivisions, or fixed positions, for cryovials. Recording the number of positions in a container allows us to make forms specific to tasks such as scanning cryovials into a 100-position freezer box versus an 81-position freezer box.

Top

Container . institution_acronym
VARCHAR(20) not null

Institution is an abbreviation that indicates which institution’s container this is. There are two possible values at this writing: UAM and MSB. All barcode values within an institution are intended to be unique. Among institutions, barcode values are not unique.

Top
Searching

The Containers and Parts search form is written in AJAX/DHTML – it does not behave like traditional web forms.

  • The form is never submitted. If you click a control and nothing happens in a reasonable time, file a bug report.
  • Clicking controls repeatedly may “clog up the pipe” to the database. Don’t do it.
  • A reasonable browser is required. As always, we recommend Firefox.
  • You must have JavaScript enabled and allow pop-ups from arctos.database.museum

Note that there are two forms. Container and Part searches are distinct.

General usage guidelines:

  • Create a tree by searching for something in the form. Search for containers by clicking the button from parts, and vice-versa. This switch is DHTML – the form will not reload.
  • Drag/Drop is disabled. You can’t do it in this application. Feel free to try.
  • Doubleclick a “node” to find children of a container.
  • Check (or uncheck) a node to get a popup with details about the container and links to other applications.
  • Most links open in the right frame. Some open in a new page.

Top
Guidelines for barcode-containing labels:

  1. Barcodes should be clearly replicated in a human-readable format. The value read by a scanner should be readable by a human as well. Note that XYZ123, 123, ZYX 123, and ZYX0123 are all very different values.
  2. Avoid padding with leading zeroes. These may be handled differently by different applications. In order to keep the character strings all the same length, start the series at a high value. For example, instead of beginning a series at 000001, begin at 100001. Thus, the character string will always be six characters long, and the printed labels will format consistently.
  3. Avoid non-printing characters. Humans, and sometimes machines, can’t always tell if that hole represents a space, tab, linefeed, of any of the dozens of other possibilities.
  4. Use big numbers if possible. XYZ1234567890 is less likely to cause unanticipated problems than XYZ1 is.
  5. Don’t try to be too clever. You’ll learn to hate “L090207″ (or was it L927? Maybe L0902007?). Dumb numbers with a locally-meaningful prefix, such as UAM or UAMMAMM, will be much more sustainable.
  6. Check the Barcode Series Spreadsheet very early in the ordering process. Avoid anything that even remotely looks like it could be, or ever could become, a conflict. Duplicate barcodes will not be accepted.
  7. Talk to the Arctos folks before doing anything else. Really. It’s free, and we’re here to help. Ordering unusable barcodes is not free, and we’ll make fun of you for doing that.
  8. Enter the series of barcodes into Arctos and update the Barcode Series Spreadsheet before placing an order or printing your barcodes.