diff --git a/mcc/src/client/components/RequestUtils.tsx b/mcc/src/client/components/RequestUtils.tsx
index b25c4a8e6..4bca1478b 100644
--- a/mcc/src/client/components/RequestUtils.tsx
+++ b/mcc/src/client/components/RequestUtils.tsx
@@ -48,6 +48,7 @@ export class AnimalRequestProps {
vetlastname: string;
vetemail: string;
vetfirstname: string;
+ shippingAcknowledgement: boolean;
objectid: string;
comments: string;
}
@@ -145,6 +146,7 @@ export async function queryRequestInformation(requestId, handleFailure) {
"iacucprotocol",
"grantnumber",
"applicationduedate",
+ "shippingAcknowledgement",
"comments",
"status"
],
diff --git a/mcc/src/client/components/dashboard/PieChart.tsx b/mcc/src/client/components/dashboard/PieChart.tsx
index b9a28ec86..ca6880b4b 100644
--- a/mcc/src/client/components/dashboard/PieChart.tsx
+++ b/mcc/src/client/components/dashboard/PieChart.tsx
@@ -1,11 +1,5 @@
import React, { useEffect, useRef } from 'react';
-import {
- Chart,
- ArcElement,
- Legend,
- PieController,
- Tooltip
-} from 'chart.js';
+import { ArcElement, Chart, Legend, PieController, Tooltip } from 'chart.js';
Chart.register(ArcElement, Legend, PieController, Tooltip);
@@ -21,14 +15,12 @@ const colors = [
"#999999"
];
-export default function PieChart(props) {
+export default function PieChart(props: {demographics: [], fieldName: string, cutout?: string, collapseBelow?: number }) {
const canvas = useRef(null);
- const { demographics } = props;
- const { fieldName } = props;
- const { cutout } = props || 0;
+ const { demographics, fieldName, cutout = '0', collapseBelow = 0 } = props;
- const collectedData = demographics.reduce((acc, curr) => {
+ const collectedData = demographics.reduce((acc, curr) => {
const value = curr[fieldName] === null ? 'Unknown' : curr[fieldName];
if (acc[value]) {
acc[value] = acc[value] + 1;
@@ -37,7 +29,31 @@ export default function PieChart(props) {
}
return acc;
- }, {});
+ }, new Map
())
+
+ if (collapseBelow) {
+ const total = Object.keys(collectedData).reduce((sum, keyName) => {
+ sum += collectedData[keyName]
+
+ return sum
+ }, 0)
+
+ const otherValue = Object.keys(collectedData).reduce((sum, keyName) => {
+ const val = collectedData[keyName]
+ const fraction = val / total
+ if (fraction < collapseBelow) {
+ delete collectedData[keyName]
+ sum += val
+ }
+
+ return sum
+ }, 0)
+
+ if (otherValue) {
+ collectedData['Other'] = otherValue
+ }
+ }
+
const labels = Object.keys(collectedData).sort(Intl.Collator().compare);
const data = labels.map(label => collectedData[label]);
diff --git a/mcc/src/client/entryPoints.js b/mcc/src/client/entryPoints.js
index 9063de69b..2f2cf21e4 100644
--- a/mcc/src/client/entryPoints.js
+++ b/mcc/src/client/entryPoints.js
@@ -24,12 +24,13 @@ module.exports = {
name: 'geneticsPlot',
title: 'Marmoset Genetics',
permissionClasses: ['org.labkey.api.security.permissions.ReadPermission'],
- path: './src/client/GeneticsPlot'
+ path: './src/client/GeneticsPlot',
}, {
name: 'geneticsPlotWebpart',
title: 'Marmoset Genetics',
permissionClasses: ['org.labkey.api.security.permissions.ReadPermission'],
- path: './src/client/GeneticsPlot/webpart'
+ path: './src/client/GeneticsPlot/webpart',
+ generateLib: true
},{
name: 'u24Dashboard',
title: 'U24 Dashboard',
diff --git a/mcc/src/org/labkey/mcc/MccModule.java b/mcc/src/org/labkey/mcc/MccModule.java
index c52176612..11292760b 100644
--- a/mcc/src/org/labkey/mcc/MccModule.java
+++ b/mcc/src/org/labkey/mcc/MccModule.java
@@ -77,7 +77,7 @@ public String getName()
@Override
public @Nullable Double getSchemaVersion()
{
- return 20.018;
+ return 20.019;
}
@Override
diff --git a/mcc/src/org/labkey/mcc/MccUserSchema.java b/mcc/src/org/labkey/mcc/MccUserSchema.java
index 004814851..71912fc5d 100644
--- a/mcc/src/org/labkey/mcc/MccUserSchema.java
+++ b/mcc/src/org/labkey/mcc/MccUserSchema.java
@@ -271,6 +271,7 @@ private TableInfo getGenomicsQuery()
" d.date,\n" +
" d.datatype,\n" +
" d.sra_accession,\n" +
+ " d.total_reads,\n" +
" d.objectid,\n" +
" d.container\n" +
"\n" +
diff --git a/mcc/src/org/labkey/mcc/etl/PopulateGeneticDataStep.java b/mcc/src/org/labkey/mcc/etl/PopulateGeneticDataStep.java
index 9e27a7c4e..06feea72d 100644
--- a/mcc/src/org/labkey/mcc/etl/PopulateGeneticDataStep.java
+++ b/mcc/src/org/labkey/mcc/etl/PopulateGeneticDataStep.java
@@ -68,7 +68,7 @@ private void populateGeneticData(PipelineJob job) throws PipelineJobException
{
//first select all rows from remote table
SelectRowsCommand sr = new SelectRowsCommand(MccSchema.NAME, "genomicDatasetsSource");
- sr.setColumns(Arrays.asList("Id", "date", "datatype", "sra_accession"));
+ sr.setColumns(Arrays.asList("Id", "date", "datatype", "sra_accession", "total_reads"));
TableInfo aggregatedDemographics = QueryService.get().getUserSchema(job.getUser(), job.getContainer(), MccSchema.NAME).getTable("aggregatedDemographics");
@@ -104,6 +104,7 @@ private void populateGeneticData(PipelineJob job) throws PipelineJobException
newRow.put("date", x.get("date"));
newRow.put("datatype", x.get("datatype"));
newRow.put("sra_accession", x.get("sra_accession"));
+ newRow.put("total_reads", x.get("total_reads"));
toInsert.get(target).add(newRow);
});
diff --git a/mcc/test/src/org/labkey/test/tests/mcc/MccTest.java b/mcc/test/src/org/labkey/test/tests/mcc/MccTest.java
index 300e78234..9c5caf4f7 100644
--- a/mcc/test/src/org/labkey/test/tests/mcc/MccTest.java
+++ b/mcc/test/src/org/labkey/test/tests/mcc/MccTest.java
@@ -463,6 +463,7 @@ else if ("radio".equals(inputType))
new FormElement("existing-nhp-facilities", "existingnhpfacilities", "Existing NHP facilities").select("existing"),
new FormElement("animal-welfare", "animalwelfare", "welfare").inputType("textarea"),
new FormElement("certify", "certify", true).checkBox(),
+ new FormElement("shippingAcknowledgement", "shippingAcknowledgement", true).checkBox(),
new FormElement("vet-last-name", "vetlastname", "vet last name"),
new FormElement("vet-first-name", "vetfirstname", "vet first name"),
new FormElement("vet-email", "vetemail", "vet@email.com"),
diff --git a/primeseq/src/org/labkey/primeseq/etl/VerifyRowCount.java b/primeseq/src/org/labkey/primeseq/etl/VerifyRowCount.java
index 95d0c2f2c..b1dcd8609 100644
--- a/primeseq/src/org/labkey/primeseq/etl/VerifyRowCount.java
+++ b/primeseq/src/org/labkey/primeseq/etl/VerifyRowCount.java
@@ -1,6 +1,7 @@
package org.labkey.primeseq.etl;
import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.Logger;
import org.jetbrains.annotations.NotNull;
import org.labkey.api.collections.CaseInsensitiveHashMap;
@@ -50,7 +51,8 @@ private enum Settings
destSchema(true),
destQuery(true),
destColumn(true),
- destAdditionalFilters(false);
+ destAdditionalFilters(false),
+ reportOnly(false);
private final boolean _isRequired;
@@ -106,6 +108,11 @@ public void setSettings(Map settings)
_settings.putAll(settings);
}
+ private boolean isReportOnly()
+ {
+ return _settings.containsKey(Settings.reportOnly.name()) && Boolean.parseBoolean(_settings.get(Settings.reportOnly.name()));
+ }
+
private DataIntegrationService.RemoteConnection getRemoteDataSource(String name, Container c, Logger log) throws IllegalStateException
{
DataIntegrationService.RemoteConnection rc = DataIntegrationService.get().getRemoteConnection(name, c, log);
@@ -259,7 +266,13 @@ private void verifyRows(PipelineJob job) throws PipelineJobException
if (source != dest)
{
- job.getLogger().error("Row counts do not match (source: {}, dest: {})!", source, dest);
+ if (isReportOnly()) {
+ job.getLogger().info("Row counts do not match (source: {}, dest: {})!", source, dest);
+ }
+ else
+ {
+ job.getLogger().error("Row counts do not match (source: {}, dest: {})!", source, dest);
+ }
}
}
}
diff --git a/primeseq/src/org/labkey/primeseq/pipeline/SequenceJobResourceAllocator.java b/primeseq/src/org/labkey/primeseq/pipeline/SequenceJobResourceAllocator.java
index c213266fd..b7921c6a3 100644
--- a/primeseq/src/org/labkey/primeseq/pipeline/SequenceJobResourceAllocator.java
+++ b/primeseq/src/org/labkey/primeseq/pipeline/SequenceJobResourceAllocator.java
@@ -96,6 +96,11 @@ private int getAlignerIndexMem(PipelineJob job)
}
}
}
+ else if (job.getClass().getName().endsWith("ReferenceLibraryPipelineJob"))
+ {
+ // This almost always includes bwa-mem
+ return 72;
+ }
return 36;
}
@@ -179,8 +184,8 @@ public Integer getMaxRequestMemory(PipelineJob job)
if (isGeneticsTask(job))
{
- job.getLogger().debug("setting memory to 72");
- return 72;
+ job.getLogger().debug("setting memory to 96");
+ return 96;
}
if (isCacheAlignerIndexesTask(job))