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 e413f57456d7afe31cda5145edf3cacdd229c4e1..b75d90f40e11a029b179d4437806a390ec28a930 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 cb311ebd484f0dacfca6c8c37d2766f357ca1978..cd65b689f797ad14c61b28c07cd7173b8b17b18e 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 0000000000000000000000000000000000000000..7f6865e89ec52efbf1fc34dbac8ec4a2a759e317 --- /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> + * <LaneResultsSummary> + * <Read> + * <readNumber>1</readNumber> + * <Lane> + * <laneNumber>1</laneNumber> + * <clusterCountPF> + * <mean>251107</mean> + * <stdev>9934</stdev> + * <sumsq>11841370000</sumsq> + * </clusterCountPF> + * <clusterCountRaw> + * <mean>290967</mean> + * <stdev>12357</stdev> + * <sumsq>18322720000</sumsq> + * </clusterCountRaw> + * <laneYield>2290093</laneYield> + * <oneSig> + * <mean>497</mean> + * <stdev>61</stdev> + * <sumsq>447654</sumsq> + * </oneSig> + * <percentClustersPF> + * <mean>86.32</mean> + * <stdev>1.66</stdev> + * <sumsq>331.22</sumsq> + * </percentClustersPF> + * <signal20AsPctOf1> + * <mean>81.60</mean> + * <stdev>6.26</stdev> + * <sumsq>4700.89</sumsq> + * </signal20AsPctOf1> + * </Lane> + * ... + * </Read> + * </LaneResultsSummary> + * </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