[med-svn] [mage2tab] 13/15: New upstream version 0.9

Andreas Tille tille at debian.org
Sun Dec 10 17:34:35 UTC 2017


This is an automated email from the git hooks/post-receive script.

tille pushed a commit to branch master
in repository mage2tab.

commit d47b90ce844cdb34a3867abe68f7c60d7d6a72e0
Author: Andreas Tille <tille at debian.org>
Date:   Sun Dec 10 18:33:08 2017 +0100

    New upstream version 0.9
---
 README                                             |   62 +
 bin/mage-checker.pl                                |   95 +
 bin/mage2graph.pl                                  |   94 +
 bin/mage2tab.pl                                    |   91 +
 config/config_VoToMageTab.xml                      |   23 +
 config/log4perl.config                             |   46 +
 debian/changelog                                   |    6 -
 debian/compat                                      |    1 -
 debian/control                                     |   35 -
 debian/copyright                                   |   49 -
 debian/docs                                        |    1 -
 debian/install                                     |    2 -
 debian/rules                                       |   10 -
 debian/source/format                               |    1 -
 debian/watch                                       |    3 -
 lib/perl/RAD/MR_T/MageImport/Loggable.pm           |   17 +
 lib/perl/RAD/MR_T/MageImport/MageImportError.pm    |  215 +
 .../MageImport/Service/AbstractProcessModule.pm    |   23 +
 .../MR_T/MageImport/Service/AbstractProcessor.pm   |    8 +
 .../RAD/MR_T/MageImport/Service/AbstractReader.pm  |   80 +
 .../MR_T/MageImport/Service/AbstractReporter.pm    |   11 +
 .../RAD/MR_T/MageImport/Service/AbstractTester.pm  |   11 +
 .../MR_T/MageImport/Service/AbstractTranslator.pm  |   38 +
 .../MR_T/MageImport/Service/AbstractValidator.pm   |   13 +
 .../MageImport/Service/AbstractValidatorRule.pm    |   45 +
 .../Service/ProcessModule/BlankModule.pm           |   25 +
 .../Service/ProcessModule/MakeTreatmentSeries.pm   |   93 +
 .../MergeTreatmentSeriesForSpeciedBiomatAction.pm  |   84 +
 .../Service/ProcessModule/NamingAcqAndQuan.pm      |   58 +
 .../Service/ProcessModule/NamingBioSource.pm       |   44 +
 .../ProcessModule/SetQuanProtocolToGusProtocol.pm  |   70 +
 lib/perl/RAD/MR_T/MageImport/Service/Processor.pm  |   36 +
 .../MageImport/Service/Reader/MageTabReader.pm     | 1423 ++++
 .../MR_T/MageImport/Service/Reader/MagemlReader.pm |  822 ++
 .../MR_T/MageImport/Service/Reader/MockReader.pm   |  386 +
 .../MageImport/Service/Reporter/SqlReporter.pm     |  233 +
 .../MR_T/MageImport/Service/Tester/SqlTester.pm    |  210 +
 .../MR_T/MageImport/Service/Translator/VoToDot.pm  |  119 +
 .../Service/Translator/VoToGusTranslator.pm        | 2069 +++++
 .../MageImport/Service/Translator/VoToMageTab.pm   | 1328 +++
 lib/perl/RAD/MR_T/MageImport/Service/Validator.pm  |  127 +
 .../Service/ValidatorRule/AssayHasContact.pm       |   56 +
 .../Service/ValidatorRule/AssayHasFactorValue.pm   |   66 +
 .../ValidatorRule/AssayHasLexAndNoHangingLex.pm    |   80 +
 .../MageImport/Service/ValidatorRule/BlankRule.pm  |   25 +
 .../Service/ValidatorRule/CheckDataFiles.pm        |  156 +
 .../ValidatorRule/CheckExistingGusProtocols.pm     |  102 +
 .../Service/ValidatorRule/NoHangingBioMaterials.pm |  108 +
 .../Service/ValidatorRule/ProtocolHasMgedType.pm   |  136 +
 .../ValidatorRule/StudyDesignHasMgedType.pm        |  166 +
 .../StudyHasContactAndNameAndDescription.pm        |   62 +
 .../ValidatorRule/StudyHasDesignsAndFactors.pm     |   60 +
 .../Service/ValidatorRule/StudyNameNotInGus.pm     |   77 +
 lib/perl/RAD/MR_T/MageImport/ServiceFactory.pm     |  381 +
 .../RAD/MR_T/MageImport/Test/Odom_ChIP_test.xml    | 8520 ++++++++++++++++++++
 .../RAD/MR_T/MageImport/Test/TestAcquisitionVO.pm  |  112 +
 .../RAD/MR_T/MageImport/Test/TestAffiliationVO.pm  |   93 +
 .../MR_T/MageImport/Test/TestAssayHasContact.pm    |   53 +
 .../Test/TestAssayHasLexAndNoHangingLex.pm         |   62 +
 lib/perl/RAD/MR_T/MageImport/Test/TestAssayVO.pm   |  113 +
 .../Test/TestBioMaterialMeasurementVO.pm           |   76 +
 .../RAD/MR_T/MageImport/Test/TestBioMaterialVO.pm  |  118 +
 .../RAD/MR_T/MageImport/Test/TestConfigChecking.pm |   75 +
 lib/perl/RAD/MR_T/MageImport/Test/TestDocRoot.pm   |  183 +
 .../RAD/MR_T/MageImport/Test/TestExceptions.pm     |   65 +
 .../MR_T/MageImport/Test/TestExternalDatabaseVO.pm |   56 +
 .../RAD/MR_T/MageImport/Test/TestMageTabReader.pm  |  805 ++
 .../RAD/MR_T/MageImport/Test/TestMagemlReader.pm   |   91 +
 lib/perl/RAD/MR_T/MageImport/Test/TestMain.pm      |  167 +
 .../MageImport/Test/TestMakeTreatmentSeries.pm     |   76 +
 ...stMergeTreatmentSeriesForSpeciedBiomatAction.pm |   63 +
 .../MR_T/MageImport/Test/TestNamingAcqAndQuan.pm   |   44 +
 .../MageImport/Test/TestNoHangingBioMaterials.pm   |   63 +
 .../MR_T/MageImport/Test/TestOntologyEntryVO.pm    |   54 +
 .../MR_T/MageImport/Test/TestParameterValueVO.pm   |   43 +
 lib/perl/RAD/MR_T/MageImport/Test/TestPersonVO.pm  |  107 +
 .../RAD/MR_T/MageImport/Test/TestProcessModule.pm  |  105 +
 .../MageImport/Test/TestProtocolHasMgedType.pm     |   72 +
 .../MR_T/MageImport/Test/TestProtocolParamVO.pm    |   88 +
 .../RAD/MR_T/MageImport/Test/TestProtocolVO.pm     |  168 +
 .../MR_T/MageImport/Test/TestQuantificationVO.pm   |   74 +
 .../RAD/MR_T/MageImport/Test/TestServiceFactory.pm |   62 +
 .../Test/TestSetQuanProtocolToGusProtocol.pm       |   48 +
 .../RAD/MR_T/MageImport/Test/TestSqlReporter.pm    |   93 +
 lib/perl/RAD/MR_T/MageImport/Test/TestSqlTester.pm |  156 +
 .../MageImport/Test/TestStudyDesignHasMgedType.pm  |   82 +
 .../RAD/MR_T/MageImport/Test/TestStudyDesignVO.pm  |   83 +
 .../RAD/MR_T/MageImport/Test/TestStudyFactorVO.pm  |   55 +
 .../MR_T/MageImport/Test/TestStudyNameNotInGus.pm  |   80 +
 lib/perl/RAD/MR_T/MageImport/Test/TestStudyVO.pm   |   76 +
 .../RAD/MR_T/MageImport/Test/TestTreatmentVO.pm    |  127 +
 lib/perl/RAD/MR_T/MageImport/Test/TestUtil.pm      |   91 +
 lib/perl/RAD/MR_T/MageImport/Test/TestValidator.pm |  115 +
 .../RAD/MR_T/MageImport/Test/TestValidatorRule.pm  |  111 +
 .../MR_T/MageImport/Test/TestVoGusTranslator.pm    | 1431 ++++
 .../RAD/MR_T/MageImport/Test/TestVoToMageTab.pm    |   60 +
 lib/perl/RAD/MR_T/MageImport/Test/VOTestSuite.pm   |   48 +
 lib/perl/RAD/MR_T/MageImport/Test/config.xml       |   44 +
 .../MR_T/MageImport/Test/config_VoToMageTab.xml    |   23 +
 .../RAD/MR_T/MageImport/Test/config_forOdom.xml    |   48 +
 .../MR_T/MageImport/Test/config_fortestmain.xml    |   45 +
 .../RAD/MR_T/MageImport/Test/config_not_good.xml   |   27 +
 .../RAD/MR_T/MageImport/Test/config_not_good2.xml  |   27 +
 .../MR_T/MageImport/Test/config_testMageTab.xml    |   22 +
 .../RAD/MR_T/MageImport/Test/mageTabExample.tab    |   51 +
 lib/perl/RAD/MR_T/MageImport/Test/sqlReporter.txt  |   92 +
 .../MR_T/MageImport/Test/sqlTest_fortestmain.txt   |   28 +
 lib/perl/RAD/MR_T/MageImport/Test/test.xml         | 1437 ++++
 lib/perl/RAD/MR_T/MageImport/Test/toxoTemplate.tab |   48 +
 lib/perl/RAD/MR_T/MageImport/Util.pm               |  160 +
 lib/perl/RAD/MR_T/MageImport/VO/AcquisitionVO.pm   |  139 +
 lib/perl/RAD/MR_T/MageImport/VO/AffiliationVO.pm   |   18 +
 lib/perl/RAD/MR_T/MageImport/VO/AssayVO.pm         |  158 +
 .../MR_T/MageImport/VO/BioMaterialMeasurementVO.pm |   51 +
 lib/perl/RAD/MR_T/MageImport/VO/BioMaterialVO.pm   |   83 +
 lib/perl/RAD/MR_T/MageImport/VO/ContactVO.pm       |   50 +
 lib/perl/RAD/MR_T/MageImport/VO/DocRoot.pm         |  224 +
 .../RAD/MR_T/MageImport/VO/ExternalDatabaseVO.pm   |   50 +
 lib/perl/RAD/MR_T/MageImport/VO/FactorValueVO.pm   |   51 +
 lib/perl/RAD/MR_T/MageImport/VO/OntologyEntryVO.pm |   51 +
 .../RAD/MR_T/MageImport/VO/ParameterValueVO.pm     |   51 +
 lib/perl/RAD/MR_T/MageImport/VO/PersonVO.pm        |   42 +
 lib/perl/RAD/MR_T/MageImport/VO/ProcessVO.pm       |   95 +
 lib/perl/RAD/MR_T/MageImport/VO/ProtocolParamVO.pm |   68 +
 lib/perl/RAD/MR_T/MageImport/VO/ProtocolVO.pm      |  123 +
 .../RAD/MR_T/MageImport/VO/QuantificationVO.pm     |   93 +
 lib/perl/RAD/MR_T/MageImport/VO/StudyDesignVO.pm   |   87 +
 lib/perl/RAD/MR_T/MageImport/VO/StudyFactorVO.pm   |   43 +
 lib/perl/RAD/MR_T/MageImport/VO/StudyVO.pm         |   83 +
 lib/perl/RAD/MR_T/MageImport/VO/TreatmentVO.pm     |   88 +
 lib/perl/RAD/MR_T/MageImport/VO/VOBase.pm          |  114 +
 lib/xml/mage.xslt                                  |   28 +
 132 files changed, 27580 insertions(+), 108 deletions(-)

diff --git a/README b/README
new file mode 100644
index 0000000..d293652
--- /dev/null
+++ b/README
@@ -0,0 +1,62 @@
+NAME
+    mage2tab - a MAGE-MLv1 to MAGE-TAB converter in perl
+    mage2graph - a GraphViz-based mage data visulaization tool in perl
+
+Release Date
+    June. 3, 2007
+
+Release version
+    0.9
+
+DESCRIPTION
+    This tool-kit is part of MR_T, a framework for import or export various of 
+    MAGE documents (MAGE-MLv1, MAGE-TAB, SOFT, MINiML) from or into databases 
+    like GUS (the Genomics Unified Schema, www.gusdb.org). 
+
+    mage2tab will convert the MAGE-ML file to MAGE-TAB format (http://www.mged.org/Workgroups/
+    MAGE/mage.html#mage-tab) with a few limitations in this release: 
+    
+    1) It can only display FactorValue if it is ontology value, it shows as "undef" if it is 
+       Measurement
+    2) The "DesignElement_package" needs to be removed from MAGE-ML, since the xml reader by 
+       default will read the design elements, which will slow down the parser. We provide a 
+       xslt script to remove it, see "RUN IT" section for details.
+   
+   We will fix those issues in the next release.
+
+
+PREREQUISITES
+   Bio::MAGE, Error.pm are required. Test::Unit is optional if you want to run the unit test scripts
+   inside the distributed package. And the MAGE-ML file has to be well formed.
+
+   mage2graph will generate Dot file. GraphViz is needed if you want to generate graph from dot file.
+
+INSTALLATION  
+   gunzip mage2tab-v0.9.tar.gz
+   tar -xvf mage2tab-v0.9.tar
+  
+   It will untar the files to the following directories:
+     lib/
+        perl/
+            RAD/
+               MR_T/
+        xml/
+           mage.xslt
+     bin/
+        mage2tab.pl
+	mage2graph.pl
+  
+    
+RUN IT
+   Suppose the the mage-ml file name is test.xml
+   1) Add the RAD/MR_T location in full path to your PERL5LIB path 
+   2) If necessary, Run "xsltproc mage.xslt test.xml", 
+   3) Use the mage2tab.pl to run it like this:
+      perl mage2tab.pl --mageml test.xml 
+
+
+AUTHORS
+    Junmin Liu (junmin at pcbi.upenn.edu), 
+    John Brestelli (jbrestel at pcbi.upenn.edu)
+    Copyright (c) 2007 The Computational Biology and Informatics Laboratory (CBIL)
+     at the University of Pennsylvania. All rights reserved.
diff --git a/bin/mage-checker.pl b/bin/mage-checker.pl
new file mode 100644
index 0000000..479aee3
--- /dev/null
+++ b/bin/mage-checker.pl
@@ -0,0 +1,95 @@
+#!/usr/bin/perl
+use strict;
+use FileHandle;
+use Getopt::Long;
+use Error qw(:try);
+
+use RAD::MR_T::MageImport::ServiceFactory;
+
+my($help, $magedoc);
+
+&GetOptions("help!" => \$help,
+            "usage!" => \$help,
+            "h!" => \$help,
+            "magedoc=s" => \$magedoc,
+           );
+
+&usage() if ($help);
+unless ($magedoc ) {
+  print STDERR "REQUIRED: --magedoc=$magedoc (the file must have extension in either .tab for MAGE-Tab or .xml for MAGE-ML).\n";
+  &usage() ;
+}
+
+unless ($magedoc =~ /.*\.tab$/ || $magedoc =~ /.*\.xml$/){
+  print STDERR "Wrong file extension, the file must have extension in either .tab for MAGE-Tab or .xml for MAGE-ML.\n";
+  &usage() ;
+}
+
+
+try {
+  my $config = {
+		'serviceDeco' => {
+				  'MergeTreatmentSeriesForSpeciedBiomatAction' => {
+										   'baseClass' => 'RAD::MR_T::MageImport::Service::ProcessModule::MergeTreatmentSeries',
+										   'property' => {'termStr' => {'value' => 'purify'} }
+										  }
+				 },
+		'service' => {
+			      'reader' => {'class' => 'RAD::MR_T::MageImport::Service::Reader::MagemlReader'},
+			      'validator' => {
+					      'decorProperties' => {
+								    'rules' => {
+										  'value' => 'StudyNameNotInGus,StudyHasContactAndNameAndDescription,StudyHasDesignsAndFactors,StudyDesignHasMgedType,CheckExistingGusProtocols,ProtocolHasMgedType,AssayHasContact,AssayHasLexAndNoHangingLex,NoHangingBioMaterials,AssayHasFactorValue,CheckDataFiles'
+										 }
+								   },
+					      'baseClass' => 'RAD::MR_T::MageImport::Service::Validator'
+					     },
+			     },
+		'nolog' =>1
+	       };
+
+  if ($magedoc =~ /.*\.tab$/){
+    $config->{service}->{reader}->{class} = 'RAD::MR_T::MageImport::Service::Reader::MageTabReader';
+    print STDERR "Using MAGE-Tab reader\n";
+  }
+
+  if ($magedoc =~ /.*\.xml$/){
+    $config->{service}->{reader}->{class} = 'RAD::MR_T::MageImport::Service::Reader::MagemlReader';
+    print STDERR "Using MAGE-ML reader\n";
+  }
+
+  my $serviceFactory = RAD::MR_T::MageImport::ServiceFactory->new($config);
+  my $reader =  $serviceFactory->getServiceByName('reader');
+
+  $reader->setFile($magedoc);
+  my $docRoot = $reader->parse();
+
+  my $f = $magedoc."-validation.txt";
+  open(STDOUT, ">$f") || die "Can't redirect stdout";
+  if(my $processor = $serviceFactory->getServiceByName('validator')) {
+    try{
+      $processor->check($docRoot);
+    }
+      catch Error with {
+	my $e = shift;
+	print "Error:", $e->text(), "\n";
+	$processor->setPassed(0);
+      };
+    print STDERR "Validations Failed\n" unless $processor->isPassed;
+  }
+  close(STDOUT);
+
+
+  print STDERR "Done. Output to file $f\n";
+
+} catch Error with {
+  my $e = shift;
+  print $e->stacktrace();
+  $e->throw();
+};
+
+sub usage {
+  print STDERR "USAGE:\nmage-checker.pl  --magedoc=$magedoc (the file must have extension in either .tab for MAGE-Tab or .xml for MAGE-ML).\n";
+  exit(0);
+}
+
diff --git a/bin/mage2graph.pl b/bin/mage2graph.pl
new file mode 100644
index 0000000..bed5810
--- /dev/null
+++ b/bin/mage2graph.pl
@@ -0,0 +1,94 @@
+#!/usr/bin/perl
+use strict;
+use FileHandle;
+use Getopt::Long;
+use Error qw(:try);
+
+use RAD::MR_T::MageImport::ServiceFactory;
+
+my($help, $magedoc);
+
+&GetOptions("help!" => \$help,
+            "usage!" => \$help,
+            "h!" => \$help,
+            "magedoc=s" => \$magedoc,
+           );
+
+&usage() if ($help);
+unless ($magedoc ) {
+
+  print STDERR "REQUIRED: --magedoc=$magedoc (the file must have extension in one of them: .idf for MAGE-Tab (if MAGE-Tab is seprated into idf and sdrf files),  .tab|.xls for MAGE-Tab (if MAGE-Tab is a single file) or .xml for MAGE-ML).\n";
+  &usage() ;
+}
+
+unless ($magedoc =~ /.*\.idf$/ || $magedoc =~ /.*\.tab$/ || $magedoc =~ /\.xls$/ || $magedoc =~ /.*\.xml$/){
+  print STDERR "Wrong file extension, the file must have extension in one of them: .idf for MAGE-Tab (if MAGE-Tab is seprated into idf and sdrf files),  .tab|.xls for MAGE-Tab (if MAGE-Tab is a single file) or .xml for MAGE-ML.\n";
+
+  &usage() ;
+}
+
+
+try {
+  my $config = {
+		'serviceDeco' => {
+				  'MergeTreatmentSeriesForSpeciedBiomatAction' => {
+										   'baseClass' => 'RAD::MR_T::MageImport::Service::ProcessModule::MergeTreatmentSeries',
+										   'property' => {'termStr' => {'value' => 'purify'} }
+										  }
+				 },
+		'service' => {
+			      'reader' => {'class' => 'RAD::MR_T::MageImport::Service::Reader::MageTabReader'},
+			      'processor' => {
+					      'decorProperties' => {
+								    'modules' => {
+										  'value' => 'NamingBioSource,MergeTreatmentSeriesForSpeciedBiomatAction'
+										 }
+								   },
+					      'baseClass' => 'RAD::MR_T::MageImport::Service::Processor'
+					     },
+			      'translator' => {
+					       'class' => 'RAD::MR_T::MageImport::Service::Translator::VoToDot'
+					      }
+			     },
+		'nolog' =>1
+	       };
+
+  if ($magedoc =~ /.*\.tab$/ || $magedoc =~ /.*\.idf$/ || $magedoc =~ /\.xls/){
+    $config->{service}->{reader}->{class} = 'RAD::MR_T::MageImport::Service::Reader::MageTabReader';
+    print STDERR "Using MAGE-Tab reader\n";
+  }
+
+  if ($magedoc =~ /.*\.xml$/){
+    $config->{service}->{reader}->{class} = 'RAD::MR_T::MageImport::Service::Reader::MagemlReader';
+    print STDERR "Using MAGE-ML reader\n";
+  }
+
+  my $serviceFactory = RAD::MR_T::MageImport::ServiceFactory->new($config);
+  my $reader =  $serviceFactory->getServiceByName('reader');
+
+  $reader->setFile($magedoc);
+  my $docRoot = $reader->parse();
+
+  if(my $processor = $serviceFactory->getServiceByName('processor')) {
+    $processor->process($docRoot);
+  }
+
+  my $translator = $serviceFactory->getServiceByName('translator');
+
+  my $f = $magedoc.".dot";
+  open(STDOUT, ">$f") || die "Can't redirect stdout";
+  $translator->mapAll($docRoot);
+  close(STDOUT);
+  print STDERR "Done. Output to file $f\n";
+
+} catch Error with {
+  my $e = shift;
+  print $e->stacktrace();
+  $e->throw();
+};
+
+sub usage {
+  print STDERR "USAGE:\nmage2graph.pl  --magedoc=$magedoc (the file must have extension in either .tab for MAGE-Tab or .xml for MAGE-ML).\n";
+  exit(0);
+}
+
diff --git a/bin/mage2tab.pl b/bin/mage2tab.pl
new file mode 100644
index 0000000..38145fa
--- /dev/null
+++ b/bin/mage2tab.pl
@@ -0,0 +1,91 @@
+#!/usr/bin/perl
+use strict;
+use FileHandle;
+use Getopt::Long;
+use Error qw(:try);
+
+use RAD::MR_T::MageImport::ServiceFactory;
+
+my($help, $mageml);
+
+&GetOptions("help!" => \$help,
+            "usage!" => \$help,
+            "h!" => \$help,
+            "mageml=s" => \$mageml,
+           );
+
+&usage() if ($help);
+unless ($mageml ) {
+  print STDERR "REQUIRED: --mageml=$mageml.\n";
+  &usage() ;
+}
+
+
+try {
+  my $config = {
+		'serviceDeco' => {
+				  'MergeTreatmentSeriesForSpeciedBiomatAction' => {
+										   'baseClass' => 'RAD::MR_T::MageImport::Service::ProcessModule::MergeTreatmentSeries',
+										   'property' => {'termStr' => {'value' => 'purify'} }
+										  }
+				 },
+		'service' => {
+			      'reader' => {'class' => 'RAD::MR_T::MageImport::Service::Reader::MagemlReader'},
+			      'processor' => {
+					      'decorProperties' => {
+								    'modules' => {
+										  'value' => 'NamingBioSource,MergeTreatmentSeriesForSpeciedBiomatAction'
+										 }
+								   },
+					      'baseClass' => 'RAD::MR_T::MageImport::Service::Processor'
+					     },
+			      'translator' => {
+					       'class' => 'RAD::MR_T::MageImport::Service::Translator::VoToMageTab'
+					      }
+			     },
+		'nolog' =>1
+	       };
+
+  if ($mageml =~ /.*\.tab$/ || $mageml =~ /.*\.idf$/ || $mageml =~ /\.xls/){
+    $config->{service}->{reader}->{class} = 'RAD::MR_T::MageImport::Service::Reader::MageTabReader';
+    print STDERR "Using MAGE-Tab reader\n";
+  }
+
+  my $serviceFactory = RAD::MR_T::MageImport::ServiceFactory->new($config);
+
+  my $reader =  $serviceFactory->getServiceByName('reader');
+
+  $reader->setFile($mageml);
+  my $docRoot = $reader->parse();
+
+  if(my $processor = $serviceFactory->getServiceByName('processor')) {
+    $processor->process($docRoot);
+  }
+
+  my $translator = $serviceFactory->getServiceByName('translator');
+
+  my $f = $mageml.".idf";
+  open(STDOUT, ">$f") || die "Can't redirect stdout";
+  print STDOUT "SDRF File\t$mageml".".sdrf\n";
+ # $translator->mapAll($docRoot);
+  $translator->writeIDF($docRoot);
+  close(STDOUT);
+
+  $f = $mageml.".sdrf";
+  open(STDOUT, ">$f") || die "Can't redirect stdout";
+  $translator->writeSDRF($docRoot);
+  close(STDOUT);
+
+  print STDERR "Done. Output to file $mageml.idf and $mageml.sdrf\n";
+
+} catch Error with {
+  my $e = shift;
+  print $e->stacktrace();
+  $e->throw();
+};
+
+sub usage {
+  print STDERR "USAGE:\nmage2tab.pl  --mageml='MAGE-ML file to be converted'\n";
+  exit(0);
+}
+
diff --git a/config/config_VoToMageTab.xml b/config/config_VoToMageTab.xml
new file mode 100644
index 0000000..348c0f3
--- /dev/null
+++ b/config/config_VoToMageTab.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<plugin>
+
+<service id="reader" class="RAD::MR_T::MageImport::Service::Reader::MagemlReader">
+  <!--property name="magemlfile" value="/home/junmin/gus35/project_home/RAD/MR_T/lib/perl/MageImport/Test/Odom_ChIP_test.xml"/-->
+  <!--property name="magemlfile" value="/home/junmin/gus35/project_home/RAD/MR_T/lib/perl/MageImport/Test/E-BUGS-39_test.xml"/-->
+  <!--property name="magemlfile" value="/home/junmin/gus35/project_home/RAD/MR_T/lib/perl/MageImport/Test/test.xml"/-->
+  <!--property name="two-dye" value="0"/-->
+</service>
+
+<service id="translator" class="RAD::MR_T::MageImport::Service::Translator::VoToMageTab">
+</service>
+
+<service id="processor" baseClass="RAD::MR_T::MageImport::Service::Processor">
+  <decorProperties name="modules" value="NamingBioSource,MergeTreatmentSeriesForSpeciedBiomatAction"/>
+</service>
+
+<serviceDeco id="MergeTreatmentSeriesForSpeciedBiomatAction" baseClass="RAD::MR_T::MageImport::Service::ProcessModule::MergeTreatmentSeries">
+  <property name="termStr" value="purify"/>
+</serviceDeco>
+
+</plugin>
+
diff --git a/config/log4perl.config b/config/log4perl.config
new file mode 100644
index 0000000..5036158
--- /dev/null
+++ b/config/log4perl.config
@@ -0,0 +1,46 @@
+#this is a log4perl configuration file
+#warning: change it may have system wide effect! 
+#logging levels: low to high
+#DEBUG
+#INFO
+#WARN
+#ERROR
+#FATAL
+
+
+ log4perl.logger=FATAL, Screen
+ log4perl.logger.RAD.MR_T.MageImport=INFO, MLog
+
+ log4perl.logger.RAD.MR_T.MageImport.Service=DEBUG, SLog
+ log4perl.logger.RAD.MR_T.MageImport.VO=DEBUG, VLog
+    
+ log4perl.appender.Screen=Log::Dispatch::Screen
+ log4perl.appender.Screen.stderr=0
+#this will make sure only FATAL log will pop up on STD
+ log4perl.appender.Screen.Threshold=FATAL
+ log4perl.appender.Screen.layout=Log::Log4perl::Layout::SimpleLayout
+   
+ log4perl.appender.MLog=Log::Dispatch::File
+ log4perl.appender.MLog.filename=mageImport.log
+ log4perl.appender.MLog.mode=clobber
+ log4perl.appender.MLog.Threshold=INFO
+ log4perl.appender.MLog.layout=Log::Log4perl::Layout::SimpleLayout
+
+#user defined the pattern
+#%d stands for date and time, %p for priority, %F for the source file name, 
+#%M for the method executed, %m for the log message and %n for a newline
+ log4perl.appender.MLog.layout.ConversionPattern=%d %p> %F{1}:%L %M - %m%n
+
+
+ log4perl.appender.SLog=Log::Dispatch::File
+ log4perl.appender.SLog.filename=service.log
+ log4perl.appender.SLog.mode=clobber
+ log4perl.appender.SLog.layout=Log::Log4perl::Layout::PatternLayout
+ log4perl.appender.SLog.layout.ConversionPattern=%d %p> %F{1}:%L %M - %m%n
+
+
+ log4perl.appender.VLog=Log::Dispatch::File
+ log4perl.appender.VLog.filename=vo.log
+# log4perl.appender.VLog.mode=append
+ log4perl.appender.VLog.layout=Log::Log4perl::Layout::PatternLayout
+ log4perl.appender.VLog.layout.ConversionPattern=%d %p> %F{1}:%L %M - %m%n
diff --git a/debian/changelog b/debian/changelog
deleted file mode 100644
index cf655af..0000000
--- a/debian/changelog
+++ /dev/null
@@ -1,6 +0,0 @@
-mage2tab (0.9-1) UNRELEASED; urgency=low
-
-  * Initial release (Closes: #476209)
-
- -- Charles Plessy <plessy at debian.org>  Sun, 27 Apr 2008 17:02:06 +0900
-
diff --git a/debian/compat b/debian/compat
deleted file mode 100644
index f599e28..0000000
--- a/debian/compat
+++ /dev/null
@@ -1 +0,0 @@
-10
diff --git a/debian/control b/debian/control
deleted file mode 100644
index a565004..0000000
--- a/debian/control
+++ /dev/null
@@ -1,35 +0,0 @@
-Source: mage2tab
-Maintainer: Debian Med Packaging Team <debian-med-packaging at lists.alioth.debian.org>
-Uploaders: Charles Plessy <plessy at debian.org>
-Section: science
-Priority: optional
-Build-Depends: debhelper (>= 10)
-Standards-Version: 3.9.8
-Vcs-Browser: https://anonscm.debian.org/viewvc/debian-med/trunk/packages/mage2tab/trunk/
-Vcs-Svn: svn://anonscm.debian.org/debian-med/trunk/packages/mage2tab/trunk/
-Homepage: http://sourceforge.net/projects/tab2mage/
-
-Package: mage2tab
-Architecture: all
-Section: perl
-Depends: ${misc:Depends},
-         ${perl:Depends},
-         libbio-mage-perl,
-         libbio-mage-utils-perl,
-         liblog-log4perl-perl,
-         libxml-simple-perl
-Recommends: libdbi-perl,
-            libwww-perl
-Suggests: libdbd-oracle-perl,
-          libgus-perl,
-          graphviz
-Description: MAGE-MLv1 converter and visualiser
- This tool-kit is part of MR_T, a framework for import or export various of
- MAGE (MicroArray Gene Expression) documents (MAGE-MLv1, MAGE-TAB, SOFT,
- MINiML) from or into databases like GUS (the Genomics Unified Schema,
- www.gusdb.org). 
- .
- This package provides the following programs:
-  mage2tab     — MAGE-MLv1 to MAGE-TAB converter
-  mage2graph   — GraphViz-based mage data visualisation tool
-  mage-checker — Validation tool
diff --git a/debian/copyright b/debian/copyright
deleted file mode 100644
index b7510f1..0000000
--- a/debian/copyright
+++ /dev/null
@@ -1,49 +0,0 @@
-Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
-Debianized-By: Charles Plessy <charles-debian-nospam at plessy.org>
-Debianized-Date: Mon, 14 Apr 2008 10:39:30 +0900
-Source: http://sourceforge.net/projects/tab2mage/
-Upstream-Contact: Junmin Liu (junmin at pcbi.upenn.edu), 
-                   John Brestelli (jbrestel at pcbi.upenn.edu)
-
-Files: *
-Copyrignt: © 2007 The Computational Biology and Informatics Laboratory (CBIL)
-                  at the University of Pennsylvania. All rights reserved.
-License: CBIL-1.0
- The CBIL Software and Data License, Version 1.0
- .
- Redistribution and use of software in source and binary forms or of data, with
- or without modification, are permitted provided that the following conditions
- are met:
- .
-   1. Redistributions of source code, binary software or data alone must retain
-      the above copyright notice, this list of conditions and the following
-      disclaimer.
-   2. Redistributions as part of a package or product must reproduce the above
-      copyright notice, this list of conditions and the following disclaimer in the
-      documentation and/or other materials provided with the distribution.
-   3. The end-user documentation included with the redistribution, if any, must
-      include the following acknowledgment: "This product includes software and/or
-      data developed by CBIL at the Center for Bioinformatics at the University of
-      Pennsylvania (http://www.pcbi.upenn.edu)." Alternately, this acknowledgment may
-      appear in the software or with the data itself, if and wherever such
-      third-party acknowledgments normally appear.
-   4. The names "CBIL" and "Penn Center for Bioinformatics" must not be used to
-      endorse or promote products derived from this software/data without prior
-      written permission.
- .
- THIS SOFTWARE/DATA IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
- WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
- EVENT SHALL CBIL OR THE PENN CENTER FOR BIOINFORMATICS BE LIABLE FOR ANY
- DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- SOFTWARE AND/OR DATA, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-Comment: This license is based on the open source license from the Apache Software
-           Foundation. 
-
-Files: debian/*
-Copyrignt: © 2008 Charles Plessy <charles-debian-nospam at plessy.org>
-License: same as mage2tab itself.
diff --git a/debian/docs b/debian/docs
deleted file mode 100644
index e845566..0000000
--- a/debian/docs
+++ /dev/null
@@ -1 +0,0 @@
-README
diff --git a/debian/install b/debian/install
deleted file mode 100644
index e5bed21..0000000
--- a/debian/install
+++ /dev/null
@@ -1,2 +0,0 @@
-lib/perl/RAD	/usr/share/perl5/
-lib/xml/mage.xslt	/usr/share/mage2tab/
diff --git a/debian/rules b/debian/rules
deleted file mode 100755
index 99975c4..0000000
--- a/debian/rules
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/make -f
-  
-%:
-	dh $@
-
-override_dh_install:
-	dh_install
-	for i in bin/*.pl ; \
-	do install -m 0755 $$i $(CURDIR)/debian/mage2tab/usr/bin/$$(basename $$i .pl) ; \
-	done
diff --git a/debian/source/format b/debian/source/format
deleted file mode 100644
index 163aaf8..0000000
--- a/debian/source/format
+++ /dev/null
@@ -1 +0,0 @@
-3.0 (quilt)
diff --git a/debian/watch b/debian/watch
deleted file mode 100644
index 9fa1319..0000000
--- a/debian/watch
+++ /dev/null
@@ -1,3 +0,0 @@
-version=4
-
-http://sf.net/tab2mage/mage2tab-v(\d[\d\.]+)\.(?:tgz|tbz|txz|(?:tar\.(?:gz|bz2|xz)))
diff --git a/lib/perl/RAD/MR_T/MageImport/Loggable.pm b/lib/perl/RAD/MR_T/MageImport/Loggable.pm
new file mode 100644
index 0000000..c1494de
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Loggable.pm
@@ -0,0 +1,17 @@
+package RAD::MR_T::MageImport::Loggable;
+
+=head1 loggable abstract class
+
+Description : this is an abstract class, every service class should be loggable
+
+=over
+
+=item abstract method
+
+=cut
+
+sub setLogger {$_[0]->{_logger} = $_[1]}
+
+sub getLogger {$_[0]->{_logger}}
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/MageImportError.pm b/lib/perl/RAD/MR_T/MageImport/MageImportError.pm
new file mode 100644
index 0000000..ee983a7
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/MageImportError.pm
@@ -0,0 +1,215 @@
+package RAD::MR_T::MageImport::MageImportError;
+use base qw(Error);
+
+#################################################
+# $Revision: 1 $ $Date: 2005-10-07 13:42:38 -0400 (Fri, 07 Oct 2005) $ $Author: jbrestel $
+#################################################
+
+use overload ('""' => 'stringify');
+
+=head1 RAD::MR_T::MageImport::MageImportError
+
+this is MageImport exception package
+
+=cut
+
+=item new() construct
+
+to-dos: need to generalize the contruct, some of more specific argument should go to sublasses
+
+=cut
+
+
+sub new {
+  my ($self, $m, $expected, $actual) = @_;
+
+  my $name = $self;
+  $name =~ s/^.+:://;
+
+  my $text = "**** $name:  $m\n\n";
+
+  if($expected) {
+     $text = $text . "(Expected=$expected,Found=$actual)\n\n";
+   }
+
+  my @args = ();
+
+  local $Error::Depth = $Error::Depth + 1;
+  local $Error::Debug = 1;  # Enables storing of stacktrace
+
+  $self->SUPER::new(-text => $text, @args);
+}
+1;
+
+package RAD::MR_T::MageImport::ReaderException;
+use base qw(RAD::MR_T::MageImport::MageImportError);
+1;
+
+package RAD::MR_T::MageImport::ReaderException::FileError;
+use base qw(RAD::MR_T::MageImport::ReaderException);
+1;
+
+package RAD::MR_T::MageImport::ReporterException;
+use base qw(RAD::MR_T::MageImport::MageImportError);
+1;
+
+package RAD::MR_T::MageImport::ReporterException::SqlError;
+use base qw(RAD::MR_T::MageImport::ReporterException);
+1;
+package RAD::MR_T::MageImport::ReporterException::DefaultDbNotFound;
+use base qw(RAD::MR_T::MageImport::ReporterException);
+1;
+package RAD::MR_T::MageImport::ReporterException::DefaultAlgoInvoIdNotFound;
+use base qw(RAD::MR_T::MageImport::ReporterException);
+1;
+
+package RAD::MR_T::MageImport::TesterException;
+use base qw(RAD::MR_T::MageImport::MageImportError);
+1;
+
+package RAD::MR_T::MageImport::TesterException::SqlError;
+use base qw(RAD::MR_T::MageImport::TesterException);
+1;
+package RAD::MR_T::MageImport::TesterException::DefaultDbNotFound;
+use base qw(RAD::MR_T::MageImport::TesterException);
+1;
+package RAD::MR_T::MageImport::TesterException::DefaultAlgoInvoIdNotFound;
+use base qw(RAD::MR_T::MageImport::TesterException);
+1;
+package RAD::MR_T::MageImport::VOException;
+use base qw(RAD::MR_T::MageImport::MageImportError);
+1;
+package RAD::MR_T::MageImport::VOException::ObjectTypeError;
+use base qw(RAD::MR_T::MageImport::VOException);
+1;
+package RAD::MR_T::MageImport::VOException::ArgumentError;
+use base qw(RAD::MR_T::MageImport::VOException);
+1;
+
+
+package RAD::MR_T::MageImport::ObjectMapperException;
+use base qw(RAD::MR_T::MageImport::MageImportError);
+1;
+package RAD::MR_T::MageImport::ObjectMapperException::ImproperVoObject;
+use base qw(RAD::MR_T::MageImport::ObjectMapperException);
+1;
+package RAD::MR_T::MageImport::ObjectMapperException::RetrieveFromDbError;
+use base qw(RAD::MR_T::MageImport::ObjectMapperException);
+1;
+package RAD::MR_T::MageImport::ObjectMapperException::NonUniqueNameError;
+use base qw(RAD::MR_T::MageImport::ObjectMapperException);
+1;
+
+package RAD::MR_T::MageImport::ObjectMapperException::RetrieveFromDbError::MultipleRowsReturned;
+use base qw(RAD::MR_T::MageImport::ObjectMapperException::RetrieveFromDbError);
+1;
+
+
+package RAD::MR_T::MageImport::ServiceFactoryException;
+use base qw(RAD::MR_T::MageImport::MageImportError);
+1;
+package RAD::MR_T::MageImport::ServiceFactoryException::ReaderNotCreatedError;
+use base qw(RAD::MR_T::MageImport::ServiceFactoryException);
+1;
+package RAD::MR_T::MageImport::ServiceFactoryException::ValidatorNotCreatedError;
+use base qw(RAD::MR_T::MageImport::ServiceFactoryException);
+1;
+package RAD::MR_T::MageImport::ServiceFactoryException::ProcessorNotCreatedError;
+use base qw(RAD::MR_T::MageImport::ServiceFactoryException);
+1;
+package RAD::MR_T::MageImport::ServiceFactoryException::TesterNotCreatedError;
+use base qw(RAD::MR_T::MageImport::ServiceFactoryException);
+1;
+package RAD::MR_T::MageImport::ServiceFactoryException::ReporterNotCreatedError;
+use base qw(RAD::MR_T::MageImport::ServiceFactoryException);
+1;
+
+
+package RAD::MR_T::MageImport::ValidatorException;
+use base qw(RAD::MR_T::MageImport::MageImportError);
+1;
+package RAD::MR_T::MageImport::ValidatorException::UnNamedVOError;
+use base qw(RAD::MR_T::MageImport::ValidatorException);
+1;
+package RAD::MR_T::MageImport::ValidatorException::VONameNotUniqueError;
+use base qw(RAD::MR_T::MageImport::ValidatorException);
+1;
+
+=item RAD::MR_T::MageImport::MageImportObjectTypeError
+
+to be deprecated, replaced by RAD::MR_T::MageImport::VOException::ObjectTypeError
+
+=cut
+
+package RAD::MR_T::MageImport::MageImportObjectTypeError;
+use base qw(RAD::MR_T::MageImport::MageImportError);
+1;
+
+=item RAD::MR_T::MageImport::MageImportArgumentError
+
+to be deprecated, replaced by RAD::MR_T::MageImport::VOException::ArgumentError
+
+=cut
+
+package RAD::MR_T::MageImport::MageImportArgumentError;
+use base qw(RAD::MR_T::MageImport::MageImportError);
+1;
+
+=item RAD::MR_T::MageImport::MageImportOENotFoundError
+
+to be deprecated, replaced by RAD::MR_T::MageImport::ObjectMapperException::OENotFoundError
+
+=cut
+
+package RAD::MR_T::MageImport::MageImportOENotFoundError;
+use base qw(RAD::MR_T::MageImport::MageImportError);
+1;
+
+=item RAD::MR_T::MageImport::MageImportExtDbNotFoundError
+
+to be deprecated, replaced by RAD::MR_T::MageImport::ObjectMapperException::ExtDbNotFoundError
+
+=cut
+
+package RAD::MR_T::MageImport::MageImportExtDbNotFoundError;
+use base qw(RAD::MR_T::MageImport::MageImportError);
+1;
+
+=item RAD::MR_T::MageImport::MageImportReaderNotCreatedError
+
+to be deprecated, replaced by RAD::MR_T::MageImport::ServiceFactoryException::ReaderNotCreatedError
+
+=cut
+
+package RAD::MR_T::MageImport::MageImportReaderNotCreatedError;
+use base qw(RAD::MR_T::MageImport::MageImportError);
+
+=item RAD::MR_T::MageImport::MageImportValidatorNotCreatedError
+
+to be deprecated, replaced by RAD::MR_T::MageImport::ServiceFactoryException::ValidatorNotCreatedError
+
+=cut
+
+package RAD::MR_T::MageImport::MageImportValidatorNotCreatedError;
+use base qw(RAD::MR_T::MageImport::MageImportError);
+1;
+
+=item RAD::MR_T::MageImport::MageImportUnNamedVOError
+
+to be deprecated, replaced by RAD::MR_T::MageImport::ValidatorException::UnNamedVOError
+
+=cut
+
+package RAD::MR_T::MageImport::MageImportUnNamedVOError;
+use base qw(RAD::MR_T::MageImport::MageImportError);
+1;
+
+=item RAD::MR_T::MageImport::MageImportVONameNotUniqueError
+
+to be deprecated, replaced by RAD::MR_T::MageImport::ValidatorException::VONameNotUniqueError
+
+=cut
+
+package RAD::MR_T::MageImport::MageImportVONameNotUniqueError;
+use base qw(RAD::MR_T::MageImport::MageImportError);
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Service/AbstractProcessModule.pm b/lib/perl/RAD/MR_T/MageImport/Service/AbstractProcessModule.pm
new file mode 100644
index 0000000..0790063
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Service/AbstractProcessModule.pm
@@ -0,0 +1,23 @@
+package RAD::MR_T::MageImport::Service::AbstractProcessModule;
+
+# this is ProcessModule interface, a decorator interface
+
+use strict 'vars';
+
+use  RAD::MR_T::MageImport::Service::AbstractProcessor;
+
+use vars qw / @ISA / ;
+ at ISA = qw / RAD::MR_T::MageImport::Service::AbstractProcessor/;
+
+sub new {
+  my $class = shift;
+  my $arg = shift;
+  bless {_processor=>$arg}, $class;
+}
+
+sub process {}
+
+sub getProcessor  {$_[0]->{_processor}}
+sub setProcessor  {$_[0]->{_processor} = $_[1]}
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Service/AbstractProcessor.pm b/lib/perl/RAD/MR_T/MageImport/Service/AbstractProcessor.pm
new file mode 100644
index 0000000..542b536
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Service/AbstractProcessor.pm
@@ -0,0 +1,8 @@
+package RAD::MR_T::MageImport::Service::AbstractProcessor;
+
+# this is an interface
+use base qw(RAD::MR_T::MageImport::Loggable);
+
+sub process {}
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Service/AbstractReader.pm b/lib/perl/RAD/MR_T/MageImport/Service/AbstractReader.pm
new file mode 100644
index 0000000..b7a2e6d
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Service/AbstractReader.pm
@@ -0,0 +1,80 @@
+package RAD::MR_T::MageImport::Service::AbstractReader;
+
+#################################################
+# $Revision: 8341 $ $Date: 2005-10-07 13:42:38 -0400 (Fri, 07 Oct 2005) $ $Author: junmin $
+#################################################
+
+use strict 'vars';
+use Carp;
+use base qw(RAD::MR_T::MageImport::Loggable);
+
+=head1 AbstractReader
+
+Readers are a subclass of AbstractReader.  The Readers must implement the 'parse' method 
+
+=over 4
+
+=item C<new>
+
+B<Parameters:>
+
+$class: Caller which is the subclass of AbstractReader
+$file(scalar): The Reader only knows about one file
+
+=cut
+
+sub new {
+  my $class = shift;
+  croak "try to instantiate an abstract class AbstractReader" if ref($class) eq 'AbstractReader';
+
+  my $file = shift;
+
+  bless {_file => $file}, $class;
+}
+
+sub getFile {$_[0]->{_file}}
+
+sub setFile {$_[0]->{_file} = $_[1]}
+
+=item C<docRoot>
+
+Wrapper to call the parse method and require it returns the correct type of object.
+
+B<Return type:> C<RAD::MR_T::MageImport::VO::DocRoot> 
+
+=cut
+
+sub docRoot {
+  my ($self) = @_;
+
+  my $docRoot;
+  unless($docRoot = $self->{_doc_root}) {
+    $docRoot = $self->parse();
+  }
+
+  my $myName = ref($self);
+  my $docRootName = 'RAD::MR_T::MageImport::VO::DocRoot';
+
+  croak "$myName::parse did not return a $docRootName"  unless($docRoot->isa($docRootName));
+
+  return($docRoot);
+}
+
+
+=item C<parse>
+
+The parse method should not be called directly... use 'docRoot'
+
+B<Return type:> C<RAD::MR_T::MageImport::VO::DocRoot> 
+
+=back
+
+=cut
+
+sub parse { }
+
+
+1;
+
+
+
diff --git a/lib/perl/RAD/MR_T/MageImport/Service/AbstractReporter.pm b/lib/perl/RAD/MR_T/MageImport/Service/AbstractReporter.pm
new file mode 100644
index 0000000..403ff80
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Service/AbstractReporter.pm
@@ -0,0 +1,11 @@
+package RAD::MR_T::MageImport::Service::AbstractReporter;
+
+# this is an abstract class
+
+use base qw(RAD::MR_T::MageImport::Loggable);
+
+# return boolean
+
+sub report {return $_[0]->{success}}
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Service/AbstractTester.pm b/lib/perl/RAD/MR_T/MageImport/Service/AbstractTester.pm
new file mode 100644
index 0000000..a55c527
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Service/AbstractTester.pm
@@ -0,0 +1,11 @@
+package RAD::MR_T::MageImport::Service::AbstractTester;
+
+# this is an abstract class
+
+use base qw(RAD::MR_T::MageImport::Loggable);
+
+# return boolean
+
+sub test {return $_[0]->{success}}
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Service/AbstractTranslator.pm b/lib/perl/RAD/MR_T/MageImport/Service/AbstractTranslator.pm
new file mode 100644
index 0000000..4b20473
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Service/AbstractTranslator.pm
@@ -0,0 +1,38 @@
+package RAD::MR_T::MageImport::Service::AbstractTranslator;
+
+use strict 'vars';
+use base qw(RAD::MR_T::MageImport::Loggable);
+use RAD::MR_T::MageImport::MageImportError;
+
+=head1 AbstractTranslator
+
+Translators are a subclass of AbstractTranslator.  The Translators must implement 
+mapAll
+
+The result of mapAll is specific to the application.  Could return an XML object (mageml), 
+GUS object (GUS Loader), or write a file (mage tab)...
+
+=over 4
+
+=item C<new>
+
+B<Parameters:>
+
+$class: Caller which is the subclass of AbstractReader
+$docRoot(): The Reader only knows about one file
+
+=cut
+
+sub new {
+  my $class = shift;
+
+  if(ref($class) eq 'AbstractTranslator') {
+    RAD::MR_T::MageImport::MageImportError->
+        new("try to instantiate an abstract class AbstractTranslator")->throw();
+  }
+  bless {}, $class; 
+}
+
+sub mapAll { }
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Service/AbstractValidator.pm b/lib/perl/RAD/MR_T/MageImport/Service/AbstractValidator.pm
new file mode 100644
index 0000000..7b147b0
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Service/AbstractValidator.pm
@@ -0,0 +1,13 @@
+package RAD::MR_T::MageImport::Service::AbstractValidator;
+
+# this is an abstract class
+
+use base qw(RAD::MR_T::MageImport::Loggable);
+
+sub check {}
+
+my $passed = 1;
+
+sub isPassed {return $passed;}
+sub setPassed {$passed = $_[1];}
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Service/AbstractValidatorRule.pm b/lib/perl/RAD/MR_T/MageImport/Service/AbstractValidatorRule.pm
new file mode 100644
index 0000000..f1d7ff9
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Service/AbstractValidatorRule.pm
@@ -0,0 +1,45 @@
+package RAD::MR_T::MageImport::Service::AbstractValidatorRule;
+
+# this is ValidatorRule interface,a  decorator interface
+
+use strict 'vars';
+use Error qw(:try);
+
+use  RAD::MR_T::MageImport::Service::AbstractValidator;
+
+use vars qw / @ISA / ;
+ at ISA = qw / RAD::MR_T::MageImport::Service::AbstractValidator/;
+
+
+sub new {
+  my $class = shift;
+  my $arg = shift;
+  bless {_validator=>$arg}, $class;
+}
+
+sub mycheck {}
+
+sub check {
+ my ($self, $docRoot) = @_;
+ my $logger = $self->getLogger();
+
+ try{
+   $self->getValidator->check($docRoot);
+ }
+   catch Error with {
+     my $e = shift;
+     $logger->warn("Error:", $e->text());
+     $self->setPassed(0);
+   };
+
+ $logger->warn("\n******", ref($self),   "********");
+ $self->mycheck($docRoot);
+
+ return ref($self);
+}
+
+sub getValidator  {$_[0]->{_validator}}
+sub setValidator  {$_[0]->{_validator} = $_[1]}
+
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Service/ProcessModule/BlankModule.pm b/lib/perl/RAD/MR_T/MageImport/Service/ProcessModule/BlankModule.pm
new file mode 100644
index 0000000..12348b5
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Service/ProcessModule/BlankModule.pm
@@ -0,0 +1,25 @@
+package RAD::MR_T::MageImport::Service::ProcessModule::BlankModule;
+
+# this is blank module impl
+
+use strict 'vars';
+use Carp;
+
+use RAD::MR_T::MageImport::VO::DocRoot;
+use RAD::MR_T::MageImport::Service::AbstractProcessModule;
+
+use vars qw / @ISA / ;
+ at ISA = qw / RAD::MR_T::MageImport::Service::AbstractProcessModule/;
+
+sub process {
+ my ($self, $docRoot) = @_;
+ $self->getProcessor->process($docRoot);
+ $self->myProcess($docRoot);
+ return ref($self);
+}
+
+sub myProcess {
+  my ($self, $docRoot) = @_;
+  return 1;
+}
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Service/ProcessModule/MakeTreatmentSeries.pm b/lib/perl/RAD/MR_T/MageImport/Service/ProcessModule/MakeTreatmentSeries.pm
new file mode 100644
index 0000000..9e0df5f
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Service/ProcessModule/MakeTreatmentSeries.pm
@@ -0,0 +1,93 @@
+package RAD::MR_T::MageImport::Service::ProcessModule::MakeTreatmentSeries;
+
+# this is process module impl
+
+use strict 'vars';
+use Carp;
+use Data::Dumper;
+
+use RAD::MR_T::MageImport::VO::DocRoot;
+use RAD::MR_T::MageImport::Service::AbstractProcessModule;
+use RAD::MR_T::MageImport::VO::TreatmentVO;
+use RAD::MR_T::MageImport::VO::OntologyEntryVO;
+
+use vars qw / @ISA / ;
+ at ISA = qw / RAD::MR_T::MageImport::Service::AbstractProcessModule/;
+
+=head1 AddQuanProtocol Module
+
+=over
+
+=cut
+
+sub new {
+  my $self = shift()->SUPER::new(@_);
+  shift; 
+  $self->{termStr} = shift;
+  return $self;
+}
+
+sub process {
+ my ($self, $docRoot) = @_;
+ $self->getProcessor->process($docRoot);
+ $self->myProcess($docRoot);
+ return ref($self);
+}
+
+
+=item myProcess($docRoot)
+
+Description: MakeTreatmentSeries
+
+Side effect: only deal with TreatmentType which is specified_biomaterial_action
+             only make oe.categroy ComplexAction, for translator should retrieveFromDB based on value first
+
+=cut
+
+sub myProcess { 
+  my ($self, $docRoot) = @_;
+  foreach my $trt(@{$docRoot->getTreatmentVOs}){
+    if($trt->getTreatmentType->getValue eq "specified_biomaterial_action"){
+      my @terms = split(",", $self->getTermStr);
+      my $start = $trt->getOrderNum;
+      my $next = $start+ scalar(@terms);
+      my $outputBM = $trt->getOutputBM;
+#need reOrder the next trt series
+      foreach my $trt2(@{$docRoot->getTreatmentVOs}){
+	if($trt2->getOutputBM == $outputBM && $trt2->getOrderNum > $start){
+	  $trt2->setOrderNum($next);
+	  $next++;
+	}
+      }
+#then split into series
+      foreach my $term(@terms){
+	if($start == $trt->getOrderNum){
+	  $trt->setTreatmentType(RAD::MR_T::MageImport::VO::OntologyEntryVO->new({category=>"ComplexAction", 
+										  value=>$term
+										 })
+				);
+	}
+	else{
+	  my $trt = RAD::MR_T::MageImport::VO::TreatmentVO->new({
+								 orderNum=>$start,
+								 outputBM=>$trt->getOutputBM,
+								 inputBMMS=>$trt->getInputBMMS,
+								 protocol=>$trt->getProtocol,
+								 treatmentType=>RAD::MR_T::MageImport::VO::OntologyEntryVO->new({category=>"ComplexAction", 
+																 value=>$term
+																}),
+								 name=>$term
+								});
+	  $docRoot->addTreatmentVOs($trt);
+	}
+	$start++;
+      }
+    }#if(specified_biomaterial_action)
+  }
+}
+
+sub getTermStr{
+  my $self = shift;
+  return $self->{termStr};
+}
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Service/ProcessModule/MergeTreatmentSeriesForSpeciedBiomatAction.pm b/lib/perl/RAD/MR_T/MageImport/Service/ProcessModule/MergeTreatmentSeriesForSpeciedBiomatAction.pm
new file mode 100644
index 0000000..6ed595a
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Service/ProcessModule/MergeTreatmentSeriesForSpeciedBiomatAction.pm
@@ -0,0 +1,84 @@
+package RAD::MR_T::MageImport::Service::ProcessModule::MergeTreatmentSeriesForSpeciedBiomatAction;
+
+# this is process module impl
+
+use strict 'vars';
+use Carp;
+use Data::Dumper;
+
+use RAD::MR_T::MageImport::VO::DocRoot;
+use RAD::MR_T::MageImport::Service::AbstractProcessModule;
+use RAD::MR_T::MageImport::VO::TreatmentVO;
+use RAD::MR_T::MageImport::VO::OntologyEntryVO;
+
+use vars qw / @ISA / ;
+ at ISA = qw / RAD::MR_T::MageImport::Service::AbstractProcessModule/;
+
+=head1 AddQuanProtocol Module
+
+=over
+
+=cut
+
+sub new {
+  my $self = shift()->SUPER::new(@_);
+  shift; 
+  $self->{termStr} = shift;
+  return $self;
+}
+
+sub process {
+ my ($self, $docRoot) = @_;
+ $self->getProcessor->process($docRoot);
+ $self->myProcess($docRoot);
+ return ref($self);
+}
+
+
+=item myProcess($docRoot)
+
+Description: MakeTreatmentSeriesForSpeciedBiomatAction
+
+Side effect: only deal with TreatmentType which is specified_biomaterial_action
+             only make oe.categroy ComplexAction, for translator should retrieveFromDB based on value first
+
+=cut
+
+sub myProcess { 
+  my ($self, $docRoot) = @_;
+
+  my @newTreatments;
+
+  foreach my $trt(@{$docRoot->getTreatmentVOs}){
+    if($trt && $trt->getTreatmentType->getValue eq "specified_biomaterial_action"){
+      my $start = $trt->getOrderNum;
+      my $outputBM = $trt->getOutputBM;
+#need reOrder the next trt series
+ 
+     foreach my $trt2(@{$docRoot->getTreatmentVOs}){
+	if($trt2 && $trt2->getOutputBM == $outputBM && $trt2->getOrderNum != $start){
+	  $trt2 = undef;
+	}
+      }
+
+      $trt->setTreatmentType(RAD::MR_T::MageImport::VO::OntologyEntryVO->new({category=>"ComplexAction", 
+									      value=>$self->getTermStr,
+									     })
+			    );
+      $trt->setOrderNum(1);
+    }#if(specified_biomaterial_action)
+  }
+
+  foreach my $trt (@{$docRoot->getTreatmentVOs}) {
+    push(@newTreatments, $trt) if($trt);
+  }
+
+  $docRoot->treatmentVOs(\@newTreatments);
+
+}
+
+sub getTermStr{
+  my $self = shift;
+  return $self->{termStr};
+}
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Service/ProcessModule/NamingAcqAndQuan.pm b/lib/perl/RAD/MR_T/MageImport/Service/ProcessModule/NamingAcqAndQuan.pm
new file mode 100644
index 0000000..c978da9
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Service/ProcessModule/NamingAcqAndQuan.pm
@@ -0,0 +1,58 @@
+package RAD::MR_T::MageImport::Service::ProcessModule::NamingAcqAndQuan;
+
+# this is process module impl
+
+use strict 'vars';
+use Carp;
+
+use RAD::MR_T::MageImport::VO::DocRoot;
+use RAD::MR_T::MageImport::Service::AbstractProcessModule;
+
+use vars qw / @ISA / ;
+ at ISA = qw / RAD::MR_T::MageImport::Service::AbstractProcessModule/;
+
+=head1 NamingAcqAndQuan Module
+
+=over
+
+=cut
+
+sub process {
+ my ($self, $docRoot) = @_;
+ $self->getProcessor->process($docRoot);
+ $self->myProcess($docRoot);
+ return ref($self);
+}
+
+
+=item myProcess($docRoot)
+
+Description: naming acquisition and quantification according to assay name
+
+Side Effect: it only adjust the one of the channels
+
+=cut
+
+sub myProcess {
+  my ($self, $docRoot) = @_;
+  foreach my $assay(@{$docRoot->getAssayVOs}){
+    foreach my $acq(@{$assay->getAcquisitions}){
+      if($acq->getProtocolName){
+	$acq->setName($assay->getName."-".$acq->getProtocolName."-".$acq->getChannels->[0]->getValue);
+      }
+      else{
+	$acq->setName($assay->getName."-image acquisition-".$acq->getChannels->[0]->getValue);
+      }
+
+      foreach my $quan(@{$acq->getQuantifications}){
+	if($quan->getProtocolName){
+	  $quan->setName($assay->getName."-".$quan->getProtocolName."-".$acq->getChannels->[0]->getValue);
+	}
+	else{
+	  $quan->setName($assay->getName."-quantification-".$acq->getChannels->[0]->getValue);
+	}
+      }
+    }
+  }
+}
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Service/ProcessModule/NamingBioSource.pm b/lib/perl/RAD/MR_T/MageImport/Service/ProcessModule/NamingBioSource.pm
new file mode 100644
index 0000000..c01ea01
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Service/ProcessModule/NamingBioSource.pm
@@ -0,0 +1,44 @@
+package RAD::MR_T::MageImport::Service::ProcessModule::NamingBioSource;
+
+# this is process module impl
+
+use strict 'vars';
+use Carp;
+
+use RAD::MR_T::MageImport::VO::DocRoot;
+use RAD::MR_T::MageImport::Service::AbstractProcessModule;
+
+use vars qw / @ISA / ;
+ at ISA = qw / RAD::MR_T::MageImport::Service::AbstractProcessModule/;
+
+=head1 NamingBioSource Module
+
+=over
+
+=cut
+
+sub process {
+ my ($self, $docRoot) = @_;
+ $self->getProcessor->process($docRoot);
+ $self->myProcess($docRoot);
+ return ref($self);
+}
+
+
+=item myProcess($docRoot)
+
+Description: numbering the biosource
+
+=cut
+
+sub myProcess {
+  my ($self, $docRoot) = @_;
+  my $counter=1;
+  foreach my $biomat(@{$docRoot->getBioMaterialVOs}){
+    if($biomat->getSubclassView eq 'BioSource'){
+      $biomat->setName($biomat->getName." source ".$counter);
+      $counter++;
+    }
+  }
+}
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Service/ProcessModule/SetQuanProtocolToGusProtocol.pm b/lib/perl/RAD/MR_T/MageImport/Service/ProcessModule/SetQuanProtocolToGusProtocol.pm
new file mode 100644
index 0000000..229c3eb
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Service/ProcessModule/SetQuanProtocolToGusProtocol.pm
@@ -0,0 +1,70 @@
+package RAD::MR_T::MageImport::Service::ProcessModule::SetQuanProtocolToGusProtocol;
+
+# this is process module impl
+
+use strict 'vars';
+use Carp;
+
+use RAD::MR_T::MageImport::VO::DocRoot;
+use RAD::MR_T::MageImport::VO::ProtocolVO;
+use RAD::MR_T::MageImport::Service::AbstractProcessModule;
+
+use vars qw / @ISA / ;
+ at ISA = qw / RAD::MR_T::MageImport::Service::AbstractProcessModule/;
+
+=head1 SetQuanProtocol Module
+
+Description: set quantification protocol to GUS protocol by giving GUS protocol name 
+
+Use Case: the quantifications in mage doc use some standard affy protocols or the exsting GUS protocols, but the mage doc either has its own protocol defined or may not have it at all, so we want to set its quantification protocol to existing protocol in GUS
+
+Input:  existing GUS quantification protocol name exactly as in database
+
+=cut
+
+=item constructor
+
+input: $processor, gus_quan_protocol_name
+
+=cut
+
+sub new {
+  my $self = shift()->SUPER::new(@_);
+  shift; 
+  $self->{quanName} = shift;
+  return $self;
+}
+
+sub process {
+ my ($self, $docRoot) = @_;
+ $self->getProcessor->process($docRoot);
+ $self->myProcess($docRoot);
+ return ref($self);
+}
+
+
+=item myProcess($docRoot)
+
+Description: set quantification protocol
+
+=cut
+
+sub myProcess {
+  my ($self, $docRoot) = @_;
+  my $counter=1;
+  foreach my $assay(@{$docRoot->getAssayVOs}){
+    foreach my $acq(@{$assay->getAcquisitions}){
+      foreach my $quan(@{$acq->getQuantifications}){
+      $quan->setProtocolName($self->{quanName});
+      }
+    }
+  }
+
+  $docRoot->addProtocolVOs(RAD::MR_T::MageImport::VO::ProtocolVO->new({name=>$self->{quanName}}));
+}
+
+sub getQuanName{
+  my $self = shift;
+  return $self->{quanName};
+}
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Service/Processor.pm b/lib/perl/RAD/MR_T/MageImport/Service/Processor.pm
new file mode 100644
index 0000000..a1ca4de
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Service/Processor.pm
@@ -0,0 +1,36 @@
+package RAD::MR_T::MageImport::Service::Processor;
+
+# this is processor does the default processing
+
+use strict 'vars';
+use Carp;
+
+use RAD::MR_T::MageImport::Service::AbstractProcessor;
+use vars qw / @ISA / ;
+
+ at ISA = qw / RAD::MR_T::MageImport::Service::AbstractProcessor/;
+
+sub new {
+  my $class = shift;
+  my $arg = shift;
+  bless {}, $class;
+}
+
+sub process {
+  my ($self, $docRoot) = @_;
+  foreach my $vo (@{$docRoot->getProtocolVOs}){
+    if(my $type = $vo->getProtocolType){
+      $type->setCategory("ExperimentalProtocolType") if $type->getCategory eq 'ProtocolType';
+    }
+  }
+
+  foreach my $vo (@{$docRoot->getTreatmentVOs}){
+    if(my $type = $vo->getTreatmentType){
+      $type->setCategory("ComplexAction") if $type->getCategory eq 'Action';
+    }
+  }
+
+  return $docRoot;
+}
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Service/Reader/MageTabReader.pm b/lib/perl/RAD/MR_T/MageImport/Service/Reader/MageTabReader.pm
new file mode 100644
index 0000000..65e5c1a
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Service/Reader/MageTabReader.pm
@@ -0,0 +1,1423 @@
+package RAD::MR_T::MageImport::Service::Reader::MageTabReader;
+
+use strict;
+
+use RAD::MR_T::MageImport::VO::DocRoot;
+use RAD::MR_T::MageImport::MageImportError;
+
+use RAD::MR_T::MageImport::Util qw(searchObjArrayByObjName);
+
+use Error qw(:try);
+
+use Data::Dumper;
+
+use base qw(RAD::MR_T::MageImport::Service::AbstractReader);
+
+=head1 NAME
+
+RAD::MR_T::MageImport::Service::Reader::MageTabReader;
+
+=head1 SYNOPSIS
+
+ my $reader = RAD::MR_T::MageImporter::Service::Reader::MageTabReader->new();
+ my $docRoot = $reader->parse();
+
+=head1 DESCRIPTION
+
+Subclass of AbstractReader.  It implements the parse method by returning 
+a RAD::MR_T::MageImport::VO::DocRoot object
+
+WARNING:  The Reader does NOT check that the Mage file is valid.  It reads the file as it is!!!
+
+Currently only one SDRF is supported.
+
+=cut
+
+#--------------------------------------------------------------------------------
+
+sub getLines {$_[0]->{lines}}
+sub setLines {$_[0]->{lines} = $_[1]}
+
+#--------------------------------------------------------------------------------
+
+=head2 Subroutines
+
+=over 4
+
+=item C<readTabFile>
+
+Opens and reads the Tab File.  Creates an array of lines.  Removes some characters
+ from All the Strings (currently only quotes are removed)
+
+B<Return Type:> 
+
+ C<ARRAY_REF> Array_ref representation of the file
+
+=cut
+
+sub readTabFile {
+  my ($self) = @_;
+
+  my $fn = $self->getFile();
+
+  unless(-e $fn) {
+    RAD::MR_T::MageImport::MageImportError->
+      new("File [$fn] does not exist!")->throw();
+  }
+
+  my @lines;
+
+  if($fn =~ /\.xls$/) {
+    eval {
+      require Spreadsheet::ParseExcel;
+    };
+    if(@$) {
+      RAD::MR_T::MageImport::MageImportError->
+          new("Spreadsheet::ParseExcel is a required package")->throw();
+    }
+
+    my $oExcel = new Spreadsheet::ParseExcel;
+
+    my $oBook = $oExcel->Parse($fn);
+
+    for(my $iSheet=0; $iSheet < $oBook->{SheetCount} ; $iSheet++) {
+
+      my $oSheet = $oBook->{Worksheet}[$iSheet];
+      my $minRow = $oSheet->{MinRow};
+      my $maxRow = $oSheet->{MaxRow};
+      my $minCol = $oSheet->{MinCol};
+      my $maxCol = $oSheet->{MaxCol};
+
+      if($maxRow) {
+        for(my $i = $minRow; $i <= $maxRow; $i++) {
+
+          my @row;
+          for(my $j = $minCol; $j <= $maxCol; $j++) {
+
+            my $oCell = $oSheet->{Cells}[$i][$j];
+            my $cellValue = $oCell ? $oCell->Value : undef;
+
+            $cellValue =~ s/["\']//g;
+            push(@row, $cellValue);
+          }
+          push @lines, join("\t", @row);
+        }
+      }
+    }
+  }
+  elsif($fn =~ /\.idf$/) {
+   open(FILE, $fn) or RAD::MR_T::MageImport::MageImportError->
+      new("Could Not open File $fn for Reading: $!")->throw();
+
+    while(<FILE>) {
+      chomp;
+
+      s/["\']//g;
+      push @lines, $_;
+    }
+
+   close FILE;
+
+   $self->setLines(\@lines);
+   my $sdrf = $self->getRowByHeader('^SDRF File$')->[0];
+   open(FILE, $sdrf) or RAD::MR_T::MageImport::MageImportError->
+     new("Could Not open File $fn for Reading: $!")->throw();
+
+    while(<FILE>) {
+      chomp;
+
+      s/["\']//g;
+      push @lines, $_;
+    }
+
+   close FILE;
+
+  }
+  else {
+    open(FILE, $fn) or RAD::MR_T::MageImport::MageImportError->
+      new("Could Not open File $fn for Reading: $!")->throw();
+
+    while(<FILE>) {
+      chomp;
+
+      s/["\']//g;
+      push @lines, $_;
+    }
+    close FILE;
+
+  }
+
+  return \@lines;
+}
+
+#--------------------------------------------------------------------------------
+
+=item C<parse>
+
+Create and return a DocRoot from a MageTab File.  Does NOT check that the file
+is valid.  The file is read in as it is.  (The parsing will fail if there 
+are null pointers in the file... like Using a Protocol REF without 
+declaring it in the idf.)
+
+B<Return Type:> 
+
+ C<RAD::MR_T::MageImport::VO::DocRoot> 
+
+=cut
+
+sub parse {
+  my ($self) = @_;
+
+  my $docRoot = RAD::MR_T::MageImport::VO::DocRoot->new();
+
+  my $fileLines = $self->readTabFile();
+  $self->setLines($fileLines);
+
+  my $externalDatabases = $self->parseExternalDatabases();
+  $docRoot->externalDatabaseVOs($externalDatabases);
+
+  my $affiliations = $self->parseAffiliations();
+  $docRoot->affiliationVOs($affiliations);
+
+  my $persons = $self->parsePersons($affiliations);
+  $docRoot->personVOs($persons);
+
+  my $protocols = $self->parseProtocols($externalDatabases);
+  $docRoot->protocolVOs($protocols);
+
+  my $study = $self->parseStudy($persons, $externalDatabases);
+  $docRoot->studyVO($study);
+
+  $self->parseSdrf('^Source Name', $docRoot);
+
+  return $docRoot;
+}
+
+#--------------------------------------------------------------------------------
+
+=item C<parseSdrf>
+
+Creates a _BioMaterialAnnotation object (Inner Class) to simplify getting the header and lines relating
+to the biomaterialAnnotation.  This method deals with a chunk of annotation which begins
+with the regex parameter.  Will continually add treatments and biomaterials to the 
+DocRoot.
+
+POSSIBLE TODO:  Call this method recursivly... Any Id could be the start of another SDRF
+
+B<Parameters:>
+
+ $regex(string):  Pattern to match
+ $bioMaterials([RAD::MR_T::MageImport::VO::BioMaterialVO]):  ArrayRef of BioMaterial VOs
+ $docRoot(RAD::MR_T::MageImport::VO::DocRoot):  DocRoot Object
+
+B<Return Type:> 
+
+ C<RAD::MR_T::MageImport::VO::DocRoot> 
+
+=cut
+
+sub parseSdrf {
+  my ($self, $regex, $docRoot) = @_;
+
+  my $logger = $self->getLogger();
+
+  my $lines = $self->getLines();
+
+  my $bioMaterialAnnotation = _BioMaterialAnnotation->new($lines, $regex, $logger);
+
+  my $headers = $bioMaterialAnnotation->getHeader();
+
+  while($bioMaterialAnnotation->hasNextLine()) {
+    my $annotationLine = $bioMaterialAnnotation->nextLine();
+
+    $self->doBioMaterialsAndCharacteristics($headers, $annotationLine, $docRoot);
+    $self->doTreatments($headers, $annotationLine, $docRoot);
+    $self->doAssays($headers, $annotationLine, $docRoot);
+  }
+
+  #TODO:: parseSdrf('someOtherID', $docRoot);
+
+  return $docRoot;
+}
+
+#--------------------------------------------------------------------------------
+
+=item C<doAssays>
+
+Each line of the SDRF corresponds to one acquisition.  Must check for existing
+Assays from the DocRoot.
+
+TODO:  Date, Description (Currently not in the VOs)
+TODO:  Unit for Factor values... currently only concatenates value and unit
+
+B<Parameters:>
+
+ $headerValues(ARRAYREF):  ArrayRef of strings which correspond to the sdrf header
+ $lineValues(ARRAYREF):  ArrayRef of strings which correspond to an sdrf line
+ $docRoot(RAD::MR_T::MageImport::VO::DocRoot):  DocRoot Object
+
+B<Return Type:> 
+
+ C<[RAD::MR_T::MageImport::VO::TreatmentVO]> ArrayRef of Treatment VO objects which have been added to the DocRoot
+
+=cut
+
+sub doAssays {
+  my ($self, $headerValues, $lineValues, $docRoot) = @_;
+
+  my $logger = $self->getLogger();
+
+  my $protocols = $docRoot->getProtocolVOs();
+  my $externalDatabases = $docRoot->getExternalDatabaseVOs();
+  my $assays = $docRoot->getAssayVOs();
+  my $persons = $docRoot->getPersonVOs();
+  my $bioMaterials = $docRoot->getBioMaterialVOs();
+
+  my $currentThing; # Can be AssayVO, AcquisitionVO, or QuantificationVO
+
+  my ($label, $performer, $arrayDesign, @factorValues, $assay, $acquisition, $quantification, $labeledExtract, $process);
+
+  # Read From Right to Left
+  for(my $i = scalar(@$headerValues) - 1; $i >= 0; $i--) {
+    my $key = $headerValues->[$i];
+    my $value = $lineValues->[$i];
+
+    next unless($value);
+
+    if($key =~ /Labeled Extract Name/i) {
+      $labeledExtract = searchObjArrayByObjName($bioMaterials, $value);
+    }
+
+    if($key =~ /ArrayDesign REF/i) {
+      $arrayDesign = $value;
+    }
+
+    if($key =~ /Label\s*$/i) {
+      $label = RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value => $value, category => 'LabelCompound'});
+    }
+
+    #TODO:  Unit for Factor Values
+    if($key =~ /FactorValue\s*\[(.+)\]/i) {
+      my $factorName = $1;
+
+      if($headerValues->[$i+1] =~ /Unit\s*\[(.+)\]\s*$/i) {
+        my $unit = $lineValues->[$i+1];
+        $value = $value . " " . $unit;
+      }
+      my $valueOe = RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value => $value});
+      my $factorValue = RAD::MR_T::MageImport::VO::FactorValueVO->new({factorName => $factorName, value => $valueOe});
+      push(@factorValues, $factorValue);
+    }
+
+    if($key =~ /Performer/i) {
+      $performer = searchObjArrayByObjName($persons, $value);
+    }
+
+    if($key =~ /Protocol REF/i) {
+      my $protocol = $self->findReferencedProtocol($protocols, $value);
+
+      # Assay to quant can only have one protocol each...(takes the right most protocol)
+      if($currentThing->getProtocolName()) {
+        my $name = $currentThing->getName();
+        $logger->info("SKIP:  Protocol [$value] For [$name] has already been set");
+      }
+      else {
+        $currentThing->setProtocolName($value);
+      }
+    }
+
+    if($key =~ /ParameterValue\s*\[(.+)\]/i) {
+      my $paramName = $1;
+
+      # Check the next column for the unit...
+      my ($category, $extDbName, $unitValue);
+      if($headerValues->[$i+1] =~ /Unit\s*\[(.+)\]\s*$/i) {
+        $category = $1;
+        $unitValue = $lineValues->[$i+1];
+      }
+
+      my $paramValue = $self->makeParameterValue($value, $paramName,  $unitValue, $category, $extDbName, $docRoot);
+
+      unless(UNIVERSAL::isa($currentThing, 'RAD::MR_T::MageImport::VO::AssayVO') && $currentThing->getProtocolName()) {
+        $currentThing->addParameterValues($paramValue);
+      }
+    }
+
+    if($key =~ /Normalization Name/i || $key =~ /DerivedArrayData File/i) {
+      my $isProcess = UNIVERSAL::isa($currentThing, 'RAD::MR_T::MageImport::VO::ProcessVO');
+      my $newProcess = RAD::MR_T::MageImport::VO::ProcessVO->new();
+
+      # If NOT a process OR the current thing is a process which already has a protocol... Start with Fresh Process.
+      if(!$isProcess || ($isProcess &&  $currentThing->getProtocolName())) {
+        $logger->info("Overwriting Existing Process with $value") if($process);
+
+        $currentThing = $newProcess;
+        $process = $newProcess
+      }
+      $currentThing->setName($value) if($key =~ /Normalization Name/i);
+      $currentThing->setUri($value) if($key =~ /DerivedArrayData File/i);
+    }
+
+    if($key =~ /^ArrayData File/i) {
+      my $isQuantification = UNIVERSAL::isa($currentThing, 'RAD::MR_T::MageImport::VO::QuantificationVO');
+      my $newQuantification = RAD::MR_T::MageImport::VO::QuantificationVO->new();
+
+      # If NOT a quant OR the current thing is a quant which already has a protocol... Start with Fresh Quant.
+      if(!$isQuantification || ($isQuantification &&  $currentThing->getProtocolName())) {
+        $logger->info("Overwriting Existing Quantification with $value") if($quantification);
+
+        $currentThing = $newQuantification;
+        $quantification = $newQuantification;
+      }
+      $currentThing->setUri($value) if($key =~ /ArrayData File/i);
+    }
+
+    if($key =~ /Scan Name/i || $key =~ /Image File/i) {
+      my $isAcquisition = UNIVERSAL::isa($currentThing, 'RAD::MR_T::MageImport::VO::AcquisitionVO');
+      my $newAcquisition = RAD::MR_T::MageImport::VO::AcquisitionVO->new();
+
+      # If NOT a acquisition OR the current thing is an acquisition which already has a protocol... Start with Fresh Acquisition.
+      if(!$isAcquisition || ($isAcquisition &&  $currentThing->getProtocolName())) {
+        $logger->info("Overwriting Existing Acquisition with $value") if($acquisition);
+
+        $currentThing = $newAcquisition;
+        $acquisition = $newAcquisition;
+      }
+      $currentThing->setName($value) if($key =~ /Scan Name/i);
+      $currentThing->setUri($value) if($key =~ /Image File/i);
+    }
+
+    if($key =~ /Hybridization Name/i) {
+
+        try {
+          $assay = searchObjArrayByObjName($assays, $value);
+        }
+        catch  RAD::MR_T::MageImport::MageImportError with {
+          $assay = RAD::MR_T::MageImport::VO::AssayVO->new({name => $value});
+          $docRoot->addAssayVOs($assay);
+        };
+
+      $currentThing = $assay;
+    }
+  }
+
+  $quantification->addProcesses($process) if($process);
+
+  $acquisition->addFactorValues(@factorValues);
+  $acquisition->addQuantifications($quantification);
+  $acquisition->addChannels($label);
+
+  my $studyName = $docRoot->getStudyVO()->getName();
+  $assay->setArraySourceId($arrayDesign);
+
+  try {
+    searchObjArrayByObjName($assay->getAcquisitions(), $acquisition->getName());
+  } catch RAD::MR_T::MageImport::MageImportError with {
+    my $assayName = $assay->getName();
+    my $acquisitionName = $acquisition->getName();
+    $logger->debug("New Acquisition [$acquisitionName] being set to Assay [$assayName]");
+    $assay->addAcquisitions($acquisition);
+  };
+
+  $assay->setStudyName($studyName);
+
+  $performer = $docRoot->getStudyVO()->getContact()  unless($performer);
+  $assay->setOperator($performer) ;
+
+  try {
+    searchObjArrayByObjName($assay->getLabeledExtracts(), $labeledExtract->getName());
+  }  catch  RAD::MR_T::MageImport::MageImportError with {
+    $assay->addLabeledExtracts($labeledExtract);
+  };
+
+  return $docRoot->getAssayVOs();
+}
+
+#--------------------------------------------------------------------------------
+
+=item C<findReferencedProtocol>
+
+If a protocol is refereneced in the sdrf it must have been declared in the idf.
+This protocol tries to find it or logs an informative error.
+
+B<Parameters:>
+
+ $protocols([RAD::MR_T::MageImport::VO::ProtocolVO]):  ArrayRef of ProtocolVO objects
+ $protocolName(string):  Name of a supposed existing protocol
+
+B<Return Type:> 
+
+ C<RAD::MR_T::MageImport::VO::ProtocolVO>
+
+=cut
+
+sub findReferencedProtocol {
+  my ($self, $protocols, $protocolName) = @_;
+
+  my $protocol;
+
+  my $logger = $self->getLogger();
+
+  try {
+    $protocol = searchObjArrayByObjName($protocols, $protocolName);
+  }
+    catch  RAD::MR_T::MageImport::MageImportError with {
+      $logger->fatal("Protocol REF [$protocolName] found in SDRF but missing in IDF");
+      $_[0]->throw();
+    };
+
+  return $protocol;
+}
+
+
+#--------------------------------------------------------------------------------
+
+=item C<makeParameterValue>
+
+Create the Parameter value (and possibly the OntologyEntryVO for the Unit)
+
+B<Parameters:>
+
+ $paramValue(string): The Parmaeter Value
+ $paramName(string):  Name of the ProtocolParameter
+ $unitValue(string):  Optional... the name of the Unit
+ $unitCategory(string):  Optional... the name of the Unit Category
+ $extDbName(string):  Optional... the name of the ExternalDatabase for the Unit
+
+B<Return Type:> 
+
+ C<RAD::MR_T::MageImport::VO::ProtocolVO>
+
+=cut
+
+sub makeParameterValue {
+  my ($self, $paramValue, $paramName, $unitValue, $unitCategory, $extDbName, $docRoot) = @_;
+
+  my $externalDatabases = $docRoot->getExternalDatabaseVOs();
+  my $protocols = $docRoot->getProtocolVOs();
+
+  if($unitValue) {
+    my $extDb = $extDbName ? searchObjArrayByObjName($externalDatabases, $extDbName) : undef;
+
+    foreach my $protocol (@$protocols) {
+      foreach my $param (@{$protocol->getParams()}) {
+
+        if($param->getName() eq $paramName) {
+            my $unitOe = RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value => $unitValue,
+                                                                          category => $unitCategory,
+                                                                          externalDatabase => $extDb,
+                                                                         });
+            $param->setUnitType($unitOe);
+        }
+      }
+    }
+  }
+
+  my $paramValueVo = RAD::MR_T::MageImport::VO::ParameterValueVO->new({parameterName => $paramName,
+                                                                       value => $paramValue,
+                                                                      });
+  return $paramValueVo;
+}
+
+
+#--------------------------------------------------------------------------------
+
+=item C<doTreatments>
+
+Reads the SDRF...  Calls a method which creates (or finds) the treatment.
+Determines which protocols and parameter values are associated with that treatment. 
+
+B<Parameters:>
+
+ $headerValues(ARRAYREF):  ArrayRef of strings which correspond to the sdrf header
+ $lineValues(ARRAYREF):  ArrayRef of strings which correspond to an sdrf line
+ $docRoot(RAD::MR_T::MageImport::VO::DocRoot):  DocRoot Object
+
+B<Return Type:> 
+
+ C<[RAD::MR_T::MageImport::VO::TreatmentVO]> ArrayRef of Treatment VO objects which have been added to the DocRoot
+
+=cut
+
+sub doTreatments {
+  my ($self, $headerValues, $lineValues, $docRoot) = @_;
+
+  my $logger = $self->getLogger();
+
+  my $bioMaterials = $docRoot->getBioMaterialVOs();
+  my $protocols = $docRoot->getProtocolVOs();
+  my $externalDatabases = $docRoot->getExternalDatabaseVOs();
+
+  my (@paramValues, @treatmentProtocols, $currentOutputBioMaterial);
+
+  my $allowed_rx = "Source Name|Sample Name|Extract Name|Labeled Extract Name";
+
+  # Read From Right to Left
+  for(my $i = scalar(@$headerValues) - 1; $i >= 0; $i--) {
+    my $key = $headerValues->[$i];
+    my $value = $lineValues->[$i];
+
+    next unless($value);
+
+    if($key =~ /$allowed_rx/i) {
+      my $newBioMaterial = searchObjArrayByObjName($bioMaterials, $value);
+
+      if($currentOutputBioMaterial) {
+        $self->makeTreatments(\@treatmentProtocols, \@paramValues, $currentOutputBioMaterial, $newBioMaterial, $docRoot);
+      }
+      # Reset for the next treatment...
+      $currentOutputBioMaterial = $newBioMaterial;
+      @paramValues = ();
+      @treatmentProtocols = ();
+    }
+
+    if($key =~ /Protocol REF/i) {
+      my $prot = $self->findReferencedProtocol($protocols, $value);
+      unshift(@treatmentProtocols, $prot); # Don't push because order matters
+    }
+
+    if($key =~ /ParameterValue \[(.+)\]/i) {
+      my $paramName = $1;
+
+      # Check the next column for the unit...
+      my ($category, $extDbName, $unitValue);
+      if($headerValues->[$i+1] =~ /Unit\s*\[(.+)\]\s*$/i) {
+        $category = $1;
+        $unitValue = $lineValues->[$i+1];
+      }
+
+      my $paramValue = $self->makeParameterValue($value, $paramName,  $unitValue, $category, $extDbName, $docRoot);
+      push(@paramValues, $paramValue);
+    }
+
+  }
+  return $docRoot->getTreatmentVOs();
+}
+
+#--------------------------------------------------------------------------------
+
+=item C<makeTreatments>
+
+Grunt work for creating a TreatmentVO.  Will also make the BioMaterialMeasurementVO from the input
+BioMaterial.  If there is an existing treatment with the same OutputBM and Same Protocol...(ie pooling)
+then just add inputBMM to the existing treatment.  Will add the newly created TreatmentVO to the DocRoot.
+
+# TODO:  value and unit for BioMaterialMeasurementVO??
+
+B<Parameters:>
+
+ $protocols([RAD::MR_T::MageImport::VO::ProtocolVO]):  ArrayRef of Protocol VO objects
+ $paramValues([RAD::MR_T::MageImport::VO::ParameterValueVO]):  ArrayRef of ParameterValue VO objects
+ $outBioMaterial(RAD::MR_T::MageImport::VO::BioMaterialVO):  BioMaterialVO object which is the Input to the treatment
+ $inBioMaterial(RAD::MR_T::MageImport::VO::BioMaterialVO):  BioMaterialVO which will be made into a BioMaterialMeasuremnt
+ $docRoot(RAD::MR_T::MageImport::VO::DocRoot):  DocRoot Object
+
+B<Return Type:> 
+
+ C<RAD::MR_T::MageImport::VO::TreatmentVO>
+
+=cut
+
+sub makeTreatments {
+  my ($self, $protocols, $paramValues, $outBioMaterial, $inBioMaterial, $docRoot) = @_;
+
+  my $logger = $self->getLogger();
+
+  my $treatments = $docRoot->getTreatmentVOs();
+
+  for(my $i = 0; $i < scalar(@$protocols); $i++) {
+    my $protocol = $protocols->[$i];
+    my $orderNum = $i + 1;
+
+
+    my $bioMaterialMeasurement = RAD::MR_T::MageImport::VO::BioMaterialMeasurementVO->new({bioMaterial => $inBioMaterial});
+
+    if(my $treatment = $self->findExistingTreatment($treatments, $outBioMaterial, $protocol)) {
+      my $existingBmms = $treatment->getInputBMMs();
+
+      if($self->okToAddBmm($existingBmms, $inBioMaterial)) {
+        $treatment->addInputBMMs($bioMaterialMeasurement);
+      }
+    }
+    else {
+      my $treatmentTypeName = $protocol->getProtocolType()->getValue();
+      my $treatmentName = $treatmentTypeName . " - " .  $outBioMaterial->getName();
+
+      my $treatmentType = RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value => $treatmentTypeName,
+                                                                           category => 'ComplexAction',
+                                                                           externalDatabase => $protocol->getProtocolType()->getExternalDatabase(),
+                                                                          });
+
+      my $newTreatment = RAD::MR_T::MageImport::VO::TreatmentVO->new({orderNum => $orderNum,
+                                                                      outputBM => $outBioMaterial,
+                                                                      inputBMMs => [$bioMaterialMeasurement],
+                                                                      protocol => $protocol,
+                                                                      name => $treatmentName,
+                                                                      treatmentType => $treatmentType,
+                                                                     });
+
+      if(my $protocolParams = $protocol->getParams()) {
+        foreach my $param (@$protocolParams) {
+          my $paramName = $param->getName();
+
+          $logger->debug(Dumper $param);
+
+          foreach my $paramValue (@$paramValues) {
+            $logger->debug(Dumper $paramValue);
+            if($paramValue->getParameterName() eq $paramName) {
+              $newTreatment->addParameterValues($paramValue);
+            }
+          }
+        }
+      }
+
+      $docRoot->addTreatmentVOs($newTreatment);
+    }
+  }
+  return $docRoot->getTreatmentVOs();
+}
+
+
+#--------------------------------------------------------------------------------
+
+sub okToAddBmm {
+  my ($self, $existingBmms, $inBioMaterial) = @_;
+
+  my @bioMaterials = map { $_->getBioMaterial() } @$existingBmms;
+
+  try {
+    my $newBioMaterial = searchObjArrayByObjName(\@bioMaterials, $inBioMaterial->getName());
+    return 0;
+  } catch RAD::MR_T::MageImport::MageImportError with {
+    return 1;
+  };
+}
+
+#--------------------------------------------------------------------------------
+
+=item C<findExistingTreatment>
+
+Loop through an arrayref of treatmentVOs and find based on protocol and output biomaterial.
+A treatment is existing if it has the same protocol and the same output biomaterial
+
+B<Parameters:>
+
+ $treatments([RAD::MR_T::MageImport::VO::TreatmentVO]):  ArrayRef of Treatment VO objects
+ $outBioMaterial(RAD::MR_T::MageImport::VO::BioMaterialVO):  BioMaterialVO object which is the Input to the treatment
+ $protocol(RAD::MR_T::MageImport::VO::ProtocolVO):  ProtocolVO Object
+
+B<Return Type:> 
+
+ C<RAD::MR_T::MageImport::VO::TreatmentVO>: TreatmentVO if it was found
+
+=cut
+
+
+sub findExistingTreatment {
+  my ($self, $treatments, $outBioMaterial, $protocol) = @_;
+
+  foreach my $t (@$treatments) {
+    if($t->getProtocol->getName eq $protocol->getName && $t->getOutputBM->getName eq $outBioMaterial->getName) {
+      return $t;
+    }
+  }
+}
+
+#--------------------------------------------------------------------------------
+
+=item C<doBioMaterialsAndCharacteristics>
+
+Grunt work for looping through the sdrf and pulling out biomaterials.  MaterialType
+and Characteristics are assigned to the last BioMaterial (read left to right).  The code 
+only worries about one biomaterial at a time (the current biomaterial).  Once it is 
+decided which bioMaterial is the "current BIomaterial" all the Characteristics are 
+assigned to it.  
+
+B<Parameters:>
+
+ $headerValues(ArrayRef):  ArrayRef of Strings corresponding to the header
+ $lineValues(ArrayRef):  ArrayRef of Strings corresponding to the values associated with the header
+ $docRoot(RAD::MR_T::MageImport::VO::DocRoot):  DocRoot Object
+
+B<Return Type:> 
+
+ C<[RAD::MR_T::MageImport::VO::BioMaterialVO]> ArrayRef of BioMaterial VOs
+
+=cut
+
+sub doBioMaterialsAndCharacteristics {
+  my ($self, $headerValues, $lineValues, $docRoot) = @_;
+
+  my $logger = $self->getLogger();
+
+  my $currentBioMaterial;
+  my $externalDatabaseVos = $docRoot->getExternalDatabaseVOs();
+  my $personVos = $docRoot->getPersonVOs();
+
+  my $allowed_rx = "Source Name|Sample Name|Extract Name|Labeled Extract Name";
+
+  for(my $i = 0; $i < scalar(@$headerValues); $i++) {
+    my $key = $headerValues->[$i];
+    my $value = $lineValues->[$i];
+
+    next unless($value);
+
+    # Find or Create the currentBioMaterial
+    if($key =~ /$allowed_rx/i) {
+      $key =~ s/ |Name//gi;  # Remove spaces and "ID"
+      $currentBioMaterial = $self->makeBioMaterial($docRoot, $key, $value);
+    }
+
+    if($key =~ /^MaterialType\s*$/i) {
+      my $typeOe = RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value => $value, category => $key});
+      $currentBioMaterial->setBioMaterialType($typeOe);
+    }
+
+    if($key =~ /Characteristics\s*\[(.+)\]\s*$/i) {
+      my $category = $1;
+      my $characteristic = RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value => $value, category => $category});
+
+      unless($self->isOntologyEntryIncluded($characteristic, $currentBioMaterial->getBioMaterialChars())) {
+        $currentBioMaterial->addBioMaterialChars($characteristic);
+      }
+
+      if($headerValues->[$i+1] =~ /Term Source REF/) {
+        my $termSource = $lineValues->[$i+1];
+
+        try {
+          my $extDb = searchObjArrayByObjName($externalDatabaseVos, $termSource);
+          $characteristic->setExternalDatabase($extDb);
+        } catch RAD::MR_T::MageImport::MageImportError with {
+          my $e = shift;
+          $logger->fatal($e->text());
+        };
+      }
+    }
+
+    if($key =~ /Term Source REF/i && $headerValues->[$i-1] =~ /MaterialType/) {
+
+      try {
+        my $extDb = searchObjArrayByObjName($externalDatabaseVos, $value);
+        my $type = $currentBioMaterial->getBioMaterialType();
+        $type->setExternalDatabase($extDb);
+      } catch RAD::MR_T::MageImport::MageImportError with {
+        my $e = shift;
+        $logger->fatal($e->text());
+      };
+    }
+
+    if($key =~ /Label/i) {
+      my $channel = RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value => $value, category => 'LabelCompound'});
+      $currentBioMaterial->setChannel($channel);
+    }
+
+    if($key =~ /Provider/i) {
+      my $provider = searchObjArrayByObjName($personVos, $value);
+      $currentBioMaterial->setProvider($provider);
+    }
+
+    if($key =~ /Description/i) {
+      $currentBioMaterial->setDescription($value);
+    }
+
+  }
+  return $docRoot->getBioMaterialVOs();
+}
+
+#--------------------------------------------------------------------------------
+
+=item C<makeBioMaterial>
+
+Try to find the biomaterial from existing (from name) or create a new one.
+
+B<Parameters:>
+
+ $docRoot(RAD::MR_T::MageImport::VO::DocRoot):  DocRoot Object
+ $key(string):  Header from the sdrf which will become the subclass view
+ $value(string):  Value from the  sdrf which will become the name
+
+B<Return Type:> 
+
+ C<RAD::MR_T::MageImport::VO::BioMaterialVO> BioMaterial VO
+
+=cut
+
+sub makeBioMaterial {
+  my ($self, $docRoot, $key, $value) = @_;
+
+  my $logger = $self->getLogger();
+
+  my $bioMaterial;
+
+  try {
+    $bioMaterial = searchObjArrayByObjName($docRoot->getBioMaterialVOs(), $value);
+  }
+  catch RAD::MR_T::MageImport::MageImportError with {
+    my $e = shift;
+    $logger->info($e->text());
+
+    $bioMaterial = RAD::MR_T::MageImport::VO::BioMaterialVO->new({name => $value,
+                                                                  subclassView => $key
+                                                                 });
+    $docRoot->addBioMaterialVOs($bioMaterial);
+    $logger->debug("Create Biomaterial: $value");
+  };
+
+  return $bioMaterial;
+}
+
+#--------------------------------------------------------------------------------
+
+=item C<parseStudy>
+
+Create the VO Study object.  Find the submitter from the list of Persons and sets 
+as the StudyContact.  
+
+B<Parameters:>
+
+ $persons([RAD::MR_T::MageImport::VO::PersonVO]):  ArrayRef of Person VOs
+ $externalDatabaseVos([RAD::MR_T::MageImport::VO::ExternalDatabaseVO]):  ArrayRef of ExternalDatabaseVos
+
+B<Return Type:> 
+
+ C<RAD::MR_T::MageImport::VO::StudyVO> Study VO 
+
+=cut
+
+sub parseStudy {
+  my ($self, $persons, $externalDatabaseVos) = @_;
+
+  my $logger = $self->getLogger();
+
+  my $title = $self->getRowByHeader('^Investigation Title$')->[0];
+  $logger->debug("Study Title: $title");
+
+  my $desc = $self->getRowByHeader('^Experiment Description$')->[0];
+  $logger->debug("Study Description:  $desc");
+
+  my $pubmedId = $self->getRowByHeader('^PubMed ID$')->[0];
+  $logger->debug("Main Publication:  $pubmedId");
+
+  my $studyVo = RAD::MR_T::MageImport::VO::StudyVO->new({name => $title,
+                                                         description => $desc,
+                                                         pubMedId => $pubmedId,
+                                                        });
+  my $submitter;
+  foreach my $person (@$persons) {
+    if($person->getRole() eq 'submitter') {
+      $studyVo->setContact($person);
+    }
+  }
+
+  my $factors = $self->parseStudyFactors($externalDatabaseVos);
+  my $design = $self->parseStudyDesign($factors);
+
+  $studyVo->setDesigns([$design]);
+
+  return $studyVo;
+}
+
+#--------------------------------------------------------------------------------
+
+=item C<parseStudyDesign>
+
+Because of the current implementation of MageTab... only one Study Design is 
+parsed.  Creates the OntologyEntryVOs and set as the types.  The OntologyEntrys
+are created having only values.
+
+B<Parameters:>
+
+ $studyFactorVos([RAD::MR_T::MageImport::VO::StudyFactorVO]):  ArrayRef of StudyFactor VOs
+
+B<Return Type:> 
+
+ C<RAD::MR_T::MageImport::VO::StudyDesignVO> StudyDesign Vo object
+
+=cut
+
+sub parseStudyDesign {
+  my ($self, $studyFactorVos) = @_;
+
+  my $logger = $self->getLogger();
+
+  my $designs = $self->getRowByHeader('^Experimental Designs');
+
+  my @types;
+
+  foreach my $design (@$designs) {
+    $logger->debug("Study Design:  $design");
+
+    my $typeOeVo = RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value => $design});
+    push(@types, $typeOeVo);
+  }
+
+  my @typesForString = map { $_->getValue() } @types;
+  my $nameString = join(', ', @typesForString);
+
+  return RAD::MR_T::MageImport::VO::StudyDesignVO->new({factors => $studyFactorVos,
+                                                        types => \@types,
+                                                        name => $nameString,
+                                                       });
+}
+
+#--------------------------------------------------------------------------------
+
+=item C<parseStudyFactors>
+
+Creates a Study Factor VO for each that is named.  Creates the OntologyEntryVo for 
+the types (loggs any missing term sources).
+
+B<Parameters:>
+
+ $externalDatabaseVos([RAD::MR_T::MageImport::VO::ExternalDatabaseVO]):  ArrayRef of ExternalDatabase VOs
+
+B<Return Type:> 
+
+ C<[RAD::MR_T::MageImport::VO::StudyFactorVO]> ArrayRef of VO StudyFactors
+
+=cut
+
+
+sub parseStudyFactors {
+  my ($self, $externalDatabaseVos) = @_;
+
+  my $logger = $self->getLogger();
+
+  my @studyFactors;
+
+  my $names = $self->getRowByHeader('^Experimental Factor Name');
+  my $types = $self->getRowByHeader('^Experimental Factor Type');
+  my $sources = $self->getRowByHeader('^Experimental Factor Type Term Source REF');
+
+  for(my $i = 0; $i < scalar(@$names); $i++) {
+    my $name = $names->[$i];
+    my $type = $types->[$i];
+    my $termSource = $sources->[$i];
+
+    my $typeOeVo = RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value => $type});
+
+    if($termSource) {
+
+      try {
+        my $extDb = searchObjArrayByObjName($externalDatabaseVos, $termSource);
+        $typeOeVo->setExternalDatabase($extDb);
+      } catch RAD::MR_T::MageImport::MageImportError with {
+        my $e = shift;
+        $logger->fatal($e->text());
+      };
+    }
+
+    my $studyFactor = RAD::MR_T::MageImport::VO::StudyFactorVO->new({name => $name,
+                                                                     type => $typeOeVo,
+                                                                    });
+
+    push(@studyFactors, $studyFactor);
+  }
+
+  return \@studyFactors;
+}
+
+
+#--------------------------------------------------------------------------------
+
+=item C<parsePersons>
+
+Get the rows corresponding to the Person Info.  Returns a list of PersonVO objects
+
+B<Return Type:> 
+
+ C<[RAD::MR_T::MageImport::VO::PersonVO]> ArrayRef of PersonVO objects
+
+=cut
+
+sub parsePersons {
+  my ($self, $affiliations) = @_;
+
+  my $logger = $self->getLogger();
+
+  my @persons;
+
+  my $personLastNames = $self->getRowByHeader('^Person Last Name$');
+  my $personFirstNames = $self->getRowByHeader('^Person First Name$');
+  my $personEmails = $self->getRowByHeader('^Person Email$');
+  my $personPhones = $self->getRowByHeader('^Person Phone$');
+  my $personAddresss = $self->getRowByHeader('^Person Address$');
+  my $personRoles = $self->getRowByHeader('^Person Roles$');
+  my $personAffiliations = $self->getRowByHeader('^Person Affiliation$');
+
+  for(my $i = 0; $i < scalar(@$personLastNames); $i++) {
+    my $last = $personLastNames->[$i];
+    my $first = $personFirstNames->[$i];
+    my $email = $personEmails->[$i];
+    my $address = $personAddresss->[$i];
+    my $role = $personRoles->[$i];
+    my $phone = $personPhones->[$i];
+
+    my $name = "$first $last";
+
+    my $affiliation = $personAffiliations->[$i];
+
+    my $affiliationVo;
+    $affiliationVo = searchObjArrayByObjName($affiliations, $affiliation) if($affiliation);
+
+    my $person =  RAD::MR_T::MageImport::VO::PersonVO->new({first => $first,
+                                                            last => $last,
+                                                            email => $email,
+                                                            address => $address,
+                                                            role => $role,
+                                                            affiliation => $affiliationVo,
+                                                            phone => $phone,
+                                                            name => $name,
+                                                           });
+    push(@persons, $person);
+  }
+  return \@persons;
+}
+
+
+#--------------------------------------------------------------------------------
+
+=item C<parseAffiliations>
+
+Get the rows corresponding to the Affiliation Info. Will just Dump this into the 
+Name attribute of AffiliationVO
+
+B<Return Type:> 
+
+ C<[RAD::MR_T::MageImport::VO::AffiliationVO]> ArrayRef of AffiliationVO objects
+
+=cut
+
+sub parseAffiliations {
+  my ($self) = @_;
+
+  my $logger = $self->getLogger();
+
+  my @affiliations;
+
+  my $personAffiliations = $self->getRowByHeader('^Person Affiliation$');
+
+  my %seen;
+  foreach my $affiliation (@$personAffiliations) {
+    unless($seen{$affiliation}) {
+      my $affiliationVo = RAD::MR_T::MageImport::VO::AffiliationVO->new({name => $affiliation});
+      push(@affiliations, $affiliationVo);
+    }
+    $seen{$affiliation} = 1;
+  }
+  return \@affiliations;
+}
+
+
+
+#--------------------------------------------------------------------------------
+
+=item C<parseExternalDatabases>
+
+Get the rows corresponding to the ExternalDatabases (Term Source).
+
+B<Return Type:> 
+
+ C<[RAD::MR_T::MageImport::VO::ExternalDatabaseVO]> ArrayRef of ExternalDatabaseVO objects
+
+=cut
+
+sub parseExternalDatabases {
+  my ($self) = @_;
+
+  my $logger = $self->getLogger();
+
+  my @externalDatabaseVos;
+
+  my $termSources = $self->getRowByHeader('^Term Source Name$');
+  my $termSourceVersions = $self->getRowByHeader('^Term Source version');
+  my $termSourceUris = $self->getRowByHeader('^Term Source File');
+
+  return unless($termSources);
+
+  for(my $i = 0; $i < scalar(@$termSources); $i++) {
+    my $term = $termSources->[$i];
+    my $version = $termSourceVersions->[$i];
+    my $uri = $termSourceUris->[$i];
+
+    my $externalDatabase = RAD::MR_T::MageImport::VO::ExternalDatabaseVO->new({name => $term,
+                                                                               version => $version,
+                                                                               uri => $uri,
+                                                                              });
+    $logger->debug("ExternalDatabase:  " . Dumper($externalDatabase));
+
+    push(@externalDatabaseVos, $externalDatabase);
+  }
+  return \@externalDatabaseVos;
+}
+
+
+#--------------------------------------------------------------------------------
+
+=item C<parseProtocols>
+
+Get the rows corresponding to the Protocols.  Will make the ProtocolTypes and the 
+Paramaters.  If the Term Source ExternalDatabase is not found... a warning message
+is logged.  
+
+B<Parameters:>
+
+ $externalDatabaseVos([RAD::MR_T::MageImport::VO::ExternalDatabaseVO]):  ArrayRef of ExternalDatabaseVos
+
+B<Return Type:> 
+
+ C<[RAD::MR_T::MageImport::VO::ProtocolVO]> ArrayRef of ProtocolVO objects
+
+=cut
+
+sub parseProtocols {
+  my ($self, $externalDatabaseVos) = @_;
+
+  my $logger = $self->getLogger();
+
+  my @protocolVos;
+
+  my $protocolNames = $self->getRowByHeader('^Protocol Name');
+  my $protocolDescriptions = $self->getRowByHeader('^Protocol Description');
+  my $protocolParameters = $self->getRowByHeader('^Protocol Parameters');
+  my $protocolTypes = $self->getRowByHeader('^Protocol Type$');
+  my $protocolTermSources = $self->getRowByHeader('^Protocol Type Term');
+
+  for(my $i = 0; $i < scalar(@$protocolNames); $i++) {
+    my $name = $protocolNames->[$i];
+    my $desc = $protocolDescriptions->[$i];
+    my $type = $protocolTypes->[$i];
+    my $termSource = $protocolTermSources->[$i];
+
+    my $typeOeVo = RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value => $type,
+                                                                   category => 'ExperimentalProtocolType'
+                                                                   });
+
+    if($termSource) {
+
+      try {
+        my $extDb = searchObjArrayByObjName($externalDatabaseVos, $termSource);
+        $typeOeVo->setExternalDatabase($extDb);
+      } catch RAD::MR_T::MageImport::MageImportError with {
+        my $e = shift;
+        $logger->fatal($e->text());
+      };
+
+    }
+
+    my @params = split(';', $protocolParameters->[$i]);
+    my @protocolParamVos;
+
+    foreach my $param (@params) {
+      $param =~ s/^\s//g;
+      next unless($param);
+
+      my $paramVo = RAD::MR_T::MageImport::VO::ProtocolParamVO->new({name => $param});
+      push(@protocolParamVos, $paramVo);
+    }
+
+    my $protocol = RAD::MR_T::MageImport::VO::ProtocolVO->
+      new({name => $name,
+           protocolDescription => $desc,
+           params => \@protocolParamVos,
+           protocolType => $typeOeVo,
+          });
+
+    push(@protocolVos, $protocol);
+  }
+  return \@protocolVos;
+}
+
+#--------------------------------------------------------------------------------
+
+=item C<getRowByHeader>
+
+Finds the first line from the file corresponding to a regular expression.  Split the 
+line on the tabs and returns all rows AFTER the row header
+
+B<Parameters:>
+
+ $rowHeaderRegex(string):  match this string
+
+B<Return Type:> 
+
+ C<ARRAYREF> ArrayRef of Strings 
+
+=cut
+
+sub getRowByHeader {
+  my ($self, $rowHeaderRegex) = @_;
+
+  my $lines = $self->getLines();
+
+  foreach my $line (@$lines) {
+    my ($name, @rest) = split(/\t/, $line);
+
+    if($name =~ /$rowHeaderRegex/i) {
+      return \@rest;
+    }
+  }
+  return [];
+}
+
+#--------------------------------------------------------------------------------
+
+sub isOntologyEntryIncluded {
+  my ($self, $oe, $ar) = @_;
+
+  foreach(@$ar) {
+    return 1 if($oe->getValue() eq $_->getValue() && $oe->getCategory() eq $_->getCategory());
+  }
+  return 0;
+}
+
+#================================================================================
+#BEGIN INNER CLASS
+package _BioMaterialAnnotation;
+
+use RAD::MR_T::MageImport::MageImportError;
+use strict;
+
+#--------------------------------------------------------------------------------
+
+sub new {
+  my ($class, $fileLines, $regex, $logger) = @_;
+
+  my ($start, @lines);
+  foreach my $line (@$fileLines) {
+    $start = 1 if($line =~ /$regex/i);
+    next unless($start);
+    unless($line) {
+      last;
+    }
+    else {
+      my @splitLine = split(/\t/, $line);
+
+      # Trim trailing whitespace
+      @splitLine = map {$_ =~ s/\s*$//; $_;} @splitLine;
+      push(@lines, \@splitLine);
+    }
+  }
+
+  unless($start) {
+    RAD::MR_T::MageImport::ReaderException::FileError->
+        new("Expected ROW header [$regex] not found in file")->throw();
+  }
+
+  my $header = shift(@lines);
+  checkSdrfHeader($header);
+
+  bless( {_lines => \@lines,
+          _regex => $regex,
+          _header => $header,
+          _currentLine => 0,
+          _logger => $logger,
+         }, $class);
+}
+
+#--------------------------------------------------------------------------------
+
+sub getLines {$_[0]->{_lines}}
+sub getHeader {$_[0]->{_header}}
+sub getRegex {$_[0]->{_regex}}
+sub getLogger {$_[0]->{_logger}}
+
+sub getCurrentLine {$_[0]->{_currentLine}}
+sub incrementCurrentLine {$_[0]->{_currentLine}++}
+
+#--------------------------------------------------------------------------------
+
+sub hasNextLine {
+  my ($self) = @_;
+
+  my $i = $self->getCurrentLine();
+  my $lines = $self->getLines();
+
+  if($lines->[$i]) {
+    return 1;
+  }
+  return 0;
+}
+
+#--------------------------------------------------------------------------------
+
+sub nextLine {
+  my ($self) = @_;
+
+  my $logger = $self->getLogger();
+
+  my $i = $self->getCurrentLine();
+  my $lines = $self->getLines();
+  my $header = $self->getHeader();
+
+  $self->incrementCurrentLine();
+
+  my $thisLine = $lines->[$i];
+
+  unless(scalar(@$header) == scalar(@$thisLine)) {
+    $logger->fatal("\nHEADER=", join('|', @$header), "\nLINE=", join('|', @$thisLine));
+
+    RAD::MR_T::MageImport::ReaderException::FileError->
+        new("Number of Header lines not equal to BioMaterialAnnotation Lines")->throw();
+  }
+
+  return $thisLine
+}
+
+#--------------------------------------------------------------------------------
+
+sub checkSdrfHeader {
+  my ($header) = @_;
+
+  my @allowed = ('Comment\s?\[.+\]',
+		 'term\s+source\s+ref',
+		 'source\s+name',
+                 'sample\s+name',
+                 'extract\s+name',
+                 'labeledextract\s+name',
+                 'hybridization\s+name',
+                 'scan\s+name',
+                 'normalization\s+name',
+                 'label',
+                 'material\s?type',
+                 'characteristics\s*\[.+\]',
+                 'factor\s?value\s*\[.+\]',
+                 'parameter\s?value\s*\[.+\]',
+                 'unit\s*\[.+\]',
+                 'protocol\s+ref',
+                 'array\s?design\s+ref',
+                 'array\s?data\s+file',
+                 'derived\s?arraydata\s+file',
+                 'image\s+file',
+                 'date',
+                 'description',
+                 'performer',
+                 'provider',
+		 'image file',
+                );
+
+  foreach my $col (@$header) {
+    unless(isInArray(\@allowed, $col)) {
+      RAD::MR_T::MageImport::ReaderException::FileError->
+        new("Unrecognized Header [$col] not supported by MageTab Reader.")->throw();
+    }
+  }
+}
+
+#--------------------------------------------------------------------------------
+
+sub isInArray {
+  my ($ar, $val) = @_;
+
+  foreach(@$ar) {
+    return 1 if($val =~ /$_/i);
+  }
+  return 0;
+}
+
+
+#================================================================================
+# END INNER CLASS
+package RAD::MR_T::MageImport::Service::Reader::MageTabReader;
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Service/Reader/MagemlReader.pm b/lib/perl/RAD/MR_T/MageImport/Service/Reader/MagemlReader.pm
new file mode 100644
index 0000000..5df2444
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Service/Reader/MagemlReader.pm
@@ -0,0 +1,822 @@
+package RAD::MR_T::MageImport::Service::Reader::MagemlReader;
+
+#################################################
+# $Revision: 8341 $ $Date: 2005-10-07 13:42:38 -0400 (Fri, 07 Oct 2005) $ $Author: junmin $
+#################################################
+
+use strict 'vars';
+use Carp;
+
+use Bio::MAGE qw(:ALL);
+use Bio::MAGE::Association;
+use Bio::MAGE::XMLUtils;
+
+use RAD::MR_T::MageImport::Service::AbstractReader;
+use RAD::MR_T::MageImport::VO::DocRoot;
+
+use Data::Dumper;
+use Benchmark;
+
+use vars qw / @ISA / ;
+ at ISA = qw / RAD::MR_T::MageImport::Service::AbstractReader/;
+
+
+=head1 Main METHODS
+
+=over
+
+=item parse($magefile)
+
+Side-effect: the order of parsing is important
+
+=cut
+
+sub parse  {
+  my ($self) = @_;
+
+  my $doc = RAD::MR_T::MageImport::VO::DocRoot->new();
+
+  my $mage = $self->getMage();
+
+  $self->setPersonAndAffiliationVOs($doc, $mage);
+  $self->setExtDBVOs($doc, $mage);
+  $self->setProtocolAndParamVOs($doc, $mage);
+  $self->setStudyVO($doc, $mage);
+  $self->setBioMatVOs($doc, $mage);
+  $self->setTreatmentVOs($doc, $mage);
+  $self->setAssayVOs($doc, $mage);
+
+  my $logger = $self->getLogger();
+  $logger->info("****Dump the whole docRoot****", sub { Dumper($doc) } );
+  return $doc;
+
+}
+
+
+=head1 CLASS PRIVATE METHODS
+
+=over
+
+
+=item getMage
+
+=cut
+
+sub getMage {
+ my $self = shift;
+  my $reader = Bio::MAGE::XML::Reader->new(
+					   #log_file=>"mage.log",
+					   external_data=>1,
+					   verbose=>0
+					  );
+ my $magefile = $self->getFile();
+ croak "File '$magefile' does not exist!\n" unless (-f $magefile || $magefile eq '-' );
+ return $reader->read($magefile);
+}
+
+
+=item setPersonAndAffiliationVOs($doc, $mage)
+
+Description: convert C<$mage> objects to vo objects and add them into C<$doc> .
+
+Input parameters: C<$mage> and C<$doc>
+
+Return value: none 
+
+Side effects: assume only person has affiliation, organization doesn't
+
+Exceptions: none
+
+to-dos:  1) write searchObjArrayByObjName method (done)
+         2) refactor the method of making affvo and personvo
+
+=cut
+
+sub setPersonAndAffiliationVOs {
+  my ($self, $doc, $mage) = @_;
+
+  my $logger = $self->getLogger();
+
+  my $auditAndSecurity_pkg = $mage->getAuditAndSecurity_package(); 
+  my $contacts = $auditAndSecurity_pkg->getContact_list();
+  $logger->debug("Number of contacts:", scalar @$contacts);
+  foreach my $contact (@$contacts){
+     if(UNIVERSAL::isa ($contact, 'Bio::MAGE::AuditAndSecurity::Organization')){
+       my %h;
+       $h{name} = $contact->getName;
+       $h{address} = $contact->getAddress if $contact->getAddress;
+       $h{email} = $contact->getEmail if $contact->getEmail;
+       $h{role} = $contact->getRoles()->[0]->getValue if $contact->getRoles();
+    #   $name = $contact->getParent->getName." ".$name if $contact->getParent;
+    #   $address = $contact->getParent->getAddress if $contact->getParent;
+
+       my $af = RAD::MR_T::MageImport::VO::AffiliationVO->new(\%h);
+       $logger->debug("Dump new affiliation: ", sub { Dumper($af) } );
+       $logger->debug("Organization name: ", $h{name});
+
+       $doc->addAffiliationVOs($af);
+    }
+  }
+
+
+
+  $logger->info("Dump affiliations from docRoot: ", sub { Dumper($doc->getAffiliationVOs) } );
+
+  foreach my $contact (@$contacts){
+    if(UNIVERSAL::isa ($contact, 'Bio::MAGE::AuditAndSecurity::Person')){
+      my %h;
+      $h{name} = $contact->getName if $contact->getName;
+# need to croak if  
+      $h{name} = $contact->getFirstName." ".$contact->getLastName  unless $contact->getName;
+
+      $h{first} = $contact->getFirstName if $contact->getFirstName;
+      $h{last} = $contact->getLastName if $contact->getLastName;
+      $h{address} = $contact->getAddress if $contact->getAddress;
+      $h{email} = $contact->getEmail if $contact->getEmail;
+
+      $h{role} = $contact->getRoles()->[0]->getValue if $contact->getRoles();
+
+      my $p = RAD::MR_T::MageImport::VO::PersonVO->new(\%h);
+      if($contact->getAffiliation){
+	$logger->debug("Affiliation name: ", $contact->getAffiliation->getName);
+	my $af = $self->searchObjArrayByObjName($doc->getAffiliationVOs, $contact->getAffiliation->getName);
+	$p->setAffiliation($af) if $af;
+      }
+      $doc->addPersonVOs($p);
+    }
+  }
+
+  $logger->info("Dump persons from docRoot: ", sub { Dumper($doc->getPersonVOs) } );
+
+}
+
+=item setExtDBVOs($doc, $mage)
+
+Description: convert C<$mage> db objects to vo objects and add them into C<$doc> .
+
+=cut
+
+sub setExtDBVOs {
+  my ($self, $doc, $mage) = @_;
+  my $logger = $self->getLogger();
+
+  my $description_pkg = $mage->getDescription_package(); 
+
+  $logger->debug("Number of dbs:", scalar @{$description_pkg->getDatabase_list});
+
+  foreach my $db (@{$description_pkg->getDatabase_list}){
+    my $db = 
+      RAD::MR_T::MageImport::VO::ExternalDatabaseVO->new({
+							  name=>$db->getName, 
+							  version=>$db->getVersion
+							 });
+    $doc->addExternalDatabaseVOs($db);
+  }
+
+  $logger->info("Dump extDBs from docRoot: ", sub { Dumper($doc->getExternalDatabaseVOs) } );
+
+}
+
+
+=item setProtocolVOs($doc, $mage)
+
+Description: convert C<$mage> protocol objects to vo objects and add them into C<$doc> .
+
+Side effects: assume protocol only has one software and one hardware association
+
+=cut
+
+sub setProtocolAndParamVOs {
+  my ($self, $doc, $mage) = @_;
+
+  my %unitcv2oe = ('h'=>"hours", 's'=>"seconds", 'm'=>"minutes", 'd'=>"days", 'degree_C'=>"degrees_C", 'degree_F'=>"degrees_F");
+
+  my $logger = $self->getLogger();
+  my $protocol_pkg = $mage->getProtocol_package(); 
+
+  foreach my $p (@{$protocol_pkg->getProtocol_list}){
+    my $protocol = 
+      RAD::MR_T::MageImport::VO::ProtocolVO->new({
+						  name=>$p->getName?$p->getName:$p->getIdentifier, 
+						  uri=>$p->getURI,
+						  protocolDescription=>$p->getText
+						 });
+    my $type = $self->map2OEVO($p->getType);
+
+    $protocol->setProtocolType($type);
+
+# only take one software
+    if($p->getSoftwares()){
+      my $sw=$p->getSoftwares()->[0] ;
+      my $swtype = $self->map2OEVO($sw->getType);
+
+      $protocol->setSoftwareType($swtype);
+      $protocol->setSoftwareDescription($sw->getName);
+    }
+# only take one hardware
+    if($p->getHardwares()){
+      my $hw=$p->getHardwares()->[0];
+      my $hwtype = $self->map2OEVO($hw->getType);
+
+      $protocol->setHardwareType($hwtype);
+      $protocol->setHardwareDescription($hw->getName);
+    }
+
+    if($p->getParameterTypes()){
+      foreach my $param (@{$p->getParameterTypes()}){
+	my %h;
+	$h{name} = $param->getName;
+
+	$h{dataType} = $self->map2OEVO($param->getDataType) if $param->getDataType;
+
+	if(my $default = $param->getDefaultValue){
+	  my @types = split('::', ref($default->getUnit));
+	  if(my $unitcv = $default->getUnit->getUnitNameCV){
+	    my $value = $unitcv2oe{$unitcv}?$unitcv2oe{$unitcv}:lc($unitcv);
+	    $h{unitType} = RAD::MR_T::MageImport::VO::OntologyEntryVO->new({
+									    value=>$value,
+									    category=>$types[scalar(@types) - 1]
+									   });
+	  }
+
+	 $h{value} = $default->getValue;
+	}
+
+	$protocol->addParams(RAD::MR_T::MageImport::VO::ProtocolParamVO->new(\%h));
+      }
+    }
+    $doc->addProtocolVOs($protocol);
+  }
+
+ $logger->info("Dump protocols from docRoot: ", sub { Dumper($doc->getProtocolVOs) } );
+}
+
+
+
+=item setStudyVO($doc, $mage)
+
+Description: convert C<$mage> study,studydesign, studyfactor objects to vo objects and add them into C<$doc> .
+
+to-dos: 1) retrieve bibliographRef
+        2) handle mutiple study designs
+        3) need method: getPersonVOByLastAndFirst
+
+=cut
+
+sub setStudyVO {
+  my ($self, $doc, $mage) = @_;
+  my $logger = $self->getLogger();
+  my $experiment_pkg = $mage->getExperiment_package();
+#note we only handle MAGE-ML with only one experiment obj
+  my $experiment = $experiment_pkg->experiment_list()->[0];
+
+  my $studyvo = 
+    RAD::MR_T::MageImport::VO::StudyVO->new({
+					     name=>$experiment->getName 
+					    });
+
+  foreach my $contact (@{$experiment->getProviders}){
+    next unless $contact->getRoles();
+    foreach my $role(@{ $contact->getRoles()}){
+      if ($role->getValue eq "submitter"){
+	my $name;
+	$name = $contact->getName if $contact->getName;
+	$name = $contact->getFirstName." ".$contact->getLastName  unless $contact->getName;
+	my $p = $self->searchObjArrayByObjName($doc->getPersonVOs, $name);
+	$studyvo->setContact($p);
+      }
+    }
+  }
+
+  foreach my $desc (@{$experiment->getDescriptions()}){
+    $studyvo->setDescription($desc->getText) if $desc->getText;
+    if(my $bbfs = $desc->getBibliographicReferences){
+      if(my $dbref = $bbfs->[0]->getAccessions){
+	$studyvo->setPubMedId($dbref->[0]->getAccession);
+      }
+    }
+  }
+
+  my $design = $experiment->getExperimentDesigns()->[0];
+
+  my $sdvo = 
+    RAD::MR_T::MageImport::VO::StudyDesignVO->new({
+						   name=>$experiment->getName." design" 
+						  });
+
+  foreach my $type(@{$design->getTypes}){
+    my $sdoe = $self->map2OEVO($type);
+    $sdvo->addTypes($sdoe);
+  }
+
+  $studyvo->addDesigns($sdvo);
+
+  my $experimentFactor = $design->getExperimentalFactors();
+
+  $self->makeFactorValue2FactorHash($experimentFactor);
+
+
+  foreach my $factor(@$experimentFactor){
+    my $type = $factor->getCategory;
+    my $sfoe = $self->map2OEVO($type);
+
+    my $name = $factor->getName?$factor->getName:$type->getValue;
+
+    my $sfvo = 
+       RAD::MR_T::MageImport::VO::StudyFactorVO->new({
+						      name=>$name 
+						     });
+
+
+
+    $sfvo->setType($sfoe);
+    $sdvo->addFactors($sfvo);
+  }
+
+  $doc->studyVO($studyvo);
+
+ $logger->info("Dump studyvo from docRoot: ", sub { Dumper($doc->getStudyVO) } );
+}
+
+=item setBioMatVOs($doc, $mage)
+
+Description: convert C<$mage> material objects to vo objects and add them into C<$doc> .
+
+Side effect: 1)assume each biomat only have one text field for all descriptions
+             2)assume one label per lex
+
+To-dos: 1) need to figure out how to handle label method for lex
+
+=cut
+
+sub setBioMatVOs{
+  my ($self, $doc, $mage) = @_;
+  my $logger = $self->getLogger();
+
+  my $biomat_pkg = $mage->getBioMaterial_package();
+
+  foreach my $biomat (@{$biomat_pkg->getBioMaterial_list}){
+    my %h;
+
+    if((UNIVERSAL::isa($biomat, 'Bio::MAGE::BioMaterial::LabeledExtract' ))){
+      $h{subclassView} = 'LabeledExtract';
+
+      $h{channel} = 
+	RAD::MR_T::MageImport::VO::OntologyEntryVO->new({
+							 value=>$biomat->getLabels()->[0]->getName, 
+							 category=>"LabelCompound" 
+							});
+    }
+
+    if((UNIVERSAL::isa($biomat, 'Bio::MAGE::BioMaterial::BioSample' ))){
+      $h{subclassView} = 'BioSample';
+    }
+
+    if((UNIVERSAL::isa($biomat, 'Bio::MAGE::BioMaterial::BioSource' ))){
+      $h{subclassView} = 'BioSource';
+    }
+
+    $h{name}=$biomat->getName;
+
+#assume each biomat only have one text field for all descriptions
+    if(my $descs = $biomat->getDescriptions()){
+      foreach my $desc (@$descs){
+	$h{description} = $desc->getText if $desc->getText;
+      }
+    }
+
+    $h{bioMaterialType}=$self->map2OEVO($biomat->getMaterialType);
+
+    my @oevos;
+
+    if(my $chars = $biomat->getCharacteristics()){
+      foreach my $mageoe (@$chars){
+	push @oevos, $self->map2OEVO($mageoe);
+      }
+    }
+
+
+    $h{bioMaterialChars} = \@oevos;
+
+    my $biomatvo = RAD::MR_T::MageImport::VO::BioMaterialVO->new(\%h);
+    $self->addToId2BioMatVoHash($biomat->getIdentifier, $biomatvo);
+    $doc->addBioMaterialVOs($biomatvo);
+
+  }
+
+ $logger->info("Dump BioMaterialVOs from docRoot: ", sub { Dumper($doc->getBioMaterialVOs) } );
+ $logger->info("Dump Id2BioMatVoHash from docRoot: ", sub { Dumper($self->getId2BioMatVoHash) } );
+}
+
+=item setTreatmentVOs($doc, $mage)
+
+Description: convert C<$mage> material objects to vo objects and add them into C<$doc> .
+
+Side effects: treatment only has one pa 
+
+To-dos: 1)need to read treatment param
+
+=cut
+
+sub setTreatmentVOs{
+  my ($self, $doc, $mage) = @_;
+  my $logger = $self->getLogger();
+
+  my $biomat_pkg = $mage->getBioMaterial_package();
+  foreach my $biomat (@{$biomat_pkg->getBioMaterial_list}){
+    #this will handle treatment steps
+    #biosource doesn't have treatment
+    if(my $trts = $biomat->getTreatments()){
+      foreach my $trt (@$trts){
+	my %h;
+	$h{name} = $trt->getName? $trt->getName : $trt->getIdentifier;
+	$h{outputBM} = $self->searchObjArrayByObjName($doc->getBioMaterialVOs, $biomat->getName);
+	#treatment only have order if it is series
+	$h{orderNum} = $trt->getOrder if $trt->getOrder;
+	$h{treatmentType}=$self->map2OEVO($trt->getAction);
+
+	# treatment only has one pa
+	if($trt->getProtocolApplications()){
+	  $h{protocol} = $self->searchObjArrayByObjName($doc->getProtocolVOs,
+							$trt->getProtocolApplications()->[0]->getProtocol()->getName
+						       );
+	}
+
+	$self->setProtocolAndParamValues(\%h,$trt);
+
+	my $trtVO = RAD::MR_T::MageImport::VO::TreatmentVO->new(\%h);
+
+	foreach my $sbmm (@{$trt->getSourceBioMaterialMeasurements()}){
+	    $trtVO->addInputBMMs($self->map2BMMVO($sbmm, $doc));
+	}
+
+	$doc->addTreatmentVOs($trtVO);
+      }
+    }
+  }
+
+ $logger->info("Dump TreatmentVOs from docRoot: ", sub { Dumper($doc->getTreatmentVOs) } );
+}
+
+=item setAssayVOs
+
+Side effect: 1) assign the assay operator to the submitter,
+                for the mage doc doesn't have it
+             2) only deal with the DBA which is one level down from MBA
+
+To-dos: 1) code for 2-channel assays (done)
+        2) code for link assayLex and assayBioMat (done)
+        3) code for array identifier and batch for assay table
+        4) code for assayParam (done)
+
+=cut
+
+sub setAssayVOs{
+  my ($self, $doc, $mage) = @_;
+  my $logger = $self->getLogger();
+
+  my %id2assayvo = ();
+  my %id2acquisitionvo = ();
+  my %id2quantificationvo = ();
+  my %mbaid2acquisitionvo = ();
+  my @channelNames = ();
+
+  my $assay_pkg = $mage->getBioAssay_package();
+
+  foreach my $assay (@{$assay_pkg->getBioAssay_list}){
+    my $assayvo;
+    if((UNIVERSAL::isa($assay, 'Bio::MAGE::BioAssay::PhysicalBioAssay' ))){
+      my $bac = $assay->getBioAssayCreation();
+      if((UNIVERSAL::isa($bac, 'Bio::MAGE::BioAssay::Hybridization' ))){
+	@channelNames = ();
+	$assayvo = $self->makeAssayVO($bac, $doc);
+	$logger->debug("Dump AssayVO created: ", sub { Dumper($assayvo) } );
+
+	#get lex, this code is very vunerable to XML file, we need to watch this line
+	foreach my $sbmm (@{$bac->getSourceBioMaterialMeasurements()}){
+	  push @channelNames, $sbmm->getBioMaterial->getLabels()->[0]->getName;
+	  $assayvo->addLabeledExtracts($self->getId2BioMatVoHash->{$sbmm->getBioMaterial()->getIdentifier}); 
+	}
+	$logger->debug("Dump channel names for this assay: ", sub {Dumper(\@channelNames)});
+	$id2assayvo{$assay->getIdentifier} = $assayvo;  
+	$doc->addAssayVOs($assayvo); 
+      }
+    }
+  }
+
+  foreach my $assay (@{$assay_pkg->getBioAssay_list}){
+    if((UNIVERSAL::isa($assay, 'Bio::MAGE::BioAssay::PhysicalBioAssay' ))){
+      if($assay->getBioAssayTreatments){ 
+	foreach my $bat (@{$assay->getBioAssayTreatments}){
+	  if((UNIVERSAL::isa($bat, 'Bio::MAGE::BioAssay::ImageAcquisition' ))){
+	    my $acquisitionvo = $self->makeAcquisitionVO($bat, $assay, \%id2assayvo, \%id2acquisitionvo);
+	    if(!$acquisitionvo->getChannels){
+	      my @channelOEs = ();
+	      foreach my $channelName(@channelNames){
+		push @channelOEs, RAD::MR_T::MageImport::VO::OntologyEntryVO->new({
+										   value=>$channelName, 
+										   category=>"LabelCompound" 
+										  });
+	      }
+	      $acquisitionvo->setChannels(\@channelOEs);
+	    }
+	    $logger->debug("Dump AcquisitionVO created: ", sub { Dumper($acquisitionvo) } );
+	  }#if imageAcquisition
+	}#foreach
+      }
+    }#if(PhysicalBioAssay)
+  }
+
+  $logger->debug("Dump AssayVO created with AcquisitionVO: ", sub { Dumper($doc->getAssayVOs) } );
+
+  foreach my $assay (@{$assay_pkg->getBioAssay_list}){
+    if((UNIVERSAL::isa($assay, 'Bio::MAGE::BioAssay::MeasuredBioAssay' ))){
+      my $fe = $assay->getFeatureExtraction();
+      my $quantificationvo = $self->makeQuantificationVO($assay);
+      $logger->debug("Dump QuantificationVO created: ", sub { Dumper($quantificationvo) } );
+      if(my $pba = $fe->getPhysicalBioAssaySource()){
+	if(my $acquisitionvo = $id2acquisitionvo{$pba->getIdentifier}){
+	  $logger->debug("acquisition found: ", sub {Dumper($acquisitionvo)});
+	  $acquisitionvo->addQuantifications($quantificationvo);
+	  $id2quantificationvo{$assay->getIdentifier} = $quantificationvo;
+	  $mbaid2acquisitionvo{$assay->getIdentifier} = $acquisitionvo;
+	}
+      }
+    }#if(MeasuredBioAssay)
+  }
+
+  my %id2processvo = ();
+  foreach my $assay (@{$assay_pkg->getBioAssay_list}){
+    if(UNIVERSAL::isa($assay, 'Bio::MAGE::BioAssay::DerivedBioAssay' )){
+      my $processvo = $self->makeProcessVO($assay);
+      $id2processvo{$assay->getIdentifier} = $processvo;
+    }
+  }
+  if( $mage->getBioAssayData_package() && $mage->getBioAssayData_package()->getBioAssayMap_list()){
+    foreach my $assayMap (@{$mage->getBioAssayData_package()->getBioAssayMap_list()}){
+      my $processvo = $id2processvo{$assayMap->getBioAssayMapTarget->getIdentifier};
+      foreach my $sba (@{$assayMap->getSourceBioAssays}){
+	if(UNIVERSAL::isa($sba, 'Bio::MAGE::BioAssay::MeasuredBioAssay')){
+	  $id2quantificationvo{$sba->getIdentifier}->addProcesses($processvo);
+	}
+	if(UNIVERSAL::isa($sba, 'Bio::MAGE::BioAssay::DerivedBioAssay')){
+	  $id2processvo{$sba->getIdentifier}->addTargets($processvo);
+	}
+      }
+    }
+  }
+
+#   if($channelNames[0] =~ /biotin/i){
+
+#   foreach my $assay (@{$assay_pkg->getBioAssay_list}){
+#     if(UNIVERSAL::isa($assay, 'Bio::MAGE::BioAssay::DerivedBioAssay' )){
+#       my $assayMap;
+#       if ($assay->getDerivedBioAssayMap){
+# 	$assayMap = $assay->getDerivedBioAssayMap->[0];
+#       }
+#       elsif($assay->getDerivedBioAssayData && $assay->getDerivedBioAssayData->[0]->getProducerTransformation){
+# 	$assayMap = $assay->getDerivedBioAssayData->[0]->getProducerTransformation->getBioAssayMapping->getBioAssayMaps->[0];
+#       }
+#       else{
+# 	next;
+#       }
+#       my $chpQuantificationvo = $self->makeCHPQuantificationVO($assay);
+#       foreach my $sba (@{$assayMap->getSourceBioAssays}){
+# 	if(UNIVERSAL::isa($sba, 'Bio::MAGE::BioAssay::MeasuredBioAssay')){
+# 	  $mbaid2acquisitionvo{$sba->getIdentifier}->addQuantifications($chpQuantificationvo);
+# 	}
+#       }
+#     }#if(DerivedBioAssay) only deal with the DBA which is one level down from MBA#if(DerivedBioAssay)
+#   }
+# }
+
+ $logger->info("Dump AssayVOs from docRoot: ", sub { Dumper($doc->getAssayVOs) } );
+}
+
+
+=item makeAssayVO()
+
+=cut
+
+sub makeAssayVO{
+ my ($self, $bac, $doc) = @_;
+ my %h;
+ $h{name} = $bac->getName? $bac->getName:$bac->getIdentifier;
+ # $h{name} = $assay->getName? $assay->getName:$assay->getIdentifier;
+ $h{arraySourceId} = $bac->getArray->getArrayDesign->getIdentifier;
+ #set submitter name to operator
+ $h{operator} = $doc->getStudyVO->getContact;
+ $self->setProtocolAndParamValues(\%h,$bac);
+
+ return RAD::MR_T::MageImport::VO::AssayVO->new(\%h);
+}
+
+sub setProtocolAndParamValues{
+  my ($self, $h, $bac) = @_;
+  if($bac->getProtocolApplications() && $bac->getProtocolApplications()->[0]->getProtocol()){
+    my $pas = $bac->getProtocolApplications();
+    my $p = $pas->[0]->getProtocol();
+    $h->{protocolName} = $p->getName?$p->getName:$p->getIdentifier;
+    if(my $pvs = $pas->[0]->getParameterValues){
+      my @parameterValueVOs = ();
+      foreach my $magePV (@$pvs){
+	if(my $pname = $magePV->getParameterType->getName){
+	  my %h;
+	  $h{value} = $magePV->getValue;
+	  $h{parameterName} = $pname;
+	  push @parameterValueVOs, RAD::MR_T::MageImport::VO::ParameterValueVO->new(\%h);
+	}
+	else{
+	  my %h;
+	  $h{value} = $magePV->getValue;
+	  $h{parameterName} = $magePV->getParameterType->getIdentifier;
+	  push @parameterValueVOs, RAD::MR_T::MageImport::VO::ParameterValueVO->new(\%h);
+	}
+      }
+      $h->{parameterValues} = \@parameterValueVOs if $parameterValueVOs[0];
+    }
+  }
+}
+
+
+sub makeAcquisitionVO{
+  my ($self, $bat, $assay, $id2assayvo, $id2acquisitionvo) = @_;
+  my %h;
+
+  $self->setProtocolAndParamValues(\%h,$bat);
+
+  $h{uri} = $assay->getPhysicalBioAssayData->[0]->getName if($assay->getPhysicalBioAssayData && $assay->getPhysicalBioAssayData->[0]->getName);
+
+  my ($assayvo, $mageassay);
+  #AE's way: IA targets Hyb 
+  if($assayvo = $id2assayvo->{$bat->getTarget->getIdentifier}){
+    $mageassay = $assay;
+  }
+  #Standard way: IA targets Image, the $assay itself is the hyb
+  elsif($assayvo = $id2assayvo->{$assay->getIdentifier}){
+    $mageassay = $bat->getTarget;
+  }
+  else{
+    die "could not find assay for acquisition";
+  }
+
+  $h{name} = $mageassay->getName?$mageassay->getName:$bat->getIdentifier;
+
+  if($mageassay->getChannels){
+    my $channelName = $mageassay->getChannels->[0]->getName;
+    $h{channels} = [RAD::MR_T::MageImport::VO::OntologyEntryVO->new({
+								     value=>$channelName, 
+								     category=>"LabelCompound" 
+								    })
+		   ];
+  }
+  my $acquisitionvo = RAD::MR_T::MageImport::VO::AcquisitionVO->new(\%h);
+  $id2acquisitionvo->{$mageassay->getIdentifier} = $acquisitionvo;
+  $assayvo->addAcquisitions($acquisitionvo);
+  $self->addFactorValue($mageassay, $acquisitionvo);
+  return $acquisitionvo;
+}
+
+sub addFactorValue{
+  my ($self, $assay, $acquisitionvo) = @_;
+  #some MAGE-ML doesn't have factorValues
+  if($assay->getBioAssayFactorValues()){
+    foreach my $fv (@{$assay->getBioAssayFactorValues()}){
+      my $magefactor = $fv->getExperimentalFactor() if $fv->getExperimentalFactor();
+      $magefactor = $self->getFactorValue2FactorHash->{$fv->getIdentifier};
+      #deal with OE factor value for now
+      my $mageoe = $fv->getValue;
+      my $oevo=$self->map2OEVO($mageoe) if $mageoe;
+      $acquisitionvo->addFactorValues(RAD::MR_T::MageImport::VO::FactorValueVO->new({factorName=>$magefactor->getName, value=>$oevo}));
+    }
+  }
+}
+
+sub makeQuantificationVO{
+  my ($self, $assay) = @_;
+  my $fe = $assay->getFeatureExtraction();
+  my %h;
+  $h{name} = $assay->getName? $assay->getName:$assay->getIdentifier;
+  $h{uri} = $assay->getMeasuredBioAssayData->[0]->getBioDataValues->getCube
+    if ($assay->getMeasuredBioAssayData && $assay->getMeasuredBioAssayData->[0]->getBioDataValues) ;
+  $self->setProtocolAndParamValues(\%h,$fe);
+  return RAD::MR_T::MageImport::VO::QuantificationVO->new(\%h);
+
+}
+
+=item makeCHPQuantificationVO
+
+Side effect: assume everything works perfect here!!!
+
+To-do: need a lot of checks
+
+=cut
+
+sub makeCHPQuantificationVO{
+  my ($self, $assay) = @_;
+  my %h;
+  $h{name} = $assay->getName? $assay->getName:$assay->getIdentifier;
+
+  if(my $dbad = $assay->getDerivedBioAssayData){
+    $h{uri} = $dbad->[0]->getBioDataValues->getCube;
+    $self->setProtocolAndParamValues(\%h,$dbad->[0]->getProducerTransformation);
+  }
+
+  return RAD::MR_T::MageImport::VO::QuantificationVO->new(\%h);
+}
+
+sub makeProcessVO{
+  my ($self, $assay) = @_;
+  my %h;
+  $h{name} = $assay->getName? $assay->getName:$assay->getIdentifier;
+
+  if(my $dbad = $assay->getDerivedBioAssayData){
+    $h{uri} = $dbad->[0]->getBioDataValues->getCube;
+    $self->setProtocolAndParamValues(\%h,$dbad->[0]->getProducerTransformation);
+  }
+
+  return RAD::MR_T::MageImport::VO::ProcessVO->new(\%h);
+}
+
+=item map2BMMVO
+
+Side Effect: note the unit oe only has value no category, we should be able to retrieve the unit oe from rad based on value
+
+=cut
+
+sub map2BMMVO{
+  my ($self, $mageBMM, $doc) = @_;
+  my $logger = $self->getLogger();
+  my %h;
+
+  $logger->debug("search biomat id:", $mageBMM->getBioMaterial()->getIdentifier);
+
+  $h{bioMaterial} = $self->getId2BioMatVoHash->{$mageBMM->getBioMaterial()->getIdentifier}; 
+
+  if($mageBMM->getMeasurement()){
+  $h{value} = $mageBMM->getMeasurement()->getValue();
+  $h{unitType} = 
+    RAD::MR_T::MageImport::VO::OntologyEntryVO->new({
+						     value=>$mageBMM->getMeasurement()->getUnit()->getUnitName(), 
+						     category=>'Unit'
+						    }) if $mageBMM->getMeasurement()->getUnit();
+}
+  return RAD::MR_T::MageImport::VO::BioMaterialMeasurementVO->new(\%h);
+}
+
+#Util methods
+sub map2OEVO{
+  my ($self, $mageoe) = @_;
+  return RAD::MR_T::MageImport::VO::OntologyEntryVO->new({
+							  value=>$mageoe->getValue, 
+							  category=>$mageoe->getCategory 
+							 });
+}
+
+sub addToId2BioMatVoHash{
+    my ($self, $id, $vo) = @_;
+    $self->{_id2biomatvo}->{$id} = $vo;
+}
+
+sub getId2BioMatVoHash{
+    my $self = shift;
+    return $self->{_id2biomatvo};
+}
+
+
+sub addToMBA2AcquisitionVOHash{
+  my ($self, $mbaId, $acquisitionvo) = @_;
+  $self->{_mba2acqvo} ->{$mbaId} = $acquisitionvo;
+}
+
+sub makeFactorValue2FactorHash{
+  my ($self, $experimentFactors)=@_;
+  my %fv2f;
+  foreach my $factor (@$experimentFactors){
+    if($factor->getFactorValues){
+      foreach my $fv (@{$factor->getFactorValues}){
+	$fv2f{$fv->getIdentifier} = $factor;
+      }  
+    }
+  }
+  $self->{_fv2f} = \%fv2f;
+}
+
+sub getFactorValue2FactorHash{
+  my $self=shift;
+  return $self->{_fv2f};
+}
+
+
+sub searchObjArrayByObjName{
+ my ($self, $objArray, $name) = @_;
+
+ my $logger = $self->getLogger();
+
+ foreach my $obj(@$objArray){
+   $logger->debug("search name: ", $name, "obj name: ", $obj->getName);
+   return $obj if $obj->getName eq $name;
+ }
+}
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Service/Reader/MockReader.pm b/lib/perl/RAD/MR_T/MageImport/Service/Reader/MockReader.pm
new file mode 100644
index 0000000..77e4436
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Service/Reader/MockReader.pm
@@ -0,0 +1,386 @@
+package RAD::MR_T::MageImport::Service::Reader::MockReader;
+
+#################################################
+# $Revision: 8341 $ $Date: 2005-10-07 13:42:38 -0400 (Fri, 07 Oct 2005) $ $Author: junmin $
+#################################################
+
+use strict 'vars';
+use Carp;
+
+use RAD::MR_T::MageImport::Service::AbstractReader;
+use RAD::MR_T::MageImport::VO::DocRoot;
+
+use vars qw / @ISA / ;
+ at ISA = qw / RAD::MR_T::MageImport::Service::AbstractReader/;
+
+sub parse  {
+  my $self = shift;
+  my $doc = RAD::MR_T::MageImport::VO::DocRoot->new();
+
+  $self->setProtocolVOs($doc);
+  $self->setExtDBVOs($doc);
+
+  my $studyContact = $self->setPersonAndAffiliationVOs($doc);
+  $self->setStudyVO($doc, $studyContact);
+
+  $self->setBioMatAndTreatmentVOs($doc, $studyContact);
+
+  $self->setAssayToQuantVOs($doc);
+
+  return $doc;
+
+}
+
+sub setAssayToQuantVOs {
+  my ($self, $doc) = @_;
+
+  my $process1 =  RAD::MR_T::MageImport::VO::ProcessVO->new({name => 'process_1',
+                                                             uri => 'process_1.uri',
+                                                            });
+
+  my $process2 =  RAD::MR_T::MageImport::VO::ProcessVO->new({name => 'process_2',
+                                                             uri => 'process_2.uri',
+                                                            });
+
+  my $process3 =  RAD::MR_T::MageImport::VO::ProcessVO->new({name => 'process_3',
+                                                             uri => 'process_3.uri',
+                                                             targets => [$process1, $process2],
+                                                            });
+
+
+  my $quantification1 = RAD::MR_T::MageImport::VO::QuantificationVO->new({name => 'quantification_1',
+                                                                          uri => 'quantification_1.uri',
+                                                                          processes => [$process1, $process2],
+                                                                         });
+
+  my $quantification2 = RAD::MR_T::MageImport::VO::QuantificationVO->new({name => 'quantification_2',
+                                                                          uri => 'quantification_2.uri',
+                                                                          processes => [$process3],
+                                                                         });
+
+  my $quantification3 = RAD::MR_T::MageImport::VO::QuantificationVO->new({name => 'quantification_3',
+                                                                          uri => 'quantification_3.uri',
+                                                                          protocolName => 'protocol_labeling',
+                                                                          processes => [$process3],
+                                                                          parameterValues => [ RAD::MR_T::MageImport::VO::ParameterValueVO->new({value => 'quantification_param_value_1' , parameterName => 'protocol_param_1' }),
+                                                                                               RAD::MR_T::MageImport::VO::ParameterValueVO->new({value => 'quantification_param_value_2' , parameterName => 'protocol_param_2' }),
+                                                                                             ],
+                                                                         });
+
+  my $quantification4 = RAD::MR_T::MageImport::VO::QuantificationVO->new({name => 'quantification_4',
+                                                                          uri => 'quantification_4.uri',
+                                                                         });
+
+  my $quantifications1 = [$quantification1, $quantification3];
+  my $quantifications2 = [$quantification2, $quantification4];
+
+  my $factorValues1 = [ RAD::MR_T::MageImport::VO::FactorValueVO->new({factorName => 'studyFactor_1',
+                                                                      value => RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value => 'studyFactorValue_Cy3_1', category => ''}),
+                                                                      }),
+                       RAD::MR_T::MageImport::VO::FactorValueVO->new({factorName => 'studyFactor_2',
+                                                                      value => RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value => 'studyFactorValue_Cy3_2', category => ''}),
+                                                                      }),
+                     ];
+
+  my $factorValues2 = [ RAD::MR_T::MageImport::VO::FactorValueVO->new({factorName => 'studyFactor_1',
+                                                                      value => RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value => 'studyFactorValue_Cy5_1', category => ''}),
+                                                                      }),
+                       RAD::MR_T::MageImport::VO::FactorValueVO->new({factorName => 'studyFactor_2',
+                                                                      value => RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value => 'studyFactorValue_Cy5_2', category => ''}),
+                                                                      }),
+                     ];
+
+
+  my $acquisition1 = RAD::MR_T::MageImport::VO::AcquisitionVO->new({name => 'acquisition_1',
+                                                                    uri => 'acquisition_1.uri',
+                                                                    channels => [RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value => 'Cy3', category => 'LabelCompound'}),
+                                                                                 RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value => 'Cy5', category => 'LabelCompound'})],
+                                                                    quantifications => $quantifications1,
+                                                                    factorValues => $factorValues1,
+                                                                    protocolName => 'protocol_labeling',
+                                                                    parameterValues => [ RAD::MR_T::MageImport::VO::ParameterValueVO->new({value => 'acquisition_param_value_1' , parameterName => 'protocol_param_1' }),
+                                                                                         RAD::MR_T::MageImport::VO::ParameterValueVO->new({value => 'acquisition_param_value_2' , parameterName => 'protocol_param_2' }),
+                                                                                       ],
+                                                                   });
+
+  my $acquisition2 = RAD::MR_T::MageImport::VO::AcquisitionVO->new({name => 'acquisition_2',
+                                                                    uri => 'acquisition_2.uri',
+                                                                    channels => [RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value => 'Cy5', category => 'LabelCompound'}),
+                                                                                 RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value => 'Cy3', category => 'LabelCompound'})],
+                                                                    quantifications => $quantifications2,
+                                                                    factorValues => $factorValues2,
+                                                                   });
+
+  my $acquisitions1 = [$acquisition1];
+  my $acquisitions2 = [$acquisition2];
+
+  my $persons = $doc->getPersonVOs();
+  my $lex = $doc->getBioMaterialVOs()->[2];
+
+  my $assay1 = RAD::MR_T::MageImport::VO::AssayVO->new({name => 'assay_1' , 
+                                                        studyName => 'study', 
+                                                        acquisitions => $acquisitions1,
+                                                        arraySourceId => 'A-AFFY-13',
+                                                        operator => $persons->[0],
+                                                        protocolName => 'protocol_extraction',
+                                                        labeledExtracts => [$lex],
+                                                       });
+
+  my $assay2 = RAD::MR_T::MageImport::VO::AssayVO->new({name => 'assay_2' , 
+                                                        studyName => 'study', 
+                                                        acquisitions => $acquisitions2,
+                                                        arraySourceId => 'A-AFFY-14',
+                                                        operator => $persons->[1],
+                                                        protocolName => 'protocol_labeling',
+                                                        labeledExtracts => [$lex],
+                                                        parameterValues => [ RAD::MR_T::MageImport::VO::ParameterValueVO->new({value => 'assay_param_value_1' , parameterName => 'protocol_param_1' }),
+                                                                             RAD::MR_T::MageImport::VO::ParameterValueVO->new({value => 'assay_param_value_2' , parameterName => 'protocol_param_2' }),
+                                                                           ],
+                                                       });
+
+  $doc->assayVOs([$assay1,$assay2]);
+
+}
+
+sub setBioMatAndTreatmentVOs{
+  my $class = shift;
+  my $doc = shift;
+  my $contact = shift;
+ 
+  my $biosource = 
+    RAD::MR_T::MageImport::VO::BioMaterialVO->new({
+						   name=>"bioSource",
+						   description=>"bioSource_description", 
+						   subclassView=>"BioSource", 
+						   bioMaterialType=>RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value=>"whole_organism", category=>"MaterialType"}),
+                                                   provider => $contact,
+                                                   bioMaterialChars =>  [ RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value=>"NOD", category=>"StrainOrLine"}),
+                                                                          RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value=>"female", category=>"Sex"}),
+                                                                        ]
+						  }); 
+
+  my $biosample = 
+    RAD::MR_T::MageImport::VO::BioMaterialVO->new({
+						   name=>"bioSample",
+						   description=>"bioSample_description", 
+						   subclassView=>"BioSample", 
+						   bioMaterialType=>RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value=>"total_RNA", category=>"MaterialType"})
+						  }); 
+
+  my $protocols = $doc->getProtocolVOs();
+  my $lp = $protocols->[0]; # This one has 2 parameters
+
+ # my $lp = RAD::MR_T::MageImport::VO::ProtocolVO->new({
+#						       name=>"protocol_labeling", 
+#						       protocolDescription=>"protocol_labeling_description",
+#						       uri=>"protocol_labeling_uri", 
+#						       protocolType=>RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value=>"labeling", category=>"ExperimentalProtocolType"}),
+#						      });
+
+  my $lex = 
+    RAD::MR_T::MageImport::VO::BioMaterialVO->new({
+						   name=>"labeledExtract",
+						   description=>"labeledExtract_description", 
+						   subclassView=>"LabeledExtract", 
+						   channel=>RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value=>"Cy3", category=>"LabelCompound"}),
+						   bioMaterialType=>RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value=>"DNA", category=>"MaterialType"})
+						  }); 
+
+  $doc->bioMaterialVOs([$biosource, $biosample, $lex]);
+
+  my $bm1 = 
+    RAD::MR_T::MageImport::VO::BioMaterialMeasurementVO->new({
+							      value=>"10", 
+							      bioMaterial=>$biosource, 
+							      unitType=>RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value=>"cc", category=>"VolumeUnit"})}
+							    ); 
+
+
+  my $lp1 =
+    RAD::MR_T::MageImport::VO::ProtocolVO->new({
+						name=>"protocol_extraction", 
+						protocolDescription=>"protocol_extraction_description",
+						uri=>"protocol_extraction_uri", 
+						protocolType=>RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value=>"extraction", category=>"ExperimentalProtocolType"}),
+					       });
+
+ my $bm2 = 
+    RAD::MR_T::MageImport::VO::BioMaterialMeasurementVO->new({
+							      value=>"10", 
+							      bioMaterial=>$biosample, 
+							      unitType=>RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value=>"ml", category=>"VolumeUnit"})}
+							    ); 
+
+ my $t0 = 
+    RAD::MR_T::MageImport::VO::TreatmentVO->new({
+						 name=>"treatment_pool", 
+						 orderNum=> 1, 
+						 outputBM=>$biosample,
+						 inputBMMs=>[$bm1, $bm2],
+						 protocol=>$lp1,
+						 treatmentType=>RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value=>"pool", category=>"ExperimentalProtocolType"}),
+						});
+
+ my $t1 = 
+    RAD::MR_T::MageImport::VO::TreatmentVO->new({
+						 name=>"treatment_grow", 
+						 orderNum=> 2, 
+						 outputBM=>$biosample,
+						 inputBMMs=>[$bm1],
+						 protocol=>$lp1,
+						 treatmentType=>RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value=>"grow", category=>"ExperimentalProtocolType"}),
+						});
+
+  my $t2 = 
+    RAD::MR_T::MageImport::VO::TreatmentVO->new({
+						 name=>"treatment_extraction", 
+						 orderNum=> 1, 
+						 outputBM=>$biosample,
+						 inputBMMs=>[$bm1],
+						 protocol=>$lp1,
+						 treatmentType=>RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value=>"nucleic_acid_extraction", category=>"ExperimentalProtocolType"}),
+						});
+
+  # THis on has the parameters...
+  my $t3 = 
+    RAD::MR_T::MageImport::VO::TreatmentVO->new({
+						 name=>"treatment_labeling", 
+						 orderNum=>1, 
+						 outputBM=>$lex,
+						 inputBMMs=>[$bm2],
+						 protocol=>$lp,
+						 treatmentType=>RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value=>"labeling", category=>"ExperimentalProtocolType"}),
+                                                 parameterValues => [ RAD::MR_T::MageImport::VO::ParameterValueVO->new({value => 'treatment_param_value_1' , parameterName => 'protocol_param_1' }),
+                                                                      RAD::MR_T::MageImport::VO::ParameterValueVO->new({value => 'treatment_param_value_2' , parameterName => 'protocol_param_2' }),
+                                                                    ],
+						});
+
+  $doc->treatmentVOs([$t0, $t1, $t2, $t3]);
+
+}
+
+sub setPersonAndAffiliationVOs{
+  my $class = shift;
+  my $doc = shift;
+
+  my $af1 = RAD::MR_T::MageImport::VO::AffiliationVO->new({name=>"affiliation_1"});
+  my $af2 = RAD::MR_T::MageImport::VO::AffiliationVO->new({name=>"affiliation_2"});
+  my $p1 = 
+    RAD::MR_T::MageImport::VO::PersonVO->new({
+					      name=>"person_1",
+					      first=>"person_1_first",
+					      last=>"person_1_last",
+					      address=>"person_1_address",
+					      email=>"person_1_email",
+					      affiliation=>$af1
+					     });
+
+  my $p2 = 
+    RAD::MR_T::MageImport::VO::PersonVO->new({
+					      name=>"person_2",
+					      first=>"person_2_first",
+					      last=>"person_2_last",
+					      address=>"person_2_address",
+					      email=>"person_2_email",
+					      affiliation=>$af2
+					     });
+
+
+  $doc->personVOs([$p1, $p2]);
+  $doc->affiliationVOs([$af1, $af2]);
+
+  return($p2)
+}
+
+sub setExtDBVOs{
+  my $class = shift;
+  my $doc = shift;
+  my $db1 = RAD::MR_T::MageImport::VO::ExternalDatabaseVO->new({name=>"Entrez gene", version=>"2005-10-13"});
+  my $db2 = RAD::MR_T::MageImport::VO::ExternalDatabaseVO->new({name=>"NCBI RefSeq", version=>"2005-10-13"});
+
+  $doc->externalDatabaseVOs([$db1, $db2]);
+
+}
+
+sub setProtocolVOs {
+  my $class = shift;
+  my $doc = shift;
+
+  my $param1 =  RAD::MR_T::MageImport::VO::ProtocolParamVO->new({
+                                                                 name => 'protocol_param_1',
+                                                                 value => 'protocol_param_1_value',
+                                                                 dataType => RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value=>"float", category=>"DataType"}),
+                                                                });
+
+  my $param2 =  RAD::MR_T::MageImport::VO::ProtocolParamVO->new({
+                                                                 name => 'protocol_param_2',
+                                                                 value => 'protocol_param_2_value',
+                                                                 unitType => RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value=>"months", category=>"TimeUnit"}),
+                                                                });
+
+  my $prot1 = RAD::MR_T::MageImport::VO::ProtocolVO->new({
+                                                          name=>"protocol_labeling", 
+                                                          protocolDescription=>"protocol_labeling_description",
+                                                          uri=>"protocol_labeling_uri", 
+                                                          protocolType=>RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value=>"labeling", category=>"ExperimentalProtocolType"}),
+                                                          params=>[$param1, $param2],
+						      });
+
+  my $prot2 =
+    RAD::MR_T::MageImport::VO::ProtocolVO->new({
+						name=>"protocol_extraction", 
+						protocolDescription=>"protocol_extraction_description",
+						uri=>"protocol_extraction_uri", 
+						protocolType=>RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value=>"nucleic_acid_extraction", category=>"ExperimentalProtocolType"}),
+					       });
+
+  $doc->protocolVOs([$prot1, $prot2]);
+
+}
+
+sub setStudyVO{
+  my $class = shift;
+  my $doc = shift;
+  my $studyContact = shift;
+
+  my $sfoe1 = RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value=>"genetic_modification", category=>"ExperimentalProtocolType"});
+  my $sfoe2 = RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value=>"organism_part", category=>"BioMaterialCharacteristicCategory"});
+
+  my $sf1 = 
+    RAD::MR_T::MageImport::VO::StudyFactorVO->new({
+						   name=>"studyFactor_1", 
+						   type=>$sfoe1
+						  });
+
+  my $sf2 = 
+    RAD::MR_T::MageImport::VO::StudyFactorVO->new({
+						   name=>"studyFactor_2", 
+						   type=>$sfoe2
+						  });
+
+  my $sdoe1 = RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value=>"strain_or_line_design", category=>"BiologicalProperty"});
+  my $sdoe2 = RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value=>"species_design", category=>"BiologicalProperty"});
+  my $sd = 
+    RAD::MR_T::MageImport::VO::StudyDesignVO->new({
+						   name=>"studyDesign", 
+						   types=>[$sdoe1,$sdoe2],
+						   factors=>[$sf1, $sf2],
+						  });
+
+
+  my $study = 
+    RAD::MR_T::MageImport::VO::StudyVO->new({
+					     name=>"study", 
+                                             description=>"studyDescription",
+					     designs=>[$sd],
+                                             contact=>$studyContact,
+					    });
+
+  $doc->studyVO($study);
+
+}
+
+1;
+
+
+
diff --git a/lib/perl/RAD/MR_T/MageImport/Service/Reporter/SqlReporter.pm b/lib/perl/RAD/MR_T/MageImport/Service/Reporter/SqlReporter.pm
new file mode 100644
index 0000000..6cb1efa
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Service/Reporter/SqlReporter.pm
@@ -0,0 +1,233 @@
+package RAD::MR_T::MageImport::Service::Reporter::SqlReporter;
+
+use RAD::MR_T::MageImport::MageImportError;
+use GUS::ObjRelP::DbiDatabase;
+
+use strict;
+
+use DBI;
+#use DBD::Oracle;
+use Data::Dumper;
+
+use base qw(RAD::MR_T::MageImport::Service::AbstractReporter);
+
+=head1 SqlReporter
+
+this class absolutely needs to be refactored together with SqlTester in the next release
+
+=over
+
+=item
+
+ sql reporting file format
+ sql  parameter
+ select count(*) from study.study where name='test'
+ select study_id from study.study where name='test'  study_id
+ select count(*) from study.studyDesign where study_id=$$study_id$$
+ select count(*) from rad.studyassay where study_id=$$study_id$$
+ select count(*) from rad.assay where name="test assay" 
+ select assay_id from rad.assay where name="test assay"  assay_id
+ select count(*) from rad.assaybiomaterial where assay_id in ($$assay_id$$)
+
+=cut
+
+sub new {
+  my $class = shift;
+  my $file = shift;
+  my $queryHandler = shift;
+
+  bless {_sqlReportingFile => $file, _queryHandler => $queryHandler}, $class;
+}
+
+sub _getLinesArray {wantarray ? @{$_[0]->{_lines_array}} : $_[0]->{_lines_array}}
+
+sub _setLinesArray { $_[0]->{_lines_array} = $_[1] }
+
+sub _getSqlReportingFile {$_[0]->{_sqlReportingFile}}
+
+sub _getQueryHandler {
+  if($_[0]->{_queryHandler}){
+    return $_[0]->{_queryHandler};
+  }
+  elsif(GUS::ObjRelP::DbiDatabase->getDefaultDatabase()){
+    return GUS::ObjRelP::DbiDatabase->getDefaultDatabase()->getDbHandle();
+  }
+  else{
+    RAD::MR_T::MageImport::ReporterException::DefaultDbNotFound->new->throw();
+  }
+}
+
+sub setAlgoInvoId { $_[0]->{_algoInvoId} = $_[1] }
+
+sub getAlgoInvoId { 
+ if($_[0]->{_algoInvoId}){
+    return $_[0]->{_algoInvoId};
+  }
+  elsif(GUS::ObjRelP::DbiDatabase->getDefaultDatabase()){
+   if(my $id = GUS::ObjRelP::DbiDatabase->getDefaultDatabase()->getDefaultAlgoInvoId()){
+      return $id;
+    }
+    else{
+      RAD::MR_T::MageImport::ReporterException::DefaultAlgoInvoIdNotFound->new->throw();
+    }
+  }
+}
+
+
+#--------------------------------------------------------------------------------
+
+sub _readFile {
+ my $self = shift;
+
+ my @fileLines;
+
+ my $fn = $self->_getSqlReportingFile();
+
+ open(FILE, $fn) or RAD::MR_T::MageImport::ReporterException->
+   new("Cannot open file $fn for reading: $!")->throw();;
+
+ <FILE>; # Remove the header
+
+ while(<FILE>) {
+   chomp;
+
+   push(@fileLines, $_);
+ }
+ close(FILE);
+
+ $self->_setLinesArray(\@fileLines);
+
+ return wantarray ? @fileLines : \@fileLines;
+}
+
+sub report {
+  my ($self) = @_;
+
+  my $sLogger = $self->getLogger();
+  my $testHash = $self->parseLines();
+
+  $sLogger->info("*** SQL REPORT ***\n");
+
+  my @noResults;
+  foreach my $key (keys %$testHash) {
+
+    if(scalar(@{$testHash->{$key}}) == 0) {
+      push(@noResults, $key);
+    }
+    else {
+      my $outString = "*** QUERY RESULT ***   $key\n";
+
+      foreach my $row (@{$testHash->{$key}}) {
+        $outString = $outString . DBI::neat_list($row, 100, "|") . "\n";
+      }
+
+      $outString =~ s/undef/''/g;
+      $sLogger->info($outString, "\n");
+    }
+  }
+
+  my $noResults = join("\n -", @noResults);
+  $sLogger->info("*** QUERIES WITH NO RESULTS ***\n -$noResults");
+}
+
+#--------------------------------------------------------------------------------
+
+sub parseLines {
+  my ($self) = @_;
+
+  my @lines = $self->_getLinesArray() ? $self->_getLinesArray() : $self->_readFile();
+
+  my (%params, %sqlAsserts);
+
+  foreach my $line (@lines) {
+    next unless $line;
+
+    next if($line =~ /^--/);
+    $line =~ s/;$//;
+
+    my ($result, $statement) = $self->_parseLine($line, \%params);
+
+    if($statement =~ /^select +count/i) {
+      my $name = $result->[0]->[0];
+      my $count = $result->[1]->[0];
+
+      push(@{$sqlAsserts{ALL_COUNTS}}, [$name, $count]);
+    }
+    else {
+      $sqlAsserts{$statement} = $result;
+    }
+  }
+
+  return \%sqlAsserts;
+}
+
+#--------------------------------------------------------------------------------
+
+sub _parseLine {
+  my ($self, $line, $params) = @_;
+
+  my ($sql, $param) = split(/\|/, $line);
+  my $sLogger = $self->getLogger();
+  $sLogger->debug("sql: ", $sql);
+  $sLogger->debug("param: ", $param) if $param;
+
+  if($sql =~ /.*\$\$algoInvoId\$\$/ && !($params->{algoInvoId})){
+    $params->{algoInvoId} = $self->getAlgoInvoId;
+  }
+
+  $sLogger->debug("Param hash: ",sub {Dumper($params)});
+  $sLogger->debug("sql: ", $sql);
+  if($sql =~ s/(\$\$(\w+)\$\$)/$params->{$2}/) {
+    RAD::MR_T::MageImport::ReporterException->
+        new("No Param for $2 was defined")->throw() unless(exists $params->{$2});
+  }
+
+  my $result = $self->_runSql($sql);
+
+  if($param && $result) {
+    $params->{$param} = $result->[1]->[0]; 
+  }
+
+  return ($result, $sql);
+}
+
+#--------------------------------------------------------------------------------
+=item _runSql
+
+ return: array of result row array 
+
+=cut
+
+sub _runSql {
+  my ($self, $sql) = @_;
+
+  my @rv;
+  my $sLogger = $self->getLogger();
+  $sLogger->debug($sql);
+  my $dbh = $self->_getQueryHandler();
+
+  my $sh;
+  eval {$sh = $dbh->prepare($sql); $sh->execute();};
+  RAD::MR_T::MageImport::ReporterException::SqlError->new("Sql execution error: $sql\n".$@)->throw() if $@;
+
+  while(my $row = $sh->fetchrow_hashref()) {
+
+    my @attrs = sort keys %$row;
+
+    unless(@rv) {
+      push(@rv, \@attrs);
+    }
+
+    my @ar = map { $row->{$_} } @attrs;
+
+    push(@rv, \@ar);
+  }
+  $sh->finish();
+
+  return \@rv;
+
+}
+
+#--------------------------------------------------------------------------------
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Service/Tester/SqlTester.pm b/lib/perl/RAD/MR_T/MageImport/Service/Tester/SqlTester.pm
new file mode 100644
index 0000000..36352b0
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Service/Tester/SqlTester.pm
@@ -0,0 +1,210 @@
+package RAD::MR_T::MageImport::Service::Tester::SqlTester;
+
+use RAD::MR_T::MageImport::MageImportError;
+use GUS::ObjRelP::DbiDatabase;
+use Data::Dumper;
+
+=head1 SqlTester
+
+=over
+
+=item
+ sql testing file format
+ regex  sql  parameter
+ 1  select count(*) from study.study where name='test'
+ NA   select study_id from study.study where name='test'  study_id
+ 3  select count(*) from study.studyDesign where study_id=$$study_id$$
+ 34 select count(*) from rad.studyassay where study_id=$$study_id$$
+ 1  select count(*) from rad.assay where name="test assay" 
+ NA  select assay_id from rad.assay where name="test assay"  assay_id
+ 4  select count(*) from rad.assaybiomaterial where assay_id in ($$assay_id$$)
+=cut
+
+use base qw(RAD::MR_T::MageImport::Service::AbstractTester);
+
+sub new {
+  my $class = shift;
+  my $file = shift;
+  my $queryHandler = shift;
+
+  bless {_sqlTestingFile => $file, _queryHandler => $queryHandler}, $class;
+}
+
+sub _getLinesArray {wantarray ? @{$_[0]->{_lines_array}} : $_[0]->{_lines_array}}
+
+sub _setLinesArray { $_[0]->{_lines_array} = $_[1] }
+
+sub _getSqlTestingFile {$_[0]->{_sqlTestingFile}}
+
+sub _getQueryHandler {
+  if($_[0]->{_queryHandler}){
+    return $_[0]->{_queryHandler};
+  }
+  elsif(GUS::ObjRelP::DbiDatabase->getDefaultDatabase()){
+    return GUS::ObjRelP::DbiDatabase->getDefaultDatabase()->getDbHandle();
+  }
+  else{
+    RAD::MR_T::MageImport::TesterException::DefaultDbNotFound->new->throw();
+  }
+}
+
+sub setAlgoInvoId { $_[0]->{_algoInvoId} = $_[1] }
+
+sub getAlgoInvoId { 
+ if($_[0]->{_algoInvoId}){
+    return $_[0]->{_algoInvoId};
+  }
+  elsif(GUS::ObjRelP::DbiDatabase->getDefaultDatabase()){
+    if(my $id = GUS::ObjRelP::DbiDatabase->getDefaultDatabase()->getDefaultAlgoInvoId()){
+      return $id;
+    }
+    else{
+      RAD::MR_T::MageImport::TesterException::DefaultAlgoInvoIdNotFound->new->throw();
+    }
+  }
+}
+
+
+#--------------------------------------------------------------------------------
+
+sub _readFile {
+ my $self = shift;
+
+ my @fileLines;
+
+ my $fn = $self->_getSqlTestingFile();
+
+ open(FILE, $fn) or RAD::MR_T::MageImport::TesterException->
+   new("Cannot open file $fn for reading: $!")->throw();;
+
+ <FILE>; # Remove the header
+
+ while(<FILE>) {
+   chomp;
+
+   push(@fileLines, $_);
+ }
+ close(FILE);
+
+ $self->_setLinesArray(\@fileLines);
+
+ return wantarray ? @fileLines : \@fileLines;
+}
+
+sub test {
+  my ($self) = @_;
+  my $testHash = $self->parseLines();
+
+  my $sLogger = $self->getLogger();
+
+  my $counter=0;
+  my $success=0;
+
+  foreach my $test (keys %$testHash){
+    $counter++;
+    my $match = $testHash->{$test}->{expected};
+    my $actual = $testHash->{$test}->{actual};
+    my $actual1 = $testHash->{$test}->{actual};
+    $sLogger->debug("the match: ",  $match, "the actual: ",  $actual);
+    if ($actual =~ m/^$match$/i) {
+      $success++;
+      $sLogger->info("PASSED", "\ttest sql:",$test, "\texpected:", $match,"\tactual:", $actual1);
+    }
+    else{
+      $sLogger->info("FAILED", "\ttest sql:",$test, "\texpected:", $match,"\tactual:", $actual1);
+    }
+  }
+
+  $sLogger->info("SQL test result: $success/$counter PASSED");
+  return 1 if($counter == $success);
+  return 0;
+}
+
+#--------------------------------------------------------------------------------
+
+sub parseLines {
+  my ($self) = @_;
+
+  my @lines = $self->_getLinesArray() ? $self->_getLinesArray() : $self->_readFile();
+
+  my (%params, %sqlAsserts);
+
+  foreach my $line (@lines) {
+    next unless $line;
+    my ($expected, $actual, $statement) = $self->_parseLine($line, \%params);
+
+    unless($expected eq 'NA') {
+      $sqlAsserts{$statement} = {expected => $expected,
+                                 actual => $actual,
+                                };
+    }
+  }
+
+  return \%sqlAsserts;
+}
+
+#--------------------------------------------------------------------------------
+
+sub _parseLine {
+  my ($self, $line, $params) = @_;
+
+  my ($regex, $sql, $param) = split(/\|/, $line);
+  my $sLogger = $self->getLogger();
+  $sLogger->debug($regex, $sql, $param);
+  $sLogger->debug(sub {Dumper($params)});
+
+  if($sql =~ m/\$\$algoInvoId\$\$/ && !($params->{algoInvoId})){ 
+    $params->{algoInvoId} = $self->getAlgoInvoId;
+  }
+
+  if($sql =~ s/(\$\$(\w+)\$\$)/$params->{$2}/) {
+    RAD::MR_T::MageImport::TesterException->
+        new("No Param for $2 was defined")->throw() unless(exists $params->{$2});
+  }
+
+  my $result = $self->_runSql($sql);
+
+  if($param) {
+    $params->{$param} = $result; 
+  }
+
+  return ($regex, $result, $sql);
+}
+
+#--------------------------------------------------------------------------------
+
+sub _runSql {
+  my ($self, $sql) = @_;
+
+  my @rv;
+  my $sLogger = $self->getLogger();
+  $sLogger->debug($sql);
+  my $dbh = $self->_getQueryHandler();
+
+  my $sh;
+
+  eval {$sh = $dbh->prepare($sql); $sh->execute();};
+
+  RAD::MR_T::MageImport::TesterException::SqlError->new("Sql execution error: $sql")->throw() if $@;
+
+  while(my @ar = $sh->fetchrow_array()) {
+    push(@rv, @ar);
+  }
+  $sh->finish();
+
+  if(scalar(@rv) == 0) {
+    RAD::MR_T::MageImport::TesterException::SqlError->
+      new("No Result for sql: $sql")->throw();
+  }
+
+  if(scalar(@rv) > 1) {
+    return join(',', @rv);
+  }
+
+  return $rv[0];
+
+}
+
+#--------------------------------------------------------------------------------
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Service/Translator/VoToDot.pm b/lib/perl/RAD/MR_T/MageImport/Service/Translator/VoToDot.pm
new file mode 100644
index 0000000..8fd4976
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Service/Translator/VoToDot.pm
@@ -0,0 +1,119 @@
+package RAD::MR_T::MageImport::Service::Translator::VoToDot;
+
+use base qw(RAD::MR_T::MageImport::Service::AbstractTranslator);
+
+use strict;
+
+use Data::Dumper;
+
+use Error qw(:try);
+
+use RAD::MR_T::MageImport::MageImportError;
+
+my $sLogger;
+#--------------------------------------------------------------------------------
+
+sub mapAll {
+  my ($self, $docRoot) = @_;
+
+  $sLogger = $self->getLogger();
+  $sLogger->info("start the translating to GraphViz Dot method");
+
+  my $voAssays = $docRoot->getAssayVOs();
+  my $voBioMaterials = $docRoot->getBioMaterialVOs();
+  my $voTreatments = $docRoot->getTreatmentVOs();
+
+  my $fileBuffer = "
+     digraph D{\n
+     rankdir=LR;\n
+     node[shape=box];\n";
+#  HEADER
+	
+  my $channel2color = {'cy3'=>'red', 'cy5'=>'green', 'biotin'=>'black'};
+  foreach my $biomat (@$voBioMaterials) {
+      my $color = "black";
+      if(my $channel = $biomat->getChannel){
+	  $color = $channel2color->{lc($channel->getValue)}
+      }
+      
+      my $charsStr = "";
+      foreach my $char (@{$biomat->getBioMaterialChars()}) {
+	$charsStr  = $charsStr. '\n' . $char->getCategory ."=" . $char->getValue();
+      }
+      if($charsStr ne ""){
+	$fileBuffer  =  $fileBuffer. '"'.$biomat->getName . "\"[ label =\"" . $biomat->getSubclassView.":".$biomat->getName . " |{$charsStr}\", color=".$color."];\n";
+      }else{
+	$fileBuffer  =  $fileBuffer. '"'.$biomat->getName . "\"[ label =\"" . $biomat->getSubclassView.":".$biomat->getName . "\", color=".$color."];\n";
+      }
+  }		
+
+  foreach my $hyb (@$voAssays){
+      my $pvStr = "";
+      foreach my $pv (@{$hyb->getParameterValues}){
+	my $name = $pv->getParameterName;
+	$pvStr  = $pvStr.'\n' . "$name =".$pv->getValue;
+      }
+      if($pvStr ne ""){
+	$fileBuffer  = $fileBuffer.'"Hyb:'.$hyb->getName . "\"[ label =\"Hyb:" . $hyb->getName . " |{$pvStr}\"];\n";
+      }
+      else{
+	$fileBuffer  = $fileBuffer.'"Hyb:'.$hyb->getName . "\"[ label =\"Hyb:" . $hyb->getName . "\"];\n";
+      }
+
+      foreach my $acq (@{$hyb->getAcquisitions}){
+	$fileBuffer  = $fileBuffer.$self->printObjNameAndPVs($acq, "Scan");
+	foreach my $quan (@{$acq->getQuantifications}){
+	  $fileBuffer  = $fileBuffer.$self->printObjNameAndPVs($quan, "Feature Ex");
+	  next unless $quan->getProcesses;
+	  foreach my $proc (@{$quan->getProcesses}){
+	    $fileBuffer  = $fileBuffer.$self->printObjNameAndPVs($proc, "Normalization");
+	  }
+
+	}
+      }
+  }
+ 
+  foreach my $trt (@$voTreatments){
+      my $inputBioMaterials = $trt->getInputBMMs();
+      my $outputBioMaterial = $trt->getOutputBM();
+      foreach my $input (@$inputBioMaterials) {
+	  $fileBuffer  = $fileBuffer . '"'.$input->getBioMaterial->getName . "\"->\"" . $outputBioMaterial->getName."\";\n";
+      }
+  }
+
+  foreach my $hyb (@$voAssays){
+    my $lexs = $hyb->getLabeledExtracts;
+    foreach my $lex (@$lexs){
+      $fileBuffer  = $fileBuffer.'"'.$lex->getName . "\"->\"Hyb:" . $hyb->getName."\";\n";
+    }
+    foreach my $acq (@{$hyb->getAcquisitions}){
+      $fileBuffer  = $fileBuffer.'"Hyb:'.$hyb->getName . "\"->\"" . $acq->getName."-".$acq->getUri."\";\n";
+      foreach my $quan (@{$acq->getQuantifications}){
+	$fileBuffer  = $fileBuffer.'"'.$acq->getName ."-".$acq->getUri."\"->\"" . $quan->getName."-".$quan->getUri."\";\n";
+	next unless $quan->getProcesses;
+	foreach my $proc (@{$quan->getProcesses}){
+	  $fileBuffer  = $fileBuffer.'"'.$quan->getName ."-". $quan->getUri."\"->\"" . $proc->getName."-".$proc->getUri."\";\n";
+	}
+      }
+    }
+  }
+  print $fileBuffer."}";
+}
+
+
+sub printObjNameAndPVs{
+  my ($self, $obj, $label, $fileBuffer) = @_;
+
+  my $pvStr = "";
+  foreach my $pv (@{$obj->getParameterValues}){
+    my $name = $pv->getParameterName;
+    $pvStr  = $pvStr.'\n' . "$name =".$pv->getValue;
+  }
+  if($pvStr ne ""){
+    $fileBuffer  = $fileBuffer.'"'.$obj->getName . "-".$obj->getUri."\"[ label =\"$label:" . $obj->getName . '\n'.$obj->getUri." |{$pvStr}\"];\n";
+  }
+  else{
+    $fileBuffer  = $fileBuffer.'"'.$obj->getName ."-". $obj->getUri. "\"[ label =\"$label:" . $obj->getName . '\n'.$obj->getUri."\"];\n";
+  }
+  return $fileBuffer;
+}
diff --git a/lib/perl/RAD/MR_T/MageImport/Service/Translator/VoToGusTranslator.pm b/lib/perl/RAD/MR_T/MageImport/Service/Translator/VoToGusTranslator.pm
new file mode 100644
index 0000000..69d2405
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Service/Translator/VoToGusTranslator.pm
@@ -0,0 +1,2069 @@
+package RAD::MR_T::MageImport::Service::Translator::VoToGusTranslator;
+
+use base qw(RAD::MR_T::MageImport::Service::AbstractTranslator);
+
+use strict;
+
+use Data::Dumper;
+
+use Error qw(:try);
+
+use XML::Simple;
+
+use RAD::MR_T::MageImport::MageImportError;
+
+use RAD::MR_T::MageImport::Util qw(checkArgumentType getPubMedXml findAllAssayBioMaterials);
+
+use GUS::ObjRelP::DbiDatabase;
+
+use GUS::Model::SRes::BibliographicReference;
+use GUS::Model::SRes::BibRefType;
+use GUS::Model::SRes::Abstract;
+
+use GUS::Model::RAD::AssayParam;
+use GUS::Model::RAD::AcquisitionParam;
+use GUS::Model::RAD::QuantificationParam;
+use GUS::Model::RAD::TreatmentParam;
+use GUS::Model::RAD::AssayLabeledExtract;
+use GUS::Model::RAD::AssayBioMaterial;
+
+=head1 NAME
+
+RAD::MR_T::MageImport::Service::Translator::VoToGusTranslator
+
+=head1 SYNOPSIS
+
+ my $reader = RAD::MR_T::MageImporter::Service::Reader::MockReader->new();
+ my $docRoot = $reader->parse();
+ my $translator = RAD::MR_T::MageImporter::Service::Translator::VoToGusTranslator->new($args);
+ my $study = $translator->mapAll($docRoot);
+
+=head1 DESCRIPTION
+
+Subclass of AbstractTranslator.  It implements the mapAll method by returning 
+a GUS::Model::Study::Study object.  
+
+This class contains 2 static hashes which control which objects are created, whether or
+not they are retrieved from the database, and what to do is the retrieveFromDB fails 
+(ie. failure to retrieve means either 0 or more than 1 object found with the provided 
+attributes).  
+
+methodToObjectMap provides a link between method name ane the type of 
+GUS object to be created.  
+
+retrieveObjectRules controls How things are retrieved from the database
+Every time a GUS::Model object is created... if that object is a key in 
+this hash, an attempt is made to retrieve it from the database.  A value
+of 1 means Create NEW if Unable to Retrieve.  A value of 0 means Fail if 
+unable to Retrieve.
+
+=cut
+
+my $methodToObjectMap = 
+  { mapAffiliations                => 'GUS::Model::SRes::Contact',
+    mapPersons                     => 'GUS::Model::SRes::Contact',
+    mapExternalDatabase            => 'GUS::Model::SRes::ExternalDatabase',
+    mapExternalDatabaseRelease     => 'GUS::Model::SRes::ExternalDatabaseRelease',
+    mapStudy                       => 'GUS::Model::Study::Study',
+    mapStudyDesigns                => 'GUS::Model::Study::StudyDesign',
+    mapStudyFactors                => 'GUS::Model::Study::StudyFactor',
+    mapStudyDesignType             => 'GUS::Model::Study::StudyDesignType',
+    mapBioSource                   => 'GUS::Model::Study::BioSource',
+    mapBioSample                   => 'GUS::Model::Study::BioSample',
+    mapLabeledExtract              => 'GUS::Model::Study::LabeledExtract',
+    mapProtocols                   => 'GUS::Model::RAD::Protocol',
+    mapProtocolParams              => 'GUS::Model::RAD::ProtocolParam',
+    mapAssays                      => 'GUS::Model::RAD::Assay',
+    mapAcquisitions                => 'GUS::Model::RAD::Acquisition',
+    mapQuantifications             => 'GUS::Model::RAD::Quantification',
+    mapTreatments                  => 'GUS::Model::RAD::Treatment',
+    mapBioMaterialMeasurements     => 'GUS::Model::RAD::BioMaterialMeasurement',
+    createRadOE                    => 'GUS::Model::Study::OntologyEntry',
+    mapStudyAssays                 => 'GUS::Model::RAD::StudyAssay',
+    mapStudyDesignsAssays          => 'GUS::Model::RAD::StudyDesignAssay',
+    mapStudyBioMaterials           => 'GUS::Model::RAD::StudyBioMaterial',
+    mapLabelMethod                 => 'GUS::Model::RAD::LabelMethod',
+    mapArrayDesigns                => 'GUS::Model::RAD::ArrayDesign',
+    mapBioMaterialCharacteristics  => 'GUS::Model::Study::BioMaterialCharacteristic',
+    mapTaxon                       => 'GUS::Model::SRes::TaxonName',
+    mapStudyFactorValues           => 'GUS::Model::RAD::StudyFactorValue',
+    __ANON__                       => undef, 
+  };
+
+
+#
+my $retrieveObjectsRules = 
+  { 'GUS::Model::SRes::Contact' => 1,
+    'GUS::Model::SRes::ExternalDatabase' => 0,
+    'GUS::Model::SRes::ExternalDatabaseRelease' => 0,
+    'GUS::Model::RAD::Protocol' => 1,
+    'GUS::Model::RAD::ProtocolParam' => 1,
+    'GUS::Model::Study::OntologyEntry' => 0,
+    'GUS::Model::RAD::LabelMethod' => 1,
+    'GUS::Model::RAD::ArrayDesign' => 0,
+    'GUS::Model::SRes::TaxonName' => 0,
+  };
+
+#--------------------------------------------------------------------------------
+
+=head2 Subroutines
+
+=over 4
+
+=item C<new>
+
+Create an instance of VoToGusTranslator.
+
+B<Parameters:>
+
+ $class(string): name of the translator 
+ $argsHash(hashRef): not used
+
+B<Return type:> 
+
+ C<RAD::MR_T::MageImport::Service::Translator::VoToGusTranslator> 
+
+=cut
+
+sub new {
+  my ($class, $argsHash) = @_;
+
+  my $args = ref($argsHash) eq 'HASH' ? $argsHash : {};
+
+  if($args->{allowNewOntologyEntry}) {
+    $retrieveObjectsRules->{'GUS::Model::Study::OntologyEntry'} = 1;
+    $args->{allowNewExternalDatabase} = 1;
+  }
+
+  if($args->{allowNewExternalDatabase}) {
+    $retrieveObjectsRules->{'GUS::Model::SRes::ExternalDatabase'} = 1;
+    $retrieveObjectsRules->{'GUS::Model::SRes::ExternalDatabaseRelease'} = 1;
+  }
+
+  foreach(keys %$methodToObjectMap) { 
+    my $gusObj = $methodToObjectMap->{$_};
+
+    unless($_ eq '__ANON__') {
+      my $requireStatement = "{require $gusObj}";
+      eval $requireStatement; 
+    }
+
+    RAD::MR_T::MageImport::ObjectMapperException->new($@)->throw() if($@);
+  }
+
+  my $self = bless $args, $class;
+
+  $self->setRetrieveObjectsRules($retrieveObjectsRules);
+
+  if(my $prefix = $args->{quantificationFilePrefix}) {
+    $self->setQuantificationPrefix($prefix);
+  }
+
+  return($self);
+}
+
+#--------------------------------------------------------------------------------
+
+sub setRetrieveObjectsRules { $_[0]->{_retrieve_objects_rules} = $_[1]}
+sub getRetrieveObjectsRules { $_[0]->{_retrieve_objects_rules}}
+
+sub setQuantificationPrefix { $_[0]->{_quantification_prefix} = $_[1]}
+sub getQuantificationPrefix { $_[0]->{_quantification_prefix}}
+
+# Make a mapping of ExternalDatabase Names to their SRes::ExternalDatabaseRelease Objects
+sub setExternalDatabases {
+  my ($self, $extDbRls) = @_;
+
+  my %externalDatabases;
+  $extDbRls = [] unless($extDbRls);
+
+  foreach my $release (@$extDbRls) {
+    my $database = $release->getParent('SRes::ExternalDatabase');
+    my $name = $database->getName();
+
+    $externalDatabases{$name} = $release;
+  }
+
+  $self->{_external_databases} = \%externalDatabases;
+}
+
+sub getExternalDatabases { $_[0]->{_external_databases}}
+
+
+sub addOntologyEntry {
+  my ($self, $oe) = @_;
+
+  push(@{$self->{_ontology_entries}}, $oe);
+}
+
+sub getOntologyEntries {$_[0]->{_ontology_entries}}
+
+sub searchForExistingOntologyEntry {
+  my ($self, $value, $category) = @_;
+
+  my $logger = $self->getLogger();
+
+  my $ontologyEntries = $self->getOntologyEntries();
+
+  return unless $ontologyEntries;
+
+  my ($onlyValueCount, $onlyValue);
+
+  foreach my $oe (@$ontologyEntries) {
+    if($oe->getValue eq $value && $oe->getCategory eq $category) {
+      return $oe;
+    }
+    if($oe->getValue() eq $value) {
+      $onlyValueCount++;
+      $onlyValue = $oe;
+    }
+  }
+  return $onlyValueCount == 1 ? $onlyValue : undef;
+}
+
+#--------------------------------------------------------------------------------
+
+
+=item C<addMethodToObjectMap>
+
+Should only be used when calling the objectMapper from inside a try block... 
+The try block is an annonymous function (__ANON__).  The objectMapper uses a 
+method to Object hash to determine which type of object should be created.  
+Make sure to set the value to undef when finished.
+
+B<Parameters:>
+
+ $method(string): almost always will be __ANON__
+ $object(string): A GUS::Model::xxxx::xxxx object
+
+B<Return Type:> 
+
+ C<object string> 
+
+=cut
+
+sub addMethodToObjectMap {
+  my ($self, $method, $object) = @_;
+  $methodToObjectMap->{$method} = $object;
+}
+
+sub getMethodToObjectMap { return  $methodToObjectMap }
+
+#--------------------------------------------------------------------------------
+
+=item C<objectMapper>
+
+Generically create a GUS object.  Looks at the static hashes to find which object
+to create, whether to retrieve it and what to do if the retrieve fails based on 
+the caller method
+
+B<Parameters:>
+
+ $hash(hashRef): Attributes for the GUS object
+
+B<Return Type:> 
+
+ C<GUS::Model::xxxx::xxxx> 
+
+=cut
+
+sub objectMapper {
+  my ($self, $hash) = @_;
+
+  my $sLogger = $self->getLogger();
+
+  unless(GUS::ObjRelP::DbiDatabase->getDefaultDatabase()) {
+    my $msg = "A Default GUS::ObjRelP::DbiDatabase is required but not found";
+    RAD::MR_T::MageImport::ObjectMapperException->new($msg)->throw();
+  }
+
+  # get the method which called this subroutine
+  my ($caller, $file, $line, $subname) = caller(1);
+  my ($method) = $subname =~ /(\w+)$/;
+
+  unless(exists $methodToObjectMap->{$method}) {
+    my $msg = "Unknown method $method called the objectMapper";
+    RAD::MR_T::MageImport::ObjectMapperException->new($msg)->throw();
+  }
+
+  my $gusObj = $methodToObjectMap->{$method};
+
+  my $obj = eval {   $gusObj->new($hash) };
+
+  if($@) {
+    my $msg = $@ . "\nCould not create the object $gusObj from Translator method $method";
+
+    RAD::MR_T::MageImport::ObjectMapperException->new($msg)->throw();
+  }
+
+  my $retrievalRules = $self->getRetrieveObjectsRules();
+
+  my $tryToRetrieve = exists $retrievalRules->{$gusObj};
+
+  $sLogger->debug("+++$gusObj+++\n".$obj->toXML());
+
+  if($tryToRetrieve) { 
+    my $createOnNoRetrieve = $retrievalRules->{$gusObj};
+
+    my $wasRetrieved = $obj->retrieveFromDB();
+    my $numberRowsRetrieved = $obj->getNumberOfDatabaseRows();
+
+    if(!$wasRetrieved && $numberRowsRetrieved > 1) {
+      RAD::MR_T::MageImport::ObjectMapperException::RetrieveFromDbError::MultipleRowsReturned->new("$gusObj retrieved Multiple Rows from DB")->throw();
+    }
+    elsif(!$wasRetrieved && !$createOnNoRetrieve) { 
+      RAD::MR_T::MageImport::ObjectMapperException::RetrieveFromDbError->new("$gusObj not retrieved from Db")->throw();
+    }
+    else {}
+  }
+
+
+
+  return($obj);
+}
+
+#--------------------------------------------------------------------------------
+
+=item C<mapAll>
+
+This is the public face for the Translator class.  It is the only method
+which should be called from another program (other than Tests).  It takes a VO Docroot object
+and returns a GUS::Model::Study::Study object with the children set correctly.
+
+B<Parameters:>
+
+ $docRoot(RAD::MR_T::MageImport::VO::DocRoot): The output from the Reader's parse Method
+
+B<Return Type:> 
+
+ C<GUS::Model::Study::Study> 
+
+=cut
+
+sub mapAll {
+  my ($self, $docRoot) = @_;
+
+  my $sLogger = $self->getLogger();
+  $sLogger->info("start the mapAll method");
+
+ unless(ref($docRoot) eq 'RAD::MR_T::MageImport::VO::DocRoot') {
+    RAD::MR_T::MageImport::VOException::ObjectTypeError->
+        new("Must provide the docRoot to mapAll Method")->throw();
+  }
+
+  my $voAffiliations = $docRoot->affiliationVOs();
+  my $voPersons = $docRoot->personVOs();
+  my $voExternalDatabases = $docRoot->externalDatabaseVOs();
+  my $voStudy = $docRoot->getStudyVO();
+  my $voStudyDesigns = $voStudy->getDesigns();
+  my $voProtocols = $docRoot->getProtocolVOs();
+
+  my $voAssays = $docRoot->getAssayVOs();
+  my $voBioMaterials = $docRoot->getBioMaterialVOs();
+  my $voTreatments = $docRoot->getTreatmentVOs();
+
+  my $affiliations = $self->mapAffiliations($voAffiliations);
+
+  my $contacts = $self->mapPersons($voPersons, $affiliations);
+
+  my $externalDbs = $self->mapExternalDatabases($voExternalDatabases);
+  $self->setExternalDatabases($externalDbs);
+
+  my $study = $self->mapStudy($voStudy, $contacts);
+
+  my $studyDesigns = $self->mapStudyDesigns($voStudyDesigns, $study);
+
+  my $protocols = $self->mapProtocols($voProtocols);
+
+  my $arrayDesigns = $self->mapArrayDesigns($voAssays);
+
+  my $bioMaterials = $self->mapBioMaterials($voBioMaterials, $contacts);
+
+  my $assays = $self->mapAssays($voAssays, $contacts, $arrayDesigns, $studyDesigns, $protocols, $bioMaterials);
+
+  $self->mapTreatments($voTreatments, $protocols, $bioMaterials);
+
+  $self->mapStudyAssays($study, $assays);
+  $self->mapStudyBioMaterials($study, $bioMaterials);
+  $self->mapStudyDesignsAssays($studyDesigns, $assays);
+  $self->mapAssayBioMaterials($voAssays, $voTreatments, $assays, $bioMaterials);
+
+  return $study;
+}
+
+#--------------------------------------------------------------------------------
+
+=item C<mapArrayDesigns>
+
+Loop through the Vo Assays and get a list of GUS ArrayDesigns.  The AssaySourceId
+is required for every Assay.
+
+B<Parameters:>
+
+ $voAssays([RAD::MR_T::MageImport::VO::AssayVo] ): ArrayRef of AssayVo objects
+
+B<Return Type:> 
+
+ C<[GUS::Model::RAD::ArrayDesign]> ArrayRef of Distinct GUS ArrayDesign objects
+
+=cut
+
+sub mapArrayDesigns {
+  my ($self, $voAssays) = @_;
+
+  my (%seen, @arrayDesigns);
+  foreach my $voAssay (@$voAssays) {
+    my $sourceId = $voAssay->getArraySourceId();
+
+    next if(exists $seen{$sourceId});
+
+    if($sourceId) {
+      my $arrayDesign = $self->objectMapper({source_id => $sourceId});
+      push(@arrayDesigns, $arrayDesign);
+
+      $seen{$sourceId} = 1;
+    }
+  }
+  return(\@arrayDesigns);
+}
+
+#--------------------------------------------------------------------------------
+
+=item C<mapAffiliations>
+
+Loop through the Vo Affiliations and get a list of GUS Contacts.  
+
+B<Parameters:>
+
+ $mageAffs([RAD::MR_T::MageImport::VO::AffiliationVO] ): ArrayRef of Affiliation VO objects
+
+B<Return Type:> 
+
+ C<[GUS::Model::SRes::Contact]> ArrayRef of GUS Contacts
+
+=cut
+
+sub mapAffiliations { 
+  my ($self, $mageAffs) = @_;
+
+  my $sLogger = $self->getLogger();
+  $sLogger->debug("VO affiliations\n",sub {Dumper($mageAffs)});
+
+  my @affiliations;
+
+  foreach my $mageAff (@$mageAffs) {
+    my $affiliation = $self->objectMapper({name => $mageAff->getName});
+
+    push @affiliations, $affiliation;
+  }
+  return \@affiliations;
+}
+
+#--------------------------------------------------------------------------------
+
+=item C<mapPersons>
+
+Loop through the Vo Persons and get a list of GUS Contacts
+
+B<Parameters:>
+
+ $magePersons([RAD::MR_T::MageImport::VO::PersonVO] ): ArrayRef of Person VO objects
+ $affiliations([GUS::Model::SRes::Contact] ): ArrayRef of GUS Contacts
+
+B<Return Type:> 
+
+ C<[GUS::Model::SRes::Contact]> ArrayRef of GUS Contacts
+
+=cut
+
+sub mapPersons { 
+ my ($self, $magePersons, $affiliations) = @_;
+
+ my $sLogger = $self->getLogger();
+ $sLogger->debug("VO Persons\n",sub {Dumper($magePersons)});
+
+ my @contacts;
+
+ foreach my $mageContact (@$magePersons) {
+   my $contact = $self->objectMapper({last => $mageContact->getLast,
+                                      first => $mageContact->getFirst,
+                                     });
+
+   $contact->setName($mageContact->getName) unless($contact->getName);
+   $contact->setEmail($mageContact->getEmail) unless($contact->getEmail);
+   $contact->setAddress1($mageContact->getAddress()) unless($contact->getAddress1);
+
+   if(my $affiliation = $mageContact->getAffiliation()) {
+     my $name = $affiliation->getName();
+     my $parentAffiliation = $self->searchObjArrayByObjName($affiliations, $name);
+     $contact->setParent($parentAffiliation) unless($contact->getParent('SRes::Contact'));
+   }
+
+   push @contacts, $contact;
+ }
+
+ return(\@contacts);
+}
+
+#--------------------------------------------------------------------------------
+
+=item C<mapExternalDatabases>
+
+Loop through the Vo ExternalDatabases and get a list of GUS ExternalDatabaseReleases
+
+B<Parameters:>
+
+ $mageExtDbs([RAD::MR_T::MageImport::VO::ExternalDatabaseVO] ): ArrayRef of ExternalDatabaseVO objects
+
+B<Return Type:> 
+
+ C<[GUS::Model::SRes::ExternalDatabaseRelease]> ArrayRef of GUS ExternalDatabaseRelease
+
+=cut
+
+sub mapExternalDatabases { 
+  my ($self, $mageExtDbs) = @_;
+
+  my $sLogger = $self->getLogger();
+  $sLogger->debug("VO ExternalDatabases\n",sub {Dumper($mageExtDbs)});
+
+  my @extDbRls;
+
+  foreach my $mageExtDb (@$mageExtDbs) {
+    my $extDb = $self->mapExternalDatabase($mageExtDb->getName);
+    my $extDbRls = $self->mapExternalDatabaseRelease($extDb, $mageExtDb->getVersion);
+
+    push @extDbRls, $extDbRls;
+  }
+  return \@extDbRls;
+}
+
+#--------------------------------------------------------------------------------
+
+=item C<mapExternalDatabase>
+
+Calls the objectMapper for ExternalDatabase.  This will be retrieved from the DefaultDB
+
+B<Parameters:>
+
+$name(string): Existing GUS External Database Name
+
+B<Return Type:> 
+
+ C<GUS::Model::SRes::ExternalDatabase> GUS ExternalDatabase
+
+=cut
+
+sub mapExternalDatabase {
+  my ($self, $name) = @_;
+
+  return $self->objectMapper({name => $name});
+}
+
+#--------------------------------------------------------------------------------
+
+=item C<mapExternalDatabaseRelease>
+
+Calls the objectMapper for ExternalDatabaseRelease.  This will be retrieved from the DefaultDB
+
+B<Parameters:>
+
+ $extDb(GUS::Model::SRes::ExternalDatabase): GUS ExternalDatabase object
+ $version(string): Existing GUS External Database Release Version for the External Database
+
+B<Return Type:> 
+
+ C<GUS::Model::SRes::ExternalDatabase> GUS ExternalDatabase
+
+=cut
+
+sub mapExternalDatabaseRelease {
+  my ($self, $extDb, $version) = @_;
+
+  my $extDbName = $extDb->getName();
+  my $extDbRls;
+
+  if($self->wasRetrieved($extDb)) {
+    $extDbRls = $self->objectMapper({version => $version,
+                                     external_database_id => $extDb->getId(),
+                                    });
+  }
+  # If we are allowed to make this new...
+  elsif($retrieveObjectsRules->{'GUS::Model::SRes::ExternalDatabaseRelease'}) {
+    $extDbRls = GUS::Model::SRes::ExternalDatabaseRelease->new({version => $version});
+  }
+  else {
+    RAD::MR_T::MageImport::ObjectMapperException::ImproperVoObject->
+        new("External Database $extDbName Was not Correctly Retrieved from Database")->throw();
+  }
+
+  $extDbRls->setParent($extDb);
+
+  return($extDbRls);
+}
+
+#--------------------------------------------------------------------------------
+
+=item C<mapStudy>
+
+Create the main GUS parent object.  Must provide a main contact in the StudyVO.  Searches
+the previously made array of GUS contacts for the match
+
+B<Parameters:>
+
+ $mageStudy(RAD::MR_T::MageImporter::StudyVO): Main Study VO object
+ $contacts([GUS::Model::SRes::Contact]): List of gus GUS Contact objects to search
+
+B<Return Type:> 
+
+ C<GUS::Model::Study::Study> GUS Study
+
+=cut
+
+sub mapStudy { 
+  my ($self, $mageStudy, $contacts) = @_;
+
+  my $sLogger = $self->getLogger();
+  $sLogger->debug("VO Study\n",sub {Dumper($mageStudy)});
+
+  my $study = $self->objectMapper({name => $mageStudy->getName(),
+                                   description => $mageStudy->getDescription()
+                                  });
+
+  my $name = $mageStudy->getContact()->getName();
+
+  my $contact = $self->searchObjArrayByObjName($contacts, $name);
+  $study->setParent($contact);
+
+  if(my $pubmed = $mageStudy->getPubMedId) {
+    my $bibRef = $self->mapBibliographicReference($pubmed);
+
+    $study->setParent($bibRef);
+  }
+
+  return $study;
+}
+
+#--------------------------------------------------------------------------------
+
+=item C<mapBibliographicReference>
+
+Creates a SRes::BibliographicReference (and SRes::Abstract child) from a pubmed id.
+Fetches the xml representation of the pubmed reference from ncbi and parses it for 
+the relevant SRes fields
+
+B<Parameters:>
+
+ $mageStudy(RAD::MR_T::MageImporter::StudyVO): Main Study VO object
+
+B<Return Type:> 
+
+ C<GUS::Model::Study::Study> GUS Study
+
+=cut
+
+sub mapBibliographicReference {
+  my ($self, $pubmed) = @_;
+
+  my $logger = $self->getLogger();
+
+  my $extDbRls;
+
+  my $bibRefType = GUS::Model::SRes::BibRefType->new({name => 'journal article'});
+  $bibRefType->retrieveFromDB() or RAD::MR_T::MageImport::ObjectMapperException::RetrieveFromDbError->
+                                  new("Could Not Retrieve [journal article] from SRes::BibRefType")->throw();
+
+  my $extDb = GUS::Model::SRes::ExternalDatabase->new({name => 'pubmed'});
+
+  if($extDb->retrieveFromDB()) {
+    $logger->debug("Retrieved ExternalDatabase for pubmed");
+
+    my $tooMany;
+    ($extDbRls, $tooMany) = $extDb->getChildren('SRes::ExternalDatabaseRelease', 1);
+
+    $logger->debug($extDbRls->toString());
+
+    if($tooMany) {
+      $logger->warn("Could Not Retrieve a distinct SRes::ExternalDatabaseRelease::id for pubmed");
+      $extDbRls = undef;
+    }
+  }
+  else {
+    $logger->warn("Could Not Retrieve [pubmed] from SRes::ExternalDatabase");
+  }
+
+
+  my $xmlString = getPubMedXml($pubmed);
+  my $root = XMLin($xmlString);
+
+  my $xml = $root->{PubmedArticle}->{MedlineCitation}->{Article};
+
+  my @authors;
+  foreach my $a (@{$xml->{AuthorList}->{Author}}) {
+    push(@authors, $a->{LastName}." ".$a->{Initials});
+  }
+
+  my $authors = join(', ', @authors);
+  my $title =  $xml->{ArticleTitle};
+
+  my $journal = $xml->{Journal}->{Title};
+  $journal = $root->{PubmedArticle}->{MedlineCitation}->{MedlineJournalInfo}->{MedlineTA} unless($journal);
+
+  my $year = $xml->{Journal}->{JournalIssue}->{PubDate}->{Year};
+  my $volume = $xml->{Journal}->{JournalIssue}->{Volume};
+  my $issue = $xml->{Journal}->{JournalIssue}->{Issue};
+  my $pages = $xml->{Pagination}->{MedlinePgn};
+
+  unless($issue) {
+    $pages = '';
+    $logger->warn("Pubication seems to be ahead of print??... No PageNum or Issue");
+  }
+
+  my $abstract = $xml->{Abstract}->{AbstractText};
+
+  my $bibRef = GUS::Model::SRes::BibliographicReference->new({title => $title,
+                                                              authors => $authors,
+                                                              publication => $journal,
+                                                              year => $year,
+                                                              volume => $volume,
+                                                              issue => $issue,
+                                                              pages => $pages,
+                                                             });
+
+  my $abstract = GUS::Model::SRes::Abstract->new({abstract => $abstract});
+  $abstract->setParent($bibRef);
+
+  if($extDbRls) {
+    $logger->debug("Setting sourceId and Parent for BibliographicReference");
+    $bibRef->setSourceId($pubmed);
+    $bibRef->setParent($extDbRls) ;
+  }
+
+  $bibRef->setParent($bibRefType);
+
+  return $bibRef;
+}
+
+#--------------------------------------------------------------------------------
+
+=item C<mapStudy>
+
+Create the GUS StudyDesigns and set the study parent
+
+B<Parameters:>
+
+ $mageSDs([RAD::MR_T::MageImporter::StudyDesignVO]): ArrayRef of VO StudyDesign objects
+ $study(GUS::Model::Study::Study): Parent GUS Study Object
+
+B<Return Type:> 
+
+ C<[GUS::Model::Study::StudyDesign]> ArrayRef of GUS StudyDesigns
+
+=cut
+
+sub mapStudyDesigns { 
+  my ($self, $mageSDs, $study) = @_;
+
+  my $sLogger = $self->getLogger();
+  $sLogger->debug("VO StudyDesigns\n",sub {Dumper($mageSDs)});
+
+  my @studyDesigns;
+
+  foreach my $mageSD (@$mageSDs) {
+    my $studyDesign = $self->objectMapper({name => $mageSD->getName});
+    $studyDesign->setParent($study);
+
+    $self->mapStudyDesignType($studyDesign, $mageSD->getTypes());
+    $self->mapStudyFactors($studyDesign, $mageSD->getFactors);
+
+    push(@studyDesigns, $studyDesign);
+  }
+  return(\@studyDesigns);
+}
+
+
+#--------------------------------------------------------------------------------
+
+=item C<mapStudyDesignType>
+
+Create GUS StudyDesignTypes and set the parent
+
+B<Parameters:>
+
+ $studyDesign(GUS::Model::Study::StudyDesign): StudyDesign Parent of the StudyDesignType
+ $types(RAD::MR_T::MageImport::VO::OntologyEntryVO): ArrayRef of OntologyEntry VO objects
+
+B<Return Type:> 
+
+ C<[GUS::Model::Study::StudyDesignType]> GUS StudyDesignTypes
+
+=cut
+
+sub mapStudyDesignType {
+  my ($self, $studyDesign, $types) = @_;
+
+  my @studyDesignTypes;
+
+  my $sLogger = $self->getLogger();
+  $sLogger->debug("VO StudyDesigns Type\n",sub {Dumper($types)});
+
+  foreach my $type (@$types) {
+    my $oe = $self->createRadOE($type, "studyDesign");
+
+    my $studyDesignType = $self->objectMapper({});
+    $studyDesignType->setParent($studyDesign);
+    $studyDesignType->setParent($oe);
+
+    push(@studyDesignTypes, $studyDesignType);
+  }
+
+  return \@studyDesignTypes;
+}
+
+#--------------------------------------------------------------------------------
+
+=item C<mapStudyFactors>
+
+Create GUS StudyFactors and set the parents (StudyDesign and OntologyEntry).  The
+StudyFactor type must be provided in the VO.
+
+B<Parameters:>
+
+ $studyDesign(GUS::Model::Study::StudyDesign): StudyDesign Parent of the StudyFactor
+ $mageSFs([RAD::MR_T::MageImport::VO::StudyFactorVO]): StudyFactor VO objects to be mapped
+
+B<Return Type:> 
+
+ C<[GUS::Model::Study::StudyFactor]> GUS StudyFactors
+
+=cut
+
+sub mapStudyFactors { 
+  my ($self, $studyDesign, $mageSFs) = @_;
+
+  my $sLogger = $self->getLogger();
+  $sLogger->debug("VO StudyFactors Type\n",sub {Dumper($mageSFs)});
+
+  my @studyFactors;
+
+   foreach my $mageSF (@$mageSFs){
+     my $type = $mageSF->getType;
+     my $oe = $self->createRadOE($type, "studyFactor");
+
+     my $studyFactor = $self->objectMapper({name => $mageSF->getName()});
+
+     $studyFactor->setParent($studyDesign);
+     $studyFactor->setParent($oe);
+
+     push(@studyFactors, $studyFactor);
+   }
+  return \@studyFactors;
+}
+
+#--------------------------------------------------------------------------------
+
+=item C<mapProtocols>
+
+Create GUS Protocols and set parents correctly.  ProtocolType must be provided in the
+VO object.  
+
+TODO: Privacy
+
+B<Parameters:>
+
+ $mageProtocols([RAD::MR_T::MageImport::VO::ProtocolVO]): Protocol VO objects to be mapped
+
+B<Return Type:> 
+
+ C<[GUS::Model::RAD::Protocol]> GUS Protocols
+
+=cut
+
+sub mapProtocols { 
+ my ($self, $mageProtocols) = @_;
+
+ my $sLogger = $self->getLogger();
+ $sLogger->debug("VO Protocols Type\n",sub {Dumper($mageProtocols)});
+
+ my @protocols;
+
+ foreach my $mageProtocol(@$mageProtocols) {
+   my $protocol = $self->objectMapper({name => $mageProtocol->getName,
+                                      });
+
+   unless($self->wasRetrieved($protocol)) {
+     my $protocolType = $mageProtocol->getProtocolType();
+     my $oe = $self->createRadOE($protocolType, "protocol");
+     my $protocolTypeId = $oe->getId();
+
+     $protocol->setUri($mageProtocol->getUri);
+     $protocol->setProtocolDescription($mageProtocol->getProtocolDescription);
+     $protocol->setSoftwareDescription($mageProtocol->getSoftwareDescription);
+     $protocol->setHardwareDescription($mageProtocol->getHardwareDescription);
+     $protocol->setProtocolTypeId($protocolTypeId);
+   }
+
+   $self->mapProtocolParams($mageProtocol->getParams, $protocol);
+
+   push(@protocols, $protocol);
+ }
+
+ return \@protocols;
+}
+
+#--------------------------------------------------------------------------------
+
+=item C<mapProtocolParamss>
+
+If the GUS ProtocolExists...get the Children params and setParent.
+If no GUS Protocol...Create GUS ProtocolParams and set parents correctly.  
+ProtocolType must be provided in the VO object.  
+
+B<Parameters:>
+
+ $mageProtocolParams([RAD::MR_T::MageImport::VO::ProtocolParamVO]): ProtocolParam VO objects to be mapped
+ $protocol(GUS::Model::RAD::Protocol): Parent GUS Protocol
+
+B<Return Type:> 
+
+ C<[GUS::Model::Study::ProtocolParam]> GUS ProtocolParams
+
+=cut
+
+sub mapProtocolParams {
+  my ($self, $mageProtocolParams, $protocol) = @_;
+
+  my $protocolName = $protocol->getName();
+
+  my $sLogger = $self->getLogger();
+  $sLogger->debug("VO ProtocolParams Type\n",sub {Dumper($mageProtocolParams)});
+
+  my @protocolParams;
+
+  if($self->wasRetrieved($protocol)) {
+    # Retrieve the ProtocolParams from the DB...
+    @protocolParams = $protocol->getChildren('RAD::ProtocolParam', 1);
+
+    foreach my $mageParam (@$mageProtocolParams) {
+      my $name = $mageParam->getName();
+
+      try {
+        $self->searchObjArrayByObjName(\@protocolParams, $name);
+      } catch RAD::MR_T::MageImport::ObjectMapperException::NonUniqueNameError with {
+        unless($protocolName =~ /^DTPT series: /) {
+          RAD::MR_T::MageImport::ObjectMapperException::ImproperVoObject->
+              new("Param name $name is not valid for Existing Protocol $protocolName")->throw();
+        }
+      };
+    }
+  }
+  else {
+    foreach my $magePP(@$mageProtocolParams) {
+
+      my ($unitTypeId, $dataTypeId);
+
+      if(my $ut = $magePP->getUnitType()) {
+        my $unitTypeOe = $self->createRadOE($ut, "unit");
+        $unitTypeId = $unitTypeOe->getId();
+      }
+
+      if(my $dt = $magePP->getDataType()) {
+        my $dataTypeOe = $self->createRadOE($dt, "data");
+        $dataTypeId = $dataTypeOe->getId();
+      }
+ 
+      # Must set the oe's with id's because multiple parents of same type
+      my $protocolParam = $self->objectMapper({name => $magePP->getName,
+                                               value => $magePP->getValue,
+                                               data_type_id => $dataTypeId,
+                                               unit_type_id => $unitTypeId,
+                                            });
+
+      $protocolParam->setParent($protocol);
+
+      push(@protocolParams, $protocolParam);
+    }
+  }
+
+  return \@protocolParams;
+}
+
+#--------------------------------------------------------------------------------
+
+=item C<mapAssays>
+
+Create GUS Assays and set parents (ArrayDesign, operator).  Contacts are searched 
+by name and arrayDesigns are searched by sourceId.  The ArrayDesign SourceId must
+be found in the Database.  Calls mapAcquisitions to map the children also.
+
+TODO: date
+
+B<Parameters:>
+
+ $mageAssays([RAD::MR_T::MageImport::VO::AssayVO]): Assay VO objects to be mapped
+ $contacts([GUS::Model::SRes::Contact]): List of GUS Contacts to search
+ $arrayDesigns([GUS::Model::RAD::ArrayDesigns]): List of GUS ArrayDesigns to search
+
+B<Return Type:> 
+
+ C<[GUS::Model::RAD::Assay]> GUS Assays
+
+=cut
+
+sub mapAssays { 
+ my ($self, $mageAssays, $contacts, $arrayDesigns, $studyDesigns, $protocols, $bioMaterials) = @_;
+
+ my $sLogger = $self->getLogger();
+ $sLogger->debug("VO Assays Type\n",sub {Dumper($mageAssays)});
+
+ my @assays;
+
+ foreach my $mageAssay (@$mageAssays) {
+   my $assay = $self->objectMapper({name => $mageAssay->getName});
+
+   my $contactName = $mageAssay->getOperator()->getName();
+   my $contact = $self->searchObjArrayByObjName($contacts, $contactName);
+
+   if(my $protocolName = $mageAssay->getProtocolName()) {
+     my $protocol = $self->searchObjArrayByObjName($protocols, $protocolName);
+     $assay->setParent($protocol);
+
+     my @protocolParameters = $protocol->getChildren('RAD::ProtocolParam');
+
+     foreach my $mageParameterValue (@{$mageAssay->getParameterValues()}) {
+       my $parameterName = $mageParameterValue->getParameterName();
+       my $value = $mageParameterValue->getValue();
+
+       my $assayParam = GUS::Model::RAD::AssayParam->new({value => $value});
+       $assayParam->setParent($assay);
+
+       try {
+         my $protocolParam = $self->searchObjArrayByObjName(\@protocolParameters, $parameterName);
+         $assayParam->setParent($protocolParam);
+       } catch RAD::MR_T::MageImport::ObjectMapperException::NonUniqueNameError with {
+         my $e = shift;
+
+         $sLogger->fatal("Not assigning ProtocolParamId to AssayParam with name [$parameterName]");
+         $e->throw();
+       };
+     }
+   }
+
+
+   foreach my $mageLex (@{$mageAssay->getLabeledExtracts()}) {
+     my $lexName = $mageLex->getName();
+     my $lex = $self->searchObjArrayByObjName($bioMaterials, $lexName);
+
+     my $channel = $self->createRadOE($mageLex->getChannel(), 'labelCompound');
+
+     my $assayLex = GUS::Model::RAD::AssayLabeledExtract->new();
+     $assayLex->setParent($assay);
+     $assayLex->setParent($lex);
+     $assayLex->setParent($channel);
+   }
+
+   my $arrayDesignSourceId = $mageAssay->getArraySourceId();
+   my $arrayDesign = $self->searchObjArrayByObjSourceId($arrayDesigns, $arrayDesignSourceId);
+
+   $assay->setParent($contact);
+   $assay->setParent($arrayDesign);
+
+   push(@assays, $assay);
+
+   $self->mapAcquisitions($mageAssay->getAcquisitions, $assay, $studyDesigns, $protocols);
+ }
+ return \@assays
+}
+
+#--------------------------------------------------------------------------------
+
+=item C<mapAcquisitions>
+
+Create GUS Acquisitions and set the parent assay.  Also calls mapQuantifications for the 
+children.
+
+TODO: date
+
+B<Parameters:>
+
+ $mageAcquisitions([RAD::MR_T::MageImport::VO::AcquisitionVO]): Acquisition VO objects to be mapped
+ $assay(GUS::Model::RAD::Assay): Parent GUS Assay
+
+B<Return Type:> 
+
+ C<[GUS::Model::RAD::Acquisition]> ArrayRef of GUS Acquisitions
+
+=cut
+
+sub mapAcquisitions {
+  my ($self, $mageAcquisitions, $assay, $studyDesigns, $protocols) = @_;
+
+  my @acquisitions;
+
+  my $logger = $self->getLogger();
+
+  foreach my $mageAcquisition(@$mageAcquisitions) {
+    my $channels = $mageAcquisition->getChannels();
+    my $channelNumber = scalar(@$channels);
+
+    foreach my $channel (@$channels) {
+      my $channelValue = $channel->getValue();
+      my $oe = $self->createRadOE($channel, 'labelCompound');
+
+      my $acquisitionName = $mageAcquisition->getName;
+
+      my $acquisition = $self->objectMapper({name => $acquisitionName,
+                                             uri => $mageAcquisition->getUri,
+                                            });
+
+      if(my $protocolName = $mageAcquisition->getProtocolName()) {
+        my $protocol = $self->searchObjArrayByObjName($protocols, $protocolName);
+        $acquisition->setParent($protocol);
+
+        my @protocolParameters = $protocol->getChildren('RAD::ProtocolParam');
+
+        foreach my $mageParameterValue (@{$mageAcquisition->getParameterValues()}) {
+          my $parameterName = $mageParameterValue->getParameterName();
+          my $value = $mageParameterValue->getValue();
+
+          my $acquisitionParam = GUS::Model::RAD::AcquisitionParam->new({value => $value,
+                                                                        name => $parameterName});
+          $acquisitionParam->setParent($acquisition);
+
+          try {
+            my $protocolParam = $self->searchObjArrayByObjName(\@protocolParameters, $parameterName);
+            $acquisitionParam->setParent($protocolParam);
+          } catch RAD::MR_T::MageImport::ObjectMapperException::NonUniqueNameError with {
+            $logger->warn("Not assigning ProtocolParamId to AcquisitionParam with name [$parameterName]");
+          };
+        }
+      }
+
+      $acquisition->setParent($oe);
+      $acquisition->setParent($assay);
+
+      $self->mapStudyFactorValues($mageAcquisition->getFactorValues(), $assay, $oe, $studyDesigns, $channelNumber);
+      $self->mapQuantifications($mageAcquisition->getQuantifications, $acquisition, $protocols);
+
+      push(@acquisitions, $acquisition);
+    }
+  }
+
+  return \@acquisitions;
+}
+
+#--------------------------------------------------------------------------------
+
+=item C<mapStudyFactorValues>
+
+create gus studyfactorvalues and set studyFactor and ontology entry(s) parents.
+
+B<Parameters:>
+
+ $mageFactorValues([RAD::MR_T::MageImport::VO::FactorValueVO]): ArrayRef of FactorValue VO objects to be mapped
+ $assay(GUS::Model::RAD::Assay): Parent GUS Assay
+ $channel(GUS::Model::Study::OntologyEntry): Parent GUS OntologyEntry for the channel (category = 'LabelCompound')
+ $studyDesigns([GUS::Model::Study::StudyDesign]): ArrayRef of GUS StudyDesign objects
+
+B<Return Type:> 
+
+ C<[GUS::Model::RAD::StudyFactorValue]> ArrayRef of GUS StudyFactorValues
+
+=cut
+
+sub mapStudyFactorValues {
+  my ($self, $mageFactorValues, $assay, $channel, $studyDesigns, $channelNumber) = @_;
+
+  my $sLogger = $self->getLogger();
+
+  my @studyFactors;
+  foreach my $studyDesign (@$studyDesigns) {
+    push(@studyFactors, $studyDesign->getChildren('Study::StudyFactor'));
+  }
+
+  my @studyFactorValues;
+
+  foreach my $mageFactorValue (@$mageFactorValues) {
+    my $factorName = $mageFactorValue->getFactorName();
+    my $studyFactor = $self->searchObjArrayByObjName(\@studyFactors, $factorName);
+
+    my $valueOE = $mageFactorValue->getValue();
+    my $stringValue = $valueOE->getValue();
+
+    my $channelId = $channelNumber == 1 ? $channel->getId() : undef;
+
+    my $gusOntologyId;
+
+    try {
+      my $oe = $self->createRadOE($valueOE, 'studyFactorValue');
+      $gusOntologyId = $oe->getId();
+    } catch RAD::MR_T::MageImport::ObjectMapperException::RetrieveFromDbError with {
+      $sLogger->warn("NOT Assigning a RAD::StudyFactorValue::value_ontology_entry_id for [$stringValue]");
+    };
+
+    my $studyFactorValue = $self->objectMapper({ value_ontology_entry_id => $gusOntologyId,
+                                                 string_value => $stringValue,
+                                                 channel_id => $channelId,
+                                               });
+
+    my $seen;
+    foreach my $prev ($assay->getChildren('RAD::StudyFactorValue')) {
+      my $prevSfName = $prev->getParent('Study::StudyFactor')->getName();
+      my $prevString = $prev->getStringValue;
+
+      $seen = $prev if($prevString eq $stringValue && $prevSfName eq $studyFactor->getName());
+    }
+
+    if($seen) {
+      $seen->setChannelId('');
+    }
+    else {
+      $studyFactorValue->setParent($assay);
+      $studyFactorValue->setParent($studyFactor);
+
+      push(@studyFactorValues, $studyFactorValue);
+    }
+  }
+  return \@studyFactorValues;
+}
+
+
+#--------------------------------------------------------------------------------
+
+=item C<mapQuantifications>
+
+Create GUS Quantifications and set the parent acquisition
+
+TODO: date
+
+B<Parameters:>
+
+ $mageQuantifications([RAD::MR_T::MageImport::VO::QuantificationVO]): ArrayRef of Acquisition VO objects to be mapped
+ $acquisition(GUS::Model::RAD::Acquisition): Parent GUS Acquisition
+
+B<Return Type:> 
+
+ C<[GUS::Model::RAD::Quantification]> ArrayRef of GUS Quantifications
+
+=cut
+
+sub mapQuantifications {
+  my ($self, $mageQuantifications, $acquisition, $protocols) = @_;
+
+  my @quantifications;
+
+  my $logger = $self->getLogger();
+
+  foreach my $mageQuantification(@$mageQuantifications) {
+    my $quantificationName = $mageQuantification->getName;
+
+    if($mageQuantification->getProtocolName() =~ /^DTPT series: /) {
+      $logger->warn("Skipping DataTransformation Quantification [$quantificationName]");
+      next;
+    }
+
+    my $uri = $self->getQuantificationPrefix() . $mageQuantification->getUri();
+
+    my $quantification = $self->objectMapper({name => $quantificationName,
+                                              uri => $uri,
+                                             });
+
+    if(my $protocolName = $mageQuantification->getProtocolName()) {
+      my $protocol = $self->searchObjArrayByObjName($protocols, $protocolName);
+      $quantification->setParent($protocol);
+
+      my @protocolParameters = $protocol->getChildren('RAD::ProtocolParam');
+
+      foreach my $mageParameterValue (@{$mageQuantification->getParameterValues()}) {
+        my $parameterName = $mageParameterValue->getParameterName();
+        my $value = $mageParameterValue->getValue();
+
+        my $quantificationParam = GUS::Model::RAD::QuantificationParam->new({value => $value, 
+                                                                            name => $parameterName,
+                                                                            });
+        $quantificationParam->setParent($quantification);
+
+        try {
+          my $protocolParam = $self->searchObjArrayByObjName(\@protocolParameters, $parameterName);
+          $quantificationParam->setParent($protocolParam);
+        } catch RAD::MR_T::MageImport::ObjectMapperException::NonUniqueNameError with {
+          $logger->warn("Not assigning ProtocolParamId to QuantificationParam with name [$parameterName]");
+        };
+      }
+    }
+
+    if(my $processes = $mageQuantification->getProcesses()) {
+      $self->mapQuantifications($processes, $acquisition, $protocols);
+    }
+
+    $quantification->setParent($acquisition);
+    push(@quantifications, $quantification);
+  }
+  return \@quantifications;
+}
+
+#--------------------------------------------------------------------------------
+
+=item C<mapBioMaterials>
+
+Create GUS BioMaterials.  SubclassView's of BioSource, BioSample, and LabeledExtract are supported.
+If the BioMaterial is a BioSource... a provider contact can be provided.  All BioMaterials
+must provide a OntologyEntryVO for Type.
+
+B<Parameters:>
+
+ $mageBioMaterials([RAD::MR_T::MageImport::VO::BioMaterialVO]): ArrayRef of BioMaterial VO objects to be mapped
+ $contacts([GUS::Model::SRes::Contact]): ArrayRef of GUS Contacts to search if provider is given
+
+B<Return Type:> 
+
+ C<[GUS::Model::Study::BioMaterial]> ArrayRef of GUS BioMaterials (Different Subclasses)
+
+=cut
+
+sub mapBioMaterials { 
+  my ($self, $mageBioMaterials, $contacts) = @_;
+
+  my $sLogger = $self->getLogger();
+  $sLogger->debug("VO BioMaterials Type\n",sub {Dumper($mageBioMaterials)});
+
+  my @modes = qw/BioSample BioSource LabeledExtract/;
+  my $modes_rx = '^('. join('|', at modes). ')$';
+
+  my @bioMaterials; 
+
+  foreach my $mageBM (@$mageBioMaterials) {
+    my $subclass = $mageBM->getSubclassView;
+
+    $subclass =~ s/^Extract|^Sample/BioSample/;
+    $subclass =~ s/^Source/BioSource/;
+
+    unless($subclass =~ /$modes_rx/) {
+      RAD::MR_T::MageImport::ObjectMapperException::ImproperVoObject->
+          new("Subclass [ $subclass ] not supported in GUS")->throw();
+    }
+
+    my $subCall = "map$subclass";
+    my $bioMaterial = $self->$subCall({name => $mageBM->getName,
+                                       subclass_view => $subclass,
+                                       description => $mageBM->getDescription,
+                                      });
+
+    my $type = $mageBM->getBioMaterialType;
+    my $oe = $self->createRadOE($type, "biomaterial");
+    $bioMaterial->setParent($oe);
+
+    my $mageContact = $mageBM->getProvider();
+    if($mageContact && $bioMaterial->isa('GUS::Model::Study::BioSource')) {
+      my $contact = $self->searchObjArrayByObjName($contacts, $mageContact->getName());
+      $bioMaterial->setParent($contact);
+    }
+
+    my $mageChars = $mageBM->getBioMaterialChars();
+    $self->mapBioMaterialCharacteristics($mageChars, $bioMaterial);
+
+    push(@bioMaterials, $bioMaterial);
+  }
+  return \@bioMaterials;
+}
+
+#--------------------------------------------------------------------------------
+
+sub mapBioSource { $_[0]->objectMapper($_[1]) }
+sub mapBioSample { $_[0]->objectMapper($_[1]) }
+sub mapLabeledExtract { $_[0]->objectMapper($_[1]) }
+
+#--------------------------------------------------------------------------------
+
+=item C<mapBioMaterialCharacteristics>
+
+Gets the Create the BioMaterial Characteristic and sets the OntologyEntry and BioMateial
+parents.  
+
+Any values which are not found in the OntologyEntry table are SKIPPED and Logged.
+
+# TODO: VO BMCharacteristic must be an OntologyVO
+# TODO: AGE... we are currently skipping
+
+B<Parameters:>
+
+ $mageChars([RAD::MR_T::MageImport::VO::OntologyEntryVO]): ArrayRef of OntologyEntry VO objects
+ $bioMaterial([GUS::Model::Study::BioMaterial]): GUS BioMaterial (different subclasses)
+
+B<Return Type:> 
+
+ C<[GUS::Model::Study::BioMaterialCharacteristic]> ArrayRef of GUS BioMaterialCharacteristics
+
+=cut
+
+sub mapBioMaterialCharacteristics {
+  my ($self, $mageChars, $bioMaterial) = @_;
+
+  my $bioMaterialName = $bioMaterial->getName();
+
+  my $sLogger = $self->getLogger();
+  $sLogger->debug($mageChars);
+
+  my @characteristics;
+
+  foreach my $mageChar (@$mageChars) {
+    my $oe;
+
+    my $category = $mageChar->getCategory();
+
+    #next if($category eq 'GeneticModification');
+    #next if($category eq 'TimeUnit');
+    #next if($category eq 'Age');
+
+    if($category eq 'Organism') {
+      $self->mapTaxon($mageChar, $bioMaterial);
+    }
+
+    try {
+      $oe = $self->createRadOE($mageChar, 'characteristic');
+
+      my $characteristic = GUS::Model::Study::BioMaterialCharacteristic->new();
+
+      $characteristic->setParent($oe);
+      $characteristic->setParent($bioMaterial);
+
+      push(@characteristics, $characteristic);
+
+    } catch RAD::MR_T::MageImport::ObjectMapperException::RetrieveFromDbError with {
+      $sLogger->warn("Skipping Characteristic for BioMaterial $bioMaterialName\n", sub {Dumper($mageChar)});
+    };
+
+  }
+
+  return \@characteristics;
+}
+
+
+# TODO: POD DOC AND TEST
+
+sub mapTaxon {
+  my ($self, $oe, $bioMaterial) = @_;
+
+  my $sLogger = $self->getLogger();
+
+  $self->addMethodToObjectMap ('__ANON__',  'GUS::Model::SRes::TaxonName');
+
+  my $taxonName;
+
+  try {
+    $taxonName = $self->objectMapper({name => $oe->getValue()});
+    my $taxonId = $taxonName->getTaxonId();
+
+    $bioMaterial->setTaxonId($taxonId);
+  } catch RAD::MR_T::MageImport::ObjectMapperException::RetrieveFromDbError with {
+    my $name = $bioMaterial->getName();
+    $sLogger->warn("Skipping Setting TaxonId for BioSource:  $name");
+  };
+
+  $methodToObjectMap ->{'__ANON__'} = undef;
+
+  return($taxonName);
+}
+
+
+
+=item C<mapTreatments>
+
+Probably the most complicated code in this class because of the GUS schema for Treatments.
+This method will create the treatment (has an output biomaterial), and set the parent protocol (if provided) and labelMethod
+if it is a LabeledExtract.  It then calls mapBioMaterialMeasurement which provides the
+link for the input biomaterials to the treatment. (This assumes that the labeldextract 
+will always have a labelMethod and others don't).
+
+B<Parameters:>
+
+ $mageTreatments([RAD::MR_T::MageImport::VO::TreatmentVO]): ArrayRef of Treatment VO objects to be mapped
+ $protocols([GUS::Model::RAD::Protocol]): ArrayRef of GUS Protocols to search 
+ $protocols([GUS::Model::Study::BioMaterial]): ArrayRef of GUS BioMaterials to search  (Different Subclasses)
+
+B<Return Type:> 
+
+ C<[GUS::Model::RAD::Treatment]> ArrayRef of GUS Treatments
+
+=cut
+
+sub mapTreatments { 
+  my ($self, $mageTreatments, $protocols, $bioMaterials) = @_;
+
+  my $sLogger = $self->getLogger();
+  $sLogger->debug("VO Treatments\n",sub {Dumper($mageTreatments)});
+
+  my @treatments;
+  my @labelMethods;
+
+  foreach my $mageTrt(@ $mageTreatments){
+    my $treatment = $self->objectMapper({name => $mageTrt->getName,
+                                         order_num => $mageTrt->getOrderNum,
+                                        });
+
+    my $type = $mageTrt->getTreatmentType;
+    my $oe = $self->createRadOE($type, "treatment");
+    $treatment->setParent($oe);
+
+    my $outBioMaterialName = $mageTrt->getOutputBM->getName();
+    my $bioMaterial = $self->searchObjArrayByObjName($bioMaterials, $outBioMaterialName);
+    $treatment->setParent($bioMaterial);
+
+    if($mageTrt->getProtocol) {
+      my $protocolName = $mageTrt->getProtocol->getName;
+      my $protocol = $self->searchObjArrayByObjName($protocols, $protocolName);
+      $treatment->setParent($protocol);
+
+      my @protocolParameters = $protocol->getChildren('RAD::ProtocolParam');
+
+      foreach my $mageParameterValue (@{$mageTrt->getParameterValues()}) {
+        my $parameterName = $mageParameterValue->getParameterName();
+        my $protocolParam = $self->searchObjArrayByObjName(\@protocolParameters, $parameterName);
+
+        my $value = $mageParameterValue->getValue();
+        my $treatmentParam = GUS::Model::RAD::TreatmentParam->new({value => $value});
+        $treatmentParam->setParent($treatment);
+        $treatmentParam->setParent($protocolParam);
+      }
+
+      if($mageTrt->getOutputBM->getSubclassView() eq 'LabeledExtract') {
+        my $channel = $mageTrt->getOutputBM->getChannel;
+        my $labelMethod = $self->mapLabelMethod($channel, $protocol, \@labelMethods);
+        push(@labelMethods, $labelMethod);
+
+        $bioMaterial->setParent($labelMethod);
+      }
+    }
+
+    my $mageBmms = $mageTrt->getInputBMMs();
+
+    if(scalar(@$mageBmms) > 1 && $oe->getValue() ne 'pool') {
+      RAD::MR_T::MageImport::ObjectMapperException::ImproperVoObject->
+          new("Multiple BioMaterialMeasurements but not pool treatment")->throw();
+    }
+    $self->mapBioMaterialMeasurements($mageBmms, $treatment, $bioMaterials);
+
+    push(@treatments, $treatment);
+  }
+  return(\@treatments);
+}
+
+#--------------------------------------------------------------------------------
+
+=item C<mapLabelMethod>
+
+Create a GUS LabelMethod object and set the parents.  Look through the RAD::LabelMethods
+objects which have already been made.  If one with the same name and the same oe value exists...
+just return that one.  
+For NEW LabelMethods... check whether the protocol and the ontology entry are existing (ie. have id's),
+try to retrieve them (Create new if no retrieve).  
+If either protocol or oe doesn't have an ID... just create
+new.
+
+B<Parameters:>
+
+ $channel(RAD::MR_T::MageImport::VO::OntologyEntryVO): OntologyEntryVO object which of category 'LabelCompound'
+ $protocol(GUS::Model::RAD::Protocol): Parent GUS Protocol
+
+B<Return Type:> 
+
+ C<GUS::Model::RAD::LabelMethod> GUS LabelMethod object
+
+=cut
+
+sub mapLabelMethod {
+  my ($self, $channel, $protocol, $labelMethods) = @_;
+
+  my $oe = $self->createRadOE($channel, 'labelCompound');
+
+  my $protocolId = $protocol->getId;
+  my $oeId = $oe->getId;
+
+  # Look through existing label methods for one with the same protocol and ontology
+  # MUST use the names and not ID because they may be NEW!!!
+  foreach my $prev (@$labelMethods) {
+    my $prevProt = $prev->getParent('RAD::Protocol');
+    my $prevOE = $prev->getParent('Study::OntologyEntry');
+
+    if($prevProt->getName() eq $protocol->getName() && $oe->getValue() eq $prevOE->getValue()) {
+      return($prev);
+    }
+  }
+
+  my $labelMethod;
+
+  # If this is an existing protocol and ontology try to retrieve from the DB
+  if($protocolId && $oeId) {
+    $labelMethod = $self->objectMapper({protocol_id => $protocolId,
+                                        channel_id => $oe->getId,
+                                       });
+  }
+  else {
+    $labelMethod = GUS::Model::RAD::LabelMethod->new();
+  }
+
+  $labelMethod->setParent($protocol);
+  $labelMethod->setParent($oe);
+
+  return $labelMethod;
+}
+
+#--------------------------------------------------------------------------------
+
+=item C<mapBioMaterialMeasurements>
+
+Create GUS BioMaterialMeasurment objects and set their parents (treatment, ontologyentry?, and biomaterial).
+
+B<Parameters:>
+
+ $mageBmms([RAD::MR_T::MageImport::VO::BioMaterialMeasurementVO]): ArrayRef of BioMaterialMeasurement VO objects
+ $treatment(GUS::Model::RAD::Treatment): Parent GUS Treatment
+ $bioMaterials(GUS::Model::Study::BioMaterial): ArrayRef of GUS biomaterial objects to search (Parent)
+
+B<Return Type:> 
+
+ C<[GUS::Model::RAD::BioMaterialMeasurement]> ArrayRef of GUS BioMaterialMeasurement objects
+
+=cut
+
+sub mapBioMaterialMeasurements {
+  my ($self, $mageBmms, $treatment, $bioMaterials) = @_;
+
+  my @bioMaterialMeasurements;
+
+  foreach my $mageBmm (@$mageBmms) {
+
+    my $bioMaterialMeasurement = $self->objectMapper({value => $mageBmm->getValue});
+
+    $bioMaterialMeasurement->setParent($treatment);
+
+    my $bioMaterialName = $mageBmm->getBioMaterial()->getName();
+    my $bioMaterial = $self->searchObjArrayByObjName($bioMaterials, $bioMaterialName);
+
+    $bioMaterialMeasurement->setParent($bioMaterial);
+
+    if(my $ut = $mageBmm->getUnitType) {
+      my $oe = $self->createRadOE($ut, "unit");
+      $bioMaterialMeasurement->setParent($oe);
+    }
+
+    push(@bioMaterialMeasurements, $bioMaterialMeasurement);
+  }
+
+  return \@bioMaterialMeasurements;
+}
+
+#--------------------------------------------------------------------------------
+
+=item C<createRadOE>
+
+use case: it is hard to manually fix OE across MAGGE-ML, but if its value is right and unique, 
+          we should accept it even its cateogry is wrong
+
+side effect: 1) retrieve OE based on value first, if fails, then retrieve based on value and category
+             2) we have to do $self->addMethodToObjectMap ('__ANON__',  'GUS::Model::Study::OntologyEntry') to make try catch works
+             #) are some of logical should move to processor?
+
+Ontology Entry Objects should NEVER be modified!!!
+
+B<Parameters:>
+
+ $mageOe([RAD::MR_T::MageImport::VO::OntologyEntryVO]): OntologyEntry VO object
+ $type(string):  supported mode to distinguish between callers
+
+B<Return Type:> 
+
+ C<GUS::Model::Study::OntologyEntry> GUS OntologyEntry Object.
+
+=cut
+
+sub createRadOE{
+  my ($self, $mageOE, $type) = @_;
+
+  my $sLogger = $self->getLogger();
+  $sLogger->debug("VO OntologyEntry of type $type\n",sub {Dumper($mageOE)});  
+
+  unless($mageOE->isa('RAD::MR_T::MageImport::VO::OntologyEntryVO')) {
+    my $msg = "Expected OntologyEntryVO but found: ". ref($mageOE);
+    RAD::MR_T::MageImport::ObjectMapperException->new($msg)->throw();
+  }
+
+  my @modes    = qw( studyDesign studyFactor treatment protocol unit data biomaterial labelCompound characteristic studyFactorValue);
+  my $modes_rx = '^('. join('|', at modes). ')$';
+
+  unless($type =~ /$modes_rx/) {
+    RAD::MR_T::MageImport::ObjectMapperException->new("Type [ $type ] is not supported")->throw();
+  }
+
+  my $radOE;
+  my $value = $mageOE->getValue();
+  my $category = $mageOE->getCategory();
+
+  $category = 'ExperimentalProtocolType' if($type eq 'studyFactor' && $value eq 'genetic_modification');
+  $category = 'BioMaterialCharacteristicCategory' if($type eq 'studyFactor' && $value eq 'organism_part');
+
+  if($radOE = $self->searchForExistingOntologyEntry($value, $category)) {
+    return $radOE;
+  }
+
+  my $externalDatabases = $self->getExternalDatabases();
+
+  $self->addMethodToObjectMap ('__ANON__',  'GUS::Model::Study::OntologyEntry');
+
+  unless($category) {
+    $radOE = $self->objectMapper({value => $value });
+
+    # If there is no category after the retrieve... Throw an Exception
+    RAD::MR_T::MageImport::ObjectMapperException::RetrieveFromDbError->
+        new("You Must provide a Category for the OntologyEntry [$value] of type [$type]")->throw() unless($radOE->getCategory());
+  }
+  else {
+
+    try {
+      $radOE = $self->objectMapper({value => $mageOE->getValue,
+                                    category => $category,
+                                   });
+
+    } catch RAD::MR_T::MageImport::ObjectMapperException::RetrieveFromDbError::MultipleRowsReturned with {
+      my $e = shift;
+      $e->throw();
+
+    } catch RAD::MR_T::MageImport::ObjectMapperException::RetrieveFromDbError with {
+      my $e = shift;
+
+      if($type eq 'treatment' && $category eq "Action") {
+        $radOE = $self->objectMapper({value => $mageOE->getValue, 
+                                      category => 'ComplexAction',
+                                     });
+      }
+      elsif($type eq "protocol" && $category eq "ProtocolType") {
+        $radOE = $self->objectMapper({value => $mageOE->getValue, 
+                                      category => 'ExperimentalProtocolType',
+                                     });
+      }
+      else {
+        $sLogger->debug($e->stacktrace());
+        $e->throw();
+      }
+    };
+  }
+
+  $methodToObjectMap ->{'__ANON__'} = undef;
+
+  unless($self->wasRetrieved($radOE)) {
+    if(my $voExtDb = $mageOE->getExternalDatabase()) {
+
+     my $extDbName = $voExtDb->getName();
+
+      if(my $gusExtDbRls = $externalDatabases->{$extDbName}) {
+        $radOE->setUri($voExtDb->getUri());
+
+        my $sourceId = "#" . $value;
+        $radOE->setSourceId($sourceId);
+
+        $radOE->setParent($gusExtDbRls);
+      } 
+      else {
+        RAD::MR_T::MageImport::ObjectMapperException::ImproperVoObject->
+            new("The SRes::ExternalDatabase [$extDbName] was not created prior to making OntologyEntry [$value]")->throw();
+      }
+    }
+    else {
+      $sLogger->warn("New Ontology Entry [$value] Being Created Without An ExternalDatabase");
+      $radOE->setName('user_defined');
+    }
+  }
+
+  # Keep running list of seen ontology entries
+  $self->addOntologyEntry($radOE);
+
+  return $radOE;
+}
+
+#--------------------------------------------------------------------------------
+
+=item C<mapStudyAssays>
+
+Create GUS StudyAssay object and set parents (Study and Assay)
+
+B<Parameters:>
+
+ $study(GUS::Model::Study::Study): Main Study Object
+ $assays([GUS::Model::RAD::Assay]): ArrayRef of GUS Assay objects
+
+B<Return Type:> 
+
+ C<[GUS::Model::RAD::StudyAssay]> ArrayRef of GUS StudyAssay Objects
+
+=cut
+
+sub mapStudyAssays {
+  my ($self, $study, $assays) = @_;
+
+  my @studyAssays;
+
+  foreach my $assay (@$assays) {
+    my $sa = $self->objectMapper();
+    $sa->setParent($assay);
+    $sa->setParent($study);
+
+    push(@studyAssays, $sa);
+  }
+  return(\@studyAssays);
+}
+
+#--------------------------------------------------------------------------------
+
+=item C<mapStudyBioMaterials>
+
+Create GUS StudyBioMaterial object and set parents (Study and BioMaterial)
+
+B<Parameters:>
+
+ $study(GUS::Model::Study::Study): Main Study Object
+ $bioMaterials([GUS::Model::Study::BioMaterial]): ArrayRef of GUS BioMaterial objects (Different SubClasses)
+
+B<Return Type:> 
+
+ C<[GUS::Model::RAD::StudyBioMaterial]> ArrayRef of GUS StudyBioMaterial Objects
+
+=cut
+
+sub mapStudyBioMaterials {
+ my ($self, $study, $bioMaterials) = @_;
+
+ my @studyBioMaterials;
+
+  foreach my $bioMaterial (@$bioMaterials){
+    my $sb = $self->objectMapper();
+    $sb->setParent($bioMaterial);
+    $sb->setParent($study);
+
+    push(@studyBioMaterials, $sb);
+  }
+ return \@studyBioMaterials;
+}
+
+#--------------------------------------------------------------------------------
+
+=item C<mapStudyDesignsAssays>
+
+Create GUS StudyDesignAssay objects and set parents (StudyDesign and Assay)
+
+B<Parameters:>
+
+ $studyDesigns([GUS::Model::Study::StudyDesign]): ArrayRef of GUS StudyDesign Objects
+ $assays([GUS::Model::RAD::Assay]): ArrayRef of GUS Assay objects 
+
+B<Return Type:> 
+
+ C<[GUS::Model::RAD::StudyDesignAssay]> ArrayRef of GUS StudyDesignAssay objects
+
+=cut
+
+sub mapStudyDesignsAssays {
+  my ($self, $studyDesigns, $assays) = @_;
+
+  my @studyDesignAssays;
+
+  foreach my $studyDesign (@$studyDesigns) {
+    foreach my $assay (@$assays) {
+      my $sda = $self->objectMapper();
+      $sda->setParent($studyDesign);
+      $sda->setParent($assay);
+
+      push(@studyDesignAssays, $sda);
+    }
+  }
+  return \@studyDesignAssays;
+}
+
+
+#--------------------------------------------------------------------------------
+
+=item C<mapAssayBioMaterials>
+
+Create GUS AssayBioMaterial objects and set parents (BioMaterial and Assay)
+
+B<Parameters:>
+
+ $voAssays([RAD::MR_T::MageImport::VO::AssayVO]): ArrayRef of Assay VO objects
+ $voTreatmentss([RAD::MR_T::MageImport::VO::TreatmentVO]): ArrayRef of Treatment VO objects
+ $assays([GUS::Model::RAD::Assay]): ArrayRef of GUS Assay objects 
+ $bioMaterials([GUS::Model::Study::BioMaterial]): ArrayRef of GUS BioMaterial objects 
+
+B<Return Type:> 
+
+ C<[GUS::Model::RAD::AssayBioMaterial]> ArrayRef of GUS AssayBioMaterial objects
+
+=cut
+
+sub mapAssayBioMaterials {
+  my ($self, $voAssays, $voTreatments, $assays, $bioMaterials) = @_;
+
+  my @assayBioMaterials;
+
+  foreach my $voAssay (@$voAssays) {
+    my $assay = $self->searchObjArrayByObjName($assays, $voAssay->getName());
+    my $voBioMaterials = findAllAssayBioMaterials($voAssay, $voTreatments);
+
+    foreach my $voBioMaterial (@$voBioMaterials) {
+      my $bioMaterial = $self->searchObjArrayByObjName($bioMaterials, $voBioMaterial->getName());
+
+      my $assayBioMaterial = GUS::Model::RAD::AssayBioMaterial->new();
+      $assayBioMaterial->setParent($assay);
+      $assayBioMaterial->setParent($bioMaterial);
+
+      push(@assayBioMaterials, $assayBioMaterial);
+    }
+  }
+  return \@assayBioMaterials;
+}
+
+#--------------------------------------------------------------------------------
+
+=head2 Utility Methods
+
+=item C<searchObjArrayByObjName>
+
+Searches an Array for an object of a certain name
+
+B<Parameters:>
+
+ $objArray([]): ArrayRef of objects (should be of the same type) with getName method
+ $name(string): string to match
+
+B<Return Type:> 
+
+ C<Object> Whatever type of object populated the input array
+
+=cut
+
+sub searchObjArrayByObjName {
+ my ($self, $objArray, $name) = @_;
+
+ my (@ar, $type);
+
+ foreach my $obj(@$objArray){
+   $type = ref($obj);
+
+   push(@ar, $obj) if($obj->getName eq $name);
+ }
+
+ if(scalar(@ar) > 1) {
+    RAD::MR_T::MageImport::ObjectMapperException::NonUniqueNameError->
+        new("Could not find a DISTINCT object with name $name of type $type")->throw();
+ }
+ if(scalar(@ar) == 0) {
+    RAD::MR_T::MageImport::ObjectMapperException::NonUniqueNameError->
+        new("Could not find ANY object with name $name of type $type")->throw();
+ }
+
+ return $ar[0];
+}
+
+#--------------------------------------------------------------------------------
+
+=item C<searchObjArrayBySourceId>
+
+Searches an Array for an object of a certain sourceId
+
+B<Parameters:>
+
+ $objArray([]): ArrayRef of objects (should be of the same type) with getName method
+ $sourceId(string): string to match
+
+B<Return Type:> 
+
+ C<Object> Whatever type of object populated the input array
+
+=cut
+
+sub searchObjArrayByObjSourceId {
+ my ($self, $objArray, $sourceId) = @_;
+
+ my (@ar, $type);
+
+ foreach my $obj(@$objArray){
+   $type = ref($obj);
+
+   push(@ar, $obj) if($obj->getSourceId eq $sourceId);
+ }
+
+ if(scalar(@ar) > 1) {
+    RAD::MR_T::MageImport::ObjectMapperException::NonUniqueNameError->
+        new("Could not find a DISTINCT object with source_id $sourceId of type $type")->throw();
+ }
+ if(scalar(@ar) == 0) {
+    RAD::MR_T::MageImport::ObjectMapperException::NonUniqueNameError->
+        new("Could not find ANY object with source_id $sourceId of type $type")->throw();
+ }
+
+ return $ar[0];
+
+}
+
+#--------------------------------------------------------------------------------
+
+=item C<wasRetrieved>
+
+Should Only be used for GUS objects.  If an object has 'Id'... it must have been 
+retrieved from the database.
+
+B<Parameters:>
+
+ $objArray(GUS::Model::xxxx::xxxx): Any kind of GUS object
+
+B<Return Type:> 
+
+ C<boolean> 
+
+=cut
+
+sub wasRetrieved {
+  my ($self, $object) = @_;
+
+  if($object->getId()) {
+    return 1;
+  }
+  return 0;
+}
+
+#--------------------------------------------------------------------------------
+
+=item C<camelCapToUnderscore>
+
+CamelCaps are words strung together with the first letter capitalized in each.  
+This method changes to all lower case and puts an underscore in front of any character
+which was capitalized.
+
+B<Parameters:>
+
+ $string(scalar): word in Camel Caps
+
+B<Return Type:> 
+
+ C<string> 
+
+=cut
+
+sub camelCapsToUnderscore {
+  my ($self, $string) = @_;
+
+  my $rv;
+  foreach (split ("", $string)) {
+
+    if(tr/A-Z/a-z/) {
+      $_ = '_'.$_
+    }
+    $rv = $rv . $_;
+  }
+
+  # Remove the first underscore
+  $rv =~ s/^_//;
+
+  return $rv;
+}
+
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Service/Translator/VoToMageTab.pm b/lib/perl/RAD/MR_T/MageImport/Service/Translator/VoToMageTab.pm
new file mode 100644
index 0000000..5994015
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Service/Translator/VoToMageTab.pm
@@ -0,0 +1,1328 @@
+package RAD::MR_T::MageImport::Service::Translator::VoToMageTab;
+
+use base qw(RAD::MR_T::MageImport::Service::AbstractTranslator);
+
+use strict;
+
+use Data::Dumper;
+
+use Error qw(:try);
+
+use RAD::MR_T::MageImport::MageImportError;
+
+my $sLogger;
+
+#--------------------------------------------------------------------------------
+sub writeIDF {
+  my ($self, $docRoot) = @_;
+
+  $sLogger = $self->getLogger();
+  $sLogger->info("start the translating to MAGE-TAB IDF");
+
+  my $voAffiliations = $docRoot->affiliationVOs();
+  my $voPersons = $docRoot->personVOs();
+  my $voExternalDatabases = $docRoot->externalDatabaseVOs();
+  my $voStudy = $docRoot->getStudyVO();
+  my $voProtocols = $docRoot->getProtocolVOs();
+
+  $self->writeStudy($voStudy);
+  $self->writePersons($voPersons);
+  $self->writeProtocols($voProtocols);
+  $self->writeExternalDatabases($voExternalDatabases);
+}
+
+sub writeSDRF {
+  my ($self, $docRoot) = @_;
+
+  $sLogger = $self->getLogger();
+  $sLogger->info("start the translating to MAGE-TAB SDRF");
+
+  my $voProtocols = $docRoot->getProtocolVOs();
+
+  $self->writeSdrf($docRoot, $voProtocols);
+
+}
+
+sub mapAll {
+  my ($self, $docRoot) = @_;
+
+  $sLogger = $self->getLogger();
+  $sLogger->info("start the translating to MAGE-TAB method");
+
+  my $voAffiliations = $docRoot->affiliationVOs();
+  my $voPersons = $docRoot->personVOs();
+  my $voExternalDatabases = $docRoot->externalDatabaseVOs();
+  my $voStudy = $docRoot->getStudyVO();
+  my $voProtocols = $docRoot->getProtocolVOs();
+
+  my $voAssays = $docRoot->getAssayVOs();
+  my $voBioMaterials = $docRoot->getBioMaterialVOs();
+  my $voTreatments = $docRoot->getTreatmentVOs();
+
+  $self->writeStudy($voStudy);
+  $self->writePersons($voPersons);
+  $self->writeProtocols($voProtocols);
+  $self->writeExternalDatabases($voExternalDatabases);
+
+  $self->writeSdrf($docRoot, $voProtocols);
+
+#  $self->writeSdrfPart1($voBioMaterials, $voTreatments);
+
+#  $self->writeSdrfPart2($voAssays, $voStudy);
+}
+
+#--------------------------------------------------------------------------------
+
+sub writeSdrf {
+  my ($self, $docRoot, $voProtocols) = @_;
+
+  my $voAssays = $docRoot->getAssayVOs();
+  my $voBioMaterials = $docRoot->getBioMaterialVOs();
+  my $voTreatments = $docRoot->getTreatmentVOs();
+  my $voStudy = $docRoot->getStudyVO();
+
+  my $allCharacteristicCategories = $self->getDistinctBmCharacteristics($voBioMaterials);
+  my $allParameterNamesAndUnits = $self->getDistinctParameterNamesAndUnits($voProtocols);
+
+  my $sdrfGrid = SDRF_Grid->new($voProtocols, $voTreatments, $allCharacteristicCategories, $allParameterNamesAndUnits, $voAssays, $voStudy);
+
+  $sdrfGrid->printGrid();
+}
+
+#--------------------------------------------------------------------------------
+
+sub getDistinctParameterNamesAndUnits {
+  my ($self, $protocols) = @_;
+
+  my %distinctParameterNames;
+
+  foreach my $p (@$protocols) {
+    my $params = $p->getParams();
+    foreach my $param (@$params) {
+      my $name = $param->getName();
+
+      my ($unit, $category);
+
+      if(my $unitType = $param->getUnitType()) {
+        $unit = $unitType->getValue();
+        $category = $unitType->getCategory();
+      }
+
+      $distinctParameterNames{$name} = [$name, $unit, $category];
+    }
+  }
+
+  my @paramNames;
+  foreach my $paramName (keys %distinctParameterNames) {
+    push(@paramNames, $distinctParameterNames{$paramName});
+  }
+
+  return \@paramNames;
+}
+
+#--------------------------------------------------------------------------------
+
+sub getDistinctBmCharacteristics {
+  my ($self, $voBioMaterials) = @_;
+
+  my %distinctCharCategories;
+
+  foreach my $bm (@$voBioMaterials) {
+    my $bmChars = $bm->getBioMaterialChars() ? $bm->getBioMaterialChars() : [];
+    my @bmChars = map {$_->getCategory} @$bmChars;
+
+    foreach (@bmChars) {
+      $distinctCharCategories{$_} = 1;
+    }
+  }
+  my @categories = keys %distinctCharCategories;
+
+  return \@categories;
+}
+
+
+
+
+sub writeSdrfPart2 {
+  my ($self, $voAssays, $voStudy) = @_;
+
+  $self->writeHeaderFromHybToDerivedData($voAssays, $voStudy);
+  $self->writeHybToDerivedData($voAssays, $voStudy);
+}
+
+sub writeHybToDerivedData {
+  my ($self, $voAssays, $voStudy) = @_;
+
+#   my %lex2assay;
+#   my %lex2assay;
+#   foreach my $assay (@$voAssays){
+#     foreach my $lex (@{$assay->getLabeledExtracts}){
+#       $lex2assay{$lex} = $assay;
+#     }
+#   }
+
+ Hyb: foreach my $assay (@$voAssays) {
+# Lex: for my $lex (keys %lex2assay) {
+  foreach my $lex (@{$assay->getLabeledExtracts}){
+    my @row = ();
+
+    push (@row, $lex->getName);
+#  Hyb: {
+ #   my $assay = $lex2assay{$lex};
+    my ($self, $voAssays, $voStudy) = @_;
+
+    push (@row, $assay->getProtocolName);
+    foreach my $pv(@{$assay->getParameterValues}){
+      push (@row, $pv->getValue);
+    }
+
+    push (@row, $assay->getName);
+
+  #   my @lex = map {$_->getName} @{$assay->getLabeledExtracts};
+#     my $lexString = join(',', @lex);
+#     push(@row, $lexString);
+
+    Scan: foreach my $acq(@{$assay->getAcquisitions}){
+      my @row_copy = @row;
+
+      if($acq->getProtocolName){
+	push (@row_copy, $acq->getProtocolName);
+      }
+      else{
+	push (@row_copy, "N.A");
+      }
+
+      foreach my $pv(@{$acq->getParameterValues}){
+	push (@row_copy, $pv->getValue);
+      }
+
+      push (@row_copy, $acq->getName);
+      push (@row_copy, $acq->getUri?$acq->getUri:"N.A.");
+
+      if($acq->getFactorValues){
+	foreach my $fv(@{$acq->getFactorValues}){
+	  if($fv->getValue){
+	    push (@row_copy, $fv->getValue->getValue);
+	  }
+	  else{
+	    push (@row_copy, "undef");
+	  }
+	}
+      }
+      else{
+	push (@row_copy, "N.A");
+      }
+
+      ArrayData: foreach my $quan(@{$acq->getQuantifications}){
+	my @row_copy_copy = @row_copy;
+	#push (@row_copy_copy, $quan->getName);
+	if($quan->getProtocolName){
+	  push (@row_copy_copy, $quan->getProtocolName);
+	}
+	else{
+	  push (@row_copy_copy, "N.A.");
+	}
+
+	foreach my $pv(@{$quan->getParameterValues}){
+	  push (@row_copy_copy, $pv->getValue);
+	}
+
+	push (@row_copy_copy, $quan->getUri);
+
+	if($quan->getProcesses){
+	DerivedData:  foreach my $process(@{$quan->getProcesses}){
+	    my @row_copy_copy_copy = @row_copy_copy;
+	    if($process->getProtocolName){
+	      push (@row_copy_copy_copy, $process->getProtocolName);
+	    }
+	    else{
+	      push (@row_copy_copy_copy, "N.A.");
+	    }
+
+	    foreach my $pv(@{$process->getParameterValues}){
+	      push (@row_copy_copy_copy, $pv->getValue);
+	    }
+
+	    push (@row_copy_copy_copy, $process->getName);
+	    push (@row_copy_copy_copy, $process->getUri);
+	    $self->stringByRow('',\@row_copy_copy_copy);
+	  }
+	}
+	else{
+	  push (@row_copy_copy, "N.A.\tN.A.\tN.A.");
+	  $self->stringByRow('',\@row_copy_copy);
+	}
+      }#ArrayData
+    }#Scan
+  }#Hyb
+  }#lex
+}
+
+sub writeHeaderFromHybToDerivedData{
+  my ($self, $voAssays, $voStudy) = @_;
+  my %lex2assay;
+
+  my @row = ();
+  push (@row, "LabeledExtract Name");
+
+  push (@row, "Protocol REF");
+  my $assay = $voAssays->[0];
+  foreach my $pv(@{$assay->getParameterValues}){
+    push (@row, "Parameter Value [".$pv->getParameterName."]");
+  }
+
+  push (@row, "Hybridization ID");
+
+
+
+  push (@row, "Protocol REF");
+
+  my $acq = $assay->getAcquisitions->[0];
+  foreach my $pv(@{$acq->getParameterValues}){
+    push (@row, "Parameter Value [".$pv->getParameterName."]");
+  }
+
+  push (@row, "Scan Name");
+  push (@row, "Image File");
+
+  my @factorNames = ();
+  foreach my $studyDesign (@{$voStudy->getDesigns}) {
+    foreach my $studyFactor (@{$studyDesign->getFactors()}) {
+        push(@factorNames, "Factor Value [".$studyFactor->getName()."]");
+    }
+  }
+  push (@row, @factorNames);
+
+  push (@row, "Protocol REF");
+
+  my $quan = $acq->getQuantifications->[0];
+  foreach my $pv(@{$quan->getParameterValues}){
+    push (@row, "Parameter Value [".$pv->getParameterName."]");
+  }
+
+  push (@row, "Array Data File");
+  push (@row, "Protocol REF");
+
+  if($quan->getProcesses){
+    my $process = $quan->getProcesses->[0];
+    foreach my $pv(@{$process->getParameterValues}){
+      push (@row, "Parameter Value [".$pv->getParameterName."]");
+    }
+  }
+
+  push (@row, "Normalization Name");
+  push (@row, "Derived Array Data File");
+
+  $self->stringByRow('',\@row);
+
+}
+
+
+sub writeSdrfPart1{
+ my ($self, $voBioMaterials, $voTreatments) = @_;
+
+  my $voBioSources = $self->getBioSources($voBioMaterials);
+  my @headerRow = ();
+# $logger->info("****Dump the whole docRoot****", sub { Dumper($voBioSources->[0]) } );
+  $self->writeHeaderFromBioSourceToLex($voTreatments,$voBioSources->[0], \@headerRow);
+
+  foreach my $bioSource (@$voBioSources) {
+    my @row = ();
+    my @headers = @headerRow;
+    $self->writeBioSampleAndTreatment($voTreatments,$bioSource, \@row, \@headers)
+  }
+
+
+
+
+}
+#----------------------------------
+sub writeHeaderFromBioSourceToLex{
+ my ($self, $voTreatments,$biosample, $row) = @_;
+
+ push(@$row, $biosample->getSubclassView." Name");
+
+# push (@$row, "Material Type") if $biosample->getBioMaterialType;
+ if($biosample->getBioMaterialChars()){
+   foreach my $char (@{$biosample->getBioMaterialChars()}) {
+     push(@$row, "Characteristics [".$char->getCategory()."]");
+   }
+ }
+
+ my $treatment = $self->findTreatmentFromInputBioMaterialName($voTreatments, $biosample);
+ if($treatment){
+     my $trt = $treatment->[0];
+     push(@$row, "Protocol REF");
+
+     foreach my $pv(@{$trt->getParameterValues}){
+       push (@$row, "Parameter Value [".$pv->getParameterName."]");
+     }
+
+     $self->writeHeaderFromBioSourceToLex($voTreatments,$trt->getOutputBM(), $row);
+ }
+ else{
+   $self->stringByRow('',$row);
+   return;
+ }
+}
+
+#--------------------------------------------------------------------------------
+sub writeBioSampleAndTreatment{
+ my ($self, $voTreatments,$biosample, $row, $headerRow) = @_;
+
+ push(@$row, $biosample->getName());
+ shift (@$headerRow);
+
+ my $c=0;
+ for($c=0; $headerRow->[$c] && $headerRow->[$c] ne "Protocol REF"; $c++){}
+
+ if($biosample->getBioMaterialChars()){
+ for(my $i=0; $i<$c; $i++){
+   my $found = 0;
+   foreach my $char (@{$biosample->getBioMaterialChars()}) {
+     if("Characteristics [".$char->getCategory."]" eq $headerRow->[$i]){
+       push(@$row, $char->getValue());
+       $found = 1;
+       last;
+     }
+   }
+   push (@$row, "N.A.A.") unless $found;
+ }
+}
+
+ for(my $i=0; $i<$c; $i++){
+   shift (@$headerRow);
+ }
+
+ my $treatment = $self->findTreatmentFromInputBioMaterialName($voTreatments, $biosample);
+ if($treatment){
+   foreach my $trt (@$treatment){
+     my @row_copy = @$row; 
+     my @header_copy = @$headerRow;
+     if(my $treatmentProtocol = $trt->getProtocol()){
+       push(@row_copy, $treatmentProtocol->getName());
+     }
+     else{
+       push(@row_copy, "N.A.");
+     }
+
+     shift (@header_copy);
+
+     foreach my $pv(@{$trt->getParameterValues}){
+       push (@row_copy, $pv->getValue);
+       shift (@header_copy);
+     }
+
+     $self->writeBioSampleAndTreatment($voTreatments,$trt->getOutputBM(), \@row_copy, \@header_copy);
+   }
+ }
+ else{
+   $self->stringByRow('',$row);
+   return;
+ }
+}
+
+
+sub writeTreatments {
+  my ($self, $voBioSources, $voTreatments) = @_;
+
+  foreach my $bioSource (@$voBioSources) {
+    my $treatment = $self->findTreatmentFromInputBioMaterialName($voTreatments, $bioSource);
+
+    my $inputBioMaterials = $treatment->getInputBMMMs();
+
+    foreach my $inputBM ($inputBioMaterials) {
+      my @row;
+
+      push(@row, $inputBM->getName());
+
+      foreach my $char (@{$inputBM->getBioMaterialChars()}) {
+        push(@row, $char->getValue());
+      }
+
+      my $treatmentProtocol = $treatment->getProtocol();
+      push(@row, $treatmentProtocol->getName());
+
+    }
+  }
+
+}
+
+#--------------------------------------------------------------------------------
+
+sub findTreatmentFromInputBioMaterialName {
+  my ($self, $voTreatments,$bioSource) = @_;
+
+  my @treatments;
+
+  foreach my $treatment (@$voTreatments) {
+    my $inputBioMaterials = $treatment->getInputBMMs();
+
+    foreach my $input (@$inputBioMaterials) {
+      push(@treatments, $treatment) if($input->getBioMaterial == $bioSource);
+     }
+  }
+
+  $sLogger->debug("More than one treatment for a biomaterial") if(scalar(@treatments) > 1);
+
+  return 0 if (scalar(@treatments) ==0);
+
+  return \@treatments;
+}
+
+
+
+#--------------------------------------------------------------------------------
+
+sub getBioSources {
+  my ($self, $voBioMaterials) = @_;
+
+  my @bioSources;
+
+  foreach my $bioMaterial (@$voBioMaterials) {
+    push(@bioSources, $bioMaterial) if($bioMaterial->getSubclassView() =~ /source/i);
+  }
+  return \@bioSources;
+}
+
+
+
+#--------------------------------------------------------------------------------
+
+sub writeStudy {
+  my ($self, $voStudy) = @_;
+
+  $sLogger->info("Investigation Title\t", $voStudy->getName);
+
+  my $voDesigns = $voStudy->getDesigns();
+
+  my $title = $self->stringByRow("Investigation Title", [$voStudy->getName]);
+  my $pubMed = $self->stringByRow("PubMed ID", [$voStudy->getPubMedId()]);
+  my $description = $self->stringByRow("Experiment Description", [$voStudy->getDescription()]);
+
+  $self->writeStudyDesigns($voDesigns);
+  $self->writeStudyFactors($voDesigns);
+
+  return ($title, $pubMed, $description);
+}
+
+
+#--------------------------------------------------------------------------------
+
+sub writeStudyDesigns {
+  my ($self, $voDesigns) = @_;
+
+  my @designTypeValues;
+
+  foreach my $studyDesign (@$voDesigns) {
+    foreach my $studyDesignType (@{$studyDesign->getTypes()}){
+      push(@designTypeValues, $studyDesignType->getValue());
+    }
+  }
+
+  return $self->stringByRow("Experimental Design", \@designTypeValues);
+}
+
+#--------------------------------------------------------------------------------
+
+sub writeStudyFactors {
+  my ($self, $voDesigns) = @_;
+
+  $sLogger->info("Experimental Factor Names and Types"); 
+
+  my @factorTypes;
+  my @factorNames;
+
+  foreach my $studyDesign (@$voDesigns) {
+    foreach my $studyFactor (@{$studyDesign->getFactors()}) {
+      push(@factorTypes, $studyFactor->getType()->getValue());
+      push(@factorNames, $studyFactor->getName());
+    }
+  }
+
+  my $experimentalFactorTypes = $self->stringByRow("Experimental Factor Type", \@factorTypes);
+  my $experimentalFactorNames = $self->stringByRow("Experimental Factor Name", \@factorNames);
+
+  return($experimentalFactorTypes, $experimentalFactorNames);
+}
+
+#--------------------------------------------------------------------------------
+
+sub writePersons {
+  my ($self, $voPersons) = @_;
+
+  my @lastNames = map {$_->getLast} @$voPersons;
+  my @firstNames = map {$_->getFirst} @$voPersons;
+  my @addresss = map {$_->getAddress?$_->getAddress:($_->getAffiliation?$_->getAffiliation->getAddress:'')} @$voPersons;
+  my @emails = map {$_->getEmail} @$voPersons;
+  my @roles = map {$_->getRole} @$voPersons;
+
+  my @affiliations;
+
+  foreach my $person (@$voPersons) {
+    my $affiliation = $person->getAffiliation();
+    my $affiliationName = $affiliation ? $affiliation->getName() : '';
+    push(@affiliations, $affiliationName);
+  }
+
+  $self->stringByRow("Person Last Name", \@lastNames);
+  $self->stringByRow("Person First Name", \@firstNames);
+  $self->stringByRow("Person Email", \@emails);
+  $self->stringByRow("Person Address", \@addresss);
+  $self->stringByRow("Person Affiliation", \@affiliations);
+  $self->stringByRow("Person Roles", \@roles);
+}
+
+#--------------------------------------------------------------------------------
+
+sub writeExternalDatabases {
+  my ($self, $externalDatabases) = @_;
+
+  return unless($externalDatabases);
+
+  my @names = map {$_->getName} @$externalDatabases;
+  my @versions = map {$_->getVersion} @$externalDatabases;
+  my @uris = map {$_->getUri} @$externalDatabases;
+
+  $self->stringByRow("Term Source Name", \@names);
+  $self->stringByRow("Term Source Version", \@versions);
+  $self->stringByRow("Term Source File", \@uris);
+}
+
+#--------------------------------------------------------------------------------
+
+sub writeProtocols {
+  my ($self, $voProtocols) = @_;
+
+  my @protocolNames = map {$_->getName} @$voProtocols;
+  my @protocolDescriptions = map {$_->getProtocolDescription} @$voProtocols;
+  my @protocolTypes;
+  my @protocolParams;
+  my @protocolParamUnits;
+
+  foreach my $protocol (@$voProtocols) {
+    my $typeOe = $protocol->getProtocolType();
+    my $type = $typeOe ? $typeOe->getValue() : '';
+    push(@protocolTypes, $type);
+
+    my $params = $protocol->getParams();
+
+    if($params) {
+      my @names = map {$_->getName} @$params;
+      my $paramsString = join(';', @names);
+      push(@protocolParams, $paramsString);
+
+       my @units = map {$_->getUnitType?$_->getUnitType->getValue:$_->getUnitType} @$params;
+       my $unitsString = join(';', @units);
+       push(@protocolParamUnits, $unitsString);
+    }
+    else{
+      push(@protocolParams, "");
+      push(@protocolParamUnits, "");
+    }
+  }
+
+  $self->stringByRow("Protocol Name", \@protocolNames);
+  $self->stringByRow("Protocol Description", \@protocolDescriptions);
+  $self->stringByRow("Protocol Type", \@protocolTypes);
+  $self->stringByRow("Protocol Parameters", \@protocolParams);
+ # $self->stringByRow("Protocol Parameter Units", \@protocolParamUnits);
+}
+
+
+#--------------------------------------------------------------------------------
+
+sub stringByRow {
+  my ($self, $rowHeader, $values) = @_;
+
+  return unless(scalar(@$values) > 0);
+
+  my $rowString = join("\t", $rowHeader, @$values);
+
+  print $rowString."\n";
+
+  return $rowString;
+
+}
+
+
+#  $sLogger->info("Source Id\tProtocol REF\tSample Id\tProtocol REF\tExtract Id\tProtocol REF\tLEX Id\t\Protocol REF\tHyb Id\tArrayData URI\tDerivedArrayData URI");
+
+################
+#1.foreach biosource put biosource name
+  #2.put biomatChars
+  #3.found the treatment which has it as input, put treatment protocol name, put outputBM
+   #4.for the outputBM, do the same above 2-4, until no treatment found
+
+#we don't have assay to lex link so
+#print assay to quantification table separately for now
+
+
+#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+package SDRF_Grid;
+#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+use Data::Dumper;
+
+sub getSdrfGrid {$_[0]->{sdrf_grid}}
+sub getHeader {$_[0]->{header}}
+sub getCharacteristics {$_[0]->{characteristics}}
+
+#--------------------------------------------------------------------------------
+
+sub new {
+  my ($class, $protocols, $treatments, $allCharacteristics, $allParameterNamesAndUnits, $assays, $voStudy) = @_;
+
+  my $rawGrid = &makeInternalGrid($treatments, $assays);
+
+  my $orderedProtocols = &orderProtocols($rawGrid);
+
+  my $header = &makeHeader($orderedProtocols, $allCharacteristics, $allParameterNamesAndUnits, $voStudy);
+
+  my $indexes = &makeIndexes($orderedProtocols, $header);
+
+  my $grid = [$header];
+
+  my $self = bless {header => $header,
+                    sdrf_grid => $grid,
+                    characteristics => $allCharacteristics,
+                   }, $class;
+
+  $self->formatGrid($rawGrid, $allParameterNamesAndUnits, $allCharacteristics, $indexes);
+
+  return $self;
+}
+
+#--------------------------------------------------------------------------------
+
+sub orderProtocols {
+  my ($rawGrid) = @_;
+
+  my @rows = @{$rawGrid};
+  my (%indexes, %protocolNames);
+
+  for(my $i = 0; $i < scalar(@rows); $i++) {
+    my $row = $rows[$i];
+    my $protocolRow = [];
+
+    my $emptyCount = 1;
+    for(my $j = 0; $j < scalar(@$row); $j++) {
+      my $obj = $row->[$j];
+
+      unless($obj) {
+        my $name = "EMPTY_PROTOCOL $emptyCount";
+        my $nullProtocol = NULL_PROTOCOL->new($name);
+
+        $protocolNames{$name} = $nullProtocol;
+        push(@{$indexes{$name}}, $j);
+
+        $emptyCount++;
+      }
+
+      if(ref($obj) eq 'RAD::MR_T::MageImport::VO::ProtocolVO') {
+        my $name = $obj->getName();
+        $protocolNames{$name} = $obj;
+        push(@{$indexes{$name}}, $j);
+      }
+    }
+  }
+
+  my @unsorted;
+  foreach(keys %indexes) {
+    my @values = @{$indexes{$_}};
+    my $max = &max(\@values);
+    my $min = &min(\@values);
+
+    push(@unsorted, [$_, $max, $min]);
+  }
+
+  # sort the index, first on the max then on the min
+  my @sorted = map { $protocolNames{$_->[0]} }
+    reverse sort { $a->[1] == $b->[1] ? $b->[2] <=> $a->[2] : $b->[1] <=> $a->[1] }
+      @unsorted;
+
+  return \@sorted;
+}
+
+#--------------------------------------------------------------------------------
+
+sub min {
+  my ($values) = @_;
+
+  my $min = shift(@$values);
+
+  foreach (@$values) {
+    $min = $_ if $min > $_;
+  }
+  return $min;
+}
+
+#--------------------------------------------------------------------------------
+
+sub max {
+  my ($values) = @_;
+
+  my $max = shift(@$values);
+
+  foreach(@$values) {
+    $max = $_ if $max < $_;
+  }
+
+  return $max
+}
+
+#--------------------------------------------------------------------------------
+
+sub formatGrid {
+  my ($self, $rawGrid, $allParameterNamesAndUnits, $allCharacteristics, $indexes) = @_;
+
+  my @rows = @$rawGrid;
+
+  for(my $i = 0; $i < scalar @rows; $i++) {
+    my $row = $rows[$i];
+    my @rowObjects = @$row;
+
+    my $j = 0;
+
+    my $lex;
+
+    foreach my $obj (@rowObjects) {
+
+      #print STDERR $obj . "\n";
+
+      if(!$obj && $j > 0) {
+        #my $grid = $self->getSdrfGrid();
+        #$grid->[$i]->[$j] = "->";
+        $j++;
+      }
+
+      if(ref($obj) eq 'NULL_PROTOCOL') {
+        print STDERR "MADE IT HERE\n";
+      }
+
+      if(ref($obj) eq 'RAD::MR_T::MageImport::VO::BioMaterialVO') {
+        #print STDERR "Adding BioMaterial to GRID\n";
+        my $newIndex = $self->addBioMaterialToGrid($obj, $i, $j);
+
+        $lex =  $obj;
+        $j = $newIndex;
+      }
+      if(ref($obj) eq 'RAD::MR_T::MageImport::VO::ProtocolVO') {
+        #print STDERR "Adding Protocol to GRID\n";
+        my $name = $obj->getName();
+        $j = $indexes->{$name};
+
+        my $newIndex= $self->addProtocolToGrid($obj, $i, $j);
+        $j = $newIndex;
+      }
+      #Parameter Values
+      if(ref($obj) eq 'ARRAY') {
+        #print STDERR "Adding ParameterValues to GRID\n";
+
+        my $newIndex= $self->addParameterValueToGrid($obj, $allParameterNamesAndUnits, $i, $j);
+        $j = $newIndex;
+      }
+
+      if(ref($obj) eq 'RAD::MR_T::MageImport::VO::AssayVO') {
+        #print STDERR "Adding ASSAY to GRID\n";
+
+        $j = $indexes->{_LABEL_START};
+        $j = $self->addLabelToGrid($lex, $i, $j);
+
+        my $newIndex= $self->addAssayToGrid($obj, $allParameterNamesAndUnits, $lex, $i, $j);
+        $j = $newIndex;
+      }
+    }
+  }
+}
+
+#--------------------------------------------------------------------------------
+
+sub addAssayToGrid {
+  my ($self, $assay, $allParametersAndUnits, $lex, $i, $j) = @_;
+  
+  my $grid = $self->getSdrfGrid();
+
+  my $channelValue = $lex->getChannel->getValue;
+
+  my $assayName = $assay->getName;
+  my $assayProtocolName = $assay->getProtocolName;
+  my $assayParamValues = $assay->getParameterValues();
+  my $arraySourceId = $assay->getArraySourceId();
+
+  my $acquisitions = $assay->getAcquisitions();
+
+  my ($acquisitionName, $acquisitionProtocolName, $acquisitionParamValues, $imageFile);
+
+  my ($quantProtocolName, $quantParamValues, $arrayDataFile);
+
+  my ($normName, $processProtocolName, $processParamValues, $derivedDataFile);
+
+  my $factorValues;
+
+  foreach my $acq (@$acquisitions) {
+    my $channels = $acq->getChannels();
+    foreach my $channel (@$channels) {
+      my $label = $channel->getValue();
+
+      if($channelValue eq $label) {
+        $acquisitionName = $acq->getName;
+
+	$factorValues = $acq->getFactorValues;
+
+        $acquisitionProtocolName = $acq->getProtocolName;
+        $acquisitionParamValues = $acq->getParameterValues;
+        $imageFile = $acq->getUri;
+
+
+        my $quantifications = $acq->getQuantifications();
+        die "More than one quantification found for acquisition [$acquisitionName]" if(scalar @$quantifications > 1);
+
+        my $quantification = $quantifications->[0];
+        $quantProtocolName = $quantification->getProtocolName();
+        $quantParamValues = $quantification->getParameterValues();
+        $arrayDataFile = $quantification->getUri();
+
+        if(my $processes = $quantification->getProcesses()) {
+          die "More than one process found for quantification [$arrayDataFile]" if(scalar @$processes > 1);
+
+          my $process = $processes->[0];
+
+          $normName = $process->getName();
+          $processProtocolName = $process->getProtocolName();
+          $processParamValues = $process->getParameterValues();
+          $derivedDataFile = $process->getUri();
+        }
+      }
+    }
+  }
+
+  my $assayParamAddToGrid = $self->getUsedParamValues($allParametersAndUnits, $assayParamValues);  
+  my $acquisitionParamAddToGrid = $self->getUsedParamValues($allParametersAndUnits, $acquisitionParamValues);  
+  my $quantParamAddToGrid = $self->getUsedParamValues($allParametersAndUnits, $quantParamValues);  
+  my $processParamAddToGrid = $self->getUsedParamValues($allParametersAndUnits, $processParamValues);  
+
+ 
+  my @fvs = map {$_->getValue?$_->getValue->getValue:""} @$factorValues;
+
+  my @addToGrid = ($assayProtocolName,
+                   @$assayParamAddToGrid,
+                   $assayName,
+                   $arraySourceId,
+                   $acquisitionProtocolName,
+                   @$acquisitionParamAddToGrid,
+		   @fvs,        
+		   $acquisitionName,
+	
+                   $imageFile,
+                   $quantProtocolName,
+                   @$quantParamAddToGrid,
+                   $arrayDataFile,
+                   $processProtocolName,
+                   @$processParamAddToGrid,
+                   $normName,
+                   $derivedDataFile,
+                   );
+ 
+  foreach(@addToGrid) {
+    $grid->[$i]->[$j] = $_;
+    $j++;
+  }
+
+  return $j;
+}
+
+#--------------------------------------------------------------------------------
+
+sub getUsedParamValues {
+  my ($self, $allParametersAndUnits, $paramValues) = @_;
+
+  my %paramValues;
+  foreach(@$paramValues) {
+    my $name = $_->getParameterName();
+    my $value = $_->getValue();
+
+    $paramValues{$name} = $value;
+  }
+
+  my @values;
+
+  foreach(@$allParametersAndUnits) {
+    my $name = $_->[0];
+    my $unit = $paramValues{$name} ? $_->[1] : undef;
+
+    push(@values, $paramValues{$name}, $unit);
+  }
+
+  return \@values;
+}
+
+
+#--------------------------------------------------------------------------------
+
+sub addParameterValueToGrid {
+  my ($self, $paramValues, $allParametersAndUnits, $i, $j) = @_;
+
+  my $grid = $self->getSdrfGrid();
+
+  my $addToGrid = $self->getUsedParamValues($allParametersAndUnits, $paramValues);
+
+  foreach (@$addToGrid) {
+    $grid->[$i]->[$j] = $_;
+    $j++;
+  }
+
+  return $j;
+}
+
+#--------------------------------------------------------------------------------
+
+sub addProtocolToGrid {
+  my ($self, $protocol, $i, $j) = @_;
+
+  my $grid = $self->getSdrfGrid();
+
+  my $name = $protocol ? $protocol->getName() : "->";
+
+  $grid->[$i]->[$j] = $name;
+
+  $j++;
+
+  return $j;
+}
+
+#--------------------------------------------------------------------------------
+
+sub addBioMaterialToGrid {
+  my ($self, $bm, $i, $j) = @_;
+
+  my $grid = $self->getSdrfGrid();
+  my $characteristics = $self->getCharacteristics();
+
+  my $name = $bm->getName();
+  my $description = $bm->getDescription();
+
+  my $typeOe = $bm->getBioMaterialType();
+  my $materialType; $materialType = $typeOe->getValue() if($typeOe);
+
+  my $chars = $bm->getBioMaterialChars() ? $bm->getBioMaterialChars : [];
+  
+  my %charValues;
+  my %termSources;
+  foreach my $char (@$chars) {
+    my $category = $char->getCategory();
+    my $value = $char->getValue();
+    my $externalDatabase = $char->getExternalDatabase();
+
+    if($externalDatabase) {
+      my $extDbName = $externalDatabase->getName();
+      $termSources{$category} = $extDbName;
+    }
+    $charValues{$category} = $value;
+  }
+
+  my @addToGrid = ($name, $description, $materialType);
+
+  for(my $i = 0; $i < scalar @$characteristics; $i++) {
+    my $category = $characteristics->[$i];
+
+    push (@addToGrid, $charValues{$category}, $termSources{$category});
+  }
+
+  foreach (@addToGrid) {
+    $grid->[$i]->[$j] = $_;
+    $j++;
+  }
+
+  return $j;
+}
+
+
+sub addLabelToGrid {
+  my ($self, $bm, $i, $j) = @_;
+
+  my $grid = $self->getSdrfGrid();
+
+  my $channel = $bm->getChannel();
+  my $label = $channel->getValue();
+
+  $grid->[$i]->[$j] = $label;
+
+  $j++;
+
+  return $j;
+}
+
+#--------------------------------------------------------------------------------
+
+sub makeInternalGrid {
+  my ($treatments, $assays) = @_;
+
+  my @rows = ([]);
+
+  foreach my $t (@$treatments) {
+    my @inputBioMaterials = map {$_->getBioMaterial()} @{$t->getInputBMMs()};
+    my $outputBioMaterial = $t->getOutputBM();
+    my $protocol = $t->getProtocol();
+    my $parameterValues = $t->getParameterValues();
+
+    foreach my $inputBioMaterial (@inputBioMaterials) {
+
+      my $didSomething;
+      foreach my $rowArray (@rows) {
+        if(&canAppend($inputBioMaterial, $rowArray)) {
+          push @$rowArray, $protocol, $parameterValues, $outputBioMaterial;
+          $didSomething = 1;
+        }
+        if(&canPrepend($outputBioMaterial, $rowArray)) {
+          unshift @$rowArray, $inputBioMaterial, $protocol, $parameterValues;
+          $didSomething = 1;
+        }
+      }
+
+      unless($didSomething) {
+        my $new = [$inputBioMaterial, $protocol, $parameterValues, $outputBioMaterial];
+        push @rows, $new;
+      }
+    }
+  }
+
+  my %prepend;
+  for my $i ( 0 .. $#rows ) {
+
+    my $row = $rows[$i];
+    my @ar;
+    for my $j ( 0 .. $#{$row} ) {
+
+      my $obj = $row->[$j];
+      push @ar, $obj;
+      if(ref($obj) eq 'RAD::MR_T::MageImport::VO::BioMaterialVO') {
+        my $name = $obj->getName();
+
+        push @{$prepend{$name}}, @ar unless(scalar @ar < 1);
+        pop  @{$prepend{$name}};
+      }
+    }
+  }
+
+  my %append;
+  for(my $i = scalar @rows - 1; $i >= 0; $i--) {
+
+    my $row = $rows[$i];
+    next unless($row);
+    my @ar;
+    for(my $j = scalar @$row - 1; $j >= 0; $j--) {
+
+      my $obj = $row->[$j];
+      push @ar, $obj;
+      if(ref($obj) eq 'RAD::MR_T::MageImport::VO::BioMaterialVO') {
+        my $name = $obj->getName();
+
+        push @{$append{$name}}, @ar unless(scalar @ar < 1);
+        pop  @{$append{$name}};
+      }
+    }
+  }
+
+  my %lexToAssay;
+  foreach my $assay (@$assays) {
+    my $labeledExtracts = $assay->getLabeledExtracts();
+
+    foreach my $lex (@$labeledExtracts) {
+      my $lexName = $lex->getName();
+      $lexToAssay{$lexName} = $assay;
+    }
+  }
+
+
+  foreach my $row (@rows) {
+    my $first = $row->[0];
+    my $last = $row->[scalar @$row - 1];
+
+    next unless($first && $last);
+
+    my $firstName = $first->getName();
+    my $lastName = $last->getName();
+
+    unshift @$row, @{$prepend{$firstName}} if($prepend{$firstName});
+
+    if(scalar @{$append{$lastName}} > 0) {
+      push @$row, reverse @{$append{$lastName}} ;
+    }
+
+    my $newLast = $row->[scalar @$row - 1];
+    my $newLastName = $newLast->getName();
+
+    push @$row, $lexToAssay{$newLastName};
+  }
+
+  return \@rows;
+}
+
+#--------------------------------------------------------------------------------
+
+sub canAppend {
+  my ($bm, $row) = @_;
+
+  my $lastIndex = scalar @$row;
+  my $lastElement = $row->[$lastIndex];
+
+  return 0 unless($lastElement);
+
+  if($bm->getName eq $lastElement->getName) {
+    return 1;
+  }
+}
+
+#--------------------------------------------------------------------------------
+
+sub canPrepend {
+  my ($bm, $row) = @_;
+
+  my $firstElement = $row->[0];
+
+  return 0 unless($firstElement);
+
+  if($bm->getName eq $firstElement->getName) {
+    return 1;
+  }
+}
+
+#--------------------------------------------------------------------------------
+
+sub makeIndexes {
+  my ($protocols, $header) = @_;
+
+  my (@indexes, %index);
+
+  for(my $i = 0; $i < scalar @$header; $i++) {
+    my $name = $header->[$i];
+
+    if($name eq 'Protocol REF') {
+      push @indexes, $i;
+    }
+
+    if($name eq 'Label') {
+      $index{_LABEL_START} = $i;
+    }
+  }
+
+  for(my $i = 0; $i < scalar @$protocols; $i++) {
+    my $name = $protocols->[$i]->getName;
+
+    my $index = $indexes[$i];
+
+    $index{$name} = $index;
+  }
+  return \%index;
+}
+
+#--------------------------------------------------------------------------------
+
+sub printGrid {
+  my ($self) = @_;
+
+  my @sdrf = @{$self->getSdrfGrid()};
+
+  # If an entire column is empty... then don't print it
+  my @counts;
+  for my $i ( 0 .. $#sdrf ) {
+    my $row = $sdrf[$i];
+    my @ar;
+
+    for my $j ( 0 .. $#{$row} ) {
+      $counts[$j]++ if($row->[$j]);
+    }
+  }
+
+  for my $i ( 0 .. $#sdrf ) {
+    my $row = $sdrf[$i];
+    my @ar;
+
+    for my $j ( 0 .. $#{$row} ) {
+      push @ar, $row->[$j] unless($counts[$j] < 2);
+    }
+
+    print join("\t", @ar) ."\n";
+  }
+}
+
+#--------------------------------------------------------------------------------
+
+sub makeHeader {
+  my ($protocols, $characteristics, $parameterNamesAndUnits, $voStudy) = @_;
+
+  my @characteristics;
+  foreach(@$characteristics) {
+    push(@characteristics, 'Characteristics ['. $_ . ']', 'Term Source REF');
+  }
+
+  my @parameters;
+  foreach(@$parameterNamesAndUnits) {
+    my $name = $_->[0];
+    my $category = $_->[2];
+
+   push(@parameters, 'Parameter Value [' . $name . ']', 'Unit [' . $category . ']');
+  }
+
+  my $header = [];
+
+  push @$header, 'Source Name', 'Description', 'Material Type', @characteristics;
+
+  # Treatments and Protocols
+  for(my $i = 0; $i < scalar @$protocols; $i++) {
+    my $protocol = $protocols->[$i];
+
+    my $bmType = $i == scalar(@$protocols - 1) ? 'Labeled Extract Name' : 'Sample Name';
+
+    push @$header, 'Protocol REF', @parameters, $bmType, 'Description', 'Material Type', @characteristics;
+  }
+
+  my @factorNames = ();
+  foreach my $studyDesign (@{$voStudy->getDesigns}) {
+    foreach my $studyFactor (@{$studyDesign->getFactors()}) {
+        push(@factorNames, "Factor Value [".$studyFactor->getName()."]");
+      }
+  }
+
+  my @assayToDataHeaders = ('Label', 
+                            'Protocol REF', 
+                            @parameters,
+                            'Hybridization Name',
+                            'ArrayDesign REF',
+                            'Protocol REF',
+                            @parameters,
+			    @factorNames,
+                            'Scan Name',
+		
+                            'Image File',
+                            'Protocol REF',
+                            @parameters,
+                            'Array Data File',
+                            'Protocol REF',
+                            @parameters,
+                            'Normalization Name',
+                            'Derived Array Data File',
+                           );
+
+  push(@$header, @assayToDataHeaders);
+
+  return $header;
+}
+
+package NULL_PROTOCOL;
+
+sub getName {$_[0]->{name}}
+
+sub new {
+  my ($class, $name) = @_;
+
+  bless {name => $name}, $class;
+}
+
+
+
+package RAD::MR_T::MageImport::Service::Translator::VoToMageTab;
+
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Service/Validator.pm b/lib/perl/RAD/MR_T/MageImport/Service/Validator.pm
new file mode 100644
index 0000000..b8b23cd
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Service/Validator.pm
@@ -0,0 +1,127 @@
+package RAD::MR_T::MageImport::Service::Validator;
+
+# this is validator does the minimum checks on VOs
+
+use strict 'vars';
+use Carp;
+
+use RAD::MR_T::MageImport::VO::DocRoot;
+use RAD::MR_T::MageImport::Service::AbstractValidator;
+use vars qw / @ISA / ;
+
+ at ISA = qw / RAD::MR_T::MageImport::Service::AbstractValidator/;
+
+sub new {
+  my $class = shift;
+  my $arg = shift;
+  bless {}, $class;
+}
+
+sub check {
+  my ($self, $docRoot) = @_;
+
+# need to check if logger is set
+# otherwise throw warning
+  my $logger = $self->getLogger();
+  $logger->warn("\n******", ref($self),   "********");
+
+  $logger->debug("validation begin");
+  $self->objHasName($docRoot);
+  $self->objNameUnique($docRoot);
+  $logger->debug("validation end");
+  return 1;
+}
+
+
+sub objHasName{
+  my ($self, $docRoot) = @_;
+
+  throw RAD::MR_T::MageImport::MageImportUnNamedVOError
+    unless $docRoot->getStudyVO()->getName;
+  my $sds = $docRoot->getStudyVO()->getDesigns;
+  foreach my $sd (@ $sds){
+    throw RAD::MR_T::MageImport::MageImportUnNamedVOError
+      unless $sd->getName;
+    my $sfs = $sd->getFactors;
+    foreach my $sf (@$sfs){
+      throw RAD::MR_T::MageImport::MageImportUnNamedVOError	unless $sf->getName;
+    }
+  }
+
+  $self->checkObjHasName($docRoot, "Protocol");
+  $self->checkObjHasName($docRoot, "ExternalDatabase");
+
+# for searchObjByName
+  $self->checkObjHasName($docRoot, "Person");
+  $self->checkObjHasName($docRoot, "Affiliation");
+  $self->checkObjHasName($docRoot, "Treatment");
+  $self->checkObjHasName($docRoot, "BioMaterial");
+
+}
+
+sub checkObjHasName{
+  no strict "refs";
+  my ($self, $docRoot, $Obj) = @_;
+  my $logger = $self->getLogger();
+  my $getter = "get".$Obj."VOs";
+  my $vos = $docRoot->$getter;
+  foreach my $vo (@ $vos){
+    unless ($vo->getName) {
+      $self->appendResportStr("One of the $Obj doesn't have Name\n");
+      
+      $logger->warn("One of the $Obj doesn't have Name");
+
+      RAD::MR_T::MageImport::MageImportUnNamedVOError->new("checkObjHasName: $Obj")->throw();
+    }
+  }
+}
+
+
+sub objNameUnique{
+  my ($self, $docRoot) = @_;
+
+  $self->checkObjNameUnique($docRoot, "Protocol");
+  $self->checkObjNameUnique($docRoot, "ExternalDatabase");
+
+# for searchObjByName
+  $self->checkObjNameUnique($docRoot, "Person");
+  $self->checkObjNameUnique($docRoot, "Affiliation");
+  $self->checkObjNameUnique($docRoot, "Treatment");
+  $self->checkObjNameUnique($docRoot, "BioMaterial");
+
+}
+
+sub checkObjNameUnique{
+  no strict "refs";
+
+  my ($self, $docRoot, $Obj) = @_;
+  my $logger = $self->getLogger();
+  my @names;
+  my $getter = 'get'.$Obj.'VOs';
+
+  my $vos = $docRoot->$getter;
+  foreach my $vo (@ $vos){
+    push @names, $vo->getName;
+  }
+
+  unless ( @names ==1 || $self->checkArrayElementUnique(\@names)){ 
+    $logger->warn("One of the $Obj doesn't have unique Name");
+    $self->appendResportStr("One of the $Obj doesn't have unique Name\n");
+    RAD::MR_T::MageImport::MageImportVONameNotUniqueError->new("Validator::checkObjNameUnique: $Obj"."VOs")->throw();
+  }
+}
+ 
+
+#util
+sub checkArrayElementUnique{
+  my ($self, $names)= @_;
+
+  my %nameHash = map {$_, 1} @$names;
+  my @unique = keys %nameHash;
+
+  if( scalar @unique == scalar @$names) {return 1;}
+  else{return 0;}
+}
+
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Service/ValidatorRule/AssayHasContact.pm b/lib/perl/RAD/MR_T/MageImport/Service/ValidatorRule/AssayHasContact.pm
new file mode 100644
index 0000000..4190722
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Service/ValidatorRule/AssayHasContact.pm
@@ -0,0 +1,56 @@
+package RAD::MR_T::MageImport::Service::ValidatorRule::AssayHasContact;
+
+use strict 'vars';
+
+use RAD::MR_T::MageImport::MageImportError;
+
+use RAD::MR_T::MageImport::VO::DocRoot;
+use RAD::MR_T::MageImport::Service::AbstractValidatorRule;
+
+use vars qw / @ISA / ;
+ at ISA = qw / RAD::MR_T::MageImport::Service::AbstractValidatorRule/;
+
+=head1 NAME
+
+RAD::MR_T::MageImport::Service::ValidatorRule::AssayHasContact
+
+=head1 SYNOPSIS
+
+ my $validator = RAD::MR_T::MageImport::Service::Validator->new;
+ my $decoValidator = RAD::MR_T::MageImport::Service::ValidatorRule::AssayHasContact->new($validator);
+
+ $decoValidator->check($docRoot);
+
+=head1 DESCRIPTION
+
+Requires each Assay in the DocRoot to have an Operator set.  
+
+This is Required by the Gus Schema
+
+=cut
+
+sub mycheck {
+  my ($self, $docRoot) = @_;
+  my $logger = $self->getLogger();
+  my $assays = $docRoot->getAssayVOs();
+
+
+  unless($assays) {
+    RAD::MR_T::MageImport::ValidatorException->new("No Assays Were Found")->throw();
+  }
+
+  foreach my $assay (@$assays) {
+    my $name = $assay->getName();
+
+    unless($assay->getOperator()) {
+      $self->appendResportStr("No Operator Found for Assay [$name]\n");
+      $logger->warn("No Operator Found for Assay [$name]");
+      RAD::MR_T::MageImport::ValidatorException->new("No Operator Found for Assay [$name]")->throw();
+    }
+  }
+
+  return 1;
+}
+
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Service/ValidatorRule/AssayHasFactorValue.pm b/lib/perl/RAD/MR_T/MageImport/Service/ValidatorRule/AssayHasFactorValue.pm
new file mode 100644
index 0000000..5a4b178
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Service/ValidatorRule/AssayHasFactorValue.pm
@@ -0,0 +1,66 @@
+package RAD::MR_T::MageImport::Service::ValidatorRule::AssayHasFactorValue;
+
+use strict 'vars';
+
+use RAD::MR_T::MageImport::MageImportError;
+
+use RAD::MR_T::MageImport::VO::DocRoot;
+use RAD::MR_T::MageImport::Service::AbstractValidatorRule;
+
+use vars qw / @ISA / ;
+ at ISA = qw / RAD::MR_T::MageImport::Service::AbstractValidatorRule/;
+
+=head1 NAME
+
+RAD::MR_T::MageImport::Service::ValidatorRule::AssayHasContact
+
+=head1 SYNOPSIS
+
+ my $validator = RAD::MR_T::MageImport::Service::Validator->new;
+ my $decoValidator = RAD::MR_T::MageImport::Service::ValidatorRule::AssayHasContact->new($validator);
+
+ $decoValidator->check($docRoot);
+
+=head1 DESCRIPTION
+
+Requires each Assay in the DocRoot to have an Operator set.  
+
+This is Required by the Gus Schema
+
+=cut
+
+sub mycheck {
+  my ($self, $docRoot) = @_;
+  my $logger = $self->getLogger();
+  my $assays = $docRoot->getAssayVOs();
+  my $passed = 1;
+
+  unless($assays) {
+    $passed = 0;
+    $logger->warn("No Assays Were Found");
+  }
+
+  foreach my $assay (@$assays) {
+    my $name = $assay->getName();
+    my $acqs = $assay->getAcquisitions;
+
+    unless ($acqs){
+      $logger->warn("No Acquisitions Found for Assay [$name]"); 
+      $passed = 0;
+    }
+
+    foreach my $acq (@$acqs){
+      unless ($acq->getFactorValues){
+	$passed = 0;
+	$logger->warn("No Factorvalues Found for Assay [$name]"); 
+      }
+    }
+  }
+
+
+  RAD::MR_T::MageImport::ValidatorException->new("AssayHasFactorValue validation failed, please see log file for details")->throw() unless $passed;
+  return 1;
+}
+
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Service/ValidatorRule/AssayHasLexAndNoHangingLex.pm b/lib/perl/RAD/MR_T/MageImport/Service/ValidatorRule/AssayHasLexAndNoHangingLex.pm
new file mode 100644
index 0000000..52d896d
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Service/ValidatorRule/AssayHasLexAndNoHangingLex.pm
@@ -0,0 +1,80 @@
+package RAD::MR_T::MageImport::Service::ValidatorRule::AssayHasLexAndNoHangingLex;
+
+use strict 'vars';
+
+use RAD::MR_T::MageImport::MageImportError;
+
+use RAD::MR_T::MageImport::VO::DocRoot;
+use RAD::MR_T::MageImport::Service::AbstractValidatorRule;
+
+use vars qw / @ISA / ;
+ at ISA = qw / RAD::MR_T::MageImport::Service::AbstractValidatorRule/;
+
+=head1 NAME
+
+RAD::MR_T::MageImport::Service::ValidatorRule::AssayHasLexAndNoHangingLex
+
+=head1 SYNOPSIS
+
+ my $validator = RAD::MR_T::MageImport::Service::Validator->new;
+ my $decoValidator = RAD::MR_T::MageImport::Service::ValidatorRule::AssayHasLexAndNoHangingLex->new($validator);
+
+ $decoValidator->check($docRoot);
+
+=head1 DESCRIPTION
+
+Require that each AssayVO has at least one LabeledExtract set.  Will also check for Hanging LabeledExtracts by 
+comparing Total LabeledExtracts and distinct LabeledExtracts linked to AssayVOs
+
+=cut
+
+sub mycheck {
+  my ($self, $docRoot) = @_;
+  my $logger = $self->getLogger();
+  my $assays = $docRoot->getAssayVOs();
+  my $bioMaterials = $docRoot->getBioMaterialVOs();
+
+  unless($assays) {
+    RAD::MR_T::MageImport::ValidatorException->new("No Assays Found for Study")->throw();
+  }
+
+  unless($bioMaterials) {
+    RAD::MR_T::MageImport::ValidatorException->new("No BioMaterials Found for Study")->throw();
+  }
+
+  my $numberLex;
+  foreach my $bm (@$bioMaterials) {
+    next unless($bm->getSubclassView eq 'LabeledExtract');
+    $numberLex++;
+  }
+
+  my %lexNames;
+  foreach my $assay (@$assays) {
+    my $lexs = $assay->getLabeledExtracts();
+    my $assayName = $assay->getName();
+
+    unless($lexs) {
+      $self->appendResportStr("No LabeledExtract Assigned to Assay [$assayName]");
+      $logger->warn("No LabeledExtract Assigned to Assay [$assayName]");
+      RAD::MR_T::MageImport::ValidatorException->new("No LabeledExtract Assigned to Assay [$assayName]")->throw();
+    }
+
+    foreach my $lex (@$lexs) {
+      my $name = $lex->getName();
+      $lexNames{$name} = 1;
+    }
+  }
+
+  my $distinctLexNames = scalar(keys %lexNames);
+
+  unless($distinctLexNames == $numberLex) {
+    $logger->warn("Found [$numberLex] LabeledExtracts but [$distinctLexNames] were assigned to an Assay");
+    $self->appendResportStr("Found [$numberLex] LabeledExtracts but [$distinctLexNames] were assigned to an Assay");
+    RAD::MR_T::MageImport::ValidatorException->new("Found [$numberLex] LabeledExtracts but [$distinctLexNames] were assigned to an Assay")->throw();
+  }
+
+  return 1;
+}
+
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Service/ValidatorRule/BlankRule.pm b/lib/perl/RAD/MR_T/MageImport/Service/ValidatorRule/BlankRule.pm
new file mode 100644
index 0000000..783b86b
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Service/ValidatorRule/BlankRule.pm
@@ -0,0 +1,25 @@
+package RAD::MR_T::MageImport::Service::ValidatorRule::BlankRule;
+
+# this is blank rule impl
+
+use strict 'vars';
+use Carp;
+
+use RAD::MR_T::MageImport::VO::DocRoot;
+use RAD::MR_T::MageImport::Service::AbstractValidatorRule;
+
+use vars qw / @ISA / ;
+ at ISA = qw / RAD::MR_T::MageImport::Service::AbstractValidatorRule/;
+
+sub check {
+ my ($self, $docRoot) = @_;
+ $self->getValidator->check($docRoot);
+ $self->mycheck($docRoot);
+ return ref($self);
+}
+
+sub mycheck {
+  my ($self, $docRoot) = @_;
+  return 1;
+}
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Service/ValidatorRule/CheckDataFiles.pm b/lib/perl/RAD/MR_T/MageImport/Service/ValidatorRule/CheckDataFiles.pm
new file mode 100644
index 0000000..8296086
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Service/ValidatorRule/CheckDataFiles.pm
@@ -0,0 +1,156 @@
+package RAD::MR_T::MageImport::Service::ValidatorRule::CheckDataFiles;
+
+use strict 'vars';
+use LWP::Simple;
+use XML::Simple;
+use Data::Dumper;
+
+use RAD::MR_T::MageImport::MageImportError;
+
+use RAD::MR_T::MageImport::VO::DocRoot;
+use RAD::MR_T::MageImport::Service::AbstractValidatorRule;
+
+
+use vars qw / @ISA / ;
+ at ISA = qw / RAD::MR_T::MageImport::Service::AbstractValidatorRule/;
+
+=head1 NAME
+
+RAD::MR_T::MageImport::Service::ValidatorRule::CheckDataFiles
+
+=head1 SYNOPSIS
+
+ my $validator = RAD::MR_T::MageImport::Service::Validator->new;
+ my $decoValidator = RAD::MR_T::MageImport::Service::ValidatorRule::CheckDataFiles->new($validator);
+
+ $decoValidator->check($docRoot);
+
+=head1 DESCRIPTION
+
+The number of data rows excluding header rows should be equal to the number of probe sets as in db
+
+=cut
+#-------------------------------------------------------------------------------
+
+my $gusProtocol = {
+		   name=>"",
+		   param=>[
+			   {name=>[]}
+			  ],
+
+};
+
+
+#--------------------------------------------------------------------------------
+
+sub mycheck {
+  my ($self, $docRoot) = @_;
+  my $logger = $self->getLogger();
+
+  my $assays = $docRoot->getAssayVOs();
+  RAD::MR_T::MageImport::ValidatorException->new("No Assays Were Found")->throw() unless $assays;
+
+  foreach my $assay (@$assays){
+    my $array;
+    $logger->warn("\narray source id: ", $assay->getArraySourceId);
+    if($array = $self->_isGusArray($assay->getArraySourceId)){
+      $logger->warn("Number of elements:", $array->{number_of_elements}, "\tarray name: ", $array->{name});
+    }
+
+    my $acquisitions = $assay->getAcquisitions();
+    next unless $acquisitions;
+
+    foreach my $acquisition (@$acquisitions){
+      my $quantifications = $acquisition->getQuantifications();
+      next unless $quantifications;
+      foreach my $quantification (@$quantifications){
+	$logger->warn("array data file",$quantification->getUri, "\tprotocol: ", $quantification->getProtocolName);
+
+	my $file=$quantification->getUri;
+	if(my $number = $self->_fileCounter($file)){
+	  $logger->warn("number of line in file", $number);
+
+	  if($quantification->getProtocolName =~ /Probe Cell Analysis/i){
+	    $self->_checkCELFile($file, $array->{name});
+	  }
+	  if($quantification->getProtocolName =~ /GenePix/i){
+	  # check gene pix file
+	  }
+	}
+
+	my $processes = $quantification->getProcesses();
+	next unless $processes;
+	foreach my $process (@$processes){
+	  $logger->warn("derived data file",$process->getUri, "\tProtocol: ", $process->getProtocolName);
+	  my $file=$process->getUri;
+	  if(my $number = $self->_fileCounter($file)){$logger->warn("number of line in file", $number);}
+	}
+      }
+    }
+  }
+
+  return 1;
+}
+
+#-------------------------------------------------
+sub _checkCELFile{
+  my ($self, $file, $arrayName) = @_;
+  my $logger = $self->getLogger();
+
+  my @nameStr = split(' ', $arrayName);
+
+  open(FILE, $file);
+
+  while(<FILE>) {
+   chomp;
+   if($_ =~ /DatHeader/){ 
+
+     if($_ =~ /$nameStr[1]/){$logger->warn("Affy Chip Name matches inside CEL file: ", $nameStr[1]);}
+     else{$logger->warn("Affy Chip Name doesn't match inside CEL file: ", $nameStr[1]);}
+
+     last;
+   }
+ }
+ close(FILE);
+
+#  print scalar(@fileLines);
+
+#  $logger->warn($fileLines[scalar(@fileLines)-2]);
+
+}
+
+
+#------------------------------------------------
+sub _fileCounter{
+  my ($self, $file) = @_;
+  my $logger = $self->getLogger();
+
+  my $lines = 0;
+  my $buffer;
+  open(FILE, $file) or $logger->warn("Can't open `$file': $!");
+  while (sysread FILE, $buffer, 4096) {
+    $lines += ($buffer =~ tr/\n//);
+  }
+  close FILE;
+
+  return $lines;
+
+#  my $counter =0 ;
+#  open(FILE, "< $file") or {$logger->warn("cann't open $file")};
+#  $counter++ while <FILE>;
+#  return $counter;
+}
+#--------------------------------------------------------------------------------
+
+sub _isGusArray {
+  my ($self, $name) = @_;
+
+  my $url = "http://hera.pcbi.upenn.edu/rad-dev/Querier/php/radArrayQuery.php?source_id=$name";
+  my $resultXML = get($url);
+  my $root = XMLin($resultXML);
+
+  return $root->{results}->{array};
+}
+
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Service/ValidatorRule/CheckExistingGusProtocols.pm b/lib/perl/RAD/MR_T/MageImport/Service/ValidatorRule/CheckExistingGusProtocols.pm
new file mode 100644
index 0000000..69e074e
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Service/ValidatorRule/CheckExistingGusProtocols.pm
@@ -0,0 +1,102 @@
+package RAD::MR_T::MageImport::Service::ValidatorRule::CheckExistingGusProtocols;
+
+use strict 'vars';
+use LWP::Simple;
+use XML::Simple;
+use Data::Dumper;
+
+use RAD::MR_T::MageImport::MageImportError;
+
+use RAD::MR_T::MageImport::VO::DocRoot;
+use RAD::MR_T::MageImport::Service::AbstractValidatorRule;
+
+
+use vars qw / @ISA / ;
+ at ISA = qw / RAD::MR_T::MageImport::Service::AbstractValidatorRule/;
+
+=head1 NAME
+
+RAD::MR_T::MageImport::Service::ValidatorRule::CheckExistingGusProtocols
+
+=head1 SYNOPSIS
+
+ my $validator = RAD::MR_T::MageImport::Service::Validator->new;
+ my $decoValidator = RAD::MR_T::MageImport::Service::ValidatorRule::CheckExistingGusProtocols->new($validator);
+
+ $decoValidator->check($docRoot);
+
+=head1 DESCRIPTION
+
+If the protocols in IDF are existing GUS protocol, the parameters should also exist in GUS.
+
+=cut
+#-------------------------------------------------------------------------------
+
+my $gusProtocol = {
+		   name=>"",
+		   param=>[
+			   {name=>[]}
+			  ],
+
+};
+
+
+#--------------------------------------------------------------------------------
+
+sub mycheck {
+  my ($self, $docRoot) = @_;
+
+  my $protocols = $docRoot->getProtocolVOs();
+
+  my $logger = $self->getLogger();
+
+  unless($protocols) {
+    RAD::MR_T::MageImport::ValidatorException->new("No Protocols Were Found")->throw();
+  }
+
+  my $failed = 0;
+
+  PROTOCOL: foreach my $protocol (@$protocols) {
+    my $name = $protocol->getName();
+
+    if(my $gusProtocol = $self->_isGusProtocol($name)) {
+      my $params = $protocol->getParams;
+
+      next PROTOCOL unless $params;
+
+      PARAM: foreach my $param (@$params){
+	if( !$gusProtocol->{param}->{name}){
+	  $logger->warn("Protocol: ".$protocol->getName." parameter: ".$param->getName." doesn't exist in GUS protocol, ".$gusProtocol->{name});
+	  $failed = 1;
+	  next PARAM;
+	}
+
+	foreach my $param (@{$gusProtocol->{param}->{name}}){
+	  if($param eq $param->getName){next PARAM;}
+	}
+
+	$failed = 1;
+	$logger->warn("Protocol: ".$protocol->getName. " parameter: ". $param->getName. " doesn't exist in GUS protocol, ".$gusProtocol->{name});
+      }
+    }
+  }
+
+  RAD::MR_T::MageImport::ValidatorException->new("Protocol parameters were not found in GUS, please see log file for details")->throw() if $failed;
+
+  return 1;
+}
+
+#--------------------------------------------------------------------------------
+
+sub _isGusProtocol {
+  my ($self, $name) = @_;
+
+  my $url = "http://hera.pcbi.upenn.edu/rad-dev/Querier/php/radProtocolQuery.php?name=$name";
+  my $resultXML = get($url);
+  my $root = XMLin($resultXML);
+
+  return $root->{results}->{protocol};
+}
+
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Service/ValidatorRule/NoHangingBioMaterials.pm b/lib/perl/RAD/MR_T/MageImport/Service/ValidatorRule/NoHangingBioMaterials.pm
new file mode 100644
index 0000000..70984df
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Service/ValidatorRule/NoHangingBioMaterials.pm
@@ -0,0 +1,108 @@
+package RAD::MR_T::MageImport::Service::ValidatorRule::NoHangingBioMaterials;
+
+use strict 'vars';
+
+use RAD::MR_T::MageImport::MageImportError;
+
+use RAD::MR_T::MageImport::VO::DocRoot;
+use RAD::MR_T::MageImport::Service::AbstractValidatorRule;
+
+use vars qw / @ISA / ;
+ at ISA = qw / RAD::MR_T::MageImport::Service::AbstractValidatorRule/;
+
+my %distinctBioMaterialNames;
+
+=head1 NAME
+
+RAD::MR_T::MageImport::Service::ValidatorRule::NoHangingBioMaterials
+
+=head1 SYNOPSIS
+
+ my $validator = RAD::MR_T::MageImport::Service::Validator->new;
+ my $decoValidator = RAD::MR_T::MageImport::Service::ValidatorRule::NoHangingBioMaterials->new($validator);
+
+ $decoValidator->check($docRoot);
+
+=head1 DESCRIPTION
+
+A "Hanging BioMaterial" is one which is never the input to a Treatment and is not a LabeledExtract.  
+This Class checks that all biomaterials which are not LabeledExtract's are the input to at least one
+Treatment.  A check is also made comparing Distinct BioMaterials used in Treatments to the 
+total number of DocRoot BioMaterialVOs (This checks for a "Hanging LabeledExtract" or an entirely unused
+treatment Series)
+
+=cut
+
+sub mycheck {
+  my ($self, $docRoot) = @_;
+  my $logger = $self->getLogger();
+  %distinctBioMaterialNames = ();
+
+  my $bioMaterials = $docRoot->getBioMaterialVOs();
+  my $treatments = $docRoot->getTreatmentVOs();
+
+  unless($treatments) {
+    RAD::MR_T::MageImport::ValidatorException->new("No Treatments Found for Study")->throw();
+  }
+
+  unless($bioMaterials) {
+    RAD::MR_T::MageImport::ValidatorException->new("No BioMaterials Found for Study")->throw();
+  }
+
+  foreach my $bm (@$bioMaterials) {
+    if($bm->getSubclassView() =~ /Source/i) {
+      $self->checkTreatmentsAsTree($treatments, $bm);
+    }
+  }
+
+  my $numberBioMaterials = scalar(@$bioMaterials);
+  my $numberTreatmentBioMaterials = scalar(keys %distinctBioMaterialNames);
+
+  unless($numberBioMaterials == $numberTreatmentBioMaterials) {
+    $logger->warn("Found [$numberTreatmentBioMaterials] BioMaterials linked to Treatments and [$numberBioMaterials] total");
+    RAD::MR_T::MageImport::ValidatorException->new("Found [$numberTreatmentBioMaterials] BioMaterials linked to Treatments and [$numberBioMaterials] total")->throw();
+  }
+
+  return 1;
+}
+
+#--------------------------------------------------------------------------------
+
+sub checkTreatmentsAsTree {
+  my ($self, $treatments, $bm) = @_;
+  my $logger = $self->getLogger();
+  my $name = $bm->getName();
+  $distinctBioMaterialNames{$name} = 1;
+
+  my $outputBioMaterials = $self->getAllOutputBioMaterials($treatments, $bm);
+
+  if(scalar(@$outputBioMaterials) == 0 && $bm->getSubclassView() ne 'LabeledExtract') {
+    $logger->warn("BioMaterial [$name] has no Treatments (Hanging) and is NOT a LabeledExtract");
+    RAD::MR_T::MageImport::ValidatorException->new("BioMaterial [$name] has no Treatments (Hanging) and is NOT a LabeledExtract")->throw();
+  }
+
+  foreach my $out (@$outputBioMaterials) {
+    $self->checkTreatmentsAsTree($treatments, $out);
+  }
+}
+
+#--------------------------------------------------------------------------------
+
+sub getAllOutputBioMaterials {
+  my ($self, $treatments, $bm) = @_;
+
+  my @outputBioMaterials;
+
+  foreach my $treatment (@$treatments) {
+    my @inputBioMaterials = map { $_->getBioMaterial() } @{$treatment->getInputBMMs()};
+
+    foreach my $input (@inputBioMaterials) {
+      if($input->getName() eq $bm->getName()) {
+        push(@outputBioMaterials, $treatment->getOutputBM());
+      }
+    }
+  }
+  return \@outputBioMaterials;
+}
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Service/ValidatorRule/ProtocolHasMgedType.pm b/lib/perl/RAD/MR_T/MageImport/Service/ValidatorRule/ProtocolHasMgedType.pm
new file mode 100644
index 0000000..72553a5
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Service/ValidatorRule/ProtocolHasMgedType.pm
@@ -0,0 +1,136 @@
+package RAD::MR_T::MageImport::Service::ValidatorRule::ProtocolHasMgedType;
+
+use strict 'vars';
+use LWP::Simple;
+use XML::Simple;
+use Data::Dumper;
+
+use RAD::MR_T::MageImport::MageImportError;
+
+use RAD::MR_T::MageImport::VO::DocRoot;
+use RAD::MR_T::MageImport::Service::AbstractValidatorRule;
+
+
+use vars qw / @ISA / ;
+ at ISA = qw / RAD::MR_T::MageImport::Service::AbstractValidatorRule/;
+
+=head1 NAME
+
+RAD::MR_T::MageImport::Service::ValidatorRule::ProtocolHasMgedType
+
+=head1 SYNOPSIS
+
+ my $validator = RAD::MR_T::MageImport::Service::Validator->new;
+ my $decoValidator = RAD::MR_T::MageImport::Service::ValidatorRule::ProtocolHasMgedType->new($validator);
+
+ $decoValidator->check($docRoot);
+
+=head1 DESCRIPTION
+
+The ProtocolType should be coming from the MGED Ontology
+
+This is Required by the Gus Schema
+
+=cut
+
+#--------------------------------------------------------------------------------
+
+# How else could we get these???  Ideally we don't want to connect to 
+# our database instance.... Another option:  there is Existing Java code 
+# in GUS/Supported to parse an MGED Owl file.  The terms listed below 
+# are very stable and that may not be necessary
+my $experimenatProtocolTypes =  ['PCR_amplification',
+                                 'acclimatization',
+                                 'array_manufacturing_protocol',
+                                 'behavioral_stimulus',
+                                 'biological_fluid_collection',
+                                 'change_biomaterial_characteristics',
+                                 'compound_based_treatment',
+                                 'decontaminate',
+                                 'dissect',
+                                 'element_design_protocol',
+                                 'feature_extraction',
+                                 'fractionate',
+                                 'genetic_modification',
+                                 'grow',
+                                 'harvest',
+                                 'histological_slide_preparation',
+                                 'hybridization',
+                                 'image_acquisition',
+                                 'incubate',
+                                 'infect',
+                                 'irradiate',
+                                 'labeling',
+                                 'linear_amplification',
+                                 'nucleic_acid_extraction',
+                                 'pool',
+                                 'preservation',
+                                 'purify',
+                                 'reverse_transcription',
+                                 'sacrifice',
+                                 'specified_biomaterial_action',
+                                 'split',
+                                 'starvation',
+                                 'store',
+                                 'transfect',
+                                 'unknown_protocol_type',
+                                 'wash',
+                                ];
+
+#--------------------------------------------------------------------------------
+
+sub mycheck {
+  my ($self, $docRoot) = @_;
+  my $logger = $self->getLogger();
+
+  $self->_setExperimenatProtocolTypes;
+ # $logger->infor("****Dump the config****", sub { Dumper($experimenatProtocolTypes ) });
+  my $protocols = $docRoot->getProtocolVOs();
+
+  unless($protocols) {
+    RAD::MR_T::MageImport::ValidatorException->new("No Protocols Were Found")->throw();
+  }
+
+  foreach my $protocol (@$protocols) {
+    my $name = $protocol->getName();
+    my $type = $protocol->getProtocolType();
+    my $typeValue = $type->getValue();
+
+    unless($self->_isMgedTerm($typeValue, $name)) {
+      $logger->warn("ProtocolType [$typeValue] for Protocol [$name] is not supported by MGED");
+      RAD::MR_T::MageImport::ValidatorException->new("ProtocolType [$typeValue] for Protocol [$name] is not supported by MGED")->throw();
+    }
+  }
+
+  return 1;
+}
+
+#--------------------------------------------------------------------------------
+
+sub _isMgedTerm {
+  my ($self, $value, $name) = @_;
+
+  my $logger = $self->getLogger();
+
+
+  foreach my $mged (@$experimenatProtocolTypes) {
+    if($mged eq $value) {
+      $logger->warn("Type [$mged] is allowed BUT highly discouraged for Protocol [$name]") if($value eq 'specified_biomaterial_action');
+      return 1;
+    }
+  }
+  return 0;
+}
+
+sub _setExperimenatProtocolTypes {
+ my $url = "http://hera.pcbi.upenn.edu/rad-dev/Querier/php/moTermQuery.php?category=ExperimentalProtocolType";
+ my $resultXML = get($url);
+
+ my $root = XMLin($resultXML);
+
+ $experimenatProtocolTypes = $root->{results}->{term} if $root->{results}->{term};
+
+}
+
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Service/ValidatorRule/StudyDesignHasMgedType.pm b/lib/perl/RAD/MR_T/MageImport/Service/ValidatorRule/StudyDesignHasMgedType.pm
new file mode 100644
index 0000000..27f2302
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Service/ValidatorRule/StudyDesignHasMgedType.pm
@@ -0,0 +1,166 @@
+package RAD::MR_T::MageImport::Service::ValidatorRule::StudyDesignHasMgedType;
+
+use strict 'vars';
+use LWP::Simple;
+use XML::Simple;
+use Data::Dumper;
+
+use RAD::MR_T::MageImport::MageImportError;
+
+use RAD::MR_T::MageImport::VO::DocRoot;
+use RAD::MR_T::MageImport::Service::AbstractValidatorRule;
+
+
+use vars qw / @ISA / ;
+ at ISA = qw / RAD::MR_T::MageImport::Service::AbstractValidatorRule/;
+
+=head1 NAME
+
+RAD::MR_T::MageImport::Service::ValidatorRule::StudyDesignHasMgedType
+
+=head1 SYNOPSIS
+
+ my $validator = RAD::MR_T::MageImport::Service::Validator->new;
+ my $decoValidator = RAD::MR_T::MageImport::Service::ValidatorRule::StudyDesignHasMgedType->new($validator);
+
+ $decoValidator->check($docRoot);
+
+=head1 DESCRIPTION
+
+The StudyDesignHasMgedType should be coming from the MGED Ontology
+
+This is Required by the Gus Schema
+
+=cut
+
+#--------------------------------------------------------------------------------
+
+# How else could we get these???  Ideally we don't want to connect to 
+# our database instance.... Another option:  there is Existing Java code 
+# in GUS/Supported to parse an MGED Owl file.  The terms listed below 
+# are very stable and that may not be necessary
+my $studyDesignTypes = [
+          'sex_design',
+          'organism_part_comparison_design',
+          'cell_cycle_design',
+          'species_design',
+          'development_or_differentiation_design',
+          'strain_or_line_design',
+          'cell_type_comparison_design',
+          'is_expressed_design',
+          'unknown_experiment_design_type',
+          'organism_status_design',
+          'individual_genetic_characteristics_design',
+          'physiological_process_design',
+          'cell_component_comparison_design',
+          'cellular_process_design',
+          'imprinting_design',
+          'innate_behavior_design',
+          'family_history_design',
+          'clinical_history_design',
+          'unknown_experiment_design_type',
+          'disease_state_design',
+          'genotyping_design',
+          'secreted_protein_identification_design',
+          'binding_site_identification_design',
+          'RNA_stability_design',
+          'translational_bias_design',
+          'co-expression_design',
+          'operon_identification_design',
+          'transcript_identification_design',
+          'comparative_genome_hybridization_design',
+          'unknown_experiment_design_type',
+          'tiling_path_design',
+          'replicate_design',
+          'quality_control_testing_design',
+          'normalization_testing_design',
+          'time_series_design',
+          'software_variation_design',
+          'dye_swap_design',
+          'hardware_variation_design',
+          'self_vs_self_design',
+          'loop_design',
+          'reference_design',
+          'all_pairs',
+          'operator_variation_design',
+          'optimization_design',
+          'ex_vivo_design',
+          'unknown_experiment_design_type',
+          'array_platform_variation_design',
+          'in_vivo_design',
+          'in_vitro_design',
+          'dose_response_design',
+          'stimulus_or_stress_design',
+          'pathogenicity_design',
+          'injury_design',
+          'disease_state_design',
+          'compound_treatment_design',
+          'growth_condition_design',
+          'genetic_modification_design',
+          'cellular_modification_design',
+          'stimulated_design_type',
+          'unknown_experiment_design_type',
+          'non-targeted_transgenic_variation_design',
+          'comparative_genome_hybridization_design',
+          'binding_site_identification_design',
+          'transcript_identification_design',
+          'cellular_modification_design'
+        ];
+
+#--------------------------------------------------------------------------------
+
+sub mycheck {
+  my ($self, $docRoot) = @_;
+  my $logger = $self->getLogger();
+
+  $self->_setStudyDesignTypes;
+
+  my $studyDesigns = $docRoot->getStudyVO()->getDesigns;
+
+  unless($studyDesigns) {
+    $logger->warn("No study designs Were Found");
+    RAD::MR_T::MageImport::ValidatorException->new("No study designs Were Found")->throw();
+  }
+
+  foreach my $studyDesign (@$studyDesigns) {
+    my $name = $studyDesign->getName();
+    my $types = $studyDesign->getTypes();
+    next unless $types;
+    foreach my $type (@$types){
+      my $typeValue = $type->getValue();
+      unless($self->_isMgedTerm($typeValue)) {
+	$logger->warn("DesignType [$typeValue] for Design [$name] is not supported by MGED");
+	RAD::MR_T::MageImport::ValidatorException->new("DesignType [$typeValue] for Design [$name] is not supported by MGED")->throw();
+      }
+    }
+  }
+
+  return 1;
+}
+
+#--------------------------------------------------------------------------------
+
+sub _isMgedTerm {
+  my ($self, $value) = @_;
+
+  my $logger = $self->getLogger();
+  foreach my $mged (@$studyDesignTypes) {
+    if($mged eq $value) {
+      return 1;
+    }
+  }
+  return 0;
+}
+
+sub _setStudyDesignTypes {
+ my $url = "http://hera.pcbi.upenn.edu/rad-dev/Querier/php/moTermQuery.php?category=ExperimentDesignType";
+ my $resultXML = get($url);
+
+ my $root = XMLin($resultXML);
+
+ $studyDesignTypes = $root->{results}->{term} if $root->{results}->{term};
+
+}
+
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Service/ValidatorRule/StudyHasContactAndNameAndDescription.pm b/lib/perl/RAD/MR_T/MageImport/Service/ValidatorRule/StudyHasContactAndNameAndDescription.pm
new file mode 100644
index 0000000..07e713a
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Service/ValidatorRule/StudyHasContactAndNameAndDescription.pm
@@ -0,0 +1,62 @@
+package RAD::MR_T::MageImport::Service::ValidatorRule::StudyHasContactAndNameAndDescription;
+
+use strict 'vars';
+
+use RAD::MR_T::MageImport::MageImportError;
+
+use RAD::MR_T::MageImport::VO::DocRoot;
+use RAD::MR_T::MageImport::Service::AbstractValidatorRule;
+
+use vars qw / @ISA / ;
+ at ISA = qw / RAD::MR_T::MageImport::Service::AbstractValidatorRule/;
+
+=head1 NAME
+
+RAD::MR_T::MageImport::Service::ValidatorRule::StudyHasContactAndNameAndDescription
+
+=head1 SYNOPSIS
+
+ my $validator = RAD::MR_T::MageImport::Service::Validator->new;
+ my $decoValidator = RAD::MR_T::MageImport::Service::ValidatorRule::StudyHasContactAndNameAndDescription->new($validator);
+
+ $decoValidator->check($docRoot);
+
+=head1 DESCRIPTION
+
+Require that the StudyVO has a Name, Description, and MainContact.  
+
+These are required by the Gus Schema.
+
+=cut
+
+sub mycheck {
+  my ($self, $docRoot) = @_;
+
+  my $study =  $docRoot->getStudyVO();
+
+  unless($study) {
+    RAD::MR_T::MageImport::ValidatorException->new("No General Study Information Found")->throw();
+  }
+
+  my $studyName = $study->getName();
+  my $studyDesc = $study->getDescription();
+  my $studyContact = $study->getContact();
+
+  unless($studyName) {
+    RAD::MR_T::MageImport::ValidatorException->new("Study NAME is required but not Found")->throw();
+  }
+
+  unless($studyDesc) {
+    RAD::MR_T::MageImport::ValidatorException->new("Study Description is required but not Found for [$studyName]")->throw();
+  }
+
+  unless($studyContact) {
+    RAD::MR_T::MageImport::ValidatorException->new("Main Contact for Study is required but WAS NOT SET for [$studyName]")->throw();
+  }
+
+
+  return 1;
+}
+
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Service/ValidatorRule/StudyHasDesignsAndFactors.pm b/lib/perl/RAD/MR_T/MageImport/Service/ValidatorRule/StudyHasDesignsAndFactors.pm
new file mode 100644
index 0000000..b6031c8
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Service/ValidatorRule/StudyHasDesignsAndFactors.pm
@@ -0,0 +1,60 @@
+package RAD::MR_T::MageImport::Service::ValidatorRule::StudyHasDesignsAndFactors;
+
+use strict 'vars';
+use LWP::Simple;
+use XML::Simple;
+use Data::Dumper;
+
+use RAD::MR_T::MageImport::MageImportError;
+
+use RAD::MR_T::MageImport::VO::DocRoot;
+use RAD::MR_T::MageImport::Service::AbstractValidatorRule;
+
+
+use vars qw / @ISA / ;
+ at ISA = qw / RAD::MR_T::MageImport::Service::AbstractValidatorRule/;
+
+=head1 NAME
+
+RAD::MR_T::MageImport::Service::ValidatorRule::StudyHasDesignsAndFactors
+
+=head1 SYNOPSIS
+
+ my $validator = RAD::MR_T::MageImport::Service::Validator->new;
+ my $decoValidator = RAD::MR_T::MageImport::Service::ValidatorRule::StudyHasDesignsAndFactors->new($validator);
+
+ $decoValidator->check($docRoot);
+
+=head1 DESCRIPTION
+
+The Study must have designs and factors
+
+=cut
+
+#--------------------------------------------------------------------------------
+
+sub mycheck {
+  my ($self, $docRoot) = @_;
+  my $logger = $self->getLogger();
+
+  my $studyDesigns = $docRoot->getStudyVO()->getDesigns;
+
+  unless($studyDesigns) {
+    $logger->warn("No study designs Were Found");
+    RAD::MR_T::MageImport::ValidatorException->new("No study designs Were Found")->throw();
+  }
+
+  foreach my $studyDesign (@$studyDesigns) {
+    my $types = $studyDesign->getFactors();
+    unless($types){
+      $logger->warn("No study factors were found");
+      RAD::MR_T::MageImport::ValidatorException->new("No study factors were found")->throw();
+    }
+  }
+
+  return 1;
+}
+
+
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Service/ValidatorRule/StudyNameNotInGus.pm b/lib/perl/RAD/MR_T/MageImport/Service/ValidatorRule/StudyNameNotInGus.pm
new file mode 100644
index 0000000..74b71cf
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Service/ValidatorRule/StudyNameNotInGus.pm
@@ -0,0 +1,77 @@
+package RAD::MR_T::MageImport::Service::ValidatorRule::StudyNameNotInGus;
+
+use strict 'vars';
+use LWP::Simple;
+use XML::Simple;
+use Data::Dumper;
+
+use RAD::MR_T::MageImport::MageImportError;
+
+use RAD::MR_T::MageImport::VO::DocRoot;
+use RAD::MR_T::MageImport::Service::AbstractValidatorRule;
+
+
+use vars qw / @ISA / ;
+ at ISA = qw / RAD::MR_T::MageImport::Service::AbstractValidatorRule/;
+
+=head1 NAME
+
+RAD::MR_T::MageImport::Service::ValidatorRule::StudyNameNotInGus
+
+=head1 SYNOPSIS
+
+ my $validator = RAD::MR_T::MageImport::Service::Validator->new;
+ my $decoValidator = RAD::MR_T::MageImport::Service::ValidatorRule::StudyNameNotInGus->new($validator);
+
+ $decoValidator->check($docRoot);
+
+=head1 DESCRIPTION
+
+If the protocols in IDF are existing GUS protocol, the parameters should also exist in GUS.
+
+=cut
+#-------------------------------------------------------------------------------
+
+my $gusStudy = {
+		name=>"",
+		id=>"",
+		desc=>"",
+
+};
+
+
+#--------------------------------------------------------------------------------
+
+sub mycheck {
+  my ($self, $docRoot) = @_;
+
+  my $study = $docRoot->getStudyVO();
+
+  my $logger = $self->getLogger();
+
+  unless($study) {
+    RAD::MR_T::MageImport::ValidatorException->new("No Study Were Found")->throw();
+  }
+
+  if(my $gusStudy = $self->_isGusStudy($study->getName)) {
+    $logger->warn("Study: ",$study->getName, " name already exist in GUS DB");
+    RAD::MR_T::MageImport::ValidatorException->new("study name were already exist in GUS, please see log file for details")->throw();
+  }
+
+  return 1;
+}
+
+#--------------------------------------------------------------------------------
+
+sub _isGusStudy {
+  my ($self, $name) = @_;
+
+  my $url = "http://hera.pcbi.upenn.edu/rad-dev/Querier/php/radStudyQuery.php?name=$name";
+  my $resultXML = get($url);
+  my $root = XMLin($resultXML);
+
+  return $root->{results}->{study};
+}
+
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/ServiceFactory.pm b/lib/perl/RAD/MR_T/MageImport/ServiceFactory.pm
new file mode 100644
index 0000000..fd6817e
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/ServiceFactory.pm
@@ -0,0 +1,381 @@
+package RAD::MR_T::MageImport::ServiceFactory;
+
+use strict;
+use Error qw(:try);
+use Data::Dumper;
+
+use RAD::MR_T::MageImport::MageImportError;
+
+
+=head1
+
+=over
+
+=item new construct
+
+side effect: createDefaultDatabase sounds tricky here, but 
+             there is a case that people can run the importer outside of ga 
+             also we try to refactor the DbiDatabase creations from the test case classes
+
+=cut
+
+sub new {
+  my $class = shift;
+  my $arg = shift;
+  my $self = bless {_config=>$arg}, $class;
+
+  if($self->{_config}->{nolog}){
+    $self->setLogger(_Logger->new());
+  }
+  else{
+    my $sLogger;
+    eval "{use Log::Log4perl qw(get_logger :levels)}";
+
+    if($@){
+      $sLogger = _Logger->new();
+    }
+    else{
+      Log::Log4perl->init_once("$ENV{GUS_HOME}/config/log4perl.config");
+      $sLogger = get_logger("RAD::MR_T::MageImport::Service");
+    }
+
+    $self->setLogger($sLogger);
+  }
+
+  $self->_createAllServices($self->{_config});
+
+  if(my $container = $self->{_config}->{container}){
+    $self->_createDefaultDatabase($container->{property}->{value}) if  $container->{id} eq 'database' && $container->{property};
+  }
+
+  $self->_createLoggers();
+  return $self;
+}
+
+=head1 createAllSerivices
+
+ this will read in config and create all services
+ side effect: what if people only have one service the config hash will be totally different
+              assume there are always minimum two services defined
+
+=cut
+
+sub _createAllServices {
+  my ($self, $config) = @_;
+  my $services = $self->{_config}->{service};
+
+  foreach my $service ( keys %$services){
+    my $creator = "_create".ucfirst($service);
+
+    $self->{$service} = $self->$creator();
+  }
+}
+
+=item _createDefaultDatabase($gusconfig)
+
+to-dos: 1)should we move this function to utility class
+        2)$ENV{GUS_HOME}/config/gus.config cann't pass through XML config
+
+=cut
+
+sub _createDefaultDatabase {
+  my ($self, $gusconfigFile) = @_;
+
+  require GUS::ObjRelP::DbiDatabase;
+  require GUS::Supported::GusConfig;
+
+  $gusconfigFile = "$ENV{GUS_HOME}/config/gus.config";
+# unless $gusconfigFile;
+
+  my $config = GUS::Supported::GusConfig->new($gusconfigFile);
+  my $login       = $config->getDatabaseLogin();
+  my $password    = $config->getDatabasePassword();
+  my $core        = $config->getCoreSchemaName();
+  my $dbiDsn      = $config->getDbiDsn();
+  my $oraDfltRbs  = $config->getOracleDefaultRollbackSegment();
+
+  my $database;
+  unless($database = GUS::ObjRelP::DbiDatabase->getDefaultDatabase()) {
+    $database = GUS::ObjRelP::DbiDatabase->new($dbiDsn, $login, $password,
+                                                  0,0,1,$core, $oraDfltRbs);
+  }
+
+  $self->{_dbi_database} = $database;
+}
+
+sub getServiceByName{
+  my ($self, $name) = @_;
+  return $self->{$name};
+}
+
+sub _createReader {
+  my $self = shift;
+
+  my $readerConfig = $self->{_config}->{service}->{reader};
+
+  my $property = $readerConfig->{property};
+  my $args = $self->getArgsFromPropertyHash($property);
+
+  #Temp------------
+  # Remove these lines and substitute $args into the new() below...
+  my @keys = keys(%$args);
+  my $key = $keys[0];
+  my $magefile = $args->{$key};
+  #Temp------------
+
+  my $readerClass = $readerConfig->{class};
+
+  eval "require $readerClass";
+
+  my $reader = eval {
+    $readerClass->new($magefile);
+  };
+
+  RAD::MR_T::MageImport::MageImportReaderNotCreatedError->new(ref($self)."->createReader: ".$readerClass. "\n".$@)->throw() if $@;
+
+  return $reader;
+}
+
+sub _createTester {
+  my $self = shift;
+
+  my $testerConfig = $self->{_config}->{service}->{tester};
+  my $property = $testerConfig->{property};
+  my $args = $self->getArgsFromPropertyHash($property);
+
+  #Temp------------
+  # Remove these lines and substitute $args into the new() below...
+  my @keys = keys(%$args);
+  my $key = $keys[0];
+  my $file = $args->{$key};
+  #Temp------------
+
+  my $testerClass = $testerConfig->{class};
+  eval "require $testerClass"; 
+  my $tester = eval {
+    $testerClass->new($file);
+  };
+
+  RAD::MR_T::MageImport::ServiceFactoryException::TesterNotCreatedError->new(ref($self)."->createTester: $testerClass")->throw() if $@;
+
+  return $tester;
+}
+
+
+sub _createReporter {
+  my $self = shift;
+
+  my $reporterConfig = $self->{_config}->{service}->{reporter};
+  my $property = $reporterConfig->{property};
+  my $args = $self->getArgsFromPropertyHash($property);
+
+  #Temp------------
+  # Remove these lines and substitute $args into the new() below...
+  my @keys = keys(%$args);
+  my $key = $keys[0];
+  my $file = $args->{$key};
+  #Temp------------
+
+  my $reporterClass = $reporterConfig->{class};
+  eval "require $reporterClass"; 
+
+  my $reporter = eval {
+    $reporterClass->new($file); 
+  };
+
+  RAD::MR_T::MageImport::ServiceFactoryException::ReporterNotCreatedError->new(ref($self)."->createReporter: $reporterClass")->throw() if $@;
+
+  return $reporter;
+}
+
+
+sub _createTranslator {
+  my $self = shift;
+
+  my $tConfig = $self->{_config}->{service}->{translator};
+  my $property = $tConfig->{property};
+  my $args = $self->getArgsFromPropertyHash($property);
+
+  my $tClass = $tConfig->{class};
+
+  eval "require $tClass";
+
+  my $translator = eval { 
+    $tClass->new($args)
+  };
+
+  RAD::MR_T::MageImport::ServiceFactoryException->new(ref($self)."->createTransltor: $tClass\n" . $@)->throw() if $@;
+
+  return $translator;
+}
+
+
+sub _createValidator {
+  my $self = shift;
+
+  my $validatorConfig = $self->{_config}->{service}->{validator};
+  my $validatorBaseClass = $validatorConfig->{baseClass};
+  my $require_p = "{require $validatorBaseClass; $validatorBaseClass->new }";
+  my $validator = eval $require_p;
+  RAD::MR_T::MageImport::MageImportValidatorNotCreatedError->new(ref($self)."->createValidator: ".$require_p)->throw() if $@;
+
+# a temporary solution for now
+  $validator->setLogger($self->getLogger);
+
+  if($validatorConfig->{decorProperties}){
+    my $property = $validatorConfig->{decorProperties};
+    my $args = $self->getArgsFromPropertyHash($property);
+
+    #Temp------------
+    # Remove these lines and substitute $args into the new() below...
+    my @keys = keys(%$args);
+    my $key = $keys[0];
+    my $rulesStr = $args->{$key};
+    #Temp------------
+
+    my @rules = split(',', $rulesStr);
+    if(@rules){
+      foreach my $rule (@rules){
+	$validator = $self->_decoValidator($rule, $validator);
+	$validator->setLogger($self->getLogger);
+      }
+    }
+  }
+  return $validator;
+}
+
+sub _decoValidator {
+  my ($self, $rule, $validator) = @_;
+
+  my $ruleClass = "RAD::MR_T::MageImport::Service::ValidatorRule::$rule";
+
+  $ruleClass =~ s/\.pm$//;
+ eval "require $ruleClass";
+
+  my $decoValidator = $ruleClass->new($validator);
+
+#  my $decoValidator= eval "require $ruleClass; $ruleClass->new($validator)";
+
+  RAD::MR_T::MageImport::MageImportValidatorNotCreatedError->new(ref($self)."->decoValidator: ".$ruleClass.$@)->throw() if $@;
+  return $decoValidator;
+}
+
+
+sub _createProcessor {
+  my $self = shift;
+
+  my $processorConfig = $self->{_config}->{service}->{processor};
+  my $processorBaseClass = $processorConfig->{baseClass};
+  my $require_p = "{require $processorBaseClass; $processorBaseClass->new }";
+  my $processor = eval $require_p;
+  RAD::MR_T::MageImport::ServiceFactoryException::MageImportProcessorNotCreatedError->new(ref($self)."->createProcessor: ".$require_p)->throw() if $@;
+
+# a temporary solution for now this code stinks!!!
+  $processor->setLogger ($self->getLogger);
+
+  if($processorConfig->{decorProperties}){
+    my $property = $processorConfig->{decorProperties};
+    my $decoPropArgs = $self->getArgsFromPropertyHash($property);
+
+    #Temp------------
+    my @keys = keys(%$decoPropArgs);
+    my $key = $keys[0];
+    my $rulesStr = $decoPropArgs->{$key};
+    #Temp------------
+
+    my @rules = split(',', $rulesStr);
+    if(@rules){
+      foreach my $rule (@rules){
+	my $ruleConstructArg;
+
+        my $ruleConstructArg;
+	if(my $decoProperty = $self->{_config}->{serviceDeco}->{$rule}->{property}){
+          my $args = $self->getArgsFromPropertyHash($decoProperty);
+
+          #Temp------------
+          # Remove these lines and substitute $args into the new() below...
+          my @keys = keys(%$args);
+          my $key = $keys[0];
+          $ruleConstructArg = $args->{$key};
+          #Temp------------
+
+	}
+
+	$processor = $self->_decoProcessor($rule, $processor, $ruleConstructArg);
+      }
+    }
+  }
+  return $processor;
+}
+
+sub _decoProcessor {
+  my ($self, $rule, $processor, $ruleConArg) = @_;
+
+  my $ruleClass = "RAD::MR_T::MageImport::Service::ProcessModule::$rule";
+
+  #print "RULE_CLASS=$ruleClass\n";
+
+  my $require_p = "{require $ruleClass;}";
+  eval $require_p;
+
+  if($@) {
+    die $@;
+    
+  }
+
+  #print "PAST EVAL\n";
+  #print "Processor=".$processor."\n";
+  #print "ruleconarg=".$ruleConArg."\n";
+
+  my $decoProcessor = $ruleClass->new($processor, $ruleConArg);
+
+#  my $decoProcessor= eval "require $ruleClass; $ruleClass->new($processor)";
+
+  RAD::MR_T::MageImport::ServiceFactoryException::MageImportProcessorNotCreatedError->new(ref($self)."->decoProcessor: ".$require_p.$@)->throw() if $@;
+  return $decoProcessor;
+}
+
+
+=item createLogger
+
+to-dos:  this is not the best place for this method, should refactor it to 
+         a ConfigManager class
+
+side-effect: assume log4perl.conf is in the current dir
+
+=cut
+
+sub _createLoggers {
+  my $self= shift;
+
+  my $sLogger = $self->getLogger;
+
+  foreach my $service ( keys %{$self->{_config}->{service}}){
+    $self->{$service}->setLogger($sLogger);
+  }
+}
+
+sub getArgsFromPropertyHash {
+  my ($self, $property) = @_;
+
+  my $args = {};
+  foreach(keys %$property) {
+    $args->{$_} = $property->{$_}->{value};
+  }
+  return $args;
+}
+
+sub setLogger {$_[0]->{_logger} = $_[1]}
+
+sub getLogger {$_[0]->{_logger}}
+
+package _Logger;
+
+sub new {my $self = shift;}
+sub debug {my $self = shift;}
+sub fatal {my $self = shift;}
+sub info {my $self = shift;}
+sub warn {my $self = shift;  print "@_\n";}
+
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/Odom_ChIP_test.xml b/lib/perl/RAD/MR_T/MageImport/Test/Odom_ChIP_test.xml
new file mode 100644
index 0000000..e84d65c
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/Odom_ChIP_test.xml
@@ -0,0 +1,8520 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--DOCTYPE MAGE-ML  SYSTEM "MAGE-ML.dtd"-->
+<!DOCTYPE MAGE-ML SYSTEM "file:/home/junmin/mr_t/MAGEloader/dtd/MAGE-ML1.1.dtd"> 
+<MAGE-ML identifier="MAGE:EBI:MIAMExpress:helen:Odom_ChIP:447">
+  <AuditAndSecurity_package>
+    <Contact_assnlist>
+      <Person lastName="Latek" firstName="Robert" address="9 Cambridge Center" URI="" fax="" identifier="PERS:Robert_Latek:latek" midInitials="R" email="latek at wi.mit.edu" phone="1-617-258-6109">
+        <Roles_assnlist>
+          <OntologyEntry category="Roles" value="submitter">
+          </OntologyEntry>
+        </Roles_assnlist>
+        <Affiliation_assnref>
+          <Organization_ref identifier="ORG:Whitehead Institute:Bioinformatics"/>
+        </Affiliation_assnref>
+      </Person>
+      <Organization identifier="ORG:Whitehead Institute:Bioinformatics" name="Bioinformatics">
+        <Parent_assnref> 
+          <Organization_ref identifier="ORG:Whitehead Institute"/>
+        </Parent_assnref>
+      </Organization>
+      <Organization address="9 Cambridge Center, Cambridge, MA, 02142, USA" identifier="ORG:Whitehead Institute" name="Whitehead Institute">
+      </Organization>
+    </Contact_assnlist>
+  </AuditAndSecurity_package>
+  <Protocol_package>
+    <Hardware_assnlist>
+      <Hardware identifier="HW:MEXP:7728" make="Axon- GenePix4000B" name="Scanning hardware">
+        <Type_assn>
+          <OntologyEntry category="HardwareType" value="array_scanner">
+          </OntologyEntry>
+        </Type_assn>
+      </Hardware>
+    </Hardware_assnlist>
+    <Software_assnlist>
+      <Software identifier="SW:MEXP:7729" name="Default scanner software">
+        <Type_assn>
+          <OntologyEntry category="SoftwareType" value="image_acquisition_software">
+          </OntologyEntry>
+        </Type_assn>
+      </Software>
+    </Software_assnlist>
+    <Protocol_assnlist>
+      <Protocol text="1. Turn on Axon scanner and open Genepix pro.  2. Place slide upside down in scanner. 3. Prescan. 4. During pre scan, adjust the cy3 channel(532 nm PMT voltage under hardware settings) to a background ~ 100 or less by pointing the cursor to area where there is no spot and viewing the p (pixel) value on the side bar. 5. Set up the proper scanning window 6. Scan. 7. Adjust the cy5 channel (635 nm) so the intensity of the spot signals of both channels approximately mat [...]
+        <Type_assn>
+          <OntologyEntry category="ProtocolType" value="image_acquisition">
+          </OntologyEntry>
+        </Type_assn>
+        <Hardwares_assnreflist>
+          <Hardware_ref identifier="HW:MEXP:7728"/>
+        </Hardwares_assnreflist>
+        <Softwares_assnreflist>
+          <Software_ref identifier="SW:MEXP:7729"/>
+        </Softwares_assnreflist>
+      </Protocol>
+      <!--Protocol text="I. Preblock and binding of antibody to magnetic beads 1. wash 100 µL Dynal magnetic beads (per reaction) in 1 ml fresh BSA/PBS 2. collect the beads by spinning at 3000 RPM for 3 minutes. 3. wash beads in 1.5 ml BSA/PBS 2 times, collect the beads with the magnet. 4. Add 6-10 µg of Ab +250µL of PBS/BSA. 5. incubate 4hr to O.N. on a rotating platform at 4&#8734;C. 6. wash beads 3 times in 1.5 Ml PBS/BSA. 7. Resuspend in 100µL PBS/BSA.  II. Chromatin Immunoprecip [...]
+   <Protocol text="I. Preblock and binding of antibody to magnetic beads 1. wash 100 µL Dynal magnetic beads (per reaction) in 1 ml fresh BSA/PBS 2. collect the beads by spinning at 3000 RPM for 3 minutes. 3. wash beads in 1.5 ml BSA/PBS 2 times, collect the beads with the magnet. 4. Add 6-10 µg of Ab +250µL of PBS/BSA. 5. incubate 4hr to O.N. on a rotating platform at 4&#8734;C. 6. wash beads 3 times in 1.5 Ml PBS/BSA. 7. Resuspend in 100µL PBS/BSA.  II. Chromatin Immunoprecipitatio [...]
+        <ParameterTypes_assnlist>
+          <Parameter identifier="PARAM:MEXP:EXTRACTED_PRODUCT:7699" name="Extracted product">
+          </Parameter>
+          <Parameter identifier="PARAM:MEXP:AMPLIFICATION_EXTRACT:7700" name="Amplification">
+          </Parameter>
+        </ParameterTypes_assnlist>
+        <Type_assn>
+          <OntologyEntry category="ProtocolType" value="nucleic_acid_extraction">
+          </OntologyEntry>
+        </Type_assn>
+      </Protocol>
+      <!--Protocol text="Using ChIP material from prior step:  I.  A. T4 DNA polymerase filled in 1. To 55 µL of IP sample, and 200 ng (=2 µL) of the normalized input/wce diluted to 55 µL:   11 µL 10X T4 DNA pol buffer   0.5 µL BSA (NEB 10mg/ml)   1 µL 10mM dNTP mix   0.2 µL T4 DNA pol (NEB 3U/µL)   up to 110 µL H2O 2. Transfer sample to PCR tube and incubate 12&#8734;C 20 min (program 12/20). 3. Add 11.5 µl 3 M NaAc and 0.5 µL (=10 µg) glycogen. 4. Extract 1x with 120 µL phenol:chl: [...]
+      <Protocol text="Using ChIP material from prior step:  I.  A. T4 DNA polymerase filled in 1. To 55 µL of IP sample, and 200 ng (=2 µL) of the normalized input/wce diluted to 55 µL:   11 µL 10X T4 DNA pol buffer   0.5 µL BSA (NEB 10mg/ml)   1 µL 10mM dNTP mix   0.2 µL T4 DNA pol (NEB 3U/µL)   up to 110 µL H2O 2. Transfer sample to PCR tube and incubate 12&#8734;C 20 min (program 12/20). 3. Add 11.5 µl 3 M NaAc and 0.5 µL (=10 µg) glycogen. 4. Extract 1x with 120 µL phenol:chl:IA. [...]
+        <ParameterTypes_assnlist>
+          <Parameter identifier="PARAM:MEXP:LABEL_USED:7843" name="Label used">
+          </Parameter>
+          <Parameter identifier="PARAM:MEXP:AMPLIFICATION_LABEL:7844" name="Amplification">
+          </Parameter>
+        </ParameterTypes_assnlist>
+        <Type_assn>
+          <OntologyEntry category="ProtocolType" value="labeling">
+          </OntologyEntry>
+        </Type_assn>
+      </Protocol>
+      <!--Protocol text="Using ChIP material from prior step:  I.  A. T4 DNA polymerase filled in 1. To 55 µL of IP sample, and 200 ng (=2 µL) of the normalized input/wce diluted to 55 µL:   11 µL 10X T4 DNA pol buffer   0.5 µL BSA (NEB 10mg/ml)   1 µL 10mM dNTP mix   0.2 µL T4 DNA pol (NEB 3U/µL)   up to 110 µL H2O 2. Transfer sample to PCR tube and incubate 12&#8734;C 20 min (program 12/20). 3. Add 11.5 µl 3 M NaAc and 0.5 µL (=10 µg) glycogen. 4. Extract 1x with 120 µL phenol:chl: [...]
+ <Protocol text="Using ChIP material from prior step:  I.  A. T4 DNA polymerase filled in 1. To 55 µL of IP sample, and 200 ng (=2 µL) of the normalized input/wce diluted to 55 µL:   11 µL 10X T4 DNA pol buffer   0.5 µL BSA (NEB 10mg/ml)   1 µL 10mM dNTP mix   0.2 µL T4 DNA pol (NEB 3U/µL)   up to 110 µL H2O 2. Transfer sample to PCR tube and incubate 12&#8734;C 20 min (program 12/20). 3. Add 11.5 µl 3 M NaAc and 0.5 µL (=10 µg) glycogen. 4. Extract 1x with 120 µL phenol:chl:IA. 5. P [...]
+        <ParameterTypes_assnlist>
+          <Parameter identifier="PARAM:MEXP:LABEL_USED:7839" name="Label used">
+          </Parameter>
+          <Parameter identifier="PARAM:MEXP:AMPLIFICATION_LABEL:7840" name="Amplification">
+          </Parameter>
+        </ParameterTypes_assnlist>
+        <Type_assn>
+          <OntologyEntry category="ProtocolType" value="labeling">
+          </OntologyEntry>
+        </Type_assn>
+      </Protocol>
+      <!--Protocol text="I.  Prehybridization. 1. Make 50 ml of prehybridization buffer per 4 arrays, take out 1mL for hybe buffer. 2. Pour remaining prehybe buffer into Coplin jar.  Pre-heat at 50&#8734;C 30 minutes. 3. Remove slides from vacuum and place them in the Coplin jar w/ prehyb buffer. 4. Incubate slides at 50&#8734;C for 45 minutes. 5. Wash slides w/ RO water and dry slides by spinning 1000 rpm 1 min. 6. Fill two holes of bottom hybe chamber with water. 7. Place dried [...]
+
+      <Protocol text="I.  Prehybridization. 1. Make 50 ml of prehybridization buffer per 4 arrays, take out 1mL for hybe buffer. 2. Pour remaining prehybe buffer into Coplin jar.  Pre-heat at 50&#8734;C 30 minutes. 3. Remove slides from vacuum and place them in the Coplin jar w/ prehyb buffer. 4. Incubate slides at 50&#8734;C for 45 minutes. 5. Wash slides w/ RO water and dry slides by spinning 1000 rpm 1 min. 6. Fill two holes of bottom hybe chamber with water. 7. Place dried sl [...]
+        <ParameterTypes_assnlist>
+          <Parameter identifier="PARAM:MEXP:CHAMBER_TYPE:7719" name="Chamber type">
+          </Parameter>
+          <Parameter identifier="PARAM:MEXP:Quantity of labeled target used:7720" name="Quantity of label target used">
+            <DefaultValue_assn>
+              <Measurement>
+                <Unit_assn>
+                  <MassUnit unitNameCV="ug">
+                  </MassUnit>
+                </Unit_assn>
+              </Measurement>
+            </DefaultValue_assn>
+          </Parameter>
+          <Parameter identifier="PARAM:MEXP:Time:7722" name="time">
+            <DefaultValue_assn>
+              <Measurement>
+                <Unit_assn>
+                  <TimeUnit unitNameCV="h">
+                  </TimeUnit>
+                </Unit_assn>
+              </Measurement>
+            </DefaultValue_assn>
+          </Parameter>
+          <Parameter identifier="PARAM:MEXP:Volume:7724" name="Volume">
+            <DefaultValue_assn>
+              <Measurement>
+                <Unit_assn>
+                  <VolumeUnit unitNameCV="uL">
+                  </VolumeUnit>
+                </Unit_assn>
+              </Measurement>
+            </DefaultValue_assn>
+          </Parameter>
+          <Parameter identifier="PARAM:MEXP:Temperature:7726" name="temperature">
+            <DefaultValue_assn>
+              <Measurement>
+                <Unit_assn>
+                  <TemperatureUnit unitNameCV="degree_C">
+                  </TemperatureUnit>
+                </Unit_assn>
+              </Measurement>
+            </DefaultValue_assn>
+          </Parameter>
+        </ParameterTypes_assnlist>
+        <Type_assn>
+          <OntologyEntry category="ProtocolType" value="hybridization">
+          </OntologyEntry>
+        </Type_assn>
+      </Protocol>
+    </Protocol_assnlist>
+  </Protocol_package>
+  <BioMaterial_package>
+    <Compound_assnlist>
+      <Compound identifier="COMP:Cy3" name="Cy3">
+      </Compound>
+      <Compound identifier="COMP:Cy5" name="Cy5">
+      </Compound>
+    </Compound_assnlist>
+    <BioMaterial_assnlist>
+      <LabeledExtract identifier="S:Label:MEXP:3348" name="LABEL2520Cy3">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Labeling:MEXP:3348">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-19 14:45:06">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Cy3">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:LABEL_USED:7843"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_LABEL:7844"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2513"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="labeling">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Extraction:MEXP:2257"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Labels_assnreflist>
+          <Compound_ref identifier="COMP:Cy3"/>
+        </Labels_assnreflist>
+      </LabeledExtract>
+      <BioSample identifier="S:Extraction:MEXP:2257" name="EXTRACT2520">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Extraction:MEXP:2257">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 20:55:19">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="genomic DNA">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:EXTRACTED_PRODUCT:7699"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_EXTRACT:7700"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2377"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="nucleic_acid_extraction">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Sample:MEXP:167751"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Type_assn>
+          <OntologyEntry category="BioSampleType" value="extract">
+          </OntologyEntry>
+        </Type_assn>
+      </BioSample>
+      <BioSample identifier="S:Sample:MEXP:167751" name="2520_hepcyt_hnf1a">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="whole_organism">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment order="1" identifier="T:Sample:MEXP:167751">
+            <Action_assn>
+              <OntologyEntry category="Action" value="specified_biomaterial_action">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167751"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+          <Treatment order="4" identifier="T:Growth:MEXP:167751">
+            <Action_assn>
+              <OntologyEntry category="Action" value="grow">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167751"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+          <Treatment order="3" identifier="T:Separation Technique:MEXP:167751">
+            <Action_assn>
+              <OntologyEntry category="Action" value="purify">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167751"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Type_assn>
+          <OntologyEntry category="BioSampleType" value="not_extract">
+          </OntologyEntry>
+        </Type_assn>
+      </BioSample>
+      <BioSource identifier="S:BioSource:MEXP:167751" name="Homo sapiens">
+        <Characteristics_assnlist>
+          <OntologyEntry category="Organism" value="Homo sapiens">
+          </OntologyEntry>
+          <OntologyEntry category="CellType" value="Human Hepatocytes">
+          </OntologyEntry>
+          <OntologyEntry category="DevelopmentalStage" value="adult">
+          </OntologyEntry>
+          <OntologyEntry category="OrganismPart" value="Liver hepatocytes">
+          </OntologyEntry>
+          <OntologyEntry category="DiseaseState" value="Healthy donor tissue">
+          </OntologyEntry>
+          <OntologyEntry category="TargetedCellType" value="hepatocytes">
+          </OntologyEntry>
+        </Characteristics_assnlist>
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="organism_part">
+          </OntologyEntry>
+        </MaterialType_assn>
+      </BioSource>
+      <LabeledExtract identifier="S:Label:MEXP:3432" name="LABEL2520Cy5">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Labeling:MEXP:3432">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-19 14:44:33">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Cy5">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:LABEL_USED:7839"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_LABEL:7840"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2512"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="labeling">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Extraction:MEXP:2257"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Labels_assnreflist>
+          <Compound_ref identifier="COMP:Cy5"/>
+        </Labels_assnreflist>
+      </LabeledExtract>
+      <LabeledExtract identifier="S:Label:MEXP:3349" name="LABEL2522Cy3">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Labeling:MEXP:3349">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-19 14:45:06">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Cy3">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:LABEL_USED:7843"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_LABEL:7844"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2513"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="labeling">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Extraction:MEXP:2258"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Labels_assnreflist>
+          <Compound_ref identifier="COMP:Cy3"/>
+        </Labels_assnreflist>
+      </LabeledExtract>
+      <BioSample identifier="S:Extraction:MEXP:2258" name="EXTRACT2522">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Extraction:MEXP:2258">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 20:55:19">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="genomic DNA">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:EXTRACTED_PRODUCT:7699"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_EXTRACT:7700"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2377"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="nucleic_acid_extraction">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Sample:MEXP:167752"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Type_assn>
+          <OntologyEntry category="BioSampleType" value="extract">
+          </OntologyEntry>
+        </Type_assn>
+      </BioSample>
+      <BioSample identifier="S:Sample:MEXP:167752" name="2522_hepcyt_hnf4a">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="whole_organism">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment order="1" identifier="T:Sample:MEXP:167752">
+            <Action_assn>
+              <OntologyEntry category="Action" value="specified_biomaterial_action">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167752"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+          <Treatment order="4" identifier="T:Growth:MEXP:167752">
+            <Action_assn>
+              <OntologyEntry category="Action" value="grow">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167752"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+          <Treatment order="3" identifier="T:Separation Technique:MEXP:167752">
+            <Action_assn>
+              <OntologyEntry category="Action" value="purify">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167752"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Type_assn>
+          <OntologyEntry category="BioSampleType" value="not_extract">
+          </OntologyEntry>
+        </Type_assn>
+      </BioSample>
+      <BioSource identifier="S:BioSource:MEXP:167752" name="Homo sapiens">
+        <Characteristics_assnlist>
+          <OntologyEntry category="Organism" value="Homo sapiens">
+          </OntologyEntry>
+          <OntologyEntry category="CellType" value="Human Hepatocytes">
+          </OntologyEntry>
+          <OntologyEntry category="DevelopmentalStage" value="adult">
+          </OntologyEntry>
+          <OntologyEntry category="OrganismPart" value="Liver hepatocytes">
+          </OntologyEntry>
+          <OntologyEntry category="DiseaseState" value="Healthy donor tissue">
+          </OntologyEntry>
+          <OntologyEntry category="TargetedCellType" value="hepatocytes">
+          </OntologyEntry>
+        </Characteristics_assnlist>
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="organism_part">
+          </OntologyEntry>
+        </MaterialType_assn>
+      </BioSource>
+      <LabeledExtract identifier="S:Label:MEXP:3433" name="LABEL2522Cy5">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Labeling:MEXP:3433">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-19 14:44:33">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Cy5">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:LABEL_USED:7839"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_LABEL:7840"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2512"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="labeling">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Extraction:MEXP:2258"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Labels_assnreflist>
+          <Compound_ref identifier="COMP:Cy5"/>
+        </Labels_assnreflist>
+      </LabeledExtract>
+      <LabeledExtract identifier="S:Label:MEXP:3350" name="LABEL2633Cy3">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Labeling:MEXP:3350">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-19 14:45:06">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Cy3">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:LABEL_USED:7843"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_LABEL:7844"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2513"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="labeling">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Extraction:MEXP:2259"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Labels_assnreflist>
+          <Compound_ref identifier="COMP:Cy3"/>
+        </Labels_assnreflist>
+      </LabeledExtract>
+      <BioSample identifier="S:Extraction:MEXP:2259" name="EXTRACT2633">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Extraction:MEXP:2259">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 20:55:19">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="genomic DNA">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:EXTRACTED_PRODUCT:7699"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_EXTRACT:7700"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2377"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="nucleic_acid_extraction">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Sample:MEXP:167753"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Type_assn>
+          <OntologyEntry category="BioSampleType" value="extract">
+          </OntologyEntry>
+        </Type_assn>
+      </BioSample> 
+      <BioSample identifier="S:Sample:MEXP:167753" name="2633_hnf1a_hepcyts">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="whole_organism">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment order="1" identifier="T:Sample:MEXP:167753">
+            <Action_assn>
+              <OntologyEntry category="Action" value="specified_biomaterial_action">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167753"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+          <Treatment order="4" identifier="T:Growth:MEXP:167753">
+            <Action_assn>
+              <OntologyEntry category="Action" value="grow">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167753"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+          <Treatment order="3" identifier="T:Separation Technique:MEXP:167753">
+            <Action_assn>
+              <OntologyEntry category="Action" value="purify">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167753"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Type_assn>
+          <OntologyEntry category="BioSampleType" value="not_extract">
+          </OntologyEntry>
+        </Type_assn>
+      </BioSample>
+      <BioSource identifier="S:BioSource:MEXP:167753" name="Homo sapiens">
+        <Characteristics_assnlist>
+          <OntologyEntry category="Organism" value="Homo sapiens">
+          </OntologyEntry>
+          <OntologyEntry category="CellType" value="Human Hepatocytes">
+          </OntologyEntry>
+          <OntologyEntry category="DevelopmentalStage" value="adult">
+          </OntologyEntry>
+          <OntologyEntry category="OrganismPart" value="Liver hepatocytes">
+          </OntologyEntry>
+          <OntologyEntry category="DiseaseState" value="Healthy donor tissue">
+          </OntologyEntry>
+          <OntologyEntry category="TargetedCellType" value="hepatocytes">
+          </OntologyEntry>
+        </Characteristics_assnlist>
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="organism_part">
+          </OntologyEntry>
+        </MaterialType_assn>
+      </BioSource>
+      <LabeledExtract identifier="S:Label:MEXP:3434" name="LABEL2633Cy5">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Labeling:MEXP:3434">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-19 14:44:33">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Cy5">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:LABEL_USED:7839"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_LABEL:7840"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2512"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="labeling">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Extraction:MEXP:2259"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Labels_assnreflist>
+          <Compound_ref identifier="COMP:Cy5"/>
+        </Labels_assnreflist>
+      </LabeledExtract>
+      <LabeledExtract identifier="S:Label:MEXP:3373" name="LABEL2634Cy3">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Labeling:MEXP:3373">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-19 14:45:06">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Cy3">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:LABEL_USED:7843"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_LABEL:7844"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2513"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="labeling">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Extraction:MEXP:2260"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Labels_assnreflist>
+          <Compound_ref identifier="COMP:Cy3"/>
+        </Labels_assnreflist>
+      </LabeledExtract>
+      <BioSample identifier="S:Extraction:MEXP:2260" name="EXTRACT2634">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Extraction:MEXP:2260">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 20:55:19">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="genomic DNA">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:EXTRACTED_PRODUCT:7699"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_EXTRACT:7700"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2377"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="nucleic_acid_extraction">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Sample:MEXP:167754"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Type_assn>
+          <OntologyEntry category="BioSampleType" value="extract">
+          </OntologyEntry>
+        </Type_assn>
+      </BioSample>
+      <BioSample identifier="S:Sample:MEXP:167754" name="2634_hnf1a_hepcyts">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="whole_organism">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment order="1" identifier="T:Sample:MEXP:167754">
+            <Action_assn>
+              <OntologyEntry category="Action" value="specified_biomaterial_action">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167754"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+          <Treatment order="4" identifier="T:Growth:MEXP:167754">
+            <Action_assn>
+              <OntologyEntry category="Action" value="grow">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167754"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+          <Treatment order="3" identifier="T:Separation Technique:MEXP:167754">
+            <Action_assn>
+              <OntologyEntry category="Action" value="purify">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167754"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Type_assn>
+          <OntologyEntry category="BioSampleType" value="not_extract">
+          </OntologyEntry>
+        </Type_assn>
+      </BioSample>
+      <BioSource identifier="S:BioSource:MEXP:167754" name="Homo sapiens">
+        <Characteristics_assnlist>
+          <OntologyEntry category="Organism" value="Homo sapiens">
+          </OntologyEntry>
+          <OntologyEntry category="CellLine" value="Human Hepatocytes">
+          </OntologyEntry>
+          <OntologyEntry category="DevelopmentalStage" value="adult">
+          </OntologyEntry>
+          <OntologyEntry category="OrganismPart" value="Liver hepatocytes">
+          </OntologyEntry>
+          <OntologyEntry category="DiseaseState" value="Healthy donor tissue">
+          </OntologyEntry>
+          <OntologyEntry category="TargetedCellType" value="hepatocytes">
+          </OntologyEntry>
+        </Characteristics_assnlist>
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="organism_part">
+          </OntologyEntry>
+        </MaterialType_assn>
+      </BioSource>
+      <LabeledExtract identifier="S:Label:MEXP:3435" name="LABEL2634Cy5">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Labeling:MEXP:3435">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-19 14:44:33">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Cy5">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:LABEL_USED:7839"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_LABEL:7840"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2512"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="labeling">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Extraction:MEXP:2260"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Labels_assnreflist>
+          <Compound_ref identifier="COMP:Cy5"/>
+        </Labels_assnreflist>
+      </LabeledExtract>
+      <LabeledExtract identifier="S:Label:MEXP:3368" name="LABEL2635Cy3">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Labeling:MEXP:3368">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-19 14:45:06">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Cy3">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:LABEL_USED:7843"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_LABEL:7844"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2513"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="labeling">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Extraction:MEXP:2261"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Labels_assnreflist>
+          <Compound_ref identifier="COMP:Cy3"/>
+        </Labels_assnreflist>
+      </LabeledExtract>
+      <BioSample identifier="S:Extraction:MEXP:2261" name="EXTRACT2635">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Extraction:MEXP:2261">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 20:55:19">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="genomic DNA">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:EXTRACTED_PRODUCT:7699"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_EXTRACT:7700"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2377"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="nucleic_acid_extraction">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Sample:MEXP:167755"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Type_assn>
+          <OntologyEntry category="BioSampleType" value="extract">
+          </OntologyEntry>
+        </Type_assn>
+      </BioSample>
+      <BioSample identifier="S:Sample:MEXP:167755" name="2635_hnf4a_hepcyts">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="whole_organism">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment order="1" identifier="T:Sample:MEXP:167755">
+            <Action_assn>
+              <OntologyEntry category="Action" value="specified_biomaterial_action">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167755"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+          <Treatment order="4" identifier="T:Growth:MEXP:167755">
+            <Action_assn>
+              <OntologyEntry category="Action" value="grow">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167755"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+          <Treatment order="3" identifier="T:Separation Technique:MEXP:167755">
+            <Action_assn>
+              <OntologyEntry category="Action" value="purify">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167755"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Type_assn>
+          <OntologyEntry category="BioSampleType" value="not_extract">
+          </OntologyEntry>
+        </Type_assn>
+      </BioSample>
+      <BioSource identifier="S:BioSource:MEXP:167755" name="Homo sapiens">
+        <Characteristics_assnlist>
+          <OntologyEntry category="Organism" value="Homo sapiens">
+          </OntologyEntry>
+          <OntologyEntry category="CellLine" value="Human Hepatocytes">
+          </OntologyEntry>
+          <OntologyEntry category="DevelopmentalStage" value="adult">
+          </OntologyEntry>
+          <OntologyEntry category="OrganismPart" value="Liver hepatocytes">
+          </OntologyEntry>
+          <OntologyEntry category="DiseaseState" value="Healthy donor tissue">
+          </OntologyEntry>
+          <OntologyEntry category="TargetedCellType" value="hepatocytes">
+          </OntologyEntry>
+        </Characteristics_assnlist>
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="organism_part">
+          </OntologyEntry>
+        </MaterialType_assn>
+      </BioSource>
+      <LabeledExtract identifier="S:Label:MEXP:3374" name="LABEL2635Cy5">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Labeling:MEXP:3374">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-19 14:44:33">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Cy5">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:LABEL_USED:7839"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_LABEL:7840"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2512"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="labeling">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Extraction:MEXP:2261"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Labels_assnreflist>
+          <Compound_ref identifier="COMP:Cy5"/>
+        </Labels_assnreflist>
+      </LabeledExtract>
+      <LabeledExtract identifier="S:Label:MEXP:3382" name="LABEL2712Cy5">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Labeling:MEXP:3382">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-19 14:44:33">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Cy5">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:LABEL_USED:7839"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_LABEL:7840"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2512"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="labeling">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Extraction:MEXP:2268"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Labels_assnreflist>
+          <Compound_ref identifier="COMP:Cy5"/>
+        </Labels_assnreflist>
+      </LabeledExtract>
+      <BioSample identifier="S:Extraction:MEXP:2268" name="EXTRACT2712">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Extraction:MEXP:2268">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 20:55:19">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="genomic DNA">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:EXTRACTED_PRODUCT:7699"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_EXTRACT:7700"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2377"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="nucleic_acid_extraction">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Sample:MEXP:167762"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Type_assn>
+          <OntologyEntry category="BioSampleType" value="extract">
+          </OntologyEntry>
+        </Type_assn>
+      </BioSample>
+      <BioSample identifier="S:Sample:MEXP:167762" name="2712_hnf1a_islet">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="whole_organism">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment order="1" identifier="T:Sample:MEXP:167762">
+            <Action_assn>
+              <OntologyEntry category="Action" value="specified_biomaterial_action">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167762"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+          <Treatment order="4" identifier="T:Growth:MEXP:167762">
+            <Action_assn>
+              <OntologyEntry category="Action" value="grow">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167762"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+          <Treatment order="3" identifier="T:Separation Technique:MEXP:167762">
+            <Action_assn>
+              <OntologyEntry category="Action" value="purify">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167762"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Type_assn>
+          <OntologyEntry category="BioSampleType" value="not_extract">
+          </OntologyEntry>
+        </Type_assn>
+      </BioSample>
+      <BioSource identifier="S:BioSource:MEXP:167762" name="Homo sapiens">
+        <Characteristics_assnlist>
+          <OntologyEntry category="Organism" value="Homo sapiens">
+          </OntologyEntry>
+          <OntologyEntry category="CellType" value="Human Pancreatic Islets">
+          </OntologyEntry>
+          <OntologyEntry category="DevelopmentalStage" value="adult">
+          </OntologyEntry>
+          <OntologyEntry category="OrganismPart" value="Pancreatic Islets">
+          </OntologyEntry>
+          <OntologyEntry category="DiseaseState" value="Healthy donor tissue">
+          </OntologyEntry>
+          <OntologyEntry category="TargetedCellType" value="Pancreatic Islets">
+          </OntologyEntry>
+        </Characteristics_assnlist>
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="organism_part">
+          </OntologyEntry>
+        </MaterialType_assn>
+      </BioSource>
+      <LabeledExtract identifier="S:Label:MEXP:3361" name="LABEL2712Cy3">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Labeling:MEXP:3361">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-19 14:45:06">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Cy3">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:LABEL_USED:7843"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_LABEL:7844"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2513"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="labeling">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Extraction:MEXP:2268"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Labels_assnreflist>
+          <Compound_ref identifier="COMP:Cy3"/>
+        </Labels_assnreflist>
+      </LabeledExtract>
+      <LabeledExtract identifier="S:Label:MEXP:3383" name="LABEL2718Cy5">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Labeling:MEXP:3383">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-19 14:44:33">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Cy5">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:LABEL_USED:7839"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_LABEL:7840"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2512"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="labeling">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Extraction:MEXP:2269"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Labels_assnreflist>
+          <Compound_ref identifier="COMP:Cy5"/>
+        </Labels_assnreflist>
+      </LabeledExtract>
+      <BioSample identifier="S:Extraction:MEXP:2269" name="EXTRACT2718">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Extraction:MEXP:2269">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 20:55:19">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="genomic DNA">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:EXTRACTED_PRODUCT:7699"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_EXTRACT:7700"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2377"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="nucleic_acid_extraction">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Sample:MEXP:167763"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Type_assn>
+          <OntologyEntry category="BioSampleType" value="extract">
+          </OntologyEntry>
+        </Type_assn>
+      </BioSample>
+      <BioSample identifier="S:Sample:MEXP:167763" name="2718_pol2_islet">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="whole_organism">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment order="1" identifier="T:Sample:MEXP:167763">
+            <Action_assn>
+              <OntologyEntry category="Action" value="specified_biomaterial_action">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167763"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+          <Treatment order="4" identifier="T:Growth:MEXP:167763">
+            <Action_assn>
+              <OntologyEntry category="Action" value="grow">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167763"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+          <Treatment order="3" identifier="T:Separation Technique:MEXP:167763">
+            <Action_assn>
+              <OntologyEntry category="Action" value="purify">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167763"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Type_assn>
+          <OntologyEntry category="BioSampleType" value="not_extract">
+          </OntologyEntry>
+        </Type_assn>
+      </BioSample>
+      <BioSource identifier="S:BioSource:MEXP:167763" name="Homo sapiens">
+        <Characteristics_assnlist>
+          <OntologyEntry category="Organism" value="Homo sapiens">
+          </OntologyEntry>
+          <OntologyEntry category="CellType" value="Human Pancreatic Islets">
+          </OntologyEntry>
+          <OntologyEntry category="DevelopmentalStage" value="adult">
+          </OntologyEntry>
+          <OntologyEntry category="OrganismPart" value="Pancreatic Islets">
+          </OntologyEntry>
+          <OntologyEntry category="DiseaseState" value="Healthy donor tissue">
+          </OntologyEntry>
+          <OntologyEntry category="TargetedCellType" value="Pancreatic Islets">
+          </OntologyEntry>
+        </Characteristics_assnlist>
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="organism_part">
+          </OntologyEntry>
+        </MaterialType_assn>
+      </BioSource>
+      <LabeledExtract identifier="S:Label:MEXP:3360" name="LABEL2718Cy3">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Labeling:MEXP:3360">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-19 14:45:06">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Cy3">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:LABEL_USED:7843"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_LABEL:7844"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2513"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="labeling">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Extraction:MEXP:2269"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Labels_assnreflist>
+          <Compound_ref identifier="COMP:Cy3"/>
+        </Labels_assnreflist>
+      </LabeledExtract>
+      <LabeledExtract identifier="S:Label:MEXP:3367" name="LABEL2719Cy3">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Labeling:MEXP:3367">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-19 14:45:06">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Cy3">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:LABEL_USED:7843"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_LABEL:7844"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2513"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="labeling">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Extraction:MEXP:2262"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Labels_assnreflist>
+          <Compound_ref identifier="COMP:Cy3"/>
+        </Labels_assnreflist>
+      </LabeledExtract>
+      <BioSample identifier="S:Extraction:MEXP:2262" name="EXTRACT2719">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Extraction:MEXP:2262">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 20:55:19">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="genomic DNA">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:EXTRACTED_PRODUCT:7699"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_EXTRACT:7700"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2377"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="nucleic_acid_extraction">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Sample:MEXP:167756"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Type_assn>
+          <OntologyEntry category="BioSampleType" value="extract">
+          </OntologyEntry>
+        </Type_assn>
+      </BioSample>
+      <BioSample identifier="S:Sample:MEXP:167756" name="2719_pol2_hepcyt">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="whole_organism">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment order="1" identifier="T:Sample:MEXP:167756">
+            <Action_assn>
+              <OntologyEntry category="Action" value="specified_biomaterial_action">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167756"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+          <Treatment order="4" identifier="T:Growth:MEXP:167756">
+            <Action_assn>
+              <OntologyEntry category="Action" value="grow">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167756"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+          <Treatment order="3" identifier="T:Separation Technique:MEXP:167756">
+            <Action_assn>
+              <OntologyEntry category="Action" value="purify">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167756"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Type_assn>
+          <OntologyEntry category="BioSampleType" value="not_extract">
+          </OntologyEntry>
+        </Type_assn>
+      </BioSample>
+      <BioSource identifier="S:BioSource:MEXP:167756" name="Homo sapiens">
+        <Characteristics_assnlist>
+          <OntologyEntry category="Organism" value="Homo sapiens">
+          </OntologyEntry>
+          <OntologyEntry category="CellLine" value="Human Hepatocytes">
+          </OntologyEntry>
+          <OntologyEntry category="DevelopmentalStage" value="adult">
+          </OntologyEntry>
+          <OntologyEntry category="OrganismPart" value="Liver hepatocytes">
+          </OntologyEntry>
+          <OntologyEntry category="DiseaseState" value="Healthy donor tissue">
+          </OntologyEntry>
+          <OntologyEntry category="TargetedCellType" value="hepatocytes">
+          </OntologyEntry>
+        </Characteristics_assnlist>
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="organism_part">
+          </OntologyEntry>
+        </MaterialType_assn>
+      </BioSource>
+      <LabeledExtract identifier="S:Label:MEXP:3375" name="LABEL2719Cy5">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Labeling:MEXP:3375">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-19 14:44:33">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Cy5">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:LABEL_USED:7839"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_LABEL:7840"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2512"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="labeling">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Extraction:MEXP:2262"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Labels_assnreflist>
+          <Compound_ref identifier="COMP:Cy5"/>
+        </Labels_assnreflist>
+      </LabeledExtract>
+      <LabeledExtract identifier="S:Label:MEXP:3366" name="LABEL2720Cy3">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Labeling:MEXP:3366">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-19 14:45:06">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Cy3">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:LABEL_USED:7843"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_LABEL:7844"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2513"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="labeling">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Extraction:MEXP:2263"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Labels_assnreflist>
+          <Compound_ref identifier="COMP:Cy3"/>
+        </Labels_assnreflist>
+      </LabeledExtract>
+      <BioSample identifier="S:Extraction:MEXP:2263" name="EXTRACT2720">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Extraction:MEXP:2263">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 20:55:19">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="genomic DNA">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:EXTRACTED_PRODUCT:7699"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_EXTRACT:7700"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2377"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="nucleic_acid_extraction">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Sample:MEXP:167757"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Type_assn>
+          <OntologyEntry category="BioSampleType" value="extract">
+          </OntologyEntry>
+        </Type_assn>
+      </BioSample>
+      <BioSample identifier="S:Sample:MEXP:167757" name="2720_pol2_hepcyt">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="whole_organism">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment order="1" identifier="T:Sample:MEXP:167757">
+            <Action_assn>
+              <OntologyEntry category="Action" value="specified_biomaterial_action">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167757"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+          <Treatment order="4" identifier="T:Growth:MEXP:167757">
+            <Action_assn>
+              <OntologyEntry category="Action" value="grow">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167757"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+          <Treatment order="3" identifier="T:Separation Technique:MEXP:167757">
+            <Action_assn>
+              <OntologyEntry category="Action" value="purify">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167757"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Type_assn>
+          <OntologyEntry category="BioSampleType" value="not_extract">
+          </OntologyEntry>
+        </Type_assn>
+      </BioSample>
+      <BioSource identifier="S:BioSource:MEXP:167757" name="Homo sapiens">
+        <Characteristics_assnlist>
+          <OntologyEntry category="Organism" value="Homo sapiens">
+          </OntologyEntry>
+          <OntologyEntry category="CellLine" value="Human Hepatocytes">
+          </OntologyEntry>
+          <OntologyEntry category="DevelopmentalStage" value="adult">
+          </OntologyEntry>
+          <OntologyEntry category="OrganismPart" value="Liver hepatocytes">
+          </OntologyEntry>
+          <OntologyEntry category="DiseaseState" value="Healthy donor tissue">
+          </OntologyEntry>
+          <OntologyEntry category="TargetedCellType" value="hepatocytes">
+          </OntologyEntry>
+        </Characteristics_assnlist>
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="organism_part">
+          </OntologyEntry>
+        </MaterialType_assn>
+      </BioSource>
+      <LabeledExtract identifier="S:Label:MEXP:3377" name="LABEL2720Cy5">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Labeling:MEXP:3377">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-19 14:44:33">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Cy5">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:LABEL_USED:7839"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_LABEL:7840"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2512"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="labeling">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Extraction:MEXP:2263"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Labels_assnreflist>
+          <Compound_ref identifier="COMP:Cy5"/>
+        </Labels_assnreflist>
+      </LabeledExtract>
+      <LabeledExtract identifier="S:Label:MEXP:3359" name="LABEL2724Cy3">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Labeling:MEXP:3359">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-19 14:45:06">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Cy3">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:LABEL_USED:7843"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_LABEL:7844"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2513"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="labeling">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Extraction:MEXP:2270"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Labels_assnreflist>
+          <Compound_ref identifier="COMP:Cy3"/>
+        </Labels_assnreflist>
+      </LabeledExtract>
+      <BioSample identifier="S:Extraction:MEXP:2270" name="EXTRACT2724">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Extraction:MEXP:2270">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 20:55:19">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="genomic DNA">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:EXTRACTED_PRODUCT:7699"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_EXTRACT:7700"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2377"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="nucleic_acid_extraction">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Sample:MEXP:167764"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Type_assn>
+          <OntologyEntry category="BioSampleType" value="extract">
+          </OntologyEntry>
+        </Type_assn>
+      </BioSample>
+      <BioSample identifier="S:Sample:MEXP:167764" name="2724_hnf1a_islet">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="whole_organism">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment order="1" identifier="T:Sample:MEXP:167764">
+            <Action_assn>
+              <OntologyEntry category="Action" value="specified_biomaterial_action">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167764"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+          <Treatment order="4" identifier="T:Growth:MEXP:167764">
+            <Action_assn>
+              <OntologyEntry category="Action" value="grow">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167764"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+          <Treatment order="3" identifier="T:Separation Technique:MEXP:167764">
+            <Action_assn>
+              <OntologyEntry category="Action" value="purify">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167764"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Type_assn>
+          <OntologyEntry category="BioSampleType" value="not_extract">
+          </OntologyEntry>
+        </Type_assn>
+      </BioSample>
+      <BioSource identifier="S:BioSource:MEXP:167764" name="Homo sapiens">
+        <Characteristics_assnlist>
+          <OntologyEntry category="Organism" value="Homo sapiens">
+          </OntologyEntry>
+          <OntologyEntry category="CellType" value="Human Pancreatic Islets">
+          </OntologyEntry>
+          <OntologyEntry category="DevelopmentalStage" value="adult">
+          </OntologyEntry>
+          <OntologyEntry category="OrganismPart" value="Pancreatic Islets">
+          </OntologyEntry>
+          <OntologyEntry category="DiseaseState" value="Healthy donor tissue">
+          </OntologyEntry>
+          <OntologyEntry category="TargetedCellType" value="Pancreatic Islets">
+          </OntologyEntry>
+        </Characteristics_assnlist>
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="organism_part">
+          </OntologyEntry>
+        </MaterialType_assn>
+      </BioSource>
+      <LabeledExtract identifier="S:Label:MEXP:3384" name="LABEL2724Cy5">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Labeling:MEXP:3384">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-19 14:44:33">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Cy5">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:LABEL_USED:7839"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_LABEL:7840"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2512"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="labeling">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Extraction:MEXP:2270"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Labels_assnreflist>
+          <Compound_ref identifier="COMP:Cy5"/>
+        </Labels_assnreflist>
+      </LabeledExtract>
+      <LabeledExtract identifier="S:Label:MEXP:3358" name="LABEL2735Cy3">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Labeling:MEXP:3358">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-19 14:45:06">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Cy3">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:LABEL_USED:7843"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_LABEL:7844"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2513"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="labeling">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Extraction:MEXP:2271"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Labels_assnreflist>
+          <Compound_ref identifier="COMP:Cy3"/>
+        </Labels_assnreflist>
+      </LabeledExtract>
+      <BioSample identifier="S:Extraction:MEXP:2271" name="EXTRACT2735">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Extraction:MEXP:2271">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 20:55:19">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="genomic DNA">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:EXTRACTED_PRODUCT:7699"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_EXTRACT:7700"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2377"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="nucleic_acid_extraction">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Sample:MEXP:167765"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Type_assn>
+          <OntologyEntry category="BioSampleType" value="extract">
+          </OntologyEntry>
+        </Type_assn>
+      </BioSample>
+      <BioSample identifier="S:Sample:MEXP:167765" name="2735_hnf1a_islet">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="whole_organism">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment order="1" identifier="T:Sample:MEXP:167765">
+            <Action_assn>
+              <OntologyEntry category="Action" value="specified_biomaterial_action">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167765"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+          <Treatment order="4" identifier="T:Growth:MEXP:167765">
+            <Action_assn>
+              <OntologyEntry category="Action" value="grow">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167765"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+          <Treatment order="3" identifier="T:Separation Technique:MEXP:167765">
+            <Action_assn>
+              <OntologyEntry category="Action" value="purify">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167765"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Type_assn>
+          <OntologyEntry category="BioSampleType" value="not_extract">
+          </OntologyEntry>
+        </Type_assn>
+      </BioSample>
+      <BioSource identifier="S:BioSource:MEXP:167765" name="Homo sapiens">
+        <Characteristics_assnlist>
+          <OntologyEntry category="Organism" value="Homo sapiens">
+          </OntologyEntry>
+          <OntologyEntry category="CellType" value="Human Pancreatic Islets">
+          </OntologyEntry>
+          <OntologyEntry category="DevelopmentalStage" value="adult">
+          </OntologyEntry>
+          <OntologyEntry category="OrganismPart" value="Pancreatic Islets">
+          </OntologyEntry>
+          <OntologyEntry category="DiseaseState" value="Healthy donor tissue">
+          </OntologyEntry>
+          <OntologyEntry category="TargetedCellType" value="Pancreatic Islets">
+          </OntologyEntry>
+        </Characteristics_assnlist>
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="organism_part">
+          </OntologyEntry>
+        </MaterialType_assn>
+      </BioSource>
+      <LabeledExtract identifier="S:Label:MEXP:3385" name="LABEL2735Cy5">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Labeling:MEXP:3385">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-19 14:44:33">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Cy5">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:LABEL_USED:7839"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_LABEL:7840"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2512"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="labeling">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Extraction:MEXP:2271"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Labels_assnreflist>
+          <Compound_ref identifier="COMP:Cy5"/>
+        </Labels_assnreflist>
+      </LabeledExtract>
+      <LabeledExtract identifier="S:Label:MEXP:3357" name="LABEL2736Cy3">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Labeling:MEXP:3357">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-19 14:45:06">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Cy3">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:LABEL_USED:7843"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_LABEL:7844"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2513"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="labeling">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Extraction:MEXP:2272"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Labels_assnreflist>
+          <Compound_ref identifier="COMP:Cy3"/>
+        </Labels_assnreflist>
+      </LabeledExtract>
+      <BioSample identifier="S:Extraction:MEXP:2272" name="EXTRACT2736">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Extraction:MEXP:2272">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 20:55:19">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="genomic DNA">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:EXTRACTED_PRODUCT:7699"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_EXTRACT:7700"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2377"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="nucleic_acid_extraction">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Sample:MEXP:167766"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Type_assn>
+          <OntologyEntry category="BioSampleType" value="extract">
+          </OntologyEntry>
+        </Type_assn>
+      </BioSample>
+      <BioSample identifier="S:Sample:MEXP:167766" name="2736_pol2_islet">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="whole_organism">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment order="1" identifier="T:Sample:MEXP:167766">
+            <Action_assn>
+              <OntologyEntry category="Action" value="specified_biomaterial_action">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167766"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+          <Treatment order="4" identifier="T:Growth:MEXP:167766">
+            <Action_assn>
+              <OntologyEntry category="Action" value="grow">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167766"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+          <Treatment order="3" identifier="T:Separation Technique:MEXP:167766">
+            <Action_assn>
+              <OntologyEntry category="Action" value="purify">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167766"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Type_assn>
+          <OntologyEntry category="BioSampleType" value="not_extract">
+          </OntologyEntry>
+        </Type_assn>
+      </BioSample>
+      <BioSource identifier="S:BioSource:MEXP:167766" name="Homo sapiens">
+        <Characteristics_assnlist>
+          <OntologyEntry category="Organism" value="Homo sapiens">
+          </OntologyEntry>
+          <OntologyEntry category="CellType" value="Human Pancreatic Islets">
+          </OntologyEntry>
+          <OntologyEntry category="DevelopmentalStage" value="adult">
+          </OntologyEntry>
+          <OntologyEntry category="OrganismPart" value="Pancreatic Islets">
+          </OntologyEntry>
+          <OntologyEntry category="DiseaseState" value="Healthy donor tissue">
+          </OntologyEntry>
+          <OntologyEntry category="TargetedCellType" value="Pancreatic Islets">
+          </OntologyEntry>
+        </Characteristics_assnlist>
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="organism_part">
+          </OntologyEntry>
+        </MaterialType_assn>
+      </BioSource>
+      <LabeledExtract identifier="S:Label:MEXP:3386" name="LABEL2736Cy5">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Labeling:MEXP:3386">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-19 14:44:33">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Cy5">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:LABEL_USED:7839"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_LABEL:7840"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2512"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="labeling">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Extraction:MEXP:2272"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Labels_assnreflist>
+          <Compound_ref identifier="COMP:Cy5"/>
+        </Labels_assnreflist>
+      </LabeledExtract>
+      <LabeledExtract identifier="S:Label:MEXP:3356" name="LABEL2737Cy3">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Labeling:MEXP:3356">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-19 14:45:06">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Cy3">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:LABEL_USED:7843"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_LABEL:7844"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2513"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="labeling">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Extraction:MEXP:2273"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Labels_assnreflist>
+          <Compound_ref identifier="COMP:Cy3"/>
+        </Labels_assnreflist>
+      </LabeledExtract>
+      <BioSample identifier="S:Extraction:MEXP:2273" name="EXTRACT2737">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Extraction:MEXP:2273">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 20:55:19">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="genomic DNA">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:EXTRACTED_PRODUCT:7699"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_EXTRACT:7700"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2377"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="nucleic_acid_extraction">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Sample:MEXP:167767"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Type_assn>
+          <OntologyEntry category="BioSampleType" value="extract">
+          </OntologyEntry>
+        </Type_assn>
+      </BioSample>
+      <BioSample identifier="S:Sample:MEXP:167767" name="2737_pol2_islet">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="whole_organism">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment order="1" identifier="T:Sample:MEXP:167767">
+            <Action_assn>
+              <OntologyEntry category="Action" value="specified_biomaterial_action">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167767"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+          <Treatment order="4" identifier="T:Growth:MEXP:167767">
+            <Action_assn>
+              <OntologyEntry category="Action" value="grow">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167767"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+          <Treatment order="3" identifier="T:Separation Technique:MEXP:167767">
+            <Action_assn>
+              <OntologyEntry category="Action" value="purify">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167767"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Type_assn>
+          <OntologyEntry category="BioSampleType" value="not_extract">
+          </OntologyEntry>
+        </Type_assn>
+      </BioSample>
+      <BioSource identifier="S:BioSource:MEXP:167767" name="Homo sapiens">
+        <Characteristics_assnlist>
+          <OntologyEntry category="Organism" value="Homo sapiens">
+          </OntologyEntry>
+          <OntologyEntry category="CellType" value="Human Pancreatic Islets">
+          </OntologyEntry>
+          <OntologyEntry category="DevelopmentalStage" value="adult">
+          </OntologyEntry>
+          <OntologyEntry category="OrganismPart" value="Pancreatic Islets">
+          </OntologyEntry>
+          <OntologyEntry category="DiseaseState" value="Healthy donor tissue">
+          </OntologyEntry>
+          <OntologyEntry category="TargetedCellType" value="Pancreatic Islets">
+          </OntologyEntry>
+        </Characteristics_assnlist>
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="organism_part">
+          </OntologyEntry>
+        </MaterialType_assn>
+      </BioSource>
+      <LabeledExtract identifier="S:Label:MEXP:3387" name="LABEL2737Cy5">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Labeling:MEXP:3387">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-19 14:44:33">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Cy5">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:LABEL_USED:7839"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_LABEL:7840"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2512"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="labeling">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Extraction:MEXP:2273"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Labels_assnreflist>
+          <Compound_ref identifier="COMP:Cy5"/>
+        </Labels_assnreflist>
+      </LabeledExtract>
+      <LabeledExtract identifier="S:Label:MEXP:3355" name="LABEL9001Cy3">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Labeling:MEXP:3355">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-19 14:45:06">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Cy3">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:LABEL_USED:7843"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_LABEL:7844"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2513"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="labeling">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Extraction:MEXP:2274"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Labels_assnreflist>
+          <Compound_ref identifier="COMP:Cy3"/>
+        </Labels_assnreflist>
+      </LabeledExtract>
+      <BioSample identifier="S:Extraction:MEXP:2274" name="EXTRACT9001">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Extraction:MEXP:2274">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 20:55:19">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="genomic DNA">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:EXTRACTED_PRODUCT:7699"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_EXTRACT:7700"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2377"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="nucleic_acid_extraction">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Sample:MEXP:167768"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Type_assn>
+          <OntologyEntry category="BioSampleType" value="extract">
+          </OntologyEntry>
+        </Type_assn>
+      </BioSample>
+      <BioSample identifier="S:Sample:MEXP:167768" name="9001_HNF6_islet">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="whole_organism">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment order="1" identifier="T:Sample:MEXP:167768">
+            <Action_assn>
+              <OntologyEntry category="Action" value="specified_biomaterial_action">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167768"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+          <Treatment order="4" identifier="T:Growth:MEXP:167768">
+            <Action_assn>
+              <OntologyEntry category="Action" value="grow">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167768"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+          <Treatment order="3" identifier="T:Separation Technique:MEXP:167768">
+            <Action_assn>
+              <OntologyEntry category="Action" value="purify">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167768"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Type_assn>
+          <OntologyEntry category="BioSampleType" value="not_extract">
+          </OntologyEntry>
+        </Type_assn>
+      </BioSample>
+      <BioSource identifier="S:BioSource:MEXP:167768" name="Homo sapiens">
+        <Characteristics_assnlist>
+          <OntologyEntry category="Organism" value="Homo sapiens">
+          </OntologyEntry>
+          <OntologyEntry category="CellType" value="Human Pancreatic Islets">
+          </OntologyEntry>
+          <OntologyEntry category="DevelopmentalStage" value="adult">
+          </OntologyEntry>
+          <OntologyEntry category="OrganismPart" value="Pancreatic Islets">
+          </OntologyEntry>
+          <OntologyEntry category="DiseaseState" value="Healthy donor tissue">
+          </OntologyEntry>
+          <OntologyEntry category="TargetedCellType" value="Pancreatic Islets">
+          </OntologyEntry>
+        </Characteristics_assnlist>
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="organism_part">
+          </OntologyEntry>
+        </MaterialType_assn>
+      </BioSource>
+      <LabeledExtract identifier="S:Label:MEXP:3388" name="LABEL9001Cy5">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Labeling:MEXP:3388">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-19 14:44:33">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Cy5">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:LABEL_USED:7839"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_LABEL:7840"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2512"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="labeling">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Extraction:MEXP:2274"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Labels_assnreflist>
+          <Compound_ref identifier="COMP:Cy5"/>
+        </Labels_assnreflist>
+      </LabeledExtract>
+      <LabeledExtract identifier="S:Label:MEXP:3354" name="LABEL9002Cy3">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Labeling:MEXP:3354">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-19 14:45:06">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Cy3">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:LABEL_USED:7843"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_LABEL:7844"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2513"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="labeling">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Extraction:MEXP:2275"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Labels_assnreflist>
+          <Compound_ref identifier="COMP:Cy3"/>
+        </Labels_assnreflist>
+      </LabeledExtract>
+      <BioSample identifier="S:Extraction:MEXP:2275" name="EXTRACT9002">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Extraction:MEXP:2275">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 20:55:19">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="genomic DNA">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:EXTRACTED_PRODUCT:7699"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_EXTRACT:7700"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2377"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="nucleic_acid_extraction">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Sample:MEXP:167769"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Type_assn>
+          <OntologyEntry category="BioSampleType" value="extract">
+          </OntologyEntry>
+        </Type_assn>
+      </BioSample>
+      <BioSample identifier="S:Sample:MEXP:167769" name="9002_HNF6_islet">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="whole_organism">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment order="1" identifier="T:Sample:MEXP:167769">
+            <Action_assn>
+              <OntologyEntry category="Action" value="specified_biomaterial_action">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167769"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+          <Treatment order="4" identifier="T:Growth:MEXP:167769">
+            <Action_assn>
+              <OntologyEntry category="Action" value="grow">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167769"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+          <Treatment order="3" identifier="T:Separation Technique:MEXP:167769">
+            <Action_assn>
+              <OntologyEntry category="Action" value="purify">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167769"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Type_assn>
+          <OntologyEntry category="BioSampleType" value="not_extract">
+          </OntologyEntry>
+        </Type_assn>
+      </BioSample>
+      <BioSource identifier="S:BioSource:MEXP:167769" name="Homo sapiens">
+        <Characteristics_assnlist>
+          <OntologyEntry category="Organism" value="Homo sapiens">
+          </OntologyEntry>
+          <OntologyEntry category="CellType" value="Human Pancreatic Islets">
+          </OntologyEntry>
+          <OntologyEntry category="DevelopmentalStage" value="adult">
+          </OntologyEntry>
+          <OntologyEntry category="OrganismPart" value="Pancreatic Islets">
+          </OntologyEntry>
+          <OntologyEntry category="DiseaseState" value="Healthy donor tissue">
+          </OntologyEntry>
+          <OntologyEntry category="TargetedCellType" value="Pancreatic Islets">
+          </OntologyEntry>
+        </Characteristics_assnlist>
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="organism_part">
+          </OntologyEntry>
+        </MaterialType_assn>
+      </BioSource>
+      <LabeledExtract identifier="S:Label:MEXP:3389" name="LABEL9002Cy5">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Labeling:MEXP:3389">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-19 14:44:33">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Cy5">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:LABEL_USED:7839"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_LABEL:7840"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2512"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="labeling">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Extraction:MEXP:2275"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Labels_assnreflist>
+          <Compound_ref identifier="COMP:Cy5"/>
+        </Labels_assnreflist>
+      </LabeledExtract>
+      <LabeledExtract identifier="S:Label:MEXP:3353" name="LABEL9003Cy3">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Labeling:MEXP:3353">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-19 14:45:06">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Cy3">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:LABEL_USED:7843"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_LABEL:7844"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2513"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="labeling">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Extraction:MEXP:2276"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Labels_assnreflist>
+          <Compound_ref identifier="COMP:Cy3"/>
+        </Labels_assnreflist>
+      </LabeledExtract>
+      <BioSample identifier="S:Extraction:MEXP:2276" name="EXTRACT9003">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Extraction:MEXP:2276">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 20:55:19">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="genomic DNA">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:EXTRACTED_PRODUCT:7699"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_EXTRACT:7700"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2377"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="nucleic_acid_extraction">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Sample:MEXP:167770"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Type_assn>
+          <OntologyEntry category="BioSampleType" value="extract">
+          </OntologyEntry>
+        </Type_assn>
+      </BioSample>
+      <BioSample identifier="S:Sample:MEXP:167770" name="9003_HNF6_islet">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="whole_organism">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment order="1" identifier="T:Sample:MEXP:167770">
+            <Action_assn>
+              <OntologyEntry category="Action" value="specified_biomaterial_action">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167770"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+          <Treatment order="4" identifier="T:Growth:MEXP:167770">
+            <Action_assn>
+              <OntologyEntry category="Action" value="grow">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167770"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+          <Treatment order="3" identifier="T:Separation Technique:MEXP:167770">
+            <Action_assn>
+              <OntologyEntry category="Action" value="purify">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167770"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Type_assn>
+          <OntologyEntry category="BioSampleType" value="not_extract">
+          </OntologyEntry>
+        </Type_assn>
+      </BioSample>
+      <BioSource identifier="S:BioSource:MEXP:167770" name="Homo sapiens">
+        <Characteristics_assnlist>
+          <OntologyEntry category="Organism" value="Homo sapiens">
+          </OntologyEntry>
+          <OntologyEntry category="CellType" value="Human Pancreatic Islets">
+          </OntologyEntry>
+          <OntologyEntry category="DevelopmentalStage" value="adult">
+          </OntologyEntry>
+          <OntologyEntry category="OrganismPart" value="Pancreatic Islets">
+          </OntologyEntry>
+          <OntologyEntry category="DiseaseState" value="Healthy donor tissue">
+          </OntologyEntry>
+          <OntologyEntry category="TargetedCellType" value="Pancreatic Islets">
+          </OntologyEntry>
+        </Characteristics_assnlist>
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="organism_part">
+          </OntologyEntry>
+        </MaterialType_assn>
+      </BioSource>
+      <LabeledExtract identifier="S:Label:MEXP:3390" name="LABEL9003Cy5">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Labeling:MEXP:3390">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-19 14:44:33">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Cy5">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:LABEL_USED:7839"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_LABEL:7840"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2512"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="labeling">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Extraction:MEXP:2276"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Labels_assnreflist>
+          <Compound_ref identifier="COMP:Cy5"/>
+        </Labels_assnreflist>
+      </LabeledExtract>
+      <LabeledExtract identifier="S:Label:MEXP:3352" name="LABEL2632Cy3">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Labeling:MEXP:3352">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-19 14:45:06">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Cy3">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:LABEL_USED:7843"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_LABEL:7844"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2513"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="labeling">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Extraction:MEXP:2277"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Labels_assnreflist>
+          <Compound_ref identifier="COMP:Cy3"/>
+        </Labels_assnreflist>
+      </LabeledExtract>
+      <BioSample identifier="S:Extraction:MEXP:2277" name="EXTRACT2632">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Extraction:MEXP:2277">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 20:55:19">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="genomic DNA">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:EXTRACTED_PRODUCT:7699"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_EXTRACT:7700"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2377"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="nucleic_acid_extraction">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Sample:MEXP:167771"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Type_assn>
+          <OntologyEntry category="BioSampleType" value="extract">
+          </OntologyEntry>
+        </Type_assn>
+      </BioSample>
+      <BioSample identifier="S:Sample:MEXP:167771" name="2632_hnf4a_islets">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="whole_organism">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment order="1" identifier="T:Sample:MEXP:167771">
+            <Action_assn>
+              <OntologyEntry category="Action" value="specified_biomaterial_action">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167771"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+          <Treatment order="4" identifier="T:Growth:MEXP:167771">
+            <Action_assn>
+              <OntologyEntry category="Action" value="grow">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167771"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+          <Treatment order="3" identifier="T:Separation Technique:MEXP:167771">
+            <Action_assn>
+              <OntologyEntry category="Action" value="purify">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167771"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Type_assn>
+          <OntologyEntry category="BioSampleType" value="not_extract">
+          </OntologyEntry>
+        </Type_assn>
+      </BioSample>
+      <BioSource identifier="S:BioSource:MEXP:167771" name="Homo sapiens">
+        <Characteristics_assnlist>
+          <OntologyEntry category="Organism" value="Homo sapiens">
+          </OntologyEntry>
+          <OntologyEntry category="CellType" value="Human Pancreatic Islets">
+          </OntologyEntry>
+          <OntologyEntry category="DevelopmentalStage" value="adult">
+          </OntologyEntry>
+          <OntologyEntry category="OrganismPart" value="Pancreatic Islets">
+          </OntologyEntry>
+          <OntologyEntry category="DiseaseState" value="Healthy donor tissue">
+          </OntologyEntry>
+          <OntologyEntry category="TargetedCellType" value="Pancreatic Islets">
+          </OntologyEntry>
+        </Characteristics_assnlist>
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="organism_part">
+          </OntologyEntry>
+        </MaterialType_assn>
+      </BioSource>
+      <LabeledExtract identifier="S:Label:MEXP:3391" name="LABEL2632Cy5">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Labeling:MEXP:3391">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-19 14:44:33">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Cy5">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:LABEL_USED:7839"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_LABEL:7840"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2512"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="labeling">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Extraction:MEXP:2277"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Labels_assnreflist>
+          <Compound_ref identifier="COMP:Cy5"/>
+        </Labels_assnreflist>
+      </LabeledExtract>
+      <LabeledExtract identifier="S:Label:MEXP:3351" name="LABEL2711Cy3">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Labeling:MEXP:3351">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-19 14:45:06">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Cy3">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:LABEL_USED:7843"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_LABEL:7844"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2513"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="labeling">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Extraction:MEXP:2278"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Labels_assnreflist>
+          <Compound_ref identifier="COMP:Cy3"/>
+        </Labels_assnreflist>
+      </LabeledExtract>
+      <BioSample identifier="S:Extraction:MEXP:2278" name="EXTRACT2711">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Extraction:MEXP:2278">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 20:55:19">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="genomic DNA">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:EXTRACTED_PRODUCT:7699"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_EXTRACT:7700"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2377"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="nucleic_acid_extraction">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Sample:MEXP:167772"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Type_assn>
+          <OntologyEntry category="BioSampleType" value="extract">
+          </OntologyEntry>
+        </Type_assn>
+      </BioSample>
+      <BioSample identifier="S:Sample:MEXP:167772" name="2711_hnf4a_islet">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="whole_organism">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment order="1" identifier="T:Sample:MEXP:167772">
+            <Action_assn>
+              <OntologyEntry category="Action" value="specified_biomaterial_action">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167772"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+          <Treatment order="4" identifier="T:Growth:MEXP:167772">
+            <Action_assn>
+              <OntologyEntry category="Action" value="grow">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167772"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+          <Treatment order="3" identifier="T:Separation Technique:MEXP:167772">
+            <Action_assn>
+              <OntologyEntry category="Action" value="purify">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167772"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Type_assn>
+          <OntologyEntry category="BioSampleType" value="not_extract">
+          </OntologyEntry>
+        </Type_assn>
+      </BioSample>
+      <BioSource identifier="S:BioSource:MEXP:167772" name="Homo sapiens">
+        <Characteristics_assnlist>
+          <OntologyEntry category="Organism" value="Homo sapiens">
+          </OntologyEntry>
+          <OntologyEntry category="CellType" value="Human Pancreatic Islets">
+          </OntologyEntry>
+          <OntologyEntry category="DevelopmentalStage" value="adult">
+          </OntologyEntry>
+          <OntologyEntry category="OrganismPart" value="Pancreatic Islets">
+          </OntologyEntry>
+          <OntologyEntry category="DiseaseState" value="Healthy donor tissue">
+          </OntologyEntry>
+          <OntologyEntry category="TargetedCellType" value="Pancreatic Islets">
+          </OntologyEntry>
+        </Characteristics_assnlist>
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="organism_part">
+          </OntologyEntry>
+        </MaterialType_assn>
+      </BioSource>
+      <LabeledExtract identifier="S:Label:MEXP:3392" name="LABEL2711Cy5">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Labeling:MEXP:3392">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-19 14:44:33">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Cy5">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:LABEL_USED:7839"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_LABEL:7840"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2512"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="labeling">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Extraction:MEXP:2278"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Labels_assnreflist>
+          <Compound_ref identifier="COMP:Cy5"/>
+        </Labels_assnreflist>
+      </LabeledExtract>
+      <LabeledExtract identifier="S:Label:MEXP:3393" name="LABEL2816Cy3">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Labeling:MEXP:3393">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-19 14:45:06">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Cy3">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:LABEL_USED:7843"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_LABEL:7844"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2513"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="labeling">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Extraction:MEXP:2279"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Labels_assnreflist>
+          <Compound_ref identifier="COMP:Cy3"/>
+        </Labels_assnreflist>
+      </LabeledExtract>
+      <BioSample identifier="S:Extraction:MEXP:2279" name="EXTRACT2816">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Extraction:MEXP:2279">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 20:55:19">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="genomic DNA">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:EXTRACTED_PRODUCT:7699"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_EXTRACT:7700"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2377"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="nucleic_acid_extraction">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Sample:MEXP:167773"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Type_assn>
+          <OntologyEntry category="BioSampleType" value="extract">
+          </OntologyEntry>
+        </Type_assn>
+      </BioSample>
+      <BioSample identifier="S:Sample:MEXP:167773" name="2816_hnf4a_islet">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="whole_organism">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment order="1" identifier="T:Sample:MEXP:167773">
+            <Action_assn>
+              <OntologyEntry category="Action" value="specified_biomaterial_action">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167773"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+          <Treatment order="4" identifier="T:Growth:MEXP:167773">
+            <Action_assn>
+              <OntologyEntry category="Action" value="grow">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167773"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+          <Treatment order="3" identifier="T:Separation Technique:MEXP:167773">
+            <Action_assn>
+              <OntologyEntry category="Action" value="purify">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167773"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Type_assn>
+          <OntologyEntry category="BioSampleType" value="not_extract">
+          </OntologyEntry>
+        </Type_assn>
+      </BioSample>
+      <BioSource identifier="S:BioSource:MEXP:167773" name="Homo sapiens">
+        <Characteristics_assnlist>
+          <OntologyEntry category="Organism" value="Homo sapiens">
+          </OntologyEntry>
+          <OntologyEntry category="CellType" value="Human Pancreatic Islets">
+          </OntologyEntry>
+          <OntologyEntry category="DevelopmentalStage" value="adult">
+          </OntologyEntry>
+          <OntologyEntry category="OrganismPart" value="Pancreatic Islets">
+          </OntologyEntry>
+          <OntologyEntry category="DiseaseState" value="Healthy donor tissue">
+          </OntologyEntry>
+          <OntologyEntry category="TargetedCellType" value="Pancreatic Islets">
+          </OntologyEntry>
+        </Characteristics_assnlist>
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="organism_part">
+          </OntologyEntry>
+        </MaterialType_assn>
+      </BioSource>
+      <LabeledExtract identifier="S:Label:MEXP:3436" name="LABEL2816Cy5">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Labeling:MEXP:3436">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-19 14:44:33">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Cy5">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:LABEL_USED:7839"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_LABEL:7840"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2512"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="labeling">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Extraction:MEXP:2279"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Labels_assnreflist>
+          <Compound_ref identifier="COMP:Cy5"/>
+        </Labels_assnreflist>
+      </LabeledExtract>
+      <LabeledExtract identifier="S:Label:MEXP:3365" name="LABEL2740Cy3">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Labeling:MEXP:3365">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-19 14:45:06">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Cy3">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:LABEL_USED:7843"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_LABEL:7844"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2513"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="labeling">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Extraction:MEXP:2264"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Labels_assnreflist>
+          <Compound_ref identifier="COMP:Cy3"/>
+        </Labels_assnreflist>
+      </LabeledExtract>
+      <BioSample identifier="S:Extraction:MEXP:2264" name="EXTRACT2740">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Extraction:MEXP:2264">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 20:55:19">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="genomic DNA">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:EXTRACTED_PRODUCT:7699"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_EXTRACT:7700"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2377"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="nucleic_acid_extraction">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Sample:MEXP:167758"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Type_assn>
+          <OntologyEntry category="BioSampleType" value="extract">
+          </OntologyEntry>
+        </Type_assn>
+      </BioSample>
+      <BioSample identifier="S:Sample:MEXP:167758" name="2740_Pol2_hepcyt">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="whole_organism">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment order="1" identifier="T:Sample:MEXP:167758">
+            <Action_assn>
+              <OntologyEntry category="Action" value="specified_biomaterial_action">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167758"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+          <Treatment order="4" identifier="T:Growth:MEXP:167758">
+            <Action_assn>
+              <OntologyEntry category="Action" value="grow">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167758"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+          <Treatment order="3" identifier="T:Separation Technique:MEXP:167758">
+            <Action_assn>
+              <OntologyEntry category="Action" value="purify">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167758"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Type_assn>
+          <OntologyEntry category="BioSampleType" value="not_extract">
+          </OntologyEntry>
+        </Type_assn>
+      </BioSample>
+      <BioSource identifier="S:BioSource:MEXP:167758" name="Homo sapiens">
+        <Characteristics_assnlist>
+          <OntologyEntry category="Organism" value="Homo sapiens">
+          </OntologyEntry>
+          <OntologyEntry category="CellLine" value="Human Hepatocytes">
+          </OntologyEntry>
+          <OntologyEntry category="DevelopmentalStage" value="adult">
+          </OntologyEntry>
+          <OntologyEntry category="OrganismPart" value="Liver hepatocytes">
+          </OntologyEntry>
+          <OntologyEntry category="DiseaseState" value="Healthy donor tissue">
+          </OntologyEntry>
+          <OntologyEntry category="TargetedCellType" value="hepatocytes">
+          </OntologyEntry>
+        </Characteristics_assnlist>
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="organism_part">
+          </OntologyEntry>
+        </MaterialType_assn>
+      </BioSource>
+      <LabeledExtract identifier="S:Label:MEXP:3378" name="LABEL2740Cy5">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Labeling:MEXP:3378">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-19 14:44:33">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Cy5">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:LABEL_USED:7839"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_LABEL:7840"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2512"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="labeling">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Extraction:MEXP:2264"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Labels_assnreflist>
+          <Compound_ref identifier="COMP:Cy5"/>
+        </Labels_assnreflist>
+      </LabeledExtract>
+      <LabeledExtract identifier="S:Label:MEXP:3364" name="LABEL2748Cy3">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Labeling:MEXP:3364">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-19 14:45:06">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Cy3">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:LABEL_USED:7843"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_LABEL:7844"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2513"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="labeling">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Extraction:MEXP:2265"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Labels_assnreflist>
+          <Compound_ref identifier="COMP:Cy3"/>
+        </Labels_assnreflist>
+      </LabeledExtract>
+      <BioSample identifier="S:Extraction:MEXP:2265" name="EXTRACT2748">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Extraction:MEXP:2265">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 20:55:19">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="genomic DNA">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:EXTRACTED_PRODUCT:7699"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_EXTRACT:7700"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2377"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="nucleic_acid_extraction">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Sample:MEXP:167759"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Type_assn>
+          <OntologyEntry category="BioSampleType" value="extract">
+          </OntologyEntry>
+        </Type_assn>
+      </BioSample>
+      <BioSample identifier="S:Sample:MEXP:167759" name="2748_hnf4a6556_hepcyt">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="whole_organism">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment order="1" identifier="T:Sample:MEXP:167759">
+            <Action_assn>
+              <OntologyEntry category="Action" value="specified_biomaterial_action">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167759"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+          <Treatment order="4" identifier="T:Growth:MEXP:167759">
+            <Action_assn>
+              <OntologyEntry category="Action" value="grow">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167759"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+          <Treatment order="3" identifier="T:Separation Technique:MEXP:167759">
+            <Action_assn>
+              <OntologyEntry category="Action" value="purify">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167759"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Type_assn>
+          <OntologyEntry category="BioSampleType" value="not_extract">
+          </OntologyEntry>
+        </Type_assn>
+      </BioSample>
+      <BioSource identifier="S:BioSource:MEXP:167759" name="Homo sapiens">
+        <Characteristics_assnlist>
+          <OntologyEntry category="Organism" value="Homo sapiens">
+          </OntologyEntry>
+          <OntologyEntry category="CellLine" value="Human Hepatocytes">
+          </OntologyEntry>
+          <OntologyEntry category="DevelopmentalStage" value="adult">
+          </OntologyEntry>
+          <OntologyEntry category="OrganismPart" value="Liver hepatocytes">
+          </OntologyEntry>
+          <OntologyEntry category="DiseaseState" value="Healthy donor tissue">
+          </OntologyEntry>
+          <OntologyEntry category="TargetedCellType" value="hepatocytes">
+          </OntologyEntry>
+        </Characteristics_assnlist>
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="organism_part">
+          </OntologyEntry>
+        </MaterialType_assn>
+      </BioSource>
+      <LabeledExtract identifier="S:Label:MEXP:3379" name="LABEL2748Cy5">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Labeling:MEXP:3379">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-19 14:44:33">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Cy5">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:LABEL_USED:7839"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_LABEL:7840"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2512"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="labeling">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Extraction:MEXP:2265"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Labels_assnreflist>
+          <Compound_ref identifier="COMP:Cy5"/>
+        </Labels_assnreflist>
+      </LabeledExtract>
+      <LabeledExtract identifier="S:Label:MEXP:3363" name="LABEL2752Cy3">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Labeling:MEXP:3363">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-19 14:45:06">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Cy3">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:LABEL_USED:7843"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_LABEL:7844"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2513"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="labeling">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Extraction:MEXP:2266"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Labels_assnreflist>
+          <Compound_ref identifier="COMP:Cy3"/>
+        </Labels_assnreflist>
+      </LabeledExtract>
+      <BioSample identifier="S:Extraction:MEXP:2266" name="EXTRACT2752">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Extraction:MEXP:2266">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 20:55:19">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="genomic DNA">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:EXTRACTED_PRODUCT:7699"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_EXTRACT:7700"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2377"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="nucleic_acid_extraction">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Sample:MEXP:167760"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Type_assn>
+          <OntologyEntry category="BioSampleType" value="extract">
+          </OntologyEntry>
+        </Type_assn>
+      </BioSample>
+      <BioSample identifier="S:Sample:MEXP:167760" name="2752_hnf6_hepcyt">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="whole_organism">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment order="1" identifier="T:Sample:MEXP:167760">
+            <Action_assn>
+              <OntologyEntry category="Action" value="specified_biomaterial_action">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167760"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+          <Treatment order="4" identifier="T:Growth:MEXP:167760">
+            <Action_assn>
+              <OntologyEntry category="Action" value="grow">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167760"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+          <Treatment order="3" identifier="T:Separation Technique:MEXP:167760">
+            <Action_assn>
+              <OntologyEntry category="Action" value="purify">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167760"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Type_assn>
+          <OntologyEntry category="BioSampleType" value="not_extract">
+          </OntologyEntry>
+        </Type_assn>
+      </BioSample>
+      <BioSource identifier="S:BioSource:MEXP:167760" name="Homo sapiens">
+        <Characteristics_assnlist>
+          <OntologyEntry category="Organism" value="Homo sapiens">
+          </OntologyEntry>
+          <OntologyEntry category="CellLine" value="Human Hepatocytes">
+          </OntologyEntry>
+          <OntologyEntry category="DevelopmentalStage" value="adult">
+          </OntologyEntry>
+          <OntologyEntry category="OrganismPart" value="Liver hepatocytes">
+          </OntologyEntry>
+          <OntologyEntry category="DiseaseState" value="Healthy donor tissue">
+          </OntologyEntry>
+          <OntologyEntry category="TargetedCellType" value="hepatocytes">
+          </OntologyEntry>
+        </Characteristics_assnlist>
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="organism_part">
+          </OntologyEntry>
+        </MaterialType_assn>
+      </BioSource>
+      <LabeledExtract identifier="S:Label:MEXP:3380" name="LABEL2752Cy5">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Labeling:MEXP:3380">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-19 14:44:33">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Cy5">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:LABEL_USED:7839"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_LABEL:7840"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2512"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="labeling">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Extraction:MEXP:2266"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Labels_assnreflist>
+          <Compound_ref identifier="COMP:Cy5"/>
+        </Labels_assnreflist>
+      </LabeledExtract>
+      <LabeledExtract identifier="S:Label:MEXP:3362" name="LABEL2767Cy3">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Labeling:MEXP:3362">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-19 14:45:06">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Cy3">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:LABEL_USED:7843"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_LABEL:7844"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2513"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="labeling">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Extraction:MEXP:2267"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Labels_assnreflist>
+          <Compound_ref identifier="COMP:Cy3"/>
+        </Labels_assnreflist>
+      </LabeledExtract>
+      <BioSample identifier="S:Extraction:MEXP:2267" name="EXTRACT2767">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Extraction:MEXP:2267">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 20:55:19">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="genomic DNA">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:EXTRACTED_PRODUCT:7699"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_EXTRACT:7700"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2377"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="nucleic_acid_extraction">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Sample:MEXP:167761"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Type_assn>
+          <OntologyEntry category="BioSampleType" value="extract">
+          </OntologyEntry>
+        </Type_assn>
+      </BioSample>
+      <BioSample identifier="S:Sample:MEXP:167761" name="2767_hnf6_hepcyt">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="whole_organism">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment order="1" identifier="T:Sample:MEXP:167761">
+            <Action_assn>
+              <OntologyEntry category="Action" value="specified_biomaterial_action">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167761"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+          <Treatment order="4" identifier="T:Growth:MEXP:167761">
+            <Action_assn>
+              <OntologyEntry category="Action" value="grow">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167761"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+          <Treatment order="3" identifier="T:Separation Technique:MEXP:167761">
+            <Action_assn>
+              <OntologyEntry category="Action" value="purify">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="S:BioSource:MEXP:167761"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Type_assn>
+          <OntologyEntry category="BioSampleType" value="not_extract">
+          </OntologyEntry>
+        </Type_assn>
+      </BioSample>
+      <BioSource identifier="S:BioSource:MEXP:167761" name="Homo sapiens">
+        <Characteristics_assnlist>
+          <OntologyEntry category="Organism" value="Homo sapiens">
+          </OntologyEntry>
+          <OntologyEntry category="CellLine" value="Human Hepatocytes">
+          </OntologyEntry>
+          <OntologyEntry category="DevelopmentalStage" value="adult">
+          </OntologyEntry>
+          <OntologyEntry category="OrganismPart" value="Liver hepatocytes">
+          </OntologyEntry>
+          <OntologyEntry category="DiseaseState" value="Healthy donor tissue">
+          </OntologyEntry>
+          <OntologyEntry category="TargetedCellType" value="hepatocytes">
+          </OntologyEntry>
+        </Characteristics_assnlist>
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="organism_part">
+          </OntologyEntry>
+        </MaterialType_assn>
+      </BioSource>
+      <LabeledExtract identifier="S:Label:MEXP:3381" name="LABEL2767Cy5">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="genomic_DNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="T:Labeling:MEXP:3381">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-19 14:44:33">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Cy5">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:LABEL_USED:7839"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="PCR">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:AMPLIFICATION_LABEL:7840"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2512"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="labeling">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="S:Extraction:MEXP:2267"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Labels_assnreflist>
+          <Compound_ref identifier="COMP:Cy5"/>
+        </Labels_assnreflist>
+      </LabeledExtract>
+    </BioMaterial_assnlist>
+  </BioMaterial_package>
+  <ArrayDesign_package>
+    <ArrayDesign_assnlist>
+      <PhysicalArrayDesign identifier="A-MEXP-48" name="A-MEXP-48">
+      </PhysicalArrayDesign>
+    </ArrayDesign_assnlist>
+  </ArrayDesign_package>
+  <Array_package>
+    <Array_assnlist>
+      <Array arrayIdentifier="1" identifier="AR:MEXP:447:2689" name="1 ">
+        <ArrayDesign_assnref>
+          <PhysicalArrayDesign_ref identifier="A-MEXP-48"/>
+        </ArrayDesign_assnref>
+        <Information_assnref>
+          <ArrayManufacture_ref identifier="ARMANUF:MEXP:A-MEXP-48::2711"/>
+        </Information_assnref>
+      </Array>
+      <Array arrayIdentifier="2" identifier="AR:MEXP:447:2690" name="2 ">
+        <ArrayDesign_assnref>
+          <PhysicalArrayDesign_ref identifier="A-MEXP-48"/>
+        </ArrayDesign_assnref>
+        <Information_assnref>
+          <ArrayManufacture_ref identifier="ARMANUF:MEXP:A-MEXP-48::2711"/>
+        </Information_assnref>
+      </Array>
+      <Array arrayIdentifier="3" identifier="AR:MEXP:447:2691" name="3 ">
+        <ArrayDesign_assnref>
+          <PhysicalArrayDesign_ref identifier="A-MEXP-48"/>
+        </ArrayDesign_assnref>
+        <Information_assnref>
+          <ArrayManufacture_ref identifier="ARMANUF:MEXP:A-MEXP-48::2711"/>
+        </Information_assnref>
+      </Array>
+      <Array arrayIdentifier="4" identifier="AR:MEXP:447:2692" name="4 ">
+        <ArrayDesign_assnref>
+          <PhysicalArrayDesign_ref identifier="A-MEXP-48"/>
+        </ArrayDesign_assnref>
+        <Information_assnref>
+          <ArrayManufacture_ref identifier="ARMANUF:MEXP:A-MEXP-48::2711"/>
+        </Information_assnref>
+      </Array>
+      <Array arrayIdentifier="5" identifier="AR:MEXP:447:2693" name="5 ">
+        <ArrayDesign_assnref>
+          <PhysicalArrayDesign_ref identifier="A-MEXP-48"/>
+        </ArrayDesign_assnref>
+        <Information_assnref>
+          <ArrayManufacture_ref identifier="ARMANUF:MEXP:A-MEXP-48::2711"/>
+        </Information_assnref>
+      </Array>
+      <Array arrayIdentifier="6" identifier="AR:MEXP:447:2694" name="6 ">
+        <ArrayDesign_assnref>
+          <PhysicalArrayDesign_ref identifier="A-MEXP-48"/>
+        </ArrayDesign_assnref>
+        <Information_assnref>
+          <ArrayManufacture_ref identifier="ARMANUF:MEXP:A-MEXP-48::2711"/>
+        </Information_assnref>
+      </Array>
+      <Array arrayIdentifier="7" identifier="AR:MEXP:447:2695" name="7 ">
+        <ArrayDesign_assnref>
+          <PhysicalArrayDesign_ref identifier="A-MEXP-48"/>
+        </ArrayDesign_assnref>
+        <Information_assnref>
+          <ArrayManufacture_ref identifier="ARMANUF:MEXP:A-MEXP-48::2711"/>
+        </Information_assnref>
+      </Array>
+      <Array arrayIdentifier="8" identifier="AR:MEXP:447:2696" name="8 ">
+        <ArrayDesign_assnref>
+          <PhysicalArrayDesign_ref identifier="A-MEXP-48"/>
+        </ArrayDesign_assnref>
+        <Information_assnref>
+          <ArrayManufacture_ref identifier="ARMANUF:MEXP:A-MEXP-48::2711"/>
+        </Information_assnref>
+      </Array>
+      <Array arrayIdentifier="9" identifier="AR:MEXP:447:2697" name="9 ">
+        <ArrayDesign_assnref>
+          <PhysicalArrayDesign_ref identifier="A-MEXP-48"/>
+        </ArrayDesign_assnref>
+        <Information_assnref>
+          <ArrayManufacture_ref identifier="ARMANUF:MEXP:A-MEXP-48::2711"/>
+        </Information_assnref>
+      </Array>
+      <Array arrayIdentifier="10" identifier="AR:MEXP:447:2698" name="10 ">
+        <ArrayDesign_assnref>
+          <PhysicalArrayDesign_ref identifier="A-MEXP-48"/>
+        </ArrayDesign_assnref>
+        <Information_assnref>
+          <ArrayManufacture_ref identifier="ARMANUF:MEXP:A-MEXP-48::2711"/>
+        </Information_assnref>
+      </Array>
+      <Array arrayIdentifier="11" identifier="AR:MEXP:447:2699" name="11 ">
+        <ArrayDesign_assnref>
+          <PhysicalArrayDesign_ref identifier="A-MEXP-48"/>
+        </ArrayDesign_assnref>
+        <Information_assnref>
+          <ArrayManufacture_ref identifier="ARMANUF:MEXP:A-MEXP-48::2711"/>
+        </Information_assnref>
+      </Array>
+      <Array arrayIdentifier="12" identifier="AR:MEXP:447:2700" name="12 ">
+        <ArrayDesign_assnref>
+          <PhysicalArrayDesign_ref identifier="A-MEXP-48"/>
+        </ArrayDesign_assnref>
+        <Information_assnref>
+          <ArrayManufacture_ref identifier="ARMANUF:MEXP:A-MEXP-48::2711"/>
+        </Information_assnref>
+      </Array>
+      <Array arrayIdentifier="13" identifier="AR:MEXP:447:2701" name="13 ">
+        <ArrayDesign_assnref>
+          <PhysicalArrayDesign_ref identifier="A-MEXP-48"/>
+        </ArrayDesign_assnref>
+        <Information_assnref>
+          <ArrayManufacture_ref identifier="ARMANUF:MEXP:A-MEXP-48::2711"/>
+        </Information_assnref>
+      </Array>
+      <Array arrayIdentifier="14" identifier="AR:MEXP:447:2702" name="14 ">
+        <ArrayDesign_assnref>
+          <PhysicalArrayDesign_ref identifier="A-MEXP-48"/>
+        </ArrayDesign_assnref>
+        <Information_assnref>
+          <ArrayManufacture_ref identifier="ARMANUF:MEXP:A-MEXP-48::2711"/>
+        </Information_assnref>
+      </Array>
+      <Array arrayIdentifier="15" identifier="AR:MEXP:447:2703" name="15 ">
+        <ArrayDesign_assnref>
+          <PhysicalArrayDesign_ref identifier="A-MEXP-48"/>
+        </ArrayDesign_assnref>
+        <Information_assnref>
+          <ArrayManufacture_ref identifier="ARMANUF:MEXP:A-MEXP-48::2711"/>
+        </Information_assnref>
+      </Array>
+      <Array arrayIdentifier="16" identifier="AR:MEXP:447:2704" name="16 ">
+        <ArrayDesign_assnref>
+          <PhysicalArrayDesign_ref identifier="A-MEXP-48"/>
+        </ArrayDesign_assnref>
+        <Information_assnref>
+          <ArrayManufacture_ref identifier="ARMANUF:MEXP:A-MEXP-48::2711"/>
+        </Information_assnref>
+      </Array>
+      <Array arrayIdentifier="17" identifier="AR:MEXP:447:2705" name="17 ">
+        <ArrayDesign_assnref>
+          <PhysicalArrayDesign_ref identifier="A-MEXP-48"/>
+        </ArrayDesign_assnref>
+        <Information_assnref>
+          <ArrayManufacture_ref identifier="ARMANUF:MEXP:A-MEXP-48::2711"/>
+        </Information_assnref>
+      </Array>
+      <Array arrayIdentifier="18" identifier="AR:MEXP:447:2706" name="18 ">
+        <ArrayDesign_assnref>
+          <PhysicalArrayDesign_ref identifier="A-MEXP-48"/>
+        </ArrayDesign_assnref>
+        <Information_assnref>
+          <ArrayManufacture_ref identifier="ARMANUF:MEXP:A-MEXP-48::2711"/>
+        </Information_assnref>
+      </Array>
+      <Array arrayIdentifier="19" identifier="AR:MEXP:447:2707" name="19 ">
+        <ArrayDesign_assnref>
+          <PhysicalArrayDesign_ref identifier="A-MEXP-48"/>
+        </ArrayDesign_assnref>
+        <Information_assnref>
+          <ArrayManufacture_ref identifier="ARMANUF:MEXP:A-MEXP-48::2711"/>
+        </Information_assnref>
+      </Array>
+      <Array arrayIdentifier="20" identifier="AR:MEXP:447:2708" name="20 ">
+        <ArrayDesign_assnref>
+          <PhysicalArrayDesign_ref identifier="A-MEXP-48"/>
+        </ArrayDesign_assnref>
+        <Information_assnref>
+          <ArrayManufacture_ref identifier="ARMANUF:MEXP:A-MEXP-48::2711"/>
+        </Information_assnref>
+      </Array>
+      <Array arrayIdentifier="21" identifier="AR:MEXP:447:2709" name="21 ">
+        <ArrayDesign_assnref>
+          <PhysicalArrayDesign_ref identifier="A-MEXP-48"/>
+        </ArrayDesign_assnref>
+        <Information_assnref>
+          <ArrayManufacture_ref identifier="ARMANUF:MEXP:A-MEXP-48::2711"/>
+        </Information_assnref>
+      </Array>
+      <Array arrayIdentifier="22" identifier="AR:MEXP:447:2710" name="22 ">
+        <ArrayDesign_assnref>
+          <PhysicalArrayDesign_ref identifier="A-MEXP-48"/>
+        </ArrayDesign_assnref>
+        <Information_assnref>
+          <ArrayManufacture_ref identifier="ARMANUF:MEXP:A-MEXP-48::2711"/>
+        </Information_assnref>
+      </Array>
+      <Array arrayIdentifier="23" identifier="AR:MEXP:447:2711" name="23 ">
+        <ArrayDesign_assnref>
+          <PhysicalArrayDesign_ref identifier="A-MEXP-48"/>
+        </ArrayDesign_assnref>
+        <Information_assnref>
+          <ArrayManufacture_ref identifier="ARMANUF:MEXP:A-MEXP-48::2711"/>
+        </Information_assnref>
+      </Array>
+    </Array_assnlist>
+    <ArrayManufacture_assnlist>
+      <ArrayManufacture identifier="ARMANUF:MEXP:A-MEXP-48::2711" name="A-MEXP-48:">
+        <Arrays_assnreflist>
+          <Array_ref identifier="AR:MEXP:447:2689"/>
+          <Array_ref identifier="AR:MEXP:447:2690"/>
+          <Array_ref identifier="AR:MEXP:447:2691"/>
+          <Array_ref identifier="AR:MEXP:447:2692"/>
+          <Array_ref identifier="AR:MEXP:447:2693"/>
+          <Array_ref identifier="AR:MEXP:447:2694"/>
+          <Array_ref identifier="AR:MEXP:447:2695"/>
+          <Array_ref identifier="AR:MEXP:447:2696"/>
+          <Array_ref identifier="AR:MEXP:447:2697"/>
+          <Array_ref identifier="AR:MEXP:447:2698"/>
+          <Array_ref identifier="AR:MEXP:447:2699"/>
+          <Array_ref identifier="AR:MEXP:447:2700"/>
+          <Array_ref identifier="AR:MEXP:447:2701"/>
+          <Array_ref identifier="AR:MEXP:447:2702"/>
+          <Array_ref identifier="AR:MEXP:447:2703"/>
+          <Array_ref identifier="AR:MEXP:447:2704"/>
+          <Array_ref identifier="AR:MEXP:447:2705"/>
+          <Array_ref identifier="AR:MEXP:447:2706"/>
+          <Array_ref identifier="AR:MEXP:447:2707"/>
+          <Array_ref identifier="AR:MEXP:447:2708"/>
+          <Array_ref identifier="AR:MEXP:447:2709"/>
+          <Array_ref identifier="AR:MEXP:447:2710"/>
+          <Array_ref identifier="AR:MEXP:447:2711"/>
+        </Arrays_assnreflist>
+      </ArrayManufacture>
+    </ArrayManufacture_assnlist>
+  </Array_package>
+  <BioAssay_package>
+    <BioAssay_assnlist>
+      <MeasuredBioAssay identifier="MBA:MEXP:2689">
+        <FeatureExtraction_assn>
+          <FeatureExtraction identifier="FEXT:MEXP:447:2689">
+            <PhysicalBioAssaySource_assnref>
+              <PhysicalBioAssay_ref identifier="PBA:MEXP:2689"/>
+            </PhysicalBioAssaySource_assnref>
+          </FeatureExtraction>
+        </FeatureExtraction_assn>
+        <MeasuredBioAssayData_assnreflist>
+          <MeasuredBioAssayData_ref identifier="MeasuredBioAssayData:MEXP:2689"/>
+        </MeasuredBioAssayData_assnreflist>
+      </MeasuredBioAssay>
+      <PhysicalBioAssay identifier="PBA:MEXP:2689">
+        <BioAssayCreation_assn>
+          <Hybridization identifier="HYB:MEXP:2689" name="HYBRID2520">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 20:59:52">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Corning Microarray Technology- CMT-Hyb chamber">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:CHAMBER_TYPE:7719"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="8">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Quantity of labeled target used:7720"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="16">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Time:7722"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="45">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Volume:7724"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="50">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Temperature:7726"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2383"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <LabeledExtract_ref identifier="S:Label:MEXP:3348"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <LabeledExtract_ref identifier="S:Label:MEXP:3432"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+            <Array_assnref>
+              <Array_ref identifier="AR:MEXP:447:2689"/>
+            </Array_assnref>
+          </Hybridization>
+        </BioAssayCreation_assn>
+        <BioAssayTreatments_assnlist>
+          <ImageAcquisition identifier="PBASCAN:MEXP:2689">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 21:00:46">
+                <HardwareApplications_assnlist>
+                  <HardwareApplication>
+                    <Hardware_assnref>
+                      <Hardware_ref identifier="HW:MEXP:7728"/>
+                    </Hardware_assnref>
+                  </HardwareApplication>
+                </HardwareApplications_assnlist>
+                <SoftwareApplications_assnlist>
+                  <SoftwareApplication>
+                    <Software_assnref>
+                      <Software_ref identifier="SW:MEXP:7729"/>
+                    </Software_assnref>
+                  </SoftwareApplication>
+                </SoftwareApplications_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2384"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Target_assnref>
+              <PhysicalBioAssay_ref identifier="PBA:MEXP:2689"/>
+            </Target_assnref>
+          </ImageAcquisition>
+        </BioAssayTreatments_assnlist>
+      </PhysicalBioAssay>
+      <MeasuredBioAssay identifier="MBA:MEXP:2690">
+        <FeatureExtraction_assn>
+          <FeatureExtraction identifier="FEXT:MEXP:447:2690">
+            <PhysicalBioAssaySource_assnref>
+              <PhysicalBioAssay_ref identifier="PBA:MEXP:2690"/>
+            </PhysicalBioAssaySource_assnref>
+          </FeatureExtraction>
+        </FeatureExtraction_assn>
+        <MeasuredBioAssayData_assnreflist>
+          <MeasuredBioAssayData_ref identifier="MeasuredBioAssayData:MEXP:2690"/>
+        </MeasuredBioAssayData_assnreflist>
+      </MeasuredBioAssay>
+      <PhysicalBioAssay identifier="PBA:MEXP:2690">
+        <BioAssayCreation_assn>
+          <Hybridization identifier="HYB:MEXP:2690" name="HYBRID2522">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 20:59:52">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Corning Microarray Technology- CMT-Hyb chamber">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:CHAMBER_TYPE:7719"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="8">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Quantity of labeled target used:7720"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="16">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Time:7722"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="45">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Volume:7724"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="50">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Temperature:7726"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2383"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <LabeledExtract_ref identifier="S:Label:MEXP:3349"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <LabeledExtract_ref identifier="S:Label:MEXP:3433"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+            <Array_assnref>
+              <Array_ref identifier="AR:MEXP:447:2690"/>
+            </Array_assnref>
+          </Hybridization>
+        </BioAssayCreation_assn>
+        <BioAssayTreatments_assnlist>
+          <ImageAcquisition identifier="PBASCAN:MEXP:2690">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 21:00:46">
+                <HardwareApplications_assnlist>
+                  <HardwareApplication>
+                    <Hardware_assnref>
+                      <Hardware_ref identifier="HW:MEXP:7728"/>
+                    </Hardware_assnref>
+                  </HardwareApplication>
+                </HardwareApplications_assnlist>
+                <SoftwareApplications_assnlist>
+                  <SoftwareApplication>
+                    <Software_assnref>
+                      <Software_ref identifier="SW:MEXP:7729"/>
+                    </Software_assnref>
+                  </SoftwareApplication>
+                </SoftwareApplications_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2384"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Target_assnref>
+              <PhysicalBioAssay_ref identifier="PBA:MEXP:2690"/>
+            </Target_assnref>
+          </ImageAcquisition>
+        </BioAssayTreatments_assnlist>
+      </PhysicalBioAssay>
+      <MeasuredBioAssay identifier="MBA:MEXP:2691">
+        <FeatureExtraction_assn>
+          <FeatureExtraction identifier="FEXT:MEXP:447:2691">
+            <PhysicalBioAssaySource_assnref>
+              <PhysicalBioAssay_ref identifier="PBA:MEXP:2691"/>
+            </PhysicalBioAssaySource_assnref>
+          </FeatureExtraction>
+        </FeatureExtraction_assn>
+        <MeasuredBioAssayData_assnreflist>
+          <MeasuredBioAssayData_ref identifier="MeasuredBioAssayData:MEXP:2691"/>
+        </MeasuredBioAssayData_assnreflist>
+      </MeasuredBioAssay>
+      <PhysicalBioAssay identifier="PBA:MEXP:2691">
+        <BioAssayCreation_assn>
+          <Hybridization identifier="HYB:MEXP:2691" name="HYBRID2633">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 20:59:52">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Corning Microarray Technology- CMT-Hyb chamber">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:CHAMBER_TYPE:7719"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="8">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Quantity of labeled target used:7720"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="16">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Time:7722"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="45">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Volume:7724"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="50">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Temperature:7726"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2383"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <LabeledExtract_ref identifier="S:Label:MEXP:3350"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <LabeledExtract_ref identifier="S:Label:MEXP:3434"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+            <Array_assnref>
+              <Array_ref identifier="AR:MEXP:447:2691"/>
+            </Array_assnref>
+          </Hybridization>
+        </BioAssayCreation_assn>
+        <BioAssayTreatments_assnlist>
+          <ImageAcquisition identifier="PBASCAN:MEXP:2691">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 21:00:46">
+                <HardwareApplications_assnlist>
+                  <HardwareApplication>
+                    <Hardware_assnref>
+                      <Hardware_ref identifier="HW:MEXP:7728"/>
+                    </Hardware_assnref>
+                  </HardwareApplication>
+                </HardwareApplications_assnlist>
+                <SoftwareApplications_assnlist>
+                  <SoftwareApplication>
+                    <Software_assnref>
+                      <Software_ref identifier="SW:MEXP:7729"/>
+                    </Software_assnref>
+                  </SoftwareApplication>
+                </SoftwareApplications_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2384"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Target_assnref>
+              <PhysicalBioAssay_ref identifier="PBA:MEXP:2691"/>
+            </Target_assnref>
+          </ImageAcquisition>
+        </BioAssayTreatments_assnlist>
+      </PhysicalBioAssay>
+      <MeasuredBioAssay identifier="MBA:MEXP:2692">
+        <FeatureExtraction_assn>
+          <FeatureExtraction identifier="FEXT:MEXP:447:2692">
+            <PhysicalBioAssaySource_assnref>
+              <PhysicalBioAssay_ref identifier="PBA:MEXP:2692"/>
+            </PhysicalBioAssaySource_assnref>
+          </FeatureExtraction>
+        </FeatureExtraction_assn>
+        <MeasuredBioAssayData_assnreflist>
+          <MeasuredBioAssayData_ref identifier="MeasuredBioAssayData:MEXP:2692"/>
+        </MeasuredBioAssayData_assnreflist>
+      </MeasuredBioAssay>
+      <PhysicalBioAssay identifier="PBA:MEXP:2692">
+        <BioAssayCreation_assn>
+          <Hybridization identifier="HYB:MEXP:2692" name="HYBRID2634">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 20:59:52">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Corning Microarray Technology- CMT-Hyb chamber">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:CHAMBER_TYPE:7719"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="8">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Quantity of labeled target used:7720"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="16">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Time:7722"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="45">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Volume:7724"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="50">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Temperature:7726"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2383"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <LabeledExtract_ref identifier="S:Label:MEXP:3373"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <LabeledExtract_ref identifier="S:Label:MEXP:3435"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+            <Array_assnref>
+              <Array_ref identifier="AR:MEXP:447:2692"/>
+            </Array_assnref>
+          </Hybridization>
+        </BioAssayCreation_assn>
+        <BioAssayTreatments_assnlist>
+          <ImageAcquisition identifier="PBASCAN:MEXP:2692">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 21:00:46">
+                <HardwareApplications_assnlist>
+                  <HardwareApplication>
+                    <Hardware_assnref>
+                      <Hardware_ref identifier="HW:MEXP:7728"/>
+                    </Hardware_assnref>
+                  </HardwareApplication>
+                </HardwareApplications_assnlist>
+                <SoftwareApplications_assnlist>
+                  <SoftwareApplication>
+                    <Software_assnref>
+                      <Software_ref identifier="SW:MEXP:7729"/>
+                    </Software_assnref>
+                  </SoftwareApplication>
+                </SoftwareApplications_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2384"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Target_assnref>
+              <PhysicalBioAssay_ref identifier="PBA:MEXP:2692"/>
+            </Target_assnref>
+          </ImageAcquisition>
+        </BioAssayTreatments_assnlist>
+      </PhysicalBioAssay>
+      <MeasuredBioAssay identifier="MBA:MEXP:2693">
+        <FeatureExtraction_assn>
+          <FeatureExtraction identifier="FEXT:MEXP:447:2693">
+            <PhysicalBioAssaySource_assnref>
+              <PhysicalBioAssay_ref identifier="PBA:MEXP:2693"/>
+            </PhysicalBioAssaySource_assnref>
+          </FeatureExtraction>
+        </FeatureExtraction_assn>
+        <MeasuredBioAssayData_assnreflist>
+          <MeasuredBioAssayData_ref identifier="MeasuredBioAssayData:MEXP:2693"/>
+        </MeasuredBioAssayData_assnreflist>
+      </MeasuredBioAssay>
+      <PhysicalBioAssay identifier="PBA:MEXP:2693">
+        <BioAssayCreation_assn>
+          <Hybridization identifier="HYB:MEXP:2693" name="HYBRID2635">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 20:59:52">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Corning Microarray Technology- CMT-Hyb chamber">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:CHAMBER_TYPE:7719"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="8">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Quantity of labeled target used:7720"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="16">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Time:7722"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="45">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Volume:7724"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="50">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Temperature:7726"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2383"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <LabeledExtract_ref identifier="S:Label:MEXP:3368"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <LabeledExtract_ref identifier="S:Label:MEXP:3374"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+            <Array_assnref>
+              <Array_ref identifier="AR:MEXP:447:2693"/>
+            </Array_assnref>
+          </Hybridization>
+        </BioAssayCreation_assn>
+        <BioAssayTreatments_assnlist>
+          <ImageAcquisition identifier="PBASCAN:MEXP:2693">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 21:00:46">
+                <HardwareApplications_assnlist>
+                  <HardwareApplication>
+                    <Hardware_assnref>
+                      <Hardware_ref identifier="HW:MEXP:7728"/>
+                    </Hardware_assnref>
+                  </HardwareApplication>
+                </HardwareApplications_assnlist>
+                <SoftwareApplications_assnlist>
+                  <SoftwareApplication>
+                    <Software_assnref>
+                      <Software_ref identifier="SW:MEXP:7729"/>
+                    </Software_assnref>
+                  </SoftwareApplication>
+                </SoftwareApplications_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2384"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Target_assnref>
+              <PhysicalBioAssay_ref identifier="PBA:MEXP:2693"/>
+            </Target_assnref>
+          </ImageAcquisition>
+        </BioAssayTreatments_assnlist>
+      </PhysicalBioAssay>
+      <MeasuredBioAssay identifier="MBA:MEXP:2694">
+        <FeatureExtraction_assn>
+          <FeatureExtraction identifier="FEXT:MEXP:447:2694">
+            <PhysicalBioAssaySource_assnref>
+              <PhysicalBioAssay_ref identifier="PBA:MEXP:2694"/>
+            </PhysicalBioAssaySource_assnref>
+          </FeatureExtraction>
+        </FeatureExtraction_assn>
+        <MeasuredBioAssayData_assnreflist>
+          <MeasuredBioAssayData_ref identifier="MeasuredBioAssayData:MEXP:2694"/>
+        </MeasuredBioAssayData_assnreflist>
+      </MeasuredBioAssay>
+      <PhysicalBioAssay identifier="PBA:MEXP:2694">
+        <BioAssayCreation_assn>
+          <Hybridization identifier="HYB:MEXP:2694" name="HYBRID2712">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 20:59:52">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Corning Microarray Technology- CMT-Hyb chamber">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:CHAMBER_TYPE:7719"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="8">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Quantity of labeled target used:7720"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="16">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Time:7722"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="45">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Volume:7724"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="50">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Temperature:7726"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2383"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <LabeledExtract_ref identifier="S:Label:MEXP:3382"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <LabeledExtract_ref identifier="S:Label:MEXP:3361"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+            <Array_assnref>
+              <Array_ref identifier="AR:MEXP:447:2694"/>
+            </Array_assnref>
+          </Hybridization>
+        </BioAssayCreation_assn>
+        <BioAssayTreatments_assnlist>
+          <ImageAcquisition identifier="PBASCAN:MEXP:2694">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 21:00:46">
+                <HardwareApplications_assnlist>
+                  <HardwareApplication>
+                    <Hardware_assnref>
+                      <Hardware_ref identifier="HW:MEXP:7728"/>
+                    </Hardware_assnref>
+                  </HardwareApplication>
+                </HardwareApplications_assnlist>
+                <SoftwareApplications_assnlist>
+                  <SoftwareApplication>
+                    <Software_assnref>
+                      <Software_ref identifier="SW:MEXP:7729"/>
+                    </Software_assnref>
+                  </SoftwareApplication>
+                </SoftwareApplications_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2384"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Target_assnref>
+              <PhysicalBioAssay_ref identifier="PBA:MEXP:2694"/>
+            </Target_assnref>
+          </ImageAcquisition>
+        </BioAssayTreatments_assnlist>
+      </PhysicalBioAssay>
+      <MeasuredBioAssay identifier="MBA:MEXP:2695">
+        <FeatureExtraction_assn>
+          <FeatureExtraction identifier="FEXT:MEXP:447:2695">
+            <PhysicalBioAssaySource_assnref>
+              <PhysicalBioAssay_ref identifier="PBA:MEXP:2695"/>
+            </PhysicalBioAssaySource_assnref>
+          </FeatureExtraction>
+        </FeatureExtraction_assn>
+        <MeasuredBioAssayData_assnreflist>
+          <MeasuredBioAssayData_ref identifier="MeasuredBioAssayData:MEXP:2695"/>
+        </MeasuredBioAssayData_assnreflist>
+      </MeasuredBioAssay>
+      <PhysicalBioAssay identifier="PBA:MEXP:2695">
+        <BioAssayCreation_assn>
+          <Hybridization identifier="HYB:MEXP:2695" name="HYBRID2718">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 20:59:52">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Corning Microarray Technology- CMT-Hyb chamber">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:CHAMBER_TYPE:7719"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="8">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Quantity of labeled target used:7720"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="16">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Time:7722"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="45">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Volume:7724"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="50">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Temperature:7726"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2383"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <LabeledExtract_ref identifier="S:Label:MEXP:3383"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <LabeledExtract_ref identifier="S:Label:MEXP:3360"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+            <Array_assnref>
+              <Array_ref identifier="AR:MEXP:447:2695"/>
+            </Array_assnref>
+          </Hybridization>
+        </BioAssayCreation_assn>
+        <BioAssayTreatments_assnlist>
+          <ImageAcquisition identifier="PBASCAN:MEXP:2695">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 21:00:46">
+                <HardwareApplications_assnlist>
+                  <HardwareApplication>
+                    <Hardware_assnref>
+                      <Hardware_ref identifier="HW:MEXP:7728"/>
+                    </Hardware_assnref>
+                  </HardwareApplication>
+                </HardwareApplications_assnlist>
+                <SoftwareApplications_assnlist>
+                  <SoftwareApplication>
+                    <Software_assnref>
+                      <Software_ref identifier="SW:MEXP:7729"/>
+                    </Software_assnref>
+                  </SoftwareApplication>
+                </SoftwareApplications_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2384"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Target_assnref>
+              <PhysicalBioAssay_ref identifier="PBA:MEXP:2695"/>
+            </Target_assnref>
+          </ImageAcquisition>
+        </BioAssayTreatments_assnlist>
+      </PhysicalBioAssay>
+      <MeasuredBioAssay identifier="MBA:MEXP:2696">
+        <FeatureExtraction_assn>
+          <FeatureExtraction identifier="FEXT:MEXP:447:2696">
+            <PhysicalBioAssaySource_assnref>
+              <PhysicalBioAssay_ref identifier="PBA:MEXP:2696"/>
+            </PhysicalBioAssaySource_assnref>
+          </FeatureExtraction>
+        </FeatureExtraction_assn>
+        <MeasuredBioAssayData_assnreflist>
+          <MeasuredBioAssayData_ref identifier="MeasuredBioAssayData:MEXP:2696"/>
+        </MeasuredBioAssayData_assnreflist>
+      </MeasuredBioAssay>
+      <PhysicalBioAssay identifier="PBA:MEXP:2696">
+        <BioAssayCreation_assn>
+          <Hybridization identifier="HYB:MEXP:2696" name="HYBRID2719">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 20:59:52">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Corning Microarray Technology- CMT-Hyb chamber">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:CHAMBER_TYPE:7719"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="8">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Quantity of labeled target used:7720"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="16">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Time:7722"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="45">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Volume:7724"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="50">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Temperature:7726"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2383"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <LabeledExtract_ref identifier="S:Label:MEXP:3367"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <LabeledExtract_ref identifier="S:Label:MEXP:3375"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+            <Array_assnref>
+              <Array_ref identifier="AR:MEXP:447:2696"/>
+            </Array_assnref>
+          </Hybridization>
+        </BioAssayCreation_assn>
+        <BioAssayTreatments_assnlist>
+          <ImageAcquisition identifier="PBASCAN:MEXP:2696">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 21:00:46">
+                <HardwareApplications_assnlist>
+                  <HardwareApplication>
+                    <Hardware_assnref>
+                      <Hardware_ref identifier="HW:MEXP:7728"/>
+                    </Hardware_assnref>
+                  </HardwareApplication>
+                </HardwareApplications_assnlist>
+                <SoftwareApplications_assnlist>
+                  <SoftwareApplication>
+                    <Software_assnref>
+                      <Software_ref identifier="SW:MEXP:7729"/>
+                    </Software_assnref>
+                  </SoftwareApplication>
+                </SoftwareApplications_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2384"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Target_assnref>
+              <PhysicalBioAssay_ref identifier="PBA:MEXP:2696"/>
+            </Target_assnref>
+          </ImageAcquisition>
+        </BioAssayTreatments_assnlist>
+      </PhysicalBioAssay>
+      <MeasuredBioAssay identifier="MBA:MEXP:2697">
+        <FeatureExtraction_assn>
+          <FeatureExtraction identifier="FEXT:MEXP:447:2697">
+            <PhysicalBioAssaySource_assnref>
+              <PhysicalBioAssay_ref identifier="PBA:MEXP:2697"/>
+            </PhysicalBioAssaySource_assnref>
+          </FeatureExtraction>
+        </FeatureExtraction_assn>
+        <MeasuredBioAssayData_assnreflist>
+          <MeasuredBioAssayData_ref identifier="MeasuredBioAssayData:MEXP:2697"/>
+        </MeasuredBioAssayData_assnreflist>
+      </MeasuredBioAssay>
+      <PhysicalBioAssay identifier="PBA:MEXP:2697">
+        <BioAssayCreation_assn>
+          <Hybridization identifier="HYB:MEXP:2697" name="HYBRID2720">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 20:59:52">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Corning Microarray Technology- CMT-Hyb chamber">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:CHAMBER_TYPE:7719"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="8">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Quantity of labeled target used:7720"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="16">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Time:7722"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="45">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Volume:7724"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="50">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Temperature:7726"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2383"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <LabeledExtract_ref identifier="S:Label:MEXP:3366"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <LabeledExtract_ref identifier="S:Label:MEXP:3377"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+            <Array_assnref>
+              <Array_ref identifier="AR:MEXP:447:2697"/>
+            </Array_assnref>
+          </Hybridization>
+        </BioAssayCreation_assn>
+        <BioAssayTreatments_assnlist>
+          <ImageAcquisition identifier="PBASCAN:MEXP:2697">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 21:00:46">
+                <HardwareApplications_assnlist>
+                  <HardwareApplication>
+                    <Hardware_assnref>
+                      <Hardware_ref identifier="HW:MEXP:7728"/>
+                    </Hardware_assnref>
+                  </HardwareApplication>
+                </HardwareApplications_assnlist>
+                <SoftwareApplications_assnlist>
+                  <SoftwareApplication>
+                    <Software_assnref>
+                      <Software_ref identifier="SW:MEXP:7729"/>
+                    </Software_assnref>
+                  </SoftwareApplication>
+                </SoftwareApplications_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2384"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Target_assnref>
+              <PhysicalBioAssay_ref identifier="PBA:MEXP:2697"/>
+            </Target_assnref>
+          </ImageAcquisition>
+        </BioAssayTreatments_assnlist>
+      </PhysicalBioAssay>
+      <MeasuredBioAssay identifier="MBA:MEXP:2698">
+        <FeatureExtraction_assn>
+          <FeatureExtraction identifier="FEXT:MEXP:447:2698">
+            <PhysicalBioAssaySource_assnref>
+              <PhysicalBioAssay_ref identifier="PBA:MEXP:2698"/>
+            </PhysicalBioAssaySource_assnref>
+          </FeatureExtraction>
+        </FeatureExtraction_assn>
+        <MeasuredBioAssayData_assnreflist>
+          <MeasuredBioAssayData_ref identifier="MeasuredBioAssayData:MEXP:2698"/>
+        </MeasuredBioAssayData_assnreflist>
+      </MeasuredBioAssay>
+      <PhysicalBioAssay identifier="PBA:MEXP:2698">
+        <BioAssayCreation_assn>
+          <Hybridization identifier="HYB:MEXP:2698" name="HYBRID2724">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 20:59:52">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Corning Microarray Technology- CMT-Hyb chamber">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:CHAMBER_TYPE:7719"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="8">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Quantity of labeled target used:7720"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="16">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Time:7722"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="45">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Volume:7724"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="50">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Temperature:7726"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2383"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <LabeledExtract_ref identifier="S:Label:MEXP:3359"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <LabeledExtract_ref identifier="S:Label:MEXP:3384"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+            <Array_assnref>
+              <Array_ref identifier="AR:MEXP:447:2698"/>
+            </Array_assnref>
+          </Hybridization>
+        </BioAssayCreation_assn>
+        <BioAssayTreatments_assnlist>
+          <ImageAcquisition identifier="PBASCAN:MEXP:2698">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 21:00:46">
+                <HardwareApplications_assnlist>
+                  <HardwareApplication>
+                    <Hardware_assnref>
+                      <Hardware_ref identifier="HW:MEXP:7728"/>
+                    </Hardware_assnref>
+                  </HardwareApplication>
+                </HardwareApplications_assnlist>
+                <SoftwareApplications_assnlist>
+                  <SoftwareApplication>
+                    <Software_assnref>
+                      <Software_ref identifier="SW:MEXP:7729"/>
+                    </Software_assnref>
+                  </SoftwareApplication>
+                </SoftwareApplications_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2384"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Target_assnref>
+              <PhysicalBioAssay_ref identifier="PBA:MEXP:2698"/>
+            </Target_assnref>
+          </ImageAcquisition>
+        </BioAssayTreatments_assnlist>
+      </PhysicalBioAssay>
+      <MeasuredBioAssay identifier="MBA:MEXP:2699">
+        <FeatureExtraction_assn>
+          <FeatureExtraction identifier="FEXT:MEXP:447:2699">
+            <PhysicalBioAssaySource_assnref>
+              <PhysicalBioAssay_ref identifier="PBA:MEXP:2699"/>
+            </PhysicalBioAssaySource_assnref>
+          </FeatureExtraction>
+        </FeatureExtraction_assn>
+        <MeasuredBioAssayData_assnreflist>
+          <MeasuredBioAssayData_ref identifier="MeasuredBioAssayData:MEXP:2699"/>
+        </MeasuredBioAssayData_assnreflist>
+      </MeasuredBioAssay>
+      <PhysicalBioAssay identifier="PBA:MEXP:2699">
+        <BioAssayCreation_assn>
+          <Hybridization identifier="HYB:MEXP:2699" name="HYBRID2735">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 20:59:52">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Corning Microarray Technology- CMT-Hyb chamber">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:CHAMBER_TYPE:7719"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="8">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Quantity of labeled target used:7720"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="16">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Time:7722"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="45">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Volume:7724"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="50">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Temperature:7726"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2383"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <LabeledExtract_ref identifier="S:Label:MEXP:3358"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <LabeledExtract_ref identifier="S:Label:MEXP:3385"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+            <Array_assnref>
+              <Array_ref identifier="AR:MEXP:447:2699"/>
+            </Array_assnref>
+          </Hybridization>
+        </BioAssayCreation_assn>
+        <BioAssayTreatments_assnlist>
+          <ImageAcquisition identifier="PBASCAN:MEXP:2699">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 21:00:46">
+                <HardwareApplications_assnlist>
+                  <HardwareApplication>
+                    <Hardware_assnref>
+                      <Hardware_ref identifier="HW:MEXP:7728"/>
+                    </Hardware_assnref>
+                  </HardwareApplication>
+                </HardwareApplications_assnlist>
+                <SoftwareApplications_assnlist>
+                  <SoftwareApplication>
+                    <Software_assnref>
+                      <Software_ref identifier="SW:MEXP:7729"/>
+                    </Software_assnref>
+                  </SoftwareApplication>
+                </SoftwareApplications_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2384"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Target_assnref>
+              <PhysicalBioAssay_ref identifier="PBA:MEXP:2699"/>
+            </Target_assnref>
+          </ImageAcquisition>
+        </BioAssayTreatments_assnlist>
+      </PhysicalBioAssay>
+      <MeasuredBioAssay identifier="MBA:MEXP:2700">
+        <FeatureExtraction_assn>
+          <FeatureExtraction identifier="FEXT:MEXP:447:2700">
+            <PhysicalBioAssaySource_assnref>
+              <PhysicalBioAssay_ref identifier="PBA:MEXP:2700"/>
+            </PhysicalBioAssaySource_assnref>
+          </FeatureExtraction>
+        </FeatureExtraction_assn>
+        <MeasuredBioAssayData_assnreflist>
+          <MeasuredBioAssayData_ref identifier="MeasuredBioAssayData:MEXP:2700"/>
+        </MeasuredBioAssayData_assnreflist>
+      </MeasuredBioAssay>
+      <PhysicalBioAssay identifier="PBA:MEXP:2700">
+        <BioAssayCreation_assn>
+          <Hybridization identifier="HYB:MEXP:2700" name="HYBRID2736">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 20:59:52">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Corning Microarray Technology- CMT-Hyb chamber">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:CHAMBER_TYPE:7719"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="8">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Quantity of labeled target used:7720"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="16">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Time:7722"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="45">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Volume:7724"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="50">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Temperature:7726"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2383"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <LabeledExtract_ref identifier="S:Label:MEXP:3357"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <LabeledExtract_ref identifier="S:Label:MEXP:3386"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+            <Array_assnref>
+              <Array_ref identifier="AR:MEXP:447:2700"/>
+            </Array_assnref>
+          </Hybridization>
+        </BioAssayCreation_assn>
+        <BioAssayTreatments_assnlist>
+          <ImageAcquisition identifier="PBASCAN:MEXP:2700">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 21:00:46">
+                <HardwareApplications_assnlist>
+                  <HardwareApplication>
+                    <Hardware_assnref>
+                      <Hardware_ref identifier="HW:MEXP:7728"/>
+                    </Hardware_assnref>
+                  </HardwareApplication>
+                </HardwareApplications_assnlist>
+                <SoftwareApplications_assnlist>
+                  <SoftwareApplication>
+                    <Software_assnref>
+                      <Software_ref identifier="SW:MEXP:7729"/>
+                    </Software_assnref>
+                  </SoftwareApplication>
+                </SoftwareApplications_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2384"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Target_assnref>
+              <PhysicalBioAssay_ref identifier="PBA:MEXP:2700"/>
+            </Target_assnref>
+          </ImageAcquisition>
+        </BioAssayTreatments_assnlist>
+      </PhysicalBioAssay>
+      <MeasuredBioAssay identifier="MBA:MEXP:2701">
+        <FeatureExtraction_assn>
+          <FeatureExtraction identifier="FEXT:MEXP:447:2701">
+            <PhysicalBioAssaySource_assnref>
+              <PhysicalBioAssay_ref identifier="PBA:MEXP:2701"/>
+            </PhysicalBioAssaySource_assnref>
+          </FeatureExtraction>
+        </FeatureExtraction_assn>
+        <MeasuredBioAssayData_assnreflist>
+          <MeasuredBioAssayData_ref identifier="MeasuredBioAssayData:MEXP:2701"/>
+        </MeasuredBioAssayData_assnreflist>
+      </MeasuredBioAssay>
+      <PhysicalBioAssay identifier="PBA:MEXP:2701">
+        <BioAssayCreation_assn>
+          <Hybridization identifier="HYB:MEXP:2701" name="HYBRID2737">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 20:59:52">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Corning Microarray Technology- CMT-Hyb chamber">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:CHAMBER_TYPE:7719"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="8">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Quantity of labeled target used:7720"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="16">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Time:7722"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="45">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Volume:7724"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="50">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Temperature:7726"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2383"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <LabeledExtract_ref identifier="S:Label:MEXP:3356"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <LabeledExtract_ref identifier="S:Label:MEXP:3387"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+            <Array_assnref>
+              <Array_ref identifier="AR:MEXP:447:2701"/>
+            </Array_assnref>
+          </Hybridization>
+        </BioAssayCreation_assn>
+        <BioAssayTreatments_assnlist>
+          <ImageAcquisition identifier="PBASCAN:MEXP:2701">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 21:00:46">
+                <HardwareApplications_assnlist>
+                  <HardwareApplication>
+                    <Hardware_assnref>
+                      <Hardware_ref identifier="HW:MEXP:7728"/>
+                    </Hardware_assnref>
+                  </HardwareApplication>
+                </HardwareApplications_assnlist>
+                <SoftwareApplications_assnlist>
+                  <SoftwareApplication>
+                    <Software_assnref>
+                      <Software_ref identifier="SW:MEXP:7729"/>
+                    </Software_assnref>
+                  </SoftwareApplication>
+                </SoftwareApplications_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2384"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Target_assnref>
+              <PhysicalBioAssay_ref identifier="PBA:MEXP:2701"/>
+            </Target_assnref>
+          </ImageAcquisition>
+        </BioAssayTreatments_assnlist>
+      </PhysicalBioAssay>
+      <MeasuredBioAssay identifier="MBA:MEXP:2702">
+        <FeatureExtraction_assn>
+          <FeatureExtraction identifier="FEXT:MEXP:447:2702">
+            <PhysicalBioAssaySource_assnref>
+              <PhysicalBioAssay_ref identifier="PBA:MEXP:2702"/>
+            </PhysicalBioAssaySource_assnref>
+          </FeatureExtraction>
+        </FeatureExtraction_assn>
+        <MeasuredBioAssayData_assnreflist>
+          <MeasuredBioAssayData_ref identifier="MeasuredBioAssayData:MEXP:2702"/>
+        </MeasuredBioAssayData_assnreflist>
+      </MeasuredBioAssay>
+      <PhysicalBioAssay identifier="PBA:MEXP:2702">
+        <BioAssayCreation_assn>
+          <Hybridization identifier="HYB:MEXP:2702" name="HYBRID9001">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 20:59:52">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Corning Microarray Technology- CMT-Hyb chamber">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:CHAMBER_TYPE:7719"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="8">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Quantity of labeled target used:7720"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="16">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Time:7722"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="45">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Volume:7724"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="50">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Temperature:7726"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2383"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <LabeledExtract_ref identifier="S:Label:MEXP:3355"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <LabeledExtract_ref identifier="S:Label:MEXP:3388"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+            <Array_assnref>
+              <Array_ref identifier="AR:MEXP:447:2702"/>
+            </Array_assnref>
+          </Hybridization>
+        </BioAssayCreation_assn>
+        <BioAssayTreatments_assnlist>
+          <ImageAcquisition identifier="PBASCAN:MEXP:2702">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 21:00:46">
+                <HardwareApplications_assnlist>
+                  <HardwareApplication>
+                    <Hardware_assnref>
+                      <Hardware_ref identifier="HW:MEXP:7728"/>
+                    </Hardware_assnref>
+                  </HardwareApplication>
+                </HardwareApplications_assnlist>
+                <SoftwareApplications_assnlist>
+                  <SoftwareApplication>
+                    <Software_assnref>
+                      <Software_ref identifier="SW:MEXP:7729"/>
+                    </Software_assnref>
+                  </SoftwareApplication>
+                </SoftwareApplications_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2384"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Target_assnref>
+              <PhysicalBioAssay_ref identifier="PBA:MEXP:2702"/>
+            </Target_assnref>
+          </ImageAcquisition>
+        </BioAssayTreatments_assnlist>
+      </PhysicalBioAssay>
+      <MeasuredBioAssay identifier="MBA:MEXP:2703">
+        <FeatureExtraction_assn>
+          <FeatureExtraction identifier="FEXT:MEXP:447:2703">
+            <PhysicalBioAssaySource_assnref>
+              <PhysicalBioAssay_ref identifier="PBA:MEXP:2703"/>
+            </PhysicalBioAssaySource_assnref>
+          </FeatureExtraction>
+        </FeatureExtraction_assn>
+        <MeasuredBioAssayData_assnreflist>
+          <MeasuredBioAssayData_ref identifier="MeasuredBioAssayData:MEXP:2703"/>
+        </MeasuredBioAssayData_assnreflist>
+      </MeasuredBioAssay>
+      <PhysicalBioAssay identifier="PBA:MEXP:2703">
+        <BioAssayCreation_assn>
+          <Hybridization identifier="HYB:MEXP:2703" name="HYBRID9002">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 20:59:52">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Corning Microarray Technology- CMT-Hyb chamber">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:CHAMBER_TYPE:7719"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="8">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Quantity of labeled target used:7720"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="16">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Time:7722"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="45">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Volume:7724"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="50">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Temperature:7726"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2383"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <LabeledExtract_ref identifier="S:Label:MEXP:3354"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <LabeledExtract_ref identifier="S:Label:MEXP:3389"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+            <Array_assnref>
+              <Array_ref identifier="AR:MEXP:447:2703"/>
+            </Array_assnref>
+          </Hybridization>
+        </BioAssayCreation_assn>
+        <BioAssayTreatments_assnlist>
+          <ImageAcquisition identifier="PBASCAN:MEXP:2703">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 21:00:46">
+                <HardwareApplications_assnlist>
+                  <HardwareApplication>
+                    <Hardware_assnref>
+                      <Hardware_ref identifier="HW:MEXP:7728"/>
+                    </Hardware_assnref>
+                  </HardwareApplication>
+                </HardwareApplications_assnlist>
+                <SoftwareApplications_assnlist>
+                  <SoftwareApplication>
+                    <Software_assnref>
+                      <Software_ref identifier="SW:MEXP:7729"/>
+                    </Software_assnref>
+                  </SoftwareApplication>
+                </SoftwareApplications_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2384"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Target_assnref>
+              <PhysicalBioAssay_ref identifier="PBA:MEXP:2703"/>
+            </Target_assnref>
+          </ImageAcquisition>
+        </BioAssayTreatments_assnlist>
+      </PhysicalBioAssay>
+      <MeasuredBioAssay identifier="MBA:MEXP:2704">
+        <FeatureExtraction_assn>
+          <FeatureExtraction identifier="FEXT:MEXP:447:2704">
+            <PhysicalBioAssaySource_assnref>
+              <PhysicalBioAssay_ref identifier="PBA:MEXP:2704"/>
+            </PhysicalBioAssaySource_assnref>
+          </FeatureExtraction>
+        </FeatureExtraction_assn>
+        <MeasuredBioAssayData_assnreflist>
+          <MeasuredBioAssayData_ref identifier="MeasuredBioAssayData:MEXP:2704"/>
+        </MeasuredBioAssayData_assnreflist>
+      </MeasuredBioAssay>
+      <PhysicalBioAssay identifier="PBA:MEXP:2704">
+        <BioAssayCreation_assn>
+          <Hybridization identifier="HYB:MEXP:2704" name="HYBRID9003">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 20:59:52">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Corning Microarray Technology- CMT-Hyb chamber">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:CHAMBER_TYPE:7719"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="8">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Quantity of labeled target used:7720"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="16">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Time:7722"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="45">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Volume:7724"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="50">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Temperature:7726"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2383"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <LabeledExtract_ref identifier="S:Label:MEXP:3353"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <LabeledExtract_ref identifier="S:Label:MEXP:3390"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+            <Array_assnref>
+              <Array_ref identifier="AR:MEXP:447:2704"/>
+            </Array_assnref>
+          </Hybridization>
+        </BioAssayCreation_assn>
+        <BioAssayTreatments_assnlist>
+          <ImageAcquisition identifier="PBASCAN:MEXP:2704">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 21:00:46">
+                <HardwareApplications_assnlist>
+                  <HardwareApplication>
+                    <Hardware_assnref>
+                      <Hardware_ref identifier="HW:MEXP:7728"/>
+                    </Hardware_assnref>
+                  </HardwareApplication>
+                </HardwareApplications_assnlist>
+                <SoftwareApplications_assnlist>
+                  <SoftwareApplication>
+                    <Software_assnref>
+                      <Software_ref identifier="SW:MEXP:7729"/>
+                    </Software_assnref>
+                  </SoftwareApplication>
+                </SoftwareApplications_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2384"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Target_assnref>
+              <PhysicalBioAssay_ref identifier="PBA:MEXP:2704"/>
+            </Target_assnref>
+          </ImageAcquisition>
+        </BioAssayTreatments_assnlist>
+      </PhysicalBioAssay>
+      <MeasuredBioAssay identifier="MBA:MEXP:2705">
+        <FeatureExtraction_assn>
+          <FeatureExtraction identifier="FEXT:MEXP:447:2705">
+            <PhysicalBioAssaySource_assnref>
+              <PhysicalBioAssay_ref identifier="PBA:MEXP:2705"/>
+            </PhysicalBioAssaySource_assnref>
+          </FeatureExtraction>
+        </FeatureExtraction_assn>
+        <MeasuredBioAssayData_assnreflist>
+          <MeasuredBioAssayData_ref identifier="MeasuredBioAssayData:MEXP:2705"/>
+        </MeasuredBioAssayData_assnreflist>
+      </MeasuredBioAssay>
+      <PhysicalBioAssay identifier="PBA:MEXP:2705">
+        <BioAssayCreation_assn>
+          <Hybridization identifier="HYB:MEXP:2705" name="HYBRID2632">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 20:59:52">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Corning Microarray Technology- CMT-Hyb chamber">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:CHAMBER_TYPE:7719"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="8">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Quantity of labeled target used:7720"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="16">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Time:7722"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="45">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Volume:7724"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="50">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Temperature:7726"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2383"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <LabeledExtract_ref identifier="S:Label:MEXP:3352"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <LabeledExtract_ref identifier="S:Label:MEXP:3391"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+            <Array_assnref>
+              <Array_ref identifier="AR:MEXP:447:2705"/>
+            </Array_assnref>
+          </Hybridization>
+        </BioAssayCreation_assn>
+        <BioAssayTreatments_assnlist>
+          <ImageAcquisition identifier="PBASCAN:MEXP:2705">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 21:00:46">
+                <HardwareApplications_assnlist>
+                  <HardwareApplication>
+                    <Hardware_assnref>
+                      <Hardware_ref identifier="HW:MEXP:7728"/>
+                    </Hardware_assnref>
+                  </HardwareApplication>
+                </HardwareApplications_assnlist>
+                <SoftwareApplications_assnlist>
+                  <SoftwareApplication>
+                    <Software_assnref>
+                      <Software_ref identifier="SW:MEXP:7729"/>
+                    </Software_assnref>
+                  </SoftwareApplication>
+                </SoftwareApplications_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2384"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Target_assnref>
+              <PhysicalBioAssay_ref identifier="PBA:MEXP:2705"/>
+            </Target_assnref>
+          </ImageAcquisition>
+        </BioAssayTreatments_assnlist>
+      </PhysicalBioAssay>
+      <MeasuredBioAssay identifier="MBA:MEXP:2706">
+        <FeatureExtraction_assn>
+          <FeatureExtraction identifier="FEXT:MEXP:447:2706">
+            <PhysicalBioAssaySource_assnref>
+              <PhysicalBioAssay_ref identifier="PBA:MEXP:2706"/>
+            </PhysicalBioAssaySource_assnref>
+          </FeatureExtraction>
+        </FeatureExtraction_assn>
+        <MeasuredBioAssayData_assnreflist>
+          <MeasuredBioAssayData_ref identifier="MeasuredBioAssayData:MEXP:2706"/>
+        </MeasuredBioAssayData_assnreflist>
+      </MeasuredBioAssay>
+      <PhysicalBioAssay identifier="PBA:MEXP:2706">
+        <BioAssayCreation_assn>
+          <Hybridization identifier="HYB:MEXP:2706" name="HYBRID2711">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 20:59:52">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Corning Microarray Technology- CMT-Hyb chamber">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:CHAMBER_TYPE:7719"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="8">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Quantity of labeled target used:7720"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="16">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Time:7722"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="45">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Volume:7724"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="50">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Temperature:7726"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2383"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <LabeledExtract_ref identifier="S:Label:MEXP:3351"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <LabeledExtract_ref identifier="S:Label:MEXP:3392"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+            <Array_assnref>
+              <Array_ref identifier="AR:MEXP:447:2706"/>
+            </Array_assnref>
+          </Hybridization>
+        </BioAssayCreation_assn>
+        <BioAssayTreatments_assnlist>
+          <ImageAcquisition identifier="PBASCAN:MEXP:2706">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 21:00:46">
+                <HardwareApplications_assnlist>
+                  <HardwareApplication>
+                    <Hardware_assnref>
+                      <Hardware_ref identifier="HW:MEXP:7728"/>
+                    </Hardware_assnref>
+                  </HardwareApplication>
+                </HardwareApplications_assnlist>
+                <SoftwareApplications_assnlist>
+                  <SoftwareApplication>
+                    <Software_assnref>
+                      <Software_ref identifier="SW:MEXP:7729"/>
+                    </Software_assnref>
+                  </SoftwareApplication>
+                </SoftwareApplications_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2384"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Target_assnref>
+              <PhysicalBioAssay_ref identifier="PBA:MEXP:2706"/>
+            </Target_assnref>
+          </ImageAcquisition>
+        </BioAssayTreatments_assnlist>
+      </PhysicalBioAssay>
+      <MeasuredBioAssay identifier="MBA:MEXP:2707">
+        <FeatureExtraction_assn>
+          <FeatureExtraction identifier="FEXT:MEXP:447:2707">
+            <PhysicalBioAssaySource_assnref>
+              <PhysicalBioAssay_ref identifier="PBA:MEXP:2707"/>
+            </PhysicalBioAssaySource_assnref>
+          </FeatureExtraction>
+        </FeatureExtraction_assn>
+        <MeasuredBioAssayData_assnreflist>
+          <MeasuredBioAssayData_ref identifier="MeasuredBioAssayData:MEXP:2707"/>
+        </MeasuredBioAssayData_assnreflist>
+      </MeasuredBioAssay>
+      <PhysicalBioAssay identifier="PBA:MEXP:2707">
+        <BioAssayCreation_assn>
+          <Hybridization identifier="HYB:MEXP:2707" name="HYBRID2816">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 20:59:52">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Corning Microarray Technology- CMT-Hyb chamber">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:CHAMBER_TYPE:7719"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="8">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Quantity of labeled target used:7720"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="16">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Time:7722"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="45">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Volume:7724"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="50">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Temperature:7726"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2383"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <LabeledExtract_ref identifier="S:Label:MEXP:3393"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <LabeledExtract_ref identifier="S:Label:MEXP:3436"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+            <Array_assnref>
+              <Array_ref identifier="AR:MEXP:447:2707"/>
+            </Array_assnref>
+          </Hybridization>
+        </BioAssayCreation_assn>
+        <BioAssayTreatments_assnlist>
+          <ImageAcquisition identifier="PBASCAN:MEXP:2707">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 21:00:46">
+                <HardwareApplications_assnlist>
+                  <HardwareApplication>
+                    <Hardware_assnref>
+                      <Hardware_ref identifier="HW:MEXP:7728"/>
+                    </Hardware_assnref>
+                  </HardwareApplication>
+                </HardwareApplications_assnlist>
+                <SoftwareApplications_assnlist>
+                  <SoftwareApplication>
+                    <Software_assnref>
+                      <Software_ref identifier="SW:MEXP:7729"/>
+                    </Software_assnref>
+                  </SoftwareApplication>
+                </SoftwareApplications_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2384"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Target_assnref>
+              <PhysicalBioAssay_ref identifier="PBA:MEXP:2707"/>
+            </Target_assnref>
+          </ImageAcquisition>
+        </BioAssayTreatments_assnlist>
+      </PhysicalBioAssay>
+      <MeasuredBioAssay identifier="MBA:MEXP:2708">
+        <FeatureExtraction_assn>
+          <FeatureExtraction identifier="FEXT:MEXP:447:2708">
+            <PhysicalBioAssaySource_assnref>
+              <PhysicalBioAssay_ref identifier="PBA:MEXP:2708"/>
+            </PhysicalBioAssaySource_assnref>
+          </FeatureExtraction>
+        </FeatureExtraction_assn>
+        <MeasuredBioAssayData_assnreflist>
+          <MeasuredBioAssayData_ref identifier="MeasuredBioAssayData:MEXP:2708"/>
+        </MeasuredBioAssayData_assnreflist>
+      </MeasuredBioAssay>
+      <PhysicalBioAssay identifier="PBA:MEXP:2708">
+        <BioAssayCreation_assn>
+          <Hybridization identifier="HYB:MEXP:2708" name="HYBRID2740">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 20:59:52">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Corning Microarray Technology- CMT-Hyb chamber">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:CHAMBER_TYPE:7719"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="8">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Quantity of labeled target used:7720"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="16">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Time:7722"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="45">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Volume:7724"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="50">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Temperature:7726"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2383"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <LabeledExtract_ref identifier="S:Label:MEXP:3365"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <LabeledExtract_ref identifier="S:Label:MEXP:3378"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+            <Array_assnref>
+              <Array_ref identifier="AR:MEXP:447:2708"/>
+            </Array_assnref>
+          </Hybridization>
+        </BioAssayCreation_assn>
+        <BioAssayTreatments_assnlist>
+          <ImageAcquisition identifier="PBASCAN:MEXP:2708">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 21:00:46">
+                <HardwareApplications_assnlist>
+                  <HardwareApplication>
+                    <Hardware_assnref>
+                      <Hardware_ref identifier="HW:MEXP:7728"/>
+                    </Hardware_assnref>
+                  </HardwareApplication>
+                </HardwareApplications_assnlist>
+                <SoftwareApplications_assnlist>
+                  <SoftwareApplication>
+                    <Software_assnref>
+                      <Software_ref identifier="SW:MEXP:7729"/>
+                    </Software_assnref>
+                  </SoftwareApplication>
+                </SoftwareApplications_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2384"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Target_assnref>
+              <PhysicalBioAssay_ref identifier="PBA:MEXP:2708"/>
+            </Target_assnref>
+          </ImageAcquisition>
+        </BioAssayTreatments_assnlist>
+      </PhysicalBioAssay>
+      <MeasuredBioAssay identifier="MBA:MEXP:2709">
+        <FeatureExtraction_assn>
+          <FeatureExtraction identifier="FEXT:MEXP:447:2709">
+            <PhysicalBioAssaySource_assnref>
+              <PhysicalBioAssay_ref identifier="PBA:MEXP:2709"/>
+            </PhysicalBioAssaySource_assnref>
+          </FeatureExtraction>
+        </FeatureExtraction_assn>
+        <MeasuredBioAssayData_assnreflist>
+          <MeasuredBioAssayData_ref identifier="MeasuredBioAssayData:MEXP:2709"/>
+        </MeasuredBioAssayData_assnreflist>
+      </MeasuredBioAssay>
+      <PhysicalBioAssay identifier="PBA:MEXP:2709">
+        <BioAssayCreation_assn>
+          <Hybridization identifier="HYB:MEXP:2709" name="HYBRID2748">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 20:59:52">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Corning Microarray Technology- CMT-Hyb chamber">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:CHAMBER_TYPE:7719"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="8">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Quantity of labeled target used:7720"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="16">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Time:7722"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="45">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Volume:7724"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="50">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Temperature:7726"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2383"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <LabeledExtract_ref identifier="S:Label:MEXP:3364"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <LabeledExtract_ref identifier="S:Label:MEXP:3379"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+            <Array_assnref>
+              <Array_ref identifier="AR:MEXP:447:2709"/>
+            </Array_assnref>
+          </Hybridization>
+        </BioAssayCreation_assn>
+        <BioAssayTreatments_assnlist>
+          <ImageAcquisition identifier="PBASCAN:MEXP:2709">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 21:00:46">
+                <HardwareApplications_assnlist>
+                  <HardwareApplication>
+                    <Hardware_assnref>
+                      <Hardware_ref identifier="HW:MEXP:7728"/>
+                    </Hardware_assnref>
+                  </HardwareApplication>
+                </HardwareApplications_assnlist>
+                <SoftwareApplications_assnlist>
+                  <SoftwareApplication>
+                    <Software_assnref>
+                      <Software_ref identifier="SW:MEXP:7729"/>
+                    </Software_assnref>
+                  </SoftwareApplication>
+                </SoftwareApplications_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2384"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Target_assnref>
+              <PhysicalBioAssay_ref identifier="PBA:MEXP:2709"/>
+            </Target_assnref>
+          </ImageAcquisition>
+        </BioAssayTreatments_assnlist>
+      </PhysicalBioAssay>
+      <MeasuredBioAssay identifier="MBA:MEXP:2710">
+        <FeatureExtraction_assn>
+          <FeatureExtraction identifier="FEXT:MEXP:447:2710">
+            <PhysicalBioAssaySource_assnref>
+              <PhysicalBioAssay_ref identifier="PBA:MEXP:2710"/>
+            </PhysicalBioAssaySource_assnref>
+          </FeatureExtraction>
+        </FeatureExtraction_assn>
+        <MeasuredBioAssayData_assnreflist>
+          <MeasuredBioAssayData_ref identifier="MeasuredBioAssayData:MEXP:2710"/>
+        </MeasuredBioAssayData_assnreflist>
+      </MeasuredBioAssay>
+      <PhysicalBioAssay identifier="PBA:MEXP:2710">
+        <BioAssayCreation_assn>
+          <Hybridization identifier="HYB:MEXP:2710" name="HYBRID2752">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 20:59:52">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Corning Microarray Technology- CMT-Hyb chamber">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:CHAMBER_TYPE:7719"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="8">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Quantity of labeled target used:7720"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="16">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Time:7722"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="45">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Volume:7724"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="50">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Temperature:7726"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2383"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <LabeledExtract_ref identifier="S:Label:MEXP:3363"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <LabeledExtract_ref identifier="S:Label:MEXP:3380"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+            <Array_assnref>
+              <Array_ref identifier="AR:MEXP:447:2710"/>
+            </Array_assnref>
+          </Hybridization>
+        </BioAssayCreation_assn>
+        <BioAssayTreatments_assnlist>
+          <ImageAcquisition identifier="PBASCAN:MEXP:2710">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 21:00:46">
+                <HardwareApplications_assnlist>
+                  <HardwareApplication>
+                    <Hardware_assnref>
+                      <Hardware_ref identifier="HW:MEXP:7728"/>
+                    </Hardware_assnref>
+                  </HardwareApplication>
+                </HardwareApplications_assnlist>
+                <SoftwareApplications_assnlist>
+                  <SoftwareApplication>
+                    <Software_assnref>
+                      <Software_ref identifier="SW:MEXP:7729"/>
+                    </Software_assnref>
+                  </SoftwareApplication>
+                </SoftwareApplications_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2384"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Target_assnref>
+              <PhysicalBioAssay_ref identifier="PBA:MEXP:2710"/>
+            </Target_assnref>
+          </ImageAcquisition>
+        </BioAssayTreatments_assnlist>
+      </PhysicalBioAssay>
+      <MeasuredBioAssay identifier="MBA:MEXP:2711">
+        <FeatureExtraction_assn>
+          <FeatureExtraction identifier="FEXT:MEXP:447:2711">
+            <PhysicalBioAssaySource_assnref>
+              <PhysicalBioAssay_ref identifier="PBA:MEXP:2711"/>
+            </PhysicalBioAssaySource_assnref>
+          </FeatureExtraction>
+        </FeatureExtraction_assn>
+        <MeasuredBioAssayData_assnreflist>
+          <MeasuredBioAssayData_ref identifier="MeasuredBioAssayData:MEXP:2711"/>
+        </MeasuredBioAssayData_assnreflist>
+      </MeasuredBioAssay>
+      <PhysicalBioAssay identifier="PBA:MEXP:2711">
+        <BioAssayCreation_assn>
+          <Hybridization identifier="HYB:MEXP:2711" name="HYBRID2767">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 20:59:52">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="Corning Microarray Technology- CMT-Hyb chamber">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:CHAMBER_TYPE:7719"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="8">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Quantity of labeled target used:7720"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="16">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Time:7722"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="45">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Volume:7724"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="50">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="PARAM:MEXP:Temperature:7726"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2383"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <LabeledExtract_ref identifier="S:Label:MEXP:3362"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <LabeledExtract_ref identifier="S:Label:MEXP:3381"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+            <Array_assnref>
+              <Array_ref identifier="AR:MEXP:447:2711"/>
+            </Array_assnref>
+          </Hybridization>
+        </BioAssayCreation_assn>
+        <BioAssayTreatments_assnlist>
+          <ImageAcquisition identifier="PBASCAN:MEXP:2711">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2003-12-16 21:00:46">
+                <HardwareApplications_assnlist>
+                  <HardwareApplication>
+                    <Hardware_assnref>
+                      <Hardware_ref identifier="HW:MEXP:7728"/>
+                    </Hardware_assnref>
+                  </HardwareApplication>
+                </HardwareApplications_assnlist>
+                <SoftwareApplications_assnlist>
+                  <SoftwareApplication>
+                    <Software_assnref>
+                      <Software_ref identifier="SW:MEXP:7729"/>
+                    </Software_assnref>
+                  </SoftwareApplication>
+                </SoftwareApplications_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-2384"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Target_assnref>
+              <PhysicalBioAssay_ref identifier="PBA:MEXP:2711"/>
+            </Target_assnref>
+          </ImageAcquisition>
+        </BioAssayTreatments_assnlist>
+      </PhysicalBioAssay>
+    </BioAssay_assnlist>
+  </BioAssay_package>
+  <QuantitationType_package>
+    <QuantitationType_assnlist>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:Name" name="Name">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:ID" name="ID">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:X" name="X">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:Y" name="Y">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:Dia." name="Dia.">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:F635 Median" name="F635 Median">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:F635 Mean" name="F635 Mean">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:F635 SD" name="F635 SD">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:B635 Median" name="B635 Median">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:B635 Mean" name="B635 Mean">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:B635 SD" name="B635 SD">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:% > B635+1SD" name="% > B635+1SD">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:% > B635+2SD" name="% > B635+2SD">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:F635 % Sat." name="F635 % Sat.">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:F532 Median" name="F532 Median">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:F532 Mean" name="F532 Mean">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:F532 SD" name="F532 SD">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:B532 Median" name="B532 Median">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:B532 Mean" name="B532 Mean">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:B532 SD" name="B532 SD">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:% > B532+1SD" name="% > B532+1SD">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:% > B532+2SD" name="% > B532+2SD">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:F532 % Sat." name="F532 % Sat.">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:Ratio of Medians" name="Ratio of Medians">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:Ratio of Means" name="Ratio of Means">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:Median of Ratios" name="Median of Ratios">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:Mean of Ratios" name="Mean of Ratios">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:Ratios SD" name="Ratios SD">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:Rgn Ratio" name="Rgn Ratio">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:Rgn R²" name="Rgn R²">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:F Pixels" name="F Pixels">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:B Pixels" name="B Pixels">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:Sum of Medians" name="Sum of Medians">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:Sum of Means" name="Sum of Means">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:Log Ratio" name="Log Ratio">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:F635 Median - B635" name="F635 Median - B635">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:F532 Median - B532" name="F532 Median - B532">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:F635 Mean - B635" name="F635 Mean - B635">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:F532 Mean - B532" name="F532 Mean - B532">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:Flags" name="Flags">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:Ratio of Medians (635/532)" name="Ratio of Medians (635/532)">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:Ratio of Means (635/532)" name="Ratio of Means (635/532)">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:Median of Ratios (635/532)" name="Median of Ratios (635/532)">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:Mean of Ratios (635/532)" name="Mean of Ratios (635/532)">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:Ratios SD (635/532)" name="Ratios SD (635/532)">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:Rgn Ratio (635/532)" name="Rgn Ratio (635/532)">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:Rgn R² (635/532)" name="Rgn R² (635/532)">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:Log Ratio (635/532)" name="Log Ratio (635/532)">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:F635 Total Intensity" name="F635 Total Intensity">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:F532 Total Intensity" name="F532 Total Intensity">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:SNR 635" name="SNR 635">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:SNR 532" name="SNR 532">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+      <SpecializedQuantitationType isBackground="0" identifier="QT:Normalize" name="Normalize">
+        <Scale_assn>
+          <OntologyEntry category="Scale" value="OTHER">
+          </OntologyEntry>
+        </Scale_assn>
+        <DataType_assn>
+          <OntologyEntry category="DataType" value="float">
+          </OntologyEntry>
+        </DataType_assn>
+      </SpecializedQuantitationType>
+    </QuantitationType_assnlist>
+  </QuantitationType_package>
+  <BioAssayData_package>
+  <BioAssayDimension_assnlist>
+      <BioAssayDimension identifier="BAD:MEXP:447:2689" name="BAD:MEXP:447:2689">
+        <BioAssays_assnreflist>
+          <MeasuredBioAssay_ref identifier="MBA:MEXP:2689"/>
+        </BioAssays_assnreflist>
+      </BioAssayDimension>
+      <BioAssayDimension identifier="BAD:MEXP:447:2690" name="BAD:MEXP:447:2690">
+        <BioAssays_assnreflist>
+          <MeasuredBioAssay_ref identifier="MBA:MEXP:2690"/>
+        </BioAssays_assnreflist>
+      </BioAssayDimension>
+      <BioAssayDimension identifier="BAD:MEXP:447:2691" name="BAD:MEXP:447:2691">
+        <BioAssays_assnreflist>
+          <MeasuredBioAssay_ref identifier="MBA:MEXP:2691"/>
+        </BioAssays_assnreflist>
+      </BioAssayDimension>
+      <BioAssayDimension identifier="BAD:MEXP:447:2692" name="BAD:MEXP:447:2692">
+        <BioAssays_assnreflist>
+          <MeasuredBioAssay_ref identifier="MBA:MEXP:2692"/>
+        </BioAssays_assnreflist>
+      </BioAssayDimension>
+      <BioAssayDimension identifier="BAD:MEXP:447:2693" name="BAD:MEXP:447:2693">
+        <BioAssays_assnreflist>
+          <MeasuredBioAssay_ref identifier="MBA:MEXP:2693"/>
+        </BioAssays_assnreflist>
+      </BioAssayDimension>
+      <BioAssayDimension identifier="BAD:MEXP:447:2694" name="BAD:MEXP:447:2694">
+        <BioAssays_assnreflist>
+          <MeasuredBioAssay_ref identifier="MBA:MEXP:2694"/>
+        </BioAssays_assnreflist>
+      </BioAssayDimension>
+      <BioAssayDimension identifier="BAD:MEXP:447:2695" name="BAD:MEXP:447:2695">
+        <BioAssays_assnreflist>
+          <MeasuredBioAssay_ref identifier="MBA:MEXP:2695"/>
+        </BioAssays_assnreflist>
+      </BioAssayDimension>
+      <BioAssayDimension identifier="BAD:MEXP:447:2696" name="BAD:MEXP:447:2696">
+        <BioAssays_assnreflist>
+          <MeasuredBioAssay_ref identifier="MBA:MEXP:2696"/>
+        </BioAssays_assnreflist>
+      </BioAssayDimension>
+      <BioAssayDimension identifier="BAD:MEXP:447:2697" name="BAD:MEXP:447:2697">
+        <BioAssays_assnreflist>
+          <MeasuredBioAssay_ref identifier="MBA:MEXP:2697"/>
+        </BioAssays_assnreflist>
+      </BioAssayDimension>
+      <BioAssayDimension identifier="BAD:MEXP:447:2698" name="BAD:MEXP:447:2698">
+        <BioAssays_assnreflist>
+          <MeasuredBioAssay_ref identifier="MBA:MEXP:2698"/>
+        </BioAssays_assnreflist>
+      </BioAssayDimension>
+      <BioAssayDimension identifier="BAD:MEXP:447:2699" name="BAD:MEXP:447:2699">
+        <BioAssays_assnreflist>
+          <MeasuredBioAssay_ref identifier="MBA:MEXP:2699"/>
+        </BioAssays_assnreflist>
+      </BioAssayDimension>
+      <BioAssayDimension identifier="BAD:MEXP:447:2700" name="BAD:MEXP:447:2700">
+        <BioAssays_assnreflist>
+          <MeasuredBioAssay_ref identifier="MBA:MEXP:2700"/>
+        </BioAssays_assnreflist>
+      </BioAssayDimension>
+      <BioAssayDimension identifier="BAD:MEXP:447:2701" name="BAD:MEXP:447:2701">
+        <BioAssays_assnreflist>
+          <MeasuredBioAssay_ref identifier="MBA:MEXP:2701"/>
+        </BioAssays_assnreflist>
+      </BioAssayDimension>
+      <BioAssayDimension identifier="BAD:MEXP:447:2702" name="BAD:MEXP:447:2702">
+        <BioAssays_assnreflist>
+          <MeasuredBioAssay_ref identifier="MBA:MEXP:2702"/>
+        </BioAssays_assnreflist>
+      </BioAssayDimension>
+      <BioAssayDimension identifier="BAD:MEXP:447:2703" name="BAD:MEXP:447:2703">
+        <BioAssays_assnreflist>
+          <MeasuredBioAssay_ref identifier="MBA:MEXP:2703"/>
+        </BioAssays_assnreflist>
+      </BioAssayDimension>
+      <BioAssayDimension identifier="BAD:MEXP:447:2704" name="BAD:MEXP:447:2704">
+        <BioAssays_assnreflist>
+          <MeasuredBioAssay_ref identifier="MBA:MEXP:2704"/>
+        </BioAssays_assnreflist>
+      </BioAssayDimension>
+      <BioAssayDimension identifier="BAD:MEXP:447:2705" name="BAD:MEXP:447:2705">
+        <BioAssays_assnreflist>
+          <MeasuredBioAssay_ref identifier="MBA:MEXP:2705"/>
+        </BioAssays_assnreflist>
+      </BioAssayDimension>
+      <BioAssayDimension identifier="BAD:MEXP:447:2706" name="BAD:MEXP:447:2706">
+        <BioAssays_assnreflist>
+          <MeasuredBioAssay_ref identifier="MBA:MEXP:2706"/>
+        </BioAssays_assnreflist>
+      </BioAssayDimension>
+      <BioAssayDimension identifier="BAD:MEXP:447:2707" name="BAD:MEXP:447:2707">
+        <BioAssays_assnreflist>
+          <MeasuredBioAssay_ref identifier="MBA:MEXP:2707"/>
+        </BioAssays_assnreflist>
+      </BioAssayDimension>
+      <BioAssayDimension identifier="BAD:MEXP:447:2708" name="BAD:MEXP:447:2708">
+        <BioAssays_assnreflist>
+          <MeasuredBioAssay_ref identifier="MBA:MEXP:2708"/>
+        </BioAssays_assnreflist>
+      </BioAssayDimension>
+      <BioAssayDimension identifier="BAD:MEXP:447:2709" name="BAD:MEXP:447:2709">
+        <BioAssays_assnreflist>
+          <MeasuredBioAssay_ref identifier="MBA:MEXP:2709"/>
+        </BioAssays_assnreflist>
+      </BioAssayDimension>
+      <BioAssayDimension identifier="BAD:MEXP:447:2710" name="BAD:MEXP:447:2710">
+        <BioAssays_assnreflist>
+          <MeasuredBioAssay_ref identifier="MBA:MEXP:2710"/>
+        </BioAssays_assnreflist>
+      </BioAssayDimension>
+      <BioAssayDimension identifier="BAD:MEXP:447:2711" name="BAD:MEXP:447:2711">
+        <BioAssays_assnreflist>
+          <MeasuredBioAssay_ref identifier="MBA:MEXP:2711"/>
+        </BioAssays_assnreflist>
+      </BioAssayDimension>
+    </BioAssayDimension_assnlist>
+  <QuantitationTypeDimension_assnlist>
+      <QuantitationTypeDimension identifier="QTD:MEXP:447:2689" name="QTD:MEXP:447:2689">
+        <QuantitationTypes_assnreflist>
+          <SpecializedQuantitationType_ref identifier="QT:Name"/>
+          <SpecializedQuantitationType_ref identifier="QT:ID"/>
+          <SpecializedQuantitationType_ref identifier="QT:X"/>
+          <SpecializedQuantitationType_ref identifier="QT:Y"/>
+          <SpecializedQuantitationType_ref identifier="QT:Dia."/>
+          <SpecializedQuantitationType_ref identifier="QT:F635 Median"/>
+          <SpecializedQuantitationType_ref identifier="QT:F635 Mean"/>
+          <SpecializedQuantitationType_ref identifier="QT:F635 SD"/>
+          <SpecializedQuantitationType_ref identifier="QT:B635 Median"/>
+          <SpecializedQuantitationType_ref identifier="QT:B635 Mean"/>
+          <SpecializedQuantitationType_ref identifier="QT:B635 SD"/>
+          <SpecializedQuantitationType_ref identifier="QT:% > B635+1SD"/>
+          <SpecializedQuantitationType_ref identifier="QT:% > B635+2SD"/>
+          <SpecializedQuantitationType_ref identifier="QT:F635 % Sat."/>
+          <SpecializedQuantitationType_ref identifier="QT:F532 Median"/>
+          <SpecializedQuantitationType_ref identifier="QT:F532 Mean"/>
+          <SpecializedQuantitationType_ref identifier="QT:F532 SD"/>
+          <SpecializedQuantitationType_ref identifier="QT:B532 Median"/>
+          <SpecializedQuantitationType_ref identifier="QT:B532 Mean"/>
+          <SpecializedQuantitationType_ref identifier="QT:B532 SD"/>
+          <SpecializedQuantitationType_ref identifier="QT:% > B532+1SD"/>
+          <SpecializedQuantitationType_ref identifier="QT:% > B532+2SD"/>
+          <SpecializedQuantitationType_ref identifier="QT:F532 % Sat."/>
+          <SpecializedQuantitationType_ref identifier="QT:Ratio of Medians"/>
+          <SpecializedQuantitationType_ref identifier="QT:Ratio of Means"/>
+          <SpecializedQuantitationType_ref identifier="QT:Median of Ratios"/>
+          <SpecializedQuantitationType_ref identifier="QT:Mean of Ratios"/>
+          <SpecializedQuantitationType_ref identifier="QT:Ratios SD"/>
+          <SpecializedQuantitationType_ref identifier="QT:Rgn Ratio"/>
+          <SpecializedQuantitationType_ref identifier="QT:Rgn R²"/>
+          <SpecializedQuantitationType_ref identifier="QT:F Pixels"/>
+          <SpecializedQuantitationType_ref identifier="QT:B Pixels"/>
+          <SpecializedQuantitationType_ref identifier="QT:Sum of Medians"/>
+          <SpecializedQuantitationType_ref identifier="QT:Sum of Means"/>
+          <SpecializedQuantitationType_ref identifier="QT:Log Ratio"/>
+          <SpecializedQuantitationType_ref identifier="QT:F635 Median - B635"/>
+          <SpecializedQuantitationType_ref identifier="QT:F532 Median - B532"/>
+          <SpecializedQuantitationType_ref identifier="QT:F635 Mean - B635"/>
+          <SpecializedQuantitationType_ref identifier="QT:F532 Mean - B532"/>
+          <SpecializedQuantitationType_ref identifier="QT:Flags"/>
+        </QuantitationTypes_assnreflist>
+      </QuantitationTypeDimension>
+      <QuantitationTypeDimension identifier="QTD:MEXP:447:2694" name="QTD:MEXP:447:2694">
+        <QuantitationTypes_assnreflist>
+          <SpecializedQuantitationType_ref identifier="QT:Name"/>
+          <SpecializedQuantitationType_ref identifier="QT:ID"/>
+          <SpecializedQuantitationType_ref identifier="QT:X"/>
+          <SpecializedQuantitationType_ref identifier="QT:Y"/>
+          <SpecializedQuantitationType_ref identifier="QT:Dia."/>
+          <SpecializedQuantitationType_ref identifier="QT:F635 Median"/>
+          <SpecializedQuantitationType_ref identifier="QT:F635 Mean"/>
+          <SpecializedQuantitationType_ref identifier="QT:F635 SD"/>
+          <SpecializedQuantitationType_ref identifier="QT:B635 Median"/>
+          <SpecializedQuantitationType_ref identifier="QT:B635 Mean"/>
+          <SpecializedQuantitationType_ref identifier="QT:B635 SD"/>
+          <SpecializedQuantitationType_ref identifier="QT:% > B635+1SD"/>
+          <SpecializedQuantitationType_ref identifier="QT:% > B635+2SD"/>
+          <SpecializedQuantitationType_ref identifier="QT:F635 % Sat."/>
+          <SpecializedQuantitationType_ref identifier="QT:F532 Median"/>
+          <SpecializedQuantitationType_ref identifier="QT:F532 Mean"/>
+          <SpecializedQuantitationType_ref identifier="QT:F532 SD"/>
+          <SpecializedQuantitationType_ref identifier="QT:B532 Median"/>
+          <SpecializedQuantitationType_ref identifier="QT:B532 Mean"/>
+          <SpecializedQuantitationType_ref identifier="QT:B532 SD"/>
+          <SpecializedQuantitationType_ref identifier="QT:% > B532+1SD"/>
+          <SpecializedQuantitationType_ref identifier="QT:% > B532+2SD"/>
+          <SpecializedQuantitationType_ref identifier="QT:F532 % Sat."/>
+          <SpecializedQuantitationType_ref identifier="QT:Ratio of Medians (635/532)"/>
+          <SpecializedQuantitationType_ref identifier="QT:Ratio of Means (635/532)"/>
+          <SpecializedQuantitationType_ref identifier="QT:Median of Ratios (635/532)"/>
+          <SpecializedQuantitationType_ref identifier="QT:Mean of Ratios (635/532)"/>
+          <SpecializedQuantitationType_ref identifier="QT:Ratios SD (635/532)"/>
+          <SpecializedQuantitationType_ref identifier="QT:Rgn Ratio (635/532)"/>
+          <SpecializedQuantitationType_ref identifier="QT:Rgn R² (635/532)"/>
+          <SpecializedQuantitationType_ref identifier="QT:F Pixels"/>
+          <SpecializedQuantitationType_ref identifier="QT:B Pixels"/>
+          <SpecializedQuantitationType_ref identifier="QT:Sum of Medians"/>
+          <SpecializedQuantitationType_ref identifier="QT:Sum of Means"/>
+          <SpecializedQuantitationType_ref identifier="QT:Log Ratio (635/532)"/>
+          <SpecializedQuantitationType_ref identifier="QT:F635 Median - B635"/>
+          <SpecializedQuantitationType_ref identifier="QT:F532 Median - B532"/>
+          <SpecializedQuantitationType_ref identifier="QT:F635 Mean - B635"/>
+          <SpecializedQuantitationType_ref identifier="QT:F532 Mean - B532"/>
+          <SpecializedQuantitationType_ref identifier="QT:F635 Total Intensity"/>
+          <SpecializedQuantitationType_ref identifier="QT:F532 Total Intensity"/>
+          <SpecializedQuantitationType_ref identifier="QT:SNR 635"/>
+          <SpecializedQuantitationType_ref identifier="QT:SNR 532"/>
+          <SpecializedQuantitationType_ref identifier="QT:Flags"/>
+          <SpecializedQuantitationType_ref identifier="QT:Normalize"/>
+        </QuantitationTypes_assnreflist>
+      </QuantitationTypeDimension>
+      <QuantitationTypeDimension identifier="QTD:MEXP:447:2703" name="QTD:MEXP:447:2703">
+        <QuantitationTypes_assnreflist>
+          <SpecializedQuantitationType_ref identifier="QT:Name"/>
+          <SpecializedQuantitationType_ref identifier="QT:ID"/>
+          <SpecializedQuantitationType_ref identifier="QT:X"/>
+          <SpecializedQuantitationType_ref identifier="QT:Y"/>
+          <SpecializedQuantitationType_ref identifier="QT:Dia."/>
+          <SpecializedQuantitationType_ref identifier="QT:F635 Median"/>
+          <SpecializedQuantitationType_ref identifier="QT:F635 Mean"/>
+          <SpecializedQuantitationType_ref identifier="QT:F635 SD"/>
+          <SpecializedQuantitationType_ref identifier="QT:B635 Median"/>
+          <SpecializedQuantitationType_ref identifier="QT:B635 Mean"/>
+          <SpecializedQuantitationType_ref identifier="QT:B635 SD"/>
+          <SpecializedQuantitationType_ref identifier="QT:% > B635+1SD"/>
+          <SpecializedQuantitationType_ref identifier="QT:% > B635+2SD"/>
+          <SpecializedQuantitationType_ref identifier="QT:F635 % Sat."/>
+          <SpecializedQuantitationType_ref identifier="QT:F532 Median"/>
+          <SpecializedQuantitationType_ref identifier="QT:F532 Mean"/>
+          <SpecializedQuantitationType_ref identifier="QT:F532 SD"/>
+          <SpecializedQuantitationType_ref identifier="QT:B532 Median"/>
+          <SpecializedQuantitationType_ref identifier="QT:B532 Mean"/>
+          <SpecializedQuantitationType_ref identifier="QT:B532 SD"/>
+          <SpecializedQuantitationType_ref identifier="QT:% > B532+1SD"/>
+          <SpecializedQuantitationType_ref identifier="QT:% > B532+2SD"/>
+          <SpecializedQuantitationType_ref identifier="QT:F532 % Sat."/>
+          <SpecializedQuantitationType_ref identifier="QT:Ratio of Medians (635/532)"/>
+          <SpecializedQuantitationType_ref identifier="QT:Ratio of Means (635/532)"/>
+          <SpecializedQuantitationType_ref identifier="QT:Median of Ratios (635/532)"/>
+          <SpecializedQuantitationType_ref identifier="QT:Mean of Ratios (635/532)"/>
+          <SpecializedQuantitationType_ref identifier="QT:Ratios SD (635/532)"/>
+          <SpecializedQuantitationType_ref identifier="QT:Rgn Ratio (635/532)"/>
+          <SpecializedQuantitationType_ref identifier="QT:Rgn R² (635/532)"/>
+          <SpecializedQuantitationType_ref identifier="QT:F Pixels"/>
+          <SpecializedQuantitationType_ref identifier="QT:B Pixels"/>
+          <SpecializedQuantitationType_ref identifier="QT:Sum of Medians"/>
+          <SpecializedQuantitationType_ref identifier="QT:Sum of Means"/>
+          <SpecializedQuantitationType_ref identifier="QT:Log Ratio (635/532)"/>
+          <SpecializedQuantitationType_ref identifier="QT:F635 Median - B635"/>
+          <SpecializedQuantitationType_ref identifier="QT:F532 Median - B532"/>
+          <SpecializedQuantitationType_ref identifier="QT:F635 Mean - B635"/>
+          <SpecializedQuantitationType_ref identifier="QT:F532 Mean - B532"/>
+          <SpecializedQuantitationType_ref identifier="QT:Flags"/>
+        </QuantitationTypes_assnreflist>
+      </QuantitationTypeDimension>
+    </QuantitationTypeDimension_assnlist>
+  <BioAssayData_assnlist>
+      <MeasuredBioAssayData identifier="MeasuredBioAssayData:MEXP:2689">
+        <BioAssayDimension_assnref>
+          <BioAssayDimension_ref identifier="BAD:MEXP:447:2689"/>
+        </BioAssayDimension_assnref>
+        <DesignElementDimension_assnref>
+          <FeatureDimension_ref identifier="DED:MEXP:2689"/>
+        </DesignElementDimension_assnref>
+        <QuantitationTypeDimension_assnref>
+          <QuantitationTypeDimension_ref identifier="QTD:MEXP:447:2689"/>
+        </QuantitationTypeDimension_assnref>
+        <BioDataValues_assn>
+          <BioDataCube order="BDQ">
+            <DataExternal_assn>
+              <DataExternal filenameURI="2520_hepcyt_hnf1a.txt" dataFormat="tab delimited"/>
+            </DataExternal_assn>
+          </BioDataCube>
+        </BioDataValues_assn>
+      </MeasuredBioAssayData>
+      <MeasuredBioAssayData identifier="MeasuredBioAssayData:MEXP:2690">
+        <BioAssayDimension_assnref>
+          <BioAssayDimension_ref identifier="BAD:MEXP:447:2690"/>
+        </BioAssayDimension_assnref>
+        <DesignElementDimension_assnref>
+          <FeatureDimension_ref identifier="DED:MEXP:2689"/>
+        </DesignElementDimension_assnref>
+        <QuantitationTypeDimension_assnref>
+          <QuantitationTypeDimension_ref identifier="QTD:MEXP:447:2689"/>
+        </QuantitationTypeDimension_assnref>
+        <BioDataValues_assn>
+          <BioDataCube order="BDQ">
+            <DataExternal_assn>
+              <DataExternal filenameURI="2522_hepcyt_hnf4a.txt" dataFormat="tab delimited"/>
+            </DataExternal_assn>
+          </BioDataCube>
+        </BioDataValues_assn>
+      </MeasuredBioAssayData>
+      <MeasuredBioAssayData identifier="MeasuredBioAssayData:MEXP:2691">
+        <BioAssayDimension_assnref>
+          <BioAssayDimension_ref identifier="BAD:MEXP:447:2691"/>
+        </BioAssayDimension_assnref>
+        <DesignElementDimension_assnref>
+          <FeatureDimension_ref identifier="DED:MEXP:2689"/>
+        </DesignElementDimension_assnref>
+        <QuantitationTypeDimension_assnref>
+          <QuantitationTypeDimension_ref identifier="QTD:MEXP:447:2689"/>
+        </QuantitationTypeDimension_assnref>
+        <BioDataValues_assn>
+          <BioDataCube order="BDQ">
+            <DataExternal_assn>
+              <DataExternal filenameURI="2633_hnf1a_hepcyts.txt" dataFormat="tab delimited"/>
+            </DataExternal_assn>
+          </BioDataCube>
+        </BioDataValues_assn>
+      </MeasuredBioAssayData>
+      <MeasuredBioAssayData identifier="MeasuredBioAssayData:MEXP:2692">
+        <BioAssayDimension_assnref>
+          <BioAssayDimension_ref identifier="BAD:MEXP:447:2692"/>
+        </BioAssayDimension_assnref>
+        <DesignElementDimension_assnref>
+          <FeatureDimension_ref identifier="DED:MEXP:2689"/>
+        </DesignElementDimension_assnref>
+        <QuantitationTypeDimension_assnref>
+          <QuantitationTypeDimension_ref identifier="QTD:MEXP:447:2689"/>
+        </QuantitationTypeDimension_assnref>
+        <BioDataValues_assn>
+          <BioDataCube order="BDQ">
+            <DataExternal_assn>
+              <DataExternal filenameURI="2634_hnf1a_hepcyts.txt" dataFormat="tab delimited"/>
+            </DataExternal_assn>
+          </BioDataCube>
+        </BioDataValues_assn>
+      </MeasuredBioAssayData>
+      <MeasuredBioAssayData identifier="MeasuredBioAssayData:MEXP:2693">
+        <BioAssayDimension_assnref>
+          <BioAssayDimension_ref identifier="BAD:MEXP:447:2693"/>
+        </BioAssayDimension_assnref>
+        <DesignElementDimension_assnref>
+          <FeatureDimension_ref identifier="DED:MEXP:2689"/>
+        </DesignElementDimension_assnref>
+        <QuantitationTypeDimension_assnref>
+          <QuantitationTypeDimension_ref identifier="QTD:MEXP:447:2689"/>
+        </QuantitationTypeDimension_assnref>
+        <BioDataValues_assn>
+          <BioDataCube order="BDQ">
+            <DataExternal_assn>
+              <DataExternal filenameURI="2635_hnf4a_hepcyts.txt" dataFormat="tab delimited"/>
+            </DataExternal_assn>
+          </BioDataCube>
+        </BioDataValues_assn>
+      </MeasuredBioAssayData>
+      <MeasuredBioAssayData identifier="MeasuredBioAssayData:MEXP:2694">
+        <BioAssayDimension_assnref>
+          <BioAssayDimension_ref identifier="BAD:MEXP:447:2694"/>
+        </BioAssayDimension_assnref>
+        <DesignElementDimension_assnref>
+          <FeatureDimension_ref identifier="DED:MEXP:2694"/>
+        </DesignElementDimension_assnref>
+        <QuantitationTypeDimension_assnref>
+          <QuantitationTypeDimension_ref identifier="QTD:MEXP:447:2694"/>
+        </QuantitationTypeDimension_assnref>
+        <BioDataValues_assn>
+          <BioDataCube order="BDQ">
+            <DataExternal_assn>
+              <DataExternal filenameURI="2712_hnf1a_islet.txt" dataFormat="tab delimited"/>
+            </DataExternal_assn>
+          </BioDataCube>
+        </BioDataValues_assn>
+      </MeasuredBioAssayData>
+      <MeasuredBioAssayData identifier="MeasuredBioAssayData:MEXP:2695">
+        <BioAssayDimension_assnref>
+          <BioAssayDimension_ref identifier="BAD:MEXP:447:2695"/>
+        </BioAssayDimension_assnref>
+        <DesignElementDimension_assnref>
+          <FeatureDimension_ref identifier="DED:MEXP:2694"/>
+        </DesignElementDimension_assnref>
+        <QuantitationTypeDimension_assnref>
+          <QuantitationTypeDimension_ref identifier="QTD:MEXP:447:2689"/>
+        </QuantitationTypeDimension_assnref>
+        <BioDataValues_assn>
+          <BioDataCube order="BDQ">
+            <DataExternal_assn>
+              <DataExternal filenameURI="2718_pol2_islet.txt" dataFormat="tab delimited"/>
+            </DataExternal_assn>
+          </BioDataCube>
+        </BioDataValues_assn>
+      </MeasuredBioAssayData>
+      <MeasuredBioAssayData identifier="MeasuredBioAssayData:MEXP:2696">
+        <BioAssayDimension_assnref>
+          <BioAssayDimension_ref identifier="BAD:MEXP:447:2696"/>
+        </BioAssayDimension_assnref>
+        <DesignElementDimension_assnref>
+          <FeatureDimension_ref identifier="DED:MEXP:2696"/>
+        </DesignElementDimension_assnref>
+        <QuantitationTypeDimension_assnref>
+          <QuantitationTypeDimension_ref identifier="QTD:MEXP:447:2689"/>
+        </QuantitationTypeDimension_assnref>
+        <BioDataValues_assn>
+          <BioDataCube order="BDQ">
+            <DataExternal_assn>
+              <DataExternal filenameURI="2719_pol2_hepcyt.txt" dataFormat="tab delimited"/>
+            </DataExternal_assn>
+          </BioDataCube>
+        </BioDataValues_assn>
+      </MeasuredBioAssayData>
+      <MeasuredBioAssayData identifier="MeasuredBioAssayData:MEXP:2697">
+        <BioAssayDimension_assnref>
+          <BioAssayDimension_ref identifier="BAD:MEXP:447:2697"/>
+        </BioAssayDimension_assnref>
+        <DesignElementDimension_assnref>
+          <FeatureDimension_ref identifier="DED:MEXP:2694"/>
+        </DesignElementDimension_assnref>
+        <QuantitationTypeDimension_assnref>
+          <QuantitationTypeDimension_ref identifier="QTD:MEXP:447:2689"/>
+        </QuantitationTypeDimension_assnref>
+        <BioDataValues_assn>
+          <BioDataCube order="BDQ">
+            <DataExternal_assn>
+              <DataExternal filenameURI="2720_pol2_hepcyt.txt" dataFormat="tab delimited"/>
+            </DataExternal_assn>
+          </BioDataCube>
+        </BioDataValues_assn>
+      </MeasuredBioAssayData>
+      <MeasuredBioAssayData identifier="MeasuredBioAssayData:MEXP:2698">
+        <BioAssayDimension_assnref>
+          <BioAssayDimension_ref identifier="BAD:MEXP:447:2698"/>
+        </BioAssayDimension_assnref>
+        <DesignElementDimension_assnref>
+          <FeatureDimension_ref identifier="DED:MEXP:2694"/>
+        </DesignElementDimension_assnref>
+        <QuantitationTypeDimension_assnref>
+          <QuantitationTypeDimension_ref identifier="QTD:MEXP:447:2689"/>
+        </QuantitationTypeDimension_assnref>
+        <BioDataValues_assn>
+          <BioDataCube order="BDQ">
+            <DataExternal_assn>
+              <DataExternal filenameURI="2724_hnf1a_islet.txt" dataFormat="tab delimited"/>
+            </DataExternal_assn>
+          </BioDataCube>
+        </BioDataValues_assn>
+      </MeasuredBioAssayData>
+      <MeasuredBioAssayData identifier="MeasuredBioAssayData:MEXP:2699">
+        <BioAssayDimension_assnref>
+          <BioAssayDimension_ref identifier="BAD:MEXP:447:2699"/>
+        </BioAssayDimension_assnref>
+        <DesignElementDimension_assnref>
+          <FeatureDimension_ref identifier="DED:MEXP:2694"/>
+        </DesignElementDimension_assnref>
+        <QuantitationTypeDimension_assnref>
+          <QuantitationTypeDimension_ref identifier="QTD:MEXP:447:2689"/>
+        </QuantitationTypeDimension_assnref>
+        <BioDataValues_assn>
+          <BioDataCube order="BDQ">
+            <DataExternal_assn>
+              <DataExternal filenameURI="2735_hnf1a_islet.txt" dataFormat="tab delimited"/>
+            </DataExternal_assn>
+          </BioDataCube>
+        </BioDataValues_assn>
+      </MeasuredBioAssayData>
+      <MeasuredBioAssayData identifier="MeasuredBioAssayData:MEXP:2700">
+        <BioAssayDimension_assnref>
+          <BioAssayDimension_ref identifier="BAD:MEXP:447:2700"/>
+        </BioAssayDimension_assnref>
+        <DesignElementDimension_assnref>
+          <FeatureDimension_ref identifier="DED:MEXP:2694"/>
+        </DesignElementDimension_assnref>
+        <QuantitationTypeDimension_assnref>
+          <QuantitationTypeDimension_ref identifier="QTD:MEXP:447:2689"/>
+        </QuantitationTypeDimension_assnref>
+        <BioDataValues_assn>
+          <BioDataCube order="BDQ">
+            <DataExternal_assn>
+              <DataExternal filenameURI="2736_pol2_islet.txt" dataFormat="tab delimited"/>
+            </DataExternal_assn>
+          </BioDataCube>
+        </BioDataValues_assn>
+      </MeasuredBioAssayData>
+      <MeasuredBioAssayData identifier="MeasuredBioAssayData:MEXP:2701">
+        <BioAssayDimension_assnref>
+          <BioAssayDimension_ref identifier="BAD:MEXP:447:2701"/>
+        </BioAssayDimension_assnref>
+        <DesignElementDimension_assnref>
+          <FeatureDimension_ref identifier="DED:MEXP:2694"/>
+        </DesignElementDimension_assnref>
+        <QuantitationTypeDimension_assnref>
+          <QuantitationTypeDimension_ref identifier="QTD:MEXP:447:2689"/>
+        </QuantitationTypeDimension_assnref>
+        <BioDataValues_assn>
+          <BioDataCube order="BDQ">
+            <DataExternal_assn>
+              <DataExternal filenameURI="2737_pol2_islet.txt" dataFormat="tab delimited"/>
+            </DataExternal_assn>
+          </BioDataCube>
+        </BioDataValues_assn>
+      </MeasuredBioAssayData>
+      <MeasuredBioAssayData identifier="MeasuredBioAssayData:MEXP:2702">
+        <BioAssayDimension_assnref>
+          <BioAssayDimension_ref identifier="BAD:MEXP:447:2702"/>
+        </BioAssayDimension_assnref>
+        <DesignElementDimension_assnref>
+          <FeatureDimension_ref identifier="DED:MEXP:2694"/>
+        </DesignElementDimension_assnref>
+        <QuantitationTypeDimension_assnref>
+          <QuantitationTypeDimension_ref identifier="QTD:MEXP:447:2689"/>
+        </QuantitationTypeDimension_assnref>
+        <BioDataValues_assn>
+          <BioDataCube order="BDQ">
+            <DataExternal_assn>
+              <DataExternal filenameURI="9001_HNF6_islet.txt" dataFormat="tab delimited"/>
+            </DataExternal_assn>
+          </BioDataCube>
+        </BioDataValues_assn>
+      </MeasuredBioAssayData>
+      <MeasuredBioAssayData identifier="MeasuredBioAssayData:MEXP:2703">
+        <BioAssayDimension_assnref>
+          <BioAssayDimension_ref identifier="BAD:MEXP:447:2703"/>
+        </BioAssayDimension_assnref>
+        <DesignElementDimension_assnref>
+          <FeatureDimension_ref identifier="DED:MEXP:2694"/>
+        </DesignElementDimension_assnref>
+        <QuantitationTypeDimension_assnref>
+          <QuantitationTypeDimension_ref identifier="QTD:MEXP:447:2703"/>
+        </QuantitationTypeDimension_assnref>
+        <BioDataValues_assn>
+          <BioDataCube order="BDQ">
+            <DataExternal_assn>
+              <DataExternal filenameURI="9002_HNF6_islet.txt" dataFormat="tab delimited"/>
+            </DataExternal_assn>
+          </BioDataCube>
+        </BioDataValues_assn>
+      </MeasuredBioAssayData>
+      <MeasuredBioAssayData identifier="MeasuredBioAssayData:MEXP:2704">
+        <BioAssayDimension_assnref>
+          <BioAssayDimension_ref identifier="BAD:MEXP:447:2704"/>
+        </BioAssayDimension_assnref>
+        <DesignElementDimension_assnref>
+          <FeatureDimension_ref identifier="DED:MEXP:2694"/>
+        </DesignElementDimension_assnref>
+        <QuantitationTypeDimension_assnref>
+          <QuantitationTypeDimension_ref identifier="QTD:MEXP:447:2703"/>
+        </QuantitationTypeDimension_assnref>
+        <BioDataValues_assn>
+          <BioDataCube order="BDQ">
+            <DataExternal_assn>
+              <DataExternal filenameURI="9003_HNF6_islet.txt" dataFormat="tab delimited"/>
+            </DataExternal_assn>
+          </BioDataCube>
+        </BioDataValues_assn>
+      </MeasuredBioAssayData>
+      <MeasuredBioAssayData identifier="MeasuredBioAssayData:MEXP:2705">
+        <BioAssayDimension_assnref>
+          <BioAssayDimension_ref identifier="BAD:MEXP:447:2705"/>
+        </BioAssayDimension_assnref>
+        <DesignElementDimension_assnref>
+          <FeatureDimension_ref identifier="DED:MEXP:2705"/>
+        </DesignElementDimension_assnref>
+        <QuantitationTypeDimension_assnref>
+          <QuantitationTypeDimension_ref identifier="QTD:MEXP:447:2694"/>
+        </QuantitationTypeDimension_assnref>
+        <BioDataValues_assn>
+          <BioDataCube order="BDQ">
+            <DataExternal_assn>
+              <DataExternal filenameURI="2632_hnf4a_islets.txt" dataFormat="tab delimited"/>
+            </DataExternal_assn>
+          </BioDataCube>
+        </BioDataValues_assn>
+      </MeasuredBioAssayData>
+      <MeasuredBioAssayData identifier="MeasuredBioAssayData:MEXP:2706">
+        <BioAssayDimension_assnref>
+          <BioAssayDimension_ref identifier="BAD:MEXP:447:2706"/>
+        </BioAssayDimension_assnref>
+        <DesignElementDimension_assnref>
+          <FeatureDimension_ref identifier="DED:MEXP:2705"/>
+        </DesignElementDimension_assnref>
+        <QuantitationTypeDimension_assnref>
+          <QuantitationTypeDimension_ref identifier="QTD:MEXP:447:2694"/>
+        </QuantitationTypeDimension_assnref>
+        <BioDataValues_assn>
+          <BioDataCube order="BDQ">
+            <DataExternal_assn>
+              <DataExternal filenameURI="2711_hnf4a_islet.txt" dataFormat="tab delimited"/>
+            </DataExternal_assn>
+          </BioDataCube>
+        </BioDataValues_assn>
+      </MeasuredBioAssayData>
+      <MeasuredBioAssayData identifier="MeasuredBioAssayData:MEXP:2707">
+        <BioAssayDimension_assnref>
+          <BioAssayDimension_ref identifier="BAD:MEXP:447:2707"/>
+        </BioAssayDimension_assnref>
+        <DesignElementDimension_assnref>
+          <FeatureDimension_ref identifier="DED:MEXP:2705"/>
+        </DesignElementDimension_assnref>
+        <QuantitationTypeDimension_assnref>
+          <QuantitationTypeDimension_ref identifier="QTD:MEXP:447:2694"/>
+        </QuantitationTypeDimension_assnref>
+        <BioDataValues_assn>
+          <BioDataCube order="BDQ">
+            <DataExternal_assn>
+              <DataExternal filenameURI="2816_hnf4a_islet.txt" dataFormat="tab delimited"/>
+            </DataExternal_assn>
+          </BioDataCube>
+        </BioDataValues_assn>
+      </MeasuredBioAssayData>
+      <MeasuredBioAssayData identifier="MeasuredBioAssayData:MEXP:2708">
+        <BioAssayDimension_assnref>
+          <BioAssayDimension_ref identifier="BAD:MEXP:447:2708"/>
+        </BioAssayDimension_assnref>
+        <DesignElementDimension_assnref>
+          <FeatureDimension_ref identifier="DED:MEXP:2694"/>
+        </DesignElementDimension_assnref>
+        <QuantitationTypeDimension_assnref>
+          <QuantitationTypeDimension_ref identifier="QTD:MEXP:447:2689"/>
+        </QuantitationTypeDimension_assnref>
+        <BioDataValues_assn>
+          <BioDataCube order="BDQ">
+            <DataExternal_assn>
+              <DataExternal filenameURI="2740_Pol2_hepcyt.txt" dataFormat="tab delimited"/>
+            </DataExternal_assn>
+          </BioDataCube>
+        </BioDataValues_assn>
+      </MeasuredBioAssayData>
+      <MeasuredBioAssayData identifier="MeasuredBioAssayData:MEXP:2709">
+        <BioAssayDimension_assnref>
+          <BioAssayDimension_ref identifier="BAD:MEXP:447:2709"/>
+        </BioAssayDimension_assnref>
+        <DesignElementDimension_assnref>
+          <FeatureDimension_ref identifier="DED:MEXP:2694"/>
+        </DesignElementDimension_assnref>
+        <QuantitationTypeDimension_assnref>
+          <QuantitationTypeDimension_ref identifier="QTD:MEXP:447:2689"/>
+        </QuantitationTypeDimension_assnref>
+        <BioDataValues_assn>
+          <BioDataCube order="BDQ">
+            <DataExternal_assn>
+              <DataExternal filenameURI="2748_hnf4a6556_hepcyt.txt" dataFormat="tab delimited"/>
+            </DataExternal_assn>
+          </BioDataCube>
+        </BioDataValues_assn>
+      </MeasuredBioAssayData>
+      <MeasuredBioAssayData identifier="MeasuredBioAssayData:MEXP:2710">
+        <BioAssayDimension_assnref>
+          <BioAssayDimension_ref identifier="BAD:MEXP:447:2710"/>
+        </BioAssayDimension_assnref>
+        <DesignElementDimension_assnref>
+          <FeatureDimension_ref identifier="DED:MEXP:2694"/>
+        </DesignElementDimension_assnref>
+        <QuantitationTypeDimension_assnref>
+          <QuantitationTypeDimension_ref identifier="QTD:MEXP:447:2689"/>
+        </QuantitationTypeDimension_assnref>
+        <BioDataValues_assn>
+          <BioDataCube order="BDQ">
+            <DataExternal_assn>
+              <DataExternal filenameURI="2752_hnf6_hepcyt.txt" dataFormat="tab delimited"/>
+            </DataExternal_assn>
+          </BioDataCube>
+        </BioDataValues_assn>
+      </MeasuredBioAssayData>
+      <MeasuredBioAssayData identifier="MeasuredBioAssayData:MEXP:2711">
+        <BioAssayDimension_assnref>
+          <BioAssayDimension_ref identifier="BAD:MEXP:447:2711"/>
+        </BioAssayDimension_assnref>
+        <DesignElementDimension_assnref>
+          <FeatureDimension_ref identifier="DED:MEXP:2694"/>
+        </DesignElementDimension_assnref>
+        <QuantitationTypeDimension_assnref>
+          <QuantitationTypeDimension_ref identifier="QTD:MEXP:447:2689"/>
+        </QuantitationTypeDimension_assnref>
+        <BioDataValues_assn>
+          <BioDataCube order="BDQ">
+            <DataExternal_assn>
+              <DataExternal filenameURI="2767_hnf6_hepcyt.txt" dataFormat="tab delimited"/>
+            </DataExternal_assn>
+          </BioDataCube>
+        </BioDataValues_assn>
+      </MeasuredBioAssayData>
+    </BioAssayData_assnlist>
+</BioAssayData_package>
+  <Experiment_package>
+    <Experiment_assnlist>
+      <Experiment identifier="E-SMDB-68" name="Odom_ChIP">
+        <Descriptions_assnlist>
+          <Description text="Here, we use chromatin immunoprecipitation combined with promoter microarrays to identify the genes occupied by the transcriptional regulators HNF1a, HNF4a and HNF6, together with RNA polymerase II, in human liver and pancreatic islets.">
+            <Annotations_assnlist>
+              <OntologyEntry category="ReleaseDate" value="2004-07-15">
+              </OntologyEntry>
+              <OntologyEntry category="SubmissionDate" value="2003-12-19 16:22:58">
+              </OntologyEntry>
+            </Annotations_assnlist>
+          </Description>
+          <Description>
+            <BibliographicReferences_assnlist>
+              <BibliographicReference volume="304" title="Control of Pancreas and Liver Gene Expression by HNF Transcription Factors" year="2004" publication="Science" pages="0-0">
+                <Parameters_assnlist>
+                  <OntologyEntry category="PublicationType" value="journal_article">
+                  </OntologyEntry>
+                </Parameters_assnlist>
+<!--manually add pubmed id-->
+	      <Accessions_assnlist>
+                  <DatabaseEntry accession="14988562">
+                    <Database_assnref>
+                      <Database_ref identifier="ebi.ac.uk:Database:pubmed"/>
+                    </Database_assnref>
+                  </DatabaseEntry>
+                </Accessions_assnlist>
+              </BibliographicReference>
+            </BibliographicReferences_assnlist>
+          </Description>
+        </Descriptions_assnlist>
+        <Providers_assnreflist>
+          <Person_ref identifier="PERS:Robert_Latek:latek"/>
+        </Providers_assnreflist>
+        <BioAssays_assnreflist>
+          <MeasuredBioAssay_ref identifier="MBA:MEXP:2689"/>
+          <MeasuredBioAssay_ref identifier="MBA:MEXP:2690"/>
+          <MeasuredBioAssay_ref identifier="MBA:MEXP:2691"/>
+          <MeasuredBioAssay_ref identifier="MBA:MEXP:2692"/>
+          <MeasuredBioAssay_ref identifier="MBA:MEXP:2693"/>
+          <MeasuredBioAssay_ref identifier="MBA:MEXP:2694"/>
+          <MeasuredBioAssay_ref identifier="MBA:MEXP:2695"/>
+          <MeasuredBioAssay_ref identifier="MBA:MEXP:2696"/>
+          <MeasuredBioAssay_ref identifier="MBA:MEXP:2697"/>
+          <MeasuredBioAssay_ref identifier="MBA:MEXP:2698"/>
+          <MeasuredBioAssay_ref identifier="MBA:MEXP:2699"/>
+          <MeasuredBioAssay_ref identifier="MBA:MEXP:2700"/>
+          <MeasuredBioAssay_ref identifier="MBA:MEXP:2701"/>
+          <MeasuredBioAssay_ref identifier="MBA:MEXP:2702"/>
+          <MeasuredBioAssay_ref identifier="MBA:MEXP:2703"/>
+          <MeasuredBioAssay_ref identifier="MBA:MEXP:2704"/>
+          <MeasuredBioAssay_ref identifier="MBA:MEXP:2705"/>
+          <MeasuredBioAssay_ref identifier="MBA:MEXP:2706"/>
+          <MeasuredBioAssay_ref identifier="MBA:MEXP:2707"/>
+          <MeasuredBioAssay_ref identifier="MBA:MEXP:2708"/>
+          <MeasuredBioAssay_ref identifier="MBA:MEXP:2709"/>
+          <MeasuredBioAssay_ref identifier="MBA:MEXP:2710"/>
+          <MeasuredBioAssay_ref identifier="MBA:MEXP:2711"/>
+          <PhysicalBioAssay_ref identifier="PBA:MEXP:2689"/>
+          <PhysicalBioAssay_ref identifier="PBA:MEXP:2690"/>
+          <PhysicalBioAssay_ref identifier="PBA:MEXP:2691"/>
+          <PhysicalBioAssay_ref identifier="PBA:MEXP:2692"/>
+          <PhysicalBioAssay_ref identifier="PBA:MEXP:2693"/>
+          <PhysicalBioAssay_ref identifier="PBA:MEXP:2694"/>
+          <PhysicalBioAssay_ref identifier="PBA:MEXP:2695"/>
+          <PhysicalBioAssay_ref identifier="PBA:MEXP:2696"/>
+          <PhysicalBioAssay_ref identifier="PBA:MEXP:2697"/>
+          <PhysicalBioAssay_ref identifier="PBA:MEXP:2698"/>
+          <PhysicalBioAssay_ref identifier="PBA:MEXP:2699"/>
+          <PhysicalBioAssay_ref identifier="PBA:MEXP:2700"/>
+          <PhysicalBioAssay_ref identifier="PBA:MEXP:2701"/>
+          <PhysicalBioAssay_ref identifier="PBA:MEXP:2702"/>
+          <PhysicalBioAssay_ref identifier="PBA:MEXP:2703"/>
+          <PhysicalBioAssay_ref identifier="PBA:MEXP:2704"/>
+          <PhysicalBioAssay_ref identifier="PBA:MEXP:2705"/>
+          <PhysicalBioAssay_ref identifier="PBA:MEXP:2706"/>
+          <PhysicalBioAssay_ref identifier="PBA:MEXP:2707"/>
+          <PhysicalBioAssay_ref identifier="PBA:MEXP:2708"/>
+          <PhysicalBioAssay_ref identifier="PBA:MEXP:2709"/>
+          <PhysicalBioAssay_ref identifier="PBA:MEXP:2710"/>
+          <PhysicalBioAssay_ref identifier="PBA:MEXP:2711"/>
+        </BioAssays_assnreflist>
+        <!--ExperimentDesign_assn-->
+	  <ExperimentDesigns_assnlist>
+          <ExperimentDesign>
+            <Types_assnlist>
+              <OntologyEntry category="BioMolecularAnnotation" value="binding_site_identification_design">
+              </OntologyEntry>
+            </Types_assnlist>
+            <ExperimentalFactors_assnlist>
+              <ExperimentalFactor identifier="EF:MEXP:447:435">
+                <Category_assn>
+                  <!--OntologyEntry category="ExperimentalFactorCategory" value="organism part"-->
+                  <OntologyEntry category="BioMaterialCharacteristicCategory" value="organism_part">
+                  </OntologyEntry>
+                </Category_assn>
+              </ExperimentalFactor>
+              <!--ExperimentalFactor identifier="EF:MEXP:447:438">
+                <Category_assn>
+                  <OntologyEntry category="ExperimentalFactorCategory" value="species">
+                  </OntologyEntry>
+                </Category_assn>
+              </ExperimentalFactor>
+              <ExperimentalFactor identifier="EF:MEXP:447:442">
+                <Category_assn>
+                  <OntologyEntry category="ExperimentalFactorCategory" value="tissue type">
+                  </OntologyEntry>
+                </Category_assn>
+              </ExperimentalFactor-->
+            </ExperimentalFactors_assnlist>
+            <QualityControlDescription_assn>
+              <Description>
+              </Description>
+            </QualityControlDescription_assn>
+          </ExperimentDesign>
+        </ExperimentDesigns_assnlist>
+      </Experiment>
+    </Experiment_assnlist>
+  </Experiment_package>
+</MAGE-ML>
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/TestAcquisitionVO.pm b/lib/perl/RAD/MR_T/MageImport/Test/TestAcquisitionVO.pm
new file mode 100644
index 0000000..d3514c9
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/TestAcquisitionVO.pm
@@ -0,0 +1,112 @@
+package RAD::MR_T::MageImport::Test::TestAcquisitionVO;
+use base qw(Test::Unit::TestCase);
+
+use RAD::MR_T::MageImport::VO::OntologyEntryVO;
+use RAD::MR_T::MageImport::VO::AcquisitionVO;
+use RAD::MR_T::MageImport::VO::ParameterValueVO;
+
+
+sub new {
+  my $self = shift()->SUPER::new(@_);
+  $self->{vo} = undef;
+  return $self;
+}
+
+sub set_up {
+  my $self = shift;
+  $self->{vo} = RAD::MR_T::MageImport::VO::AcquisitionVO->new({name=>"test",
+                                                               uri=>"test", 
+                                                               channels=>[RAD::MR_T::MageImport::VO::OntologyEntryVO->new()], 
+                                                               quantifications=>[RAD::MR_T::MageImport::VO::QuantificationVO->new()],
+                                                               parameterValues=>[RAD::MR_T::MageImport::VO::ParameterValueVO->new({parameterName => 'testName', value => 'testValue'}),
+                                                                                ],
+                                                              });
+}
+
+
+sub test_construct{
+  my $self = shift;
+  $self->assert(UNIVERSAL::isa($self->{vo},'RAD::MR_T::MageImport::VO::AcquisitionVO'), "check object type ok");
+  $self->assert_not_null($self->{vo});
+}
+
+sub test_getName {
+  my $self = shift;
+  my $setValue = $self->{vo}->getName();
+  $self->assert("test" eq $setValue);
+}
+
+sub test_setName {
+  my $self = shift;
+  $self->{vo}->setName("test2");
+  my $setValue = $self->{vo}->getName();
+  $self->assert("test2" eq $setValue);
+}
+
+sub test_getUri {
+  my $self = shift;
+  my $setValue = $self->{vo}->getUri();
+  $self->assert("test" eq $setValue);
+}
+
+sub test_setUri {
+  my $self = shift;
+  $self->{vo}->setUri("test2");
+  my $setValue = $self->{vo}->getUri();
+  $self->assert("test2" eq $setValue);
+}
+
+sub test_getChannels {
+  my ($self) = @_;
+  my $setValue = $self->{vo}->getChannels();
+  $self->assert(UNIVERSAL::isa($setValue->[0],'RAD::MR_T::MageImport::VO::OntologyEntryVO'), "check object type ok");
+}
+
+sub test_setChannels {
+  my $self = shift;
+  $self->{vo}->setChannels([RAD::MR_T::MageImport::VO::OntologyEntryVO->new()]);
+  my $setValue = $self->{vo}->getChannels();
+  $self->assert(UNIVERSAL::isa($setValue->[0],'RAD::MR_T::MageImport::VO::OntologyEntryVO'), "check object type ok");
+}
+
+sub test_addChannels {
+  my $self = shift;
+  $self->{vo}->addChannels((RAD::MR_T::MageImport::VO::OntologyEntryVO->new()));
+  my $setValue = $self->{vo}->getChannels();
+  $self->assert(UNIVERSAL::isa($setValue->[1],'RAD::MR_T::MageImport::VO::OntologyEntryVO'), "check added OntologyEntry object type");
+}
+
+sub test_getQuantifications {
+  my ($self) = @_;
+  my $setValue = $self->{vo}->getQuantifications();
+  $self->assert(UNIVERSAL::isa($setValue->[0],'RAD::MR_T::MageImport::VO::QuantificationVO'), "check object type ok");
+}
+
+sub test_setQuantifications {
+  my $self = shift;
+  $self->{vo}->setQuantifications([RAD::MR_T::MageImport::VO::QuantificationVO->new()]);
+  my $setValue = $self->{vo}->getQuantifications();
+  $self->assert(UNIVERSAL::isa($setValue->[0],'RAD::MR_T::MageImport::VO::QuantificationVO'), "check object type ok");
+}
+
+sub test_getParameterValues {
+  my ($self) = @_;
+  my $setValue = $self->{vo}->getParameterValues();
+  $self->assert(UNIVERSAL::isa($setValue->[0],'RAD::MR_T::MageImport::VO::ParameterValueVO'), "check object type ok");
+  $self->assert_equals('testValue', $setValue->[0]->getValue);
+}
+
+sub test_setParameterValues {
+  my $self = shift;
+  $self->{vo}->setParameterValues([RAD::MR_T::MageImport::VO::ParameterValueVO->new({value => 'newValue'})]);
+  my $setValue = $self->{vo}->getParameterValues();
+  $self->assert(UNIVERSAL::isa($setValue->[0],'RAD::MR_T::MageImport::VO::ParameterValueVO'), "check object type ok");
+  $self->assert_equals('newValue', $setValue->[0]->getValue);
+}
+
+sub tear_down {
+  my $self = shift;
+  $self->{vo} = undef;
+}
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/TestAffiliationVO.pm b/lib/perl/RAD/MR_T/MageImport/Test/TestAffiliationVO.pm
new file mode 100644
index 0000000..2416b8c
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/TestAffiliationVO.pm
@@ -0,0 +1,93 @@
+package RAD::MR_T::MageImport::Test::TestAffiliationVO;
+use base qw(Test::Unit::TestCase);
+
+use RAD::MR_T::MageImport::VO::AffiliationVO;
+
+sub new {
+  my $self = shift()->SUPER::new(@_);
+  $self->{vo} = undef;
+  return $self;
+}
+
+sub set_up {
+  my $self = shift;
+  $self->{vo} = RAD::MR_T::MageImport::VO::AffiliationVO->new({name=>"test", first=>"test", last=>"test", address=>"test", email=>"test"});
+}
+
+sub test_construct{
+  my $self = shift;
+  $self->assert(UNIVERSAL::isa($self->{vo},'RAD::MR_T::MageImport::VO::AffiliationVO'), "check object type ok");
+
+}
+
+sub test_getName {
+  my $self = shift;
+  my $setValue = $self->{vo}->getName();
+  $self->assert("test", $setValue);
+}
+
+sub test_setName {
+  my $self = shift;
+  $self->{vo}->setName("test2");
+  my $setValue = $self->{vo}->getName();
+  $self->assert("test2", $setValue);
+}
+
+sub test_getFirst {
+  my $self = shift;
+  my $setValue = $self->{vo}->getFirst();
+  $self->assert("test", $setValue);
+}
+
+sub test_setFirst {
+  my $self = shift;
+  $self->{vo}->setFirst("test2");
+  my $setValue = $self->{vo}->getFirst();
+  $self->assert("test2", $setValue);
+}
+
+sub test_getLast {
+  my $self = shift;
+  my $setValue = $self->{vo}->getLast();
+  $self->assert("test", $setValue);
+}
+
+sub test_setLast {
+  my $self = shift;
+  $self->{vo}->setLast("test2");
+  my $setValue = $self->{vo}->getLast();
+  $self->assert("test2", $setValue);
+}
+
+sub test_getAddress {
+  my $self = shift;
+  my $setValue = $self->{vo}->getAddress();
+  $self->assert("test", $setValue);
+}
+
+sub test_setAddress {
+  my $self = shift;
+  $self->{vo}->setAddress("test2");
+  my $setValue = $self->{vo}->getAddress();
+  $self->assert("test2", $setValue);
+}
+
+sub test_getEmail {
+  my $self = shift;
+  my $setValue = $self->{vo}->getEmail();
+  $self->assert("test", $setValue);
+}
+
+sub test_setEmail {
+  my $self = shift;
+  $self->{vo}->setEmail("test2");
+  my $setValue = $self->{vo}->getEmail();
+  $self->assert("test2", $setValue);
+}
+
+sub tear_down {
+  my $self = shift;
+  $self->{vo} = undef;
+}
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/TestAssayHasContact.pm b/lib/perl/RAD/MR_T/MageImport/Test/TestAssayHasContact.pm
new file mode 100644
index 0000000..91c9d4e
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/TestAssayHasContact.pm
@@ -0,0 +1,53 @@
+package RAD::MR_T::MageImport::Test::TestAssayHasContact;
+use base qw(Test::Unit::TestCase);
+
+use strict;
+use Error qw(:try);
+
+use Log::Log4perl qw(get_logger :levels);
+
+use Data::Dumper;
+
+use RAD::MR_T::MageImport::Service::ValidatorRule::AssayHasContact;
+use RAD::MR_T::MageImport::Service::Validator;
+
+use RAD::MR_T::MageImport::VO::DocRoot;
+use RAD::MR_T::MageImport::VO::AssayVO;
+use RAD::MR_T::MageImport::Service::Reader::MockReader;
+
+my $docRoot;;
+Log::Log4perl->init_once("$ENV{GUS_HOME}/config/log4perl.config");
+my $logger = get_logger("RAD::MR_T::MageImport::Service");
+
+sub new {
+  my $self = shift()->SUPER::new(@_);
+  return $self;
+}
+
+sub set_up {
+ my $self = shift;
+
+ my $mockReader =  RAD::MR_T::MageImport::Service::Reader::MockReader->new();
+ $docRoot = $mockReader->parse();
+}
+
+sub test_AssayHasContact {
+  my $self = shift;
+
+  my $validator = RAD::MR_T::MageImport::Service::Validator->new;
+  $validator->setLogger($logger);
+
+  my $decoValidator = RAD::MR_T::MageImport::Service::ValidatorRule::AssayHasContact->new($validator);
+  $self->assert("RAD::MR_T::MageImport::Service::ValidatorRule::AssayHasContact", $decoValidator->check($docRoot));
+
+  my $missingOpAssay = RAD::MR_T::MageImport::VO::AssayVO->new({name => 'test'});
+  $docRoot->addAssayVOs($missingOpAssay);
+
+  try {
+    $decoValidator->check($docRoot);
+  } catch RAD::MR_T::MageImport::ValidatorException with {};
+
+}
+
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/TestAssayHasLexAndNoHangingLex.pm b/lib/perl/RAD/MR_T/MageImport/Test/TestAssayHasLexAndNoHangingLex.pm
new file mode 100644
index 0000000..3b06d38
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/TestAssayHasLexAndNoHangingLex.pm
@@ -0,0 +1,62 @@
+package RAD::MR_T::MageImport::Test::TestAssayHasLexAndNoHangingLex;
+use base qw(Test::Unit::TestCase);
+
+use strict;
+use Error qw(:try);
+
+use Log::Log4perl qw(get_logger :levels);
+
+use Data::Dumper;
+
+use RAD::MR_T::MageImport::Service::ValidatorRule::AssayHasLexAndNoHangingLex;
+use RAD::MR_T::MageImport::Service::Validator;
+
+use RAD::MR_T::MageImport::VO::DocRoot;
+use RAD::MR_T::MageImport::VO::AssayVO;
+use RAD::MR_T::MageImport::Service::Reader::MageTabReader;
+
+my $docRoot;;
+Log::Log4perl->init_once("$ENV{GUS_HOME}/config/log4perl.config");
+my $logger = get_logger("RAD::MR_T::MageImport::Service");
+
+sub new {
+  my $self = shift()->SUPER::new(@_);
+  return $self;
+}
+
+sub set_up {
+ my $self = shift;
+
+ my $reader =  RAD::MR_T::MageImport::Service::Reader::MageTabReader->new("toxoTemplate.tab");
+ $reader->setLogger($logger);
+ $docRoot = $reader->parse();
+}
+
+sub test_AssayHasContact {
+  my $self = shift;
+
+  my $validator = RAD::MR_T::MageImport::Service::Validator->new;
+  $validator->setLogger($logger);
+
+  my $decoValidator = RAD::MR_T::MageImport::Service::ValidatorRule::AssayHasLexAndNoHangingLex->new($validator);
+  $self->assert("RAD::MR_T::MageImport::Service::ValidatorRule::AssayHasLexAndNoHangingLex", $decoValidator->check($docRoot));
+
+  my $assays = $docRoot->getAssayVOs();
+
+  my $lexs = $assays->[0]->getLabeledExtracts();
+  $assays->[0]->{_labeledExtracts} = undef;
+
+  try {
+    $decoValidator->check($docRoot);
+  } catch RAD::MR_T::MageImport::ValidatorException with {  };
+
+  $assays->[0]->setLabeledExtracts($lexs);
+  $assays->[1]->setLabeledExtracts($lexs);
+
+  try {
+    $decoValidator->check($docRoot);
+  } catch RAD::MR_T::MageImport::ValidatorException with {  };
+}
+
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/TestAssayVO.pm b/lib/perl/RAD/MR_T/MageImport/Test/TestAssayVO.pm
new file mode 100644
index 0000000..46682c0
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/TestAssayVO.pm
@@ -0,0 +1,113 @@
+package RAD::MR_T::MageImport::Test::TestAssayVO;
+use base qw(Test::Unit::TestCase);
+
+use RAD::MR_T::MageImport::VO::AssayVO;
+use RAD::MR_T::MageImport::VO::AcquisitionVO;
+use RAD::MR_T::MageImport::VO::ParameterValueVO;
+use RAD::MR_T::MageImport::VO::BioMaterialVO;
+
+use Error qw(:try);
+
+sub new {
+  my $self = shift()->SUPER::new(@_);
+  $self->{vo} = undef;
+  return $self;
+}
+
+sub set_up {
+  my $self = shift;
+  $self->{vo} = RAD::MR_T::MageImport::VO::AssayVO->
+    new({name=>"test",
+         studyName=>"test", 
+         acquisitions=>[RAD::MR_T::MageImport::VO::AcquisitionVO->new()],
+         parameterValues=>[RAD::MR_T::MageImport::VO::ParameterValueVO->new({parameterName => 'testName', value => 'testValue'}),],
+         labeledExtracts=>[RAD::MR_T::MageImport::VO::BioMaterialVO->new({name => 'testName', subclassView => 'LabeledExtract'})],
+        }); 
+}
+
+sub test_construct{
+  my $self = shift;
+  $self->assert(UNIVERSAL::isa($self->{vo},'RAD::MR_T::MageImport::VO::AssayVO'), "check object type ok");
+ 
+}
+
+sub test_getName {
+  my $self = shift;
+  my $setValue = $self->{vo}->getName();
+  $self->assert("test" eq $setValue);
+}
+
+sub test_setName {
+  my $self = shift;
+  $self->{vo}->setName("test2");
+  my $setValue = $self->{vo}->getName();
+  $self->assert("test2" eq $setValue);
+}
+
+sub test_getStudyName {
+  my $self = shift;
+  my $setValue = $self->{vo}->getStudyName();
+  $self->assert("test" eq $setValue);
+}
+
+sub test_setStudyName {
+  my $self = shift;
+  $self->{vo}->setStudyName("test2");
+  my $setValue = $self->{vo}->getStudyName();
+  $self->assert("test2" eq $setValue);
+}
+
+sub test_getAcquisitions {
+  my ($self) = @_;
+  my $setValue = $self->{vo}->getAcquisitions();
+  $self->assert(UNIVERSAL::isa($setValue->[0],'RAD::MR_T::MageImport::VO::AcquisitionVO'), "check object type ok");
+}
+
+sub test_setAcquisitions {
+  my $self = shift;
+  $self->{vo}->setAcquisitions([RAD::MR_T::MageImport::VO::AcquisitionVO->new()]);
+  my $setValue = $self->{vo}->getAcquisitions();
+  $self->assert(UNIVERSAL::isa($setValue->[0],'RAD::MR_T::MageImport::VO::AcquisitionVO'), "check object type ok");
+}
+
+sub test_getParameterValues {
+  my ($self) = @_;
+  my $setValue = $self->{vo}->getParameterValues();
+  $self->assert(UNIVERSAL::isa($setValue->[0],'RAD::MR_T::MageImport::VO::ParameterValueVO'), "check object type ok");
+  $self->assert_equals('testValue', $setValue->[0]->getValue);
+}
+
+sub test_setParameterValues {
+  my $self = shift;
+  $self->{vo}->setParameterValues([RAD::MR_T::MageImport::VO::ParameterValueVO->new({value => 'newValue'})]);
+  my $setValue = $self->{vo}->getParameterValues();
+  $self->assert(UNIVERSAL::isa($setValue->[0],'RAD::MR_T::MageImport::VO::ParameterValueVO'), "check object type ok");
+  $self->assert_equals('newValue', $setValue->[0]->getValue);
+}
+
+sub test_getLabeledExtracts {
+  my ($self) = @_;
+  my $setValue = $self->{vo}->getLabeledExtracts();
+  $self->assert(UNIVERSAL::isa($setValue->[0],'RAD::MR_T::MageImport::VO::BioMaterialVO'), "check object type ok");
+  $self->assert_equals('testName', $setValue->[0]->getName);
+}
+
+sub test_setLabeledExtracts {
+  my $self = shift;
+  $self->{vo}->setLabeledExtracts([RAD::MR_T::MageImport::VO::BioMaterialVO->new({name => 'newName', subclassView => 'LabeledExtract'})]);
+  my $setValue = $self->{vo}->getLabeledExtracts();
+  $self->assert(UNIVERSAL::isa($setValue->[0],'RAD::MR_T::MageImport::VO::BioMaterialVO'), "check object type ok");
+  $self->assert_equals('newName', $setValue->[0]->getName);
+
+  try {
+    $self->{vo}->setLabeledExtracts([RAD::MR_T::MageImport::VO::BioMaterialVO->new({name => 'newName', subclassView => 'BioSample'})]);
+  } catch RAD::MR_T::MageImport::VOException::ObjectTypeError with {};
+
+}
+
+sub tear_down {
+  my $self = shift;
+  $self->{vo} = undef;
+}
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/TestBioMaterialMeasurementVO.pm b/lib/perl/RAD/MR_T/MageImport/Test/TestBioMaterialMeasurementVO.pm
new file mode 100644
index 0000000..90c3f36
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/TestBioMaterialMeasurementVO.pm
@@ -0,0 +1,76 @@
+package RAD::MR_T::MageImport::Test::TestBioMaterialMeasurementVO;
+use base qw(Test::Unit::TestCase);
+
+use RAD::MR_T::MageImport::VO::BioMaterialMeasurementVO;
+use RAD::MR_T::MageImport::VO::BioMaterialVO;
+use RAD::MR_T::MageImport::VO::ProtocolVO;
+use RAD::MR_T::MageImport::VO::OntologyEntryVO;
+
+sub new {
+  my $self = shift()->SUPER::new(@_);
+  $self->{vo} = undef;
+  return $self;
+}
+
+sub set_up {
+  my $self = shift;
+  $self->{vo} = RAD::MR_T::MageImport::VO::BioMaterialMeasurementVO->new({
+									  value=>"test", 
+									  bioMaterial=>RAD::MR_T::MageImport::VO::BioMaterialVO->new, 
+									  unitType=>RAD::MR_T::MageImport::VO::OntologyEntryVO->new}
+									); 
+}
+
+sub test_construct{
+  my $self = shift;
+  $self->assert(UNIVERSAL::isa($self->{vo},'RAD::MR_T::MageImport::VO::BioMaterialMeasurementVO'), "check object type ok");
+#  $self->assert_not_null($self->{vo});
+}
+
+sub test_getValue {
+  my $self = shift;
+  my $setValue = $self->{vo}->getValue();
+  $self->assert("test" eq $setValue);
+}
+
+sub test_setValue {
+  my $self = shift;
+  $self->{vo}->setValue("test2");
+  my $setValue = $self->{vo}->getValue();
+  $self->assert("test2" eq $setValue);
+  $self->assert("test" ne $setValue);
+}
+
+sub test_getBioMaterial {
+  my ($self) = @_;
+  my $setValue = $self->{vo}->getBioMaterial();
+  $self->assert(UNIVERSAL::isa($setValue,'RAD::MR_T::MageImport::VO::BioMaterialVO'), "check object type ok");
+}
+
+sub test_setBioMaterial {
+  my $self = shift;
+  $self->{vo}->setBioMaterial(RAD::MR_T::MageImport::VO::BioMaterialVO->new());
+  my $setValue = $self->{vo}->getBioMaterial();
+  $self->assert(UNIVERSAL::isa($setValue,'RAD::MR_T::MageImport::VO::BioMaterialVO'), "check object type ok");
+}
+
+
+sub test_getUnitType {
+  my ($self) = @_;
+  my $setValue = $self->{vo}->getUnitType();
+  $self->assert(UNIVERSAL::isa($setValue,'RAD::MR_T::MageImport::VO::OntologyEntryVO'), "check object type ok");
+}
+
+sub test_setUnitType {
+  my $self = shift;
+  $self->{vo}->setUnitType(RAD::MR_T::MageImport::VO::OntologyEntryVO->new());
+  my $setValue = $self->{vo}->getUnitType();
+  $self->assert(UNIVERSAL::isa($setValue,'RAD::MR_T::MageImport::VO::OntologyEntryVO'), "check object type ok");
+}
+
+sub tear_down {
+  my $self = shift;
+  $self->{vo} = undef;
+}
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/TestBioMaterialVO.pm b/lib/perl/RAD/MR_T/MageImport/Test/TestBioMaterialVO.pm
new file mode 100644
index 0000000..cf52908
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/TestBioMaterialVO.pm
@@ -0,0 +1,118 @@
+package RAD::MR_T::MageImport::Test::TestBioMaterialVO;
+use base qw(Test::Unit::TestCase);
+
+use RAD::MR_T::MageImport::VO::BioMaterialVO;
+use RAD::MR_T::MageImport::VO::ProtocolVO;
+use RAD::MR_T::MageImport::VO::OntologyEntryVO;
+
+sub new {
+  my $self = shift()->SUPER::new(@_);
+  $self->{vo} = undef;
+  return $self;
+}
+
+sub set_up {
+  my $self = shift;
+  $self->{vo} = RAD::MR_T::MageImport::VO::BioMaterialVO->new({
+							       name=>"test",
+							       description=>"test", 
+							       subclassView=>"test", 
+							       labelMethod=>RAD::MR_T::MageImport::VO::ProtocolVO->new, 
+							       bioMaterialType=>RAD::MR_T::MageImport::VO::OntologyEntryVO->new(),
+							       bioMaterialChars=>[RAD::MR_T::MageImport::VO::OntologyEntryVO->new()],
+							      }); 
+}
+
+sub test_construct{
+  my $self = shift;
+  $self->assert(UNIVERSAL::isa($self->{vo},'RAD::MR_T::MageImport::VO::BioMaterialVO'), "check object type ok");
+#  $self->assert_not_null($self->{vo});
+}
+
+sub test_getName {
+  my $self = shift;
+  my $setValue = $self->{vo}->getName();
+ # print STDOUT "test_getName $setValue";
+  $self->assert("test" eq $setValue);
+}
+
+sub test_setName {
+  my $self = shift;
+  $self->{vo}->setName("test2");
+  my $setValue = $self->{vo}->getName();
+  $self->assert("test2" eq  $setValue);
+}
+
+sub test_getDescription {
+  my $self = shift;
+  my $setValue = $self->{vo}->getDescription();
+  $self->assert("test" eq $setValue);
+}
+
+sub test_setDescription {
+  my $self = shift;
+  $self->{vo}->setDescription("test2");
+  my $setValue = $self->{vo}->getDescription();
+  $self->assert("test2", $setValue);
+}
+
+sub test_getSubclassView {
+  my ($self) = @_;
+  my $setValue = $self->{vo}->getSubclassView();
+  $self->assert("test" eq $setValue);
+}
+
+sub test_setSubclassView {
+  my $self = shift;
+  $self->{vo}->setSubclassView("test2");
+  my $setValue = $self->{vo}->getSubclassView();
+  $self->assert("test2" eq  $setValue);
+  $self->assert("test" ne  $setValue);
+}
+
+# sub test_getLabelMethod {
+#   my ($self) = @_;
+#   my $setValue = $self->{vo}->getLabelMethod();
+#   $self->assert(UNIVERSAL::isa($setValue,'RAD::MR_T::MageImport::VO::ProtocolVO'), "check object type ok");
+# }
+
+# sub test_setLabelMethod {
+#   my $self = shift;
+#   $self->{vo}->setLabelMethod(RAD::MR_T::MageImport::VO::ProtocolVO->new());
+#   my $setValue = $self->{vo}->getLabelMethod();
+#   $self->assert(UNIVERSAL::isa($setValue,'RAD::MR_T::MageImport::VO::ProtocolVO'), "check object type ok");
+# }
+
+
+sub test_getBioMaterialType {
+  my ($self) = @_;
+  my $setValue = $self->{vo}->getBioMaterialType();
+  $self->assert(UNIVERSAL::isa($setValue,'RAD::MR_T::MageImport::VO::OntologyEntryVO'), "check object type ok");
+}
+
+sub test_setBioMaterialType {
+  my $self = shift;
+  $self->{vo}->setBioMaterialType(RAD::MR_T::MageImport::VO::OntologyEntryVO->new());
+  my $setValue = $self->{vo}->getBioMaterialType();
+  $self->assert(UNIVERSAL::isa($setValue,'RAD::MR_T::MageImport::VO::OntologyEntryVO'), "check object type ok");
+}
+
+sub test_getBioMaterialChars {
+  my ($self) = @_;
+  my $setValue = $self->{vo}->getBioMaterialChars();
+  $self->assert(UNIVERSAL::isa($setValue->[0],'RAD::MR_T::MageImport::VO::OntologyEntryVO'), "check object type again ok");
+}
+
+sub test_addBioMaterialChars {
+  my $self = shift;
+  $self->{vo}->addBioMaterialChars((RAD::MR_T::MageImport::VO::OntologyEntryVO->new()));
+  my $setValue = $self->{vo}->getBioMaterialChars();
+  $self->assert(UNIVERSAL::isa($setValue->[1],'RAD::MR_T::MageImport::VO::OntologyEntryVO'), "check added BioMaterialChars object type ok");
+}
+
+sub tear_down {
+  my $self = shift;
+  $self->{vo} = undef;
+}
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/TestConfigChecking.pm b/lib/perl/RAD/MR_T/MageImport/Test/TestConfigChecking.pm
new file mode 100644
index 0000000..1b48be6
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/TestConfigChecking.pm
@@ -0,0 +1,75 @@
+package RAD::MR_T::MageImport::Test::TestConfigChecking;
+
+use base qw(Test::Unit::TestCase);
+use XML::Simple;
+use Data::Dumper;
+
+sub new {
+  my $self = shift()->SUPER::new(@_);
+  return $self;
+}
+
+sub set_up {
+  my $self = shift;
+
+}
+
+sub test_checkConfig{
+  my $self = shift;
+
+  my $config = XMLin("config.xml");
+  my $services = $config->{service};
+
+  my $reader = 0;
+  my $translator = 0;
+
+  foreach my $service ( keys %$services){
+       $reader = 1 if $service eq 'reader';
+       $translator = 1 if $service eq 'translator';
+  }
+  $reader = 1 if $services->{id} && $services->{id} eq 'reader';
+  $self->assert($reader);
+  $self->assert($translator);
+
+}
+
+
+sub test_checkConfig2{
+  my $self = shift;
+
+  my $config = XMLin("config_not_good.xml");
+  my $services = $config->{service};
+
+  my $reader = 0;
+  my $translator = 0;
+
+  foreach my $service ( keys %$services){
+    $reader = 1 if $service eq 'reader';
+    $translator = 1 if $service eq 'translator';
+  }
+  $reader = 1 if $services->{id} && $services->{id} eq 'reader';
+  $self->assert_equals($reader, 1);
+  $self->assert_equals($translator, 0);
+
+}
+
+
+sub test_checkConfig3{
+  my $self = shift;
+
+  my $config = XMLin("config_not_good2.xml");
+  my $services = $config->{service};
+
+  my $reader = 0;
+  my $translator = 0;
+
+  foreach my $service ( keys %$services){
+    $reader = 1 if $service eq 'reader';
+    $translator = 1 if $service eq 'translator';
+  }
+  $reader = 1 if $services->{id} && $services->{id} eq 'reader';
+  $self->assert_equals($reader, 1);
+  $self->assert_equals($translator, 0);
+
+}
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/TestDocRoot.pm b/lib/perl/RAD/MR_T/MageImport/Test/TestDocRoot.pm
new file mode 100644
index 0000000..5f24260
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/TestDocRoot.pm
@@ -0,0 +1,183 @@
+package RAD::MR_T::MageImport::Test::TestDocRoot;
+use base qw(Test::Unit::TestCase);
+
+use RAD::MR_T::MageImport::VO::DocRoot;
+use RAD::MR_T::MageImport::VO::BioMaterialVO;
+use RAD::MR_T::MageImport::VO::ProtocolVO;
+use RAD::MR_T::MageImport::VO::OntologyEntryVO;
+use RAD::MR_T::MageImport::VO::StudyVO;
+use RAD::MR_T::MageImport::VO::AssayVO;
+use RAD::MR_T::MageImport::VO::PersonVO;
+use RAD::MR_T::MageImport::VO::ProtocolVO;
+use RAD::MR_T::MageImport::VO::AffiliationVO;
+use RAD::MR_T::MageImport::VO::ExternalDatabaseVO;
+use RAD::MR_T::MageImport::VO::BioMaterialVO;
+use RAD::MR_T::MageImport::VO::TreatmentVO;
+
+sub new {
+  my $self = shift()->SUPER::new(@_);
+  $self->{vo} = undef;
+  return $self;
+}
+
+sub set_up {
+  my $self = shift;
+  $self->{vo} = 
+    RAD::MR_T::MageImport::VO::DocRoot->new({
+					     studyVO=>RAD::MR_T::MageImport::VO::StudyVO->new(),
+					     assayVOs=>[RAD::MR_T::MageImport::VO::AssayVO->new()],
+					     personVOs=>[RAD::MR_T::MageImport::VO::PersonVO->new()],
+					     affiliationVOs=>[RAD::MR_T::MageImport::VO::AffiliationVO->new()],
+					     externalDatabaseVOs=>[RAD::MR_T::MageImport::VO::ExternalDatabaseVO->new()],
+					     bioMaterialVOs=>[RAD::MR_T::MageImport::VO::BioMaterialVO->new()],
+					     treatmentVOs=>[RAD::MR_T::MageImport::VO::TreatmentVO->new()],
+					    });
+}
+
+sub test_construct{
+  my $self = shift;
+  $self->assert(UNIVERSAL::isa($self->{vo},'RAD::MR_T::MageImport::VO::DocRoot'), "check object type ok");
+#  $self->assert_not_null($self->{vo});
+}
+
+sub test_getStudyVO {
+  my $self = shift;
+  my $setValue = $self->{vo}->getStudyVO();
+  $self->assert(UNIVERSAL::isa($setValue,'RAD::MR_T::MageImport::VO::StudyVO'), "check object type ok");
+}
+
+sub test_setStudyVO {
+  my $self = shift;
+  $self->{vo}->setStudyVO(RAD::MR_T::MageImport::VO::StudyVO->new());
+  my $setValue = $self->{vo}->getStudyVO();
+  $self->assert(UNIVERSAL::isa($setValue,'RAD::MR_T::MageImport::VO::StudyVO'), "check object type ok");
+}
+
+sub test_getAssayVOs {
+  my ($self) = @_;
+  my $setValue = $self->{vo}->getAssayVOs();
+  $self->assert(UNIVERSAL::isa($setValue->[0],'RAD::MR_T::MageImport::VO::AssayVO'), "check object type again ok");
+}
+
+sub test_setAssayVOs {
+  my $self = shift;
+  $self->{vo}->assayVOs([RAD::MR_T::MageImport::VO::AssayVO->new()]);
+  my $setValue = $self->{vo}->getAssayVOs();
+  $self->assert(UNIVERSAL::isa($setValue->[0],'RAD::MR_T::MageImport::VO::AssayVO'), "check AssayVO object type ok");
+}
+
+sub test_addAssayVOs {
+  my $self = shift;
+  $self->{vo}->addAssayVOs((RAD::MR_T::MageImport::VO::AssayVO->new()));
+  my $setValue = $self->{vo}->getAssayVOs();
+  $self->assert(UNIVERSAL::isa($setValue->[1],'RAD::MR_T::MageImport::VO::AssayVO'), "check added assayvo object type ok");
+}
+
+
+sub test_getPersonVOs {
+  my ($self) = @_;
+  my $setValue = $self->{vo}->getPersonVOs();
+  $self->assert(UNIVERSAL::isa($setValue->[0],'RAD::MR_T::MageImport::VO::PersonVO'), "check object type again ok");
+}
+
+sub test_setPersonVOs {
+  my $self = shift;
+  $self->{vo}->personVOs([RAD::MR_T::MageImport::VO::PersonVO->new()]);
+  my $setValue = $self->{vo}->getPersonVOs();
+  $self->assert(UNIVERSAL::isa($setValue->[0],'RAD::MR_T::MageImport::VO::PersonVO'), "check PersonVO object type ok");
+}
+
+sub test_addPersonVOs {
+  my $self = shift;
+  $self->{vo}->addPersonVOs((RAD::MR_T::MageImport::VO::PersonVO->new()));
+  my $setValue = $self->{vo}->getPersonVOs();
+  $self->assert(UNIVERSAL::isa($setValue->[1],'RAD::MR_T::MageImport::VO::PersonVO'), "check added PersonVO object type ok");
+}
+
+sub test_getAffiliationVOs {
+  my ($self) = @_;
+  my $setValue = $self->{vo}->getAffiliationVOs();
+  $self->assert(UNIVERSAL::isa($setValue->[0],'RAD::MR_T::MageImport::VO::AffiliationVO'), "check object type again ok");
+}
+
+sub test_setAffiliationVOs {
+  my $self = shift;
+  $self->{vo}->affiliationVOs([RAD::MR_T::MageImport::VO::AffiliationVO->new()]);
+  my $setValue = $self->{vo}->getAffiliationVOs();
+  $self->assert(UNIVERSAL::isa($setValue->[0],'RAD::MR_T::MageImport::VO::AffiliationVO'), "check AffiliationVO object type ok");
+}
+
+sub test_addAffiliationVOs {
+  my $self = shift;
+  $self->{vo}->addAffiliationVOs((RAD::MR_T::MageImport::VO::AffiliationVO->new()));
+  my $setValue = $self->{vo}->getAffiliationVOs();
+  $self->assert(UNIVERSAL::isa($setValue->[1],'RAD::MR_T::MageImport::VO::AffiliationVO'), "check added AffiliationVO object type ok");
+}
+
+sub test_getExternalDatabaseVOs {
+  my ($self) = @_;
+  my $setValue = $self->{vo}->getExternalDatabaseVOs();
+  $self->assert(UNIVERSAL::isa($setValue->[0],'RAD::MR_T::MageImport::VO::ExternalDatabaseVO'), "check object type again ok");
+}
+
+sub test_setExternalDatabaseVOs {
+  my $self = shift;
+  $self->{vo}->externalDatabaseVOs([RAD::MR_T::MageImport::VO::ExternalDatabaseVO->new()]);
+  my $setValue = $self->{vo}->getExternalDatabaseVOs();
+  $self->assert(UNIVERSAL::isa($setValue->[0],'RAD::MR_T::MageImport::VO::ExternalDatabaseVO'), "check ExternalDatabaseVO object type ok");
+}
+
+sub test_addExternalDatabaseVOs {
+  my $self = shift;
+  $self->{vo}->addExternalDatabaseVOs((RAD::MR_T::MageImport::VO::ExternalDatabaseVO->new()));
+  my $setValue = $self->{vo}->getExternalDatabaseVOs();
+  $self->assert(UNIVERSAL::isa($setValue->[1],'RAD::MR_T::MageImport::VO::ExternalDatabaseVO'), "check added ExternalDatabaseVO object type ok");
+}
+
+sub test_getBioMaterialVOs {
+  my ($self) = @_;
+  my $setValue = $self->{vo}->getBioMaterialVOs();
+  $self->assert(UNIVERSAL::isa($setValue->[0],'RAD::MR_T::MageImport::VO::BioMaterialVO'), "check object type again ok");
+}
+
+sub test_setBioMaterialVOs {
+  my $self = shift;
+  $self->{vo}->bioMaterialVOs([RAD::MR_T::MageImport::VO::BioMaterialVO->new()]);
+  my $setValue = $self->{vo}->getBioMaterialVOs();
+  $self->assert(UNIVERSAL::isa($setValue->[0],'RAD::MR_T::MageImport::VO::BioMaterialVO'), "check BioMaterialVO object type ok");
+}
+
+sub test_addBioMaterialVOs {
+  my $self = shift;
+  $self->{vo}->addBioMaterialVOs((RAD::MR_T::MageImport::VO::BioMaterialVO->new()));
+  my $setValue = $self->{vo}->getBioMaterialVOs();
+  $self->assert(UNIVERSAL::isa($setValue->[1],'RAD::MR_T::MageImport::VO::BioMaterialVO'), "check added BioMaterialVO object type ok");
+}
+
+sub test_getTreatmentVOs {
+  my ($self) = @_;
+  my $setValue = $self->{vo}->getTreatmentVOs();
+  $self->assert(UNIVERSAL::isa($setValue->[0],'RAD::MR_T::MageImport::VO::TreatmentVO'), "check object type again ok");
+}
+
+sub test_setTreatmentVOs {
+  my $self = shift;
+  $self->{vo}->treatmentVOs([RAD::MR_T::MageImport::VO::TreatmentVO->new()]);
+  my $setValue = $self->{vo}->getTreatmentVOs();
+  $self->assert(UNIVERSAL::isa($setValue->[0],'RAD::MR_T::MageImport::VO::TreatmentVO'), "check TreatmentVO object type ok");
+}
+
+sub test_addTreatmentVOs {
+  my $self = shift;
+  $self->{vo}->addTreatmentVOs((RAD::MR_T::MageImport::VO::TreatmentVO->new()));
+  my $setValue = $self->{vo}->getTreatmentVOs();
+  $self->assert(UNIVERSAL::isa($setValue->[1],'RAD::MR_T::MageImport::VO::TreatmentVO'), "check added TreatmentVO object type ok");
+}
+
+
+sub tear_down {
+  my $self = shift;
+  $self->{vo} = undef;
+}
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/TestExceptions.pm b/lib/perl/RAD/MR_T/MageImport/Test/TestExceptions.pm
new file mode 100644
index 0000000..020e1a9
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/TestExceptions.pm
@@ -0,0 +1,65 @@
+package RAD::MR_T::MageImport::Test::TestExceptions;
+
+use base qw(Test::Unit::TestCase);
+use Error qw(:try);
+use RAD::MR_T::MageImport::Util qw(checkArgument checkArrayArgumentSameType checkArgumentType);
+use RAD::MR_T::MageImport::VO::StudyDesignVO;
+use RAD::MR_T::MageImport::VO::StudyFactorVO;
+use RAD::MR_T::MageImport::VO::StudyVO;
+
+sub new {
+  my $self = shift()->SUPER::new(@_);
+  $self->{vo} = undef;
+
+  return $self;
+}
+
+sub set_up {
+ my $self = shift;
+ $self->{vo} = {
+		method=>"setFactors",
+		class=>RAD::MR_T::MageImport::VO::StudyDesignVO->new,
+		expect=>"RAD::MR_T::MageImport::VO::StudyFactorVO",
+		factors=>[RAD::MR_T::MageImport::VO::StudyVO->new()]
+	       };
+
+}
+
+
+sub test_checkArrayArgumentSameType{
+  my $self = shift;
+  try {
+    &checkArrayArgumentSameType($self->{vo}->{method}, $self->{vo}->{class}, $self->{vo}->{expect}, $self->{vo}->{factors}->[0]); 
+    $self->assert(0);
+  } catch RAD::MR_T::MageImport::MageImportObjectTypeError with {};
+
+}
+
+
+sub test_checkArgumentType{
+  my $self = shift;
+  try {
+    &checkArgumentType($self->{vo}->{method}, $self->{vo}->{class}, $self->{vo}->{expect}, $self->{vo}->{factors}); 
+    $self->assert(0);
+  } catch RAD::MR_T::MageImport::MageImportObjectTypeError with {};
+
+}
+
+
+sub test_checkArgument{
+  my $self = shift;
+  try {
+    &checkArgument($self->{vo}->{method}, $self->{vo}->{class}); 
+    $self->assert(0);
+  } catch RAD::MR_T::MageImport::MageImportArgumentError with {};
+}
+
+
+sub test_checkArgument2{
+  my $self = shift;
+  try {
+    &checkArgument($self->{vo}->{method}, $self->{vo}->{class}, $self->{vo}->{factors}, $self->{vo}->{factors}); 
+    $self->assert(0);
+  } catch RAD::MR_T::MageImport::MageImportArgumentError with {};
+}
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/TestExternalDatabaseVO.pm b/lib/perl/RAD/MR_T/MageImport/Test/TestExternalDatabaseVO.pm
new file mode 100644
index 0000000..e30eb6b
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/TestExternalDatabaseVO.pm
@@ -0,0 +1,56 @@
+package RAD::MR_T::MageImport::Test::TestExternalDatabaseVO;
+use base qw(Test::Unit::TestCase);
+
+use RAD::MR_T::MageImport::VO::AffiliationVO;
+use RAD::MR_T::MageImport::VO::PersonVO;
+use RAD::MR_T::MageImport::VO::ExternalDatabaseVO;
+
+sub new {
+  my $self = shift()->SUPER::new(@_);
+  $self->{vo} = undef;
+  return $self;
+}
+
+sub set_up {
+  my $self = shift;
+  $self->{vo} = RAD::MR_T::MageImport::VO::ExternalDatabaseVO->new({name=>"test", version=>"test"});
+}
+
+sub test_construct{
+  my $self = shift;
+  $self->assert(UNIVERSAL::isa($self->{vo},'RAD::MR_T::MageImport::VO::ExternalDatabaseVO'), "check object type ok");
+#  $self->assert_not_null($self->{vo});
+}
+
+sub test_getName {
+  my $self = shift;
+  my $setValue = $self->{vo}->getName();
+  $self->assert("test" eq $setValue, "$setValue is not equal to test");
+}
+
+sub test_setName {
+  my $self = shift;
+  $self->{vo}->setName("test2");
+  my $setValue = $self->{vo}->getName();
+  $self->assert("test2" eq $setValue);
+}
+
+sub test_getVersion {
+  my $self = shift;
+  my $setValue = $self->{vo}->getVersion();
+  $self->assert("test" eq $setValue, "$setValue is not equal to test");
+}
+
+sub test_setVersion {
+  my $self = shift;
+  $self->{vo}->setVersion("test2");
+  my $setValue = $self->{vo}->getVersion();
+  $self->assert("test2" eq $setValue);
+}
+
+sub tear_down {
+  my $self = shift;
+  $self->{vo} = undef;
+}
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/TestMageTabReader.pm b/lib/perl/RAD/MR_T/MageImport/Test/TestMageTabReader.pm
new file mode 100644
index 0000000..7e5763c
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/TestMageTabReader.pm
@@ -0,0 +1,805 @@
+package RAD::MR_T::MageImport::Test::TestMageTabReader;
+
+use strict;
+
+use Log::Log4perl qw(get_logger :levels);
+
+use RAD::MR_T::MageImport::Service::Reader::MageTabReader;
+
+use RAD::MR_T::MageImport::VO::OntologyEntryVO;
+use RAD::MR_T::MageImport::VO::PersonVO;
+use RAD::MR_T::MageImport::VO::ProtocolVO;
+use RAD::MR_T::MageImport::VO::ParameterValueVO;
+use RAD::MR_T::MageImport::VO::BioMaterialVO;
+
+use RAD::MR_T::MageImport::Util qw(searchObjArrayByObjName);
+
+use RAD::MR_T::MageImport::Service::Reader::MockReader;
+
+use Data::Dumper;
+
+use Error qw(:try);
+
+use base qw(Test::Unit::TestCase); 
+
+my $sdrfHeader = [ 'Source ID',
+                     'MaterialType',
+                     'MaterialType Term Source',
+                     'Characteristics [StrainOrLine]',
+                     'Characteristics [DevelopmentalStage]',
+                     'Characteristics [DevelopmentalStage] Term Source',
+                     'Characteristics [IndividualGeneticCharacteristic]',
+                     'Characteristics [IndividualGeneticCharacteristic] Term Source',
+                     'Characteristics [Organism]',
+                     'Characteristics [Organism] Term Source',
+                     'Protocol REF',
+                     'ParameterValue [time_of_extraction]',
+                     'Unit [TimeUnit] (Term Source: MO)',
+                     'Sample ID',
+                     'MaterialType',
+                     'MaterialType Term Source',
+                     'Protocol REF',
+                     'Extract ID',
+                     'MaterialType',
+                     'MaterialType Term Source',
+                     'Protocol REF',
+                     'ParameterValue [input_total_RNA]',
+                     'Unit [MassUnit] (Term Source: MO)',
+                     'ParameterValue [cRNA_yield]',
+                   'Unit [MassUnit] (Term Source: MO)',
+                     'Labeled Extract ID',
+                     'MaterialType',
+                     'MaterialType Term Source',
+                     'Label',
+                     'Protocol REF',
+                     'ParameterValue [cRNA_hybridized]',
+                   'Unit [MassUnit] (Term Source: MO)',
+                     'Hybridization ID',
+                     'ArrayDesign REF',
+                     'Protocol REF',
+                     'Image File',
+                     'Protocol REF',
+                     'ArrayData File',
+                     'Protocol REF',
+                     'ParameterValue [BG correct]',
+                     'ParameterValue [Normalization]',
+                     'ParameterValue [Summarization]',
+                     'Normalization ID',
+                     'DerivedArrayData File',
+                     'FactorValue [Strain]',
+                     'FactorValue [Time Grown]',
+                     'Unit [TimeUnit] (Term Source: MO)'
+                   ];
+
+my $sdrfLine = [ 'RH 1',
+                 'whole_organism',
+                 'MO',
+                 'RG (Type I)',
+                 'tachyzoite',
+                 'nci_meta',
+                 'wild_type',
+                 'MO',
+                 'Toxoplasma gondii RH',
+                 'ncbitax',
+                 'Parasite Growth (Roos)',
+                 '48',
+                 'hours',
+                 'RH 1 grown in HFF Cells',
+                 'cell',
+                 'MO',
+                 'Total RNA via RNAqueous-4PCR Kit (Ambion).',
+                 'RH 1 - RNA',
+                 'total_RNA',
+                 'MO',
+                 'One-Cycle Eukaryotic Target Labeling Assay (Affymetrix)',
+                 '1',
+                 'ug',
+                 '46.1',
+                 'ug',
+                 'RH 1 - LEX',
+                 'synthetic_RNA',
+                 'MO',
+                 'biotin',
+                 'Affymetrix Hybridization Protocol (Penn Microarray Core Facility)',
+                 '10',
+                 'ug',
+                 'RH 1 - Affymetrix Hybridization',
+                 'TOXO_CHIP',
+                 'Affymetrix GeneChip Scanner 3000 (GCS3000)',
+                 'RH 1.DAT',
+                 'Affymetrix MAS 5.0 Probe Cell Analysis',
+                 'RH 1.CEL',
+                 'Robust Multi-Array Average expression measure (Bioconductor affy package)',
+                 'RMA 2',
+                 'quantile',
+                 'median polish',
+                 'RH 1 - RMA Normalization',
+                 'RH 1.TXT',
+                 'RG (Type I)',
+                 '48',
+                 'hours'
+               ];
+
+#--------------------------------------------------------------------------------
+
+sub new {
+  my $self = shift()->SUPER::new(@_);
+  return $self;
+}
+
+#--------------------------------------------------------------------------------
+
+sub set_up {
+  my $self = shift;
+
+  Log::Log4perl->init_once("$ENV{GUS_HOME}/config/log4perl.config");
+  my $sLogger = get_logger("RAD::MR_T::MageImport::Service");
+  $sLogger->debug("Start the MageTabReader testers");
+
+  $self->{logger} = $sLogger;
+
+  my $mockReader = RAD::MR_T::MageImport::Service::Reader::MockReader->new();
+  $self->{mock_docroot} = $mockReader->parse();
+
+  $self->{reader} =  RAD::MR_T::MageImport::Service::Reader::MageTabReader->new("mageTabExample.tab");
+
+  my $fileLines = $self->{reader}->readTabFile();
+  $self->{reader}->setLines($fileLines);
+
+  $self->{reader}->setLogger($sLogger);
+
+}
+
+#--------------------------------------------------------------------------------
+
+sub getReader {$_[0]->{reader}}
+sub getMockDocRoot {$_[0]->{mock_docroot}}
+
+#--------------------------------------------------------------------------------
+
+sub test_parseStudy {
+  my $self = shift;
+
+  my $r = $self->getReader();
+
+  my $externalDatabaseVos = $r->parseExternalDatabases();
+  my $affiliations = $r->parseAffiliations();
+  my $persons = $r->parsePersons($affiliations);
+
+  my $study = $r->parseStudy($persons, $externalDatabaseVos);
+
+  $self->assert_null($study->getPubMedId());
+
+  $self->assert_matches(qr(^Expression profiling ), $study->getName());
+  $self->assert_matches(qr(^Determination of  st), $study->getDescription());
+
+  $self->assert_equals(1, scalar(@{$study->getDesigns()}));
+
+  my $contact = $study->getContact();
+  $self->assert_equals('Roos', $contact->getLast());
+
+}
+
+#--------------------------------------------------------------------------------
+# Not really testing too much here... this method essentially just calls the others
+sub test_parseSdrf {
+  my $self = shift;
+
+  my $r = $self->getReader();
+
+  my $docRoot = RAD::MR_T::MageImport::VO::DocRoot->new();
+
+  my $externalDatabases = $r->parseExternalDatabases();
+  $docRoot->externalDatabaseVOs($externalDatabases);
+
+  my $protocols = $r->parseProtocols($externalDatabases);
+  $docRoot->protocolVOs($protocols);
+
+  my $affiliations = $r->parseAffiliations();
+  $docRoot->affiliationVOs($affiliations);
+
+  my $persons = $r->parsePersons($affiliations);
+  $docRoot->personVOs($persons);
+
+  my $study = $r->parseStudy($persons, $externalDatabases);
+  $docRoot->studyVO($study);
+
+  $r->parseSdrf('^Source ID', $docRoot);
+
+  # some pooling in here...(34 biomaterials instead of 32)
+  my $bioMaterials = $docRoot->getBioMaterialVOs();
+  $self->assert_equals(34, scalar(@$bioMaterials));
+
+  my $treatments = $docRoot->getTreatmentVOs();
+  $self->assert_equals(24, scalar(@$treatments));
+
+  my $assays = $docRoot->getAssayVOs();
+  $self->assert_equals(8, scalar(@$assays));
+
+}
+
+#--------------------------------------------------------------------------------
+
+sub test_doAssays {
+  my $self = shift;
+
+  my $r = $self->getReader();
+
+  my $docRoot = RAD::MR_T::MageImport::VO::DocRoot->new();
+
+  my $externalDatabases = $r->parseExternalDatabases();
+  $docRoot->externalDatabaseVOs($externalDatabases);
+
+  my $protocols = $r->parseProtocols($externalDatabases);
+  $docRoot->protocolVOs($protocols);
+
+  my $affiliations = $r->parseAffiliations();
+  $docRoot->affiliationVOs($affiliations);
+
+  my $persons = $r->parsePersons($affiliations);
+  $docRoot->personVOs($persons);
+
+
+  my $study = $r->parseStudy($persons, $externalDatabases);
+  $docRoot->studyVO($study);
+
+  # Set the DocRoot BioMaterialVOs and TreatmentVOs
+  $r->doBioMaterialsAndCharacteristics($sdrfHeader, $sdrfLine, $docRoot);
+  $r->doTreatments($sdrfHeader, $sdrfLine, $docRoot);
+
+  my $assays = $r->doAssays($sdrfHeader, $sdrfLine, $docRoot);
+
+  #*******************************
+  #assayStuff
+  $self->assert_equals(1, scalar(@$assays));
+
+  my $assay = $assays->[0];
+
+  $self->assert_equals('TOXO_CHIP', $assay->getArraySourceId());
+  $self->assert_equals('RH 1 - Affymetrix Hybridization', $assay->getName());
+  $self->assert_equals('Affymetrix Hybridization Protocol (Penn Microarray Core Facility)', $assay->getProtocolName());
+  $self->assert_equals('Expression profiling of the 3 archetypal T. gondii lineages', $assay->getStudyName());
+
+  my $assayParamValues = $assay->getParameterValues();
+  $self->assert_equals(1, scalar(@$assayParamValues));
+
+  my $assayParamValue0 = $assayParamValues->[0];
+
+
+  $self->assert_equals('cRNA_hybridized', $assayParamValue0->getParameterName());
+
+
+  $self->assert_equals(10, $assayParamValue0->getValue());
+
+  my $assayLex = $assay->getLabeledExtracts()->[0];
+  $self->assert_equals('RH 1 - LEX', $assayLex->getName());
+
+  #*******************************
+  #acquisitionStuff
+  my $acquisitions = $assay->getAcquisitions();
+
+  $self->assert_equals(1, scalar(@$acquisitions));
+
+  my $acquisition = $acquisitions->[0];
+
+  $self->assert_equals('Affymetrix GeneChip Scanner 3000 (GCS3000)', $acquisition->getProtocolName());
+  $self->assert_equals('RH 1.DAT', $acquisition->getUri());
+  $self->assert_null($acquisition->getName());
+  $self->assert_equals(0, scalar(@{$acquisition->getParameterValues()}));
+
+  my $channels = $acquisition->getChannels();
+  $self->assert_equals(1, scalar(@$channels));
+  $self->assert_equals('biotin', $channels->[0]->getValue());
+
+  my $factorValues = $acquisition->getFactorValues();
+  $self->assert_equals(2, scalar(@$factorValues));
+
+  my $factorValue0 = $factorValues->[0];
+  my $factorValue1 = $factorValues->[1];
+
+  $self->assert_equals('Time Grown', $factorValue0->getFactorName());
+  $self->assert_equals('Strain', $factorValue1->getFactorName());
+
+  $self->assert_equals('48 hours', $factorValue0->getValue()->getValue());
+  $self->assert_equals('RG (Type I)', $factorValue1->getValue()->getValue());
+
+  #*******************************
+  #quantificationStuff
+
+  my $quantifications = $acquisition->getQuantifications();
+
+  $self->assert_equals(1, scalar(@$quantifications));
+
+  my $quant = $quantifications->[0];
+
+  $self->assert_null($quant->getName());
+
+  $self->assert_equals('RH 1.CEL', $quant->getUri());
+  $self->assert_equals('Affymetrix MAS 5.0 Probe Cell Analysis', $quant->getProtocolName());
+
+  my $nullParamValues = $quant->getParameterValues();
+  $self->assert_equals(0, scalar(@{$nullParamValues}));
+
+ #*******************************
+  #processStuff
+
+  my $processes = $quant->getProcesses();
+  $self->assert_equals(1, scalar(@$processes));
+
+  my $process = $processes->[0];
+
+  $self->assert_equals('RH 1 - RMA Normalization', $process->getName());
+  $self->assert_equals('RH 1.TXT', $process->getUri());
+  $self->assert_equals('Robust Multi-Array Average expression measure (Bioconductor affy package)', $process->getProtocolName());
+  my $paramValues = $process->getParameterValues();
+  $self->assert_equals(3, scalar(@$paramValues));
+
+  my $quantParam0 = $paramValues->[0];
+  my $quantParam1 = $paramValues->[1];
+  my $quantParam2 = $paramValues->[2];
+
+  $self->assert_equals('Summarization', $quantParam0->getParameterName());
+  $self->assert_equals('Normalization', $quantParam1->getParameterName());
+  $self->assert_equals('BG correct', $quantParam2->getParameterName());
+
+  $self->assert_equals('median polish', $quantParam0->getValue());
+  $self->assert_equals('quantile', $quantParam1->getValue());
+  $self->assert_equals('RMA 2', $quantParam2->getValue());
+
+
+}
+
+
+#--------------------------------------------------------------------------------
+
+sub test_doTreatments {
+  my $self = shift;
+
+  my $r = $self->getReader();
+
+  my $docRoot = RAD::MR_T::MageImport::VO::DocRoot->new();
+
+  my $externalDatabases = $r->parseExternalDatabases();
+  $docRoot->externalDatabaseVOs($externalDatabases);
+
+  my $protocols = $r->parseProtocols($externalDatabases);
+  $docRoot->protocolVOs($protocols);
+
+  # Set the DocRoot BioMaterialVOs
+  $r->doBioMaterialsAndCharacteristics($sdrfHeader, $sdrfLine, $docRoot);
+
+  my $treatments = $r->doTreatments($sdrfHeader, $sdrfLine, $docRoot);
+
+  $self->assert_equals(3, scalar(@$treatments));
+  foreach(@$treatments) {
+    $self->assert_equals('RAD::MR_T::MageImport::VO::TreatmentVO', ref($_));
+
+    $self->assert_equals(1, scalar(@{$_->getInputBMMs()}));
+  }
+
+  my $t0 = $treatments->[0];
+  my $t1 = $treatments->[1];
+  my $t2 = $treatments->[2];
+
+  my $t0InputBmm = $t0->getInputBMMs()->[0];
+  my $t1InputBmm = $t1->getInputBMMs()->[0];
+  my $t2InputBmm = $t2->getInputBMMs()->[0];
+
+  $self->assert_equals('RH 1', $t2InputBmm->getBioMaterial()->getName());
+  $self->assert_equals('RH 1 grown in HFF Cells', $t1InputBmm->getBioMaterial()->getName());
+  $self->assert_equals('RH 1 - RNA', $t0InputBmm->getBioMaterial()->getName());
+
+  $self->assert_equals('Parasite Growth (Roos)', $t2->getProtocol()->getName());
+  $self->assert_equals('Total RNA via RNAqueous-4PCR Kit (Ambion).', $t1->getProtocol()->getName());
+  $self->assert_equals('One-Cycle Eukaryotic Target Labeling Assay (Affymetrix)', $t0->getProtocol()->getName());
+
+  $self->assert_equals('RH 1 grown in HFF Cells', $t2->getOutputBM()->getName());
+  $self->assert_equals('RH 1 - RNA', $t1->getOutputBM()->getName());
+  $self->assert_equals('RH 1 - LEX', $t0->getOutputBM()->getName());
+
+  $self->assert_equals(1, scalar(@{$t2->getParameterValues()}));
+  $self->assert_equals(0, scalar(@{$t1->getParameterValues()}));
+
+  my $labelParamValues = $t0->getParameterValues();
+
+  $self->assert_equals(2, scalar(@$labelParamValues));
+
+  my $labelParamValue0 = $labelParamValues->[0];
+  my $labelParamValue1 = $labelParamValues->[1];
+
+  $self->assert_equals('cRNA_yield', $labelParamValue1->getParameterName());
+  $self->assert_equals('input_total_RNA', $labelParamValue0->getParameterName());
+
+  $self->assert_equals(46.1, $labelParamValue1->getValue());
+  $self->assert_equals(1, $labelParamValue0->getValue());
+
+
+  my $growParam = $t2->getParameterValues()->[0];
+  $self->assert_equals('time_of_extraction', $growParam->getParameterName());
+  $self->assert_equals(48, $growParam->getValue());
+}
+
+#--------------------------------------------------------------------------------
+
+sub test_makeTreatments {
+  my $self = shift;
+
+  my $r = $self->getReader();
+
+  my $docRoot = RAD::MR_T::MageImport::VO::DocRoot->new();
+
+  my $inBioMaterial = RAD::MR_T::MageImport::VO::BioMaterialVO->new({name => 'inBioMaterial'});
+  my $outBioMaterial = RAD::MR_T::MageImport::VO::BioMaterialVO->new({name => 'outBioMaterial'});
+
+  my $protocols = [RAD::MR_T::MageImport::VO::ProtocolVO->new({name => 'protocol1', params => [RAD::MR_T::MageImport::VO::ProtocolParamVO->new({name => 'param1'}),
+                                                                                               RAD::MR_T::MageImport::VO::ProtocolParamVO->new({name => 'param2'})]}),
+                   RAD::MR_T::MageImport::VO::ProtocolVO->new({name => 'protocol2', params => [RAD::MR_T::MageImport::VO::ProtocolParamVO->new({name => 'param3'})]}),
+                   RAD::MR_T::MageImport::VO::ProtocolVO->new({name => 'protocol3'}),
+                  ];
+
+  $protocols->[0]->setProtocolType(RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value => 'type0'}));
+  $protocols->[1]->setProtocolType(RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value => 'type1'}));
+  $protocols->[2]->setProtocolType(RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value => 'type2'}));
+
+
+  my $paramValues = [RAD::MR_T::MageImport::VO::ParameterValueVO->new({parameterName => 'param1', value => 'value1'}),
+                     RAD::MR_T::MageImport::VO::ParameterValueVO->new({parameterName => 'param2', value => 'value2'}),
+                     RAD::MR_T::MageImport::VO::ParameterValueVO->new({parameterName => 'param3', value => 'value3', unit => RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value => 'oeValue'})}),
+                     RAD::MR_T::MageImport::VO::ParameterValueVO->new({parameterName => 'param4', value => 'value4'}),
+                    ];
+
+  my $treatments = $r->makeTreatments($protocols, $paramValues, $outBioMaterial, $inBioMaterial, $docRoot);
+
+  $self->assert_equals(3, scalar(@$treatments));
+
+  foreach(@$treatments) {
+    $self->assert_equals('RAD::MR_T::MageImport::VO::TreatmentVO', ref($_));
+
+    $self->assert_equals(1, scalar(@{$_->getInputBMMs()}));
+    $self->assert_equals('inBioMaterial', $_->getInputBMMs()->[0]->getBioMaterial()->getName());
+
+    $self->assert_equals('outBioMaterial', $_->getOutputBM()->getName());
+  }
+
+  my $t0 = $treatments->[0];
+  my $t1 = $treatments->[1];
+  my $t2 = $treatments->[2];
+
+  #print Dumper $t0;
+
+  $self->assert_equals(2, scalar(@{$t0->getParameterValues()}));
+  $self->assert_equals(1, scalar(@{$t1->getParameterValues()}));
+  $self->assert_equals(0, scalar(@{$t2->getParameterValues()}));
+
+  $self->assert_equals('protocol1', $t0->getProtocol()->getName());
+  $self->assert_equals('protocol2', $t1->getProtocol()->getName());
+  $self->assert_equals('protocol3', $t2->getProtocol()->getName());
+
+  my $t1Param = $t1->getParameterValues()->[0];
+  $self->assert_equals('value3', $t1Param->getValue());
+}
+
+#--------------------------------------------------------------------------------
+
+sub test_findExistingTreatment {
+  my $self = shift;
+
+  my $r = $self->getReader();
+  my $mockRoot = $self->getMockDocRoot();
+  my $treatments = $mockRoot->getTreatmentVOs();
+
+  my $bioMaterial = searchObjArrayByObjName($mockRoot->getBioMaterialVOs(), 'labeledExtract');
+  my $protocol = searchObjArrayByObjName($mockRoot->getProtocolVOs(), 'protocol_labeling');
+
+  my $treatment = $r->findExistingTreatment($treatments, $bioMaterial, $protocol);
+
+  $self->assert_equals('treatment_labeling', $treatment->getName());
+
+  my $notFoundBioMaterial = RAD::MR_T::MageImport::VO::BioMaterialVO->new({name => 'isNotFound'});
+  $self->assert_equals('', $r->findExistingTreatment($treatments, $notFoundBioMaterial, $protocol));
+
+  my $notFoundProtocol = RAD::MR_T::MageImport::VO::ProtocolVO->new({name => 'isNotFound'});
+  $self->assert_equals('', $r->findExistingTreatment($treatments, $bioMaterial, $notFoundProtocol));
+
+}
+
+#--------------------------------------------------------------------------------
+
+sub test_doBioMaterialsAndCharacteristics {
+  my $self = shift;
+
+  my $r = $self->getReader();
+
+  my $docRoot = RAD::MR_T::MageImport::VO::DocRoot->new();
+
+  my $externalDatabases = $r->parseExternalDatabases();
+  $docRoot->externalDatabaseVOs($externalDatabases);
+
+  my $biomaterials = $r->doBioMaterialsAndCharacteristics($sdrfHeader, $sdrfLine, $docRoot);
+
+  $self->assert_equals(4, scalar(@$biomaterials));
+
+  my $organism = $biomaterials->[0];
+  my $cell = $biomaterials->[1];
+  my $rna = $biomaterials->[2];
+  my $lex = $biomaterials->[3];
+
+  $self->assert_equals('RH 1', $organism->getName());
+  $self->assert_equals('RH 1 grown in HFF Cells', $cell->getName());
+  $self->assert_equals('RH 1 - RNA', $rna->getName());
+  $self->assert_equals('RH 1 - LEX', $lex->getName());
+
+  $self->assert_equals('whole_organism', $organism->getBioMaterialType()->getValue());
+  $self->assert_equals('cell', $cell->getBioMaterialType()->getValue());
+  $self->assert_equals('total_RNA', $rna->getBioMaterialType()->getValue());
+  $self->assert_equals('synthetic_RNA', $lex->getBioMaterialType()->getValue());
+
+  $self->assert_equals('MO', $organism->getBioMaterialType()->getExternalDatabase()->getName());
+  $self->assert_equals('MO', $cell->getBioMaterialType()->getExternalDatabase()->getName());
+  $self->assert_equals('MO', $rna->getBioMaterialType()->getExternalDatabase()->getName());
+  $self->assert_equals('MO', $lex->getBioMaterialType()->getExternalDatabase()->getName());
+
+  $self->assert_null($organism->getChannel());
+  $self->assert_null($cell->getChannel());
+  $self->assert_null($rna->getChannel());
+  $self->assert_equals('biotin', $lex->getChannel()->getValue());
+
+  $self->assert_null($cell->getBioMaterialChars());
+  $self->assert_null($rna->getBioMaterialChars());
+  $self->assert_null($lex->getBioMaterialChars());
+  my $chars = $organism->getBioMaterialChars();
+
+  $self->assert_equals(4, scalar(@$chars));
+
+  my $strain = $chars->[0];
+  my $stage = $chars->[1];
+  my $geneticChar = $chars->[2];
+  my $organism = $chars->[3];
+
+  $self->assert_equals('RG (Type I)', $strain->getValue());
+  $self->assert_equals('tachyzoite', $stage->getValue());
+  $self->assert_equals('wild_type', $geneticChar->getValue());
+  $self->assert_equals('Toxoplasma gondii RH', $organism->getValue());
+
+  $self->assert_equals('StrainOrLine', $strain->getCategory());
+  $self->assert_equals('DevelopmentalStage', $stage->getCategory());
+  $self->assert_equals('IndividualGeneticCharacteristic', $geneticChar->getCategory());
+  $self->assert_equals('Organism', $organism->getCategory());
+
+  $self->assert_null($strain->getExternalDatabase());
+  $self->assert_equals('nci_meta', $stage->getExternalDatabase()->getName());
+  $self->assert_equals('MO', $geneticChar->getExternalDatabase()->getName());
+  $self->assert_equals('ncbitax', $organism->getExternalDatabase()->getName());
+
+}
+
+#--------------------------------------------------------------------------------
+
+sub test_makeBioMaterial {
+  my $self = shift;
+
+  my $r = $self->getReader();
+
+  my $docRoot = RAD::MR_T::MageImport::VO::DocRoot->new();
+  $docRoot->bioMaterialVOs([]);
+
+  my $biomaterial = $r->makeBioMaterial($docRoot, 'TestSubclassView', 'TestBioMaterialName');
+
+  $self->assert_equals(1, scalar(@{$docRoot->getBioMaterialVOs}));
+  $self->assert_equals('TestBioMaterialName', $biomaterial->getName());
+  $self->assert_equals('TestSubclassView', $biomaterial->getSubclassView());
+
+  my $shouldHaveRetrieved = $r->makeBioMaterial($docRoot, 'TestSubclassView', 'TestBioMaterialName');
+  $self->assert_equals(1, scalar(@{$docRoot->getBioMaterialVOs}));
+  $self->assert_equals('TestBioMaterialName', $shouldHaveRetrieved->getName());
+}
+
+#--------------------------------------------------------------------------------
+
+sub test_parseStudyFactors {
+  my $self = shift;
+
+  my $r = $self->getReader();
+
+  my $externalDatabaseVos = $r->parseExternalDatabases();
+  my $factors = $r->parseStudyFactors($externalDatabaseVos);
+
+  $self->assert_equals(2, scalar(@$factors));
+
+  foreach(@$factors) {
+    $self->assert_equals('RAD::MR_T::MageImport::VO::StudyFactorVO', ref($_));
+  }
+
+  my $strain = $factors->[0];
+  my $grow = $factors->[1];
+
+  $self->assert_equals('Strain', $strain->getName());
+  $self->assert_equals('Time Grown', $grow->getName());
+
+  my $strainType = $strain->getType();
+  my $growType = $grow->getType();
+
+  $self->assert_equals('strain_or_line', $strainType->getValue());
+  $self->assert_null($strainType->getExternalDatabase());
+
+  $self->assert_equals('timepoint', $growType->getValue());
+  my $extDb = $growType->getExternalDatabase();
+
+  $self->assert_equals('MO', $extDb->getName());
+}
+
+#--------------------------------------------------------------------------------
+sub test_parseStudyDesign {
+  my $self = shift;
+
+  my $r = $self->getReader();
+
+  my $externalDatabaseVos = $r->parseExternalDatabases();
+  my $factors = $r->parseStudyFactors($externalDatabaseVos);
+  my $studyDesign = $r->parseStudyDesign($factors);
+
+  $self->assert_equals('RAD::MR_T::MageImport::VO::StudyDesignVO', ref($studyDesign));
+
+  #$self->assert_null($studyDesign->getName());
+
+  $self->assert_equals(2, scalar(@{$studyDesign->getFactors()}));
+  $self->assert_equals(2, scalar(@{$studyDesign->getTypes()}));
+
+  my $strainOrLine = $studyDesign->getTypes()->[0];
+  $self->assert_equals('strain_or_line_design', $strainOrLine->getValue());
+  $self->assert_null($strainOrLine->getCategory());
+  $self->assert_null($strainOrLine->getExternalDatabase());
+
+}
+
+#--------------------------------------------------------------------------------
+
+sub test_getRowByHeader {
+  my $self = shift;
+
+  my $r = $self->getReader();
+
+  $r->{lines} = ["Test1\tValue1\tValue2\tValue3",
+                 "Test2\tValue4\tValue5\tValue6",
+                 "Test3\tValue7\tValue8\tValue9",
+                 "Test4\tValue10\tTest5",
+                 "Test5\tValue11",
+                ];
+
+  my $line1 = $r->getRowByHeader('^Test1');
+  $self->assert_equals(3, scalar(@$line1));
+  $self->assert_equals("Value3", $line1->[2]);
+
+  my $line5 = $r->getRowByHeader('^Test5');
+  $self->assert_equals(1, scalar(@$line5));
+  $self->assert_equals("Value11", $line5->[0]);
+}
+
+#--------------------------------------------------------------------------------
+
+sub _test_parse {
+  my $self = shift;
+
+  my $r = $self->getReader();
+  my $docRoot = $r->parse();
+
+  my $protocols = $docRoot->getProtocolVOs();
+  my $affiliations = $docRoot->getAffiliationVOs();
+  my $persons = $docRoot->getPersonVOs();
+  my $study = $docRoot->getStudyVO();
+
+  $self->assert_not_null($study);
+  $self->assert_equals(3, scalar(@$protocols));
+  $self->assert_equals(4, scalar(@$affiliations));
+  $self->assert_equals(8, scalar(@$persons));
+}
+
+#--------------------------------------------------------------------------------
+
+
+sub test_parseProtocols {
+  my $self = shift;
+
+  my $r = $self->getReader();
+
+  my $externalDatabaseVos = $r->parseExternalDatabases();
+  my $protocols = $r->parseProtocols($externalDatabaseVos);
+
+  $self->assert_equals(7, scalar(@$protocols));
+  foreach(@$protocols) {
+    $self->assert_equals('RAD::MR_T::MageImport::VO::ProtocolVO', ref($_));
+  }
+
+  my $grow = $protocols->[0];
+  my $norm = $protocols->[6];
+
+  $self->assert_equals('Parasite Growth (Roos)', $grow->getName());
+  $self->assert_matches(qr(^Wild Type parasite in), $grow->getProtocolDescription());
+
+  my $type = $grow->getProtocolType();
+  $self->assert_equals('grow', $type->getValue());
+
+  my $typeExtDb = $type->getExternalDatabase();
+  $self->assert_equals('MO', $typeExtDb->getName());
+
+  my $params = $grow->getParams();
+  $self->assert_equals(1, scalar(@$params));
+  $self->assert_equals('time_of_extraction', $params->[0]->getName());
+
+  my $normParams = $norm->getParams();
+  $self->assert_equals(3, scalar(@$normParams));
+  $self->assert_equals('BG correct', $normParams->[0]->getName());
+  $self->assert_equals('Normalization', $normParams->[1]->getName());
+  $self->assert_equals('Summarization', $normParams->[2]->getName());
+}
+
+sub test_parseExternalDatabases {
+  my $self = shift;
+
+  my $r = $self->getReader();
+  my $extDbs = $r->parseExternalDatabases();
+
+  $self->assert_equals(3, scalar(@$extDbs));
+  foreach(@$extDbs) {
+    $self->assert_equals('RAD::MR_T::MageImport::VO::ExternalDatabaseVO', ref($_));
+  }
+
+  my $mo = $extDbs->[0];
+  my $tax = $extDbs->[1];
+  my $meta = $extDbs->[2];
+
+  $self->assert_equals('MO', $mo->getName());
+  $self->assert_equals('ncbitax', $tax->getName());
+  $self->assert_equals('nci_meta', $meta->getName());
+
+  $self->assert_equals('1.3.1', $mo->getVersion());
+  $self->assert_equals('unknown', $tax->getVersion());
+  $self->assert_equals('unknown', $meta->getVersion());
+
+  $self->assert_equals('http://mged.sourceforge.net/ontologies/MGEDontology.php', $mo->getUri());
+}
+
+sub test_parseAffiliations {
+  my $self = shift;
+
+  my $r = $self->getReader();
+  my $affiliations = $r->parseAffiliations();
+
+  $self->assert_equals(2, scalar(@$affiliations));
+  foreach(@$affiliations) {
+    $self->assert_equals('RAD::MR_T::MageImport::VO::AffiliationVO', ref($_));
+  }
+
+  $self->assert_matches(qr(^Department of Biology), $affiliations->[0]->getName());
+  $self->assert_matches(qr(^University of Pennsylvania), $affiliations->[1]->getName());
+}
+
+sub test_parsePersons {
+  my ($self) = @_;
+
+  my $r = $self->getReader();
+  my $affiliations = $r->parseAffiliations();
+  my $persons = $r->parsePersons($affiliations);
+
+  $self->assert_equals(3, scalar(@$persons));
+  foreach(@$persons) {
+    $self->assert_equals('RAD::MR_T::MageImport::VO::PersonVO', ref($_));
+  }
+
+  my $person0 = $persons->[0];
+  my $person1 = $persons->[1];
+  my $person2 = $persons->[2];
+
+  $self->assert_equals('Bahl', $person0->getLast());
+  $self->assert_equals('Amit', $person0->getFirst());
+  $self->assert_equals('abahl at mail.med.upenn.edu', $person0->getEmail());
+  $self->assert_equals('', $person0->getPhone());
+  $self->assert_equals('215 898 2118', $person1->getPhone());
+  $self->assert_matches(qr(^423 Guardian), $person0->getAddress());
+  
+  my $affiliation0 = $person0->getAffiliation();
+  $self->assert_matches(qr(^Department of Biology), $affiliation0->getName());
+}
+
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/TestMagemlReader.pm b/lib/perl/RAD/MR_T/MageImport/Test/TestMagemlReader.pm
new file mode 100644
index 0000000..32a915c
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/TestMagemlReader.pm
@@ -0,0 +1,91 @@
+package RAD::MR_T::MageImport::Test::TestMagemlReader;
+
+use base qw(Test::Unit::TestCase);
+use Carp;
+use Log::Log4perl qw(get_logger :levels);
+
+use RAD::MR_T::MageImport::Service::Reader::MagemlReader;
+ 
+sub new {
+  my $self = shift()->SUPER::new(@_);
+
+ # set up logger
+  Log::Log4perl->init_once("$ENV{GUS_HOME}/config/log4perl.config");
+  my $sLogger = get_logger("RAD::MR_T::MageImport::Service");
+  $sLogger->debug("Start the MagemlReader testers");
+
+  $self->{logger} = $sLogger;
+  $self->{reader} =  RAD::MR_T::MageImport::Service::Reader::MagemlReader->new("test2.xml");
+  $self->{reader}->setLogger($sLogger);
+  $self->{doc} = RAD::MR_T::MageImport::VO::DocRoot->new();
+  $self->{mage} = $self->{reader} ->getMage();
+  $sLogger->debug("finish reading the mage-ml");
+  return $self; 
+}
+
+sub set_up {
+  my $self = shift;
+
+}
+
+sub test_setExtDBVOs {
+  my $self = shift;
+  $self->{reader}->setExtDBVOs($self->{doc}, $self->{mage});
+#check the $self->{doc}
+  $self->assert(1);
+}
+
+sub test_setPersonAndAffiliationVOs {
+  my $self = shift;
+  my $logger =  $self->{logger};
+
+  $self->{reader}->setPersonAndAffiliationVOs($self->{doc}, $self->{mage});
+#check the $self->{doc}
+}
+
+sub test_setProtocolAndParamVOs {
+  my $self = shift;
+  my $logger =  $self->{logger};
+
+  $self->{reader}->setProtocolAndParamVOs($self->{doc}, $self->{mage});
+#check the $self->{doc}
+}
+
+sub test_setStudyVO {
+  my $self = shift;
+  $self->{reader}->setPersonAndAffiliationVOs($self->{doc}, $self->{mage});
+  $self->{reader}->setStudyVO($self->{doc}, $self->{mage});
+#check the $self->{doc}
+  $self->assert(1);
+}
+
+sub test_setBioMatVOs {
+  my $self = shift;
+  $self->{reader}->setBioMatVOs($self->{doc}, $self->{mage});
+#check the $self->{doc}
+  $self->assert(1);
+}
+
+sub test_setTreatmentVOs {
+  my $self = shift;
+  $self->{reader}->setBioMatVOs($self->{doc}, $self->{mage});
+  $self->{reader}->setTreatmentVOs($self->{doc}, $self->{mage});
+#check the $self->{doc}
+  $self->assert(1);
+}
+
+sub test_setAssayVOs {
+  my $self = shift;
+  $self->{reader}->setPersonAndAffiliationVOs($self->{doc}, $self->{mage});
+  $self->{reader}->setStudyVO($self->{doc}, $self->{mage});
+  $self->{reader}->setAssayVOs($self->{doc}, $self->{mage});
+#check the $self->{doc}
+  $self->assert(1);
+}
+
+sub tear_down {
+  my $self = shift;
+
+}
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/TestMain.pm b/lib/perl/RAD/MR_T/MageImport/Test/TestMain.pm
new file mode 100644
index 0000000..d4e3578
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/TestMain.pm
@@ -0,0 +1,167 @@
+package RAD::MR_T::MageImport::Test::TestMain;
+
+use strict;
+
+use base qw(Test::Unit::TestCase);
+use Carp;
+use Log::Log4perl qw(get_logger :levels);
+use XML::Simple;
+use Data::Dumper;
+use Error qw(:try);
+
+use RAD::MR_T::MageImport::ServiceFactory;
+
+use  GUS::ObjRelP::DbiDatabase;
+use GUS::Supported::GusConfig;
+
+use GUS::Model::Study::Study;
+use GUS::Model::RAD::StudyAssay;
+use GUS::Model::RAD::Assay;
+
+use RAD::MR_T::MageImport::Service::Reader::MockReader;
+use RAD::MR_T::MageImport::Service::Translator::VoToGusTranslator;
+use RAD::MR_T::MageImport::Service::Tester::SqlTester;
+
+Log::Log4perl->init_once("$ENV{GUS_HOME}/config/log4perl.config");
+my $sLogger = get_logger("RAD::MR_T::MageImport::Service");
+
+my ($loadMageDoc, $testCount);
+
+sub new {
+  my $self = shift()->SUPER::new(@_);
+
+  $testCount = scalar $self->list_tests();
+
+  my @properties;
+
+  my $configFile = "$ENV{GUS_HOME}/config/gus.config";
+
+  unless(-e $configFile) {
+    my $error = "Config file $configFile does not exist.";
+    die $error;
+  }
+
+  my $config = GUS::Supported::GusConfig->new($configFile);
+  
+  my $login       = $config->getDatabaseLogin();
+  my $password    = $config->getDatabasePassword();
+  my $core        = $config->getCoreSchemaName();
+  my $dbiDsn      = $config->getDbiDsn();
+  my $oraDfltRbs  = $config->getOracleDefaultRollbackSegment();
+
+  my $database;
+  unless($database = GUS::ObjRelP::DbiDatabase->getDefaultDatabase()) {
+    $database = GUS::ObjRelP::DbiDatabase->new($dbiDsn, $login, $password,
+                                                  1,0,1,$core, $oraDfltRbs);
+  }
+
+  $self->{_dbi_database} = $database;
+
+  return $self;
+}
+
+sub set_up {
+  my ($self) = @_;
+  my $database =   GUS::ObjRelP::DbiDatabase->getDefaultDatabase();
+  my $val = 0;  
+
+  $database->setCommitState(0);
+
+  $database->setDefaultProjectId($val);
+  $database->setDefaultUserId($val);
+  $database->setDefaultGroupId($val);
+  $database->setDefaultAlgoInvoId(-99);
+
+  $database->setDefaultUserRead(1);
+  $database->setDefaultUserWrite(1);
+  $database->setDefaultGroupRead($val);
+  $database->setDefaultGroupWrite($val);
+  $database->setDefaultOtherRead($val);
+  $database->setDefaultOtherWrite($val);
+}
+
+sub tear_down {
+  my $self = shift;
+
+  $testCount--;
+
+  my $database = GUS::ObjRelP::DbiDatabase->getDefaultDatabase();
+  $database->{'dbh'}->rollback() if $database->{'dbh'};
+
+  # LOG OUT AFTER ALL TESTS ARE FINISHED
+  if($testCount <= 0) {
+    $database->logout();
+    GUS::ObjRelP::DbiDatabase->setDefaultDatabase(undef);
+    print STDERR "LOGGING OUT FROM DBI DATABASE\n";
+  }
+}
+
+sub test_run {
+  my ($self) = @_;
+
+  try {
+    my $mLogger = get_logger("RAD::MR_T::MageImport");
+    #  my $config = XMLin("config_fortestmain.xml");
+    my $config = XMLin("config_testMageTab.xml", ForceArray => 1);
+    my $serviceFactory = RAD::MR_T::MageImport::ServiceFactory->new($config);
+
+    my $reader =  $serviceFactory->getServiceByName('reader');
+
+    $mLogger->info("parse the mage file", $config->{service}->{reader}->{property}->{value});
+    my $docRoot = $reader->parse();
+
+    if(my $processor = $serviceFactory->getServiceByName('processor')) {
+      $mLogger->info("process the value objects using ", ref($processor));
+      $processor->process($docRoot);
+    }
+
+    if(my $validator = $serviceFactory->getServiceByName('validator')){
+
+      $mLogger->info("validate the value objects using ", ref($validator));
+      $validator->check($docRoot);
+    }
+
+    my $translator = $serviceFactory->getServiceByName('translator');
+    $mLogger->info("translate the value objects to GUS objects using ", ref($translator));
+    my $study = $translator->mapAll($docRoot);
+
+    $mLogger->info("submit GUS objects");
+    $self->submit($study) if $study;
+
+    if(my $tester = $serviceFactory->getServiceByName('tester')) {
+      $self->assert($tester->test());
+    }
+
+    if(my $reporter = $serviceFactory->getServiceByName('reporter')){
+      $reporter->report();
+    }
+  } catch Error with {
+    my $e = shift;
+    print $e->stacktrace();
+    $e->throw();
+  };
+
+}
+
+sub submit{
+  my ($self, $study) = @_;
+
+#this will submit study, studydesign, studyfactor and assays if studyAssays are set
+  if(my @studyAssay = $study->getChildren("GUS::Model::RAD::StudyAssay")){
+
+    foreach my $studyAssay (@studyAssay){
+      my $assay = $studyAssay->getParent("GUS::Model::RAD::Assay");
+      $study->addToSubmitList($assay);
+    }
+  }
+
+  if(my @studyBioMaterial = $study->getChildren("GUS::Model::RAD::StudyBioMaterial")){
+    foreach my $studyBioMaterial (@studyBioMaterial){
+      my $biomat = $studyBioMaterial->getParent("GUS::Model::Study::BioMaterialImp");
+      $study->addToSubmitList($biomat);
+    }
+  }
+
+  $study->submit;
+}
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/TestMakeTreatmentSeries.pm b/lib/perl/RAD/MR_T/MageImport/Test/TestMakeTreatmentSeries.pm
new file mode 100644
index 0000000..2e05a12
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/TestMakeTreatmentSeries.pm
@@ -0,0 +1,76 @@
+package RAD::MR_T::MageImport::Test::TestMakeTreatmentSeries;
+
+use base qw(Test::Unit::TestCase);
+use Error qw(:try);
+use Data::Dumper;
+
+use RAD::MR_T::MageImport::Service::ProcessModule::MakeTreatmentSeries;
+use RAD::MR_T::MageImport::Service::ProcessModule::SetQuanProtocol;
+use RAD::MR_T::MageImport::Service::ProcessModule::NamingAcqAndQuan;
+use RAD::MR_T::MageImport::Service::Processor;
+use RAD::MR_T::MageImport::VO::DocRoot;
+use RAD::MR_T::MageImport::Service::Reader::MockReader;
+
+
+sub new {
+  my $self = shift()->SUPER::new(@_);
+  $self->{vo} = undef;
+
+  return $self;
+}
+
+sub set_up {
+ my $self = shift;
+
+ $self->{vo} = RAD::MR_T::MageImport::Service::Reader::MockReader->new->parse();
+}
+
+sub t2est_SetQuanProtocol{
+  my $self = shift;
+  my $processor = RAD::MR_T::MageImport::Service::Processor->new;
+
+  my $decoProcessor = RAD::MR_T::MageImport::Service::ProcessModule::MakeTreatmentSeries->new($processor, "test,test2");
+  my $docRoot = $self->{vo};
+  foreach my $trt(@{$docRoot->getTreatmentVOs}){
+    if($trt->getName eq "treatment_pool"){
+      $trt->setTreatmentType(RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value=>"specified_biomaterial_action", 
+									      category=>"ComplexAction"
+									     })
+			    );
+    }
+  }
+  $self->assert ($decoProcessor->process($self->{vo}) eq "RAD::MR_T::MageImport::Service::ProcessModule::MakeTreatmentSeries");
+  $self->assert_equals("test,test2", $decoProcessor->getTermStr);
+
+}
+
+sub test_SetQuanProtocol2{
+  my $self = shift;
+  my $processor = RAD::MR_T::MageImport::Service::Processor->new;
+
+  $processor = RAD::MR_T::MageImport::Service::ProcessModule::NamingAcqAndQuan->new($processor);
+  $processor = RAD::MR_T::MageImport::Service::ProcessModule::SetQuanProtocol->new($processor, "testtesttest");
+
+  my $decoProcessor = RAD::MR_T::MageImport::Service::ProcessModule::MakeTreatmentSeries->new($processor, "test,test2");
+  my $docRoot = $self->{vo};
+  foreach my $trt(@{$docRoot->getTreatmentVOs}){
+    if($trt->getName eq "treatment_pool"){
+      $trt->setTreatmentType(RAD::MR_T::MageImport::VO::OntologyEntryVO->new({category=>"specified_biomaterial_action", 
+									      value=>$trt->getTreatmentType->getValue
+									     })
+			    );
+    }
+  }
+  $self->assert ($decoProcessor->process($self->{vo}) eq "RAD::MR_T::MageImport::Service::ProcessModule::MakeTreatmentSeries");
+  $self->assert_equals("test,test2", $decoProcessor->getTermStr);
+
+  print Dumper($docRoot);
+  my $found = 0;
+  foreach my $protocol(@{$docRoot->getProtocolVOs}){
+    $found = 1 if $protocol->getName eq "testtesttest";
+  }
+
+  $self->assert($found);
+}
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/TestMergeTreatmentSeriesForSpeciedBiomatAction.pm b/lib/perl/RAD/MR_T/MageImport/Test/TestMergeTreatmentSeriesForSpeciedBiomatAction.pm
new file mode 100644
index 0000000..d0ca1d7
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/TestMergeTreatmentSeriesForSpeciedBiomatAction.pm
@@ -0,0 +1,63 @@
+package RAD::MR_T::MageImport::Test::TestMergeTreatmentSeriesForSpeciedBiomatAction;
+
+use base qw(Test::Unit::TestCase);
+use Error qw(:try);
+use Data::Dumper;
+
+use RAD::MR_T::MageImport::Service::ProcessModule::MergeTreatmentSeriesForSpeciedBiomatAction;
+use RAD::MR_T::MageImport::Service::ProcessModule::NamingAcqAndQuan;
+use RAD::MR_T::MageImport::Service::Processor;
+use RAD::MR_T::MageImport::VO::DocRoot;
+use RAD::MR_T::MageImport::Service::Reader::MockReader;
+
+
+sub new {
+  my $self = shift()->SUPER::new(@_);
+  $self->{vo} = undef;
+
+  return $self;
+}
+
+sub set_up {
+ my $self = shift;
+
+ $self->{vo} = RAD::MR_T::MageImport::Service::Reader::MockReader->new->parse();
+}
+
+sub test_MergeTreatmentSeriesForSpeciedBiomatAction{
+  my $self = shift;
+  my $processor = RAD::MR_T::MageImport::Service::Processor->new;
+
+  $processor = RAD::MR_T::MageImport::Service::ProcessModule::NamingAcqAndQuan->new($processor);
+
+  my $decoProcessor = RAD::MR_T::MageImport::Service::ProcessModule::MergeTreatmentSeriesForSpeciedBiomatAction->new($processor, "purify");
+  my $docRoot = $self->{vo};
+  foreach my $trt(@{$docRoot->getTreatmentVOs}){
+    if($trt->getName eq "treatment_pool"){
+      $trt->setTreatmentType(RAD::MR_T::MageImport::VO::OntologyEntryVO->new({category=>"ComplexAction", 
+									      value=>"specified_biomaterial_action",
+									     })
+			    );
+    }
+  }
+
+  $self->assert ($decoProcessor->process($docRoot) eq "RAD::MR_T::MageImport::Service::ProcessModule::MergeTreatmentSeriesForSpeciedBiomatAction");
+  $self->assert_equals("purify", $decoProcessor->getTermStr);
+
+  foreach my $trt(@{$docRoot->getTreatmentVOs}){
+    if($trt && $trt->getTreatmentType->getValue eq "purify"){
+      my $outputBM = $trt->getOutputBM;
+       foreach my $trt2(@{$docRoot->getTreatmentVOs}){
+	if($trt2 && $trt2->getOutputBM == $outputBM && $trt2->getOrderNum != 1){
+	  $self->assert(0);
+	}
+      }
+    }
+
+    if($trt->getOrderNum != 1){
+      $self->assert(0);
+    }
+  }
+}
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/TestNamingAcqAndQuan.pm b/lib/perl/RAD/MR_T/MageImport/Test/TestNamingAcqAndQuan.pm
new file mode 100644
index 0000000..6fed3b8
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/TestNamingAcqAndQuan.pm
@@ -0,0 +1,44 @@
+package RAD::MR_T::MageImport::Test::TestNamingAcqAndQuan;
+
+use base qw(Test::Unit::TestCase);
+use Error qw(:try);
+use RAD::MR_T::MageImport::Service::ProcessModule::NamingAcqAndQuan;
+use RAD::MR_T::MageImport::Service::Processor;
+use RAD::MR_T::MageImport::VO::DocRoot;
+use RAD::MR_T::MageImport::Service::Reader::MockReader;
+
+
+sub new {
+  my $self = shift()->SUPER::new(@_);
+  $self->{vo} = undef;
+
+  return $self;
+}
+
+sub set_up {
+ my $self = shift;
+
+ $self->{vo} = RAD::MR_T::MageImport::Service::Reader::MockReader->new->parse();
+}
+
+sub test_NamingAcqAndQuan{
+  my $self = shift;
+  my $processor = RAD::MR_T::MageImport::Service::Processor->new;
+
+  my $decoProcessor = RAD::MR_T::MageImport::Service::ProcessModule::NamingAcqAndQuan->new($processor);
+
+  $self->assert ($decoProcessor->process($self->{vo}) eq "RAD::MR_T::MageImport::Service::ProcessModule::NamingAcqAndQuan");
+  my $docRoot = $self->{vo};
+  foreach my $assay(@{$docRoot->getAssayVOs}){
+    foreach my $acq(@{$assay->getAcquisitions}){
+      my $name = $assay->getName;
+      $self->assert_matches(qr($name), $acq->getName);
+      foreach my $quan(@{$acq->getQuantifications}){
+	$self->assert_matches(qr($name), $quan->getName);
+      }
+    }
+  }
+}
+
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/TestNoHangingBioMaterials.pm b/lib/perl/RAD/MR_T/MageImport/Test/TestNoHangingBioMaterials.pm
new file mode 100644
index 0000000..b3f0297
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/TestNoHangingBioMaterials.pm
@@ -0,0 +1,63 @@
+package RAD::MR_T::MageImport::Test::TestNoHangingBioMaterials;
+use base qw(Test::Unit::TestCase);
+
+use strict;
+use Error qw(:try);
+
+use Log::Log4perl qw(get_logger :levels);
+
+use Data::Dumper;
+
+use RAD::MR_T::MageImport::Service::ValidatorRule::NoHangingBioMaterials;
+use RAD::MR_T::MageImport::Service::Validator;
+
+use RAD::MR_T::MageImport::VO::DocRoot;
+use RAD::MR_T::MageImport::VO::BioMaterialVO;
+use RAD::MR_T::MageImport::Service::Reader::MageTabReader;
+
+my $docRoot;;
+Log::Log4perl->init_once("$ENV{GUS_HOME}/config/log4perl.config");
+my $logger = get_logger("RAD::MR_T::MageImport::Service");
+
+sub new {
+  my $self = shift()->SUPER::new(@_);
+  return $self;
+}
+
+sub set_up {
+ my $self = shift;
+
+ my $reader =  RAD::MR_T::MageImport::Service::Reader::MageTabReader->new("toxoTemplate.tab");
+ $reader->setLogger($logger);
+ $docRoot = $reader->parse();
+}
+
+sub test_AssayHasContact {
+  my $self = shift;
+
+  my $validator = RAD::MR_T::MageImport::Service::Validator->new;
+  $validator->setLogger($logger);
+
+  my $decoValidator = RAD::MR_T::MageImport::Service::ValidatorRule::NoHangingBioMaterials->new($validator);
+  $self->assert("RAD::MR_T::MageImport::Service::ValidatorRule::NoHangingBioMaterials", $decoValidator->check($docRoot));
+
+  my @bioMaterials = @{$docRoot->getBioMaterialVOs()};
+
+  push(@bioMaterials, RAD::MR_T::MageImport::VO::BioMaterialVO->new({name => 'hanging', subclassView => 'Source'}));
+  $docRoot->bioMaterialVOs(\@bioMaterials);
+
+  try {
+    $decoValidator->check($docRoot);
+  } catch RAD::MR_T::MageImport::ValidatorException with {  };
+
+  pop(@bioMaterials);
+  push(@bioMaterials, RAD::MR_T::MageImport::VO::BioMaterialVO->new({name => 'hanging', subclassView => 'LabeledExtract'}));
+  $docRoot->bioMaterialVOs(\@bioMaterials);
+
+  try {
+    $decoValidator->check($docRoot);
+  } catch RAD::MR_T::MageImport::ValidatorException with {  };
+}
+
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/TestOntologyEntryVO.pm b/lib/perl/RAD/MR_T/MageImport/Test/TestOntologyEntryVO.pm
new file mode 100644
index 0000000..2c25117
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/TestOntologyEntryVO.pm
@@ -0,0 +1,54 @@
+package RAD::MR_T::MageImport::Test::TestOntologyEntryVO;
+use base qw(Test::Unit::TestCase);
+
+use RAD::MR_T::MageImport::VO::OntologyEntryVO;
+
+sub new {
+  my $self = shift()->SUPER::new(@_);
+  $self->{oe} = undef;
+  return $self;
+}
+
+sub set_up {
+  my $self = shift;
+  $self->{oe} = RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value=>"pooling", category=>"protocolType"});
+}
+
+sub test_construct{
+  my $self = shift;
+
+  $self->assert(UNIVERSAL::isa($self->{oe},'RAD::MR_T::MageImport::VO::OntologyEntryVO'), "check object type ok");
+}
+
+sub test_getValue {
+  my $self = shift;
+  my $setValue = $self->{oe}->getValue();
+  $self->assert("pooling" eq $setValue);
+}
+
+sub test_setValue {
+  my $self = shift;
+  $self->{oe}->setValue("splitting");
+  my $setValue = $self->{oe}->getValue();
+  $self->assert("splitting" eq $setValue);
+}
+
+sub test_getCategory {
+  my ($self) = @_;
+  my $setValue = $self->{oe}->getCategory();
+  $self->assert("protocolType" eq $setValue);
+}
+
+sub test_setCategory {
+  my $self = shift;
+  $self->{oe}->setCategory("protocol");
+  my $setValue = $self->{oe}->getCategory();
+  $self->assert("protocol" eq $setValue);
+}
+
+sub tear_down {
+  my $self = shift;
+  $self->{oe} = undef;
+}
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/TestParameterValueVO.pm b/lib/perl/RAD/MR_T/MageImport/Test/TestParameterValueVO.pm
new file mode 100644
index 0000000..ac4fc86
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/TestParameterValueVO.pm
@@ -0,0 +1,43 @@
+package RAD::MR_T::MageImport::Test::TestParameterValueVO;
+use base qw(Test::Unit::TestCase);
+
+use RAD::MR_T::MageImport::VO::ParameterValueVO;
+
+use strict;
+
+my $parameterValue;
+
+sub set_up {
+  my $self = shift;
+  $parameterValue = RAD::MR_T::MageImport::VO::ParameterValueVO->new({value=>"testValue", parameterName=>"testParameterName"}); 
+}
+
+sub test_construct{
+  my $self = shift;
+  $self->assert(UNIVERSAL::isa($parameterValue,'RAD::MR_T::MageImport::VO::ParameterValueVO'), "check object type ok");
+}
+
+sub test_getValue {
+  my $self = shift;
+  $self->assert_equals("testValue", $parameterValue->getValue());
+}
+
+sub test_setValue {
+  my $self = shift;
+  $parameterValue->setValue("newValue");
+  $self->assert_equals("newValue", $parameterValue->getValue());
+}
+
+sub test_getParameterName {
+  my $self = shift;
+  $self->assert_equals("testParameterName", $parameterValue->getParameterName());
+}
+
+sub test_setParameterName {
+  my $self = shift;
+  $parameterValue->setParameterName("newParameterName");
+  $self->assert_equals("newParameterName", $parameterValue->getParameterName());
+}
+
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/TestPersonVO.pm b/lib/perl/RAD/MR_T/MageImport/Test/TestPersonVO.pm
new file mode 100644
index 0000000..db7c3b4
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/TestPersonVO.pm
@@ -0,0 +1,107 @@
+package RAD::MR_T::MageImport::Test::TestPersonVO;
+use base qw(Test::Unit::TestCase);
+
+use RAD::MR_T::MageImport::VO::AffiliationVO;
+use RAD::MR_T::MageImport::VO::PersonVO;
+
+sub new {
+  my $self = shift()->SUPER::new(@_);
+  $self->{vo} = undef;
+  return $self;
+}
+
+sub set_up {
+  my $self = shift;
+  $self->{vo} = RAD::MR_T::MageImport::VO::PersonVO->new({name=>"test", first=>"test", last=>"test", address=>"test", email=>"test", affiliation=>RAD::MR_T::MageImport::VO::AffiliationVO->new});
+}
+
+sub test_construct{
+  my $self = shift;
+  $self->assert(UNIVERSAL::isa($self->{vo},'RAD::MR_T::MageImport::VO::PersonVO'), "check object type ok");
+
+}
+
+sub test_getName {
+  my $self = shift;
+  my $setValue = $self->{vo}->getName();
+  $self->assert("test" eq $setValue);
+}
+
+sub test_setName {
+  my $self = shift;
+  $self->{vo}->setName("test2");
+  my $setValue = $self->{vo}->getName();
+  $self->assert("test2" eq $setValue);
+}
+
+sub test_getFirst {
+  my $self = shift;
+  my $setValue = $self->{vo}->getFirst();
+  $self->assert("test" eq $setValue);
+}
+
+sub test_setFirst {
+  my $self = shift;
+  $self->{vo}->setFirst("test2");
+  my $setValue = $self->{vo}->getFirst();
+  $self->assert("test2" eq $setValue);
+}
+
+sub test_getLast {
+  my $self = shift;
+  my $setValue = $self->{vo}->getLast();
+  $self->assert("test" eq $setValue);
+}
+
+sub test_setLast {
+  my $self = shift;
+  $self->{vo}->setLast("test2");
+  my $setValue = $self->{vo}->getLast();
+  $self->assert("test2" eq $setValue);
+}
+
+sub test_getAddress {
+  my $self = shift;
+  my $setValue = $self->{vo}->getAddress();
+  $self->assert("test" eq $setValue);
+}
+
+sub test_setAddress {
+  my $self = shift;
+  $self->{vo}->setAddress("test2");
+  my $setValue = $self->{vo}->getAddress();
+  $self->assert("test2" eq $setValue);
+}
+
+sub test_getEmail {
+  my $self = shift;
+  my $setValue = $self->{vo}->getEmail();
+  $self->assert("test" eq $setValue);
+}
+
+sub test_setEmail {
+  my $self = shift;
+  $self->{vo}->setEmail("test2");
+  my $setValue = $self->{vo}->getEmail();
+  $self->assert("test2" eq $setValue);
+}
+
+sub test_getAffiliation {
+  my ($self) = @_;
+  my $setValue = $self->{vo}->getAffiliation();
+  $self->assert(UNIVERSAL::isa($setValue,'RAD::MR_T::MageImport::VO::AffiliationVO'), "check object type ok");
+}
+
+sub test_setAffiliation {
+  my $self = shift;
+  $self->{vo}->setAffiliation(RAD::MR_T::MageImport::VO::AffiliationVO->new());
+  my $setValue = $self->{vo}->getAffiliation();
+  $self->assert(UNIVERSAL::isa($setValue,'RAD::MR_T::MageImport::VO::AffiliationVO'), "check object type ok");
+}
+
+sub tear_down {
+  my $self = shift;
+  $self->{vo} = undef;
+}
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/TestProcessModule.pm b/lib/perl/RAD/MR_T/MageImport/Test/TestProcessModule.pm
new file mode 100644
index 0000000..22a03f4
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/TestProcessModule.pm
@@ -0,0 +1,105 @@
+package RAD::MR_T::MageImport::Test::TestProcessModule;
+
+use base qw(Test::Unit::TestCase);
+use Error qw(:try);
+use RAD::MR_T::MageImport::Service::ProcessModule::BlankModule;
+use RAD::MR_T::MageImport::Service::Processor;
+use RAD::MR_T::MageImport::VO::DocRoot;
+use RAD::MR_T::MageImport::Service::Reader::MockReader;
+
+
+sub new {
+  my $self = shift()->SUPER::new(@_);
+  $self->{vo} = undef;
+
+  return $self;
+}
+
+sub set_up {
+ my $self = shift;
+ $self->{vo} =  RAD::MR_T::MageImport::Service::Reader::MockReader->new->parse();
+}
+
+sub test_blankModule{
+  my $self = shift;
+  my $processor = RAD::MR_T::MageImport::Service::Processor->new;
+
+  my $decoProcessor = RAD::MR_T::MageImport::Service::ProcessModule::BlankModule->new($processor);
+
+  $self->assert ($decoProcessor->process($self->{vo}) eq "RAD::MR_T::MageImport::Service::ProcessModule::BlankModule");
+}
+
+
+sub test_blankModule2{
+  my $self = shift;
+  my $processor = RAD::MR_T::MageImport::Service::Processor->new;
+
+  my $decoProcessor = _BlankModule2->new(_BlankModule1->new($processor));
+
+  $self->assert ($decoProcessor->process($self->{vo}) eq "_BlankModule2");
+}
+
+
+sub test_blankModule3{
+  my $self = shift;
+  my $processor = RAD::MR_T::MageImport::Service::Processor->new;
+
+  my @modules = qw (_BlankModule1 _BlankModule2);
+  foreach $rule(@modules){
+    $processor = $rule->new($processor);
+  }
+
+  $self->assert ($processor->process($self->{vo}) eq "_BlankModule2");
+}
+
+package _BlankModule1;
+
+# this is blank module impl1
+
+use strict 'vars';
+use Carp;
+
+use RAD::MR_T::MageImport::VO::DocRoot;
+use RAD::MR_T::MageImport::Service::AbstractProcessModule;
+
+use vars qw / @ISA / ;
+ at ISA = qw / RAD::MR_T::MageImport::Service::AbstractProcessModule/;
+
+sub process {
+ my ($self, $docRoot) = @_;
+ $self->getProcessor->process($docRoot);
+ $self->myprocess($docRoot);
+ return ref($self);
+}
+
+sub myprocess {
+  my ($self, $docRoot) = @_;
+  return 1;
+}
+
+package _BlankModule2;
+
+# this is blank module impl2
+
+use strict 'vars';
+use Carp;
+
+use RAD::MR_T::MageImport::VO::DocRoot;
+use RAD::MR_T::MageImport::Service::AbstractProcessModule;
+
+use vars qw / @ISA / ;
+ at ISA = qw / RAD::MR_T::MageImport::Service::AbstractProcessModule/;
+
+sub process {
+ my ($self, $docRoot) = @_;
+ $self->getProcessor->process($docRoot);
+ $self->yourprocess($docRoot);
+ return ref($self);
+}
+
+sub yourprocess {
+  my ($self, $docRoot) = @_;
+  return 1;
+}
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/TestProtocolHasMgedType.pm b/lib/perl/RAD/MR_T/MageImport/Test/TestProtocolHasMgedType.pm
new file mode 100644
index 0000000..a9011c8
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/TestProtocolHasMgedType.pm
@@ -0,0 +1,72 @@
+package RAD::MR_T::MageImport::Test::TestProtocolHasMgedType;
+use base qw(Test::Unit::TestCase);
+
+use strict;
+use Error qw(:try);
+
+use Log::Log4perl qw(get_logger :levels);
+
+use Data::Dumper;
+
+use RAD::MR_T::MageImport::Service::ValidatorRule::ProtocolHasMgedType;
+use RAD::MR_T::MageImport::Service::Validator;
+
+use RAD::MR_T::MageImport::VO::DocRoot;
+use RAD::MR_T::MageImport::VO::AssayVO;
+use RAD::MR_T::MageImport::Service::Reader::MageTabReader;
+
+my $docRoot;;
+Log::Log4perl->init_once("$ENV{GUS_HOME}/config/log4perl.config");
+my $logger = get_logger("RAD::MR_T::MageImport::Service");
+
+sub new {
+  my $self = shift()->SUPER::new(@_);
+  return $self;
+}
+
+sub set_up {
+ my $self = shift;
+
+
+}
+
+
+sub test_AssayHasContact {
+  my $self = shift;
+
+  my $reader =  RAD::MR_T::MageImport::Service::Reader::MageTabReader->new("toxoTemplate.tab");
+  $reader->setLogger($logger);
+  $docRoot = $reader->parse();
+
+  my $protocols = $docRoot->getProtocolVOs();
+
+  my $validator = RAD::MR_T::MageImport::Service::Validator->new;
+  $validator->setLogger($logger);
+
+  my $decoValidator = RAD::MR_T::MageImport::Service::ValidatorRule::ProtocolHasMgedType->new($validator);
+  $self->assert("RAD::MR_T::MageImport::Service::ValidatorRule::NoHangingBioMaterials", $decoValidator->check($docRoot));
+
+
+  my $badType = $protocols->[0]->getProtocolType();
+  $badType->setValue('nonMged');
+
+  try {
+    $decoValidator->check($docRoot);
+    $self->assert(0);
+  } catch RAD::MR_T::MageImport::ValidatorException with { $self->assert(1); };
+}
+
+sub test_setExperimenatProtocolTypes {
+ my $self = shift;
+
+ # my $protocols = $docRoot->getProtocolVOs();
+
+ my $validator = RAD::MR_T::MageImport::Service::Validator->new;
+ $validator->setLogger($logger);
+
+ my $decoValidator = RAD::MR_T::MageImport::Service::ValidatorRule::ProtocolHasMgedType->new($validator);
+
+ my $types=$decoValidator->_setExperimenatProtocolTypes();
+ $self->assert(scalar @$types>5);
+}
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/TestProtocolParamVO.pm b/lib/perl/RAD/MR_T/MageImport/Test/TestProtocolParamVO.pm
new file mode 100644
index 0000000..e53f015
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/TestProtocolParamVO.pm
@@ -0,0 +1,88 @@
+package RAD::MR_T::MageImport::Test::TestProtocolParamVO;
+use base qw(Test::Unit::TestCase);
+
+use RAD::MR_T::MageImport::VO::ProtocolParamVO;
+use RAD::MR_T::MageImport::VO::OntologyEntryVO;
+
+sub new {
+  my $self = shift()->SUPER::new(@_);
+  $self->{vo} = undef;
+  return $self;
+}
+
+sub set_up {
+  my $self = shift;
+  $self->{vo} = 
+    RAD::MR_T::MageImport::VO::ProtocolParamVO->new({
+					      name=>"test", 
+					      value=>"test", 
+					      dataType=>RAD::MR_T::MageImport::VO::OntologyEntryVO->new(),
+					      unitType=>RAD::MR_T::MageImport::VO::OntologyEntryVO->new()
+					     });
+}
+
+sub test_construct{
+  my $self = shift;
+  $self->assert(UNIVERSAL::isa($self->{vo},'RAD::MR_T::MageImport::VO::ProtocolParamVO'), "check object type ok");
+#  $self->assert_not_null($self->{vo});
+}
+
+sub test_getName {
+  my $self = shift;
+  my $setValue = $self->{vo}->getName();
+  $self->assert("test" eq $setValue);
+}
+
+sub test_setName {
+  my $self = shift;
+  $self->{vo}->setName("test2");
+  my $setValue = $self->{vo}->getName();
+  $self->assert("test2" eq $setValue);
+}
+
+sub test_getValue {
+  my $self = shift;
+  my $setValue = $self->{vo}->getValue();
+  $self->assert("test" eq $setValue);
+}
+
+sub test_setValue {
+  my $self = shift;
+  $self->{vo}->setValue("test2");
+  my $setValue = $self->{vo}->getValue();
+  $self->assert("test2" eq $setValue);
+  $self->assert("test" ne $setValue);
+}
+
+sub test_getUnitType {
+  my ($self) = @_;
+  my $setValue = $self->{vo}->getUnitType();
+  $self->assert(UNIVERSAL::isa($setValue,'RAD::MR_T::MageImport::VO::OntologyEntryVO'), "check object type ok");
+}
+
+sub test_setUnitType {
+  my $self = shift;
+  $self->{vo}->setUnitType(RAD::MR_T::MageImport::VO::OntologyEntryVO->new());
+  my $setValue = $self->{vo}->getUnitType();
+  $self->assert(UNIVERSAL::isa($setValue,'RAD::MR_T::MageImport::VO::OntologyEntryVO'), "check object type ok");
+}
+
+sub test_getDataType {
+  my ($self) = @_;
+  my $setValue = $self->{vo}->getDataType();
+  $self->assert(UNIVERSAL::isa($setValue,'RAD::MR_T::MageImport::VO::OntologyEntryVO'), "check object type ok");
+}
+
+sub test_setDataType {
+  my $self = shift;
+  $self->{vo}->setDataType(RAD::MR_T::MageImport::VO::OntologyEntryVO->new());
+  my $setValue = $self->{vo}->getDataType();
+  $self->assert(UNIVERSAL::isa($setValue,'RAD::MR_T::MageImport::VO::OntologyEntryVO'), "check object type ok");
+}
+
+sub tear_down {
+  my $self = shift;
+  $self->{vo} = undef;
+}
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/TestProtocolVO.pm b/lib/perl/RAD/MR_T/MageImport/Test/TestProtocolVO.pm
new file mode 100644
index 0000000..a23c5dc
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/TestProtocolVO.pm
@@ -0,0 +1,168 @@
+package RAD::MR_T::MageImport::Test::TestProtocolVO;
+use base qw(Test::Unit::TestCase);
+
+use RAD::MR_T::MageImport::VO::ProtocolParamVO;
+use RAD::MR_T::MageImport::VO::OntologyEntryVO;
+use RAD::MR_T::MageImport::VO::ProtocolVO;
+
+sub new {
+  my $self = shift()->SUPER::new(@_);
+  $self->{vo} = undef;
+  return $self;
+}
+
+sub set_up {
+  my $self = shift;
+  $self->{vo} = 
+    RAD::MR_T::MageImport::VO::ProtocolVO->new({
+					      name=>"test", 
+					      protocolDescription=>"test", 
+					      softwareDescription=>"test", 
+					      hardwareDescription=>"test", 
+					      uri=>"test", 
+					      protocolType=>RAD::MR_T::MageImport::VO::OntologyEntryVO->new(),
+					      softwareType=>RAD::MR_T::MageImport::VO::OntologyEntryVO->new(),
+					      hardwareType=>RAD::MR_T::MageImport::VO::OntologyEntryVO->new(),
+					      params=>[RAD::MR_T::MageImport::VO::ProtocolParamVO->new()],
+					     });
+}
+
+sub test_construct{
+  my $self = shift;
+  $self->assert(UNIVERSAL::isa($self->{vo},'RAD::MR_T::MageImport::VO::ProtocolVO'), "check object type ok");
+ # $self->assert_not_null($self->{vo});
+}
+
+sub test_getName {
+  my $self = shift;
+  my $setValue = $self->{vo}->getName();
+  $self->assert("test" eq $setValue);
+}
+
+sub test_setName {
+  my $self = shift;
+  $self->{vo}->setName("test2");
+  my $setValue = $self->{vo}->getName();
+  $self->assert("test2" eq $setValue);
+}
+
+sub test_getProtocolDescription {
+  my $self = shift;
+  my $setValue = $self->{vo}->getProtocolDescription();
+  $self->assert("test" eq $setValue);
+}
+
+sub test_setProtocolDescription {
+  my $self = shift;
+  $self->{vo}->setProtocolDescription("test2");
+  my $setValue = $self->{vo}->getProtocolDescription();
+  $self->assert("test2" eq $setValue);
+}
+
+sub test_getHardwareDescription {
+  my $self = shift;
+  my $setValue = $self->{vo}->getHardwareDescription();
+  $self->assert("test", $setValue);
+}
+
+sub test_setHardwareDescription {
+  my $self = shift;
+  $self->{vo}->setHardwareDescription("test2");
+  my $setValue = $self->{vo}->getHardwareDescription();
+  $self->assert("test2" eq $setValue);
+}
+
+sub test_getSoftwareDescription {
+  my $self = shift;
+  my $setValue = $self->{vo}->getSoftwareDescription();
+  $self->assert("test" eq $setValue);
+}
+
+sub test_setSoftwareDescription {
+  my $self = shift;
+  $self->{vo}->setSoftwareDescription("test2");
+  my $setValue = $self->{vo}->getSoftwareDescription();
+  $self->assert("test2" eq $setValue);
+}
+
+sub test_getUri {
+  my $self = shift;
+  my $setValue = $self->{vo}->getUri();
+  $self->assert("test" eq $setValue);
+  $self->assert("test1" ne $setValue);
+}
+
+sub test_setUri {
+  my $self = shift;
+  $self->{vo}->setUri("test2");
+  my $setValue = $self->{vo}->getUri();
+  $self->assert("test2" eq $setValue);
+}
+
+
+sub test_getProtocolType {
+  my ($self) = @_;
+  my $setValue = $self->{vo}->getProtocolType();
+  $self->assert(UNIVERSAL::isa($setValue,'RAD::MR_T::MageImport::VO::OntologyEntryVO'), "check object type ok");
+}
+
+sub test_setProtocolType {
+  my $self = shift;
+  $self->{vo}->setProtocolType(RAD::MR_T::MageImport::VO::OntologyEntryVO->new());
+  my $setValue = $self->{vo}->getProtocolType();
+  $self->assert(UNIVERSAL::isa($setValue,'RAD::MR_T::MageImport::VO::OntologyEntryVO'), "check object type ok");
+}
+
+sub test_getSoftwareType {
+  my ($self) = @_;
+  my $setValue = $self->{vo}->getSoftwareType();
+  $self->assert(UNIVERSAL::isa($setValue,'RAD::MR_T::MageImport::VO::OntologyEntryVO'), "check object type ok");
+}
+
+sub test_setSoftwareType {
+  my $self = shift;
+  $self->{vo}->setSoftwareType(RAD::MR_T::MageImport::VO::OntologyEntryVO->new());
+  my $setValue = $self->{vo}->getSoftwareType();
+  $self->assert(UNIVERSAL::isa($setValue,'RAD::MR_T::MageImport::VO::OntologyEntryVO'), "check object type ok");
+}
+
+sub test_getHardwareType {
+  my ($self) = @_;
+  my $setValue = $self->{vo}->getHardwareType();
+  $self->assert(UNIVERSAL::isa($setValue,'RAD::MR_T::MageImport::VO::OntologyEntryVO'), "check object type ok");
+}
+
+sub test_setHardwareType {
+  my $self = shift;
+  $self->{vo}->setHardwareType(RAD::MR_T::MageImport::VO::OntologyEntryVO->new());
+  my $setValue = $self->{vo}->getHardwareType();
+  $self->assert(UNIVERSAL::isa($setValue,'RAD::MR_T::MageImport::VO::OntologyEntryVO'), "check object type ok");
+}
+
+sub test_getParams {
+  my ($self) = @_;
+  my $setValue = $self->{vo}->getParams();
+  $self->assert(UNIVERSAL::isa($setValue->[0],'RAD::MR_T::MageImport::VO::ProtocolParamVO'), "check object type again ok");
+}
+
+sub test_setParams {
+  my $self = shift;
+  $self->{vo}->setParams([RAD::MR_T::MageImport::VO::ProtocolParamVO->new()]);
+  my $setValue = $self->{vo}->getParams();
+  $self->assert(UNIVERSAL::isa($setValue->[0],'RAD::MR_T::MageImport::VO::ProtocolParamVO'), "check studydesign object type ok");
+}
+
+sub test_addParams {
+  my $self = shift;
+  $self->{vo}->addParams((RAD::MR_T::MageImport::VO::ProtocolParamVO->new()));
+  my $setValue = $self->{vo}->getParams();
+  $self->assert(UNIVERSAL::isa($setValue->[1],'RAD::MR_T::MageImport::VO::ProtocolParamVO'), "check added studydesign object type ok");
+}
+
+
+sub tear_down {
+  my $self = shift;
+  $self->{vo} = undef;
+}
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/TestQuantificationVO.pm b/lib/perl/RAD/MR_T/MageImport/Test/TestQuantificationVO.pm
new file mode 100644
index 0000000..212c0a0
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/TestQuantificationVO.pm
@@ -0,0 +1,74 @@
+package RAD::MR_T::MageImport::Test::TestQuantificationVO;
+use base qw(Test::Unit::TestCase);
+
+use RAD::MR_T::MageImport::VO::QuantificationVO;
+use RAD::MR_T::MageImport::VO::ParameterValueVO;
+
+sub new {
+  my $self = shift()->SUPER::new(@_);
+  $self->{vo} = undef;
+  return $self;
+}
+
+sub set_up {
+  my $self = shift;
+  $self->{vo} = RAD::MR_T::MageImport::VO::QuantificationVO->new({name=>"test",
+                                                                  uri=>"test",
+                                                                  parameterValues=>[RAD::MR_T::MageImport::VO::ParameterValueVO->new({parameterName => 'testName', value => 'testValue'}),
+                                                                                ],
+                                                                 }); 
+}
+
+sub test_construct{
+  my $self = shift;
+  $self->assert(UNIVERSAL::isa($self->{vo},'RAD::MR_T::MageImport::VO::QuantificationVO'), "check object type ok");
+#  $self->assert_not_null($self->{vo});
+}
+
+sub test_getName {
+  my $self = shift;
+  my $setValue = $self->{vo}->getName();
+  $self->assert("test" eq $setValue);
+}
+
+sub test_setName {
+  my $self = shift;
+  $self->{vo}->setName("test2");
+  my $setValue = $self->{vo}->getName();
+  $self->assert("test2" eq $setValue);
+}
+
+sub test_getUri {
+  my $self = shift;
+  my $setValue = $self->{vo}->getUri();
+  $self->assert("test" eq  $setValue);
+}
+
+sub test_setUri {
+  my $self = shift;
+  $self->{vo}->setUri("test2");
+  my $setValue = $self->{vo}->getUri();
+  $self->assert("test2" eq $setValue);
+}
+
+sub test_getParameterValues {
+  my ($self) = @_;
+  my $setValue = $self->{vo}->getParameterValues();
+  $self->assert(UNIVERSAL::isa($setValue->[0],'RAD::MR_T::MageImport::VO::ParameterValueVO'), "check object type ok");
+  $self->assert_equals('testValue', $setValue->[0]->getValue);
+}
+
+sub test_setParameterValues {
+  my $self = shift;
+  $self->{vo}->setParameterValues([RAD::MR_T::MageImport::VO::ParameterValueVO->new({value => 'newValue'})]);
+  my $setValue = $self->{vo}->getParameterValues();
+  $self->assert(UNIVERSAL::isa($setValue->[0],'RAD::MR_T::MageImport::VO::ParameterValueVO'), "check object type ok");
+  $self->assert_equals('newValue', $setValue->[0]->getValue);
+}
+
+sub tear_down {
+  my $self = shift;
+  $self->{vo} = undef;
+}
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/TestServiceFactory.pm b/lib/perl/RAD/MR_T/MageImport/Test/TestServiceFactory.pm
new file mode 100644
index 0000000..77525ed
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/TestServiceFactory.pm
@@ -0,0 +1,62 @@
+package RAD::MR_T::MageImport::Test::TestServiceFactory;
+
+use base qw(Test::Unit::TestCase);
+use Carp;
+use Log::Log4perl qw(get_logger :levels);
+use XML::Simple;
+use Data::Dumper;
+
+use RAD::MR_T::MageImport::ServiceFactory;
+
+sub set_up {
+  my $self = shift;
+
+ # set up logger
+  Log::Log4perl->init_once("$ENV{GUS_HOME}/config/log4perl.config");
+  my $mLogger = get_logger("RAD::MR_T::MageImport");
+  my $config = XMLin("config.xml", ForceArray => 1);
+
+  $mLogger->info("Start the ServiceFactory");
+  $mLogger->info("****Dump the config****", sub { Dumper($config) } );
+  $self->{logger} = $mLogger;
+  $self->{config} = $config;
+  $self->{serviceFactory} =  RAD::MR_T::MageImport::ServiceFactory->new($config);
+
+  $mLogger->info("Finish making the serices");
+
+}
+
+sub test_getServiceByName{
+  my $self = shift;
+  my $reader = $self->{serviceFactory}->getServiceByName("reader");
+
+  $self->assert(UNIVERSAL::isa($reader,'RAD::MR_T::MageImport::Service::Reader::MagemlReader'), "check object type ok");
+}
+
+
+sub test_getServiceByName2{
+  my $self = shift;
+  my $reader = $self->{serviceFactory}->getServiceByName("translator");
+
+  $self->assert(UNIVERSAL::isa($reader,'RAD::MR_T::MageImport::Service::Translator::VoToGusTranslator'), "check object type ok");
+}
+
+
+sub test_getServiceByName3{
+  my $self = shift;
+  my $reader = $self->{serviceFactory}->getServiceByName("validator");
+
+  $self->assert(UNIVERSAL::isa($reader,'RAD::MR_T::MageImport::Service::ValidatorRule::BlankRule'), "check object type ok");
+}
+
+sub test_getServiceByName4{
+  my $self = shift;
+  my $reader = $self->{serviceFactory}->getServiceByName("processor");
+
+  $self->assert(UNIVERSAL::isa($reader,'RAD::MR_T::MageImport::Service::ProcessModule::MakeTreatmentSeries'), "check object type ok");
+
+  $self->assert_equals("purify", $reader->getTermStr());
+}
+
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/TestSetQuanProtocolToGusProtocol.pm b/lib/perl/RAD/MR_T/MageImport/Test/TestSetQuanProtocolToGusProtocol.pm
new file mode 100644
index 0000000..d30585f
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/TestSetQuanProtocolToGusProtocol.pm
@@ -0,0 +1,48 @@
+package RAD::MR_T::MageImport::Test::TestSetQuanProtocolToGusProtocol;
+
+use base qw(Test::Unit::TestCase);
+use Error qw(:try);
+use RAD::MR_T::MageImport::Service::ProcessModule::SetQuanProtocolToGusProtocol;
+use RAD::MR_T::MageImport::Service::Processor;
+use RAD::MR_T::MageImport::VO::DocRoot;
+use RAD::MR_T::MageImport::Service::Reader::MockReader;
+
+
+sub new {
+  my $self = shift()->SUPER::new(@_);
+  $self->{vo} = undef;
+
+  return $self;
+}
+
+sub set_up {
+ my $self = shift;
+
+ $self->{vo} = RAD::MR_T::MageImport::Service::Reader::MockReader->new->parse();
+}
+
+sub test_SetQuanProtocol{
+  my $self = shift;
+  my $processor = RAD::MR_T::MageImport::Service::Processor->new;
+
+  my $decoProcessor = RAD::MR_T::MageImport::Service::ProcessModule::SetQuanProtocolToGusProtocol->new($processor, "test");
+
+  $self->assert ($decoProcessor->process($self->{vo}) eq "RAD::MR_T::MageImport::Service::ProcessModule::SetQuanProtocolToGusProtocol");
+  my $docRoot = $self->{vo};
+  foreach my $assay(@{$docRoot->getAssayVOs}){
+    foreach my $acq(@{$assay->getAcquisitions}){
+       foreach my $quan(@{$acq->getQuantifications}){
+	$self->assert_equals("test", $quan->getProtocolName);
+      }
+    }
+  }
+  my $found = 0;
+  foreach my $protocol(@{$docRoot->getProtocolVOs}){
+    $found = 1 if $protocol->getName eq "test";
+  }
+
+  $self->assert($found);
+}
+
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/TestSqlReporter.pm b/lib/perl/RAD/MR_T/MageImport/Test/TestSqlReporter.pm
new file mode 100644
index 0000000..b1881b2
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/TestSqlReporter.pm
@@ -0,0 +1,93 @@
+package RAD::MR_T::MageImport::Test::TestSqlReporter;
+
+use base qw(Test::Unit::TestCase);
+use Carp;
+use Log::Log4perl qw(get_logger :levels);
+use XML::Simple;
+use Data::Dumper;
+use Error qw(:try);
+
+use GUS::Supported::GusConfig;
+use GUS::ObjRelP::DbiDatabase;
+use RAD::MR_T::MageImport::Service::Reporter::SqlReporter;
+use RAD::MR_T::MageImport::MageImportError;
+
+my $testCount;
+
+sub new {
+  my $self = shift()->SUPER::new(@_);
+  $testCount = scalar $self->list_tests();
+
+  return $self;
+}
+
+sub set_up {
+  my $self = shift;
+  my $configFile = "$ENV{GUS_HOME}/config/gus.config";
+
+  unless(-e $configFile) {
+    my $error = "Config file $configFile does not exist.";
+    die $error;
+  }
+
+  my $config = GUS::Supported::GusConfig->new($configFile);
+  
+  my $login       = $config->getDatabaseLogin();
+  my $password    = $config->getDatabasePassword();
+  my $core        = $config->getCoreSchemaName();
+  my $dbiDsn      = $config->getDbiDsn();
+  my $oraDfltRbs  = $config->getOracleDefaultRollbackSegment();
+
+  my $database;
+  unless($database = GUS::ObjRelP::DbiDatabase->getDefaultDatabase()) {
+    $database = GUS::ObjRelP::DbiDatabase->new($dbiDsn, $login, $password,
+                                                  0,0,1,$core, $oraDfltRbs);
+  }
+
+  $self->{_dbi_database} = $database;
+
+ # set up logger
+  Log::Log4perl->init_once("$ENV{GUS_HOME}/config/log4perl.config");
+  my $mLogger = get_logger("RAD::MR_T::MageImport::Service");
+
+  my $reporter = RAD::MR_T::MageImport::Service::Reporter::SqlReporter->new("sqlReporter.txt");
+
+  $reporter->setLogger($mLogger);
+  $self->{logger} = $mLogger;
+  $self->{reporter} = $reporter;
+
+
+  $database =   GUS::ObjRelP::DbiDatabase->getDefaultDatabase();
+  $database->setDefaultAlgoInvoId(376473);
+
+}
+
+sub test_report {
+  my $self = shift;
+
+  try {
+    $self->{reporter} ->report();
+  } catch RAD::MR_T::MageImport::ReporterException with {
+     my $ex = shift;
+     $self->{logger}->debug("stacktrace");
+     $ex->throw;
+   };
+}
+
+
+sub tear_down {
+  my $self = shift;
+
+   $testCount--;
+
+  my $database = GUS::ObjRelP::DbiDatabase->getDefaultDatabase();
+  $database->{'dbh'}->rollback();
+
+  # LOG OUT AFTER ALL TESTS ARE FINISHED
+  if($testCount <= 0) {
+    $database->logout();
+ #   GUS::ObjRelP::DbiDatabase->setDefaultDatabase(undef);
+    print STDERR "LOGGING OUT FROM DBI DATABASE\n";
+  }
+}
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/TestSqlTester.pm b/lib/perl/RAD/MR_T/MageImport/Test/TestSqlTester.pm
new file mode 100644
index 0000000..c110501
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/TestSqlTester.pm
@@ -0,0 +1,156 @@
+package RAD::MR_T::MageImport::Test::TestSqlTester;
+use base qw(Test::Unit::TestCase);
+
+use strict;
+
+use GUS::ObjRelP::DbiDatabase;
+
+use GUS::Supported::GusConfig;
+
+use RAD::MR_T::MageImport::Service::Tester::SqlTester;
+
+use Log::Log4perl qw(get_logger :levels);
+
+use Data::Dumper;
+
+use Error qw(:try);
+
+my ($tester, $testCount);
+
+my $lines = [join("|", '\w+', 'select \'test_example\' from dual', 'ex_test'),
+             join("|", '\w+', 'select * from (select \'$$ex_test$$\' from dual)', ''),
+             join("|", '[,123]+', 'select 1,2,3 from dual', 'multi_test'),
+             join("|", '[,123]+', 'select * from (select \'$$multi_test$$\' from dual)', ''),
+            ];
+
+#================================================================================
+
+sub new {
+  my $self = shift()->SUPER::new(@_);
+
+  $testCount = scalar $self->list_tests();
+  
+  return $self;
+}
+
+#--------------------------------------------------------------------------------
+
+sub set_up {
+  my $self = shift;
+
+  my @properties;
+
+  my $configFile = "$ENV{GUS_HOME}/config/gus.config";
+
+  unless(-e $configFile) {
+    my $error = "Config file $configFile does not exist.";
+    die $error;
+  }
+
+  my $config = GUS::Supported::GusConfig->new($configFile);
+  
+  my $login       = $config->getDatabaseLogin();
+  my $password    = $config->getDatabasePassword();
+  my $core        = $config->getCoreSchemaName();
+  my $dbiDsn      = $config->getDbiDsn();
+  my $oraDfltRbs  = $config->getOracleDefaultRollbackSegment();
+
+  my $database;
+#  unless($database = GUS::ObjRelP::DbiDatabase->getDefaultDatabase()) {
+    $database = GUS::ObjRelP::DbiDatabase->new($dbiDsn, $login, $password,
+                                                  0,0,1,$core, $oraDfltRbs);
+#  }
+  
+  my $fn = "dummyFile";
+  my $handle = $database->getDbHandle();
+
+ # set up logger
+  Log::Log4perl->init_once("$ENV{GUS_HOME}/config/log4perl.config");
+  my $sLogger = get_logger("RAD::MR_T::MageImport::Service");
+
+  $tester = RAD::MR_T::MageImport::Service::Tester::SqlTester->new($fn, $handle);
+  $tester->{_lines_array} = $lines;
+  $tester->setLogger($sLogger);
+
+}
+
+#--------------------------------------------------------------------------------
+
+sub tear_down {
+  my $self = shift;
+
+   $testCount--;
+
+  my $database = GUS::ObjRelP::DbiDatabase->getDefaultDatabase();
+  $database->{'dbh'}->rollback();
+
+  # LOG OUT AFTER ALL TESTS ARE FINISHED
+  if($testCount <= 0) {
+    $database->logout();
+ #   GUS::ObjRelP::DbiDatabase->setDefaultDatabase(undef);
+    print STDERR "LOGGING OUT FROM DBI DATABASE\n";
+  }
+}
+
+#--------------------------------------------------------------------------------
+
+sub test_parseLines {
+  my $self = shift;
+
+  my $sqlHash = $tester->parseLines();
+
+  foreach(keys %$sqlHash) {
+    my $regex = $sqlHash->{$_}->{expected};
+    $self->assert_matches(qr($regex), $sqlHash->{$_}->{actual});
+  }
+
+}
+
+#--------------------------------------------------------------------------------
+
+sub test_parseLine {
+  my $self = shift;
+
+  my %params;
+
+  my ($expected, $actual, $sql) = $tester->_parseLine($lines->[0], \%params);
+  $self->assert_equals('\w+', $expected);
+  $self->assert_equals('test_example', $actual);
+  $self->assert_equals('select \'test_example\' from dual', $sql);
+
+  ($expected, $actual, $sql) = $tester->_parseLine($lines->[1], \%params);
+  $self->assert_equals('\w+', $expected);
+  $self->assert_equals('test_example', $actual);
+  $self->assert_equals('select * from (select \'test_example\' from dual)', $sql);
+
+  ($expected, $actual, $sql) = $tester->_parseLine($lines->[2], \%params);
+  $self->assert_equals('[,123]+', $expected);
+  $self->assert_equals('1,2,3', $actual);
+  $self->assert_equals('select 1,2,3 from dual', $sql);
+
+  ($expected, $actual, $sql) = $tester->_parseLine($lines->[3], \%params);
+  $self->assert_equals('[,123]+', $expected);
+  $self->assert_equals('1,2,3', $actual);
+  $self->assert_equals('select * from (select \'1,2,3\' from dual)', $sql);
+
+}
+
+#--------------------------------------------------------------------------------
+
+sub test_runSql {
+  my $self = shift;
+
+  try {
+    $tester->_runSql("select * from Study.Study where contact_id = 9");
+    $self->assert(0, "Should have thrown Exception");
+  } catch RAD::MR_T::MageImport::TesterException::SqlError with {};
+
+  my $res = $tester->_runSql("select study_id from Study.Study where study_id = 2560");
+  $self->assert_equals(2560, $res);
+
+  my $many = $tester->_runSql("select 1, 2, 3 from dual");
+  $self->assert_equals('1,2,3', $many);
+
+}
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/TestStudyDesignHasMgedType.pm b/lib/perl/RAD/MR_T/MageImport/Test/TestStudyDesignHasMgedType.pm
new file mode 100644
index 0000000..f2b11b0
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/TestStudyDesignHasMgedType.pm
@@ -0,0 +1,82 @@
+package RAD::MR_T::MageImport::Test::TestStudyDesignHasMgedType;
+use base qw(Test::Unit::TestCase);
+
+use strict;
+use Error qw(:try);
+
+use Log::Log4perl qw(get_logger :levels);
+
+use Data::Dumper;
+
+use RAD::MR_T::MageImport::Service::ValidatorRule::StudyDesignHasMgedType;
+use RAD::MR_T::MageImport::Service::Validator;
+
+use RAD::MR_T::MageImport::VO::DocRoot;
+use RAD::MR_T::MageImport::VO::AssayVO;
+use RAD::MR_T::MageImport::Service::Reader::MageTabReader;
+
+my $docRoot;;
+Log::Log4perl->init_once("$ENV{GUS_HOME}/config/log4perl.config");
+my $logger = get_logger("RAD::MR_T::MageImport::Service");
+
+sub new {
+  my $self = shift()->SUPER::new(@_);
+  return $self;
+}
+
+sub set_up {
+ my $self = shift;
+
+
+}
+
+
+sub test_studyDesignHasMgedType {
+  my $self = shift;
+
+  my $reader =  RAD::MR_T::MageImport::Service::Reader::MageTabReader->new("toxoTemplate.tab");
+  $reader->setLogger($logger);
+  $docRoot = $reader->parse();
+
+  my $study = $docRoot->getStudyVO();
+
+  my $validator = RAD::MR_T::MageImport::Service::Validator->new;
+  $validator->setLogger($logger);
+
+  my $decoValidator = RAD::MR_T::MageImport::Service::ValidatorRule::StudyDesignHasMgedType->new($validator);
+  $decoValidator->setLogger($logger);
+
+  try {
+    $decoValidator->check($docRoot);
+    $self->assert(1);
+  } catch RAD::MR_T::MageImport::ValidatorException with { $self->assert(0); };
+
+  $study->getDesigns->[0]->getTypes->[0]->setValue("badType");
+
+  try {
+    $decoValidator->check($docRoot);
+    $self->assert(0);
+  } catch RAD::MR_T::MageImport::ValidatorException with { $self->assert(1); };
+}
+
+sub test_isMgedTerm {
+ my $self = shift;
+
+ my $validator = RAD::MR_T::MageImport::Service::Validator->new;
+ $validator->setLogger($logger);
+
+ my $decoValidator = RAD::MR_T::MageImport::Service::ValidatorRule::StudyDesignHasMgedType->new($validator);
+ $decoValidator->setLogger($logger);
+
+ $decoValidator->_setStudyDesignTypes ();
+
+ my $result=$decoValidator->_isMgedTerm("test");
+
+ $self->assert($result==0);
+
+ $result=$decoValidator->_isMgedTerm("sex_design");
+
+ $self->assert($result==1);
+
+}
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/TestStudyDesignVO.pm b/lib/perl/RAD/MR_T/MageImport/Test/TestStudyDesignVO.pm
new file mode 100644
index 0000000..c74f0fd
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/TestStudyDesignVO.pm
@@ -0,0 +1,83 @@
+package RAD::MR_T::MageImport::Test::TestStudyDesignVO;
+use base qw(Test::Unit::TestCase);
+
+use RAD::MR_T::MageImport::VO::StudyDesignVO;
+use RAD::MR_T::MageImport::VO::StudyFactorVO;
+use RAD::MR_T::MageImport::VO::OntologyEntryVO;
+
+sub new {
+  my $self = shift()->SUPER::new(@_);
+  $self->{vo} = undef;
+
+  return $self;
+}
+
+sub set_up {
+  my $self = shift;
+  $self->{vo} 
+    = RAD::MR_T::MageImport::VO::StudyDesignVO->new({
+						     name=>"test", 
+						     types=>[RAD::MR_T::MageImport::VO::OntologyEntryVO->new()], 
+						     factors=>[RAD::MR_T::MageImport::VO::StudyFactorVO->new()]
+						    });
+}
+
+sub test_construct{
+  my $self = shift;
+
+  $self->assert(UNIVERSAL::isa($self->{vo},'RAD::MR_T::MageImport::VO::StudyDesignVO'), "check object type ok");
+}
+
+sub test_getName {
+  my $self = shift;
+  my $setName = $self->{vo}->getName();
+  $self->assert("test" eq $setName);
+}
+
+sub test_setName {
+  my $self = shift;
+  $self->{vo}->setName("splitting");
+  my $setValue = $self->{vo}->getName();
+  $self->assert("splitting" eq $setValue);
+}
+
+sub test_getTypes {
+  my ($self) = @_;
+  my $setValue = $self->{vo}->getTypes();
+  $self->assert(UNIVERSAL::isa($setValue->[0],'RAD::MR_T::MageImport::VO::OntologyEntryVO'), "check object type ok");
+}
+
+sub test_setTypes {
+  my $self = shift;
+  $self->{vo}->setTypes([RAD::MR_T::MageImport::VO::OntologyEntryVO->new()]);
+  my $setValue = $self->{vo}->getTypes();
+  $self->assert(UNIVERSAL::isa($setValue->[0],'RAD::MR_T::MageImport::VO::OntologyEntryVO'), "check object type ok");
+}
+
+sub test_addTypes {
+  my $self = shift;
+  $self->{vo}->addTypes((RAD::MR_T::MageImport::VO::OntologyEntryVO->new()));
+  my $setValue = $self->{vo}->getTypes();
+  $self->assert(UNIVERSAL::isa($setValue->[1],'RAD::MR_T::MageImport::VO::OntologyEntryVO'), "check added studydesign object type ok");
+}
+
+sub test_setFactors {
+  my $self = shift;
+  $self->{vo}->setFactors([RAD::MR_T::MageImport::VO::StudyFactorVO->new()]);
+  my $setValue = $self->{vo}->getFactors();
+  $self->assert(UNIVERSAL::isa($setValue->[0],'RAD::MR_T::MageImport::VO::StudyFactorVO'), "check studydesign object type ok");
+}
+
+sub test_addFactors {
+  my $self = shift;
+  $self->{vo}->addFactors((RAD::MR_T::MageImport::VO::StudyFactorVO->new()));
+  my $setValue = $self->{vo}->getFactors();
+  $self->assert(UNIVERSAL::isa($setValue->[1],'RAD::MR_T::MageImport::VO::StudyFactorVO'), "check added studydesign object type ok");
+}
+
+sub tear_down {
+  my $self = shift;
+  $self->{vo} = undef;
+}
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/TestStudyFactorVO.pm b/lib/perl/RAD/MR_T/MageImport/Test/TestStudyFactorVO.pm
new file mode 100644
index 0000000..3d75b1e
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/TestStudyFactorVO.pm
@@ -0,0 +1,55 @@
+package RAD::MR_T::MageImport::Test::TestStudyFactorVO;
+use base qw(Test::Unit::TestCase);
+
+use RAD::MR_T::MageImport::VO::StudyFactorVO;
+use RAD::MR_T::MageImport::VO::OntologyEntryVO;
+
+sub new {
+  my $self = shift()->SUPER::new(@_);
+  $self->{vo} = undef;
+  return $self;
+}
+
+sub set_up {
+  my $self = shift;
+  $self->{vo} = RAD::MR_T::MageImport::VO::StudyFactorVO->new({name=>"test", type=>RAD::MR_T::MageImport::VO::OntologyEntryVO->new()});
+}
+
+sub test_construct{
+  my $self = shift;
+
+  $self->assert(UNIVERSAL::isa($self->{vo},'RAD::MR_T::MageImport::VO::StudyFactorVO'), "check object type ok");
+}
+
+sub test_getName {
+  my $self = shift;
+  my $setName = $self->{vo}->getName();
+  $self->assert("test" eq $setName);
+}
+
+sub test_setName {
+  my $self = shift;
+  $self->{vo}->setName("splitting");
+  my $setValue = $self->{vo}->getName();
+  $self->assert("splitting" eq $setValue);
+}
+
+sub test_getType {
+  my ($self) = @_;
+  my $setValue = $self->{vo}->getType();
+  $self->assert(UNIVERSAL::isa($setValue,'RAD::MR_T::MageImport::VO::OntologyEntryVO'), "check object type ok");
+}
+
+sub test_setType {
+  my $self = shift;
+  $self->{vo}->setType(RAD::MR_T::MageImport::VO::OntologyEntryVO->new());
+  my $setValue = $self->{vo}->getType();
+  $self->assert(UNIVERSAL::isa($setValue,'RAD::MR_T::MageImport::VO::OntologyEntryVO'), "check object type ok");
+}
+
+sub tear_down {
+  my $self = shift;
+  $self->{vo} = undef;
+}
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/TestStudyNameNotInGus.pm b/lib/perl/RAD/MR_T/MageImport/Test/TestStudyNameNotInGus.pm
new file mode 100644
index 0000000..2ff00de
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/TestStudyNameNotInGus.pm
@@ -0,0 +1,80 @@
+package RAD::MR_T::MageImport::Test::TestStudyNameNotInGus;
+use base qw(Test::Unit::TestCase);
+
+use strict;
+use Error qw(:try);
+
+use Log::Log4perl qw(get_logger :levels);
+
+use Data::Dumper;
+
+use RAD::MR_T::MageImport::Service::ValidatorRule::StudyNameNotInGus;
+use RAD::MR_T::MageImport::Service::Validator;
+
+use RAD::MR_T::MageImport::VO::DocRoot;
+use RAD::MR_T::MageImport::VO::AssayVO;
+use RAD::MR_T::MageImport::Service::Reader::MageTabReader;
+
+my $docRoot;;
+Log::Log4perl->init_once("$ENV{GUS_HOME}/config/log4perl.config");
+my $logger = get_logger("RAD::MR_T::MageImport::Service");
+
+sub new {
+  my $self = shift()->SUPER::new(@_);
+  return $self;
+}
+
+sub set_up {
+ my $self = shift;
+
+
+}
+
+
+sub test_studyNameNotInGus {
+  my $self = shift;
+
+  my $reader =  RAD::MR_T::MageImport::Service::Reader::MageTabReader->new("toxoTemplate.tab");
+  $reader->setLogger($logger);
+  $docRoot = $reader->parse();
+
+  my $study = $docRoot->getStudyVO();
+
+  my $validator = RAD::MR_T::MageImport::Service::Validator->new;
+  $validator->setLogger($logger);
+
+  my $decoValidator = RAD::MR_T::MageImport::Service::ValidatorRule::StudyNameNotInGus->new($validator);
+  $decoValidator->setLogger($logger);
+
+  try {
+    $decoValidator->check($docRoot);
+    $self->assert(1);
+  } catch RAD::MR_T::MageImport::ValidatorException with { $self->assert(0); };
+
+  $study->setName("test");
+
+  try {
+    $decoValidator->check($docRoot);
+    $self->assert(0);
+  } catch RAD::MR_T::MageImport::ValidatorException with { $self->assert(1); };
+
+}
+
+sub test_isGusStudy {
+ my $self = shift;
+
+ my $validator = RAD::MR_T::MageImport::Service::Validator->new;
+ $validator->setLogger($logger);
+
+ my $decoValidator = RAD::MR_T::MageImport::Service::ValidatorRule::StudyNameNotInGus->new($validator);
+
+ my $result=$decoValidator->_isGusStudy("test");
+
+ $self->assert_not_null($result);
+
+ $result=$decoValidator->_isGusStudy("testtesttesttest");
+
+ $self->assert_null($result);
+
+}
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/TestStudyVO.pm b/lib/perl/RAD/MR_T/MageImport/Test/TestStudyVO.pm
new file mode 100644
index 0000000..319eddc
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/TestStudyVO.pm
@@ -0,0 +1,76 @@
+package RAD::MR_T::MageImport::Test::TestStudyVO;
+use base qw(Test::Unit::TestCase);
+
+use RAD::MR_T::MageImport::VO::StudyVO;
+use RAD::MR_T::MageImport::VO::StudyDesignVO;
+
+sub new {
+  my $self = shift()->SUPER::new(@_);
+  $self->{study} = undef;
+  return $self;
+}
+
+sub set_up {
+  my $self = shift;
+  $self->{study} = RAD::MR_T::MageImport::VO::StudyVO->new({name=>"test", pubMedId => 'pubMedId', designs=>[RAD::MR_T::MageImport::VO::StudyDesignVO->new()]});
+}
+
+sub test_construct{
+  my $self = shift;
+  $self->assert(UNIVERSAL::isa($self->{study},'RAD::MR_T::MageImport::VO::StudyVO'), "check object type ok");
+
+}
+
+sub test_getPubMedId {
+  my $self = shift;
+  my $setValue = $self->{study}->getPubMedId();
+  $self->assert("pubMedId" eq $setValue);
+}
+
+sub test_setName {
+  my $self = shift;
+  $self->{study}->setPubMedId("test");
+  my $setValue = $self->{study}->getName();
+  $self->assert("test" eq $setValue);
+}
+
+sub test_getName {
+  my $self = shift;
+  my $setValue = $self->{study}->getName();
+  $self->assert("test" eq $setValue);
+}
+
+sub test_setName {
+  my $self = shift;
+  $self->{study}->setName("test2");
+  my $setValue = $self->{study}->getName();
+  $self->assert("test2" eq $setValue);
+}
+
+sub test_getDesigns {
+  my ($self) = @_;
+  my $setValue = $self->{study}->getDesigns();
+  $self->assert(@$setValue==1, "@$setValue check number of designs");
+  $self->assert(UNIVERSAL::isa($$setValue[0],'RAD::MR_T::MageImport::VO::StudyDesignVO'), "check studydesign object type");
+}
+
+sub test_setDesigns {
+  my $self = shift;
+  $self->{study}->setDesigns([RAD::MR_T::MageImport::VO::StudyDesignVO->new()]);
+  my $setValue = $self->{study}->getDesigns();
+  $self->assert(UNIVERSAL::isa($setValue->[0],'RAD::MR_T::MageImport::VO::StudyDesignVO'), "check set studydesign object type");
+}
+
+sub test_addDesigns {
+  my $self = shift;
+  $self->{study}->addDesigns((RAD::MR_T::MageImport::VO::StudyDesignVO->new()));
+  my $setValue = $self->{study}->getDesigns();
+  $self->assert(UNIVERSAL::isa($setValue->[1],'RAD::MR_T::MageImport::VO::StudyDesignVO'), "check added studydesign object type");
+}
+
+sub tear_down {
+  my $self = shift;
+  $self->{study} = undef;
+}
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/TestTreatmentVO.pm b/lib/perl/RAD/MR_T/MageImport/Test/TestTreatmentVO.pm
new file mode 100644
index 0000000..e445e47
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/TestTreatmentVO.pm
@@ -0,0 +1,127 @@
+package RAD::MR_T::MageImport::Test::TestTreatmentVO;
+use base qw(Test::Unit::TestCase);
+
+use RAD::MR_T::MageImport::VO::TreatmentVO;
+use RAD::MR_T::MageImport::VO::BioMaterialVO;
+use RAD::MR_T::MageImport::VO::ProtocolVO;
+use RAD::MR_T::MageImport::VO::OntologyEntryVO;
+use RAD::MR_T::MageImport::VO::BioMaterialMeasurementVO;
+use RAD::MR_T::MageImport::VO::ParameterValueVO;
+
+use Data::Dumper;
+
+sub new {
+  my $self = shift()->SUPER::new(@_);
+  $self->{vo} = undef;
+  return $self;
+}
+
+sub set_up {
+  my $self = shift;
+
+  $self->{vo} = 
+    RAD::MR_T::MageImport::VO::TreatmentVO->new({
+						 name=>"test", 
+					 	 orderNum=>2, 
+						 outputBM=>RAD::MR_T::MageImport::VO::BioMaterialVO->new(),
+						 inputBM=>RAD::MR_T::MageImport::VO::BioMaterialMeasurementVO->new(),
+					 	 protocol=>RAD::MR_T::MageImport::VO::ProtocolVO->new(),
+						 treatmentType=>RAD::MR_T::MageImport::VO::OntologyEntryVO->new(),
+                                                 parameterValues=>[RAD::MR_T::MageImport::VO::ParameterValueVO->new({parameterName => 'testName', value => 'testValue'}),
+                                                                                ],
+						});
+
+}
+
+
+
+  sub test_construct{
+    my $self = shift;
+    $self->assert(UNIVERSAL::isa($self->{vo},'RAD::MR_T::MageImport::VO::TreatmentVO'), "check object type ok");
+
+  }
+
+   sub test_getName {
+     my $self = shift;
+     my $setValue = $self->{vo}->getName();
+
+     $self->assert_equals ("test", $setValue);
+   }
+
+   sub test_setName {
+     my $self = shift;
+     $self->{vo}->setName("test2");
+     my $setValue = $self->{vo}->getName();
+     $self->assert("test2" eq $setValue);
+   }
+
+  sub test_getOrderNum {
+    my $self = shift;
+    my $setValue = $self->{vo}->getOrderNum();
+    $self->assert(2 == $setValue);
+  }
+
+  sub test_setOrderNum { 
+    my $self = shift;
+    $self->{vo}->setOrderNum(3);
+    my $setValue = $self->{vo}->getOrderNum();
+    $self->assert(3 == $setValue);
+  }
+
+  sub test_getOutputBM {
+    my ($self) = @_;
+    my $setValue = $self->{vo}->getOutputBM();
+    $self->assert(UNIVERSAL::isa($setValue,'RAD::MR_T::MageImport::VO::BioMaterialVO'), "check object type ok");
+  }
+
+  sub test_setOutputBM {
+    my $self = shift;
+    $self->{vo}->setOutputBM(RAD::MR_T::MageImport::VO::BioMaterialVO->new());
+    my $setValue = $self->{vo}->getOutputBM();
+    $self->assert(UNIVERSAL::isa($setValue,'RAD::MR_T::MageImport::VO::BioMaterialVO'), "check OutputBM object type ok");
+  }
+
+ #  sub test_getInputBM { 
+#     my ($self) = @_;
+#     my $setValue = $self->{vo}->getInputBM();
+#     $self->assert(UNIVERSAL::isa($setValue,'RAD::MR_T::MageImport::VO::BioMaterialMeasurementVO'), "check object type ok");
+#   }
+
+#   sub test_setInputBM {
+#     my $self = shift;
+
+
+#     $self->{vo}->setInputBM(RAD::MR_T::MageImport::VO::BioMaterialMeasurementVO->new());
+#     my $setValue = $self->{vo}->getInputBM();
+
+#     $self->assert(UNIVERSAL::isa($setValue,'RAD::MR_T::MageImport::VO::BioMaterialMeasurementVO'), "check InputBM object type ok");
+#   }
+ 
+
+sub test_getParameterValues {
+  my ($self) = @_;
+  my $setValue = $self->{vo}->getParameterValues();
+  $self->assert(UNIVERSAL::isa($setValue->[0],'RAD::MR_T::MageImport::VO::ParameterValueVO'), "check object type ok");
+  $self->assert_equals('testValue', $setValue->[0]->getValue);
+}
+
+sub test_setParameterValues {
+  my $self = shift;
+  $self->{vo}->setParameterValues([RAD::MR_T::MageImport::VO::ParameterValueVO->new({value => 'newValue'})]);
+  my $setValue = $self->{vo}->getParameterValues();
+  $self->assert(UNIVERSAL::isa($setValue->[0],'RAD::MR_T::MageImport::VO::ParameterValueVO'), "check object type ok");
+  $self->assert_equals('newValue', $setValue->[0]->getValue);
+}
+
+
+sub tear_down {
+  my $self = shift;
+
+
+  $self->{vo} = undef;
+ $self->{vo1} = undef;
+
+
+}
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/TestUtil.pm b/lib/perl/RAD/MR_T/MageImport/Test/TestUtil.pm
new file mode 100644
index 0000000..c1005be
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/TestUtil.pm
@@ -0,0 +1,91 @@
+package RAD::MR_T::MageImport::Test::TestUtil;
+
+use strict;
+
+use  RAD::MR_T::MageImport::VO::AssayVO;
+use  RAD::MR_T::MageImport::VO::TreatmentVO;
+use  RAD::MR_T::MageImport::VO::BioMaterialVO;
+use  RAD::MR_T::MageImport::VO::BioMaterialMeasurementVO;;
+
+use  RAD::MR_T::MageImport::Util qw(searchObjArrayByObjName findAllAssayBioMaterials);
+
+use Data::Dumper;
+
+use Error qw(:try);
+
+use base qw(Test::Unit::TestCase); 
+
+sub new {
+  my $self = shift()->SUPER::new(@_);
+  return $self;
+}
+
+# TODO:  There are utility methods which still need testing!!
+
+sub test_searchObjArrayByObjName {
+  my $self = shift;
+
+  my $ar = [ RAD::MR_T::MageImport::VO::AssayVO->new({name => 'name1'}),
+             RAD::MR_T::MageImport::VO::AssayVO->new({name => 'name2'}),
+             RAD::MR_T::MageImport::VO::AssayVO->new({name => 'name3'}),
+             RAD::MR_T::MageImport::VO::AssayVO->new({name => 'name4'}),
+           ];
+
+  try {
+    searchObjArrayByObjName($ar, 'notFound');
+    $self->assert_equals(0, "Should Have thrown an error");
+  } catch RAD::MR_T::MageImport::MageImportError with {};
+
+  my $assay = searchObjArrayByObjName($ar, 'name1');
+  $self->assert_equals('RAD::MR_T::MageImport::VO::AssayVO', ref($assay));
+  $self->assert_equals('name1', $assay->getName);
+
+  push(@$ar,  RAD::MR_T::MageImport::VO::AssayVO->new({name => 'name2'}));
+
+  try {
+    searchObjArrayByObjName($ar, 'name2');
+    $self->assert_equals(0, "Should Have thrown an error");
+  } catch  RAD::MR_T::MageImport::MageImportError with {};
+
+}
+
+
+sub test_findAllAssayBioMaterials {
+  my $self = shift;
+
+  my $bioMaterials = [RAD::MR_T::MageImport::VO::BioMaterialVO->new({name => 'source', subclassView => 'BioSource'}),
+                      RAD::MR_T::MageImport::VO::BioMaterialVO->new({name => 'sample1', subclassView => 'BioSample'}),
+                      RAD::MR_T::MageImport::VO::BioMaterialVO->new({name => 'sample2', subclassView => 'BioSample'}),
+                      RAD::MR_T::MageImport::VO::BioMaterialVO->new({name => 'sample3', subclassView => 'BioSample'}),
+                      RAD::MR_T::MageImport::VO::BioMaterialVO->new({name => 'samplePool', subclassView => 'BioSample'}),
+                      RAD::MR_T::MageImport::VO::BioMaterialVO->new({name => 'lex', subclassView => 'LabeledExtract'}),
+                     ];
+
+  my $assay = RAD::MR_T::MageImport::VO::AssayVO->new({name => 'assay', labeledExtract => $bioMaterials->[5] });
+
+  my $treatments = [RAD::MR_T::MageImport::VO::TreatmentVO->new({outputBM => $bioMaterials->[5], 
+                                                                 inputBMMs => [RAD::MR_T::MageImport::VO::BioMaterialMeasurementVO->new({bioMaterial => $bioMaterials->[4]})],
+                                                                }),
+                    RAD::MR_T::MageImport::VO::TreatmentVO->new({outputBM => $bioMaterials->[4], 
+                                                                 inputBMMs => [RAD::MR_T::MageImport::VO::BioMaterialMeasurementVO->new({bioMaterial => $bioMaterials->[1]}),
+                                                                               RAD::MR_T::MageImport::VO::BioMaterialMeasurementVO->new({bioMaterial => $bioMaterials->[2]}),
+                                                                               RAD::MR_T::MageImport::VO::BioMaterialMeasurementVO->new({bioMaterial => $bioMaterials->[3]}),
+                                                                              ],
+                                                                }),
+                    RAD::MR_T::MageImport::VO::TreatmentVO->new({outputBM => $bioMaterials->[3], 
+                                                                 inputBMMs => [RAD::MR_T::MageImport::VO::BioMaterialMeasurementVO->new({bioMaterial => $bioMaterials->[0]})],
+                                                                }),
+                    RAD::MR_T::MageImport::VO::TreatmentVO->new({outputBM => $bioMaterials->[2], 
+                                                                 inputBMMs => [RAD::MR_T::MageImport::VO::BioMaterialMeasurementVO->new({bioMaterial => $bioMaterials->[0]})],
+                                                                }),
+                    RAD::MR_T::MageImport::VO::TreatmentVO->new({outputBM => $bioMaterials->[1], 
+                                                                 inputBMMs => [RAD::MR_T::MageImport::VO::BioMaterialMeasurementVO->new({bioMaterial => $bioMaterials->[0]})],
+                                                                }),
+                   ];
+
+  my $output = findAllAssayBioMaterials($assay, $treatments);
+
+  $self->assert_equals(6, scalar(@$output));
+}
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/TestValidator.pm b/lib/perl/RAD/MR_T/MageImport/Test/TestValidator.pm
new file mode 100644
index 0000000..0e1f6d8
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/TestValidator.pm
@@ -0,0 +1,115 @@
+package RAD::MR_T::MageImport::Test::TestValidator;
+
+use base qw(Test::Unit::TestCase);
+use Error qw(:try);
+use RAD::MR_T::MageImport::Service::Validator;
+use RAD::MR_T::MageImport::VO::DocRoot;
+use RAD::MR_T::MageImport::Service::Reader::MockReader;
+
+use Log::Log4perl qw(get_logger :levels);
+
+sub new {
+  my $self = shift()->SUPER::new(@_);
+  $self->{vo} = undef;
+
+  return $self;
+}
+
+sub set_up {
+ my $self = shift;
+ $self->{vo} =  RAD::MR_T::MageImport::Service::Reader::MockReader->new->parse();
+
+ # set up logger
+ Log::Log4perl->init("$ENV{GUS_HOME}/config/log4perl.config");
+ my $sLogger = get_logger("RAD::MR_T::MageImport::Service");
+ $sLogger->debug("TestValidator set up");
+ $self->{va} = RAD::MR_T::MageImport::Service::Validator->new;
+ $self->{va}->setLogger($sLogger);
+}
+
+sub test_checkAll{
+  my $self = shift;
+#  my $validator = RAD::MR_T::MageImport::Service::Validator->new;
+  $self->{va}->check($self->{vo});
+}
+
+
+sub test_checkArrayElementUnique{
+  my $self = shift;
+  my @names = qw (test1 test2);
+  my $validator = RAD::MR_T::MageImport::Service::Validator->new;
+  $self->assert($validator->checkArrayElementUnique(\@names) == 1);
+
+  @names = qw (test1 test1);
+  $self->assert($validator->checkArrayElementUnique(\@names) == 0);
+}
+
+
+sub test_checkObjHasName{
+  my $self = shift;
+  my $doc = RAD::MR_T::MageImport::VO::DocRoot->new();
+  my $p1 = 
+    RAD::MR_T::MageImport::VO::PersonVO->new({
+					      name=>"test1",
+					     });
+  $doc->personVOs([$p1]);
+  my $validator = RAD::MR_T::MageImport::Service::Validator->new;
+  $validator->checkObjHasName($doc, "Person");
+
+  my $p2 = RAD::MR_T::MageImport::VO::PersonVO->new();
+  $doc->personVOs([$p2]);
+  try{
+    $validator->checkObjHasName($doc, "Person");
+    $self->assert(0);
+  }
+    catch RAD::MR_T::MageImport::MageImportUnNamedVOError with {}
+}
+
+sub test_checkObjNameUnique{
+  my $self = shift;
+  my $doc = RAD::MR_T::MageImport::VO::DocRoot->new();
+  my $p1 = 
+    RAD::MR_T::MageImport::VO::PersonVO->new({
+					      name=>"test1",
+					     });
+
+  my $p2 = 
+    RAD::MR_T::MageImport::VO::PersonVO->new({
+					      name=>"test2", 
+
+					     });
+  $doc->personVOs([$p1, $p2]);
+  my $validator = RAD::MR_T::MageImport::Service::Validator->new;
+#  try {
+    $validator->checkObjNameUnique($doc, "Person");
+    $self->assert(1);
+#  }
+# catch RAD::MR_T::MageImport::MageImportError with {my $ex=shift; $ex->stack_trace;};
+
+}
+
+sub test_checkObjNameUnique2{
+  my $self = shift;
+  my $doc = RAD::MR_T::MageImport::VO::DocRoot->new();
+  my $p1 = 
+    RAD::MR_T::MageImport::VO::PersonVO->new({
+					      name=>"test1",
+					     });
+
+  my $p2 = 
+    RAD::MR_T::MageImport::VO::PersonVO->new({
+					      name=>"test1", 
+
+					     });
+  $doc->personVOs([$p1, $p2]);
+  my $validator = RAD::MR_T::MageImport::Service::Validator->new;
+  try {
+    $validator->checkObjNameUnique($doc, "Person");
+    $self->assert(0);
+  }
+    catch RAD::MR_T::MageImport::MageImportVONameNotUniqueError with {   $self->assert(1);};
+
+}
+
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/TestValidatorRule.pm b/lib/perl/RAD/MR_T/MageImport/Test/TestValidatorRule.pm
new file mode 100644
index 0000000..44d78ef
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/TestValidatorRule.pm
@@ -0,0 +1,111 @@
+package RAD::MR_T::MageImport::Test::TestValidatorRule;
+
+use base qw(Test::Unit::TestCase);
+use Error qw(:try);
+use RAD::MR_T::MageImport::Service::ValidatorRule::BlankRule;
+use RAD::MR_T::MageImport::Service::Validator;
+use RAD::MR_T::MageImport::VO::DocRoot;
+use RAD::MR_T::MageImport::Service::Reader::MockReader;
+
+use Log::Log4perl qw(get_logger :levels);
+
+sub new {
+  my $self = shift()->SUPER::new(@_);
+  $self->{vo} = undef;
+
+  return $self;
+}
+
+sub set_up {
+ my $self = shift;
+ $self->{vo} =  RAD::MR_T::MageImport::Service::Reader::MockReader->new->parse();
+ # set up logger
+ Log::Log4perl->init("$ENV{GUS_HOME}/config/log4perl.config");
+ $self->{logger} = get_logger("RAD::MR_T::MageImport::Service");
+}
+
+sub test_blankRule{
+  my $self = shift;
+  my $validator = RAD::MR_T::MageImport::Service::Validator->new;
+
+  $validator->setLogger($self->{logger});
+
+  my $decoValidator = RAD::MR_T::MageImport::Service::ValidatorRule::BlankRule->new($validator);
+
+  $self->assert ($decoValidator->check($self->{vo}) eq "RAD::MR_T::MageImport::Service::ValidatorRule::BlankRule");
+}
+
+
+sub test_blankRule2{
+  my $self = shift;
+  my $validator = RAD::MR_T::MageImport::Service::Validator->new;
+  $validator->setLogger($self->{logger});
+  my $decoValidator = _BlankRule2->new(_BlankRule1->new($validator));
+
+  $self->assert ($decoValidator->check($self->{vo}) eq "_BlankRule2");
+}
+
+
+sub test_blankRule3{
+  my $self = shift;
+  my $validator = RAD::MR_T::MageImport::Service::Validator->new;
+  $validator->setLogger($self->{logger});
+  my @rules = qw (_BlankRule1 _BlankRule2);
+  foreach $rule(@rules){
+    $validator = $rule->new($validator);
+  }
+
+  $self->assert ($validator->check($self->{vo}) eq "_BlankRule2");
+}
+
+package _BlankRule1;
+
+# this is blank rule impl1
+
+use strict 'vars';
+use Carp;
+
+use RAD::MR_T::MageImport::VO::DocRoot;
+use RAD::MR_T::MageImport::Service::AbstractValidatorRule;
+
+use vars qw / @ISA / ;
+ at ISA = qw / RAD::MR_T::MageImport::Service::AbstractValidatorRule/;
+
+sub check {
+ my ($self, $docRoot) = @_;
+ $self->getValidator->check($docRoot);
+ $self->mycheck($docRoot);
+ return ref($self);
+}
+
+sub mycheck {
+  my ($self, $docRoot) = @_;
+  return 1;
+}
+
+package _BlankRule2;
+
+# this is blank rule impl2
+
+use strict 'vars';
+use Carp;
+
+use RAD::MR_T::MageImport::VO::DocRoot;
+use RAD::MR_T::MageImport::Service::AbstractValidatorRule;
+
+use vars qw / @ISA / ;
+ at ISA = qw / RAD::MR_T::MageImport::Service::AbstractValidatorRule/;
+
+sub check {
+ my ($self, $docRoot) = @_;
+ $self->getValidator->check($docRoot);
+ $self->yourcheck($docRoot);
+ return ref($self);
+}
+
+sub yourcheck {
+  my ($self, $docRoot) = @_;
+  return 1;
+}
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/TestVoGusTranslator.pm b/lib/perl/RAD/MR_T/MageImport/Test/TestVoGusTranslator.pm
new file mode 100644
index 0000000..01dc470
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/TestVoGusTranslator.pm
@@ -0,0 +1,1431 @@
+package RAD::MR_T::MageImport::Test::TestVoGusTranslator;
+use base qw(Test::Unit::TestCase);
+
+#================================================================================
+use RAD::MR_T::MageImport::Service::Translator::VoToGusTranslator;
+use RAD::MR_T::MageImport::Service::Reader::MockReader;
+
+use RAD::MR_T::MageImport::VO::OntologyEntryVO;
+
+use GUS::ObjRelP::DbiDatabase;
+use Data::Dumper;
+
+use GUS::Supported::GusConfig;
+
+use GUS::Model::RAD::Protocol;
+use GUS::Model::RAD::Acquisition;
+use GUS::Model::RAD::Assay;
+use GUS::Model::Study::BioMaterial;
+
+use Log::Log4perl qw(get_logger :levels);
+
+use RAD::MR_T::MageImport::VO::BioMaterialVO;
+
+use Error qw(:try);
+
+use strict;
+
+my $testCount;
+
+my $docRoot;
+my $voAffiliations;
+my $voPersons;
+my $voExternalDatabases;
+my $voStudy;
+my $voStudyDesigns;
+my $voProtocols;
+my $voAssays;
+my $voBioMaterials;
+my $voTreatments;
+
+#================================================================================
+
+sub new {
+  my $self = shift()->SUPER::new(@_);
+
+  $testCount = scalar $self->list_tests();
+
+  return $self;
+}
+
+#--------------------------------------------------------------------------------
+
+sub set_up {
+  my $self = shift;
+
+  my @properties;
+
+  my $configFile = "$ENV{GUS_HOME}/config/gus.config";
+
+  unless(-e $configFile) {
+    my $error = "Config file $configFile does not exist.";
+    RAD::MR_T::MageImport::MageImportError->new($error)->throw();
+    exit();
+  }
+
+  my $config = GUS::Supported::GusConfig->new($configFile);
+  
+  my $login       = $config->getDatabaseLogin();
+  my $password    = $config->getDatabasePassword();
+  my $core        = $config->getCoreSchemaName();
+  my $dbiDsn      = $config->getDbiDsn();
+  my $oraDfltRbs  = $config->getOracleDefaultRollbackSegment();
+
+  my $database;
+  unless($database = GUS::ObjRelP::DbiDatabase->getDefaultDatabase()) {
+    $database = GUS::ObjRelP::DbiDatabase->new($dbiDsn, $login, $password,
+                                                  0,0,1,$core, $oraDfltRbs);
+  }
+
+  $self->{_dbi_database} = $database;
+
+  my $reader = RAD::MR_T::MageImport::Service::Reader::MockReader->new();
+  $docRoot = $reader->parse();
+
+  $voAffiliations = $docRoot->affiliationVOs();
+  $voPersons = $docRoot->personVOs();
+  $voExternalDatabases = $docRoot->externalDatabaseVOs();
+  $voStudy = $docRoot->getStudyVO();
+  $voStudyDesigns = $voStudy->getDesigns();
+  $voProtocols = $docRoot->getProtocolVOs();
+  $voAssays = $docRoot->getAssayVOs();
+  $voBioMaterials = $docRoot->getBioMaterialVOs();
+  $voTreatments = $docRoot->getTreatmentVOs();
+
+  # set up logger
+  Log::Log4perl->init("$ENV{GUS_HOME}/config/log4perl.config");
+  my $sLogger = get_logger("RAD::MR_T::MageImport::Service");
+
+  $self->{_translator} =  RAD::MR_T::MageImport::Service::Translator::VoToGusTranslator->new();
+  $self->{_translator}->setLogger($sLogger);
+
+  $self->{_doc_root} = $docRoot;
+
+}
+
+sub tear_down {
+  my $self = shift;
+
+  $testCount--;
+
+  # LOG OUT AFTER ALL TESTS ARE FINISHED
+  if($testCount <= 0) {
+    GUS::ObjRelP::DbiDatabase->getDefaultDatabase()->logout();
+    GUS::ObjRelP::DbiDatabase->setDefaultDatabase(undef);
+
+    print STDERR "LOGGING OUT FROM DBI DATABASE\n";
+  }
+
+}
+
+#--------------------------------------------------------------------------------
+
+sub getTranslator  {$_[0]->{_translator}}
+sub getDbiDatabase {$_[0]->{_dbi_database}}
+sub getDocRoot     {$_[0]->{_doc_root}}
+
+#--------------------------------------------------------------------------------
+
+sub test_objectMapper {
+  my $self = shift;
+  my $t = $self->getTranslator();
+
+  # The call to object mapper within a try loop  will come from the __ANON__ method
+  # Use this to test failure when method is not in the mapper's global hash
+  try {
+    $t->objectMapper({last => 'Brestelli', 
+                      first => 'John',
+                     });
+    $self->assert(0);
+  } catch RAD::MR_T::MageImport::ObjectMapperException with { };
+
+  RAD::MR_T::MageImport::Service::Translator::VoToGusTranslator->
+      addMethodToObjectMap('test_objectMapper', 'GUS::Model::SRes::Contact');
+
+  RAD::MR_T::MageImport::Service::Translator::VoToGusTranslator->
+      addMethodToObjectMap('__ANON__', 'GUS::Model::SRes::Contact');
+
+  # Test that the object is being created
+  my $me = $t->objectMapper({last => 'Brestelli', 
+                             first => 'John',
+                            });
+  my $last = $me->getLast();
+  $self->assert_str_equals('Brestelli', $last);
+
+  my $first = $me->getFirst();
+  $self->assert_str_equals('John', $first);
+
+  # Test for Retrieve object from DB and Fail on no retrieve
+  my $retrieveFromDbRules = {'GUS::Model::SRes::Contact' => 0 };
+  $t->setRetrieveObjectsRules($retrieveFromDbRules);
+
+  my $meFromDb =  $t->objectMapper({last => 'Brestelli', 
+                                    first => 'John',
+                                   });
+
+  my $city = $meFromDb->getCity();
+  $self->assert_str_equals('Philadelphia', $city);
+
+  # Test for Unable to Retrieve
+  try {
+    $t->objectMapper({last => 'Breztello', 
+                      first => 'John',
+                     });
+    $self->assert(0);
+  } catch RAD::MR_T::MageImport::ObjectMapperException with {};
+
+  # Test for Retrieve object from DB and Create object on no retrieve
+  $retrieveFromDbRules = {'GUS::Model::SRes::Contact' => 1 };
+  $t->setRetrieveObjectsRules($retrieveFromDbRules);
+
+
+  $meFromDb =  $t->objectMapper({last => 'Brestelli', 
+                                 first => 'John',
+                                });
+
+  $city = $meFromDb->getCity();
+  $self->assert_str_equals('Philadelphia', $city);
+
+  # Test for Unable to Retrieve (SHOULD NOT THROW Error)
+  my $newObj = $t->objectMapper({last => 'Breztello', 
+                                 first => 'John',
+                                });
+
+  # Test for Error on Default Db
+  GUS::ObjRelP::DbiDatabase->setDefaultDatabase();
+
+  try {
+    $t->objectMapper({last => 'Brestelli', 
+                      first => 'John',
+                     });
+    $self->assert(0);
+  } catch RAD::MR_T::MageImport::ObjectMapperException with {};
+
+  GUS::ObjRelP::DbiDatabase->setDefaultDatabase($self->getDbiDatabase());
+
+  # Test that no retrieve happens correctly
+  $t->{_retrieve_objects_rules} = {};
+
+  $me = $t->objectMapper({last => 'Brestelli', 
+                          first => 'John',
+                         });
+  $last = $me->getLast();
+  $self->assert_str_equals('Brestelli', $last);
+
+  $first = $me->getFirst();
+  $self->assert_str_equals('John', $first);
+
+  $self->assert_null($me->getCity);
+
+
+}
+
+#--------------------------------------------------------------------------------
+
+sub test_mapAssayBioMaterials {
+  my $self = shift;
+
+  my $t = $self->getTranslator();
+
+  my $bioMaterials = [RAD::MR_T::MageImport::VO::BioMaterialVO->new({name => 'source', subclassView => 'BioSource', bioMaterialType => RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value => 'total_RNA'})}),
+                      RAD::MR_T::MageImport::VO::BioMaterialVO->new({name => 'sample1', subclassView => 'BioSample', bioMaterialType => RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value => 'total_RNA'})}),
+                      RAD::MR_T::MageImport::VO::BioMaterialVO->new({name => 'sample2', subclassView => 'BioSample', bioMaterialType => RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value => 'total_RNA'})}),
+                      RAD::MR_T::MageImport::VO::BioMaterialVO->new({name => 'sample3', subclassView => 'BioSample', bioMaterialType => RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value => 'total_RNA'})}),
+                      RAD::MR_T::MageImport::VO::BioMaterialVO->new({name => 'samplePool', subclassView => 'BioSample', bioMaterialType => RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value => 'total_RNA'})}),
+                      RAD::MR_T::MageImport::VO::BioMaterialVO->new({channel=>RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value=>"Cy3", category=>"LabelCompound"}),
+                                                                     name => 'lex', 
+                                                                     subclassView => 'LabeledExtract', 
+                                                                     bioMaterialType => RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value => 'total_RNA'})}),
+                     ];
+
+  my $bioMaterialsGus = $t->mapBioMaterials($bioMaterials);
+
+  my $assay = $voAssays->[0];
+  $assay->setLabeledExtracts([$bioMaterials->[5]]);
+
+  my $affiliationsGus = $t->mapAffiliations($voAffiliations);
+  my $contactsGus = $t->mapPersons($voPersons, $affiliationsGus);
+  my $arrayDesignsGus = $t->mapArrayDesigns($voAssays);
+  my $protocolsGus = $t->mapProtocols($voProtocols);
+  my $studyGus = $t->mapStudy($voStudy, $contactsGus);
+  my $studyDesignsGus = $t->mapStudyDesigns($voStudyDesigns, $studyGus);
+
+  my $assaysGus = $t->mapAssays([$assay], $contactsGus, $arrayDesignsGus, $studyDesignsGus, $protocolsGus, $bioMaterialsGus);
+
+  my $treatments = [RAD::MR_T::MageImport::VO::TreatmentVO->new({outputBM => $bioMaterials->[5], 
+                                                                 inputBMMs => [RAD::MR_T::MageImport::VO::BioMaterialMeasurementVO->new({bioMaterial => $bioMaterials->[4]})],
+                                                                }),
+                    RAD::MR_T::MageImport::VO::TreatmentVO->new({outputBM => $bioMaterials->[4], 
+                                                                 inputBMMs => [RAD::MR_T::MageImport::VO::BioMaterialMeasurementVO->new({bioMaterial => $bioMaterials->[1]}),
+                                                                               RAD::MR_T::MageImport::VO::BioMaterialMeasurementVO->new({bioMaterial => $bioMaterials->[2]}),
+                                                                               RAD::MR_T::MageImport::VO::BioMaterialMeasurementVO->new({bioMaterial => $bioMaterials->[3]}),
+                                                                              ],
+                                                                }),
+                    RAD::MR_T::MageImport::VO::TreatmentVO->new({outputBM => $bioMaterials->[3], 
+                                                                 inputBMMs => [RAD::MR_T::MageImport::VO::BioMaterialMeasurementVO->new({bioMaterial => $bioMaterials->[0]})],
+                                                                }),
+                    RAD::MR_T::MageImport::VO::TreatmentVO->new({outputBM => $bioMaterials->[2], 
+                                                                 inputBMMs => [RAD::MR_T::MageImport::VO::BioMaterialMeasurementVO->new({bioMaterial => $bioMaterials->[0]})],
+                                                                }),
+                    RAD::MR_T::MageImport::VO::TreatmentVO->new({outputBM => $bioMaterials->[1], 
+                                                                 inputBMMs => [RAD::MR_T::MageImport::VO::BioMaterialMeasurementVO->new({bioMaterial => $bioMaterials->[0]})],
+                                                                }),
+                   ];
+
+
+  my $assayBioMaterials = $t->mapAssayBioMaterials([$assay], $treatments, $assaysGus, $bioMaterialsGus);
+
+  $self->assert_equals(6, scalar(@$assayBioMaterials));
+
+
+}
+
+#--------------------------------------------------------------------------------
+
+sub test_mapStudyAssays {
+  my $self = shift;
+
+  my $t = $self->getTranslator();
+  my $affiliations = $t->mapAffiliations($voAffiliations);
+  my $contacts = $t->mapPersons($voPersons, $affiliations);
+  my $study = $t->mapStudy($voStudy, $contacts);
+  my $arrayDesigns = $t->mapArrayDesigns($voAssays);
+  my $study = $t->mapStudy($voStudy, $contacts);
+  my $studyDesigns = $t->mapStudyDesigns($voStudyDesigns, $study);
+  my $protocols = $t->mapProtocols($voProtocols);
+  my $bioMaterials = $t->mapBioMaterials($voBioMaterials, $contacts);
+
+  my $assays = $t->mapAssays($voAssays, $contacts, $arrayDesigns, $studyDesigns, $protocols, $bioMaterials);
+
+  my $studyAssays = $t->mapStudyAssays($study, $assays);
+
+  # Test the number
+  $self->assert_equals(2, scalar(@$studyAssays));
+  
+  # Test the Type and studyparent (will be the same for all)
+  foreach my $sa (@$studyAssays) {
+    $self->assert_equals('GUS::Model::RAD::StudyAssay', ref($sa));
+
+    my $study = $sa->getParent('Study::Study');
+    $self->assert_equals('study', $study->getName);
+  }
+}
+
+#--------------------------------------------------------------------------------
+
+sub test_mapStudyBioMaterials {
+  my $self = shift;
+
+  my $t = $self->getTranslator();
+
+  my $affiliations = $t->mapAffiliations($voAffiliations);
+  my $contacts = $t->mapPersons($voPersons, $affiliations);
+  my $protocols = $t->mapProtocols($voProtocols);
+
+  my $study = $t->mapStudy($voStudy, $contacts);
+  my $bioMaterials = $t->mapBioMaterials($voBioMaterials, $contacts);
+
+  my $studyBioMaterials = $t->mapStudyBioMaterials($study, $bioMaterials);
+
+  # Test the number
+  $self->assert_equals(3, scalar(@$studyBioMaterials));
+
+  # Test the Type and studyparent (will be the same for all)
+  foreach my $sa (@$studyBioMaterials) {
+    $self->assert_equals('GUS::Model::RAD::StudyBioMaterial', ref($sa));
+
+    my $study = $sa->getParent('Study::Study');
+    $self->assert_equals('study', $study->getName);
+  }
+}
+
+#--------------------------------------------------------------------------------
+
+sub test_mapAffiliations {
+  my ($self) = @_;
+
+  my $t = $self->getTranslator();
+
+  my $affiliations = $t->mapAffiliations($voAffiliations);
+
+  # Mock reader contains 2 affiliations
+  $self->assert_num_equals(2, scalar(@$affiliations));
+
+  # Test that both are SRes.Contacts
+  foreach(@$affiliations) {
+    $self->assert_str_equals('GUS::Model::SRes::Contact', ref($_));
+  }
+
+  my $name0 = $affiliations->[0]->getName();
+  my $name1 = $affiliations->[1]->getName();
+
+  $self->assert_str_equals('affiliation_1', $name0);
+  $self->assert_str_equals('affiliation_2', $name1);
+
+}
+
+#--------------------------------------------------------------------------------
+
+sub test_mapPersons {
+  my ($self) = @_;
+
+  my $t = $self->getTranslator();
+
+  my $affiliations = $t->mapAffiliations($voAffiliations);
+  my $persons = $t->mapPersons($voPersons, $affiliations);
+
+  # Mock reader contains 2 persons
+  $self->assert_num_equals(2, scalar(@$persons));
+
+  # Test that both are SRes.Contacts
+  foreach(@$persons) {
+    $self->assert_str_equals('GUS::Model::SRes::Contact', ref($_));
+  }
+
+  my $name0 = $persons->[0]->getName();
+  my $name1 = $persons->[1]->getName();
+
+  my $email0 = $persons->[0]->getEmail();
+  my $email1 = $persons->[1]->getEmail();
+
+  my $affiliationNm0 = $persons->[0]->getParent('SRes::Contact')->getName();
+  my $affiliationNm1 = $persons->[1]->getParent('SRes::Contact')->getName();
+
+  $self->assert_str_equals('person_1', $name0);
+  $self->assert_str_equals('person_1_email', $email0);
+  $self->assert_str_equals('affiliation_1', $affiliationNm0);
+
+  $self->assert_str_equals('person_2', $name1);
+  $self->assert_str_equals('person_2_email', $email1);
+  $self->assert_str_equals('affiliation_2', $affiliationNm1);
+}
+
+#--------------------------------------------------------------------------------
+
+sub test_mapExternalDatabases {
+  my ($self) = @_;
+
+  my $t = $self->getTranslator();
+  my $docRoot = $self->getDocRoot();
+
+  my $extDbRls = $t->mapExternalDatabases($voExternalDatabases);
+
+  # Mock reader contains 2 ext dbs
+  $self->assert_num_equals(2, scalar(@$extDbRls));
+
+  # Test that both are SRes.ExternalDatabaseReleases
+  foreach(@$extDbRls) {
+    $self->assert_str_equals('GUS::Model::SRes::ExternalDatabaseRelease', ref($_));
+  }
+
+  # test the version is expected
+  my $version0 = $extDbRls->[0]->getVersion();
+  my $version1 = $extDbRls->[1]->getVersion();
+
+  $self->assert_str_equals('2005-10-13', $version0);
+  $self->assert_str_equals('2005-10-13', $version1);
+
+  # Test the parent is correct
+  my $extDbNm0 = $extDbRls->[0]->getParent('SRes::ExternalDatabase')->getName();
+  my $extDbNm1 = $extDbRls->[1]->getParent('SRes::ExternalDatabase')->getName();
+
+  $self->assert_str_equals('Entrez gene', $extDbNm0);
+  $self->assert_str_equals('NCBI RefSeq', $extDbNm1);
+
+  # This should be retrieved from the db
+  my $egIdType = $extDbRls->[0]->getIdType();
+  $self->assert_str_equals('Entrez GeneId', $egIdType);
+}
+
+#--------------------------------------------------------------------------------
+
+sub test_mapStudy {
+  my $self = shift;
+
+  my $t = $self->getTranslator();
+
+  my $affiliations = $t->mapAffiliations($voAffiliations);
+  my $contacts = $t->mapPersons($voPersons, $affiliations);
+  my $study = $t->mapStudy($voStudy, $contacts);
+
+  $self->assert_str_equals('GUS::Model::Study::Study', ref($study));
+
+  # Test the simple study attributes
+  my $name = $study->getName();
+  my $desc = $study->getDescription();
+
+  $self->assert_str_equals('study', $name);
+  $self->assert_str_equals('studyDescription', $desc);
+
+  # Test the parent contact is being set correctly
+  my $contact = $study->getParent('SRes::Contact');
+  my $contactName = $contact->getName();
+  my $contactEmail = $contact->getEmail();
+
+  $self->assert_str_equals('person_2', $contactName);
+  $self->assert_str_equals('person_2_email', $contactEmail);
+}
+
+#--------------------------------------------------------------------------------
+
+
+sub test_mapStudyDesigns {
+  my $self = shift;
+
+  my $t = $self->getTranslator();
+
+  my $affiliations = $t->mapAffiliations($voAffiliations);
+  my $contacts = $t->mapPersons($voPersons, $affiliations);
+  my $study = $t->mapStudy($voStudy, $contacts);
+
+  my $studyDesigns = $t->mapStudyDesigns($voStudyDesigns, $study);
+
+  # Test for number of designs (mock reader has 1
+  $self->assert_num_equals(1, scalar(@$studyDesigns));
+
+  my $studyDesign = $studyDesigns->[0];
+
+  # Test the name
+  my $name = $studyDesign->getName();
+  $self->assert_str_equals('studyDesign', $name);
+
+  my @studyFactors = $studyDesign->getChildren('Study::StudyFactor');
+
+  # The mock reader has 2 studyFactors as children
+  $self->assert_num_equals(2, scalar(@studyFactors));
+
+  foreach my $sf (@studyFactors) {
+    $self->assert_str_equals('GUS::Model::Study::StudyFactor', ref($sf));
+
+    my $name = $sf->getName();
+    my $oe = $sf->getParent('Study::OntologyEntry');
+
+    if($name eq 'studyFactor_1') {
+      $self->assert_str_equals('#genetic_modification', $oe->getSourceId());
+    }
+    elsif($name eq 'studyFactor_2') {
+      $self->assert_str_equals('#organism_part', $oe->getSourceId());
+    }
+    else {
+      $self->assert(0, "Expected studyFactor_1 or studyFactor_2 but found $name");
+    }
+  }
+
+  my @types = $studyDesign->getChildren('Study::StudyDesignType');
+  $self->assert_equals(2, scalar(@types));
+}
+
+#--------------------------------------------------------------------------------
+
+sub test_mapStudyDesignType {
+  my $self = shift;
+
+  my $t = $self->getTranslator();
+
+  my $affiliations = $t->mapAffiliations($voAffiliations);
+  my $contacts = $t->mapPersons($voPersons, $affiliations);
+  my $study = $t->mapStudy($voStudy, $contacts);
+
+  # get the first one
+  my $studyDesign = $t->mapStudyDesigns($voStudyDesigns, $study)->[0];
+  my $types = $voStudyDesigns->[0]->getTypes();
+
+  my $studyDesignTypes = $t->mapStudyDesignType($studyDesign, $types);
+
+  foreach(@$studyDesignTypes) {
+    $self->assert_str_equals('GUS::Model::Study::StudyDesignType', ref($_));
+  }
+
+  my $oe = $studyDesignTypes->[0]->getParent('Study::OntologyEntry');
+  my $parentStudyDesign = $studyDesignTypes->[0]->getParent('Study::StudyDesign');
+
+  $self->assert_str_equals('#strain_or_line_design', $oe->getSourceId());
+  $self->assert_str_equals('studyDesign', $parentStudyDesign->getName());
+}
+
+#--------------------------------------------------------------------------------
+
+sub test_mapStudyFactors {
+  my $self = shift;
+
+  my $t = $self->getTranslator();
+
+  my $voStudyFactors = $voStudyDesigns->[0]->getFactors();
+
+  my $affiliations = $t->mapAffiliations($voAffiliations);
+
+  my $contacts = $t->mapPersons($voPersons, $affiliations);
+  my $study = $t->mapStudy($voStudy, $contacts);
+
+  # get the first one
+  my $studyDesign = $t->mapStudyDesigns($voStudyDesigns, $study)->[0];
+
+  my $studyFactors = $t->mapStudyFactors($studyDesign, $voStudyFactors);
+
+  foreach(@$studyFactors) {
+    $self->assert_str_equals('GUS::Model::Study::StudyFactor', ref($_));
+  }
+
+  # Test the mock reader has 2 study factors
+  $self->assert_num_equals(2, scalar(@$studyFactors));
+
+  my $name0 = $studyFactors->[0]->getName();
+  my $name1 = $studyFactors->[1]->getName();
+
+  $self->assert_str_equals('studyFactor_1', $name0);
+  $self->assert_str_equals('studyFactor_2', $name1);
+
+  my $oe0 = $studyFactors->[0]->getParent('Study::OntologyEntry');
+  my $oe1 = $studyFactors->[1]->getParent('Study::OntologyEntry');
+
+  $self->assert_str_equals('#genetic_modification', $oe0->getSourceId());
+  $self->assert_str_equals('#organism_part', $oe1->getSourceId());
+
+  my $parent = $studyFactors->[0]->getParent('Study::StudyDesign');
+  $self->assert_str_equals('studyDesign', $parent->getName);
+}
+
+#--------------------------------------------------------------------------------
+
+sub test_mapProtocols {
+  my $self = shift;
+
+  my $t = $self->getTranslator();
+
+  my $protocols = $t->mapProtocols($voProtocols);
+
+  # test there were 2 Rad protocols made
+  $self->assert_num_equals(2, scalar(@$protocols));
+
+  foreach(@$protocols) {
+    $self->assert_str_equals('GUS::Model::RAD::Protocol', ref($_));
+  }
+
+  # Test the easy stuff
+  my $name0 = $protocols->[0]->getName();
+  my $name1 = $protocols->[1]->getName();
+
+  $self->assert_str_equals('protocol_labeling', $name0);
+  $self->assert_str_equals('protocol_extraction', $name1);
+
+#  # Test the type (these should be retrieved)
+#  my $type0 = $protocols->[0]->getParent('Study::OntologyEntry');
+#  my $type1 = $protocols->[1]->getParent('Study::OntologyEntry');
+
+#  $self->assert_str_equals('#labeling', $type0->getSourceId());
+#  $self->assert_str_equals('#nucleic_acid_extraction', $type1->getSourceId());
+
+  my $nullParam = $protocols->[1]->getChild('RAD::ProtocolParam');
+  $self->assert_null($nullParam);
+
+  my @params = $protocols->[0]->getChildren('RAD::ProtocolParam');
+  $self->assert_num_equals(2, scalar(@params));
+
+}
+
+#--------------------------------------------------------------------------------
+
+
+sub test_mapAssays {
+  my $self = shift;
+
+  my $t = $self->getTranslator();
+
+  my $affiliations = $t->mapAffiliations($voAffiliations);
+  my $contacts = $t->mapPersons($voPersons, $affiliations);
+  my $arrayDesigns = $t->mapArrayDesigns($voAssays);
+  my $protocols = $t->mapProtocols($voProtocols);
+  my $study = $t->mapStudy($voStudy, $contacts);
+  my $studyDesigns = $t->mapStudyDesigns($voStudyDesigns, $study);
+  my $bioMaterials = $t->mapBioMaterials($voBioMaterials, $contacts);
+
+  my $assays = $t->mapAssays($voAssays, $contacts, $arrayDesigns, $studyDesigns, $protocols, $bioMaterials);
+
+  # Test the number of assays
+  $self->assert_equals(2, scalar(@$assays));
+
+  foreach(@$assays) {
+    $self->assert_str_equals('GUS::Model::RAD::Assay', ref($_));
+  }
+
+  # Test Assay Attributes
+  my $name0 = $assays->[0]->getName();
+  my $name1 = $assays->[1]->getName();
+
+  $self->assert_str_equals('assay_1', $name0);
+  $self->assert_str_equals('assay_2', $name1);
+
+  # Check the number of acquisition children
+  my @acquisitions0 = $assays->[0]->getChildren('RAD::Acquisition');
+  my @acquisitions1 = $assays->[0]->getChildren('RAD::Acquisition');
+
+  $self->assert_equals(2, scalar(@acquisitions0));  
+  $self->assert_equals(2, scalar(@acquisitions1));  
+
+  my $arrayDesign0 = $assays->[0]->getParent('GUS::Model::RAD::ArrayDesign');
+  my $arrayDesign1 = $assays->[1]->getParent('GUS::Model::RAD::ArrayDesign');
+
+
+  $self->assert_equals('Affymetrix HG_U95E', $arrayDesign0->getName);
+  $self->assert_equals('Affymetrix Mu11KsubA', $arrayDesign1->getName);
+
+  my $protocol0 = $assays->[0]->getParent('GUS::Model::RAD::Protocol');
+  my $protocol1 = $assays->[1]->getParent('GUS::Model::RAD::Protocol');
+
+  $self->assert_equals('protocol_extraction', $protocol0->getName());
+  $self->assert_equals('protocol_labeling', $protocol1->getName());
+
+  # Test the AssayParams
+  my @nullAssayParams = $assays->[0]->getChildren('RAD::AssayParam');
+  $self->assert_null(@nullAssayParams);
+
+  my @assayParams = $assays->[1]->getChildren('RAD::AssayParam');
+  $self->assert_equals(2, scalar(@assayParams));
+  foreach(@assayParams) {
+    $self->assert_equals('GUS::Model::RAD::AssayParam', ref($_));
+    my $value = $_->getValue();
+    my $protParamName = $_->getParent('RAD::ProtocolParam')->getName();
+
+    if($value =~ /assay_param_value_([1|2])/) {
+      my $expectedParamName = 'protocol_param_' . $1;
+      $self->assert_equals($expectedParamName, $protParamName);
+    }
+    else {
+      $self->assert(0, "AssayParam [$value] did not match expected");
+    }
+  }
+
+  # Test AssayLex
+
+  foreach(@$assays) {
+    my $assayLex = $_->getChild('RAD::AssayLabeledExtract');
+    my $lex = $assayLex->getParent('Study::LabeledExtract');
+    $self->assert_equals('labeledExtract', $lex->getName());
+  }
+
+
+}
+
+#--------------------------------------------------------------------------------
+
+sub test_mapAcquisitions {
+  my $self = shift;
+
+  my $t = $self->getTranslator();
+  my $assay = GUS::Model::RAD::Assay->new({name=>'test'});
+
+  my $protocols = $t->mapProtocols($voProtocols);
+  my $affiliations = $t->mapAffiliations($voAffiliations);
+  my $contacts = $t->mapPersons($voPersons, $affiliations);
+  my $study = $t->mapStudy($voStudy, $contacts);
+  my $studyDesigns = $t->mapStudyDesigns($voStudyDesigns, $study);
+  my $voAcquisitions = $voAssays->[0]->getAcquisitions();
+
+  my $acquisitions = $t->mapAcquisitions($voAcquisitions, $assay, $studyDesigns, $protocols);
+
+  # Test the number of acquisitions
+  $self->assert_equals(2, scalar(@$acquisitions));
+
+  foreach(@$acquisitions) {
+    $self->assert_str_equals('GUS::Model::RAD::Acquisition', ref($_));
+  }
+
+  # Test Acquisition Attributes
+  my $name0 = $acquisitions->[0]->getName();
+  my $name1 = $acquisitions->[1]->getName();
+
+  my $uri0 = $acquisitions->[0]->getUri();
+  my $uri1 = $acquisitions->[1]->getUri();
+
+  my $oe0 = $acquisitions->[0]->getParent('Study::OntologyEntry')->getValue();
+  my $oe1 = $acquisitions->[1]->getParent('Study::OntologyEntry')->getValue();
+
+  $self->assert_equals('acquisition_1', $name0);
+  $self->assert_equals('acquisition_1', $name1);
+
+  $self->assert_equals('acquisition_1.uri', $uri0);
+  $self->assert_equals('acquisition_1.uri', $uri1);
+
+  $self->assert_equals('Cy3', $oe0);
+  $self->assert_equals('Cy5', $oe1);
+
+  # Test the parent
+  my $assayName0 = $acquisitions->[0]->getParent('RAD::Assay')->getName();
+  my $assayName1 = $acquisitions->[1]->getParent('RAD::Assay')->getName();
+  
+  $self->assert_equals('test', $assayName0);
+  $self->assert_equals('test', $assayName1);
+
+  # Test the number of quantification children (includes processes)
+  my @quantifications0 = $acquisitions->[0]->getChildren('RAD::Quantification');
+  my @quantifications1 = $acquisitions->[1]->getChildren('RAD::Quantification');
+
+  $self->assert_equals(7, scalar(@quantifications0));
+  $self->assert_equals(7, scalar(@quantifications1));
+
+
+  # Test the AcquisitionParams
+  my @params = $acquisitions->[0]->getChildren('RAD::AcquisitionParam');
+  $self->assert_equals(2, scalar(@params));
+  foreach(@params) {
+    $self->assert_equals('GUS::Model::RAD::AcquisitionParam', ref($_));
+    my $value = $_->getValue();
+    my $protParamName = $_->getParent('RAD::ProtocolParam')->getName();
+
+    if($value =~ /acquisition_param_value_([1|2])/) {
+      my $expectedParamName = 'protocol_param_' . $1;
+      $self->assert_equals($expectedParamName, $protParamName);
+    }
+    else {
+      $self->assert(0, "AcquisitinoParam [$value] did not match expected");
+    }
+  }
+
+}
+
+#--------------------------------------------------------------------------------
+
+sub test_mapQuantifications {
+  my $self = shift;
+
+  my $t = $self->getTranslator();
+
+  my $voAcquisitions = $voAssays->[0]->getAcquisitions();
+  my $protocols = $t->mapProtocols($voProtocols);
+
+  my $voQuantifications = $voAcquisitions->[0]->getQuantifications();
+
+  my $acquisition = GUS::Model::RAD::Acquisition->new({name=>'test'});
+
+  my $quantifications = $t->mapQuantifications($voQuantifications, $acquisition, $protocols);
+
+  # Test the number of quants
+  $self->assert_equals(2, scalar(@$quantifications));
+
+  foreach(@$quantifications) {
+    $self->assert_str_equals('GUS::Model::RAD::Quantification', ref($_));
+  }
+
+  # Test Quantification Attributes
+  my $name0 = $quantifications->[0]->getName();
+  my $name1 = $quantifications->[1]->getName();
+
+  my $uri0 = $quantifications->[0]->getUri();
+  my $uri1 = $quantifications->[1]->getUri();
+
+  $self->assert_equals('quantification_1', $name0);
+  $self->assert_equals('quantification_3', $name1);
+
+  $self->assert_equals('quantification_1.uri', $uri0);
+  $self->assert_equals('quantification_3.uri', $uri1);
+
+  # Test the parent Acquisition
+  my $parentName0 = $quantifications->[0]->getParent('RAD::Acquisition')->getName();
+  my $parentName1 = $quantifications->[1]->getParent('RAD::Acquisition')->getName();
+
+  $self->assert_equals('test', $parentName0);
+  $self->assert_equals('test', $parentName1);
+
+  # Test the QuantificationParams
+  my @nullQuantParams = $quantifications->[0]->getChildren('RAD::QuantificationParam');
+  $self->assert_null(@nullQuantParams);
+
+  my @params = $quantifications->[1]->getChildren('RAD::QuantificationParam');
+  $self->assert_equals(2, scalar(@params));
+  foreach(@params) {
+    $self->assert_equals('GUS::Model::RAD::QuantificationParam', ref($_));
+    my $value = $_->getValue();
+    my $protParamName = $_->getParent('RAD::ProtocolParam')->getName();
+
+    if($value =~ /quantification_param_value_([1|2])/) {
+      my $expectedParamName = 'protocol_param_' . $1;
+      $self->assert_equals($expectedParamName, $protParamName);
+    }
+    else {
+      $self->assert(0, "QuantificationParam [$value] did not match expected");
+    }
+  }
+
+  my @processesAndQuants = $acquisition->getChildren('RAD::Quantification');
+  $self->assert_equals(7, scalar(@processesAndQuants));
+}
+
+#--------------------------------------------------------------------------------
+
+sub test_mapBioMaterials {
+  my $self = shift;
+
+  my $t = $self->getTranslator();
+
+  my $affiliations = $t->mapAffiliations($voAffiliations);
+  my $contacts = $t->mapPersons($voPersons, $affiliations);
+  my $protocols = $t->mapProtocols($voProtocols);
+
+  my $shouldFail = [ RAD::MR_T::MageImport::VO::BioMaterialVO->new({name => 'shouldFail',
+                                                                    subclassView => 'shouldfail',
+                                                                   }) ];
+  try {
+    $t->mapBioMaterials($shouldFail, $contacts);
+    $self->assert(0, "Expected Exception for mapBioMaterial");
+  } catch RAD::MR_T::MageImport::ObjectMapperException::ImproperVoObject with {};
+
+  $voBioMaterials->[1]->setSubclassView('Extract');
+
+  my $bioMaterials = $t->mapBioMaterials($voBioMaterials, $contacts);
+
+  # Test the number of biomaterials
+  $self->assert_equals(3, scalar(@$bioMaterials));
+
+  my $source = $bioMaterials->[0];
+  my $sample = $bioMaterials->[1];
+  my $lex = $bioMaterials->[2];
+
+  $self->assert_str_equals('GUS::Model::Study::BioSource', ref($source));
+  $self->assert_str_equals('GUS::Model::Study::BioSample', ref($sample));
+  $self->assert_str_equals('GUS::Model::Study::LabeledExtract', ref($lex));
+
+
+  $self->assert_equals('bioSource', $source->getName);
+  $self->assert_equals('bioSample', $sample->getName);
+  $self->assert_equals('labeledExtract', $lex->getName);
+
+  # Test the parents
+  my $oeSource = $source->getParent('Study::OntologyEntry')->getValue();
+  my $oeSample = $sample->getParent('Study::OntologyEntry')->getValue();
+  my $oeLex = $lex->getParent('Study::OntologyEntry')->getValue();
+
+  $self->assert_equals('whole_organism', $oeSource);
+  $self->assert_equals('total_RNA', $oeSample);
+  $self->assert_equals('DNA', $oeLex);
+
+  my $contactSource = $source->getParent('SRes::Contact');
+
+  $self->assert_equals('person_2', $contactSource->getName);
+
+  # Test the Characteristics for the BioSource
+  my @characteristics = $source->getChildren('Study::BioMaterialCharacteristic');
+  $self->assert_equals(2, scalar(@characteristics));
+}
+
+#--------------------------------------------------------------------------------
+
+sub test_mapTreatments {
+  my $self = shift;
+
+  my $t = $self->getTranslator();
+
+  my $affiliations = $t->mapAffiliations($voAffiliations);
+  my $contacts = $t->mapPersons($voPersons, $affiliations);
+  my $protocols = $t->mapProtocols($voProtocols);
+  my $bioMaterials = $t->mapBioMaterials($voBioMaterials,  $contacts);
+
+  my $treatments = $t->mapTreatments($voTreatments, $protocols, $bioMaterials);
+
+  # Test the correct number have been created
+  $self->assert_equals(4, scalar(@$treatments));
+
+  # Test the correct type
+  foreach(@$treatments) {
+    $self->assert_equals('GUS::Model::RAD::Treatment', ref($_));
+  }
+
+  # Test the treatment attributes
+  my $treatPool = $treatments->[0];
+  my $treatGrow = $treatments->[1];
+  my $treatExtraction = $treatments->[2];
+  my $treatLabeling = $treatments->[3];
+
+  $self->assert_equals('treatment_pool', $treatPool->getName);
+  $self->assert_equals('treatment_grow', $treatGrow->getName);
+  $self->assert_equals('treatment_extraction', $treatExtraction->getName);
+  $self->assert_equals('treatment_labeling', $treatLabeling->getName);
+
+   # Test the parents of the grow protocol
+  my $growOe = $treatGrow->getParent('Study::OntologyEntry');
+  my $growBm = $treatGrow->getParent('Study::BioSample');
+  my $growProt = $treatGrow->getParent('RAD::Protocol');
+
+  $self->assert_equals('bioSample', $growBm->getName);
+  $self->assert_equals('protocol_extraction', $growProt->getName);
+  $self->assert_equals('grow', $growOe->getValue);
+
+  # Test the BioMaterialMeasurment Children
+  my @growBmm = $treatGrow->getChildren('RAD::BioMaterialMeasurement');
+  my @poolBmm = $treatPool->getChildren('RAD::BioMaterialMeasurement');
+
+  $self->assert_equals(1, scalar(@growBmm));
+  $self->assert_equals(2, scalar(@poolBmm)); 
+
+  # Test the QuantificationParams
+  my @nullQuantParams = $treatments->[0]->getChildren('RAD::TreatmentParam');
+  $self->assert_null(@nullQuantParams);
+
+  my @params = $treatments->[3]->getChildren('RAD::TreatmentParam');
+  $self->assert_equals(2, scalar(@params));
+  foreach(@params) {
+    $self->assert_equals('GUS::Model::RAD::TreatmentParam', ref($_));
+    my $value = $_->getValue();
+    my $protParamName = $_->getParent('RAD::ProtocolParam')->getName();
+
+    if($value =~ /treatment_param_value_([1|2])/) {
+      my $expectedParamName = 'protocol_param_' . $1;
+      $self->assert_equals($expectedParamName, $protParamName);
+    }
+    else {
+      $self->assert(0, "TreatmentParam [$value] did not match expected");
+    }
+  }
+}
+
+#--------------------------------------------------------------------------------
+
+sub test_mapBioMaterialMeasurements {
+  my $self = shift;
+
+  my $t = $self->getTranslator();
+
+  my $affiliations = $t->mapAffiliations($voAffiliations);
+  my $contacts = $t->mapPersons($voPersons, $affiliations);
+  my $protocols = $t->mapProtocols($voProtocols);
+  my $bioMaterials = $t->mapBioMaterials($voBioMaterials, $contacts);
+
+  my $treatment = GUS::Model::RAD::Treatment->new({name => 'testTreatment'});
+
+  my $voBmms = $voTreatments->[1]->getInputBMMs();
+
+  my $bioMaterialMeasurement = $t->mapBioMaterialMeasurements($voBmms, $treatment, $bioMaterials)->[0];
+
+  # Test Type
+  $self->assert_equals('GUS::Model::RAD::BioMaterialMeasurement', ref($bioMaterialMeasurement));
+
+  # Test value
+  $self->assert_equals(10, $bioMaterialMeasurement->getValue());
+
+  # Test Parents
+  my $treatName = $bioMaterialMeasurement->getParent('RAD::Treatment')->getName();
+  my $oeValue = $bioMaterialMeasurement->getParent('Study::OntologyEntry')->getValue();
+
+  $self->assert_equals('testTreatment', $treatName);
+  $self->assert_equals('cc', $oeValue);
+
+  my $bmName = $bioMaterialMeasurement->getParent('Study::BioSource')->getName();
+  $self->assert_equals('bioSource', $bmName);
+
+}
+
+#--------------------------------------------------------------------------------
+
+sub test_createRadOE {
+  my $self = shift;
+
+  my $t = $self->getTranslator();
+
+  my $type = 'labelCompound';
+  my $voOe = RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value => 'Cy5', category => 'LabelCompound'});
+
+  # Test require the ontologyEntryvo
+  my $notOe = RAD::MR_T::MageImport::VO::BioMaterialVO->new();
+  try {
+    $t->createRadOE($notOe, $type);
+    $self->assert(0, "Should Have thrown an Exeption");
+  } catch RAD::MR_T::MageImport::ObjectMapperException with {};
+
+  # Test 
+  my $notInDb = RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value => 'notInDb', category => 'LabelCompound'});
+
+  try {
+    $t->createRadOE($notInDb, $type);
+    $self->assert(0, "Should Have thrown an Exeption");
+  } catch RAD::MR_T::MageImport::ObjectMapperException::RetrieveFromDbError with {};
+
+  try {
+    $t->createRadOE($notInDb, 'notSupported');
+    $self->assert(0, "Should Have thrown an Exeption");
+  } catch RAD::MR_T::MageImport::ObjectMapperException with { };
+
+  my $oe = $t->createRadOE($voOe, $type);
+
+  # Test the type
+  $self->assert_equals('GUS::Model::Study::OntologyEntry', ref($oe));
+
+  # Test the value
+  my $oeValue = $oe->getValue();
+
+  $self->assert_equals('Cy5', $oeValue);
+}
+
+#--------------------------------------------------------------------------------
+
+sub test_searchObjArrayByObjName {
+  my $self = shift;
+
+  my $t = $self->getTranslator();
+
+  my $ar = [ GUS::Model::RAD::Assay->new({name => 'name1'}),
+             GUS::Model::RAD::Assay->new({name => 'name2'}),
+             GUS::Model::RAD::Assay->new({name => 'name3'}),
+             GUS::Model::RAD::Assay->new({name => 'name4'}),
+           ];
+
+  try {
+    $t->searchObjArrayByObjName($ar, 'notFound');
+    $self->assert_equals(0, "Should Have thrown an error");
+  } catch  RAD::MR_T::MageImport::ObjectMapperException::NonUniqueNameError with {};
+
+  my $assay = $t->searchObjArrayByObjName($ar, 'name1');
+  $self->assert_equals('GUS::Model::RAD::Assay', ref($assay));
+  $self->assert_equals('name1', $assay->getName);
+
+  push(@$ar, GUS::Model::RAD::Assay->new({name => 'name2'}));
+
+  try {
+    $t->searchObjArrayByObjName($ar, 'name2');
+    $self->assert_equals(0, "Should Have thrown an error");
+  } catch  RAD::MR_T::MageImport::ObjectMapperException::NonUniqueNameError with {};
+
+}
+
+#--------------------------------------------------------------------------------
+
+sub test_mapLabelMethod {
+  my $self = shift;
+
+  my $t = $self->getTranslator();
+
+  my $protocol = GUS::Model::RAD::Protocol->new({name => 'GeneChip Labeling protocol for Eukaryotic Target polyA-mRNA'});
+  my $newChannel = RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value=>"new_test", category=>"new_test"});
+
+  try {
+    $t->mapLabelMethod($newChannel, $protocol);
+    $self->assert(0, "We require that the ontology entry is retrieved");
+  } catch  RAD::MR_T::MageImport::ObjectMapperException::RetrieveFromDbError with {};
+
+  my $voChannel = RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value=>"Cy3", category=>"LabelCompound"});
+
+  my @labelMethods;
+
+  my $newLabelMethod = $t->mapLabelMethod($voChannel, $protocol, \@labelMethods);
+  push(@labelMethods, $newLabelMethod);
+
+  $self->assert_equals('GUS::Model::RAD::LabelMethod', ref($newLabelMethod));
+  $self->assert_null($newLabelMethod->getLabelUsed());
+
+  my $shouldExistLabelMethod = $t->mapLabelMethod($voChannel, $protocol, \@labelMethods);
+  $self->assert($shouldExistLabelMethod == $labelMethods[0], "These should be the same object");
+
+  $protocol->retrieveFromDB();
+
+  my $anotherLabelMethod = $t->mapLabelMethod($voChannel, $protocol);
+  $self->assert_equals('Name', $anotherLabelMethod->getLabelUsed());
+  $self->assert($anotherLabelMethod != $labelMethods[0], "These should not be the same object");
+
+}
+
+#--------------------------------------------------------------------------------
+
+sub test_searchObjArrayByObjSourceId {
+  my $self = shift;
+
+  my $t = $self->getTranslator();
+
+  my $ar = [ GUS::Model::RAD::ArrayDesign->new({source_id => 'name1'}),
+             GUS::Model::RAD::ArrayDesign->new({source_id => 'name2'}),
+             GUS::Model::RAD::ArrayDesign->new({source_id => 'name3'}),
+             GUS::Model::RAD::ArrayDesign->new({source_id => 'name4'}),
+           ];
+
+  try {
+    $t->searchObjArrayByObjSourceId($ar, 'notFound');
+    $self->assert_equals(0, "Should Have thrown an error");
+  } catch  RAD::MR_T::MageImport::ObjectMapperException::NonUniqueNameError with {};
+
+  my $assay = $t->searchObjArrayByObjSourceId($ar, 'name1');
+  $self->assert_equals('GUS::Model::RAD::ArrayDesign', ref($assay));
+  $self->assert_equals('name1', $assay->getSourceId);
+
+  push(@$ar, GUS::Model::RAD::ArrayDesign->new({source_id => 'name2'}));
+
+  try {
+    $t->searchObjArrayByObjSourceId($ar, 'name2');
+    $self->assert_equals(0, "Should Have thrown an error");
+  } catch  RAD::MR_T::MageImport::ObjectMapperException::NonUniqueNameError with {};
+
+}
+
+#--------------------------------------------------------------------------------
+
+sub test_mapArrayDesigns {
+  my $self = shift;
+
+  my $t = $self->getTranslator();
+
+  my $arrayDesigns = $t->mapArrayDesigns($voAssays);
+
+  $self->assert_equals(2, scalar(@$arrayDesigns));
+
+  foreach(@$arrayDesigns) {
+    $self->assert_equals('GUS::Model::RAD::ArrayDesign', ref($_));
+  }
+
+  my $ad0 = $arrayDesigns->[0];
+  my $ad1 = $arrayDesigns->[1];
+
+  $self->assert_equals('Affymetrix HG_U95E', $ad0->getName);
+  $self->assert_equals('Affymetrix Mu11KsubA', $ad1->getName);
+}
+
+#--------------------------------------------------------------------------------
+
+sub test_camelCapsToUnderscore {
+  my $self = shift;
+
+  my $t = $self->getTranslator();
+
+  my $value = $t->camelCapsToUnderscore('GeneticModification');
+  $self->assert_equals('genetic_modification', $value);
+
+  my $another = $t->camelCapsToUnderscore('thisIsAnotherTest');
+  $self->assert_equals('this_is_another_test', $another);
+
+}
+
+#--------------------------------------------------------------------------------
+
+sub test_mapBioMaterialCharacteristics {
+  my $self = shift;
+
+  my $t = $self->getTranslator();
+
+ my $voChars = [ RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value=>"NOD", category=>"StrainOrLine"}),
+                 RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value=>"female", category=>"Sex"}),
+               ];
+
+  my $bioMaterial = GUS::Model::Study::BioSource->new({name => 'test'});
+
+  my $characteristics = $t->mapBioMaterialCharacteristics($voChars, $bioMaterial);
+
+  $self->assert_equals(2, scalar(@$characteristics));
+
+  foreach (@$characteristics) {
+    $self->assert_equals('GUS::Model::Study::BioMaterialCharacteristic', ref($_));
+
+    $self->assert_null($_->getValue());
+  }
+
+  # TEST OE Parent
+  my $value0 = $characteristics->[0]->getParent('Study::OntologyEntry')->getValue();
+  my $value1 = $characteristics->[1]->getParent('Study::OntologyEntry')->getValue();
+
+  $self->assert_equals('NOD', $value0);
+  $self->assert_equals('female', $value1);
+
+  # TEST Biomaterial Parent
+  my $name0 = $characteristics->[0]->getParent('Study::BioSource')->getName();
+  my $name1 = $characteristics->[1]->getParent('Study::BioSource')->getName();
+
+  $self->assert_equals('test', $name0);
+  $self->assert_equals('test', $name1);
+
+  push(@$voChars, RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value=>"p53 knock out", category=>"GeneticModification"}));
+
+  my $testSkip = $t->mapBioMaterialCharacteristics($voChars, $bioMaterial);
+  $self->assert_equals(2, scalar(@$testSkip));
+
+}
+
+#--------------------------------------------------------------------------------
+
+sub test_mapProtocolParams {
+  my $self = shift;
+
+  my $t = $self->getTranslator();
+
+  my $voParams =   [  RAD::MR_T::MageImport::VO::ProtocolParamVO->
+                      new({name => 'protocol_param_1',
+                           value => 'protocol_param_1_value',
+                           dataType => RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value=>"float", category=>"DataType"}),
+                          }),
+                      RAD::MR_T::MageImport::VO::ProtocolParamVO->
+                      new({name => 'protocol_param_2',
+                           value => 'protocol_param_2_value',
+                           unitType => RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value=>"months", category=>"TimeUnit"}),
+                          })
+                   ];
+
+  # Test a new protocol... add all params
+  my $protocol = GUS::Model::RAD::Protocol->new({name => 'test_protocol'});
+  my $params = $t->mapProtocolParams($voParams, $protocol);
+
+  $self->assert_equals(2, scalar(@$params));
+
+  foreach(@$params) {
+    $self->assert_equals('GUS::Model::RAD::ProtocolParam', ref($_));
+  }
+
+  # Unit type of first should be null
+  my $ut0 = $params->[0]->getUnitTypeId;
+  my $ut1 = $params->[1]->getUnitTypeId;
+
+  $self->assert_null($ut0);
+  $self->assert_not_null($ut1);
+
+  # Unit type of second should be null
+  my $dt0 = $params->[0]->getDataTypeId;
+  my $dt1 = $params->[1]->getDataTypeId;
+
+  $self->assert_null($dt1);
+  $self->assert_not_null($dt0);
+
+  # Test the name
+  my $name0 = $params->[0]->getName;
+  my $name1 = $params->[1]->getName;
+
+  $self->assert_equals('protocol_param_1', $name0);
+  $self->assert_equals('protocol_param_2', $name1);
+
+  my $existingProtocol = GUS::Model::RAD::Protocol->new({name => 'GenePix quantification'});
+  $existingProtocol->retrieveFromDB() or die "Cannot retrieve GenePix quantification protocol";
+
+  # try with wrong params for an existing protocol
+  try {
+    my $existingParams = $t->mapProtocolParams($voParams, $existingProtocol);
+    $self->assert(0, "Should Have failed");
+  } catch  RAD::MR_T::MageImport::ObjectMapperException::ImproperVoObject with {};
+
+  #$self->assert_equals(scalar($existingProtocol->getChildren('RAD::ProtocolParam', 1)), scalar(@$existingParams));
+
+  # try with no params... (should be fine)
+  my $params = $t->mapProtocolParams([], $existingProtocol);
+
+  $self->assert(scalar(@$params > 1));
+
+}
+
+#--------------------------------------------------------------------------------
+
+sub test_mapTaxon {
+  my $self = shift;
+
+  my $t = $self->getTranslator();
+
+  my $bioMaterial = GUS::Model::Study::BioSource->new({name => 'test'});
+
+  $t->mapTaxon(RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value => 'Mus musculus', category => 'Organism'}), $bioMaterial);
+
+  $self->assert_equals(14, $bioMaterial->getTaxonId());
+
+  $t->mapTaxon(RAD::MR_T::MageImport::VO::OntologyEntryVO->new({value => 'mouse', category => 'Organism'}),  $bioMaterial);
+
+  $self->assert_equals(14, $bioMaterial->getTaxonId());
+}
+
+#--------------------------------------------------------------------------------
+
+sub test_mapStudyFactorValues {
+  my $self = shift;
+
+  my $t = $self->getTranslator();
+
+  my $assay = GUS::Model::RAD::Assay->new({name => 'test_assay'});
+  my $channel = GUS::Model::Study::OntologyEntry->new({value => 'Cy3', category => 'LabelCompound'});
+  $channel->retrieveFromDB();
+
+  my $voFactorValues = [ RAD::MR_T::MageImport::VO::FactorValueVO->new({factorName => 'studyFactor_1',
+                                                                        value => RAD::MR_T::MageImport::VO::OntologyEntryVO->
+                                                                                       new({value => 'C57BL', category => 'StrainOrLine'}),
+                                                                       }),
+                         RAD::MR_T::MageImport::VO::FactorValueVO->new({factorName => 'studyFactor_2',
+                                                                        value => RAD::MR_T::MageImport::VO::OntologyEntryVO->
+                                                                                    new({value => 'studyFactorValue_Cy3_2', category => ''}),
+                                                                       }),
+                       ];
+
+  my $affiliations = $t->mapAffiliations($voAffiliations);
+  my $contacts = $t->mapPersons($voPersons, $affiliations);
+  my $study = $t->mapStudy($voStudy, $contacts);
+
+  my $studyDesigns = $t->mapStudyDesigns($voStudyDesigns, $study);
+
+  my $studyFactorValues = $t->mapStudyFactorValues($voFactorValues, $assay, $channel, $studyDesigns, 1);
+
+  foreach(@$studyFactorValues) {
+    $self->assert_equals('GUS::Model::RAD::StudyFactorValue', ref($_));
+  }
+
+  $self->assert_equals(2, scalar(@$studyFactorValues));
+
+  my $nm0 = $studyFactorValues->[0]->get('string_value');
+  my $nm1 = $studyFactorValues->[1]->get('string_value');
+
+  $self->assert_equals('C57BL', $nm0);
+  $self->assert_equals('studyFactorValue_Cy3_2', $nm1);
+
+  my $channel0 = $studyFactorValues->[0]->get('channel_id');
+  my $channel1 = $studyFactorValues->[1]->get('channel_id');
+
+  $self->assert_matches(qr/\d+/, $channel0);
+  $self->assert($channel0 == $channel1, "Cy3 ontologyId should be the same for both studyfactorvalues");
+
+  my $valueOe0 = $studyFactorValues->[0]->get('value_ontology_entry_id');
+  my $valueOe1 = $studyFactorValues->[1]->get('value_ontology_entry_id');
+
+  $self->assert_matches(qr/\d+/, $valueOe0);
+  $self->assert_null($valueOe1);
+
+  my $seenShouldBeNull = $t->mapStudyFactorValues($voFactorValues, $assay, $channel, $studyDesigns, 2);
+  $self->assert_equals(0, scalar(@$seenShouldBeNull));
+}
+
+#--------------------------------------------------------------------------------
+
+
+
+sub test_mapStudyDesignsAssays {
+  my $self = shift;
+
+  my $t = $self->getTranslator();
+
+  my $affiliations = $t->mapAffiliations($voAffiliations);
+  my $contacts = $t->mapPersons($voPersons, $affiliations);
+  my $study = $t->mapStudy($voStudy, $contacts);
+  my $studyDesigns = $t->mapStudyDesigns($voStudyDesigns, $study);
+  my $arrayDesigns = $t->mapArrayDesigns($voAssays);
+  my $protocols = $t->mapProtocols($voProtocols);
+  my $bioMaterials = $t->mapBioMaterials($voBioMaterials, $contacts);
+
+  my $assays = $t->mapAssays($voAssays, $contacts, $arrayDesigns, $studyDesigns, $protocols, $bioMaterials);
+
+  my $studyDesignAssays = $t->mapStudyDesignsAssays($studyDesigns, $assays);
+
+  foreach(@$studyDesignAssays) {
+    $self->assert_equals('GUS::Model::RAD::StudyDesignAssay', ref($_));
+  }
+
+  my $expectedCount = scalar(@$assays) * scalar(@$studyDesigns);
+  $self->assert_equals($expectedCount, scalar(@$studyDesignAssays));
+}
+
+
+sub test_mapBibliographicReference {
+  my $self = shift;
+
+  my $t = $self->getTranslator();
+
+  my $pubmed = 15314688;
+
+  my $bibRef = $t->mapBibliographicReference($pubmed);
+
+  $self->assert_equals('2004', $bibRef->getYear());
+  $self->assert_equals('The Journal of clinical investigation', $bibRef->getPublication());
+  $self->assert_equals($pubmed, $bibRef->getSourceId());
+
+  my $bibRefType = $bibRef->getParent('SRes::BibRefType');
+  $self->assert_equals('journal article', $bibRefType->getName());
+
+  my $extDb = $bibRef->getParent('SRes::ExternalDatabaseRelease')->getParent('SRes::ExternalDatabase');
+  $self->assert_equals('pubmed', $extDb->getName());
+
+}
+
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/TestVoToMageTab.pm b/lib/perl/RAD/MR_T/MageImport/Test/TestVoToMageTab.pm
new file mode 100644
index 0000000..6ef59af
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/TestVoToMageTab.pm
@@ -0,0 +1,60 @@
+package RAD::MR_T::MageImport::Test::TestVoToMageTab;
+
+use base qw(Test::Unit::TestCase);
+use Carp;
+use Log::Log4perl qw(get_logger :levels);
+use XML::Simple;
+use Data::Dumper;
+
+use RAD::MR_T::MageImport::ServiceFactory;
+
+Log::Log4perl->init_once("$ENV{GUS_HOME}/config/log4perl.config");
+my $sLogger = get_logger("RAD::MR_T::MageImport::Service");
+
+my ($loadMageDoc, $testCount);
+
+sub new {
+  my $self = shift()->SUPER::new(@_);
+
+  $testCount = scalar $self->list_tests();
+
+
+  return $self;
+}
+
+sub set_up {
+  my ($self) = @_;
+}
+
+sub tear_down {
+  my $self = shift;
+
+  $testCount--;
+
+}
+
+sub test_run{
+  my ($self) = @_;
+  my $mLogger = get_logger("RAD::MR_T::MageImport");
+  my $config = XMLin("config_formagetab.xml");
+  my $serviceFactory = RAD::MR_T::MageImport::ServiceFactory->new($config);
+
+  my $reader =  $serviceFactory->getServiceByName('reader');
+
+  $mLogger->info("parse the mage file", $config->{service}->{reader}->{property}->{value});
+  my $docRoot = $reader->parse();
+
+  my $processor = $serviceFactory->getServiceByName('processor');;
+
+  $mLogger->info("process the value objects using ", ref($processor));
+  $processor->process($docRoot);
+
+  my $translator = $serviceFactory->getServiceByName('translator');
+
+  $mLogger->info("translate the value objects to GUS objects using ", ref($translator));
+  my $study = $translator->mapAll($docRoot);
+
+}
+
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/VOTestSuite.pm b/lib/perl/RAD/MR_T/MageImport/Test/VOTestSuite.pm
new file mode 100644
index 0000000..f81ba28
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/VOTestSuite.pm
@@ -0,0 +1,48 @@
+package RAD::MR_T::MageImport::Test::VOTestSuite;
+
+use IO::File; 
+use Carp;
+
+sub new {
+    my $class = shift;
+    return bless {}, $class;
+}
+# I am doing the test one by class, ideally I should do "find" to get all testcases
+sub suite {
+    my $class = shift;
+    my $suite = Test::Unit::TestSuite->empty_new("VO Tests");
+
+    opendir(DIR, ".") || croak("could not read current directory");
+    my @dir = grep (/^Test/, readdir(DIR));
+
+    foreach my $test (@dir){
+      $test =~ s/([^\.]+)\.pm/$1/g;
+#      print STDOUT "\t", $test;
+      $suite->add_test(Test::Unit::TestSuite->new("RAD::MR_T::MageImport::Test::$test")) unless ($test eq "TestMain" || $test eq "TestMagemlReader" || $test eq "TestVoToMage");
+
+#    $suite->add_test(Test::Unit::TestSuite->new("RAD::MR_T::MageImport::Test::$test")) if ($test eq "TestMagemlReader");
+#    $suite->add_test(Test::Unit::TestSuite->new("RAD::MR_T::MageImport::Test::$test")) if ($test eq "TestMain");
+    }
+    return $suite;
+    $suite->add_test(Test::Unit::TestSuite->new("RAD::MR_T::MageImport::Test::TestStudyVO"));
+    $suite->add_test(Test::Unit::TestSuite->new("RAD::MR_T::MageImport::Test::TestPersonVO"));
+    $suite->add_test(Test::Unit::TestSuite->new("RAD::MR_T::MageImport::Test::TestAffiliationVO"));
+    $suite->add_test(Test::Unit::TestSuite->new("RAD::MR_T::MageImport::Test::TestAssayVO"));
+    $suite->add_test(Test::Unit::TestSuite->new("RAD::MR_T::MageImport::Test::TestAcquisitionVO"));
+    $suite->add_test(Test::Unit::TestSuite->new("RAD::MR_T::MageImport::Test::TestQuantificationVO"));
+    $suite->add_test(Test::Unit::TestSuite->new("RAD::MR_T::MageImport::Test::TestExternalDatabaseVO"));
+    $suite->add_test(Test::Unit::TestSuite->new("RAD::MR_T::MageImport::Test::TestProtocolParamVO"));
+    $suite->add_test(Test::Unit::TestSuite->new("RAD::MR_T::MageImport::Test::TestQuantificationVO"));
+    $suite->add_test(Test::Unit::TestSuite->new("RAD::MR_T::MageImport::Test::TestProtocolVO"));
+    $suite->add_test(Test::Unit::TestSuite->new("RAD::MR_T::MageImport::Test::TestBioMaterialMeasurementVO"));
+    $suite->add_test(Test::Unit::TestSuite->new("RAD::MR_T::MageImport::Test::TestBioMaterialVO"));
+    $suite->add_test(Test::Unit::TestSuite->new("RAD::MR_T::MageImport::Test::TestOntologyEntryVO"));
+
+    $suite->add_test(Test::Unit::TestSuite->new("RAD::MR_T::MageImport::Test::TestStudyDesignVO"));
+    $suite->add_test(Test::Unit::TestSuite->new("RAD::MR_T::MageImport::Test::TestStudyFactorVO"));
+    $suite->add_test(Test::Unit::TestSuite->new("RAD::MR_T::MageImport::Test::TestTreatmentVO"));
+    $suite->add_test(Test::Unit::TestSuite->new("RAD::MR_T::MageImport::Test::TestDocRoot"));
+    return $suite;
+}
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/config.xml b/lib/perl/RAD/MR_T/MageImport/Test/config.xml
new file mode 100644
index 0000000..a6a080c
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/config.xml
@@ -0,0 +1,44 @@
+<plugin>
+  <!--property name="sqltesting" value="1"/>
+  <property name="reporting" value="1"/>
+  <property name="processing" value="1"/>
+  <property name="validating" value="1"/-->
+
+<service id="reader" class="RAD::MR_T::MageImport::Service::Reader::MagemlReader">
+  <property name="magemlfile" value="test.xml"/>
+  <!--property name="two-dye" value="0"/-->
+</service>
+
+<service id="translator" class="RAD::MR_T::MageImport::Service::Translator::VoToGusTranslator">
+  <!--property name="retrieveOEFromDB" value="1"/>
+  <property name="retrieveExtDBFromDB" value="1"/>
+  <property name="retrieveProtocolFromDB" value="0"/>
+  <property name="retrievePersonFromDB" value="0"/-->
+</service>
+
+<service id="validator" baseClass="RAD::MR_T::MageImport::Service::Validator">
+  <decorProperties name="rules" value="BlankRule"/>
+</service>
+
+<service id="processor" baseClass="RAD::MR_T::MageImport::Service::Processor">
+  <decorProperties name="modules" value="SetQuanProtocol,MakeTreatmentSeries"/>
+</service>
+
+<!--require there is ONLY ONE property for any decorClass-->
+<serviceDeco id="SetQuanProtocol" class="RAD::MR_T::MageImport::Service::ProcessModule::SetQuanProtocol">
+  <property name="quanName" value="test protocol"/>
+</serviceDeco>
+
+<serviceDeco id="MakeTreatmentSeries" class="RAD::MR_T::MageImport::Service::ProcessModule::MakeTreatmentSeries">
+  <property name="termStr" value="purify"/>
+</serviceDeco>
+
+<service id="tester" class="RAD::MR_T::MageImport::Service::Tester::SqlTester">  <property name="sqlTestingFile" value="sqlTest.txt"/>
+</service>
+
+<container id="database" class="GUS::ObjRelP::DbiDatabase">
+  <property name="gusconfig" value="$ENV{GUS_HOME}/config/gus.config"/>
+</container>
+
+</plugin>
+
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/config_VoToMageTab.xml b/lib/perl/RAD/MR_T/MageImport/Test/config_VoToMageTab.xml
new file mode 100644
index 0000000..348c0f3
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/config_VoToMageTab.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<plugin>
+
+<service id="reader" class="RAD::MR_T::MageImport::Service::Reader::MagemlReader">
+  <!--property name="magemlfile" value="/home/junmin/gus35/project_home/RAD/MR_T/lib/perl/MageImport/Test/Odom_ChIP_test.xml"/-->
+  <!--property name="magemlfile" value="/home/junmin/gus35/project_home/RAD/MR_T/lib/perl/MageImport/Test/E-BUGS-39_test.xml"/-->
+  <!--property name="magemlfile" value="/home/junmin/gus35/project_home/RAD/MR_T/lib/perl/MageImport/Test/test.xml"/-->
+  <!--property name="two-dye" value="0"/-->
+</service>
+
+<service id="translator" class="RAD::MR_T::MageImport::Service::Translator::VoToMageTab">
+</service>
+
+<service id="processor" baseClass="RAD::MR_T::MageImport::Service::Processor">
+  <decorProperties name="modules" value="NamingBioSource,MergeTreatmentSeriesForSpeciedBiomatAction"/>
+</service>
+
+<serviceDeco id="MergeTreatmentSeriesForSpeciedBiomatAction" baseClass="RAD::MR_T::MageImport::Service::ProcessModule::MergeTreatmentSeries">
+  <property name="termStr" value="purify"/>
+</serviceDeco>
+
+</plugin>
+
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/config_forOdom.xml b/lib/perl/RAD/MR_T/MageImport/Test/config_forOdom.xml
new file mode 100644
index 0000000..9501e40
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/config_forOdom.xml
@@ -0,0 +1,48 @@
+<plugin>
+  <!--property name="sqltesting" value="1"/>
+  <property name="reporting" value="1"/>
+  <property name="processing" value="1"/>
+  <property name="validating" value="1"/-->
+
+<service id="reader" class="RAD::MR_T::MageImport::Service::Reader::MagemlReader">
+  <property name="magemlfile" value="/home/junmin/gus35/project_home/RAD/MR_T/lib/perl/MageImport/Test/Odom_ChIP_test.xml"/>
+  <!--property name="two-dye" value="0"/-->
+</service>
+
+<service id="translator" class="RAD::MR_T::MageImport::Service::Translator::VoToGusTranslator">
+  <!--property name="retrieveOEFromDB" value="1"/>
+  <property name="retrieveExtDBFromDB" value="1"/>
+  <property name="retrieveProtocolFromDB" value="0"/>
+  <property name="retrievePersonFromDB" value="0"/-->
+</service>
+
+<service id="validator" baseClass="RAD::MR_T::MageImport::Service::Validator">
+  <decorProperties name="rules" value="BlankRule"/>
+</service>
+
+<service id="processor" baseClass="RAD::MR_T::MageImport::Service::Processor">
+  <decorProperties name="modules" value="SetQuanProtocolToGusProtocol,NamingAcqAndQuan,NamingBioSource,MergeTreatmentSeriesForSpeciedBiomatAction"/>
+</service>
+
+<serviceDeco id="MergeTreatmentSeriesForSpeciedBiomatAction" baseClass="RAD::MR_T::MageImport::Service::ProcessModule::MergeTreatmentSeriesForSpeciedBiomatAction">
+  <property name="termStr" value="purify"/>
+</serviceDeco>
+
+<serviceDeco id="SetQuanProtocolToGusProtocol" baseClass="RAD::MR_T::MageImport::Service::ProcessModule::SetQuanProtocolToGusProtocol">
+  <property name="protocolName" value="GenePix quantification"/>
+</serviceDeco>
+
+<!--service id="processor" baseClass="RAD::MR_T::MageImport::Service::Processor">
+  <decorProperties name="modules" value="BlankModule"/>
+</service-->
+
+<!-- service id="tester" class="RAD::MR_T::MageImport::Service::Tester::SqlTester">
+  <property name="sqlTestingFile" value="sqlTest_fortestmain.txt"/>
+</service -->
+
+<service id="reporter" class="RAD::MR_T::MageImport::Service::Reporter::SqlReporter">
+  <property name="sqlReportingFile" value="/home/jbrestel/projects/RAD/MR_T/lib/perl/MageImport/Test/sqlReporter.txt"/>
+</service>
+
+</plugin>
+
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/config_fortestmain.xml b/lib/perl/RAD/MR_T/MageImport/Test/config_fortestmain.xml
new file mode 100644
index 0000000..da6aab1
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/config_fortestmain.xml
@@ -0,0 +1,45 @@
+<plugin>
+  <!--property name="sqltesting" value="1"/>
+  <property name="reporting" value="1"/>
+  <property name="processing" value="1"/>
+  <property name="validating" value="1"/-->
+
+<service id="reader" class="RAD::MR_T::MageImport::Service::Reader::MagemlReader">
+  <property name="magemlfile" value="/home/jbrestel/projects/RAD/MR_T/lib/perl/MageImport/Test/test.xml"/>
+  <!--property name="two-dye" value="0"/-->
+</service>
+
+<service id="translator" class="RAD::MR_T::MageImport::Service::Translator::VoToGusTranslator">
+  <!--property name="retrieveOEFromDB" value="1"/>
+  <property name="retrieveExtDBFromDB" value="1"/>
+  <property name="retrieveProtocolFromDB" value="0"/>
+  <property name="retrievePersonFromDB" value="0"/-->
+</service>
+
+<service id="validator" baseClass="RAD::MR_T::MageImport::Service::Validator">
+  <decorProperties name="rules" value="BlankRule"/>
+</service>
+
+<service id="processor" baseClass="RAD::MR_T::MageImport::Service::Processor">
+  <decorProperties name="modules" value="NamingAcqAndQuan,MergeTreatmentSeriesForSpeciedBiomatAction"/>
+</service>
+
+<serviceDeco id="MergeTreatmentSeriesForSpeciedBiomatAction" baseClass="RAD::MR_T::MageImport::Service::ProcessModule::MergeTreatmentSeries">
+  <property name="termStr" value="purify"/>
+</serviceDeco>
+
+
+<!--service id="processor" baseClass="RAD::MR_T::MageImport::Service::Processor">
+  <decorProperties name="modules" value="BlankModule"/>
+</service-->
+
+<!-- service id="tester" class="RAD::MR_T::MageImport::Service::Tester::SqlTester">
+  <property name="sqlTestingFile" value="sqlTest_fortestmain.txt"/>
+</service -->
+
+<service id="reporter" class="RAD::MR_T::MageImport::Service::Reporter::SqlReporter">
+  <property name="sqlReportingFile" value="/home/jbrestel/projects/RAD/MR_T/lib/perl/MageImport/Test/sqlReporter.txt"/>
+</service>
+
+</plugin>
+
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/config_not_good.xml b/lib/perl/RAD/MR_T/MageImport/Test/config_not_good.xml
new file mode 100644
index 0000000..f1c6502
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/config_not_good.xml
@@ -0,0 +1,27 @@
+<plugin>
+  <!--property name="sqltesting" value="1"/>
+  <property name="reporting" value="1"/>
+  <property name="processing" value="1"/>
+  <property name="validating" value="1"/-->
+
+<service id="reader" class="RAD::MR_T::MageImport::Service::Reader::MagemlReader">
+  <property name="magemlfile" value="test.xml"/>
+  <!--property name="two-dye" value="0"/-->
+</service>
+
+
+
+<service id="validator" baseClass="RAD::MR_T::MageImport::Service::Validator">
+  <decorProperties name="rules" value="BlankRule"/>
+</service>
+
+<!--service id="processor" baseClass="RAD::MR_T::MageImport::Service::Processor">
+  <decorProperties name="modules" value="BlankModule"/>
+</service-->
+
+<!--service id="sqlTester" baseClass="RAD::MR_T::MageImport::Service::SqlTester">
+  <property name="sqlTestingFile" value="sqlTest.txt"/>
+</service-->
+
+</plugin>
+
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/config_not_good2.xml b/lib/perl/RAD/MR_T/MageImport/Test/config_not_good2.xml
new file mode 100644
index 0000000..9dd32d3
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/config_not_good2.xml
@@ -0,0 +1,27 @@
+<plugin>
+  <!--property name="sqltesting" value="1"/>
+  <property name="reporting" value="1"/>
+  <property name="processing" value="1"/>
+  <property name="validating" value="1"/-->
+
+<service id="reader" class="RAD::MR_T::MageImport::Service::Reader::MagemlReader">
+  <property name="magemlfile" value="test.xml"/>
+  <!--property name="two-dye" value="0"/-->
+</service>
+
+
+
+<!--service id="validator" baseClass="RAD::MR_T::MageImport::Service::Validator">
+  <decorProperties name="rules" value="BlankRule"/>
+</service-->
+
+<!--service id="processor" baseClass="RAD::MR_T::MageImport::Service::Processor">
+  <decorProperties name="modules" value="BlankModule"/>
+</service-->
+
+<!--service id="sqlTester" baseClass="RAD::MR_T::MageImport::Service::SqlTester">
+  <property name="sqlTestingFile" value="sqlTest.txt"/>
+</service-->
+
+</plugin>
+
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/config_testMageTab.xml b/lib/perl/RAD/MR_T/MageImport/Test/config_testMageTab.xml
new file mode 100644
index 0000000..e9d0ec1
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/config_testMageTab.xml
@@ -0,0 +1,22 @@
+<plugin>
+<service id="reader" class="RAD::MR_T::MageImport::Service::Reader::MageTabReader">
+  <property name="mageTabFile" value="/home/jbrestel/projects/RAD/MR_T/lib/perl/MageImport/Test/toxoTemplate.tab"/>
+</service>
+
+<service id="translator" class="RAD::MR_T::MageImport::Service::Translator::VoToGusTranslator">
+  <property name="allowNewExternalDatabase" value="1"/>
+</service>
+
+<service id="processor" baseClass="RAD::MR_T::MageImport::Service::Processor">
+  <decorProperties name="modules" value="NamingAcqAndQuan"/>
+</service>
+
+<service id="validator" baseClass="RAD::MR_T::MageImport::Service::Validator">
+  <decorProperties name="rules" value="BlankRule"/>
+</service>
+
+<service id="reporter" class="RAD::MR_T::MageImport::Service::Reporter::SqlReporter">
+  <property name="sqlReportingFile" value="/home/jbrestel/projects/RAD/MR_T/lib/perl/MageImport/Test/sqlReporter.txt"/>
+</service>
+
+</plugin>
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/mageTabExample.tab b/lib/perl/RAD/MR_T/MageImport/Test/mageTabExample.tab
new file mode 100644
index 0000000..a1a99e8
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/mageTabExample.tab
@@ -0,0 +1,51 @@
+Investigation Title	Expression profiling of the 3 archetypal T. gondii lineages		
+Experimental Designs	strain_or_line_design	development_or_differentiation_design	
+Experimental Factor Name (Unique)	Strain	Time Grown	
+Experimental Factor Type	strain_or_line	timepoint	
+Experimental Factor Type Term Source		MO	
+
+Person Last Name	Bahl	Roos	Baldwin
+Person First Name	Amit	David	Don
+Person Email	abahl at mail.med.upenn.edu	droos at sas.upenn.edu	dbaldwin at mail.med.upenn.edu
+Person Phone		215 898 2118	215 898 3675
+Person Address	"423 Guardian Dr., 1403 Blockley Hall, Philadelphia PA 19104, USA"	"433 South University Ave., 304B Carolyn Lynch Laboratories, Philadelphia PA 19104, USA"	"3620 Hamilton Walk, 68 John Morgan Bldg., Philadelphia PA 19104, USA"
+Person Affiliation	"Department of Biology, University of Pennsylvania, Philadelphia PA 19014, USA"	"Department of Biology, University of Pennsylvania, Philadelphia PA 19014, USA"	"University of Pennsylvania Medical School, Philadelphia PA 19014, USA"
+Person Roles	investigator	submitter	investigator
+
+
+Quality Control Types	biological_replicate		
+Replicate Types	biological_replicate						
+Normalization Types							
+Date of Experiment	25-Aug-2006						
+Public Release Date							
+PubMed ID							
+Publication DOI							
+Publication Author List							
+Publication Title							
+Publication Status							
+Experiment Description	"Determination of  strain-specific differential expression by profiling wildtype tachyzoites from  RH, Pru, and CTG strains of T. gondii"						
+
+
+Protocol Name	Parasite Growth (Roos)	Total RNA via RNAqueous-4PCR Kit (Ambion).	One-Cycle Eukaryotic Target Labeling Assay (Affymetrix)	Affymetrix Hybridization Protocol (Penn Microarray Core Facility)	Affymetrix GeneChip Scanner 3000 (GCS3000)	Affymetrix MAS 5.0 Probe Cell Analysis	Robust Multi-Array Average expression measure (Bioconductor affy package)
+Protocol Description	Wild Type parasite in tachyzoite stage were serial passaged in HFF cells.	Total RNA was extracted using RNAqueous-4PCR (Ambion) following the manufacturer's instructions	"Total RNA (1 ?g to 15 ?g) or mRNA (0.2 ?g to 2 ?g) is first reverse transcribed using a T7-Oligo(dT) Promoter Primer in the first-strand cDNA synthesis reaction. Following RNase H-mediated second-strand cDNA synthesis, the double-stranded cDNA is purified and serves as a template in the subsequent i [...]
+Protocol Parameters	time_of_extraction		input_total_RNA;cRNA_yield	cRNA_hybridized			BG correct; Normalization;Summarization
+Protocol Type	grow	nucleic_acid_extraction	labeling	hybridization	image_acquisition	feature_extraction	feature_extraction
+Protocol Type Term Source	MO	MO	MO	MO	MO	MO	MO
+							
+Term Source	MO	ncbitax	nci_meta				
+Term Source version	1.3.1	unknown	unknown				
+Term Source URI	http://mged.sourceforge.net/ontologies/MGEDontology.php	http://www.ncbi.nlm.nih.gov/Taxonomy/taxonomyhome.html/	http://ncimeta.nci.nih.gov/indexMetaphrase.html				
+
+SDRF reference	ToxoDataTransferTemplateMT_hp-dab1.xls$HYBRIDIZATION_INFO!A1:AI9
+
+Source ID	MaterialType 	MaterialType Term Source	Characteristics [StrainOrLine]	Characteristics [DevelopmentalStage]	Characteristics [DevelopmentalStage] Term Source	Characteristics [IndividualGeneticCharacteristic]	Characteristics [IndividualGeneticCharacteristic] Term Source	Characteristics [Organism] 	Characteristics [Organism] Term Source	Protocol REF	ParameterValue [time_of_extraction]	Unit [TimeUnit] (Term Source: MO)	Sample ID	MaterialType	MaterialType Term Source	Protocol REF	Ext [...]
+RH 1	whole_organism	MO	RG (Type I)	tachyzoite	nci_meta	wild_type	MO	Toxoplasma gondii RH	ncbitax	Parasite Growth (Roos)	48	hours	RH 1 grown in HFF Cells	cell	MO	Total RNA via RNAqueous-4PCR Kit (Ambion).	RH 1 - RNA	total_RNA	MO	One-Cycle Eukaryotic Target Labeling Assay (Affymetrix)	RH 1 - LEX	synthetic_RNA	MO	1	ug	46.1	ug	biotin	Affymetrix Hybridization Protocol (Penn Microarray Core Facility)	10	ug	RH 1 - Affymetrix Hybridization	TOXO_CHIP	Affymetrix GeneChip Scanner 3000 (GCS3000)	RH  [...]
+RH 2	whole_organism	MO	RG (Type I)	tachyzoite	nci_meta	wild_type	MO	Toxoplasma gondii RH	ncbitax	Parasite Growth (Roos)	48	hours	RH 2 grown in HFF Cells	cell	MO	Total RNA via RNAqueous-4PCR Kit (Ambion).	RH 2 - RNA	total_RNA	MO	One-Cycle Eukaryotic Target Labeling Assay (Affymetrix)	RH 2 - LEX	synthetic_RNA	MO	1	ug	48.7	ug	biotin	Affymetrix Hybridization Protocol (Penn Microarray Core Facility)	10	ug	RH 2 - Affymetrix Hybridization	TOXO_CHIP	Affymetrix GeneChip Scanner 3000 (GCS3000)	RH  [...]
+RH 3	whole_organism	MO	RG (Type I)	tachyzoite	nci_meta	wild_type	MO	Toxoplasma gondii RH	ncbitax	Parasite Growth (Roos)	48	hours	RH 3 grown in HFF Cells	cell	MO	Total RNA via RNAqueous-4PCR Kit (Ambion).	RH 3 - RNA	total_RNA	MO	One-Cycle Eukaryotic Target Labeling Assay (Affymetrix)	RH 3 - LEX	synthetic_RNA	MO	1	ug	45.3	ug	biotin	Affymetrix Hybridization Protocol (Penn Microarray Core Facility)	10	ug	RH 3 - Affymetrix Hybridization	TOXO_CHIP	Affymetrix GeneChip Scanner 3000 (GCS3000)	RH  [...]
+Pru 1	whole_organism	MO	Pru (Type II)	tachyzoite	nci_meta	wild_type	MO	Toxoplasma gondii	ncbitax	Parasite Growth (Roos)	72	hours	Pru 1 grown in HFF Cells	cell	MO	Total RNA via RNAqueous-4PCR Kit (Ambion).	Pru 1 - RNA	total_RNA	MO	One-Cycle Eukaryotic Target Labeling Assay (Affymetrix)	Pru 1 - LEX	synthetic_RNA	MO	1	ug	46.5	ug	biotin	Affymetrix Hybridization Protocol (Penn Microarray Core Facility)	10	ug	Pru 1 - Affymetrix Hybridization	TOXO_CHIP	Affymetrix GeneChip Scanner 3000 (GCS3000) [...]
+Pru 2	whole_organism	MO	Pru (Type II)	tachyzoite	nci_meta	wild_type	MO	Toxoplasma gondii	ncbitax	Parasite Growth (Roos)	72	hours	Pru 2 grown in HFF Cells	cell	MO	Total RNA via RNAqueous-4PCR Kit (Ambion).	Pru 2 - RNA	total_RNA	MO	One-Cycle Eukaryotic Target Labeling Assay (Affymetrix)	Pru 2 - LEX	synthetic_RNA	MO	1	ug	41.2	ug	biotin	Affymetrix Hybridization Protocol (Penn Microarray Core Facility)	10	ug	Pru 2 - Affymetrix Hybridization	TOXO_CHIP	Affymetrix GeneChip Scanner 3000 (GCS3000) [...]
+Pru 3	whole_organism	MO	Pru (Type II)	tachyzoite	nci_meta	wild_type	MO	Toxoplasma gondii	ncbitax	Parasite Growth (Roos)	72	hours	Pru 3 grown in HFF Cells	cell	MO	Total RNA via RNAqueous-4PCR Kit (Ambion).	Pru 3 - RNA	total_RNA	MO	One-Cycle Eukaryotic Target Labeling Assay (Affymetrix)	Pru 3 - LEX	synthetic_RNA	MO	1	ug	39.2	ug	biotin	Affymetrix Hybridization Protocol (Penn Microarray Core Facility)	10	ug	Pru 3 - Affymetrix Hybridization	TOXO_CHIP	Affymetrix GeneChip Scanner 3000 (GCS3000) [...]
+CTG 1	whole_organism	MO	CTG (Type III)	tachyzoite	nci_meta	wild_type	MO	Toxoplasma gondii type III	ncbitax	Parasite Growth (Roos)	72	hours	CTG 1 grown in HFF Cells	cell	MO	Total RNA via RNAqueous-4PCR Kit (Ambion).	CTG 1 - RNA	total_RNA	MO	One-Cycle Eukaryotic Target Labeling Assay (Affymetrix)	CTG 1 - LEX	synthetic_RNA	MO	1	ug	40	ug	biotin	Affymetrix Hybridization Protocol (Penn Microarray Core Facility)	10	ug	CTG 1 - Affymetrix Hybridization	TOXO_CHIP	Affymetrix GeneChip Scanner 3000 ( [...]
+CTG 2	whole_organism	MO	CTG (Type III)	tachyzoite	nci_meta	wild_type	MO	Toxoplasma gondii type III	ncbitax	Parasite Growth (Roos)	72	hours	CTG 2 grown in HFF Cells	cell	MO	Total RNA via RNAqueous-4PCR Kit (Ambion).	CTG 2 - RNA	total_RNA	MO	One-Cycle Eukaryotic Target Labeling Assay (Affymetrix)	CTG 2 - LEX	synthetic_RNA	MO	1	ug	40	ug	biotin	Affymetrix Hybridization Protocol (Penn Microarray Core Facility)	10	ug	CTG 2 - Affymetrix Hybridization	TOXO_CHIP	Affymetrix GeneChip Scanner 3000 ( [...]
+CTG 3	whole_organism	MO	CTG (Type III)	tachyzoite	nci_meta	wild_type	MO	Toxoplasma gondii type III	ncbitax	Parasite Growth (Roos)	72	hours	CTG 1 grown in HFF Cells	cell	MO	Total RNA via RNAqueous-4PCR Kit (Ambion).	CTG 1 - RNA	total_RNA	MO	One-Cycle Eukaryotic Target Labeling Assay (Affymetrix)	CTG 1 - LEX	synthetic_RNA	MO	1	ug	40	ug	biotin	Affymetrix Hybridization Protocol (Penn Microarray Core Facility)	10	ug	CTG 1 - Affymetrix Hybridization	TOXO_CHIP	Affymetrix GeneChip Scanner 3000 ( [...]
+CTG 4	whole_organism	MO	CTG (Type III)	tachyzoite	nci_meta	wild_type	MO	Toxoplasma gondii type III	ncbitax	Parasite Growth (Roos)	72	hours	CTG 2 grown in HFF Cells	cell	MO	Total RNA via RNAqueous-4PCR Kit (Ambion).	CTG 2 - RNA	total_RNA	MO	One-Cycle Eukaryotic Target Labeling Assay (Affymetrix)	CTG 2 - LEX	synthetic_RNA	MO	1	ug	40	ug	biotin	Affymetrix Hybridization Protocol (Penn Microarray Core Facility)	10	ug	CTG 2 - Affymetrix Hybridization	TOXO_CHIP	Affymetrix GeneChip Scanner 3000 ( [...]
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/sqlReporter.txt b/lib/perl/RAD/MR_T/MageImport/Test/sqlReporter.txt
new file mode 100644
index 0000000..0ae8301
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/sqlReporter.txt
@@ -0,0 +1,92 @@
+-----------------------------------------------------------------
+-- Counts (COUNTS WILL BE AUTOMATICALLY GROUPED TOGETHER IN THE REPORT)
+------------------------------------------------------------------
+
+select count(*) as study_count from Study.Study where row_alg_invocation_id = $$algoInvoId$$
+SELECT count(*) as study_design_count from Study.StudyDesign where row_alg_invocation_id = $$algoInvoId$$
+select count(*) as study_design_type_count from Study.StudyDesignType where row_alg_invocation_id = $$algoInvoId$$
+select count(*) as study_design_description_count from Study.StudyDesignDescription where row_alg_invocation_id = $$algoInvoId$$
+select count(*) as study_factor_count from Study.StudyFactor where row_alg_invocation_id = $$algoInvoId$$
+
+select count(*) as assay_count from RAD.Assay where row_alg_invocation_id = $$algoInvoId$$
+select count(*) as assay_param_count from RAD.AssayParam where row_alg_invocation_id = $$algoInvoId$$
+select count(*) as acquisition_count from RAD.Acquisition where row_alg_invocation_id = $$algoInvoId$$
+select count(*) as acquisition_param_count from RAD.AcquisitionParam where row_alg_invocation_id = $$algoInvoId$$
+select count(*) as related_acquisition_count from RAD.RelatedAcquisition where row_alg_invocation_id = $$algoInvoId$$
+select count(*) as quantification_count from RAD.Quantification where row_alg_invocation_id = $$algoInvoId$$
+select count(*) as quantification_param_count from RAD.QuantificationParam where row_alg_invocation_id = $$algoInvoId$$
+select count(*) as related_quantification_count from RAD.RelatedQuantification where row_alg_invocation_id = $$algoInvoId$$
+
+select count(*) as study_assay_count from Rad.StudyAssay where row_alg_invocation_id = $$algoInvoId$$
+select count(*) as study_biomaterial_count from Rad.StudyBioMaterial where row_alg_invocation_id = $$algoInvoId$$
+select count(*) as assay_biomaterial_count from Rad.AssayBioMaterial where row_alg_invocation_id = $$algoInvoId$$
+select count(*) as assay_lex_count from Rad.AssayLabeledExtract where row_alg_invocation_id = $$algoInvoId$$
+select count(*) as study_design_assay_count from Rad.StudyDesignAssay where row_alg_invocation_id = $$algoInvoId$$
+select count(*) as study_factor_value_count from Rad.StudyFactorValue where row_alg_invocation_id = $$algoInvoId$$
+
+select count(*) as biosource_count from Study.BioSource where row_alg_invocation_id = $$algoInvoId$$
+select count(*) as biosample_count from Study.BioSample where row_alg_invocation_id = $$algoInvoId$$
+select count(*) as labeled_extract_count from Study.LABELEDEXTRACT where row_alg_invocation_id = $$algoInvoId$$
+select count(*) as characteristic_count from Study.BioMaterialCharacteristic where row_alg_invocation_id = $$algoInvoId$$
+
+select count(*) as treatement_count from RAD.Treatment where row_alg_invocation_id = $$algoInvoId$$
+select count(*) as treatement_param_count from RAD.TreatmentParam where row_alg_invocation_id = $$algoInvoId$$
+select count(*) as biomaterial_measurement_count from RAD.BioMaterialMeasurement where row_alg_invocation_id = $$algoInvoId$$
+
+select count(*) as contact_count from SREs.Contact where row_alg_invocation_id = $$algoInvoId$$
+select count(*) as ext_db_count from SREs.ExternalDatabase where row_alg_invocation_id = $$algoInvoId$$
+select count(*) as ext_db_rls_count from SREs.ExternalDatabaseRelease where row_alg_invocation_id = $$algoInvoId$$
+select count(*) as protocol_count from Rad.Protocol where row_alg_invocation_id = $$algoInvoId$$
+select count(*) as protocol_param_count from Rad.ProtocolParam where row_alg_invocation_id = $$algoInvoId$$
+select count(*) as ontology_entry_count from Study.OntologyEntry where row_alg_invocation_id = $$algoInvoId$$
+select count(*) as label_method_count from Rad.LabelMethod where row_alg_invocation_id = $$algoInvoId$$
+select count(*) as taxon_name_count_count from SRes.TaxonName where row_alg_invocation_id = $$algoInvoId$$
+
+------------------------------------------------------------------
+--Report the Study Stuff 
+--TODO: BibliographicReference Stuff
+------------------------------------------------------------------
+select study_id from study.study where row_alg_invocation_id= $$algoInvoId$$|study_id
+
+select c.name as main_contact, s.name as study_name, s.description as study_description from Study.Study s, SRes.CONTACT c where c.contact_id = s.contact_id and study_id = $$study_id$$
+
+select sd.name as design_name, d.description as design_description from Study.STUDYDESIGN sd left join Study.STUDYDESIGNDESCRIPTION d on d.study_design_id = sd.study_design_id where sd.study_id = $$study_id$$
+
+select sd.name as design_name, oe.value as design_type from Study.STUDYDESIGN sd, study.STUDYDESIGNTYPE t, Study.ONTOLOGYENTRY oe where oe.ontology_entry_id = t.ontology_entry_id and t.study_design_id = sd.study_design_id and study_id = $$study_id$$
+
+select sd.name as design_name, sf.name as factor_name, sf.description as factor_description, oe.value as factor_type from Study.StudyFactor sf, Study.STUDYDESIGN sd, Study.ONTOLOGYENTRY oe where oe.ontology_entry_id = sf.study_factor_type_id and sf.study_design_id = sd.study_design_id and sd.study_id = $$study_id$$
+
+------------------------------------------------------------------
+--Report the Contacts Stuff
+------------------------------------------------------------------
+
+select c.first as first_name, c.last as last_name, c.name as Full_name, c.email, c.phone, c.fax, c.city, c.state, a.name as affiliation from SRes.CONTACT c, SRes.CONTACT a where c.affiliation_id = a.contact_id and c.row_alg_invocation_id= $$algoInvoId$$
+
+------------------------------------------------------------------
+--Report the Protocol Stuff
+------------------------------------------------------------------
+
+select p.name as protocol_name, p.protocol_description, oe.value as protocol_type from Rad.PROTOCOL p, study.ONTOLOGYENTRY oe where p.protocol_type_id = oe.ontology_entry_id and p.row_alg_invocation_id= $$algoInvoId$$
+
+------------------------------------------------------------------
+--Report the Assay To QUant Stuff
+------------------------------------------------------------------
+
+select ad.name as array_design_name, p.name as protocol_name, a.array_identifier as assay_identifier, c.name as operator, a.name as assay_name, a.description as assay_desc from SRes.Contact c, Rad.ArrayDesign ad, Rad.Assay a left join Rad.PROTOCOL p on p.protocol_id = a.protocol_id where ad.array_design_id = a.array_design_id and a.operator_id = c.contact_id and a.row_alg_invocation_id= $$algoInvoId$$
+
+select ac.name as acquisition_name, ac.uri as acquisition_uri, a.name as assay_name, p.name as acquisition_protocol, oe.value as channel from Rad.Assay a, Study.ONTOLOGYENTRY oe, Rad.ACQUISITION ac left join Rad.PROTOCOL p on p.protocol_id = ac.protocol_id where a.assay_id = ac.assay_id and oe.ontology_entry_id = ac.channel_id and ac.row_alg_invocation_id= $$algoInvoId$$
+
+select p.name as quant_protocol, ac.name as acquisition_name, q.name as quant_name, q.uri as quant_uri from Rad.ACQUISITION ac, Rad.QUANTIFICATION q left join rad.PROTOCOL p on p.protocol_id = q.protocol_id where ac.acquisition_id = q.acquisition_id and q.row_alg_invocation_id= $$algoInvoId$$
+
+
+------------------------------------------------------------------
+--Report the BioMaterial Stuff
+------------------------------------------------------------------
+
+select b1.string1 as input_BM, b2.string1 as output_BM, t.name as treatment_name, t.order_num from study.BioMaterialImp b1, study.BioMaterialImp b2, RAD.Treatment t, RAD.BioMaterialMeasurement m where m.bio_material_id=b1.bio_material_id and m.treatment_id=t.treatment_id and t.bio_material_id=b2.bio_material_id and m.row_alg_invocation_id= $$algoInvoId$$
+
+
+select tn.name as taxon_name, s.string1 as biomaterial_name, c.value as char_value, o.value as oe_value from sres.taxonname tn, study.BioMaterialImp s, study.BioMaterialCharacteristic c, study.OntologyEntry o where tn.name_class = 'scientific name' and tn.taxon_id = s.taxon_id and s.bio_material_id=c.bio_material_id and c.ontology_entry_id=o.ontology_entry_id  and s.row_alg_invocation_id= $$algoInvoId$$
+
+select sf.name as factor_name, a.name as assay_name, s.string_value as factor_value, oe.value as oe_value from Study.STUDYFACTOR sf, Rad.Assay a, Rad.STUDYFACTORVALUE s left join Study.ONTOLOGYENTRY oe on oe.ontology_entry_id = s.value_ontology_entry_id where a.assay_id = s.assay_id and sf.study_factor_id = s.study_factor_id and s.row_alg_invocation_id= $$algoInvoId$$
+
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/sqlTest_fortestmain.txt b/lib/perl/RAD/MR_T/MageImport/Test/sqlTest_fortestmain.txt
new file mode 100644
index 0000000..eab45f4
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/sqlTest_fortestmain.txt
@@ -0,0 +1,28 @@
+1|select count(*) from study.study where row_alg_invocation_id = -99|
+\d+|select study_id from study.study where row_alg_invocation_id = -99|study_id
+study|select name from study.study where study_id = $$study_id$$|
+1|select count(*)  from study.studydesign where row_alg_invocation_id = -99 and study_id = $$study_id$$|
+\d+|select study_design_id from study.studydesign where row_alg_invocation_id = -99|study_design_id
+2|select count(*) from study.studyfactor where row_alg_invocation_id = -99 and study_design_id = $$study_design_id$$|
+2|select count(*) from rad.studyassay where row_alg_invocation_id = -99 and study_id=$$study_id$$|
+2|select count(*) from rad.assay where row_alg_invocation_id = -99|
+3|select	count(*) from rad.STUDYBIOMATERIAL where row_alg_invocation_id = -99 and study_id=$$study_id$$|
+3|select count(*) from study.biomaterialimp where row_alg_invocation_id = -99|
+\d+|select assay_id from rad.assay where row_alg_invocation_id = -99 and rownum < 2|assay_id
+4|select count(*) from rad.acquisition where row_alg_invocation_id = -99|
+2|select count(*) from rad.acquisition where row_alg_invocation_id = -99 and assay_id=$$assay_id$$|
+
+\d+|select acquisition_id from rad.acquisition where row_alg_invocation_id = -99 and assay_id=$$assay_id$$ and rownum<2|acquisition_id
+8|select count(*) from rad.quantification where row_alg_invocation_id = -99|
+2|select count(*) from rad.quantification where row_alg_invocation_id = -99 and acquisition_id=$$acquisition_id$$|
+4|select count(*) from rad.treatment where row_alg_invocation_id = -99|
+5|select count(*) from rad.biomaterialmeasurement where row_alg_invocation_id = -99|
+\d+|select bio_material_id from study.biomaterialimp where row_alg_invocation_id = -99 and string1='bioSource'|bio_source_id
+
+1|select count(*) from study.biomaterialimp where row_alg_invocation_id = -99 and string1='bioSample'|
+1|select count(*) from study.biomaterialimp where row_alg_invocation_id = -99 and string1='bioSource'|
+\d+|select bio_material_id from study.biomaterialimp where row_alg_invocation_id = -99 and string1='bioSample'|bio_sample_id
+\d+|select bio_material_id from study.biomaterialimp where row_alg_invocation_id = -99 and string1='labeledExtract'|labeled_extract_id
+
+8|select count(*) from RAD.StudyFactorValue where row_alg_invocation_id = -99|
+
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/test.xml b/lib/perl/RAD/MR_T/MageImport/Test/test.xml
new file mode 100644
index 0000000..6130022
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/test.xml
@@ -0,0 +1,1437 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE MAGE-ML SYSTEM "file:/home/junmin/mr_t/MAGEloader/dtd/MAGE-ML1.1.dtd">
+<MAGE-ML identifier="MAGE:EBI:MIAMExpress:MEXP:Altieri._Survivin_transgenic_mice_pancreatic_islet_profile:2031">
+  <AuditAndSecurity_package>
+    <Contact_assnlist>
+      <Person lastName="Dohi" firstName="Takehiko" identifier="ebi.ac.uk:MIAMExpress:Person:Takehiko Dohi.3751">
+        <Affiliation_assnref>
+          <Organization_ref identifier="ebi.ac.uk:MIAMExpress:Organization:University of Massachusetts Medical School.3755"/>
+        </Affiliation_assnref>
+      </Person>
+      <Organization identifier="ebi.ac.uk:MIAMExpress:Organization:University of Massachusetts Medical School.3755" name="University of Massachusetts Medical School 1">
+      </Organization>
+      <Person lastName="Salz" firstName="Whitney" identifier="ebi.ac.uk:MIAMExpress:Person:Whitney Salz.3752">
+        <Affiliation_assnref>
+          <Organization_ref identifier="ebi.ac.uk:MIAMExpress:Organization:University of Massachusetts Medical School.3755"/>
+        </Affiliation_assnref>
+      </Person>
+      <Person lastName="Costa" firstName="Marco" identifier="ebi.ac.uk:MIAMExpress:Person:Marco Costa.3753">
+        <Affiliation_assnref>
+          <Organization_ref identifier="ebi.ac.uk:MIAMExpress:Organization:University of Massachusetts Medical School.3755"/>
+        </Affiliation_assnref>
+      </Person>
+      <Person lastName="Ariyan" firstName="Charlotte" identifier="ebi.ac.uk:MIAMExpress:Person:Charlotte Ariyan.3754">
+        <Affiliation_assnref>
+          <Organization_ref identifier="ebi.ac.uk:MIAMExpress:Organization:Yale University.3754"/>
+        </Affiliation_assnref>
+      </Person>
+      <Organization identifier="ebi.ac.uk:MIAMExpress:Organization:Yale University.3754" name="Yale University">
+      </Organization>
+      <Person lastName="Basadonna" firstName="Giacomo" identifier="ebi.ac.uk:MIAMExpress:Person:Giacomo Basadonna.3755" midInitials="P">
+        <Affiliation_assnref>
+          <Organization_ref identifier="ebi.ac.uk:MIAMExpress:Organization:University of Massachusetts Medical School.3755"/>
+        </Affiliation_assnref>
+      </Person>
+      <Person lastName="Altieri" firstName="Dario" address="364 Plantation Street" fax="508-856-5792" identifier="ebi.ac.uk:MIAMExpress:Person:Dario_Altieri.daltieri" midInitials="C" email="dario.altieri at umassmed.edu" phone="508-856-5775">
+        <Roles_assnlist>
+          <OntologyEntry category="Roles" value="submitter">
+          </OntologyEntry>
+        </Roles_assnlist>
+        <Affiliation_assnref>
+          <Organization_ref identifier="ebi.ac.uk:MIAMExpress:Organization:University of Massachusetts Medical School.Cancer Biology"/>
+        </Affiliation_assnref>
+      </Person>
+      <Organization identifier="ebi.ac.uk:MIAMExpress:Organization:University of Massachusetts Medical School.Cancer Biology" name="Cancer Biology">
+        <Parent_assnref>
+          <Organization_ref identifier="ebi.ac.uk:MIAMExpress:Organization:University of Massachusetts Medical School"/>
+        </Parent_assnref>
+      </Organization>
+      <Organization address="364 Plantation Street, Worcester, MA, 01605, USA" identifier="ebi.ac.uk:MIAMExpress:Organization:University of Massachusetts Medical School" name="University of Massachusetts Medical School">
+      </Organization>
+    </Contact_assnlist>
+  </AuditAndSecurity_package>
+  <Protocol_package>
+    <Protocol_assnlist>
+<!--fix protocol type to experiemntal protocol type-->
+      <Protocol text="Pancreatic islets from transgenic or non-transgenic C57Bl/6 mice were harvested by collagenase P (1 mg/ml) (Sigma-Aldrich) perfusion. After filtration through a 100 micrometer cell strainer, islets were hand picked under a dissecting microscope and processed for extraction of total RNA" identifier="P-MEXP-16800" name="SAMPLETREATPRTCL16800">
+        <Type_assn>
+          <OntologyEntry category="ExperimentalProtocolType" value="specified_biomaterial_action">
+          </OntologyEntry>
+        </Type_assn>
+      </Protocol>
+      <Protocol text="Pancreatic islets from non-transgenic or RIP-SVV transgenic mice were collected and total RNA was extracted standard Affymetrix protocols.  RNA samples from 8 individual transgenic or non-transgenic animals were pooled for hybridization." identifier="P-MEXP-16799" name="EXTPRTCL16799">
+        <ParameterTypes_assnlist>
+          <Parameter identifier="ebi.ac.uk:MIAMExpress:Parameter:EXTRACTED_PRODUCT.51301" name="Extracted product">
+          </Parameter>
+          <Parameter identifier="ebi.ac.uk:MIAMExpress:Parameter:AMPLIFICATION_EXTRACT.51302" name="Amplification">
+          </Parameter>
+        </ParameterTypes_assnlist>
+        <Type_assn>
+          <OntologyEntry category="ExperimentalProtocolType" value="nucleic_acid_extraction">
+          </OntologyEntry>
+        </Type_assn>
+      </Protocol>
+      <Protocol text="IVT Biotin Affymetrix labeling protocol" identifier="P-MEXP-16811" name="LABELPRTCL16811">
+        <ParameterTypes_assnlist>
+          <Parameter identifier="ebi.ac.uk:MIAMExpress:Parameter:LABEL_USED.51343" name="Label used">
+          </Parameter>
+          <Parameter identifier="ebi.ac.uk:MIAMExpress:Parameter:AMPLIFICATION_LABEL.51344" name="Amplification">
+          </Parameter>
+        </ParameterTypes_assnlist>
+        <Type_assn>
+          <OntologyEntry category="ExperimentalProtocolType" value="labeling">
+          </OntologyEntry>
+        </Type_assn>
+      </Protocol>
+
+      <!--Protocol identifier="Affymetrix:Protocol:Hybridization-Unknown" name="Affymetrix Generic Hybridization"-->
+
+      <Protocol identifier="Affymetrix:Protocol:Hybridization-EukGE-WS2v5_450" name="Affymetrix Generic Hybridization">
+        <PropertySets_assnlist>
+          <NameValueType value="true" type="boolean" name="AEStandardPublicProtocol">
+          </NameValueType>
+        </PropertySets_assnlist>
+        <Type_assn>
+          <OntologyEntry category="ExperimentalProtocolType" value="hybridization">
+          </OntologyEntry>
+        </Type_assn>
+      </Protocol>
+      <!--Protocol_ref identifier="Affymetrix:Protocol:Scan"/-->
+      <Protocol identifier="P-AFFY-6" name="Affymetrix CEL analysis">
+        <PropertySets_assnlist>
+          <NameValueType value="true" type="boolean" name="AEStandardPublicProtocol">
+          </NameValueType>
+        </PropertySets_assnlist>
+        <Type_assn>
+          <OntologyEntry category="ProtocolType" value="feature_extraction">
+          </OntologyEntry>
+        </Type_assn>
+      </Protocol>
+      <Protocol identifier="Affymetrix:Protocol:MAS4:ExpressionCall" name="Affymetrix CHP Analysis (ExpressionCall)">
+        <PropertySets_assnlist>
+          <NameValueType value="true" type="boolean" name="AEStandardPublicProtocol">
+          </NameValueType>
+        </PropertySets_assnlist>
+        <Type_assn>
+          <OntologyEntry category="ProtocolType" value="unknown_protocol_type">
+          </OntologyEntry>
+        </Type_assn>
+      </Protocol>
+    </Protocol_assnlist>
+  </Protocol_package>
+  <BioMaterial_package>
+    <Compound_assnlist>
+      <Compound isSolvent="false" identifier="ebi.ac.uk:LabelCompound:biotin" name="biotin">
+      </Compound>
+    </Compound_assnlist>
+    <BioMaterial_assnlist>
+      <LabeledExtract identifier="ebi.ac.uk:MIAMExpress:LabeledExtract:22574" name="Wild type labeling">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="total_RNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="ebi.ac.uk:MIAMExpress:Treatment:Labeling.22574">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2006-01-16 22:08:42">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="biotin">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="ebi.ac.uk:MIAMExpress:Parameter:LABEL_USED.51343"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="none">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="ebi.ac.uk:MIAMExpress:Parameter:AMPLIFICATION_LABEL.51344"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-16811"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <!--OntologyEntry category="Action" value="labeling"-->
+	    <OntologyEntry category="ComplexAction" value="labeling">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="ebi.ac.uk:MIAMExpress:BioSample:Extraction.16792"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Labels_assnreflist>
+          <Compound_ref identifier="ebi.ac.uk:LabelCompound:biotin"/>
+        </Labels_assnreflist>
+      </LabeledExtract>
+      <BioSample identifier="ebi.ac.uk:MIAMExpress:BioSample:Extraction.16792" name="Wild type">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="total_RNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="ebi.ac.uk:MIAMExpress:Treatment:Extraction.16792">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2006-01-16 18:19:08">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="total RNA">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="ebi.ac.uk:MIAMExpress:Parameter:EXTRACTED_PRODUCT.51301"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="none">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="ebi.ac.uk:MIAMExpress:Parameter:AMPLIFICATION_EXTRACT.51302"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-16799"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="ComplexAction" value="nucleic_acid_extraction">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="ebi.ac.uk:MIAMExpress:BioSample:Sample.184590"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Type_assn>
+          <OntologyEntry category="BioSampleType" value="extract">
+          </OntologyEntry>
+        </Type_assn>
+      </BioSample>
+      <BioSample identifier="ebi.ac.uk:MIAMExpress:BioSample:Sample.184590" name="Wild type islets">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="organism_part">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment order="1" identifier="ebi.ac.uk:MIAMExpress:Treatment:Growth.184590">
+            <Action_assn>
+              <OntologyEntry category="ComplexAction" value="grow">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="ebi.ac.uk:MIAMExpress:BioSource:184590"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+          <Treatment order="2" identifier="ebi.ac.uk:MIAMExpress:Treatment:Sample.184590">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2006-01-16 18:45:35">
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-16800"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="specified_biomaterial_action">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="ebi.ac.uk:MIAMExpress:BioSource:184590"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+          <Treatment order="3" identifier="ebi.ac.uk:MIAMExpress:Treatment:Separation Technique.184590">
+            <Action_assn>
+              <OntologyEntry category="Action" value="dissect">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="ebi.ac.uk:MIAMExpress:BioSource:184590"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Type_assn>
+          <OntologyEntry category="BioSampleType" value="not_extract">
+          </OntologyEntry>
+        </Type_assn>
+      </BioSample>
+      <BioSource identifier="ebi.ac.uk:MIAMExpress:BioSource:184590" name="Wild type islet sources">
+        <Characteristics_assnlist>
+          <OntologyEntry category="Organism" value="Mus musculus">
+          </OntologyEntry>
+          <OntologyEntry category="BioSourceType" value="fresh_sample">
+          </OntologyEntry>
+          <OntologyEntry category="DevelopmentalStage" value="adult">
+          </OntologyEntry>
+          <OntologyEntry category="Age" value="12 To 15">
+          </OntologyEntry>
+          <OntologyEntry category="TimeUnit" value="months">
+          </OntologyEntry>
+          <OntologyEntry category="OrganismPart" value="pancreatic islets">
+          </OntologyEntry>
+          <OntologyEntry category="Sex" value="female">
+          </OntologyEntry>
+          <OntologyEntry category="Genotype" value="wild_type">
+          </OntologyEntry>
+          <OntologyEntry category="TargetedCellType" value="Islet beta cells">
+          </OntologyEntry>
+          <OntologyEntry category="StrainOrLine" value="C57BL/6">
+          </OntologyEntry>
+        </Characteristics_assnlist>
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="whole_organism">
+          </OntologyEntry>
+        </MaterialType_assn>
+      </BioSource>
+      <LabeledExtract identifier="ebi.ac.uk:MIAMExpress:LabeledExtract:22580" name="L_Survivin transgenic islets labeling">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="total_RNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="ebi.ac.uk:MIAMExpress:Treatment:Labeling.22580">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2006-01-16 22:08:42">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="biotin">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="ebi.ac.uk:MIAMExpress:Parameter:LABEL_USED.51343"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="none">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="ebi.ac.uk:MIAMExpress:Parameter:AMPLIFICATION_LABEL.51344"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-16811"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="ComplexAction" value="labeling">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="ebi.ac.uk:MIAMExpress:BioSample:Extraction.16810"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Labels_assnreflist>
+          <Compound_ref identifier="ebi.ac.uk:LabelCompound:biotin"/>
+        </Labels_assnreflist>
+      </LabeledExtract>
+      <BioSample identifier="ebi.ac.uk:MIAMExpress:BioSample:Extraction.16810" name="E_Survivin transgenic islets">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="total_RNA">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment identifier="ebi.ac.uk:MIAMExpress:Treatment:Extraction.16810">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2006-01-16 18:19:08">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="total RNA">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="ebi.ac.uk:MIAMExpress:Parameter:EXTRACTED_PRODUCT.51301"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="none">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="ebi.ac.uk:MIAMExpress:Parameter:AMPLIFICATION_EXTRACT.51302"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-16799"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="ComplexAction" value="nucleic_acid_extraction">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSample_ref identifier="ebi.ac.uk:MIAMExpress:BioSample:Sample.184631"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Type_assn>
+          <OntologyEntry category="BioSampleType" value="extract">
+          </OntologyEntry>
+        </Type_assn>
+      </BioSample>
+      <BioSample identifier="ebi.ac.uk:MIAMExpress:BioSample:Sample.184631" name="Survivin transgenic islets">
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="organism_part">
+          </OntologyEntry>
+        </MaterialType_assn>
+        <Treatments_assnlist>
+          <Treatment order="1" identifier="ebi.ac.uk:MIAMExpress:Treatment:Growth.184631">
+            <Action_assn>
+              <OntologyEntry category="ComplexAction" value="grow">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="ebi.ac.uk:MIAMExpress:BioSource:184631"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+          <Treatment order="2" identifier="ebi.ac.uk:MIAMExpress:Treatment:Sample.184631">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="2006-01-16 18:45:35">
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-MEXP-16800"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Action_assn>
+              <OntologyEntry category="Action" value="specified_biomaterial_action">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="ebi.ac.uk:MIAMExpress:BioSource:184631"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+          <Treatment order="3" identifier="ebi.ac.uk:MIAMExpress:Treatment:Separation Technique.184631">
+            <Action_assn>
+              <OntologyEntry category="Action" value="dissect">
+              </OntologyEntry>
+            </Action_assn>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <BioSource_ref identifier="ebi.ac.uk:MIAMExpress:BioSource:184631"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+          </Treatment>
+        </Treatments_assnlist>
+        <Type_assn>
+          <OntologyEntry category="BioSampleType" value="not_extract">
+          </OntologyEntry>
+        </Type_assn>
+      </BioSample>
+      <BioSource identifier="ebi.ac.uk:MIAMExpress:BioSource:184631" name="Survivin transgenic islets source">
+        <Characteristics_assnlist>
+          <OntologyEntry category="Organism" value="Mus musculus">
+          </OntologyEntry>
+          <OntologyEntry category="BioSourceType" value="fresh_sample">
+          </OntologyEntry>
+          <OntologyEntry category="DevelopmentalStage" value="adult">
+          </OntologyEntry>
+          <OntologyEntry category="Age" value="12 To 15">
+          </OntologyEntry>
+          <OntologyEntry category="TimeUnit" value="months">
+          </OntologyEntry>
+          <OntologyEntry category="OrganismPart" value="pancreatic islets">
+          </OntologyEntry>
+          <OntologyEntry category="Sex" value="female">
+          </OntologyEntry>
+          <OntologyEntry category="GeneticModification" value="gene_knock_in">
+          </OntologyEntry>
+          <OntologyEntry category="Genotype" value="survivin transgenic">
+          </OntologyEntry>
+          <OntologyEntry category="TargetedCellType" value="Islet beta cells">
+          </OntologyEntry>
+          <OntologyEntry category="StrainOrLine" value="C57BL/6">
+          </OntologyEntry>
+        </Characteristics_assnlist>
+        <MaterialType_assn>
+          <OntologyEntry category="MaterialType" value="whole_organism">
+          </OntologyEntry>
+        </MaterialType_assn>
+      </BioSource>
+    </BioMaterial_assnlist>
+  </BioMaterial_package>
+  <Array_package>
+    <Array_assnlist>
+      <Array identifier="ebi.ac.uk:MIAMExpress:Array:2031.16385" name=" ">
+        <ArrayDesign_assnref>
+          <!--PhysicalArrayDesign_ref identifier="A-AFFY-36"/-->
+	  <PhysicalArrayDesign_ref identifier="A-AFFY-4"/>
+        </ArrayDesign_assnref>
+        <Information_assnref>
+          <ArrayManufacture_ref identifier="ebi.ac.uk:MIAMExpress:ArrayManufacture:A-AFFY-36..16386"/>
+        </Information_assnref>
+      </Array>
+      <Array identifier="ebi.ac.uk:MIAMExpress:Array:2031.16386" name=" ">
+        <ArrayDesign_assnref>
+          <!--PhysicalArrayDesign_ref identifier="A-AFFY-36"/-->
+	  <PhysicalArrayDesign_ref identifier="A-AFFY-4"/>
+        </ArrayDesign_assnref>
+        <Information_assnref>
+          <ArrayManufacture_ref identifier="ebi.ac.uk:MIAMExpress:ArrayManufacture:A-AFFY-36..16386"/>
+        </Information_assnref>
+      </Array>
+    </Array_assnlist>
+    <ArrayManufacture_assnlist>
+      <ArrayManufacture identifier="ebi.ac.uk:MIAMExpress:ArrayManufacture:A-AFFY-36..16386" name="A-AFFY-36:">
+        <Arrays_assnreflist>
+          <Array_ref identifier="ebi.ac.uk:MIAMExpress:Array:2031.16385"/>
+          <Array_ref identifier="ebi.ac.uk:MIAMExpress:Array:2031.16386"/>
+        </Arrays_assnreflist>
+      </ArrayManufacture>
+    </ArrayManufacture_assnlist>
+  </Array_package>
+  <BioAssay_package>
+    <BioAssay_assnlist>
+      <PhysicalBioAssay identifier="ebi.ac.uk:MIAMExpress:PhysicalBioAssay:16385" name="H_Wild type labeling:Hybridization">
+        <BioAssayFactorValues_assnreflist>
+          <FactorValue_ref identifier="ebi.ac.uk:MIAMExpress:FactorValue:2031.184590.genotype"/>
+        </BioAssayFactorValues_assnreflist>
+        <BioAssayCreation_assn>
+          <Hybridization identifier="ebi.ac.uk:MIAMExpress:Hybridization:16385" name="H_Wild type labeling">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="n/a">
+                <HardwareApplications_assnlist>
+                  <HardwareApplication>
+                    <ParameterValues_assnlist>
+                      <ParameterValue value="1">
+                        <ParameterType_assnref>
+                          <Parameter_ref identifier="Affymetrix:Parameter:FluidicsStationNumber"/>
+                        </ParameterType_assnref>
+                      </ParameterValue>
+                      <ParameterValue value="1">
+                        <ParameterType_assnref>
+                          <Parameter_ref identifier="Affymetrix:Parameter:FluidicsStationPosition"/>
+                        </ParameterType_assnref>
+                      </ParameterValue>
+                    </ParameterValues_assnlist>
+                    <Hardware_assnref>
+                      <Hardware_ref identifier="Affymetrix:Hardware:FluidicsStation"/>
+                    </Hardware_assnref>
+                  </HardwareApplication>
+                </HardwareApplications_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="Affymetrix:Protocol:Hybridization-EukGE-WS2v5_450"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <LabeledExtract_ref identifier="ebi.ac.uk:MIAMExpress:LabeledExtract:22574"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+            <Array_assnref>
+              <Array_ref identifier="ebi.ac.uk:MIAMExpress:Array:2031.16385"/>
+            </Array_assnref>
+          </Hybridization>
+        </BioAssayCreation_assn>
+        <BioAssayTreatments_assnlist>
+          <ImageAcquisition identifier="ebi.ac.uk:MIAMExpress:ImageAcquisition:16385">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="n/a">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="1">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:NumberOfScans"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="1.56">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:ScanPixelSize"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <HardwareApplications_assnlist>
+                  <HardwareApplication>
+                    <ParameterValues_assnlist>
+                      <ParameterValue value="50208790">
+                        <ParameterType_assnref>
+                          <Parameter_ref identifier="Affymetrix:Parameter:ScannerID"/>
+                        </ParameterType_assnref>
+                      </ParameterValue>
+                      <ParameterValue value="M10">
+                        <ParameterType_assnref>
+                          <Parameter_ref identifier="Affymetrix:Parameter:ScannerType"/>
+                        </ParameterType_assnref>
+                      </ParameterValue>
+                    </ParameterValues_assnlist>
+                    <Hardware_assnref>
+                      <Hardware_ref identifier="Affymetrix:Hardware:Scanner"/>
+                    </Hardware_assnref>
+                  </HardwareApplication>
+                </HardwareApplications_assnlist>
+                <SoftwareApplications_assnlist>
+                  <SoftwareApplication>
+                    <Software_assnref>
+                      <Software_ref identifier="Affymetrix:Software:GCOS"/>
+                    </Software_assnref>
+                  </SoftwareApplication>
+                </SoftwareApplications_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="Affymetrix:Protocol:Scan"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Target_assnref>
+              <PhysicalBioAssay_ref identifier="ebi.ac.uk:MIAMExpress:PhysicalBioAssay:16385"/>
+            </Target_assnref>
+          </ImageAcquisition>
+        </BioAssayTreatments_assnlist>
+      </PhysicalBioAssay>
+      <PhysicalBioAssay identifier="ebi.ac.uk:MIAMExpress:PhysicalBioAssay:16386" name="H_Survivin transgenic islets labeling:Hybridization">
+        <BioAssayFactorValues_assnreflist>
+          <FactorValue_ref identifier="ebi.ac.uk:MIAMExpress:FactorValue:2031.184631.genotype"/>
+        </BioAssayFactorValues_assnreflist>
+        <BioAssayCreation_assn>
+          <Hybridization identifier="ebi.ac.uk:MIAMExpress:Hybridization:16386" name="H_Survivin transgenic islets labeling">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="n/a">
+                <HardwareApplications_assnlist>
+                  <HardwareApplication>
+                    <ParameterValues_assnlist>
+                      <ParameterValue value="1">
+                        <ParameterType_assnref>
+                          <Parameter_ref identifier="Affymetrix:Parameter:FluidicsStationNumber"/>
+                        </ParameterType_assnref>
+                      </ParameterValue>
+                      <ParameterValue value="2">
+                        <ParameterType_assnref>
+                          <Parameter_ref identifier="Affymetrix:Parameter:FluidicsStationPosition"/>
+                        </ParameterType_assnref>
+                      </ParameterValue>
+                    </ParameterValues_assnlist>
+                    <Hardware_assnref>
+                      <Hardware_ref identifier="Affymetrix:Hardware:FluidicsStation"/>
+                    </Hardware_assnref>
+                  </HardwareApplication>
+                </HardwareApplications_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="Affymetrix:Protocol:Hybridization-EukGE-WS2v5_450"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <SourceBioMaterialMeasurements_assnlist>
+              <BioMaterialMeasurement>
+                <BioMaterial_assnref>
+                  <LabeledExtract_ref identifier="ebi.ac.uk:MIAMExpress:LabeledExtract:22580"/>
+                </BioMaterial_assnref>
+              </BioMaterialMeasurement>
+            </SourceBioMaterialMeasurements_assnlist>
+            <Array_assnref>
+              <Array_ref identifier="ebi.ac.uk:MIAMExpress:Array:2031.16386"/>
+            </Array_assnref>
+          </Hybridization>
+        </BioAssayCreation_assn>
+        <BioAssayTreatments_assnlist>
+          <ImageAcquisition identifier="ebi.ac.uk:MIAMExpress:ImageAcquisition:16386">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="n/a">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="1">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:NumberOfScans"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="1.56">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:ScanPixelSize"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <HardwareApplications_assnlist>
+                  <HardwareApplication>
+                    <ParameterValues_assnlist>
+                      <ParameterValue value="50208790">
+                        <ParameterType_assnref>
+                          <Parameter_ref identifier="Affymetrix:Parameter:ScannerID"/>
+                        </ParameterType_assnref>
+                      </ParameterValue>
+                      <ParameterValue value="M10">
+                        <ParameterType_assnref>
+                          <Parameter_ref identifier="Affymetrix:Parameter:ScannerType"/>
+                        </ParameterType_assnref>
+                      </ParameterValue>
+                    </ParameterValues_assnlist>
+                    <Hardware_assnref>
+                      <Hardware_ref identifier="Affymetrix:Hardware:Scanner"/>
+                    </Hardware_assnref>
+                  </HardwareApplication>
+                </HardwareApplications_assnlist>
+                <SoftwareApplications_assnlist>
+                  <SoftwareApplication>
+                    <Software_assnref>
+                      <Software_ref identifier="Affymetrix:Software:GCOS"/>
+                    </Software_assnref>
+                  </SoftwareApplication>
+                </SoftwareApplications_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="Affymetrix:Protocol:Scan"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <Target_assnref>
+              <PhysicalBioAssay_ref identifier="ebi.ac.uk:MIAMExpress:PhysicalBioAssay:16386"/>
+            </Target_assnref>
+          </ImageAcquisition>
+        </BioAssayTreatments_assnlist>
+      </PhysicalBioAssay>
+      <MeasuredBioAssay identifier="ebi.ac.uk:MIAMExpress:MeasuredBioAssay:16385" name="H_Wild type labeling">
+        <BioAssayFactorValues_assnreflist>
+          <FactorValue_ref identifier="ebi.ac.uk:MIAMExpress:FactorValue:2031.184590.genotype"/>
+        </BioAssayFactorValues_assnreflist>
+        <FeatureExtraction_assn>
+          <FeatureExtraction identifier="ebi.ac.uk:MIAMExpress:FeatureExtraction:2031.16385">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="n/a">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="6.0">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:AlgVersion"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="2">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:CellMargin"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="StdvMean">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:ErrorBasis"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="TRUE">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:FeatureExtraction"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="TRUE">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:FixedCellSize"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="7">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:FullFeatureHeight"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="7">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:FullFeatureWidth"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="FALSE">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:IgnoreOutliersInShiftRows"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="1.500">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:OutlierHigh"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="1.004">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:OutlierLow"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="75">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:Percentile"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="2">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:PoolHeightExtension"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="2">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:PoolWidthExtenstion"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="FALSE">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:RandomizePixels"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                   <ParameterValue value="1.000000">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:StdMult"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="FALSE">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:UseSubgrids"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <SoftwareApplications_assnlist>
+                  <SoftwareApplication>
+                    <Software_assnref>
+                      <Software_ref identifier="Affymetrix:Software:GCOS"/>
+                    </Software_assnref>
+                  </SoftwareApplication>
+                </SoftwareApplications_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-AFFY-6"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <PhysicalBioAssaySource_assnref>
+              <PhysicalBioAssay_ref identifier="ebi.ac.uk:MIAMExpress:PhysicalBioAssay:16385"/>
+            </PhysicalBioAssaySource_assnref>
+          </FeatureExtraction>
+        </FeatureExtraction_assn>
+        <MeasuredBioAssayData_assnreflist>
+          <MeasuredBioAssayData_ref identifier="ebi.ac.uk:MIAMExpress:MeasuredBioAssayData:16385"/>
+        </MeasuredBioAssayData_assnreflist>
+      </MeasuredBioAssay>
+      <DerivedBioAssay identifier="ebi.ac.uk:MIAMExpress:DerivedBioAssay:Hybridization.16385" name="H_Wild type labeling">
+        <BioAssayFactorValues_assnreflist>
+          <FactorValue_ref identifier="ebi.ac.uk:MIAMExpress:FactorValue:2031.184590.genotype"/>
+        </BioAssayFactorValues_assnreflist>
+        <Type_assn>
+          <OntologyEntry category="DerivedBioAssayType" value="Statistical CHP Analysis">
+          </OntologyEntry>
+        </Type_assn>
+        <DerivedBioAssayData_assnreflist>
+          <DerivedBioAssayData_ref identifier="ebi.ac.uk:MIAMExpress:DerivedBioAssayData:2031.Normalized.16385"/>
+        </DerivedBioAssayData_assnreflist>
+        <DerivedBioAssayMap_assnreflist>
+          <BioAssayMap_ref identifier="ebi.ac.uk:MIAMExpress:BioAssayMap:2031.Normalized.16385"/>
+        </DerivedBioAssayMap_assnreflist>
+      </DerivedBioAssay>
+      <MeasuredBioAssay identifier="ebi.ac.uk:MIAMExpress:MeasuredBioAssay:16386" name="H_Survivin transgenic islets labeling">
+        <BioAssayFactorValues_assnreflist>
+          <FactorValue_ref identifier="ebi.ac.uk:MIAMExpress:FactorValue:2031.184631.genotype"/>
+        </BioAssayFactorValues_assnreflist>
+        <FeatureExtraction_assn>
+          <FeatureExtraction identifier="ebi.ac.uk:MIAMExpress:FeatureExtraction:2031.16386">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="n/a">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="6.0">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:AlgVersion"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="2">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:CellMargin"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="StdvMean">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:ErrorBasis"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="TRUE">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:FeatureExtraction"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="TRUE">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:FixedCellSize"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="7">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:FullFeatureHeight"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="7">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:FullFeatureWidth"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="FALSE">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:IgnoreOutliersInShiftRows"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="1.500">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:OutlierHigh"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="1.004">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:OutlierLow"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="75">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:Percentile"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="2">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:PoolHeightExtension"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="2">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:PoolWidthExtenstion"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="FALSE">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:RandomizePixels"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="1.000000">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:StdMult"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="FALSE">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:UseSubgrids"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <SoftwareApplications_assnlist>
+                  <SoftwareApplication>
+                    <Software_assnref>
+                      <Software_ref identifier="Affymetrix:Software:GCOS"/>
+                    </Software_assnref>
+                  </SoftwareApplication>
+                </SoftwareApplications_assnlist>
+                <Protocol_assnref>
+                  <Protocol_ref identifier="P-AFFY-6"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <PhysicalBioAssaySource_assnref>
+              <PhysicalBioAssay_ref identifier="ebi.ac.uk:MIAMExpress:PhysicalBioAssay:16386"/>
+            </PhysicalBioAssaySource_assnref>
+          </FeatureExtraction>
+        </FeatureExtraction_assn>
+        <MeasuredBioAssayData_assnreflist>
+          <MeasuredBioAssayData_ref identifier="ebi.ac.uk:MIAMExpress:MeasuredBioAssayData:16386"/>
+        </MeasuredBioAssayData_assnreflist>
+      </MeasuredBioAssay>
+      <DerivedBioAssay identifier="ebi.ac.uk:MIAMExpress:DerivedBioAssay:Hybridization.16386" name="H_Survivin transgenic islets labeling">
+        <BioAssayFactorValues_assnreflist>
+          <FactorValue_ref identifier="ebi.ac.uk:MIAMExpress:FactorValue:2031.184631.genotype"/>
+        </BioAssayFactorValues_assnreflist>
+        <Type_assn>
+          <OntologyEntry category="DerivedBioAssayType" value="Statistical CHP Analysis">
+          </OntologyEntry>
+        </Type_assn>
+        <DerivedBioAssayData_assnreflist>
+          <DerivedBioAssayData_ref identifier="ebi.ac.uk:MIAMExpress:DerivedBioAssayData:2031.Normalized.16386"/>
+        </DerivedBioAssayData_assnreflist>
+        <DerivedBioAssayMap_assnreflist>
+          <BioAssayMap_ref identifier="ebi.ac.uk:MIAMExpress:BioAssayMap:2031.Normalized.16386"/>
+        </DerivedBioAssayMap_assnreflist>
+      </DerivedBioAssay>
+    </BioAssay_assnlist>
+  </BioAssay_package>
+  <BioAssayData_package>
+  <BioAssayDimension_assnlist>
+      <BioAssayDimension identifier="ebi.ac.uk:MIAMExpress:BioAssayDimension:2031.16385" name="ebi.ac.uk:MIAMExpress:BioAssayDimension:2031.16385">
+        <BioAssays_assnreflist>
+          <MeasuredBioAssay_ref identifier="ebi.ac.uk:MIAMExpress:MeasuredBioAssay:16385"/>
+        </BioAssays_assnreflist>
+      </BioAssayDimension>
+      <BioAssayDimension identifier="ebi.ac.uk:MIAMExpress:BioAssayDimension:Normalized.2031.16385" name="ebi.ac.uk:MIAMExpress:BioAssayDimension:Normalized.2031.16385">
+        <BioAssays_assnreflist>
+          <DerivedBioAssay_ref identifier="ebi.ac.uk:MIAMExpress:DerivedBioAssay:Hybridization.16385"/>
+        </BioAssays_assnreflist>
+      </BioAssayDimension>
+      <BioAssayDimension identifier="ebi.ac.uk:MIAMExpress:BioAssayDimension:2031.16386" name="ebi.ac.uk:MIAMExpress:BioAssayDimension:2031.16386">
+        <BioAssays_assnreflist>
+          <MeasuredBioAssay_ref identifier="ebi.ac.uk:MIAMExpress:MeasuredBioAssay:16386"/>
+        </BioAssays_assnreflist>
+      </BioAssayDimension>
+      <BioAssayDimension identifier="ebi.ac.uk:MIAMExpress:BioAssayDimension:Normalized.2031.16386" name="ebi.ac.uk:MIAMExpress:BioAssayDimension:Normalized.2031.16386">
+        <BioAssays_assnreflist>
+          <DerivedBioAssay_ref identifier="ebi.ac.uk:MIAMExpress:DerivedBioAssay:Hybridization.16386"/>
+        </BioAssays_assnreflist>
+      </BioAssayDimension>
+    </BioAssayDimension_assnlist>
+  <QuantitationTypeDimension_assnlist>
+      <QuantitationTypeDimension identifier="ebi.ac.uk:MIAMExpress:QuantitationTypeDimension:2031.16385" name="ebi.ac.uk:MIAMExpress:QuantitationTypeDimension:2031.16385">
+        <QuantitationTypes_assnreflist>
+          <SpecializedQuantitationType_ref identifier="Affymetrix:QuantitationType:CELX"/>
+          <SpecializedQuantitationType_ref identifier="Affymetrix:QuantitationType:CELY"/>
+          <MeasuredSignal_ref identifier="Affymetrix:QuantitationType:CELIntensity"/>
+          <SpecializedQuantitationType_ref identifier="Affymetrix:QuantitationType:CELIntensityStdev"/>
+          <SpecializedQuantitationType_ref identifier="Affymetrix:QuantitationType:CELPixels"/>
+          <SpecializedQuantitationType_ref identifier="Affymetrix:QuantitationType:CELOutlier"/>
+          <SpecializedQuantitationType_ref identifier="Affymetrix:QuantitationType:CELMask"/>
+        </QuantitationTypes_assnreflist>
+      </QuantitationTypeDimension>
+      <QuantitationTypeDimension identifier="ebi.ac.uk:MIAMExpress:QuantitationTypeDimension:2031.Normalized.16385" name="ebi.ac.uk:MIAMExpress:QuantitationTypeDimension:2031.Normalized.16385">
+        <QuantitationTypes_assnreflist>
+          <SpecializedQuantitationType_ref identifier="Affymetrix:QuantitationType:ProbeSetName"/>
+          <SpecializedQuantitationType_ref identifier="Affymetrix:QuantitationType:CHPPairs"/>
+          <SpecializedQuantitationType_ref identifier="Affymetrix:QuantitationType:CHPPairsUsed"/>
+          <DerivedSignal_ref identifier="Affymetrix:QuantitationType:CHPSignal"/>
+          <PresentAbsent_ref identifier="Affymetrix:QuantitationType:CHPDetection"/>
+          <PValue_ref identifier="Affymetrix:QuantitationType:CHPDetectionPvalue"/>
+        </QuantitationTypes_assnreflist>
+      </QuantitationTypeDimension>
+    </QuantitationTypeDimension_assnlist>
+  <BioAssayMap_assnlist>
+      <BioAssayMap identifier="ebi.ac.uk:MIAMExpress:BioAssayMap:2031.Normalized.16385">
+        <BioAssayMapTarget_assnref>
+          <DerivedBioAssay_ref identifier="ebi.ac.uk:MIAMExpress:DerivedBioAssay:Hybridization.16385"/>
+        </BioAssayMapTarget_assnref>
+        <SourceBioAssays_assnreflist>
+          <MeasuredBioAssay_ref identifier="ebi.ac.uk:MIAMExpress:MeasuredBioAssay:16385"/>
+        </SourceBioAssays_assnreflist>
+      </BioAssayMap>
+      <BioAssayMap identifier="ebi.ac.uk:MIAMExpress:BioAssayMap:2031.Normalized.16386">
+        <BioAssayMapTarget_assnref>
+          <DerivedBioAssay_ref identifier="ebi.ac.uk:MIAMExpress:DerivedBioAssay:Hybridization.16386"/>
+        </BioAssayMapTarget_assnref>
+        <SourceBioAssays_assnreflist>
+          <MeasuredBioAssay_ref identifier="ebi.ac.uk:MIAMExpress:MeasuredBioAssay:16386"/>
+        </SourceBioAssays_assnreflist>
+      </BioAssayMap>
+    </BioAssayMap_assnlist>
+  <BioAssayData_assnlist>
+      <MeasuredBioAssayData identifier="ebi.ac.uk:MIAMExpress:MeasuredBioAssayData:16385">
+        <SummaryStatistics_assnlist>
+          <NameValueType value="1002" name="Columns">
+          </NameValueType>
+          <NameValueType value="0" name="Number Cells Masked">
+          </NameValueType>
+          <NameValueType value="99" name="Number Outlier Cells">
+          </NameValueType>
+          <NameValueType value="1004004" name="Number of Cells">
+          </NameValueType>
+          <NameValueType value="1002" name="Rows">
+          </NameValueType>
+        </SummaryStatistics_assnlist>
+        <BioAssayDimension_assnref>
+          <BioAssayDimension_ref identifier="ebi.ac.uk:MIAMExpress:BioAssayDimension:2031.16385"/>
+        </BioAssayDimension_assnref>
+        <DesignElementDimension_assnref>
+          <FeatureDimension_ref identifier="ebi.ac.uk:MIAMExpress:E-MEXP-536.Mouse430_2.1.FeatureDimension"/>
+        </DesignElementDimension_assnref>
+        <QuantitationTypeDimension_assnref>
+          <QuantitationTypeDimension_ref identifier="ebi.ac.uk:MIAMExpress:QuantitationTypeDimension:2031.16385"/>
+        </QuantitationTypeDimension_assnref>
+        <BioDataValues_assn>
+          <BioDataCube order="BDQ">
+            <DataExternal_assn>
+              <DataExternal filenameURI="WT-021605.CEL.txt" dataFormat="tab delimited"/>
+            </DataExternal_assn>
+          </BioDataCube>
+        </BioDataValues_assn>
+      </MeasuredBioAssayData>
+      <DerivedBioAssayData identifier="ebi.ac.uk:MIAMExpress:DerivedBioAssayData:2031.Normalized.16385">
+        <SummaryStatistics_assnlist>
+          <NameValueType value="402.27" name="Background Avg">
+          </NameValueType>
+          <NameValueType value="419.1" name="Background Max">
+          </NameValueType>
+          <NameValueType value="385.2" name="Background Min">
+          </NameValueType>
+          <NameValueType value="6.54" name="Background Stdev">
+          </NameValueType>
+          <NameValueType value="16.64" name="Noise Avg">
+          </NameValueType>
+          <NameValueType value="21.0" name="Noise Max">
+          </NameValueType>
+          <NameValueType value="14.1" name="Noise Min">
+          </NameValueType>
+          <NameValueType value="1.07" name="Noise Stdev">
+          </NameValueType>
+          <NameValueType value="7.79" name="RawQ">
+          </NameValueType>
+        </SummaryStatistics_assnlist>
+        <BioAssayDimension_assnref>
+          <BioAssayDimension_ref identifier="ebi.ac.uk:MIAMExpress:BioAssayDimension:Normalized.2031.16385"/>
+        </BioAssayDimension_assnref>
+        <DesignElementDimension_assnref>
+          <CompositeSequenceDimension_ref identifier="ebi.ac.uk:MIAMExpress:E-MEXP-536.Mouse430_2.1.CompositeSequenceDimension"/>
+        </DesignElementDimension_assnref>
+        <QuantitationTypeDimension_assnref>
+          <QuantitationTypeDimension_ref identifier="ebi.ac.uk:MIAMExpress:QuantitationTypeDimension:2031.Normalized.16385"/>
+        </QuantitationTypeDimension_assnref>
+        <BioDataValues_assn>
+          <BioDataCube order="BDQ">
+            <DataExternal_assn>
+              <DataExternal filenameURI="WT-021605.CHP.txt" dataFormat="tab delimited"/>
+            </DataExternal_assn>
+          </BioDataCube>
+        </BioDataValues_assn>
+        <ProducerTransformation_assn>
+          <Transformation identifier="ebi.ac.uk:MIAMExpress:Transformation:2031:16385">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="n/a">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="0.05">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:Alpha1"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="0.065">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:Alpha2"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="0.002">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:Gamma1H"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="0.002">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:Gamma1L"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="0.002667">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:Gamma2H"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="0.002667">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:Gamma2L"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="1.000000000000">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:NF"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="1.1">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:Perturbation"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="3.050086975098">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:SF"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="All">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:SFGene"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="150">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:TGT"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="0.015">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:Tau"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <SoftwareApplications_assnlist>
+                  <SoftwareApplication>
+                    <Software_assnref>
+                      <Software_ref identifier="Affymetrix:Software:GCOS"/>
+                    </Software_assnref>
+                  </SoftwareApplication>
+                </SoftwareApplications_assnlist>
+                <Protocol_assnref>
+                  <!--Protocol_ref identifier="Affymetrix:Protocol:ExpressionStat"/-->
+		  <Protocol_ref identifier="Affymetrix:Protocol:MAS4:ExpressionCall"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <BioAssayDataSources_assnreflist>
+              <MeasuredBioAssayData_ref identifier="ebi.ac.uk:MIAMExpress:MeasuredBioAssayData:16385"/>
+            </BioAssayDataSources_assnreflist>
+            <BioAssayMapping_assn>
+              <BioAssayMapping>
+                <BioAssayMaps_assnreflist>
+                  <BioAssayMap_ref identifier="ebi.ac.uk:MIAMExpress:BioAssayMap:2031.Normalized.16385"/>
+                </BioAssayMaps_assnreflist>
+              </BioAssayMapping>
+            </BioAssayMapping_assn>
+          </Transformation>
+        </ProducerTransformation_assn>
+      </DerivedBioAssayData>
+      <MeasuredBioAssayData identifier="ebi.ac.uk:MIAMExpress:MeasuredBioAssayData:16386">
+        <SummaryStatistics_assnlist>
+          <NameValueType value="1002" name="Columns">
+          </NameValueType>
+          <NameValueType value="0" name="Number Cells Masked">
+          </NameValueType>
+          <NameValueType value="47" name="Number Outlier Cells">
+          </NameValueType>
+          <NameValueType value="1004004" name="Number of Cells">
+          </NameValueType>
+          <NameValueType value="1002" name="Rows">
+          </NameValueType>
+        </SummaryStatistics_assnlist>
+        <BioAssayDimension_assnref>
+          <BioAssayDimension_ref identifier="ebi.ac.uk:MIAMExpress:BioAssayDimension:2031.16386"/>
+        </BioAssayDimension_assnref>
+        <DesignElementDimension_assnref>
+          <FeatureDimension_ref identifier="ebi.ac.uk:MIAMExpress:E-MEXP-536.Mouse430_2.1.FeatureDimension"/>
+        </DesignElementDimension_assnref>
+        <QuantitationTypeDimension_assnref>
+          <QuantitationTypeDimension_ref identifier="ebi.ac.uk:MIAMExpress:QuantitationTypeDimension:2031.16385"/>
+        </QuantitationTypeDimension_assnref>
+        <BioDataValues_assn>
+          <BioDataCube order="BDQ">
+            <DataExternal_assn>
+              <DataExternal filenameURI="TG-021605.CEL.txt" dataFormat="tab delimited"/>
+            </DataExternal_assn>
+          </BioDataCube>
+        </BioDataValues_assn>
+      </MeasuredBioAssayData>
+      <DerivedBioAssayData identifier="ebi.ac.uk:MIAMExpress:DerivedBioAssayData:2031.Normalized.16386">
+        <SummaryStatistics_assnlist>
+          <NameValueType value="298.17" name="Background Avg">
+          </NameValueType>
+          <NameValueType value="318.6" name="Background Max">
+          </NameValueType>
+          <NameValueType value="279.7" name="Background Min">
+          </NameValueType>
+          <NameValueType value="6.94" name="Background Stdev">
+          </NameValueType>
+          <NameValueType value="12.34" name="Noise Avg">
+          </NameValueType>
+          <NameValueType value="15.7" name="Noise Max">
+          </NameValueType>
+          <NameValueType value="11.4" name="Noise Min">
+          </NameValueType>
+          <NameValueType value="0.52" name="Noise Stdev">
+          </NameValueType>
+          <NameValueType value="6.76" name="RawQ">
+          </NameValueType>
+        </SummaryStatistics_assnlist>
+        <BioAssayDimension_assnref>
+          <BioAssayDimension_ref identifier="ebi.ac.uk:MIAMExpress:BioAssayDimension:Normalized.2031.16386"/>
+        </BioAssayDimension_assnref>
+        <DesignElementDimension_assnref>
+          <CompositeSequenceDimension_ref identifier="ebi.ac.uk:MIAMExpress:E-MEXP-536.Mouse430_2.1.CompositeSequenceDimension"/>
+        </DesignElementDimension_assnref>
+        <QuantitationTypeDimension_assnref>
+          <QuantitationTypeDimension_ref identifier="ebi.ac.uk:MIAMExpress:QuantitationTypeDimension:2031.Normalized.16385"/>
+        </QuantitationTypeDimension_assnref>
+        <BioDataValues_assn>
+          <BioDataCube order="BDQ">
+            <DataExternal_assn>
+              <DataExternal filenameURI="TG-021605.CHP.txt" dataFormat="tab delimited"/>
+            </DataExternal_assn>
+          </BioDataCube>
+        </BioDataValues_assn>
+        <ProducerTransformation_assn>
+          <Transformation identifier="ebi.ac.uk:MIAMExpress:Transformation:2031:16386">
+            <ProtocolApplications_assnlist>
+              <ProtocolApplication activityDate="n/a">
+                <ParameterValues_assnlist>
+                  <ParameterValue value="0.05">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:Alpha1"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="0.065">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:Alpha2"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="0.002">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:Gamma1H"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="0.002">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:Gamma1L"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="0.002667">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:Gamma2H"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="0.002667">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:Gamma2L"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="1.000000000000">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:NF"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="1.1">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:Perturbation"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="2.814885377884">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:SF"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="All">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:SFGene"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="150">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:TGT"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                  <ParameterValue value="0.015">
+                    <ParameterType_assnref>
+                      <Parameter_ref identifier="Affymetrix:Parameter:Tau"/>
+                    </ParameterType_assnref>
+                  </ParameterValue>
+                </ParameterValues_assnlist>
+                <SoftwareApplications_assnlist>
+                  <SoftwareApplication>
+                    <Software_assnref>
+                      <Software_ref identifier="Affymetrix:Software:GCOS"/>
+                    </Software_assnref>
+                  </SoftwareApplication>
+                </SoftwareApplications_assnlist>
+                <Protocol_assnref>
+		  <!--Protocol_ref identifier="Affymetrix:Protocol:ExpressionStat"/-->
+		  <Protocol_ref identifier="Affymetrix:Protocol:MAS4:ExpressionCall"/>
+                </Protocol_assnref>
+              </ProtocolApplication>
+            </ProtocolApplications_assnlist>
+            <BioAssayDataSources_assnreflist>
+              <MeasuredBioAssayData_ref identifier="ebi.ac.uk:MIAMExpress:MeasuredBioAssayData:16386"/>
+            </BioAssayDataSources_assnreflist>
+            <BioAssayMapping_assn>
+              <BioAssayMapping>
+                <BioAssayMaps_assnreflist>
+                  <BioAssayMap_ref identifier="ebi.ac.uk:MIAMExpress:BioAssayMap:2031.Normalized.16386"/>
+                </BioAssayMaps_assnreflist>
+              </BioAssayMapping>
+            </BioAssayMapping_assn>
+          </Transformation>
+        </ProducerTransformation_assn>
+      </DerivedBioAssayData>
+    </BioAssayData_assnlist>
+</BioAssayData_package>
+  <Experiment_package>
+    <Experiment_assnlist>
+      <Experiment identifier="E-MEXP-536" name="Altieri. Survivin transgenic mice pancreatic islet profile">
+        <Descriptions_assnlist>
+          <Description text="Transgenic mice were generated that expressed the inhibitor of apoptosis and mitotic regulator survivin in pancreatic islet beta cells.  Control non-transgenic or transgenic islets were then used in a model of islet transplantation in diabetic recipient mice and tested for their ability to correct hyperglycemia and allow long-term engraftment of tranplanted islets in vivo. Control or transgenic islets were analyzed by chip microarray for potential transcripti [...]
+            <Annotations_assnlist>
+              <OntologyEntry category="ReleaseDate" value="2006-01-16">
+              </OntologyEntry>
+              <OntologyEntry category="SubmissionDate" value="2006-01-16 22:58:04">
+              </OntologyEntry>
+            </Annotations_assnlist>
+          </Description>
+          <Description>
+            <BibliographicReferences_assnlist>
+              <BibliographicReference title="Inhibition of apoptosis by survivin improves transplantation of pancreatic islets for treatment of diabetes in mice" publication="EMBO Rep" authors="Takehiko Dohi; Whitney Salz; Marco Costa; Charlotte Ariyan; Giacomo Basadonna; Dario Altieri" pages="-">
+                <Parameters_assnlist>
+                  <OntologyEntry category="PublicationType" value="journal_article">
+                  </OntologyEntry>
+                </Parameters_assnlist>
+
+<Accessions_assnlist>
+           <DatabaseEntry accession="1647022">
+                 <Database_assnref>
+                   <Database_ref identifier="ebi.ac.uk:Database:pubmed"/>
+		 </Database_assnref>
+	   </DatabaseEntry>
+</Accessions_assnlist>
+              </BibliographicReference>
+            </BibliographicReferences_assnlist>
+          </Description>
+        </Descriptions_assnlist>
+        <Providers_assnreflist>
+          <Person_ref identifier="ebi.ac.uk:MIAMExpress:Person:Takehiko Dohi.3751"/>
+          <Person_ref identifier="ebi.ac.uk:MIAMExpress:Person:Whitney Salz.3752"/>
+          <Person_ref identifier="ebi.ac.uk:MIAMExpress:Person:Marco Costa.3753"/>
+          <Person_ref identifier="ebi.ac.uk:MIAMExpress:Person:Charlotte Ariyan.3754"/>
+          <Person_ref identifier="ebi.ac.uk:MIAMExpress:Person:Giacomo Basadonna.3755"/>
+          <Person_ref identifier="ebi.ac.uk:MIAMExpress:Person:Dario_Altieri.daltieri"/>
+        </Providers_assnreflist>
+        <BioAssayData_assnreflist>
+          <MeasuredBioAssayData_ref identifier="ebi.ac.uk:MIAMExpress:MeasuredBioAssayData:16385"/>
+          <DerivedBioAssayData_ref identifier="ebi.ac.uk:MIAMExpress:DerivedBioAssayData:2031.Normalized.16385"/>
+          <MeasuredBioAssayData_ref identifier="ebi.ac.uk:MIAMExpress:MeasuredBioAssayData:16386"/>
+          <DerivedBioAssayData_ref identifier="ebi.ac.uk:MIAMExpress:DerivedBioAssayData:2031.Normalized.16386"/>
+        </BioAssayData_assnreflist>
+        <BioAssays_assnreflist>
+          <PhysicalBioAssay_ref identifier="ebi.ac.uk:MIAMExpress:PhysicalBioAssay:16385"/>
+          <PhysicalBioAssay_ref identifier="ebi.ac.uk:MIAMExpress:PhysicalBioAssay:16386"/>
+          <MeasuredBioAssay_ref identifier="ebi.ac.uk:MIAMExpress:MeasuredBioAssay:16385"/>
+          <DerivedBioAssay_ref identifier="ebi.ac.uk:MIAMExpress:DerivedBioAssay:Hybridization.16385"/>
+          <MeasuredBioAssay_ref identifier="ebi.ac.uk:MIAMExpress:MeasuredBioAssay:16386"/>
+          <DerivedBioAssay_ref identifier="ebi.ac.uk:MIAMExpress:DerivedBioAssay:Hybridization.16386"/>
+        </BioAssays_assnreflist>
+        <ExperimentDesigns_assnlist>
+          <ExperimentDesign>
+            <Types_assnlist>
+              <!--OntologyEntry category="ExperimentDesignType" value="individual_genetic_characteristics_design"-->
+
+	      <OntologyEntry category="ExperimentDesignType" value="strain_or_line_design">
+              </OntologyEntry>
+            </Types_assnlist>
+            <ExperimentalFactors_assnlist>
+              <ExperimentalFactor identifier="ebi.ac.uk:MIAMExpress:ExperimentalFactor:2031.434" name="genotype">
+                <Category_assn>
+                  <!--OntologyEntry category="ExperimentalFactorCategory" value="genotype"-->
+                  <OntologyEntry category="ExperimentalProtocolType" value="genetic_modification">
+                  </OntologyEntry>
+                </Category_assn>
+                <FactorValues_assnlist>
+                  <FactorValue identifier="ebi.ac.uk:MIAMExpress:FactorValue:2031.184590.genotype" name="genotype">
+                    <Value_assn>
+                      <OntologyEntry category="Genotype" value="wild_type">
+                      </OntologyEntry>
+                    </Value_assn>
+                  </FactorValue>
+                  <FactorValue identifier="ebi.ac.uk:MIAMExpress:FactorValue:2031.184631.genotype" name="genotype">
+                    <Value_assn>
+                      <OntologyEntry category="Genotype" value="survivin transgenic">
+                      </OntologyEntry>
+                    </Value_assn>
+                  </FactorValue>
+                </FactorValues_assnlist>
+              </ExperimentalFactor>
+            </ExperimentalFactors_assnlist>
+            <QualityControlDescription_assn>
+              <Description>
+              </Description>
+            </QualityControlDescription_assn>
+          </ExperimentDesign>
+        </ExperimentDesigns_assnlist>
+      </Experiment>
+    </Experiment_assnlist>
+  </Experiment_package>
+</MAGE-ML>
diff --git a/lib/perl/RAD/MR_T/MageImport/Test/toxoTemplate.tab b/lib/perl/RAD/MR_T/MageImport/Test/toxoTemplate.tab
new file mode 100644
index 0000000..c8f8a89
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Test/toxoTemplate.tab
@@ -0,0 +1,48 @@
+Investigation Title	Expression profiling of the 3 archetypal T. gondii lineages		
+Experimental Designs	strain_or_line_design	development_or_differentiation_design	
+Experimental Factor Name (Unique)	Strain	Time Grown	
+Experimental Factor Type	strain_or_line	timepoint	
+Experimental Factor Type Term Source		MO	
+
+Person Last Name	Bahl	Roos	Baldwin
+Person First Name	Amit	David	Don
+Person Email	abahl at mail.med.upenn.edu	droos at sas.upenn.edu	dbaldwin at mail.med.upenn.edu
+Person Phone		215 898 2118	215 898 3675
+Person Address	"423 Guardian Dr., 1403 Blockley Hall, Philadelphia PA 19104, USA"	"433 South University Ave., 304B Carolyn Lynch Laboratories, Philadelphia PA 19104, USA"	"3620 Hamilton Walk, 68 John Morgan Bldg., Philadelphia PA 19104, USA"
+Person Affiliation	"Department of Biology, University of Pennsylvania, Philadelphia PA 19014, USA"	"Department of Biology, University of Pennsylvania, Philadelphia PA 19014, USA"	"University of Pennsylvania Medical School, Philadelphia PA 19014, USA"
+Person Roles	investigator	submitter	investigator
+
+
+Quality Control Types	biological_replicate		
+Replicate Types	biological_replicate						
+Normalization Types							
+Date of Experiment	25-Aug-2006						
+Public Release Date							
+PubMed ID							
+Publication DOI							
+Publication Author List							
+Publication Title							
+Publication Status							
+Experiment Description	"Determination of  strain-specific differential expression by profiling wildtype tachyzoites from  RH, Pru, and CTG strains of T. gondii"						
+
+
+Protocol Name	Parasite Growth (Roos)	Total RNA via RNAqueous-4PCR Kit (Ambion).	One-Cycle Eukaryotic Target Labeling Assay (Affymetrix)	Affymetrix Hybridization Protocol (Penn Microarray Core Facility)	Affymetrix GeneChip Scanner 3000 (GCS3000)	Affymetrix MAS 5.0 Probe Cell Analysis	Robust Multi-Array Average expression measure (Bioconductor affy package)
+Protocol Description	Wild Type parasite in tachyzoite stage were serial passaged in HFF cells.	Total RNA was extracted using RNAqueous-4PCR (Ambion) following the manufacturer's instructions	"Total RNA (1 ?g to 15 ?g) or mRNA (0.2 ?g to 2 ?g) is first reverse transcribed using a T7-Oligo(dT) Promoter Primer in the first-strand cDNA synthesis reaction. Following RNase H-mediated second-strand cDNA synthesis, the double-stranded cDNA is purified and serves as a template in the subsequent i [...]
+Protocol Parameters	time_of_extraction		input_total_RNA;cRNA_yield	cRNA_hybridized			BG correct; Normalization;Summarization
+Protocol Type	grow	nucleic_acid_extraction	labeling	hybridization	image_acquisition	feature_extraction	feature_extraction
+Protocol Type Term Source	MO	MO	MO	MO	MO	MO	MO
+							
+Term Source	MO	ncbitax	nci_meta				
+Term Source version	1.3.1	unknown	unknown				
+Term Source URI	http://mged.sourceforge.net/ontologies/MGEDontology.php	http://www.ncbi.nlm.nih.gov/Taxonomy/taxonomyhome.html/	http://ncimeta.nci.nih.gov/indexMetaphrase.html				
+SDRF reference	ToxoDataTransferTemplateMT_hp-dab1.xls$HYBRIDIZATION_INFO!A1:AI9
+
+Source ID	MaterialType 	MaterialType Term Source	Characteristics [StrainOrLine]	Characteristics [DevelopmentalStage]	Characteristics [DevelopmentalStage] Term Source	Characteristics [Genotype]	Characteristics [Genotype] Term Source	Characteristics [Organism] 	Characteristics [Organism] Term Source	Protocol REF	ParameterValue [time_of_extraction]	Unit [TimeUnit] (Term Source: MO)	Sample ID	MaterialType	MaterialType Term Source	Protocol REF	Extract ID	MaterialType	MaterialType Term Source	 [...]
+RH 1	whole_organism	MO	RG (Type I)	tachyzoite	nci_meta	wild_type	MO	Toxoplasma gondii RH	ncbitax	Parasite Growth (Roos)	48	hours	RH 1 grown in HFF Cells	cell	MO	Total RNA via RNAqueous-4PCR Kit (Ambion).	RH 1 - RNA	total_RNA	MO	One-Cycle Eukaryotic Target Labeling Assay (Affymetrix)	1	ug	46.1	ug	RH 1 - LEX	synthetic_RNA	MO	Amit Bahl	biotin	Affymetrix Hybridization Protocol (Penn Microarray Core Facility)	10	ug	RH 1 - Affymetrix Hybridization	TOXO_CHIP	Affymetrix GeneChip Scanner 3000 (GC [...]
+RH 2	whole_organism	MO	RG (Type I)	tachyzoite	nci_meta	wild_type	MO	Toxoplasma gondii RH	ncbitax	Parasite Growth (Roos)	48	hours	RH 2 grown in HFF Cells	cell	MO	Total RNA via RNAqueous-4PCR Kit (Ambion).	RH 2 - RNA	total_RNA	MO	One-Cycle Eukaryotic Target Labeling Assay (Affymetrix)	1	ug	48.7	ug	RH 2 - LEX	synthetic_RNA	MO	Amit Bahl	biotin	Affymetrix Hybridization Protocol (Penn Microarray Core Facility)	10	ug	RH 2 - Affymetrix Hybridization	TOXO_CHIP	Affymetrix GeneChip Scanner 3000 (GC [...]
+RH 3	whole_organism	MO	RG (Type I)	tachyzoite	nci_meta	wild_type	MO	Toxoplasma gondii RH	ncbitax	Parasite Growth (Roos)	48	hours	RH 3 grown in HFF Cells	cell	MO	Total RNA via RNAqueous-4PCR Kit (Ambion).	RH 3 - RNA	total_RNA	MO	One-Cycle Eukaryotic Target Labeling Assay (Affymetrix)	1	ug	45.3	ug	RH 3 - LEX	synthetic_RNA	MO	Amit Bahl	biotin	Affymetrix Hybridization Protocol (Penn Microarray Core Facility)	10	ug	RH 3 - Affymetrix Hybridization	TOXO_CHIP	Affymetrix GeneChip Scanner 3000 (GC [...]
+Pru 1	whole_organism	MO	Pru (Type II)	tachyzoite	nci_meta	wild_type	MO	Toxoplasma gondii	ncbitax	Parasite Growth (Roos)	72	hours	Pru 1 grown in HFF Cells	cell	MO	Total RNA via RNAqueous-4PCR Kit (Ambion).	Pru 1 - RNA	total_RNA	MO	One-Cycle Eukaryotic Target Labeling Assay (Affymetrix)	1	ug	46.5	ug	Pru 1 - LEX	synthetic_RNA	MO	Amit Bahl	biotin	Affymetrix Hybridization Protocol (Penn Microarray Core Facility)	10	ug	Pru 1 - Affymetrix Hybridization	TOXO_CHIP	Affymetrix GeneChip Scanner 3000 [...]
+Pru 2	whole_organism	MO	Pru (Type II)	tachyzoite	nci_meta	wild_type	MO	Toxoplasma gondii	ncbitax	Parasite Growth (Roos)	72	hours	Pru 2 grown in HFF Cells	cell	MO	Total RNA via RNAqueous-4PCR Kit (Ambion).	Pru 2 - RNA	total_RNA	MO	One-Cycle Eukaryotic Target Labeling Assay (Affymetrix)	1	ug	41.2	ug	Pru 2 - LEX	synthetic_RNA	MO	Amit Bahl	biotin	Affymetrix Hybridization Protocol (Penn Microarray Core Facility)	10	ug	Pru 2 - Affymetrix Hybridization	TOXO_CHIP	Affymetrix GeneChip Scanner 3000 [...]
+Pru 3	whole_organism	MO	Pru (Type II)	tachyzoite	nci_meta	wild_type	MO	Toxoplasma gondii	ncbitax	Parasite Growth (Roos)	72	hours	Pru 3 grown in HFF Cells	cell	MO	Total RNA via RNAqueous-4PCR Kit (Ambion).	Pru 3 - RNA	total_RNA	MO	One-Cycle Eukaryotic Target Labeling Assay (Affymetrix)	1	ug	39.2	ug	Pru 3 - LEX	synthetic_RNA	MO	Amit Bahl	biotin	Affymetrix Hybridization Protocol (Penn Microarray Core Facility)	10	ug	Pru 3 - Affymetrix Hybridization	TOXO_CHIP	Affymetrix GeneChip Scanner 3000 [...]
+CTG 1	whole_organism	MO	CTG (Type III)	tachyzoite	nci_meta	wild_type	MO	Toxoplasma gondii type III	ncbitax	Parasite Growth (Roos)	72	hours	CTG 1 grown in HFF Cells	cell	MO	Total RNA via RNAqueous-4PCR Kit (Ambion).	CTG 1 - RNA	total_RNA	MO	One-Cycle Eukaryotic Target Labeling Assay (Affymetrix)	1	ug	40	ug	CTG 1 - LEX	synthetic_RNA	MO	Amit Bahl	biotin	Affymetrix Hybridization Protocol (Penn Microarray Core Facility)	10	ug	CTG 1 - Affymetrix Hybridization	TOXO_CHIP	Affymetrix GeneChip Scan [...]
+CTG 2	whole_organism	MO	CTG (Type III)	tachyzoite	nci_meta	wild_type	MO	Toxoplasma gondii type III	ncbitax	Parasite Growth (Roos)	72	hours	CTG 2 grown in HFF Cells	cell	MO	Total RNA via RNAqueous-4PCR Kit (Ambion).	CTG 2 - RNA	total_RNA	MO	One-Cycle Eukaryotic Target Labeling Assay (Affymetrix)	1	ug	40	ug	CTG 2 - LEX	synthetic_RNA	MO	Amit Bahl	biotin	Affymetrix Hybridization Protocol (Penn Microarray Core Facility)	10	ug	CTG 2 - Affymetrix Hybridization	TOXO_CHIP	Affymetrix GeneChip Scan [...]
diff --git a/lib/perl/RAD/MR_T/MageImport/Util.pm b/lib/perl/RAD/MR_T/MageImport/Util.pm
new file mode 100644
index 0000000..246c833
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/Util.pm
@@ -0,0 +1,160 @@
+package RAD::MR_T::MageImport::Util;
+
+use LWP::Simple;
+
+use Data::Dumper;
+
+require Exporter;
+ at ISA = qw(Exporter);
+ at EXPORT = qw(checkArgument checkArrayArgumentSameType checkArgumentType searchObjArrayByObjName getPubMedXml findAllAssayBioMaterials);
+
+use strict;
+
+use RAD::MR_T::MageImport::MageImportError;
+
+#--------------------------------------------------------------------------------
+
+sub checkArgument {
+  my ($method, $class, @args) = @_;
+
+  unless(@args) {
+    RAD::MR_T::MageImport::MageImportArgumentError->new($class . "::$method: NO ARG PROVIDED")->throw();
+  }
+
+  if(scalar(@args) > 1) {
+    RAD::MR_T::MageImport::MageImportArgumentError->new($class . "::$method: TOO MANY ARGS")->throw();
+  }
+  return($args[0]);
+}
+
+#--------------------------------------------------------------------------------
+
+sub checkArgumentType {
+  my ($method, $class, $expected, $arg) = @_;
+
+  unless(UNIVERSAL::isa($arg, $expected)) {
+    my $error = ref($class) . "::$method";
+    RAD::MR_T::MageImport::MageImportObjectTypeError->new($error, $expected, ref($arg))->throw();
+  }
+  return($arg);
+}
+
+#--------------------------------------------------------------------------------
+
+sub checkArrayArgumentSameType {
+  my ($method, $class, $expected, $arg) = @_;
+
+  unless(UNIVERSAL::isa($arg,'ARRAY')) {
+    RAD::MR_T::MageImport::MageImportObjectTypeError->new($class. "::$method", 'ARRAY', $arg)->throw();
+  }
+  
+  foreach my $val (@{$arg}) {
+    unless(UNIVERSAL::isa($val, $expected)) {
+      my $error = ref($class) . "::$method";
+      RAD::MR_T::MageImport::MageImportObjectTypeError->new($error, $expected, ref($val))->throw();
+    }
+  }
+  return($arg);
+}
+
+#--------------------------------------------------------------------------------
+
+sub searchObjArrayByObjName {
+ my ($objArray, $name) = @_;
+
+ my (@ar, $type);
+
+ foreach my $obj(@$objArray){
+   $type = ref($obj);
+
+   push(@ar, $obj) if($obj->getName eq $name);
+ }
+
+ if(scalar(@ar) > 1) {
+   RAD::MR_T::MageImport::MageImportError->
+        new("Could not find a DISTINCT object with name [$name] of type [$type]")->throw();
+ }
+ if(scalar(@ar) == 0) {
+   RAD::MR_T::MageImport::MageImportError->
+       new("Could not find ANY object with name [$name] of type [$type]")->throw();
+ }
+
+ return $ar[0];
+}
+
+#--------------------------------------------------------------------------------
+
+=item
+
+AURHOR: Oleg Khovayko
+This Util is Based on the eutils example from NCBI
+
+=cut
+
+sub getPubMedXml {
+  my ($query) = @_;
+
+  my $utils = "http://www.ncbi.nlm.nih.gov/entrez/eutils";
+
+  my $db     = "pubmed";
+  my $report = "xml";
+
+  my $esearch = "$utils/esearch.fcgi?db=$db&retmax=1&usehistory=y&term=";
+  my $esearch_result = get($esearch . $query);
+
+  $esearch_result =~ 
+    m|<Count>(\d+)</Count>.*<QueryKey>(\d+)</QueryKey>.*<WebEnv>(\S+)</WebEnv>|s;
+
+  my $Count    = $1;
+  my $QueryKey = $2;
+  my $WebEnv   = $3;
+
+  my $efetch = "$utils/efetch.fcgi?rettype=$report&retmode=text&retmax=1&db=$db&query_key=$QueryKey&WebEnv=$WebEnv";
+	
+  my $efetch_result = get($efetch);
+
+  return($efetch_result);
+}
+
+
+#--------------------------------------------------------------------------------
+
+sub findAllAssayBioMaterials {
+  my ($voAssay, $voTreatments) = @_;
+
+  my %bioMaterials;
+
+    my $recurse; $recurse  = sub {
+      my ($bioMaterial) = @_;
+
+      foreach my $treatment (@$voTreatments) {
+        if($treatment->getOutputBM() == $bioMaterial) {
+          my @inputBioMaterials = map { $_->getBioMaterial() } @{$treatment->getInputBMMs()};
+
+          foreach my $input (@inputBioMaterials) {
+            my $name = $input->getName();
+            $bioMaterials{$name} = $input;
+
+            $recurse->($input);
+          }
+        }
+      }
+    };
+
+  foreach my $lex (@{$voAssay->getLabeledExtracts()}) {
+
+    # Handle the Labeled Extracts ... then recurse through the others
+    my $lexName = $lex->getName();
+    $bioMaterials{$lexName} = $lex;
+
+    $recurse->($lex);
+  }
+
+  my @bioMaterials = map { $bioMaterials{$_} } keys %bioMaterials;
+
+  return \@bioMaterials;
+}
+
+
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/VO/AcquisitionVO.pm b/lib/perl/RAD/MR_T/MageImport/VO/AcquisitionVO.pm
new file mode 100644
index 0000000..3fb8e67
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/VO/AcquisitionVO.pm
@@ -0,0 +1,139 @@
+package RAD::MR_T::MageImport::VO::AcquisitionVO;
+
+#################################################
+# $Revision: 8341 $ $Date: 2005-10-07 13:42:38 -0400 (Fri, 07 Oct 2005) $ $Author: junmin $
+#################################################
+
+use strict;
+
+use RAD::MR_T::MageImport::VO::QuantificationVO;
+use RAD::MR_T::MageImport::Util qw(checkArgument checkArrayArgumentSameType checkArgumentType);
+
+
+sub new {
+  my ($class, $arg) = @_;
+
+  my $self = bless {
+	 _name => $arg->{name},
+	 _uri => $arg->{uri},
+         _protocolName => $arg->{protocolName},
+	 _factorValues => $arg->{factorValues},
+         _parameterValues => [],
+#	 _factor => $arg->{factor},
+	}, $class;
+
+
+  if(my $quantifications = $arg->{quantifications}) {
+    $self->setQuantifications($quantifications);
+  }
+
+  if(my $channels = $arg->{channels}) {
+    $self->setChannels($channels);
+  }
+
+  if(my $parameterValues = $arg->{parameterValues}) {
+    $self->setParameterValues($parameterValues);
+  }
+
+  return($self);
+}
+
+sub getFactorValues  {$_[0]->{_factorValues}}
+sub setFactorValues  {$_[0]->{_factorValues} = $_[1]}
+sub addFactorValues {
+  my $self = shift;
+
+  my $expected = "RAD::MR_T::MageImport::VO::FactorValueVO";
+  my $methodName = "addFactorValuess";
+
+  &checkArrayArgumentSameType($methodName, $self, $expected, \@_);  
+
+  push(@{$self->{_factorValues}}, @_);
+}
+
+
+sub getFactor  {$_[0]->{_factor}}
+sub setFactor  {$_[0]->{_factor} = $_[1]}
+
+sub getName  {$_[0]->{_name}}
+sub setName  {$_[0]->{_name} = $_[1]}
+
+sub getProtocolName  {$_[0]->{_protocolName}}
+sub setProtocolName  {$_[0]->{_protocolName} = $_[1]}
+
+sub getUri  {$_[0]->{_uri}}
+sub setUri  {$_[0]->{_uri} = $_[1]}
+
+sub getChannels  {$_[0]->{_channels}}
+sub setChannels  {
+  my ($self, $channels) = @_;
+
+  my $expected = "RAD::MR_T::MageImport::VO::OntologyEntryVO";
+  my $methodName = 'setChannels';
+
+  &checkArgument($methodName, @_);
+  &checkArrayArgumentSameType($methodName, $self, $expected, $channels);
+
+  return $self->{_channels} = $channels;
+}
+sub addChannels {
+  my $self = shift;
+
+  my $expected = "RAD::MR_T::MageImport::VO::OntologyEntryVO";
+  my $methodName = "addChannelss";
+
+  &checkArrayArgumentSameType($methodName, $self, $expected, \@_);  
+
+  push(@{$self->{_channels}}, @_);
+}
+
+sub getQuantifications  {$_[0]->{_quantifications}}
+sub setQuantifications  {
+  my ($self, $quantifications) = @_;
+
+  my $expected = "RAD::MR_T::MageImport::VO::QuantificationVO";
+  my $methodName = "setQuantifications";
+
+  &checkArgument($methodName, @_);
+  &checkArrayArgumentSameType($methodName, $self, $expected, $quantifications);
+
+  return $self->{_quantifications} = $quantifications;
+}
+
+sub addQuantifications {
+  my $self = shift;
+
+  my $expected = "RAD::MR_T::MageImport::VO::QuantificationVO";
+  my $methodName = "addQuantifications";
+
+  &checkArrayArgumentSameType($methodName, $self, $expected, \@_);  
+
+  push(@{$self->{_quantifications}}, @_);
+}
+
+sub getParameterValues  {$_[0]->{_parameterValues}}
+sub setParameterValues  {
+  my ($self, $parameterValues) = @_;
+
+  my $expected =  "RAD::MR_T::MageImport::VO::ParameterValueVO";
+  my $methodName = 'setParameterValues';
+
+  &checkArgument($methodName, @_);
+  &checkArrayArgumentSameType($methodName, $self, $expected, $parameterValues);
+
+  return $self->{_parameterValues} = $parameterValues;
+}
+
+sub addParameterValues {
+  my $self = shift;
+
+  my $expected = 'RAD::MR_T::MageImport::VO::ParameterValueVO';
+  my $methodName = 'addParameterValues';
+
+  &checkArrayArgumentSameType($methodName, $self, $expected, \@_);
+
+  push(@{$self->{_parameterValues}}, @_);
+}
+
+1;
+
diff --git a/lib/perl/RAD/MR_T/MageImport/VO/AffiliationVO.pm b/lib/perl/RAD/MR_T/MageImport/VO/AffiliationVO.pm
new file mode 100644
index 0000000..cc3b778
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/VO/AffiliationVO.pm
@@ -0,0 +1,18 @@
+package RAD::MR_T::MageImport::VO::AffiliationVO;
+
+#################################################
+# $Revision: 8341 $ $Date: 2005-10-07 13:42:38 -0400 (Fri, 07 Oct 2005) $ $Author: junmin $
+#################################################
+
+use strict 'vars';
+use Carp;
+
+use RAD::MR_T::MageImport::VO::ContactVO;
+
+use vars qw / @ISA / ;
+ at ISA = qw / RAD::MR_T::MageImport::VO::ContactVO /;
+
+1;
+
+
+
diff --git a/lib/perl/RAD/MR_T/MageImport/VO/AssayVO.pm b/lib/perl/RAD/MR_T/MageImport/VO/AssayVO.pm
new file mode 100644
index 0000000..2d35f60
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/VO/AssayVO.pm
@@ -0,0 +1,158 @@
+package RAD::MR_T::MageImport::VO::AssayVO;
+
+#################################################
+# $Revision: 8341 $ $Date: 2005-10-07 13:42:38 -0400 (Fri, 07 Oct 2005) $ $Author: junmin $
+#################################################
+
+use strict;
+
+use RAD::MR_T::MageImport::Util qw(checkArgument checkArrayArgumentSameType checkArgumentType);
+use RAD::MR_T::MageImport::MageImportError;
+use RAD::MR_T::MageImport::VO::AcquisitionVO;
+
+sub new {
+  my ($class, $arg) =@_;
+
+  my $self = bless {
+	 _name => $arg->{name},
+	 _arraySourceId => $arg->{arraySourceId},
+	 _protocolName => $arg->{protocolName},
+	 _studyName => $arg->{studyName},
+         _parameterValues => [],
+	}, $class;
+
+  if(my $operator = $arg->{operator}) {
+    $self->setOperator($operator);
+  }
+
+  if(my $lex = $arg->{labeledExtracts}) {
+    $self->setLabeledExtracts($lex);
+  }
+
+  if(my $acquisitions = $arg->{acquisitions}) {
+    $self->setAcquisitions($acquisitions);
+  }
+
+  if(my $parameterValues = $arg->{parameterValues}) {
+    $self->setParameterValues($parameterValues);
+  }
+
+  return($self);
+}
+
+
+sub getName  {$_[0]->{_name}}
+sub setName  {$_[0]->{_name} = $_[1]}
+
+sub getProtocolName  {$_[0]->{_protocolName}}
+sub setProtocolName  {$_[0]->{_protocolName} = $_[1]}
+
+sub getArraySourceId  {$_[0]->{_arraySourceId}}
+sub setArraySourceId  {$_[0]->{_arraySourceId} = $_[1]}
+
+#sub getOperator  {$_[0]->{_operator}}
+#sub setOperator  {$_[0]->{_operator} = $_[1]}
+
+sub getStudyName  {$_[0]->{_studyName}}
+sub setStudyName  {$_[0]->{_studyName} = $_[1]}
+
+sub getOperator {$_[0]->{_operator}}
+sub setOperator {
+  my ($self, $operator) = @_;
+
+  my $expected = 'RAD::MR_T::MageImport::VO::PersonVO';
+  my $methodName = 'setOperator';
+
+  &checkArgument($methodName, @_);
+  &checkArgumentType($methodName, $self, $expected, $operator);
+
+  return $self->{_operator} = $operator;
+
+}
+
+sub getAcquisitions  {$_[0]->{_acquisitions}}
+sub setAcquisitions  {
+  my ($self, $acquisitions) = @_;
+
+  my $expected =  "RAD::MR_T::MageImport::VO::AcquisitionVO";
+  my $methodName = 'setAcquisitions';
+
+  &checkArgument($methodName, @_);
+  &checkArrayArgumentSameType($methodName, $self, $expected, $acquisitions);
+
+  return $self->{_acquisitions} = $acquisitions;
+}
+
+sub addAcquisitions {
+  my $self = shift;
+
+  my $expected =  "RAD::MR_T::MageImport::VO::AcquisitionVO";
+  my $methodName = 'addAcquisitions';
+
+  &checkArrayArgumentSameType($methodName, $self, $expected, \@_);
+
+  push(@{$self->{_acquisitions}}, @_);
+}
+
+sub getParameterValues  {$_[0]->{_parameterValues}}
+sub setParameterValues  {
+  my ($self, $parameterValues) = @_;
+
+  my $expected =  "RAD::MR_T::MageImport::VO::ParameterValueVO";
+  my $methodName = 'setParameterValues';
+
+  &checkArgument($methodName, @_);
+  &checkArrayArgumentSameType($methodName, $self, $expected, $parameterValues);
+
+  return $self->{_parameterValues} = $parameterValues;
+}
+
+sub addParameterValues {
+  my $self = shift;
+
+  my $expected = 'RAD::MR_T::MageImport::VO::ParameterValueVO';
+  my $methodName = 'addParameterValues';
+
+  &checkArrayArgumentSameType($methodName, $self, $expected, \@_);
+
+  push(@{$self->{_parameterValues}}, @_);
+}
+
+sub getLabeledExtracts {$_[0]->{_labeledExtracts}}
+sub setLabeledExtracts {
+  my ($self, $lexs) = @_;
+
+  my $expected = 'RAD::MR_T::MageImport::VO::BioMaterialVO';
+  my $methodName = 'setLabeledExtracts';
+
+  &checkArgument($methodName, @_);
+  &checkArrayArgumentSameType($methodName, $self, $expected, $lexs);
+
+  foreach my $lex (@$lexs){
+    my $subclassView = $lex->getSubclassView();
+    unless($subclassView eq 'LabeledExtract') {
+      RAD::MR_T::MageImport::VOException::ObjectTypeError->new("BioMaterial Associated With an Assay must be [LabeledExtract] found:  $subclassView")->throw();
+    }
+  }
+
+  return $self->{_labeledExtracts} = $lexs;
+
+}
+sub addLabeledExtracts {
+  my $self = shift;
+
+  my $expected =  "RAD::MR_T::MageImport::VO::BioMaterialVO";
+  my $methodName = 'addLabeledExtracts';
+
+  &checkArrayArgumentSameType($methodName, $self, $expected, \@_);
+
+  foreach my $lex (@_){
+    my $subclassView = $lex->getSubclassView();
+    unless($subclassView eq 'LabeledExtract') {
+      RAD::MR_T::MageImport::VOException::ObjectTypeError->new("BioMaterial Associated With an Assay must be [LabeledExtract] found:  $subclassView")->throw();
+    }
+  }
+  push(@{$self->{_labeledExtracts}}, @_);
+}
+1;
+
diff --git a/lib/perl/RAD/MR_T/MageImport/VO/BioMaterialMeasurementVO.pm b/lib/perl/RAD/MR_T/MageImport/VO/BioMaterialMeasurementVO.pm
new file mode 100644
index 0000000..9359f9e
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/VO/BioMaterialMeasurementVO.pm
@@ -0,0 +1,51 @@
+package RAD::MR_T::MageImport::VO::BioMaterialMeasurementVO;
+
+#################################################
+# $Revision: 8341 $ $Date: 2005-10-07 13:42:38 -0400 (Fri, 07 Oct 2005) $ $Author: junmin $
+#################################################
+
+use strict;
+use Carp;
+use RAD::MR_T::MageImport::VO::VOBase;
+
+use vars qw / @ISA / ;
+ at ISA = qw / RAD::MR_T::MageImport::VO::VOBase /;
+
+#use vars qw( $AUTOLOAD );
+
+{
+# Encapsulated class data
+  my %_attr_data = # DEFAULT           Type
+    (
+     _value          => [undef,        ""],
+     _bioMaterial    => [undef,        'RAD::MR_T::MageImport::VO::BioMaterialVO'],
+     _unitType       => [undef,        'RAD::MR_T::MageImport::VO::OntologyEntryVO'],
+
+    );
+
+# private class methods, to operate on encapsulated class data
+
+  sub _default_for {
+    my ($self, $attr) = @_;
+    $_attr_data{$attr}[0];
+  }
+
+  sub _type_for {
+    my ($self, $attr) = @_;
+    $_attr_data{$attr}[1];
+  }
+
+  sub _standard_keys{
+    keys %_attr_data;
+  }
+
+ sub _exist_for {
+    my ($self, $inattr) = @_;
+
+    return 1 if exists $_attr_data{ $inattr };
+    return 0;
+  }
+}
+
+1;
+
diff --git a/lib/perl/RAD/MR_T/MageImport/VO/BioMaterialVO.pm b/lib/perl/RAD/MR_T/MageImport/VO/BioMaterialVO.pm
new file mode 100644
index 0000000..274023a
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/VO/BioMaterialVO.pm
@@ -0,0 +1,83 @@
+package RAD::MR_T::MageImport::VO::BioMaterialVO;
+
+#################################################
+# $Revision: 8341 $ $Date: 2005-10-07 13:42:38 -0400 (Fri, 07 Oct 2005) $ $Author: junmin $
+#################################################
+
+use strict;
+use Carp;
+use RAD::MR_T::MageImport::VO::VOBase;
+
+use RAD::MR_T::MageImport::Util qw(checkArgument checkArrayArgumentSameType checkArgumentType);
+
+use vars qw / @ISA / ;
+ at ISA = qw / RAD::MR_T::MageImport::VO::VOBase /;
+
+
+=head1 BioMaterialVO
+
+=over
+
+=item attribute hash
+
+Description: convert C<$mage> material objects to vo objects and add them into C<$doc> 
+
+To-dos: need type check for setBioMaterialChars
+
+=cut
+
+{
+# Encapsulated class data
+  my %_attr_data = # DEFAULT           Type
+    (
+     _name             => [undef,        ""],
+     _description      => [undef,        ""],
+     _subclassView     => [undef,        ""],
+     #_labelMethod      => [undef,        'RAD::MR_T::MageImport::VO::ProtocolVO'],
+     _channel          => [undef,        'RAD::MR_T::MageImport::VO::OntologyEntryVO'],
+     _bioMaterialType  => [undef,        'RAD::MR_T::MageImport::VO::OntologyEntryVO'],
+     _bioMaterialChars => [undef,        ""],
+     #_externalDatabase => [undef,        'RAD::MR_T::MageImport::VO::ExternalDatabaseVO'],
+     #_sourceId         => [undef,        ""],
+     _provider         => [undef,        'RAD::MR_T::MageImport::VO::ContactVO'],    
+    );
+
+
+# private class methods, to operate on encapsulated class data
+
+  sub _default_for {
+    my ($self, $attr) = @_;
+    $_attr_data{$attr}[0];
+  }
+
+  sub _type_for {
+    my ($self, $attr) = @_;
+    $_attr_data{$attr}[1];
+  }
+
+  sub _standard_keys{
+    keys %_attr_data;
+  }
+
+  sub _exist_for {
+    my ($self, $inattr) = @_;
+
+    return 1 if exists $_attr_data{ $inattr };
+    return 0;
+  }
+}
+
+
+sub addBioMaterialChars {
+  my $self = shift;
+
+  my $expected = 'RAD::MR_T::MageImport::VO::OntologyEntryVO';
+  my $methodName = 'addBioMaterialChars';
+
+  &checkArrayArgumentSameType($methodName, $self, $expected, \@_);
+
+  push(@{$self->{_bioMaterialChars}}, @_);
+}
+
+1;
+
diff --git a/lib/perl/RAD/MR_T/MageImport/VO/ContactVO.pm b/lib/perl/RAD/MR_T/MageImport/VO/ContactVO.pm
new file mode 100644
index 0000000..8c7aad8
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/VO/ContactVO.pm
@@ -0,0 +1,50 @@
+package RAD::MR_T::MageImport::VO::ContactVO;
+
+#################################################
+# $Revision: 8341 $ $Date: 2005-10-07 13:42:38 -0400 (Fri, 07 Oct 2005) $ $Author: junmin $
+#################################################
+
+use strict 'vars';
+use Carp;
+
+
+sub new {
+  my $class = shift;
+  croak "try to instantiate an abstract class ContactVO" if ref($class) eq 'ContactVO';
+  my $arg = shift;
+  bless {
+	 _name => $arg->{name},
+	 _first => $arg->{first},
+	 _last => $arg->{last},
+	 _address => $arg->{address},
+	 _email => $arg->{email},
+         _role => $arg->{role},
+         _phone => $arg->{phone},
+	}, $class;
+}
+
+sub getName  {$_[0]->{_name}}
+sub setName  {$_[0]->{_name} = $_[1]}
+
+sub getFirst  {$_[0]->{_first}}
+sub setFirst  {$_[0]->{_first} = $_[1]}
+
+sub getLast  {$_[0]->{_last}}
+sub setLast  {$_[0]->{_last} = $_[1]}
+
+sub getAddress  {$_[0]->{_address}}
+sub setAddress {$_[0]->{_address} = $_[1]}
+
+sub getEmail  {$_[0]->{_email}}
+sub setEmail {$_[0]->{_email} = $_[1]}
+
+sub getRole  {$_[0]->{_role}}
+sub setRole {$_[0]->{_role} = $_[1]}
+
+sub getPhone  {$_[0]->{_phone}}
+sub setPhone {$_[0]->{_phone} = $_[1]}
+
+1;
+
+
+
diff --git a/lib/perl/RAD/MR_T/MageImport/VO/DocRoot.pm b/lib/perl/RAD/MR_T/MageImport/VO/DocRoot.pm
new file mode 100644
index 0000000..dc9a380
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/VO/DocRoot.pm
@@ -0,0 +1,224 @@
+package RAD::MR_T::MageImport::VO::DocRoot;
+
+################################################
+# $Revision: 8341 $ $Date: 2005-10-07 13:42:38 -0400 (Fri, 07 Oct 2005) $ $Author: junmin $
+#################################################
+
+use strict;
+use Carp;
+
+# TODO AUTO USE/REQUIRE
+use RAD::MR_T::MageImport::VO::StudyVO;
+use RAD::MR_T::MageImport::VO::AssayVO;
+use RAD::MR_T::MageImport::VO::AcquisitionVO;
+use RAD::MR_T::MageImport::VO::QuantificationVO;
+use RAD::MR_T::MageImport::VO::PersonVO;
+use RAD::MR_T::MageImport::VO::ProtocolVO;
+use RAD::MR_T::MageImport::VO::ProtocolParamVO;
+use RAD::MR_T::MageImport::VO::AffiliationVO;
+use RAD::MR_T::MageImport::VO::ExternalDatabaseVO;
+use RAD::MR_T::MageImport::VO::BioMaterialVO;
+use RAD::MR_T::MageImport::VO::BioMaterialMeasurementVO;
+use RAD::MR_T::MageImport::VO::TreatmentVO;
+use RAD::MR_T::MageImport::VO::OntologyEntryVO;
+use RAD::MR_T::MageImport::VO::ContactVO;
+use RAD::MR_T::MageImport::VO::FactorValueVO;
+use RAD::MR_T::MageImport::VO::ParameterValueVO;
+use RAD::MR_T::MageImport::VO::ProcessVO;
+
+use RAD::MR_T::MageImport::Util qw(checkArgument checkArrayArgumentSameType checkArgumentType);
+
+
+sub new {
+  my $class = shift;
+  my $arg = shift;
+  bless {
+	 _studyVO => $arg->{studyVO},
+	 _assayVOs => $arg->{assayVOs},
+	 _personVOs => $arg->{personVOs},
+	 _affiliationVOs => $arg->{affiliationVOs},
+	 _externalDatabaseVOs => $arg->{externalDatabaseVOs},
+	 _protocolVOs => $arg->{protocolVOs},
+	 _bioMaterialVOs => $arg->{bioMaterialVOs},
+	 _treatmentVOs => $arg->{treatmentVOs},
+	}, $class;
+}
+
+sub getStudyVO  {my $self = shift; return $self->studyVO();}
+sub setStudyVO  {my $self = shift; $self->{_studyVO} = shift;}
+sub studyVO {
+  my $self = shift;
+  if (@_) {
+    $self->{_studyVO} = shift;
+  }
+  return $self->{_studyVO};
+}
+
+sub getProtocolVOs { $_[0]->{_protocolVOs}}
+
+sub addProtocolVOs {
+  my $self = shift;
+
+  my $expected =  "RAD::MR_T::MageImport::VO::ProtocolVO";
+  my $methodName = 'addProtocolsVOs';
+
+  &checkArrayArgumentSameType($methodName, $self, $expected, \@_);
+
+  push(@{$self->{_protocolVOs}}, @_);
+}
+
+sub protocolVOs {
+  my $self = shift;
+  if (@_) {
+    $self->{_protocolVOs} = shift;
+  }
+  return $self->{_protocolVOs};
+}
+
+sub getAssayVOs { $_[0]->{_assayVOs}}
+
+sub addAssayVOs {
+  my $self = shift;
+
+  my $expected =  "RAD::MR_T::MageImport::VO::AssayVO";
+  my $methodName = 'addAssaysVOs';
+
+  &checkArrayArgumentSameType($methodName, $self, $expected, \@_);
+
+  push(@{$self->{_assayVOs}}, @_);
+}
+
+sub assayVOs {
+  my $self = shift;
+  if (@_) {
+    $self->{_assayVOs} = shift;
+  }
+  return $self->{_assayVOs};
+}
+
+
+sub getBioMaterialVOs {$_[0]->{_bioMaterialVOs}}
+
+sub addBioMaterialVOs {
+  my $self = shift;
+
+  my $expected = "RAD::MR_T::MageImport::VO::BioMaterialVO";
+  my $methodName = 'addBioMaterials';
+
+  &checkArrayArgumentSameType($methodName, $self, $expected, \@_);
+
+  push(@{$self->{_bioMaterialVOs}}, @_);
+}
+
+sub bioMaterialVOs {
+  my $self = shift;
+  if (@_) {
+    $self->{_bioMaterialVOs} = shift;
+  }
+  return $self->{_bioMaterialVOs};
+}
+
+sub getTreatmentVOs {
+  my $self = shift;
+  return $self->treatmentVOs();
+}
+
+sub addTreatmentVOs {
+  my $self = shift;
+
+  my $expected = 'RAD::MR_T::MageImport::VO::TreatmentVO';
+  my $methodName = 'addTreatmentVOs';
+
+  &checkArrayArgumentSameType($methodName, $self, $expected, \@_);
+
+  push(@{$self->{_treatmentVOs}}, @_);
+}
+
+sub treatmentVOs {
+  my $self = shift;
+  if (@_) {
+    $self->{_treatmentVOs} = shift;
+  }
+  return $self->{_treatmentVOs};
+}
+
+sub getPersonVOs {
+  my $self = shift;
+  return $self->personVOs();
+}
+
+sub addPersonVOs {
+  my $self = shift;
+
+  my $expected = 'RAD::MR_T::MageImport::VO::PersonVO';
+  my $methodName = 'addPersonVOs';
+
+  &checkArrayArgumentSameType($methodName, $self, $expected, \@_);
+
+  push(@{$self->{_personVOs}}, @_);
+}
+
+sub personVOs {
+  my $self = shift;
+  if (@_) {
+    $self->{_personVOs} = shift;
+  }
+  return $self->{_personVOs};
+}
+
+sub getAffiliationVOs {
+  my $self = shift;
+  return $self->affiliationVOs();
+}
+
+sub addAffiliationVOs {
+  my $self = shift;
+
+  my $expected = 'RAD::MR_T::MageImport::VO::AffiliationVO';
+  my $methodName = 'addAffiliations';
+
+  &checkArrayArgumentSameType($methodName, $self, $expected, \@_);
+
+  push(@{$self->{_affiliationVOs}}, @_);
+}
+
+sub affiliationVOs {
+  my $self = shift;
+  if (@_) {
+    $self->{_affiliationVOs} = shift;
+  }
+  return $self->{_affiliationVOs};
+}
+
+sub getExternalDatabaseVOs {
+  my $self = shift;
+  return $self->externalDatabaseVOs();
+}
+sub addExternalDatabaseVOs {
+  my $self = shift;
+
+  my $expected = 'RAD::MR_T::MageImport::VO::ExternalDatabaseVO';
+  my $methodName = 'addExternalDatabaseVOs';
+
+  &checkArrayArgumentSameType($methodName, $self, $expected, \@_);
+
+  push(@{$self->{_externalDatabaseVOs}}, @_);
+}
+
+sub externalDatabaseVOs {
+  my $self = shift;
+  if (@_) {
+    $self->{_externalDatabaseVOs} = shift;
+  }
+  return $self->{_externalDatabaseVOs};
+}
+
+
+
+1;
+
+
+
+
+
+
diff --git a/lib/perl/RAD/MR_T/MageImport/VO/ExternalDatabaseVO.pm b/lib/perl/RAD/MR_T/MageImport/VO/ExternalDatabaseVO.pm
new file mode 100644
index 0000000..89da310
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/VO/ExternalDatabaseVO.pm
@@ -0,0 +1,50 @@
+package RAD::MR_T::MageImport::VO::ExternalDatabaseVO;
+
+#################################################
+# $Revision: 8341 $ $Date: 2005-10-07 13:42:38 -0400 (Fri, 07 Oct 2005) $ $Author: junmin $
+#################################################
+
+use strict;
+use Carp;
+use RAD::MR_T::MageImport::VO::VOBase;
+
+use vars qw / @ISA / ;
+ at ISA = qw / RAD::MR_T::MageImport::VO::VOBase /;
+
+#use vars qw( $AUTOLOAD );
+
+{
+# Encapsulated class data
+  my %_attr_data = # DEFAULT           Type
+    (
+     _version        => ['unknown',    ""],
+     _name           => [undef,        ""],
+     _uri            => [undef,        ""],
+    );
+
+# private class methods, to operate on encapsulated class data
+
+  sub _default_for {
+    my ($self, $attr) = @_;
+    $_attr_data{$attr}[0];
+  }
+
+  sub _type_for {
+    my ($self, $attr) = @_;
+    $_attr_data{$attr}[1];
+  }
+
+  sub _standard_keys{
+    keys %_attr_data;
+  }
+
+ sub _exist_for {
+    my ($self, $inattr) = @_;
+
+    return 1 if exists $_attr_data{ $inattr };
+    return 0;
+  }
+}
+
+1;
+
diff --git a/lib/perl/RAD/MR_T/MageImport/VO/FactorValueVO.pm b/lib/perl/RAD/MR_T/MageImport/VO/FactorValueVO.pm
new file mode 100644
index 0000000..d96bdcb
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/VO/FactorValueVO.pm
@@ -0,0 +1,51 @@
+package RAD::MR_T::MageImport::VO::FactorValueVO;
+
+#################################################
+# $Revision: 8341 $ $Date: 2005-10-07 13:42:38 -0400 (Fri, 07 Oct 2005) $ $Author: junmin $
+#################################################
+
+use strict;
+use Carp;
+use RAD::MR_T::MageImport::VO::VOBase;
+
+use vars qw / @ISA / ;
+ at ISA = qw / RAD::MR_T::MageImport::VO::VOBase /;
+
+#use vars qw( $AUTOLOAD );
+#only deal with OE factor value for now
+
+{
+# Encapsulated class data
+  my %_attr_data = # DEFAULT           Type
+    (
+     _factorName  => [undef,        ""],
+     _value       => [undef,        'RAD::MR_T::MageImport::VO::OntologyEntryVO'],
+
+    );
+
+# private class methods, to operate on encapsulated class data
+
+  sub _default_for {
+    my ($self, $attr) = @_;
+    $_attr_data{$attr}[0];
+  }
+
+  sub _type_for {
+    my ($self, $attr) = @_;
+    $_attr_data{$attr}[1];
+  }
+
+  sub _standard_keys{
+    keys %_attr_data;
+  }
+
+ sub _exist_for {
+    my ($self, $inattr) = @_;
+
+    return 1 if exists $_attr_data{ $inattr };
+    return 0;
+  }
+}
+
+1;
+
diff --git a/lib/perl/RAD/MR_T/MageImport/VO/OntologyEntryVO.pm b/lib/perl/RAD/MR_T/MageImport/VO/OntologyEntryVO.pm
new file mode 100644
index 0000000..6a94adf
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/VO/OntologyEntryVO.pm
@@ -0,0 +1,51 @@
+package RAD::MR_T::MageImport::VO::OntologyEntryVO;
+
+use RAD::MR_T::MageImport::Util qw(checkArgumentType checkArgument);
+
+#################################################
+# $Revision: 8341 $ $Date: 2005-10-07 13:42:38 -0400 (Fri, 07 Oct 2005) $ $Author: junmin $
+#################################################
+
+use strict 'vars';
+use Carp;
+
+sub new {
+  my $class = shift;
+  my $arg = shift;
+  my $self = bless {
+                    _value => $arg->{value},
+                    _category => $arg->{category},
+                    #	 _parentName => $arg->{parentName}
+                   }, $class;
+
+  if(my $extDb = $arg->{externalDatabase}) {
+    $self->setExternalDatabase($extDb);
+  }
+  return $self;
+}
+
+ 
+sub getValue  {$_[0]->{_value}}
+sub setValue  {$_[0]->{_value} = $_[1]}
+
+sub getCategory  {$_[0]->{_category}}
+sub setCategory  {$_[0]->{_category} = $_[1]}
+
+sub setExternalDatabase {
+  my ($self, $extDb) = @_;
+
+  my $expected = 'RAD::MR_T::MageImport::VO::ExternalDatabaseVO';
+  my $methodName = 'setExternalDatabase';
+
+  &checkArgument($methodName, @_);
+  &checkArgumentType($methodName, $self, $expected, $extDb);
+
+  return $self->{_externalDatabase} = $extDb;
+}
+
+sub getExternalDatabase {$_[0]->{_externalDatabase}}
+
+#sub getParentName  {$_[0]->{_parentName}}
+#sub setParentName  {$_[0]->{_parentName} = $_[1]}
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/VO/ParameterValueVO.pm b/lib/perl/RAD/MR_T/MageImport/VO/ParameterValueVO.pm
new file mode 100644
index 0000000..e13f5e0
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/VO/ParameterValueVO.pm
@@ -0,0 +1,51 @@
+package RAD::MR_T::MageImport::VO::ParameterValueVO;
+
+#################################################
+# $Revision: 8341 $ $Date: 2005-10-07 13:42:38 -0400 (Fri, 07 Oct 2005) $ $Author: junmin $
+#################################################
+
+use strict;
+use Carp;
+use RAD::MR_T::MageImport::VO::VOBase;
+use RAD::MR_T::MageImport::Util qw(checkArgument checkArrayArgumentSameType checkArgumentType);
+
+use vars qw / @ISA / ;
+ at ISA = qw / RAD::MR_T::MageImport::VO::VOBase /;
+
+#use vars qw( $AUTOLOAD );
+  
+{
+# Encapsulated class data
+  my %_attr_data = # DEFAULT           Type
+    (
+     _value          => [undef,            ""],
+     _parameterName  => [undef,            ""],
+    );
+
+# private class methods, to operate on encapsulated class data
+
+  sub _default_for {
+    my ($self, $attr) = @_;
+    $_attr_data{$attr}[0];
+  }
+
+  sub _type_for {
+    my ($self, $attr) = @_;
+    $_attr_data{$attr}[1];
+  }
+
+  sub _standard_keys{
+    keys %_attr_data;
+  }
+
+  sub _exist_for {
+    my ($self, $inattr) = @_;
+ 
+    return 1 if exists $_attr_data{ $inattr };
+    return 0;
+  }
+
+}
+
+1;
+
diff --git a/lib/perl/RAD/MR_T/MageImport/VO/PersonVO.pm b/lib/perl/RAD/MR_T/MageImport/VO/PersonVO.pm
new file mode 100644
index 0000000..8b79cce
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/VO/PersonVO.pm
@@ -0,0 +1,42 @@
+package RAD::MR_T::MageImport::VO::PersonVO;
+
+#################################################
+# $Revision: 8341 $ $Date: 2005-10-07 13:42:38 -0400 (Fri, 07 Oct 2005) $ $Author: junmin $
+#################################################
+
+use strict 'vars';
+use Carp;
+
+use RAD::MR_T::MageImport::VO::ContactVO;
+use RAD::MR_T::MageImport::VO::AffiliationVO;
+
+use RAD::MR_T::MageImport::Util qw(checkArgument checkArrayArgumentSameType checkArgumentType);
+
+use vars qw / @ISA / ;
+ at ISA = qw / RAD::MR_T::MageImport::VO::ContactVO /;
+
+sub new {
+  my $class = shift;
+  my $arg = shift;
+  my $obj = $class->SUPER::new($arg);
+  
+  if(my $affiliation = $arg->{affiliation}) {
+    $obj->setAffiliation($affiliation);
+  }
+  return $obj;
+}
+
+sub getAffiliation  {$_[0]->{_affiliation}}
+sub setAffiliation  {
+  my ($self, $affiliation) = @_;
+
+  my $methodName = 'setAffiliation';
+  my $expected = 'RAD::MR_T::MageImport::VO::AffiliationVO';
+
+  &checkArgument($methodName, @_);
+  &checkArgumentType($methodName, $self, $expected, $affiliation);
+
+  return $self->{_affiliation} = $affiliation;
+}
+
+1;
diff --git a/lib/perl/RAD/MR_T/MageImport/VO/ProcessVO.pm b/lib/perl/RAD/MR_T/MageImport/VO/ProcessVO.pm
new file mode 100644
index 0000000..d7d3e65
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/VO/ProcessVO.pm
@@ -0,0 +1,95 @@
+package RAD::MR_T::MageImport::VO::ProcessVO;
+
+#################################################
+# $Revision: 8341 $ $Date: 2005-10-07 13:42:38 -0400 (Fri, 07 Oct 2005) $ $Author: junmin $
+#################################################
+
+use strict;
+use Carp;
+
+use RAD::MR_T::MageImport::Util qw(checkArgument checkArrayArgumentSameType checkArgumentType);
+
+sub new {
+  my $class = shift;
+  my $arg = shift;
+
+  my $self = bless {
+                    _name => $arg->{name},
+                    _uri => $arg->{uri},
+                    _protocolName => $arg->{protocolName},
+                    _parameterValues => [],
+                   }, $class;
+
+  if(my $targets = $arg->{targets}) {
+    $self->setTargets($targets);
+  }
+
+  if(my $parameterValues = $arg->{parameterValues}) {
+    $self->setParameterValues($parameterValues);
+  }
+
+  return $self;
+}
+
+
+sub getName  {$_[0]->{_name}}
+sub setName  {$_[0]->{_name} = $_[1]}
+
+sub getUri  {$_[0]->{_uri}}
+sub setUri  {$_[0]->{_uri} = $_[1]}
+
+sub getProtocolName  {$_[0]->{_protocolName}}
+sub setProtocolName  {$_[0]->{_protocolName} = $_[1]}
+
+sub getProcesses { $_[0]->getTargets() }
+
+sub getTargets  {$_[0]->{_targets}}
+sub setTargets  {
+  my ($self, $targets) = @_;
+
+  my $expected = "RAD::MR_T::MageImport::VO::ProcessVO";
+  my $methodName = "setTargets";
+
+  &checkArgument($methodName, @_);
+  &checkArrayArgumentSameType($methodName, $self, $expected, $targets);
+
+  return $self->{_targets} = $targets;
+}
+
+sub addTargets {
+  my $self = shift;
+
+  my $expected = "RAD::MR_T::MageImport::VO::ProcessVO";
+  my $methodName = "addTargets";
+
+  &checkArrayArgumentSameType($methodName, $self, $expected, \@_);  
+
+  push(@{$self->{_targets}}, @_);
+}
+
+sub getParameterValues  {$_[0]->{_parameterValues}}
+sub setParameterValues  {
+  my ($self, $parameterValues) = @_;
+
+  my $expected =  "RAD::MR_T::MageImport::VO::ParameterValueVO";
+  my $methodName = 'setParameterValues';
+
+  &checkArgument($methodName, @_);
+  &checkArrayArgumentSameType($methodName, $self, $expected, $parameterValues);
+
+  return $self->{_parameterValues} = $parameterValues;
+}
+
+sub addParameterValues {
+  my $self = shift;
+
+  my $expected = 'RAD::MR_T::MageImport::VO::ParameterValueVO';
+  my $methodName = 'addParameterValues';
+
+  &checkArrayArgumentSameType($methodName, $self, $expected, \@_);
+
+  push(@{$self->{_parameterValues}}, @_);
+}
+
+1;
+
diff --git a/lib/perl/RAD/MR_T/MageImport/VO/ProtocolParamVO.pm b/lib/perl/RAD/MR_T/MageImport/VO/ProtocolParamVO.pm
new file mode 100644
index 0000000..beb60a4
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/VO/ProtocolParamVO.pm
@@ -0,0 +1,68 @@
+package RAD::MR_T::MageImport::VO::ProtocolParamVO;
+
+#################################################
+# $Revision: 8341 $ $Date: 2005-10-07 13:42:38 -0400 (Fri, 07 Oct 2005) $ $Author: junmin $
+#################################################
+
+use strict 'vars';
+use Carp;
+
+use RAD::MR_T::MageImport::VO::OntologyEntryVO;
+
+use RAD::MR_T::MageImport::Util qw(checkArgument checkArgumentType);
+
+sub new {
+  my $class = shift;
+  my $arg = shift;
+  my $self = bless {
+	 _name => $arg->{name},
+	 _value => $arg->{value}
+	}, $class;
+
+  if(my $dataType = $arg->{dataType}) {
+    $self->setDataType($dataType);
+  }
+
+  if(my $unitType = $arg->{unitType}) {
+    $self->setUnitType($unitType);
+  }
+
+  return $self;
+}
+
+sub getName  {$_[0]->{_name}}
+sub setName  {$_[0]->{_name} = $_[1]}
+
+sub getValue  {$_[0]->{_value}}
+sub setValue  {$_[0]->{_value} = $_[1]}
+
+sub getDataType  {$_[0]->{_dataType}}
+sub setDataType  {
+  my ($self, $dataType) = @_;
+
+  my $expected = 'RAD::MR_T::MageImport::VO::OntologyEntryVO';
+  my $methodName = 'setDataType';
+
+  &checkArgument($methodName, @_);
+  &checkArgumentType($methodName, $self, $expected, $dataType);
+
+  return $self->{_dataType} = $dataType;
+}
+
+sub getUnitType  {$_[0]->{_unitType}}
+sub setUnitType  {
+  my ($self, $unitType) = @_;
+
+  my $expected = 'RAD::MR_T::MageImport::VO::OntologyEntryVO';
+  my $methodName = 'setUnitType';
+
+  &checkArgument($methodName, @_);
+  &checkArgumentType($methodName, $self, $expected, $unitType);
+
+  return $self->{_unitType} = $unitType;
+}
+
+1;
+
+
+
diff --git a/lib/perl/RAD/MR_T/MageImport/VO/ProtocolVO.pm b/lib/perl/RAD/MR_T/MageImport/VO/ProtocolVO.pm
new file mode 100644
index 0000000..2582c4f
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/VO/ProtocolVO.pm
@@ -0,0 +1,123 @@
+package RAD::MR_T::MageImport::VO::ProtocolVO;
+
+#################################################
+# $Revision: 8341 $ $Date: 2005-10-07 13:42:38 -0400 (Fri, 07 Oct 2005) $ $Author: junmin $
+#################################################
+
+use strict 'vars';
+use RAD::MR_T::MageImport::VO::OntologyEntryVO;
+
+use RAD::MR_T::MageImport::Util qw(checkArgument checkArrayArgumentSameType checkArgumentType);
+
+sub new {
+  my $class = shift;
+  my $arg = shift;
+  my $self = bless {
+	 _name => $arg->{name},
+	 _protocolDescription => $arg->{protocolDescription},
+	 _softwareDescription => $arg->{softwareDescription},
+	 _hardwareDescription => $arg->{hardwareDescription},
+	 _uri => $arg->{uri},
+	}, $class;
+
+
+  if(my $protocolType = $arg->{protocolType}) {
+    $self->setProtocolType($protocolType);
+  }
+
+  if(my $softwareType = $arg->{softwareType}) {
+    $self->setSoftwareType($softwareType);
+  }
+
+  if(my $hardwareType = $arg->{hardwareType}) {
+    $self->setHardwareType($hardwareType);
+  }
+
+  if(my $params = $arg->{params}) {
+    $self->setParams($params);
+  }
+
+  return $self;
+} 
+
+
+sub getName  {$_[0]->{_name}}
+sub setName  {$_[0]->{_name} = $_[1]}
+
+sub getProtocolDescription  {$_[0]->{_protocolDescription}}
+sub setProtocolDescription  {$_[0]->{_protocolDescription} = $_[1]}
+
+sub getSoftwareDescription  {$_[0]->{_softwareDescription}}
+sub setSoftwareDescription  {$_[0]->{_softwareDescription} = $_[1]}
+
+sub getHardwareDescription  {$_[0]->{_hardwareDescription}}
+sub setHardwareDescription  {$_[0]->{_hardwareDescription} = $_[1]}
+
+sub getUri  {$_[0]->{_uri}}
+sub setUri  {$_[0]->{_uri} = $_[1]}
+
+sub getProtocolType  {$_[0]->{_protocolType}}
+sub setProtocolType  {
+  my ($self, $protocolType) = @_;
+
+  my $expected = 'RAD::MR_T::MageImport::VO::OntologyEntryVO';
+  my $methodName = 'setProtocolType';
+
+  &checkArgument($methodName, @_);
+  &checkArgumentType($methodName, $self, $expected, $protocolType);
+
+  return $self->{_protocolType} = $protocolType;
+}
+
+sub getSoftwareType  {$_[0]->{_softwareType}}
+sub setSoftwareType  {
+  my ($self, $softwareType) = @_;
+
+  my $expected = 'RAD::MR_T::MageImport::VO::OntologyEntryVO';
+  my $methodName = 'setSoftwareType';
+
+  &checkArgument($methodName, @_);
+  &checkArgumentType($methodName, $self, $expected, $softwareType);
+
+  return $self->{_softwareType} = $softwareType;
+}
+
+sub getHardwareType  {$_[0]->{_hardwareType}}
+sub setHardwareType  {
+  my ($self, $hardwareType) = @_;
+
+  my $expected = 'RAD::MR_T::MageImport::VO::OntologyEntryVO';
+  my $methodName = 'setHardwareType';
+
+  &checkArgument($methodName, @_);
+  &checkArgumentType($methodName, $self, $expected, $hardwareType);
+
+  return $self->{_hardwareType} = $hardwareType;
+}
+
+
+sub getParams  {$_[0]->{_params}}
+sub setParams  {
+  my ($self, $params) = @_;
+
+  my $expected = 'RAD::MR_T::MageImport::VO::ProtocolParamVO';
+  my $methodName = 'setParams';
+
+  &checkArgument($methodName, @_);
+  &checkArrayArgumentSameType($methodName, $self, $expected, $params);
+
+  return $self->{_params} = $params;
+}
+
+sub addParams {
+  my $self = shift;
+
+  my $expected = 'RAD::MR_T::MageImport::VO::ProtocolParamVO';
+  my $methodName = 'addParams';
+
+  &checkArrayArgumentSameType($methodName, $self, $expected, \@_);
+
+  push(@{$self->{_params}}, @_);
+}
+1;
+
diff --git a/lib/perl/RAD/MR_T/MageImport/VO/QuantificationVO.pm b/lib/perl/RAD/MR_T/MageImport/VO/QuantificationVO.pm
new file mode 100644
index 0000000..0734e87
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/VO/QuantificationVO.pm
@@ -0,0 +1,93 @@
+package RAD::MR_T::MageImport::VO::QuantificationVO;
+
+#################################################
+# $Revision: 8341 $ $Date: 2005-10-07 13:42:38 -0400 (Fri, 07 Oct 2005) $ $Author: junmin $
+#################################################
+
+use strict;
+use Carp;
+use RAD::MR_T::MageImport::VO::OntologyEntryVO;
+
+use RAD::MR_T::MageImport::Util qw(checkArgument checkArrayArgumentSameType checkArgumentType);
+
+sub new {
+  my $class = shift;
+  my $arg = shift;
+
+  my $self = bless {
+                    _name => $arg->{name},
+                    _uri => $arg->{uri},
+                    _protocolName => $arg->{protocolName},
+                    _parameterValues => [],
+                   }, $class;
+  if(my $processes = $arg->{processes}) {
+    $self->setProcesses($processes);
+  }
+
+  if(my $parameterValues = $arg->{parameterValues}) {
+    $self->setParameterValues($parameterValues);
+  }
+
+  return $self;
+}
+
+
+sub getName  {$_[0]->{_name}}
+sub setName  {$_[0]->{_name} = $_[1]}
+
+sub getUri  {$_[0]->{_uri}}
+sub setUri  {$_[0]->{_uri} = $_[1]}
+
+sub getProtocolName  {$_[0]->{_protocolName}}
+sub setProtocolName  {$_[0]->{_protocolName} = $_[1]}
+
+sub getProcesses  {$_[0]->{_processes}}
+sub setProcesses  {
+  my ($self, $processes) = @_;
+
+  my $expected = "RAD::MR_T::MageImport::VO::ProcessVO";
+  my $methodName = "setProcesses";
+
+  &checkArgument($methodName, @_);
+  &checkArrayArgumentSameType($methodName, $self, $expected, $processes);
+
+  return $self->{_processes} = $processes;
+}
+
+sub addProcesses {
+  my $self = shift;
+
+  my $expected = "RAD::MR_T::MageImport::VO::ProcessVO";
+  my $methodName = "addProcesses";
+
+  &checkArrayArgumentSameType($methodName, $self, $expected, \@_);  
+
+  push(@{$self->{_processes}}, @_);
+}
+
+sub getParameterValues  {$_[0]->{_parameterValues}}
+sub setParameterValues  {
+  my ($self, $parameterValues) = @_;
+
+  my $expected =  "RAD::MR_T::MageImport::VO::ParameterValueVO";
+  my $methodName = 'setParameterValues';
+
+  &checkArgument($methodName, @_);
+  &checkArrayArgumentSameType($methodName, $self, $expected, $parameterValues);
+
+  return $self->{_parameterValues} = $parameterValues;
+}
+
+sub addParameterValues {
+  my $self = shift;
+
+  my $expected = 'RAD::MR_T::MageImport::VO::ParameterValueVO';
+  my $methodName = 'addParameterValues';
+
+  &checkArrayArgumentSameType($methodName, $self, $expected, \@_);
+
+  push(@{$self->{_parameterValues}}, @_);
+}
+
+1;
+
diff --git a/lib/perl/RAD/MR_T/MageImport/VO/StudyDesignVO.pm b/lib/perl/RAD/MR_T/MageImport/VO/StudyDesignVO.pm
new file mode 100644
index 0000000..e594d31
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/VO/StudyDesignVO.pm
@@ -0,0 +1,87 @@
+package RAD::MR_T::MageImport::VO::StudyDesignVO;
+
+#################################################
+# $Revision: 8341 $ $Date: 2005-10-07 13:42:38 -0400 (Fri, 07 Oct 2005) $ $Author: junmin $
+#################################################
+
+use strict;
+use Carp;
+use RAD::MR_T::MageImport::VO::OntologyEntryVO;
+use RAD::MR_T::MageImport::VO::StudyFactorVO;
+
+use RAD::MR_T::MageImport::Util qw(checkArgument checkArrayArgumentSameType checkArgumentType);
+
+sub new {
+  my $class = shift;
+  my $arg = shift;
+  my $self = bless {
+	 _name => $arg->{name},
+	}, $class;
+
+  if(my $types = $arg->{types}) {
+    $self->setTypes($types);
+  }
+
+  if(my $factors = $arg->{factors}) {
+    $self->setFactors($factors);
+  }
+
+  return $self;
+} 
+
+
+sub getName  {$_[0]->{_name}}
+sub setName  {$_[0]->{_name} = $_[1]}
+
+sub getTypes  {$_[0]->{_types}}
+sub setTypes  {
+  my ($self, $types) = @_;
+
+  my $expected = 'RAD::MR_T::MageImport::VO::OntologyEntryVO';
+  my $methodName = 'setTypes';
+
+  &checkArgument($methodName, @_);
+  &checkArrayArgumentSameType($methodName, $self, $expected, $types);
+
+  return $self->{_types} = $types;
+}
+
+sub addTypes {
+  my $self = shift;
+
+  my $expected = 'RAD::MR_T::MageImport::VO::OntologyEntryVO';
+  my $methodName = 'addFactors';
+
+  &checkArrayArgumentSameType($methodName, $self, $expected, \@_);  
+
+  push(@{$self->{_types}}, @_);
+}
+
+sub getFactors  {$_[0]->{_factors}}
+
+sub setFactors  {
+  my ($self, $factors) = @_;
+
+  my $expected = 'RAD::MR_T::MageImport::VO::StudyFactorVO';
+  my $methodName = 'setFactors';
+
+  &checkArgument($methodName, @_);
+  &checkArrayArgumentSameType($methodName, $self, $expected, $factors);  
+
+  return $self->{_factors} = $factors;
+}
+
+sub addFactors {
+  my $self = shift;
+
+  my $expected = 'RAD::MR_T::MageImport::VO::StudyFactorVO';
+  my $methodName = 'setFactors';
+
+  &checkArrayArgumentSameType($methodName, $self, $expected, \@_);  
+
+  push(@{$self->{_factors}}, @_);
+}
+
+1;
+
+
diff --git a/lib/perl/RAD/MR_T/MageImport/VO/StudyFactorVO.pm b/lib/perl/RAD/MR_T/MageImport/VO/StudyFactorVO.pm
new file mode 100644
index 0000000..5592989
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/VO/StudyFactorVO.pm
@@ -0,0 +1,43 @@
+package RAD::MR_T::MageImport::VO::StudyFactorVO;
+
+#################################################
+# $Revision: 8341 $ $Date: 2005-10-07 13:42:38 -0400 (Fri, 07 Oct 2005) $ $Author: junmin $
+#################################################
+
+use strict 'vars';
+use RAD::MR_T::MageImport::VO::OntologyEntryVO;
+use RAD::MR_T::MageImport::Util qw(checkArgument checkArrayArgumentSameType checkArgumentType);
+
+sub new {
+  my $class = shift;
+  my $arg = shift;
+  my $self = bless {
+	 _name => $arg->{name},
+	}, $class;
+
+  if(my $type = $arg->{type}) {
+    $self->setType($type);
+  }
+
+  return $self;
+} 
+
+
+sub getName  {$_[0]->{_name}}
+sub setName  {$_[0]->{_name} = $_[1]}
+
+sub getType  {$_[0]->{_type}}
+sub setType  {
+  my ($self, $type) = @_;
+
+  my $methodName = 'setType';
+  my $expected = 'RAD::MR_T::MageImport::VO::OntologyEntryVO';
+
+  &checkArgument($methodName, @_);
+  &checkArgumentType($methodName, $self, $expected, $type);
+
+  return $self->{_type} = $type;
+}
+
+1;
+
diff --git a/lib/perl/RAD/MR_T/MageImport/VO/StudyVO.pm b/lib/perl/RAD/MR_T/MageImport/VO/StudyVO.pm
new file mode 100644
index 0000000..857af5e
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/VO/StudyVO.pm
@@ -0,0 +1,83 @@
+package RAD::MR_T::MageImport::VO::StudyVO;
+
+#################################################
+# $Revision: 8341 $ $Date: 2005-10-07 13:42:38 -0400 (Fri, 07 Oct 2005) $ $Author: junmin $
+#################################################
+
+use strict;
+use Carp;
+use RAD::MR_T::MageImport::VO::StudyDesignVO;
+use RAD::MR_T::MageImport::VO::StudyVO;
+
+use RAD::MR_T::MageImport::Util qw(checkArgument checkArrayArgumentSameType checkArgumentType);
+
+sub new {
+  my $class = shift;
+  my $arg = shift;
+  my $self = bless {
+	 _name => $arg->{name},
+	 _description => $arg->{description},
+         _pubMedId => $arg->{pubMedId},
+	}, $class;
+
+  if(my $designs = $arg->{designs}) {
+    $self->setDesigns($designs);
+  }
+  if(my $contact = $arg->{contact}) {
+    $self->setContact($contact);
+  }
+
+  return $self;
+}
+
+sub getPubMedId  {$_[0]->{_pubMedId}}
+sub setPubMedId  {$_[0]->{_pubMedId} = $_[1]}
+
+sub getName  {$_[0]->{_name}}
+sub setName  {$_[0]->{_name} = $_[1]}
+
+sub getDescription  {$_[0]->{_description}}
+sub setDescription  {$_[0]->{_description} = $_[1]}
+
+sub getContact  {$_[0]->{_contact}}
+sub setContact  {
+  my ($self, $contact) = @_;
+
+  my $expected = 'RAD::MR_T::MageImport::VO::PersonVO';
+  my $methodName = 'setContact';
+
+  &checkArgument($methodName, @_);
+  &checkArgumentType($methodName, $self, $expected, $contact);
+
+  return $self->{_contact} = $contact;
+
+}
+
+sub getDesigns  {$_[0]->{_designs}}
+
+sub setDesigns  {
+  my ($self, $designs) = @_;
+
+  my $methodName = 'setDesigns';
+  my $expected = 'RAD::MR_T::MageImport::VO::StudyDesignVO';
+
+  &checkArgument($methodName, @_);
+  &checkArrayArgumentSameType($methodName, $self, $expected, $designs);
+
+  return $self->{_designs} = $designs;
+}
+
+sub addDesigns {
+  my $self = shift;
+
+  my $methodName = 'setDesigns';
+  my $expected = 'RAD::MR_T::MageImport::VO::StudyDesignVO';
+
+  &checkArrayArgumentSameType($methodName, $self, $expected, \@_);
+
+  push(@{$self->{_designs}}, @_);
+}
+
+1;
+
+
diff --git a/lib/perl/RAD/MR_T/MageImport/VO/TreatmentVO.pm b/lib/perl/RAD/MR_T/MageImport/VO/TreatmentVO.pm
new file mode 100644
index 0000000..ca080ed
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/VO/TreatmentVO.pm
@@ -0,0 +1,88 @@
+package RAD::MR_T::MageImport::VO::TreatmentVO;
+
+#################################################
+# $Revision: 8341 $ $Date: 2005-10-07 13:42:38 -0400 (Fri, 07 Oct 2005) $ $Author: junmin $
+#################################################
+
+use strict;
+use Carp;
+use RAD::MR_T::MageImport::VO::VOBase;
+use RAD::MR_T::MageImport::Util qw(checkArgument checkArrayArgumentSameType checkArgumentType);
+
+use vars qw / @ISA / ;
+ at ISA = qw / RAD::MR_T::MageImport::VO::VOBase /;
+
+#use vars qw( $AUTOLOAD );
+  
+{
+# Encapsulated class data
+  my %_attr_data = # DEFAULT           Type
+    (
+     _orderNum         =>  [1,            ""],
+     _outputBM         => [undef,        "RAD::MR_T::MageImport::VO::BioMaterialVO"],
+     _treatmentType    => [undef,        'RAD::MR_T::MageImport::VO::OntologyEntryVO'],
+     _inputBMMs        => [undef,        ""],
+     _name             => [undef,        ""],
+     _protocol         => [undef,        'RAD::MR_T::MageImport::VO::ProtocolVO'],
+     _parameterValues  => [undef,        ""],
+    );
+
+# private class methods, to operate on encapsulated class data
+
+  sub _default_for {
+    my ($self, $attr) = @_;
+    $_attr_data{$attr}[0];
+  }
+
+  sub _type_for {
+    my ($self, $attr) = @_;
+    $_attr_data{$attr}[1];
+  }
+
+  sub _standard_keys{
+    keys %_attr_data;
+  }
+
+  sub _exist_for {
+    my ($self, $inattr) = @_;
+ 
+    return 1 if exists $_attr_data{ $inattr };
+    return 0;
+  }
+
+}
+
+ 
+sub addInputBMMs {
+  my $self = shift;
+
+  my $expected = 'RAD::MR_T::MageImport::VO::BioMaterialMeasurementVO';
+  my $methodName = 'addInputBMMs';
+
+  &checkArrayArgumentSameType($methodName, $self, $expected, \@_);
+
+  push(@{$self->{_inputBMMs}}, @_);
+}
+
+sub getParameterValues {
+  my ($self) = @_;
+
+  if(my $paramValues = $self->{_parameterValues}) {
+    return $paramValues;
+  }
+  return [];
+}
+
+sub addParameterValues {
+  my $self = shift;
+
+  my $expected = 'RAD::MR_T::MageImport::VO::ParameterValueVO';
+  my $methodName = 'addParameterValues';
+
+  &checkArrayArgumentSameType($methodName, $self, $expected, \@_);
+
+  push(@{$self->{_parameterValues}}, @_);
+}
+
+1;
+
diff --git a/lib/perl/RAD/MR_T/MageImport/VO/VOBase.pm b/lib/perl/RAD/MR_T/MageImport/VO/VOBase.pm
new file mode 100644
index 0000000..6d45a4f
--- /dev/null
+++ b/lib/perl/RAD/MR_T/MageImport/VO/VOBase.pm
@@ -0,0 +1,114 @@
+package RAD::MR_T::MageImport::VO::VOBase;
+
+#################################################
+# $Revision: 8341 $ $Date: 2005-10-07 13:42:38 -0400 (Fri, 07 Oct 2005) $ $Author: junmin $
+#################################################
+
+use strict;
+use RAD::MR_T::MageImport::MageImportError;
+use vars qw( $AUTOLOAD );
+{
+# Encapsulated class data
+  my %_attr_data = # DEFAULT           Type
+    (
+    );
+
+ sub _default_for {
+    my ($self, $attr) = @_;
+    $_attr_data{$attr}[0];
+  }
+
+  sub _type_for {
+    my ($self, $attr) = @_;
+    $_attr_data{$attr}[1];
+  }
+
+ sub _exist_for {
+    my ($self, $inattr) = @_;
+    return 1 if exists $_attr_data{ $inattr };
+    return 0;
+  }
+
+  sub _standard_keys{
+    my ($self, $attr) = @_;
+    my $class = ref($self);
+
+    if($class eq 'RAD::MR_T::MageImport::VO::VOBase') {
+      RAD::MR_T::MageImport::MageImportError->new("try to instantiate an abstract class VOBase")->throw();
+    }
+    keys %_attr_data;
+  }
+
+}
+
+sub new {
+  my $class = shift;
+  my $arg = shift;
+  my $self = bless{}, $class;
+
+  my $debug;
+
+  foreach my $attrname ($self->_standard_keys()){
+    print  STDOUT $attrname."\n" if $debug;
+    my $argname;
+    if($attrname =~ /^_(.*)/){
+      $argname = $1;
+    }
+    print STDOUT  $argname."\n" if $debug;
+    if(exists $arg->{$argname}){
+      print STDOUT  $argname."\n" if $debug;
+      $self->{$attrname} = $arg->{$argname};
+    }
+    else{
+      print STDOUT "hello", $argname."\n" if $debug;
+      $self->{$attrname} = $self->_default_for($attrname);
+    }
+  }
+
+ # print "\nnew construct", $self->{_inputBM}, "\n"; 
+  return $self;
+}
+
+
+sub AUTOLOAD{
+  no strict "refs";
+  my ($self, $newval) = @_;
+#print STDOUT $AUTOLOAD;
+# was it a get method?
+  if ($AUTOLOAD =~ /.*::get(\w+)/  ){
+    my $attr_name  = "_".lcfirst($1);
+ #   *{$AUTOLOAD} = sub { return $_[0]->{'$attr_name'} };
+ #   print $attr_name, $self->{$attr_name}; 
+   return $self->{$attr_name};
+  }
+
+# Was it a set method?
+  if ($AUTOLOAD =~ /.*::set(\w+)/ ){
+    my $attr_name = "_".lcfirst($1);
+
+    if($self->_exist_for($attr_name)){
+
+      my $type=$self->_type_for($attr_name);
+
+      unless ( !$type || UNIVERSAL::isa($newval,$type) ) {
+	RAD::MR_T::MageImport::MageImportObjectTypeError->new("$AUTOLOAD", $type, ref($newval))->throw() ;
+      }
+
+
+ #   *{$AUTOLOAD} = sub { $_[0]->{'$attr_name'} = $_[1]; return };
+ #   print STDOUT "att $attr_name\t newval $newval";
+
+      $self->{$attr_name} = $newval;
+      return
+   }
+  }
+#Must have been a mistake then...
+  RAD::MR_T::MageImport::MageImportError->new("No such method: $AUTOLOAD")->throw() 
+ unless  $AUTOLOAD =~ /.*::DESTROY/  ;
+
+}
+
+ 
+
+1;
+
diff --git a/lib/xml/mage.xslt b/lib/xml/mage.xslt
new file mode 100644
index 0000000..371095b
--- /dev/null
+++ b/lib/xml/mage.xslt
@@ -0,0 +1,28 @@
+<?xml version="1.0"?> 
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  version="1.0">
+    <xsl:output method="xml" indent="yes" encoding="UTF-8" />
+    <xsl:template match = "/MAGE-ML">
+      <xsl:apply-templates />
+    </xsl:template>
+
+    <xsl:template match="DesignElement_package">
+    </xsl:template>
+    
+    <xsl:template match="BioAssayData_package">
+      <BioAssayData_package>
+      <xsl:apply-templates select="//DesignElementDimension_assnlist"/>
+      <xsl:apply-templates select="//BioAssayDimension_assnlist"/> 
+      <xsl:apply-templates select="//QuantitationTypeDimension_assnlist"/> 
+      <xsl:apply-templates select="//BioAssayMap_assnlist"/> 
+      <xsl:apply-templates select="//BioAssayData_assnlist"/> 
+      </BioAssayData_package>  
+    </xsl:template>
+  
+    <xsl:template match="DesignElementDimension_assnlist">
+    </xsl:template>
+    
+
+    <xsl:template match="node()|@*">
+      <xsl:copy-of select="." />
+    </xsl:template>
+</xsl:stylesheet>

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-med/mage2tab.git



More information about the debian-med-commit mailing list