From 233d07ca6b65e1b2b9a7f44d7f442b71ff2fda13 Mon Sep 17 00:00:00 2001
From: felmer <felmer>
Date: Tue, 19 Jun 2012 11:23:26 +0000
Subject: [PATCH] SP-130, CCS-11: improve performance

SVN: 25776
---
 .../demo-proteomics-aggregation/script.py     | 35 +++++++++++++------
 1 file changed, 24 insertions(+), 11 deletions(-)

diff --git a/rtd_phosphonetx/source/core-plugins/dev-demo/1/dss/reporting-plugins/demo-proteomics-aggregation/script.py b/rtd_phosphonetx/source/core-plugins/dev-demo/1/dss/reporting-plugins/demo-proteomics-aggregation/script.py
index b0e5537147d..cc5503e87f5 100644
--- a/rtd_phosphonetx/source/core-plugins/dev-demo/1/dss/reporting-plugins/demo-proteomics-aggregation/script.py
+++ b/rtd_phosphonetx/source/core-plugins/dev-demo/1/dss/reporting-plugins/demo-proteomics-aggregation/script.py
@@ -1,3 +1,4 @@
+from java.util import ArrayList
 from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchCriteria
 from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto import SearchSubCriteria
 from ch.systemsx.cisd.openbis.generic.shared.api.v1.dto.SearchCriteria import MatchClause
@@ -63,14 +64,30 @@ def gatherExperimentsAndSamples(space):
                         searchExperiment2msInjectionSamplesDict[expId] = [msInjectionSample]
     return bioSample2ExperimentDict, msInjectionSample2bioSamplesDict, \
            searchExperiment2msInjectionSamplesDict, searchExperimentsByPermIdDict
+           
+def createPermIdList(searchExperimentsByPermIdDict):
+    permIds = ""
+    for exp in searchExperimentsByPermIdDict.values():
+        if len(permIds) > 0:
+            permIds = permIds + ", "
+        permIds = permIds + "'" + exp.permId + "'"
+    return permIds
 
 def aggregate(parameters, tableBuilder):
     space = parameters.get('space').upper()
     bioSample2ExperimentDict, msInjectionSample2bioSamplesDict, \
             searchExperiment2msInjectionSamplesDict, searchExperimentsByPermIdDict \
             = gatherExperimentsAndSamples(space)
-        
-    protein = parameters.get('protein')
+    
+    tableBuilder.addHeader(BIO_EXPERIMENT)
+    tableBuilder.addHeader(BIO_SAMPLE)
+    tableBuilder.addHeader(MS_SAMPLE)
+    tableBuilder.addHeader(SEARCH_EXPERIMENT)
+    tableBuilder.addHeader(SEARCH_EXPERIMENT_PERM_ID)
+    tableBuilder.addHeader(ACCESION_NUMBER)
+    tableBuilder.addHeader(DESCRIPTION)
+    protein = '%' + parameters.get('protein') + '%'
+    permIds = createPermIdList(searchExperimentsByPermIdDict)
     result = queryService.select("proteomics-db", 
                                  """select e.perm_id, accession_number, description 
                                     from experiments as e join data_sets as d on d.expe_id = e.id 
@@ -78,16 +95,11 @@ def aggregate(parameters, tableBuilder):
                                     join identified_proteins as ip on ip.prot_id = p.id
                                     join sequences as s on ip.sequ_id = s.id
                                     join protein_references as pr on s.prre_id = pr.id 
-                                    where accession_number like ?{1} or description like ?{1} 
+                                    where e.perm_id in (""" 
+                                    + permIds + 
+                                    """) and (accession_number like ?{1} or description like ?{1}) 
                                     order by perm_id""", 
-                                ['%' + protein + '%'])
-    tableBuilder.addHeader(BIO_EXPERIMENT)
-    tableBuilder.addHeader(BIO_SAMPLE)
-    tableBuilder.addHeader(MS_SAMPLE)
-    tableBuilder.addHeader(SEARCH_EXPERIMENT)
-    tableBuilder.addHeader(SEARCH_EXPERIMENT_PERM_ID)
-    tableBuilder.addHeader(ACCESION_NUMBER)
-    tableBuilder.addHeader(DESCRIPTION)
+                                [protein])
     for resultRow in result:
         permId = resultRow.get('perm_id')
         if (permId in searchExperimentsByPermIdDict):
@@ -106,3 +118,4 @@ def aggregate(parameters, tableBuilder):
                     row.setCell(SEARCH_EXPERIMENT_PERM_ID, permId)
                     row.setCell(ACCESION_NUMBER, resultRow.get('accession_number'))
                     row.setCell(DESCRIPTION, resultRow.get('description'))
+    result.close()
-- 
GitLab