From 55c992cd21f56e94f75def44d75da86c1d40fe95 Mon Sep 17 00:00:00 2001
From: cramakri <cramakri>
Date: Thu, 8 Dec 2011 19:02:37 +0000
Subject: [PATCH] SE-391 Incorporated Bernd's changes that validate strains
 against the straindb

SVN: 23923
---
 .../etc/growth-profiles/data-set-handler.py   |   9 +++++-
 .../dist/etc/proteomics/data-set-handler.py   |  11 +++++--
 .../dist/etc/shared/shared-classes.py         |  28 ++++++++++++++----
 .../etc/transcriptomics/data-set-handler.py   |   9 +++++-
 .../examples/Transcriptomics-Example.xlsx     | Bin 11593 -> 11590 bytes
 ...TranscriptomicsDataSetRegistratorTest.java |  10 +++----
 6 files changed, 52 insertions(+), 15 deletions(-)

diff --git a/eu_basynthec/dist/etc/growth-profiles/data-set-handler.py b/eu_basynthec/dist/etc/growth-profiles/data-set-handler.py
index 1694491cf26..8bdccd87bb3 100644
--- a/eu_basynthec/dist/etc/growth-profiles/data-set-handler.py
+++ b/eu_basynthec/dist/etc/growth-profiles/data-set-handler.py
@@ -20,6 +20,13 @@ def extract_strains():
     line = lines[i]
     strains.append(line[0].upper())
   return ",".join(strains)
+  
+def strain_canonical(strainId):
+  """Return the canonical form of the strainId"""
+  if strainId.lower().startswith('jjs-din'):
+    return "JJS-DIn" + strainId[7:]
+  else:
+    return strainId.upper()
 
 def assign_properties(dataset, metadata):
   """Assign properties to the data set from information in the data."""
@@ -38,7 +45,7 @@ def assign_properties(dataset, metadata):
       value = metadata.get(prop)
       if (key == "STRAIN"):
         value = value + " (STRAIN)"
-      dataset.setPropertyValue(key, value.upper())
+      dataset.setPropertyValue(key, strain_canonical(value))
       
 def convert_data_to_tsv(tr, dataset, location):
   """Create a tsv file containing the data and add it to the data set."""
diff --git a/eu_basynthec/dist/etc/proteomics/data-set-handler.py b/eu_basynthec/dist/etc/proteomics/data-set-handler.py
index 81da79a7eda..6473491df43 100644
--- a/eu_basynthec/dist/etc/proteomics/data-set-handler.py
+++ b/eu_basynthec/dist/etc/proteomics/data-set-handler.py
@@ -12,6 +12,13 @@ def retrieve_experiment(tr, exp_id):
     exp = tr.getExperiment(exp_id)
   return exp
 
+def strain_canonical(strainId):
+  """Return the canonical form of the strainId"""
+  if strainId.lower().startswith('jjs-din'):
+    return "JJS-DIn" + strainId[7:]
+  else:
+    return strainId.upper()
+
 def assign_properties(dataset, metadata):
   """Assign properties to the data set from information in the data."""
   propertyNameMap = {
@@ -28,8 +35,8 @@ def assign_properties(dataset, metadata):
       value = metadata.get(prop)
       if (key == "STRAIN"):
         value = value + " (STRAIN)"
-      dataset.setPropertyValue(key, value.upper())
-      
+      dataset.setPropertyValue(key, strain_canonical(value))
+ 
 def convert_data_to_tsv(tr, dataset, location):
   """Create a tsv file containing the data and add it to the data set."""
   tr.createNewDirectory(dataset, location)
diff --git a/eu_basynthec/dist/etc/shared/shared-classes.py b/eu_basynthec/dist/etc/shared/shared-classes.py
index 85911070ab2..b502be6edf4 100644
--- a/eu_basynthec/dist/etc/shared/shared-classes.py
+++ b/eu_basynthec/dist/etc/shared/shared-classes.py
@@ -139,14 +139,30 @@ class ValidationHelper:
       if match is None:
         self.errors.append(createFileValidationError("The Start Data Col must be a letter between A and Z (not " + value + ")."))
   
-strainIdRegex = re.compile("^JJS-MGP[0-9]{1,3}|^JJS-DIN[0-9]{1,3}|^MS|CHASSIS\s*[1-3]|WT 168 TRP\+")
-def isStrainIdValid(strainId):
-  """Return true if the strain id passes validation (has the form sepecified in the regex)"""
-  strainId = strainId.strip().upper()
-  match = strainIdRegex.match(strainId)
+#
+# Strain validation stuff
+#
+strainIdRegex = re.compile("^ms|chassis\s*[1-3]|wt 168 trp\+")
+strainIdRegexFull = re.compile("^jjs-mgp[0-9]{1,3}|^jjs-din[0-9]{1,3}|^ms|chassis\s*[1-3]|wt 168 trp\+")
+strainIds = {}
+home_dir = os.environ.get('HOME', '')
+if os.path.exists(home_dir + '/var/strainids.txt'):
+  for sid in open(home_dir + '/var/strainids.txt').readlines():
+    strainIds[sid.strip().lower()] = 1
+
+def _match(regex, strainId):
+  match = regex.match(strainId)
   if match is None:
     return False
-  return match.end() == len(strainId)
+  return len(match.group(0)) == len(strainId)
+
+def isStrainIdValid(strainId):
+  """Return true if the strain id passes validation (has the form specified in the regex and is in Chris' strain db)"""
+  strainIdLower = strainId.lower()
+  if len(strainIds) > 0:
+    return strainIds.has_key(strainIdLower) or _match(strainIdRegex, strainIdLower)
+  else:
+    return _match(strainIdRegexFull, strainIdLower)
   
 def strainValidationErrorMessageFragment(strain):
     """Return a sentence fragment describing the strain validation error."""
diff --git a/eu_basynthec/dist/etc/transcriptomics/data-set-handler.py b/eu_basynthec/dist/etc/transcriptomics/data-set-handler.py
index df05c0e01b4..1b7eb9a5f79 100644
--- a/eu_basynthec/dist/etc/transcriptomics/data-set-handler.py
+++ b/eu_basynthec/dist/etc/transcriptomics/data-set-handler.py
@@ -37,6 +37,13 @@ def retrieve_experiment(tr, exp_id):
     exp = tr.getExperiment(exp_id)
   return exp
 
+def strain_canonical(strainId):
+  """Return the canonical form of the strainId"""
+  if strainId.lower().startswith('jjs-din'):
+    return "JJS-DIn" + strainId[7:]
+  else:
+    return strainId.upper()
+
 def assign_properties(dataset, metadata):
   """Assign properties to the data set from information in the data."""
   propertyNameMap = {
@@ -54,7 +61,7 @@ def assign_properties(dataset, metadata):
       value = metadata.get(prop)
       if (key == "STRAIN"):
         value = value + " (STRAIN)"
-      dataset.setPropertyValue(key, value.upper())
+      dataset.setPropertyValue(key, strain_canonical(value))
       
 def convert_data_to_tsv(tr, start_row, start_col, dataset, location):
   """Create a tsv file containing the data and add it to the data set."""
diff --git a/eu_basynthec/sourceTest/examples/Transcriptomics-Example.xlsx b/eu_basynthec/sourceTest/examples/Transcriptomics-Example.xlsx
index 583ce54ebc47b44dbd9e0974cb26be60018d7ab8..8c93558fdd8c202048cbcdc515dd60efce7db3b1 100644
GIT binary patch
delta 4652
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
i00000000000000003DOzEIt95lOQc425Kq*0000Rp6YA>

delta 4656
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
m0ssIJ00000000000000003nm!EIt98lN~K125l+;0002BQQWBj

diff --git a/eu_basynthec/sourceTest/java/eu/basynthec/cisd/dss/transcriptomics/TranscriptomicsDataSetRegistratorTest.java b/eu_basynthec/sourceTest/java/eu/basynthec/cisd/dss/transcriptomics/TranscriptomicsDataSetRegistratorTest.java
index 11ea320a123..e1019cba5e5 100644
--- a/eu_basynthec/sourceTest/java/eu/basynthec/cisd/dss/transcriptomics/TranscriptomicsDataSetRegistratorTest.java
+++ b/eu_basynthec/sourceTest/java/eu/basynthec/cisd/dss/transcriptomics/TranscriptomicsDataSetRegistratorTest.java
@@ -74,7 +74,7 @@ public class TranscriptomicsDataSetRegistratorTest extends AbstractBaSynthecData
 
         assertNotNull(strainProperty);
         assert null != strainProperty;
-        assertEquals("MGP253,MGP776", strainProperty.getValue());
+        assertEquals("JJS-MGP253,JJS-MGP776", strainProperty.getValue());
 
         NewExternalData tsvDataSet =
                 atomicOperationDetails.recordedObject().getDataSetRegistrations().get(2);
@@ -91,10 +91,10 @@ public class TranscriptomicsDataSetRegistratorTest extends AbstractBaSynthecData
         String[] contents = tsvSplitFolder.list();
         Arrays.sort(contents);
         String[] expectedContents =
-                    { "Transcriptomics-Example.xlsx_MGP253.tsv",
-                            "Transcriptomics-Example.xlsx_MGP776.tsv" };
+                    { "Transcriptomics-Example.xlsx_JJS-MGP253.tsv",
+                            "Transcriptomics-Example.xlsx_JJS-MGP776.tsv" };
         assertEquals(Arrays.asList(expectedContents), Arrays.asList(contents));
-        File tsvSplitFile = new File(tsvSplitFolder, "Transcriptomics-Example.xlsx_MGP253.tsv");
+        File tsvSplitFile = new File(tsvSplitFolder, "Transcriptomics-Example.xlsx_JJS-MGP253.tsv");
         checkSplitTsvContent(tsvSplitFile);
         context.assertIsSatisfied();
     }
@@ -108,7 +108,7 @@ public class TranscriptomicsDataSetRegistratorTest extends AbstractBaSynthecData
     private void checkTsvContent(File tsvFile) throws IOException
     {
         String content = FileUtils.readFileToString(tsvFile);
-        assertEquals("Locustag\tMGP253-1 66687802\tMGP776-2 66730002\n"
+        assertEquals("Locustag\tJJS-MGP253-1 66687802\tJJS-MGP776-2 66730002\n"
                 + "BSU00010\t13.7953\t13.5517\n" + "BSU00020\t13.5907\t13.3277\n"
                 + "BSU00030\t13.8489\t13.6306\n" + "BSU00040\t14.3564\t14.1073\n"
                 + "BSU00050\t14.5239\t14.1992\n" + "BSU00060\t14.3293\t13.933\n"
-- 
GitLab