Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions mGAP/resources/credits/dependencies.txt
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
# direct external dependencies for project :server:modules:BimberLabKeyModules:mGAP
htsjdk-2.14.3.jar
3 changes: 2 additions & 1 deletion mGAP/resources/etls/prime-seq.xml
Original file line numberDiff line numberDiff line change
Expand Up@@ -11,9 +11,10 @@
<column>gender</column>
<column>species</column>
<column>geographic_origin</column>
<column>center</column>
</sourceColumns>
</source>
<destination schemaName="laboratory" queryName="subjects" targetOption="truncate">
<destination schemaName="mgap" queryName="demographics" targetOption="truncate">
<columnTransforms>

</columnTransforms>
Expand Down
9 changes: 9 additions & 0 deletions mGAP/resources/queries/mGAP/subjectsSource.query.xml
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
<query xmlns="http://labkey.org/data/xml/query">
<metadata>
<tables xmlns="http://labkey.org/data/xml">
<table tableName="" tableDbType="TABLE">
<pkColumnName>subjectName</pkColumnName>
</table>
</tables>
</metadata>
</query>
15 changes: 11 additions & 4 deletions mGAP/resources/queries/mGAP/subjectsSource.sql
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,15 @@
SELECT
m.externalAlias as subjectName,
s.gender,
s.species,
s.geographic_origin
coalesce(s.gender, d.gender) as gender,
coalesce(s.species, d.species) as species,
coalesce(s.geographic_origin, d.geographic_origin) as geographic_origin,
CASE
WHEN d.center IS NOT NULL THEN d.center
WHEN s.subjectname IS NOT NULL THEN 'ONPRC'
ELSE NULL END as center,
d.status as status

FROM mgap.animalMapping m
JOIN laboratory.subjects s ON (m.subjectname = s.subjectname)
LEFT JOIN laboratory.subjects s ON (m.subjectname = s.subjectname)
LEFT JOIN mgap.demographics d ON (m.subjectname = d.subjectname)
WHERE (s.subjectname IS NOT NULL OR d.subjectname IS NOT NULL)
17 changes: 17 additions & 0 deletions mGAP/resources/schemas/dbscripts/postgresql/mgap-16.55-16.56.sql
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
CREATE TABLE mGAP.demographics (
rowid serial,
subjectname varchar(100),
species varchar(100),
gender varchar(100),
geographic_origin varchar(100),
center varchar(1000),
status varchar(1000),

container entityid,
created timestamp,
createdby userid,
modified timestamp,
modifiedby userid,

CONSTRAINT PK_demographics PRIMARY KEY (rowid)
);
17 changes: 17 additions & 0 deletions mGAP/resources/schemas/dbscripts/sqlserver/mgap-16.55-16.56.sql
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
CREATE TABLE mGAP.demographics (
rowid int identity(1,1),
subjectname varchar(100),
species varchar(100),
gender varchar(100),
geographic_origin varchar(100),
center varchar(1000),
status varchar(1000),

container entityid,
created datetime,
createdby userid,
modified datetime,
modifiedby userid,

CONSTRAINT PK_demographics PRIMARY KEY (rowid)
);
76 changes: 76 additions & 0 deletions mGAP/resources/schemas/mgap.xml
Original file line numberDiff line numberDiff line change
Expand Up@@ -962,4 +962,80 @@
</item>
</buttonBarOptions>
</table>
<table tableName="demographics" tableDbType="TABLE" useColumnOrder="true">
<javaCustomizer class="org.labkey.ldk.query.DefaultTableCustomizer" />
<pkColumnName>rowid</pkColumnName>
<tableTitle>Supplemental Demographics</tableTitle>
<auditLogging>DETAILED</auditLogging>
<columns>
<column columnName="rowid">
<isAutoInc>true</isAutoInc>
<shownInInsertView>false</shownInInsertView>
<shownInUpdateView>false</shownInUpdateView>
<isUserEditable>false</isUserEditable>
<columnTitle>Row Id</columnTitle>
</column>
<column columnName="subjectname">
<columnTitle>Subject Name</columnTitle>
<nullable>false</nullable>
</column>
<column columnName="species">
<columnTitle>Species</columnTitle>
<fk>
<fkDbSchema>laboratory</fkDbSchema>
<fkTable>species</fkTable>
<fkColumnName>common_name</fkColumnName>
<fkDisplayColumnName useRawValue="true"/>
</fk>
</column>
<column columnName="gender">
<columnTitle>Gender</columnTitle>
<fk>
<fkDbSchema>laboratory</fkDbSchema>
<fkTable>genders</fkTable>
<fkColumnName>code</fkColumnName>
<fkDisplayColumnName useRawValue="true"/>
</fk>
</column>
<column columnName="geographic_origin">
<columnTitle>Geographic Origin</columnTitle>
<fk>
<fkDbSchema>laboratory</fkDbSchema>
<fkTable>geographic_origins</fkTable>
<fkColumnName>origin</fkColumnName>
<fkDisplayColumnName useRawValue="true"/>
</fk>
</column>
<column columnName="center">
<columnTitle>Center</columnTitle>
</column>
<column columnName="status">
<columnTitle>Status</columnTitle>
</column>
<column columnName="container">
<isHidden>true</isHidden>
</column>
<column columnName="createdby">
<isHidden>true</isHidden>
</column>
<column columnName="created">
<isUserEditable>false</isUserEditable>
<shownInInsertView>false</shownInInsertView>
<shownInUpdateView>false</shownInUpdateView>
<nullable>true</nullable>
<isHidden>true</isHidden>
</column>
<column columnName="modifiedby">
<isHidden>true</isHidden>
</column>
<column columnName="modified">
<isUserEditable>false</isUserEditable>
<shownInInsertView>false</shownInInsertView>
<shownInUpdateView>false</shownInUpdateView>
<nullable>true</nullable>
<isHidden>true</isHidden>
</column>
</columns>
</table>

</tables>
4 changes: 0 additions & 4 deletions mGAP/resources/views/admin.html
Original file line numberDiff line numberDiff line change
Expand Up@@ -22,10 +22,6 @@
xtype: 'ldk-linkbutton',
text: 'Manage JBrowse Tracks',
href: LABKEY.ActionURL.buildURL('query', 'executeQuery', null, {schemaName: 'mgap', queryName: 'releaseTracks'})
},{
xtype: 'ldk-linkbutton',
text: 'Manage Animal/Track Subsets',
href: LABKEY.ActionURL.buildURL('query', 'executeQuery', null, {schemaName: 'mgap', queryName: 'releaseTrackSubsets'})
}]
});

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -19,7 +19,6 @@
import org.labkey.api.query.QueryService;
import org.labkey.api.query.UserSchema;
import org.labkey.api.util.GUID;
import org.labkey.api.util.JobRunner;
import org.labkey.api.util.PageFlowUtil;
import org.labkey.mgap.mGAPSchema;

Expand DownExpand Up@@ -310,6 +309,6 @@ protected String getDatabaseName()

protected String getTrackJson()
{
return "{\"category\":\"mGAP Variant Catalog\",\"visibleByDefault\": true,\"ensemblId\":\"Macaca_mulatta\",\"additionalFeatureMsg\":\"<h2>**The annotations below are primarily derived from human data sources (not macaque), and must be viewed in that context.</h2>\"}";
return "{\"category\":\"mGAP Variant Catalog\",\"visibleByDefault\": true,\",\"ensemblUrl\":\"jul2019.archive.ensembl.org\",\"ensemblId\":\"Macaca_mulatta\",\"additionalFeatureMsg\":\"<h2>**The annotations below are primarily derived from human data sources (not macaque), and must be viewed in that context.</h2>\"}";
}
}
65 changes: 65 additions & 0 deletions mGAP/src/org/labkey/mgap/mGAPDemographicsSource.java
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
package org.labkey.mgap;

import org.labkey.api.collections.CaseInsensitiveHashMap;
import org.labkey.api.data.CompareType;
import org.labkey.api.data.Container;
import org.labkey.api.data.SimpleFilter;
import org.labkey.api.data.TableInfo;
import org.labkey.api.data.TableSelector;
import org.labkey.api.jbrowse.DemographicsSource;
import org.labkey.api.module.ModuleLoader;
import org.labkey.api.query.FieldKey;
import org.labkey.api.query.QueryService;
import org.labkey.api.security.User;

import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class mGAPDemographicsSource implements DemographicsSource
{

@Override
public Map<String, Map<String, Object>> resolveSubjects(List<String> subjects, Container c, User u)
{
Map<String, Map<String, Object>> ret = new HashMap<>();

TableInfo ti = QueryService.get().getUserSchema(u, c, mGAPSchema.NAME).getTable(mGAPSchema.TABLE_DEMOGRAPHICS);
Set<String> fields = new LinkedHashSet<>(getFields().keySet());
SimpleFilter filter = new SimpleFilter(FieldKey.fromString("subjectname"), subjects, CompareType.IN);
fields.add("subjectname");
new TableSelector(ti, fields, filter, null).forEachResults(rs -> {
Map<String, Object> map = new CaseInsensitiveHashMap<>();
for (String field : getFields().keySet())
{
map.put(field, rs.getObject(FieldKey.fromString(field)));
}

ret.put(rs.getString(FieldKey.fromString("subjectname")), map);
});

return ret;
}

@Override
public LinkedHashMap<String, String> getFields()
{
LinkedHashMap ret = new LinkedHashMap();
ret.put("gender", "Gender");
ret.put("species", "Species");
ret.put("center", "Center");
ret.put("geographic_origin", "Geographic Origin");
ret.put("status", "Status");

return ret;
}

@Override
public boolean isAvailable(Container c, User u)
{
return c.getActiveModules().contains(ModuleLoader.getInstance().getModule(mGAPModule.class));
}
}
5 changes: 4 additions & 1 deletion mGAP/src/org/labkey/mgap/mGAPModule.java
Original file line numberDiff line numberDiff line change
Expand Up@@ -24,6 +24,7 @@
import org.labkey.api.data.SimpleFilter;
import org.labkey.api.data.Sort;
import org.labkey.api.data.TableSelector;
import org.labkey.api.jbrowse.JBrowseService;
import org.labkey.api.ldk.ExtendedSimpleModule;
import org.labkey.api.ldk.LDKService;
import org.labkey.api.ldk.buttons.ShowBulkEditButton;
Expand DownExpand Up@@ -57,7 +58,7 @@ public String getName()
@Override
public double getVersion()
{
return 16.55;
return 16.56;
}

@Override
Expand All@@ -78,6 +79,8 @@ public void doStartupAfterSpringConfig(ModuleContext moduleContext)

NotificationService.get().registerNotification(new mGAPUserNotification(this));

JBrowseService.get().registerDemographicsSource(new mGAPDemographicsSource());

new PipelineStartup();
}

Expand Down
2 changes: 2 additions & 0 deletions mGAP/src/org/labkey/mgap/mGAPSchema.java
Original file line numberDiff line numberDiff line change
Expand Up@@ -34,6 +34,8 @@ public class mGAPSchema
public static final String TABLE_TRACKS_PER_RELEASE = "tracksPerRelease";
public static final String TABLE_PHENOTYPES = "phenotypes";
public static final String TABLE_PEDIGREE_OVERRIDES = "pedigreeOverrides";
public static final String TABLE_DEMOGRAPHICS = "demographics";
public static final String TABLE_SUBJECT_SOURCE = "subjectsSource";


public static mGAPSchema getInstance()
Expand Down
6 changes: 3 additions & 3 deletions mGAP/src/org/labkey/mgap/pipeline/mGapReleaseGenerator.java
Original file line numberDiff line numberDiff line change
Expand Up@@ -165,7 +165,7 @@ public Processor()
public void init(PipelineJob job, SequenceAnalysisJobSupport support, List<SequenceOutputFile> inputFiles, JSONObject params, File outputDir, List<RecordedAction> actions, List<SequenceOutputFile> outputsToCreate) throws UnsupportedOperationException, PipelineJobException
{
job.getLogger().info("writing track/subset data to file");
TableInfo releaseTrackSubsets = QueryService.get().getUserSchema(job.getUser(), (job.getContainer().isWorkbook() ? job.getContainer().getParent() : job.getContainer()), mGAPSchema.NAME).getTable(mGAPSchema.TABLE_RELEASE_TRACKS);
TableInfo releaseTracks = QueryService.get().getUserSchema(job.getUser(), (job.getContainer().isWorkbook() ? job.getContainer().getParent() : job.getContainer()), mGAPSchema.NAME).getTable(mGAPSchema.TABLE_RELEASE_TRACKS);

Set<FieldKey> toSelect = new HashSet<>();
toSelect.add(FieldKey.fromString("trackName"));
Expand All@@ -174,13 +174,13 @@ public void init(PipelineJob job, SequenceAnalysisJobSupport support, List<Seque
toSelect.add(FieldKey.fromString("isprimarytrack"));
toSelect.add(FieldKey.fromString("vcfId"));
toSelect.add(FieldKey.fromString("vcfId/dataId"));
Map<FieldKey, ColumnInfo> colMap = QueryService.get().getColumns(releaseTrackSubsets, toSelect);
Map<FieldKey, ColumnInfo> colMap = QueryService.get().getColumns(releaseTracks, toSelect);

Set<String> distinctTracks = new HashSet<>();
File trackFile = getTrackListFile(outputDir);
try (CSVWriter writer = new CSVWriter(PrintWriters.getPrintWriter(trackFile), '\t', CSVWriter.NO_QUOTE_CHARACTER))
{
new TableSelector(releaseTrackSubsets, colMap.values(), null, null).forEachResults(rs -> {
new TableSelector(releaseTracks, colMap.values(), null, null).forEachResults(rs -> {
if (rs.getObject(FieldKey.fromString("vcfId")) == null)
{
boolean isPrimary = rs.getObject(FieldKey.fromString("isprimarytrack")) != null && rs.getBoolean(FieldKey.fromString("isprimarytrack"));
Expand Down
24 changes: 17 additions & 7 deletions mGAP/src/org/labkey/mgap/query/SourceDisplayColumnFactory.java
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
package org.labkey.mgap.query;

import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import org.labkey.api.data.ColumnInfo;
import org.labkey.api.data.DataColumn;
import org.labkey.api.data.DisplayColumn;
Expand All@@ -14,6 +15,8 @@

public class SourceDisplayColumnFactory implements DisplayColumnFactory
{
private static final Logger _log = Logger.getLogger(SourceDisplayColumnFactory.class);

@Override
public DisplayColumn createRenderer(ColumnInfo colInfo)
{
Expand All@@ -40,14 +43,21 @@ public void renderGridCellContents(RenderContext ctx, Writer out) throws IOExcep
if (identifier != null && identifier.contains(":"))
{
String[] parts = identifier.split(":");
switch (parts[0])
if (parts.length != 2)
{
_log.error("Invalid variant identifier: " + val, new Exception());
}
else
{
case "ClinVar":
if (!StringUtils.isEmpty(parts[1]))
{
url = "https://www.ncbi.nlm.nih.gov/clinvar/variation/" + parts[1] + "/";
}
break;
switch (parts[0])
{
case "ClinVar":
if (!StringUtils.isEmpty(parts[1]))
{
url = "https://www.ncbi.nlm.nih.gov/clinvar/variation/" + parts[1] + "/";
}
break;
}
}
}

Expand Down
Original file line numberDiff line numberDiff line change
Expand Up@@ -99,7 +99,7 @@ public void renderGridCellContents(RenderContext ctx, Writer out) throws IOExcep
//Ensembl does use chr or padded names.
String contigE = contig.replaceAll("chr", "");
contigE = contigE.replaceAll("^0", "");
String url = "https://www.ensembl.org/Macaca_mulatta/Location/View?db=core;r=" + contigE + ":" + start +"-" + stop;
String url = "https://jul2019.archive.ensembl.org/Macaca_mulatta/Location/View?db=core;r=" + contigE + ":" + start +"-" + stop;
out.write(delim);
out.write("<a class=\"labkey-text-link\" href=\"" + url + "\");\">View Region in Ensembl</a>");
}
Expand Down
4 changes: 4 additions & 0 deletions mGAP/src/org/labkey/mgap/query/mGAPUserSchema.java
Original file line numberDiff line numberDiff line change
Expand Up@@ -47,6 +47,10 @@ protected TableInfo createWrappedTable(String name, @NotNull TableInfo sourceTab
// TODO: assert cf is null or not default?
return new ContainerScopedTable<>(this, sourceTable, cf, "subjectname").init();
}
else if (mGAPSchema.TABLE_DEMOGRAPHICS.equalsIgnoreCase(name))
{
return new ContainerScopedTable<>(this, sourceTable, cf, "subjectname").init();
}
else if (mGAPSchema.TABLE_VARIANT_CATALOG_RELEASES.equalsIgnoreCase(name))
{
return createWrappedVariantTable(name, sourceTable, cf);
Expand Down
Loading