
SBEAMS - Systems Biology Experiment Analysis Management System

Goals of the design:

- Build a simple, flexible user interface and RDBMS interface code on which
  we can build a platform to do:
  - User authentication and tracking
  - LIMS (basic data entry to allow users to store information)
  - Basic reporting
  - Data processing front end
  - Interface for analysis tools
  - Data export in standard formats
  - Allow users to explore with SQL!

- Initially used at ISB for:
  - Microarray Requests + LIMS + data processing pipeline
  - Sequencing LIMS

- Expandable by design for subsequent use:
  - Microarray analysis interface
  - Proteomics Requests + LIMS + data processing
  - Proteomics analysis interface
  - Sample information management
  - Other tools

- Does not appear to be anything similar in the public domain.
  - Perhaps design to be an exportable Open Source Project



Requirements:


- Similar interface from all platforms (Linux, Windows, Mac, etc.)
  - Java GUI
  - Web Interface tools:
    - Perl CGI (any CGI programs easily integratable)
    - PHP
    - mod_perl
    - Java servlets
    - Java applets

- Command line/interactive/programmatic interface
  - Perl
  - ROOT

- Interchangeable RDBMS back ends
  - Perl DBI
  - Java JDBC / ODBC

- easy to extend and add
  - for novice programmers?



Tour:

- User management: web login
- Multiple dev and multiple back end databases
- User information: contact, user_login, work_group
- Microarray tables: request form, slide production, status, processing
- Tools
- GEAP
- Behind the scenes: /host/db/local/www/html/dev2/sbeams
    - cgi/
    - lib/perl/
    - table_property
    - table_column
- Command-line interface
    - /host/db/local/www/html/dev2/sbeams/lib/perl/SBEAMS/scripts/
    - /net/db/projects/geap/
- Data processed on lemur


Problems:
- Lack of good prior design spec
- Not modular enough, a few case of duped code
- Not very tight coding
- Virtually no documentation, nor much of an API


Need some programs to read in various QuantArray, Dapple, DitigalGenome files
Should improve Dapple to write a proper information header




SBEAMS::Connection

Authenticator.pm:sub new {
Authenticator.pm:sub Authenticate { 
Authenticator.pm:sub processLogin {
Authenticator.pm:sub get_http_header {
Authenticator.pm:sub checkLoggedIn {
Authenticator.pm:sub checkValidUID {
Authenticator.pm:sub getCurrent_contact_id {
Authenticator.pm:sub getCurrent_username {
Authenticator.pm:sub setCurrent_work_group {
Authenticator.pm:sub getCurrent_work_group_id {
Authenticator.pm:sub getCurrent_work_group_name {
Authenticator.pm:sub getCurrent_project_id {
Authenticator.pm:sub getCurrent_user_context_id {
Authenticator.pm:sub getCurrent_project_name {
Authenticator.pm:sub printLoginForm {
Authenticator.pm:sub printAuthErrors {
Authenticator.pm:sub destroyAuthHeader {
Authenticator.pm:sub createAuthHeader {
Authenticator.pm:sub fetchErrors {
Authenticator.pm:sub checkLogin {
Authenticator.pm:sub getUnixPassword {
Authenticator.pm:sub checkIfAdmin {
Authenticator.pm:sub getContact_id {
Authenticator.pm:sub getUsername {

DBConnector.pm:sub new {
DBConnector.pm:sub dbConnect {
DBConnector.pm:sub getDBHandle {
DBConnector.pm:sub getDBServer {
DBConnector.pm:sub getDBDriver {
DBConnector.pm:sub getDBDatabase {
DBConnector.pm:sub getDBUser {

DBInterface.pm:sub new {
DBInterface.pm:sub applySqlChange {
DBInterface.pm:sub selectOneColumn {
DBInterface.pm:sub SelectTwoColumnHash {
DBInterface.pm:sub executeSQL {
DBInterface.pm:sub getLastInsertedPK {
DBInterface.pm:sub buildOptionList {
DBInterface.pm:sub getRecordStatusOptions {
DBInterface.pm:sub displayQueryResult {
DBInterface.pm:sub fetchNextRow {
DBInterface.pm:sub processTableDisplayControls {

HTMLPrinter.pm:sub new {
HTMLPrinter.pm:sub printPageHeader {
HTMLPrinter.pm:sub printStyleSheet {
HTMLPrinter.pm:sub printJavascriptFunctions {
HTMLPrinter.pm:sub printMinimalPageHeader {
HTMLPrinter.pm:sub printUserContext {
HTMLPrinter.pm:sub printPageFooter {
HTMLPrinter.pm:sub getGoBackButton {
HTMLPrinter.pm:sub printIncompleteForm {
HTMLPrinter.pm:sub printTextHeader {
HTMLPrinter.pm:sub printTextFooter {

TableInfo.pm:sub new {
TableInfo.pm:sub returnTableInfo {

Tables.pm



