From 1e44bb7f1e09dceb7e124502a709a8afdd834963 Mon Sep 17 00:00:00 2001
From: kohleman <kohleman>
Date: Thu, 29 Jul 2010 18:17:34 +0000
Subject: [PATCH] - no complaints about more than one Summary file, the values
 of the first file found are taken - added some more properties - started with
 lane summary, not yet used

SVN: 17296
---
 .../cisd/dsu/dss/plugins/IlluminaSummary.java |  13 ++
 .../IlluminaSummaryReportingPlugin.java       | 159 ++++++++++++++----
 .../dsu/dss/plugins/LaneResultsSummary.java   | 109 ++++++++++++
 3 files changed, 249 insertions(+), 32 deletions(-)
 create mode 100644 deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/LaneResultsSummary.java

diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/IlluminaSummary.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/IlluminaSummary.java
index e413f57456d..b75d90f40e1 100644
--- a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/IlluminaSummary.java
+++ b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/IlluminaSummary.java
@@ -40,6 +40,8 @@ class IlluminaSummary
 {
     private ChipResultsSummary chipResultsSummary;
 
+    private LaneResultsSummary LaneResultsSummary;
+
     private String Software;
 
     @XmlElement(name = "ChipResultsSummary")
@@ -53,6 +55,17 @@ class IlluminaSummary
         this.chipResultsSummary = chipResultsSummary;
     }
 
+    @XmlElement(name = "LaneResultsSummary")
+    public LaneResultsSummary getLaneResultsSummary()
+    {
+        return LaneResultsSummary;
+    }
+
+    public void setLaneResultsSummary(LaneResultsSummary laneResultsSummary)
+    {
+        LaneResultsSummary = laneResultsSummary;
+    }
+
     @XmlElement(name = "Software")
     public String getSoftware()
     {
diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/IlluminaSummaryReportingPlugin.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/IlluminaSummaryReportingPlugin.java
index cb311ebd484..cd65b689f79 100644
--- a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/IlluminaSummaryReportingPlugin.java
+++ b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/IlluminaSummaryReportingPlugin.java
@@ -19,21 +19,25 @@ package ch.ethz.bsse.cisd.dsu.dss.plugins;
 import java.io.File;
 import java.io.FileFilter;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 import java.util.Properties;
 
 import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException;
-import ch.systemsx.cisd.common.filesystem.FileUtilities;
 import ch.systemsx.cisd.common.xml.JaxbXmlParser;
 import ch.systemsx.cisd.openbis.dss.generic.server.plugins.standard.AbstractDatastorePlugin;
 import ch.systemsx.cisd.openbis.dss.generic.server.plugins.tasks.IReportingPluginTask;
 import ch.systemsx.cisd.openbis.dss.generic.server.plugins.tasks.SimpleTableModelBuilder;
+import ch.systemsx.cisd.openbis.dss.generic.shared.ServiceProvider;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.DoubleTableCell;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IEntityProperty;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.ISerializableComparable;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.IntegerTableCell;
+import ch.systemsx.cisd.openbis.generic.shared.basic.dto.Sample;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.StringTableCell;
 import ch.systemsx.cisd.openbis.generic.shared.basic.dto.TableModel;
 import ch.systemsx.cisd.openbis.generic.shared.dto.DatasetDescription;
+import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier;
+import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SpaceIdentifier;
 
 /**
  * Reporting plugin which shows numbers of the Summary file generated from the Illumina Sequencer.
@@ -47,6 +51,14 @@ public class IlluminaSummaryReportingPlugin extends AbstractDatastorePlugin impl
 
     private static final String SUMMARY_FILE_NAME = "Summary.xml";
 
+    private static final String DATA_INTENSITIES_BASE_CALLS_PATH = "/Data/Intensities/BaseCalls";
+
+    private static final String GERALD_DIR = "GERALD";
+
+    private static final String[] PROPERTIES =
+        { "GENOME_ANALYZER", "END_TYPE", "ILLUMINA_PIPELINE_VERSION",
+                "CYCLES_REQUESTED_BY_CUSTOMER" };
+
     public IlluminaSummaryReportingPlugin(Properties properties, File storeRoot)
     {
         super(properties, storeRoot);
@@ -60,30 +72,67 @@ public class IlluminaSummaryReportingPlugin extends AbstractDatastorePlugin impl
         builder.addHeader("Clusters (PF)");
         builder.addHeader("Yield (kbases)");
         builder.addHeader("Software");
+        for (String property : PROPERTIES)
+        {
+            builder.addHeader(property);
+        }
+        builder.addHeader("PhiX: Clusters");
+        builder.addHeader("PhiX: ClustersPF");
+        builder.addHeader("PhiX: Yield (kbases)");
+        builder.addHeader("PhiX: % Align (PF)");
         for (DatasetDescription dataset : datasets)
         {
             File originalData = getDataSubDir(dataset);
-            File summaryFile = extractSummaryFile(dataset, originalData);
-            describe(builder, dataset, summaryFile);
+
+            // set the directory containing the Summary.xml
+            File childDirectory =
+                    new File(originalData, dataset.getSampleCode()
+                            + DATA_INTENSITIES_BASE_CALLS_PATH);
+            File[] files = childDirectory.listFiles(new FileFilter()
+                {
+                    public boolean accept(File file)
+                    {
+                        return file.isDirectory() && file.getName().startsWith(GERALD_DIR);
+                    }
+                });
+
+            System.out.println(files[0]);
+            if (files.length == 1)
+            {
+                File geraldDir = files[0];
+                File summaryFile = new File(geraldDir, SUMMARY_FILE_NAME);
+                describe(builder, dataset, summaryFile);
+            } else
+            {
+                // throw new EnvironmentFailureException(String.format("More than one ..."));
+            }
+            // if (childDirectory.exists())
+            // {
+            // File summaryFile = extractSummaryFile(dataset, childDirectory);
+            // describe(builder, dataset, summaryFile);
+            // } else
+            // {
+            // File summaryFile = extractSummaryFile(dataset, originalData);
+            // }
         }
         return builder.getTableModel();
     }
 
-    private static File extractSummaryFile(DatasetDescription dataset, File originalData)
-    {
-        List<File> files = new ArrayList<File>();
-        FileUtilities.findFiles(originalData, files, createIlluminaSummaryFileFilter());
-        int size = files.size();
-        if (size == 1)
-        {
-            return files.get(0);
-        } else
-        {
-            throw new EnvironmentFailureException(String.format(
-                    "%s file was found for the dataset %s (%s).", (size == 0) ? "No summary"
-                            : " More than one", dataset.getDatasetCode(), dataset.getSampleCode()));
-        }
-    }
+    // private static File extractSummaryFile(DatasetDescription dataset, File originalData)
+    // {
+    // List<File> files = new ArrayList<File>();
+    // FileUtilities.findFiles(originalData, files, createIlluminaSummaryFileFilter());
+    // int size = files.size();
+    // if (size == 1)
+    // {
+    // return files.get(0);
+    // } else
+    // {
+    // throw new EnvironmentFailureException(String.format(
+    // "%s file was found for the dataset %s (%s).", (size == 0) ? "No summary"
+    // : " More than one", dataset.getDatasetCode(), dataset.getSampleCode()));
+    // }
+    // }
 
     private static void describe(SimpleTableModelBuilder builder, DatasetDescription dataset,
             File summaryFile)
@@ -103,27 +152,74 @@ public class IlluminaSummaryReportingPlugin extends AbstractDatastorePlugin impl
             software_version = "Not available";
         }
 
-        List<ISerializableComparable> row =
-                Arrays.<ISerializableComparable> asList(
-                        new StringTableCell(dataset.getSampleCode()), new IntegerTableCell(
-                                chipResultSummary.getClusterCountRaw()), new IntegerTableCell(
-                                chipResultSummary.getClusterCountPF()), new IntegerTableCell(
-                                chipResultSummary.getYield() / 1000), new StringTableCell(
-                                software_version));
+        List<ISerializableComparable> row = new ArrayList<ISerializableComparable>();
+        row.add(new StringTableCell(dataset.getSampleCode()));
+        row.add(new IntegerTableCell(chipResultSummary.getClusterCountRaw()));
+        row.add(new IntegerTableCell(chipResultSummary.getClusterCountPF()));
+        row.add(new IntegerTableCell(chipResultSummary.getYield() / 1000));
+        row.add(new StringTableCell(software_version));
+        addPropertyColumnValues(dataset, row);
+        // just dummies
+        row.add(new IntegerTableCell(1));
+        row.add(new IntegerTableCell(1));
+        row.add(new IntegerTableCell(1));
+        row.add(new DoubleTableCell(1.0));
         builder.addRow(row);
     }
 
-    private static FileFilter createIlluminaSummaryFileFilter()
+    private static void addPropertyColumnValues(DatasetDescription dataset,
+            List<ISerializableComparable> row)
     {
-        return new FileFilter()
+        Sample sample = getSample(dataset);
+        for (String propertyCode : PROPERTIES)
+        {
+            boolean found = false;
+            for (IEntityProperty property : sample.getProperties())
             {
-                public boolean accept(File file)
+                if (property.getPropertyType().getCode().equals(propertyCode))
                 {
-                    return file.isFile() && file.getName().equals(SUMMARY_FILE_NAME);
+                    row.add(new StringTableCell(property.tryGetAsString()));
+                    found = true;
+                    break;
                 }
-            };
+            }
+            if (found == false)
+            {
+                row.add(new StringTableCell(""));
+            }
+        }
     }
 
+    private static Sample getSample(DatasetDescription dataset)
+    {
+        String spaceCode = dataset.getGroupCode();
+        String sampleCode = dataset.getSampleCode();
+        String databaseInstanceCode = dataset.getDatabaseInstanceCode();
+        SampleIdentifier sampleIdentifier =
+                new SampleIdentifier(new SpaceIdentifier(databaseInstanceCode, spaceCode),
+                        sampleCode);
+        Sample sampleOrNull =
+                ServiceProvider.getOpenBISService().tryGetSampleWithExperiment(sampleIdentifier);
+        if (sampleOrNull == null)
+        {
+            throw new EnvironmentFailureException(String.format(
+                    "Couldn't get sample %s for dataset %s.", dataset.getSampleCode(),
+                    dataset.getDatasetCode()));
+        }
+        return sampleOrNull;
+    }
+
+    // private static FileFilter createIlluminaSummaryFileFilter()
+    // {
+    // return new FileFilter()
+    // {
+    // public boolean accept(File file)
+    // {
+    // return file.isFile() && file.getName().equals(SUMMARY_FILE_NAME);
+    // }
+    // };
+    // }
+
     /**
      * Loader of Illumina summary XML file.
      * <p>
@@ -145,5 +241,4 @@ public class IlluminaSummaryReportingPlugin extends AbstractDatastorePlugin impl
         }
 
     }
-
 }
diff --git a/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/LaneResultsSummary.java b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/LaneResultsSummary.java
new file mode 100644
index 00000000000..7f6865e89ec
--- /dev/null
+++ b/deep_sequencing_unit/source/java/ch/ethz/bsse/cisd/dsu/dss/plugins/LaneResultsSummary.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright 2010 ETH Zuerich, CISD
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package ch.ethz.bsse.cisd.dsu.dss.plugins;
+
+/**
+ * <pre>
+ * &lt;LaneResultsSummary&gt;
+ *  &lt;Read&gt;
+ *  &lt;readNumber&gt;1&lt;/readNumber&gt;
+ *  &lt;Lane&gt;
+ *  &lt;laneNumber&gt;1&lt;/laneNumber&gt;
+ *  &lt;clusterCountPF&gt;
+ *  &lt;mean&gt;251107&lt;/mean&gt;
+ *  &lt;stdev&gt;9934&lt;/stdev&gt;
+ *  &lt;sumsq&gt;11841370000&lt;/sumsq&gt;
+ *  &lt;/clusterCountPF&gt;
+ *  &lt;clusterCountRaw&gt;
+ *  &lt;mean&gt;290967&lt;/mean&gt;
+ *  &lt;stdev&gt;12357&lt;/stdev&gt;
+ *  &lt;sumsq&gt;18322720000&lt;/sumsq&gt;
+ *  &lt;/clusterCountRaw&gt;
+ *  &lt;laneYield&gt;2290093&lt;/laneYield&gt;
+ * &lt;oneSig&gt;
+ *  &lt;mean&gt;497&lt;/mean&gt;
+ *  &lt;stdev&gt;61&lt;/stdev&gt;
+ *  &lt;sumsq&gt;447654&lt;/sumsq&gt;
+ *  &lt;/oneSig&gt;
+ *  &lt;percentClustersPF&gt;
+ *  &lt;mean&gt;86.32&lt;/mean&gt;
+ *  &lt;stdev&gt;1.66&lt;/stdev&gt;
+ *  &lt;sumsq&gt;331.22&lt;/sumsq&gt;
+ *  &lt;/percentClustersPF&gt;
+ *  &lt;signal20AsPctOf1&gt;
+ *  &lt;mean&gt;81.60&lt;/mean&gt;
+ *  &lt;stdev&gt;6.26&lt;/stdev&gt;
+ *  &lt;sumsq&gt;4700.89&lt;/sumsq&gt;
+ *  &lt;/signal20AsPctOf1&gt;
+ *  &lt;/Lane&gt;
+ *  ...
+ *  &lt;/Read&gt;
+ *  &lt;/LaneResultsSummary&gt;
+ * </pre>
+ * 
+ * @author Manuel Kohler
+ */
+
+public class LaneResultsSummary
+{
+    private String Read;
+
+    private Long clusterCountPF;
+
+    private Long clusterCountRaw;
+
+    private Long laneyield;
+
+    public String getRead()
+    {
+        return Read;
+    }
+    
+    public void setRead(String read)
+    {
+        Read = read;
+    }
+    public Long getClusterCountPF()
+    {
+        return clusterCountPF;
+    }
+
+    public void setClusterCountPF(Long clusterCountPF)
+    {
+        this.clusterCountPF = clusterCountPF;
+    }
+
+    public Long getClusterCountRaw()
+    {
+        return clusterCountRaw;
+    }
+
+    public void setClusterCountRaw(Long clusterCountRaw)
+    {
+        this.clusterCountRaw = clusterCountRaw;
+    }
+
+    public Long getLaneyield()
+    {
+        return laneyield;
+    }
+
+    public void setLaneyield(Long laneyield)
+    {
+        this.laneyield = laneyield;
+    }
+}
\ No newline at end of file
-- 
GitLab