diff --git a/.qwe.json.swp b/.qwe.json.swp new file mode 100644 index 000000000..c2798b0a6 Binary files /dev/null and b/.qwe.json.swp differ diff --git a/grails-app/conf/Config.groovy b/grails-app/conf/Config.groovy index b862e37d2..b20a2f376 100755 --- a/grails-app/conf/Config.groovy +++ b/grails-app/conf/Config.groovy @@ -144,7 +144,8 @@ digawsprodstrokeKB = new ServerBean("KB-prod-stroke-2017-aws", "http://ec2-34-20 digawsdemoibdKB = new ServerBean("KB-ibd-demo-2017-aws", "http://ec2-54-90-219-234.compute-1.amazonaws.com:8090/dccservices/") // this will be your default -defaultRestServer = digawsdevnewKB +defaultRestServer = digawsqanewKB + getRestServerList = [ digdevlocalServer, @@ -290,9 +291,17 @@ environments { // grails.serverURL = "http://stroke-qasrvr-1.us-east-1.elasticbeanstalk.com" + +// grails.serverURL = "http://www.type2diabetesgenetics.org" + // grails.serverURL = "http://www.type2diabetesgenetics.org" + + // grails.serverURL = "http://variant2function.org" + + // grails.serverURL = "http://variant2function.org" - grails.serverURL = "http://demo52k.us-east-1.elasticbeanstalk.com" +// grails.serverURL = "http://demo52k.us-east-1.elasticbeanstalk.com" + // grails.serverURL = "http://ci-env.elasticbeanstalk.com" // grails.serverURL = "http://type2diabetes-dev.elasticbeanstalk.com" // grails.serverURL = "http://type2diabetesgen-qasrvr.elasticbeanstalk.com" @@ -312,8 +321,13 @@ environments { // grails.serverURL = "http://strokeprodnew.us-east-1.elasticbeanstalk.com" // grails.serverURL = "http://broadcvdi.org" // CVDKP (MI portal) production -// grails.serverURL = "http://mi-qasrvr.us-east-1.elasticbeanstalk.com" // CVDKP (MI portal) test site -// grails.serverURL = "http://miprodportal.us-east-1.elasticbeanstalk.com" + +// grails.serverURL = "http://mi-qasrvr.us-east-1.elasticbeanstalk.com"// CVDKP (MI portal) test site + +// grails.serverURL = "http://alsportal.us-east-1.elasticbeanstalk.com" + grails.serverURL = "http://alskp.org" + + // grails.serverURL = "http://miprodportal.us-east-1.elasticbeanstalk.com" // grails.serverURL = "http://miprod-env.us-east-1.elasticbeanstalk.com" // grails.serverURL = "http://sleepportal-prodsrvr.us-east-1.elasticbeanstalk.com" @@ -380,7 +394,7 @@ oauth { successUri = "${baseURL}/springSecurityOAuth/onSuccess" // never used? failureUri = "${baseURL}/springSecurityOAuth/onFailure" // never used? callback = "${baseURL}/springSecurityOAuth/codeExchange?provider=google" - scope = 'https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email' + scope = 'openid email profile' } } @@ -388,6 +402,8 @@ oauth { googleapi { baseGoogleUrl = 'www.googleapis.com' + openIdConnectUserInfoDomain = 'https://openidconnect.googleapis.com/v1/userinfo' + oauth2AccessIdTokenDomain = 'https://oauth2.googleapis.com/token' } @@ -561,7 +577,9 @@ grails.plugin.springsecurity.userLookup.authorityJoinClassName = 'org.broadinsti grails.plugin.springsecurity.authority.className = 'org.broadinstitute.mpg.people.Role' -portal.type.override = "t2d" // options are "t2d", "stroke", "mi", "ibd", "epilepsy", or "sleep". What is the portal type for all nonsystem users? + + +portal.type.override = "als" // options are "t2d", "stroke", "mi", "ibd", "epilepsy", or "sleep". What is the portal type for all nonsystem users? portal.data.versionDesignator = [ new PortalVersionBean("t2d", // label for this portal type @@ -706,6 +724,41 @@ portal.data.versionDesignator = [ new PortalVersionBean("t2d", // label for 1, 1 ), + new PortalVersionBean("als", + "ALS", + "mdv60", + "ALS", // make sure your default phenotype exists in your default data set + "ExSeq_ALS2018_eu_mdv60",// used to pick a default data set for a gene query + ["8_Genic_enhancer","9_Active_enhancer_1","10_Active_enhancer_2","11_Weak_enhancer"], + ["8_Genic_enhancer","9_Active_enhancer_1","10_Active_enhancer_2","11_Weak_enhancer"], + ["AnteriorCaudate"], + ["PSYCHIATRIC", "NEUROLOGICAL"], // most important phenotype group name + [], + "[1,2]", + "GWAS_IBDGenomics_eu_mdv80", + "images/als/front_als_logo_2018.svg", + "portal.ALS.header.tagline", + [], + ["SOD1"], + [], + ["chr14:35,907,000-36,400,000"], + "images/als/front_als_banner_2018.png", + "", + "images/als/als_header_logo.svg", + "images/menu_bg_2017_5.png", + "false", + "", + "", + '2854182648437419920', + 0, + 1, + 0, + 1, + 0, + 0,0,0, + 0, + 0 + ), new PortalVersionBean("epilepsy", "Epilepsy", "mdv100", @@ -713,6 +766,7 @@ portal.data.versionDesignator = [ new PortalVersionBean("t2d", // label for "ExSeq_Epi25k_mdv100",// used to pick a default data set for a gene query ["8_Genic_enhancer","9_Active_enhancer_1","10_Active_enhancer_2","11_Weak_enhancer"], ["8_Genic_enhancer","9_Active_enhancer_1","10_Active_enhancer_2","11_Weak_enhancer"], + ["AnteriorCaudate"], ["PSYCHIATRIC"], // most important phenotype group name [], @@ -722,6 +776,7 @@ portal.data.versionDesignator = [ new PortalVersionBean("t2d", // label for "portal.epilepsy.header.tagline", [], ["CDKL5"], + [], ["chr14:35,907,000-36,400,000"], "images/epilepsy/front_epilepsy_bg_2018.png", @@ -732,6 +787,7 @@ portal.data.versionDesignator = [ new PortalVersionBean("t2d", // label for "", "", '5414069947481666863', + 0, 1, 0, @@ -741,6 +797,8 @@ portal.data.versionDesignator = [ new PortalVersionBean("t2d", // label for 0, 0 ), + + new PortalVersionBean("sleep", "Sleep", "mdv110", @@ -777,3 +835,5 @@ portal.data.versionDesignator = [ new PortalVersionBean("t2d", // label for 0 ) ] + + diff --git a/grails-app/controllers/org/broadinstitute/mpg/InformationalController.groovy b/grails-app/controllers/org/broadinstitute/mpg/InformationalController.groovy index 6b898bddb..79e5a6602 100755 --- a/grails-app/controllers/org/broadinstitute/mpg/InformationalController.groovy +++ b/grails-app/controllers/org/broadinstitute/mpg/InformationalController.groovy @@ -86,6 +86,9 @@ class InformationalController { render(view: 'dataSubmission') } + def alskpfaq() { + render(view: 'alskpfaq') + } def downloads() { render(view: 'downloads') } diff --git a/grails-app/controllers/org/broadinstitute/mpg/VariantSearchController.groovy b/grails-app/controllers/org/broadinstitute/mpg/VariantSearchController.groovy index 1d22c803e..c3a4a498f 100755 --- a/grails-app/controllers/org/broadinstitute/mpg/VariantSearchController.groovy +++ b/grails-app/controllers/org/broadinstitute/mpg/VariantSearchController.groovy @@ -6,10 +6,12 @@ import org.apache.juli.logging.LogFactory import org.broadinstitute.mpg.diabetes.MetaDataService import org.broadinstitute.mpg.diabetes.metadata.* import org.broadinstitute.mpg.diabetes.metadata.query.GetDataQueryHolder +import org.broadinstitute.mpg.diabetes.metadata.query.QueryFilter import org.broadinstitute.mpg.diabetes.util.PortalConstants import org.broadinstitute.mpg.meta.UserQueryContext import org.codehaus.groovy.grails.web.json.JSONArray import org.codehaus.groovy.grails.web.json.JSONObject +import org.scribe.builder.api.LinkedInApi import org.springframework.web.servlet.support.RequestContextUtils class VariantSearchController { @@ -271,6 +273,8 @@ class VariantSearchController { String geneName = params.gene String phenotypeName = params.phenotype String dataSetName = params.dataset + + LinkedHashMap extents = sharedToolsService.getGeneExpandedExtent( geneName,restServerService.EXPAND_ON_EITHER_SIDE_OF_GENE) String chromosome = extents.chrom if (chromosome?.startsWith('chr')){ @@ -279,41 +283,50 @@ class VariantSearchController { List filtersForQuery = [] if (chromosome!=null){ - filtersForQuery << """{"value":"${chromosome}:${extents.startExtent}-${extents.endExtent}","prop":"chromosome","comparator":"="}""".toString() + String defaultDataSet = restServerService.retrieveBeanForCurrentPortal().dataSet + String defaultPhenotype = restServerService.retrieveBeanForCurrentPortal().phenotype + + filtersForQuery << """{"gene":"${geneName}","prop":"gene","value":"${geneName}","comparator":"="}""".toString() + + } if ((dataSetName!=null) && (phenotypeName!=null)){ - org.broadinstitute.mpg.diabetes.metadata.Property property = metaDataService.getPropertyForPhenotypeAndSampleGroupAndMeaning(phenotypeName,dataSetName, - "ACA_PH",MetaDataService.METADATA_VARIANT) + org.broadinstitute.mpg.diabetes.metadata.Property property = metaDataService.getPropertyForPhenotypeAndSampleGroupAndMeaning(defaultPhenotype,defaultDataSet, + "AC",MetaDataService.METADATA_VARIANT) if (property){ - filtersForQuery << """{"phenotype":"${phenotypeName}","dataset":"${dataSetName}","prop":"${property.name}","value":"0","comparator":">"}]""".toString() + filtersForQuery << """{"phenotype":"${defaultPhenotype}","dataset":"${defaultDataSet}","prop":"${property.name}","value":"0","comparator":">"}]""".toString() } } else { - // let's provide a default data set + String defaultDataSet = restServerService.retrieveBeanForCurrentPortal().dataSet String defaultPhenotype = restServerService.retrieveBeanForCurrentPortal().phenotype - org.broadinstitute.mpg.diabetes.metadata.Property property1 = metaDataService.getPropertyForPhenotypeAndSampleGroupAndMeaning(defaultPhenotype,defaultDataSet, - "ACA_PH",MetaDataService.METADATA_VARIANT) - org.broadinstitute.mpg.diabetes.metadata.Property property2 = metaDataService.getPropertyForPhenotypeAndSampleGroupAndMeaning(defaultPhenotype,defaultDataSet, - "ACU_PH",MetaDataService.METADATA_VARIANT) - if (property1 && property2){ - filtersForQuery << """{"phenotype":"${defaultPhenotype}","dataset":"${defaultDataSet}","prop":"${property1.name}","value":"0","comparator":">"}""".toString() - filtersForQuery << """{"phenotype":"${defaultPhenotype}","dataset":"${defaultDataSet}","prop":"${property2.name}","value":"0","comparator":">"}]""".toString() + + org.broadinstitute.mpg.diabetes.metadata.Property property = metaDataService.getPropertyForPhenotypeAndSampleGroupAndMeaning(defaultPhenotype, defaultDataSet, + "AC_PH", MetaDataService.METADATA_VARIANT) + + if (property) { + filtersForQuery << """{"phenotype":"${defaultPhenotype}","dataset":"${defaultDataSet}","prop":"${property.name}","value":"0","comparator":">"}]""".toString() } + } + String defaultDataSet = restServerService.retrieveBeanForCurrentPortal().dataSet + String defaultPhenotype = restServerService.retrieveBeanForCurrentPortal().phenotype + //LinkedHashMap extraColumns = new LinkedHashMap<>() + List extraColumns = [] + extraColumns << """{"phenotype":"${defaultPhenotype}","dataset":"ExSeq_ALS2018_eu_mdv60","prop":"ACA_PH","value":"0","comparator":">"}]""".toString() - } if (filtersForQuery.size()>0) { if ((geneName!=null)&& (geneName.length()>0)){ - forward action: "launchAVariantSearch", params:[filters: "[${filtersForQuery.join(',')}]", specificGene:"${geneName}"] + forward action: "launchAVariantSearch", params:[filters: "[${filtersForQuery.join(',')}]", specificGene:"${geneName}", extraColumns:"[${extraColumns.join(',')}]"] return } else { forward action: "launchAVariantSearch", params:[filters: "[${filtersForQuery.join(',')}]"] return } } - forward controller:"home", action:"portalHome", params:[errorText:"No record for gene=${geneName}. Please try different gene"] + forward controller:"home", action:"portalHome", params:[errorText:"No record for gene=${geneName}. Please try a different gene name."] return } @@ -322,8 +335,18 @@ class VariantSearchController { String regionSpecification = params.region List filtersForQuery = [] LinkedHashMap extractedNumbers = restServerService.parseARange(regionSpecification) + String defaultDataSet = restServerService.retrieveBeanForCurrentPortal().dataSet + String defaultPhenotype = restServerService.retrieveBeanForCurrentPortal().phenotype if ((extractedNumbers.size()>0)&&(!extractedNumbers.error)){ filtersForQuery << """{"value":"${extractedNumbers.chromosome}:${extractedNumbers.start}-${extractedNumbers.end}","prop":"chromosome","comparator":"="}""".toString() + + org.broadinstitute.mpg.diabetes.metadata.Property property = metaDataService.getPropertyForPhenotypeAndSampleGroupAndMeaning(defaultPhenotype, defaultDataSet, + "AC_PH", MetaDataService.METADATA_VARIANT) + + if (property) { + filtersForQuery << """{"phenotype":"${defaultPhenotype}","dataset":"${defaultDataSet}","prop":"${property.name}","value":"0","comparator":">"}]""".toString() + } + forward action: "launchAVariantSearch", params:[filters: "[${filtersForQuery.join(',')}]"] return } @@ -338,7 +361,7 @@ class VariantSearchController { * @return */ def launchAVariantSearch() { - displayCombinedVariantSearch(params.filters, params.props, params.specificGene) + displayCombinedVariantSearch(params.filters, params.props, params.specificGene, params.extraColumns) } /*** @@ -989,11 +1012,38 @@ class VariantSearchController { LinkedHashMap requestedProperties = sharedToolsService.putPropertiesIntoHierarchy(properties) + if(filters.contains("ALS[ExSeq_ALS2018_eu_mdv60]AC_PH>0")){ + LinkedHashMap> requestedPpropertiesMap = new LinkedHashMap() + LinkedList pPropertyList = ["ACU_PH", "ACA_PH","HETA", "HOMA", "HETU", "HOMU", "MAF_PH"] + requestedPpropertiesMap.put("ExSeq_ALS2018_eu_mdv60",pPropertyList) + requestedProperties.put("pProperty",requestedPpropertiesMap) + } + // build up filters our data query GetDataQueryHolder getDataQueryHolder = GetDataQueryHolder.createGetDataQueryHolder(filters, searchBuilderService, metaDataService) // determine columns to display LinkedHashMap resultColumnsToDisplay = restServerService.getColumnsToDisplay("[${getDataQueryHolder.retrieveAllFiltersAsJson()}]", requestedProperties) + if(filters.contains("ALS[ExSeq_ALS2018_eu_mdv60]AC_PH>0")){ + LinkedHashMap datasetDpropertiesMap2 = new LinkedHashMap() + datasetDpropertiesMap2.put("ExSeq_EgnomAD_mdv60",["AC", "HOM", "HET","MAF"] ) + datasetDpropertiesMap2.put("WGS_WgnomAD_mdv60",["AC", "HOM","HET" ,"MAF"] ) + resultColumnsToDisplay["dproperty"].putAt("Additional controls",datasetDpropertiesMap2) + + LinkedHashMap datasetDpropertiesMap3 = new LinkedHashMap() + datasetDpropertiesMap3.put("ExSeq_EgnomAD_mdv60",[]) + datasetDpropertiesMap3.put("WGS_WgnomAD_mdv60",[]) + resultColumnsToDisplay["pproperty"].putAt("Additional controls",datasetDpropertiesMap3) + + LinkedHashMap datasetDpropertiesMap = new LinkedHashMap() + datasetDpropertiesMap.put("ExSeq_ALS2018_eu_mdv60",[]) + datasetDpropertiesMap.put("WGS_WgnomAD_mdv60",[]) + resultColumnsToDisplay["dproperty"].putAt("ALS",datasetDpropertiesMap) + + + + } + int pageStart = Integer.parseInt(params.start) int pageSize = Integer.parseInt(params.length) getDataQueryHolder.setPageStartAndSize(pageStart, pageSize) @@ -1080,6 +1130,15 @@ class VariantSearchController { String properties = URLDecoder.decode(propertiesRaw, "UTF-8") LinkedHashMap requestedProperties = sharedToolsService.putPropertiesIntoHierarchy(properties) + if(filters.contains("ALS[ExSeq_ALS2018_eu_mdv60]AC_PH>0")){ + LinkedHashMap> requestedPpropertiesMap = new LinkedHashMap() + LinkedList pPropertyList = ["ACU_PH", "ACA_PH","HETA", "HOMA", "HETU", "HOMU", "MAF_PH"] + requestedPpropertiesMap.put("ExSeq_ALS2018_eu_mdv60",pPropertyList) + //requestedPpropertiesMap.put("gnomad",[]) + requestedProperties.put("pProperty",requestedPpropertiesMap) + + } + /*** * package up as much of the kludgy workaround needed to avoid cross institution joins as we can */ @@ -1138,13 +1197,40 @@ class VariantSearchController { return } - // determine columns to display + + //if filter has more than AC_PH as filter then generate resultsColumnsToDisplay like this: + + LinkedHashMap resultColumnsToDisplay = restServerService.getColumnsToDisplay("[${getDataQueryHolder.retrieveAllFiltersAsJson()}]", requestedProperties) + + if(filters.contains("ALS[ExSeq_ALS2018_eu_mdv60]AC_PH>0")){ + LinkedHashMap datasetDpropertiesMap2 = new LinkedHashMap() + datasetDpropertiesMap2.put("ExSeq_EgnomAD_mdv60",["AC", "HOM", "HET","MAF"] ) + datasetDpropertiesMap2.put("WGS_WgnomAD_mdv60",["AC", "HOM", "HET","MAF"] ) + resultColumnsToDisplay["dproperty"].putAt("Additional controls",datasetDpropertiesMap2) + + LinkedHashMap datasetDpropertiesMap3 = new LinkedHashMap() + datasetDpropertiesMap3.put("ExSeq_EgnomAD_mdv60",[]) + datasetDpropertiesMap3.put("WGS_WgnomAD_mdv60",[]) + resultColumnsToDisplay["pproperty"].putAt("Additional controls",datasetDpropertiesMap3) + + LinkedHashMap datasetDpropertiesMap = new LinkedHashMap() + datasetDpropertiesMap.put("ExSeq_ALS2018_eu_mdv60",[]) + datasetDpropertiesMap.put("WGS_WgnomAD_mdv60",[]) + resultColumnsToDisplay["dproperty"].putAt("ALS",datasetDpropertiesMap) + + + } + + //you have to add Properties to resultColumnsToDisplay linkedHashMap so that addProperties can add them + JSONObject resultColumnsJsonObject = resultColumnsToDisplay as JSONObject // make the call to REST server getDataQueryHolder.addProperties(resultColumnsToDisplay) + + /*** * Temporary workaround: the federated KB does not yet support cross institution filtering. Detect those requests and prohibit them. */ @@ -1170,10 +1256,6 @@ class VariantSearchController { - - - - // get the number of variants that this query will return // do this here so it doesn't have to happen after every resort or change in the table getDataQueryHolder.isCount(true) @@ -1215,14 +1297,20 @@ class VariantSearchController { } - private void displayCombinedVariantSearch(String filters, String requestForAdditionalProperties,String specificGene) { + private void displayCombinedVariantSearch(String filters, String requestForAdditionalProperties,String specificGene, String extraColumns) { ArrayList listOfQueries = (new JsonSlurper()).parseText(filters) ArrayList listOfCodedFilters = parseFilterJson(listOfQueries); + ArrayList listOfExtraColumnsParsed = new ArrayList<>() + if(extraColumns != null){ + ArrayList listOfExtraColumns = (new JsonSlurper()).parseText(extraColumns) + listOfExtraColumnsParsed = parseFilterJson(listOfExtraColumns); + } + if (requestForAdditionalProperties == null || "".compareTo(requestForAdditionalProperties) == 0) { - // if there are no specified properties, default to these + // if there are no specified properties, dFefault to these requestForAdditionalProperties = - ["common-common-CLOSEST_GENE", + ["common-common-GENE", "common-common-VAR_ID", "common-common-DBSNP_ID", "common-common-Protein_change", @@ -1230,10 +1318,18 @@ class VariantSearchController { "common-common-CHROM", "common-common-POS", "common-common-Reference_Allele", - "common-common-Effect_Allele"].join(":") + "common-common-Effect_Allele", + "common-common-Allele_Frequency", + "common-common-Allele_Count", + "common-common-SIFT_PRED", + "common-common-PolyPhen_PRED", + "common-common-CADD_PHRED" + ].join(":") } GetDataQueryHolder getDataQueryHolder = GetDataQueryHolder.createGetDataQueryHolder(listOfCodedFilters, searchBuilderService, metaDataService) + + if (getDataQueryHolder.isValid()) { List encodedFilters = getDataQueryHolder.listOfEncodedFilters() List translatedFilters = [] @@ -1252,8 +1348,6 @@ class VariantSearchController { if (positioningInformation.size()>0){ regionSpecifier = "chr${positioningInformation.chromosomeSpecified}:${positioningInformation.beginningExtentSpecified}-${positioningInformation.endingExtentSpecified}" } - - List tempList = identifiedGenes.collect{return "\"$it\""}; JSONArray JsonGeneHolder = new JSONArray(); for (String text in tempList) { @@ -1277,6 +1371,7 @@ class VariantSearchController { // used for the adding/removing properties modal, // to know which properties are part of the search listOfQueries : listOfQueries as JSON, + listOfExtraColumnsParsed: listOfExtraColumnsParsed as JSON, // the URL-encoded parameters to go back to the search builder with the filters saved encodedParameters : urlEncodedFilters, // all the extra things added diff --git a/grails-app/i18n/informational.properties b/grails-app/i18n/informational.properties index b6f4ab4d1..54c9d42ad 100755 --- a/grails-app/i18n/informational.properties +++ b/grails-app/i18n/informational.properties @@ -173,7 +173,8 @@ contact.amp.t2dkp.team.list=Principal investigator Project managerLizz Caulkins\ Analytical and clinical contributorsJosep Mercader
Miriam Udler\ Team alumniMary Carmichael
Tad Jordan
Michael Sanders
David Siedzik
Scott Sutherland
Kaan Yuksel -contact.methods.team.title=Methods and Tool Development Teams +contact.als.team.list=Principal investigatorBenjamin Neale and ALSGENS Consortium\ + AnalystSali Farhan contact.methods.team.subtitle1=AMP Type 2 Diabetes Knowledge (T2DK) contact.methods.team_ampmethods=Principal InvestigatorDaniel MacArthurPrincipal Investigator\ Benjamin NealeJonathan Bloom
Konrad Karczewski
Cotton Seed
Matthew Solomonson @@ -350,6 +351,8 @@ informational.shared.traits.AFxBMI=AF-SNP BMI interaction informational.shared.traits.AFxHTN=AF-SNP hypertension interaction informational.shared.traits.AFxSEX=AF-SNP sex interaction informational.shared.traits.PRI=PR interval +informational.shared.traits.ALS=amyotrophic lateral sclerosis + informational.shared.traits.SleepChronotype=chronotype informational.shared.traits.SleepDuration=sleep duration @@ -632,7 +635,10 @@ informational.shared.publications.Yengo_2018_submitted=Genome-wide \ + association analyses identify new risk variants and the genetic architecture of amyotrophic lateral sclerosis. +informational.shared.publications.Farhan_2018_inPress=Exome Sequencing \ + in Amyotrophic Lateral Sclerosis Implicates a Novel Gene, DNAJC7, Encoding a Heat-Shock Protein informational.shared.publications.Gaulton_2016_NatGenet.author=Gaulton KJ informational.shared.publications.Wessel_2015_NatCommun.author=Wessel J @@ -706,6 +712,8 @@ informational.shared.publications.Gorski_2017_SciRep.author=Gorski M informational.shared.publications.Shungin_2015_Nature.author=Shungin D informational.shared.publications.Yengo_2018_submitted.author=Yengo L informational.shared.publications.Abecasis_2018_submitted.author=Abecasis G +informational.shared.publications.vanRheenen_2016_NatGenet.author=van Rheenen W +informational.shared.publications.Farhan_2018_inPress.author=Farhan SMK informational.shared.publications.Gaulton_2016_NatGenet.citation=Nat Genet. 2015 Dec;47(12):1415-25. doi: 10.1038/ng.3437. informational.shared.publications.Wessel_2015_NatCommun.citation=Nat Commun. 2015 Jan 29;6:5897. doi: 10.1038/ncomms6897. @@ -785,6 +793,8 @@ informational.shared.publications.Gorski_2017_SciRep.citation=Sci Rep. 2017 Apr informational.shared.publications.Shungin_2015_Nature.citation=Nature. 2015 Feb 12;518(7538):187-196. doi: 10.1038/nature14132 informational.shared.publications.Yengo_2018_submitted.citation=Submitted for publication. informational.shared.publications.Abecasis_2018_submitted.citation=Submitted for publication. +informational.shared.publications.vanRheenen_2016_NatGenet.citation=Nat Genet. 2016 Sep;48(9):1043-8. doi: 10.1038/ng.3622 +informational.shared.publications.Farhan_2018_inPress.citation=Nat Neurosci. 2019 Dec; 22(12): 1966–1974. doi: 10.1038/s41593-019-0530-0 informational.shared.projectpublications.Oxford=Oxford BioBank publication list informational.shared.projectpublications.gnomAD=See also the MacArthur lab publication list. @@ -997,6 +1007,7 @@ A "mega-meta-analysis," Project 3 involves data from 26,488 type 2 diabetes pati This diversity of ancestries is especially important to the study design. Variants that are tightly correlated by location in some ancestry groups (e.g., Europeans) may travel more independently in other groups (e.g., African Americans). Therefore, examining data from many different groups can help distinguish between true causal variants and those that are merely along for the ride.\

aboutTheData.epi.descr=This page lists datasets currently available in the Epilepsy Knowledge Portal. Filter the list by data type and/or by phenotype using the menu at the top. Click on a dataset name to see more details about it. +aboutTheData.als.descr=This page lists datasets currently available in the ALS Knowledge Portal. Filter the list by data type and/or by phenotype using the menu at the top. Click on a dataset name to see more details about it. aboutTheData.stroke.title=About the data aboutTheData.stroke.descr=This page lists datasets currently available in the Cerebrovascular Disease Knowledge Portal. Filter the list by data type and/or by phenotype using the menu at the top. Click on a dataset name to see more details about it. aboutTheData.stroke.datasets.race.title=Risk Assessment of Cerebrovascular Events (RACE) @@ -1267,21 +1278,36 @@ MI.policies.title=This page will describe policies for the MI knowledge Portal p informational.policies.MI.subheader1=The Cardiovascular Disease Knowledge Portal will serve as the gateway to a large and growing aggregation \ of data relevant to the genetics of cardiovascular disease and its complications, along with analyses, tools, and visualizations to interpret \ those data. +informational.policies.als.subheader1=The Amyotrophic Lateral Sclerosis Knowledge Portal will serve as the gateway to a large and growing aggregation \ + of data relevant to the genetics of ALS, along with analyses, tools, and visualizations to interpret \ + those data. informational.policies.MI.subheader2=The Broad Institute will aggregate data, support analyses, and continue to update capabilities to \ disseminate results relevant to the genetics of cardiovascular disease and related traits, while coordinating collaboration within the Portal. +informational.policies.als.subheader2=The Broad Institute will aggregate data, support analyses, and continue to update capabilities to \ + disseminate results relevant to the genetics of ALS and related traits, while coordinating collaboration within the Portal. informational.policies.MI.subheader3=Individual-level data will never be shared with CVDKP users. Individual-level data will reside in \ one or several data vaults behind a secure firewall. User-activated modules will be deployed behind the firewall to analyze the data or \ query precomputed results. The purpose of the CVDKP is to enable broad access to genetic information concerning cardiovascular disease \ in a form that meets user needs while maintaining individual privacy requirements. CVDKP users are encouraged to provide feedback on the \ extent to which the CVDKP meets those goals. +informational.policies.als.subheader3=Individual-level data will never be shared with ALSKP users. Individual-level data will reside in \ + one or several data vaults behind a secure firewall. User-activated modules will be deployed behind the firewall to analyze the data or \ + query precomputed results. The purpose of the ALSKP is to enable broad access to genetic information concerning ALS \ + in a form that meets user needs while maintaining individual privacy requirements. ALSKP users are encouraged to provide feedback on the \ + extent to which the ALSKP meets those goals. informational.policies.MI.google=To access the CVDKP, users must obtain a Google ID, which will be used for quality control and monitoring purposes. +informational.policies.als.google=To access the ALSKP, users must obtain a Google ID, which will be used for quality control and monitoring purposes. informational.policies.MI.conduct.section_4=
  • Users will not attempt to download any dataset in bulk from the Portal
  • Users will not attempt to identify or contact research participants
  • \
  • Users will protect data confidentiality
  • Users will not share any of the data with unauthorized users
  • Users will report any inadvertent data release, security breach, or other data \ management incidents of which they become aware
  • Users will abide by all applicable laws and regulations for handling genomic data
  • informational.policies.MI.citing=Users are welcome to cite the CVDKP in scientific publications. If users are citing a single dataset represented \ in the CVDKP, they should cite both the CVDKP and the relevant paper for that dataset. +informational.policies.als.citing=Users are welcome to cite the ALSKP in scientific publications. If users are citing a single dataset represented \ + in the ALSKP, they should cite both the ALSKP and the relevant paper for that dataset. informational.contact.MI.header1=Cardiovascular Disease Knowledge Portal Team +informational.contact.als.header1=ALS Knowledge Portal team informational.contact.MI.header2=Data Contributors +informational.contact.als-1=For questions or suggestions about the ALSKP web interface and tools, email the ALSKP team. informational.contact.MI-1=For questions or suggestions about the CVDKP web interface and tools, email the CVDKP team. informational.contact.MI-2=A complete list of Knowledge Portal project staff may be found at the \ Type 2 Diabetes Knowledge Portal. @@ -1317,10 +1343,49 @@ informational.about_MI.section7=Knowledge Portals are intended to be secureinviting to researchers who may want to contribute data and participate in analyses, organic in the continuous incorporation of scientific advances, modular \ in their analytical capabilities and user interfaces, automated, rigorous in the quality of data aggregation and returned results, versatile, and sustainable. informational.dataSubmission.title=Join the AMP T2D Knowledge Portal community! +informational.alsfaq.title=Frequently Asked Questions informational.dataSubmission.subtitle=We are interested in forming collaborations around new data, methods, and tools. We encourage researchers to contact us about \ new data relevant to the genetics of type 2 diabetes and related traits. We also welcome collaboration on development of general methods and tools for analysis and presentation \ of genetic association data for complex diseases and traits. informational.dataSubmission.FAQ.title=Some frequently asked questions: +informational.als.FAQ.title1=General: +informational.als.FAQ.question1=What is the ALS Knowledge Portal and how do I use it? +informational.als.FAQ.answer1=The ALS Knowledge Portal (ALSKP) enables browsing, searching, and analysis of human genetic information linked \ + to amyotrophic lateral sclerosis and related traits, while protecting the integrity and confidentiality of the underlying data. The ALSKP \ + is similar to the Project MinE Variant Browser, which \ + is an excellent resource for displaying variants from ALS whole genomes. +informational.als.FAQ.question2=How should I cite the ALS Knowledge Portal? +informational.als.FAQ.answer2=Please use the following citation when referring to data accessed via this portal: Amyotrophic Lateral \ + Sclerosis Knowledge Portal. Year Month Date of access; URL of page you are citing. Also, please cite Farhan et al., Exome \ + sequencing in amyotrophic lateral sclerosis implicates a novel gene, DNAJC7, encoding a heat-shock protein. \ + Nature Neuroscience 2019. +informational.als.FAQ.title2=Technical: +informational.als.FAQ.question3=What types of data are in the ALS Knowledge Portal? +informational.als.FAQ.answer3=Exome data from 3,864 ALS cases and 7,839 ethnically matched non-ALS controls. We also display \ + frequencies for each variant from gnomAD. +informational.als.FAQ.question4=What is the ethnicity of samples? +informational.als.FAQ.answer4=All samples were reported as Caucasian and this was confirmed by PCA. +informational.als.FAQ.question5=Which genome assembly does ALS Knowledge Portal use as a reference? +informational.als.FAQ.answer5=GRCh37/hg19 +informational.als.FAQ.question6=If you used exome sequencing, why are there intronic variants? +informational.als.FAQ.answer6=In addition to exons, regions from adjacent introns may be covered \ + in whole exome sequencing. These regions have been included in the ALSKP because they may impact protein expression (e.g., splice sites). +informational.als.FAQ.question7=How do I report a data error or bug in the database? +informational.als.FAQ.answer7=We welcome your feedback! Please contact us at help@alskp.org. +informational.als.FAQ.question8=I have more questions that are not listed here, who should I contact? +informational.als.FAQ.answer8=Please contact Sali Farhan: sfarhan@broadinstitute.org. +informational.als.FAQ.resources.title=Additional resources: +informational.als.FAQ.resources=Hail
    \ + Project MinE
    ALS Variant Server
    \ + HEX
    gnomAD
    \ + GTEx
    ClinVar
    \ + Neale Lab
    Stanley Center
    Program in Medical and Population Genetics
    Center for Genomic Medicine + + + + + informational.dataSubmission.section1title=What kind of data do we need? informational.dataSubmission.section1=
  • Right now, we are ready to receive array, exome sequencing, and whole-genome sequencing data.\
  • We are interested in incorporating both summary statistics and individual-level data.
  • In the future, we will be ready to \ @@ -2189,7 +2254,29 @@ informational.data.accessing.sleep2= tool
  • \ and then on the resulting page, select the UK Biobank Sleep Traits GWAS dataset. informational.about_sleep.header=About the Sleep Disorder Knowledge Portal project informational.about_SleepData.header=Data in the Sleep Disorder Knowledge Portal +informational.about_ALSData.header=Data in the ALS Knowledge Portal informational.about_sleep.section1=Details about data contributors and consortia will go here. +informational.about_ALS.header=About the ALS Knowledge Portal project +informational.about_ALSData.header=Data in the ALS Knowledge Portal +informational.about_ALSData.section0.5=Data used in the ALS Knowledge Portal were analyzed by the Neale \ + lab. For details about quality control, please visit: Farhan et al., Exome sequencing in amyotrophic lateral sclerosis implicates a novel \ + gene, DNAJC7, encoding a heat-shock protein. Nature Neuroscience 2019. Sali Farhan was supported by the ALS Canada Tim E. Noël Postdoctoral Fellowship. +informational.about_ALSData.section1=Data in the ALS Knowledge Portal were collected from the Familial ALS (FALS) Consortium and the ALS Genetics (ALSGENS) Consortium. +informational.about_ALSData.section2=The members of the FALS Consortium are Giuseppe Lauria, Orla Hardiman, Russell L McLaughlin, Letizia Mazzini, Stefano Duga, Anneloor \ + L M A ten Asbroek, Frank Baas, Lucia Corrado, Sandra D'Alfonso, Jonathan D Glass, Meraida Polak, Seneshaw Asress, Antonia Ratti, Cinzia Tiloca, Claudia Colombrita, \ + Daniela Calini, Federico Verde, Nicola Ticozzi, Vincenzo Silani, Claudia Fallini, Diane McKenna-Yasek, John E. Landers, Kevin P. Kenna, Pamela Keagle, Peter C. Sapp, \ + Robert H. Brown Jr, Cinzia Bertolin, Gianni Sorarù, Giorgia Querin, Giacomo P. Comi, Roberto Del Bo, Stefania Corti, Cristina Cereda, Mauro Ceroni, Stella Gagliardi, \ + Garth A. Nicholson, Ian P. Blair, Kelly L. Williams, Karen E. Morrison, Hardev Pall, Ammar Al-Chalabi, Andrew King, Athina Soragia Gkazi, Bradley N. Smith, Caroline Vance, \ + Christopher E. Shaw, Claire Troakes, Jack W. Miller, Safa Al-Sarraj, Simon D. Topp, Michael Simpson, Nick W. Parkin, Claire S. Leblond, Guy A. Rouleau, Patrick A. Dion, \ + Jacqueline de Belleroche, Kevin Talbot, Martin R. Turner, Pamela J. Shaw, P. Nigel Leigh, Alberto García-Redondo, Jesús Esteban-Pérez, José \ + Luis Muñoz-Blanco, Barbara Castellotti, Cinzia Gellera, Franco Taroni, and Viviana Pensato. +informational.about_ALSData.section3=The members of the ALS Sequencing Consortium are Andrew S. Allen, Stanley Appel, Robert H. Baloh, Richard S. Bedlack, Braden E. Boone, \ + Robert Brown, John P. Carulli, Alessandra Chesi, Wendy K. Chung, Elizabeth T. Cirulli, Gregory M. Cooper, Julien Couthouis, Aaron G. Day-Williams, Patrick A. Dion, \ + Summer Gibson, Aaron D. Gitler, Jonathan D. Glass, David B. Goldstein, Yujun Han, Matthew B. Harms, Tim Harris, Sebastian D. Hayes, Angela L. Jones, Jonathan Keebler, \ + Brian J. Krueger, Brittany N. Lasseigne, Shawn E. Levy, Yi-Fan Lu, Tom Maniatis, Diane McKenna-Yasek, Timothy M. Miller, Richard M. Myers, Slavé Petrovski, \ + Stefan M. Pulst, Alya R. Raphael, John M. Ravits, Zhong Ren, Guy A. Rouleau, Peter C. Sapp, Neil A. Shneider, Ericka Simpson, Katherine B. Sims, John F. Staropoli, \ + Lindsay L. Waite, Quanli Wang, Jack R. Wimbish, and Winnie W. Xin. informational.data.exptsumm.EPRI_GWAS=The PR interval exome chip analysis surveyed nearly 93,000 subjects for whom cardiac conduction measurements were available. Subjects were excluded if they exhibited \ any of the following conditions: extreme PR values (≤80 or ≥320 ms); second- or third-degree heart block; AF on baseline ECG; history of myocardial infarction, heart failure, or \ Wolff–Parkinson–White syndrome; pacemaker placement; use of class I or III blocking medications (ATC code pre x C01B); digoxin use (ATC code C01AA05); or pregnancy. PR interval duration, \ @@ -2356,4 +2443,10 @@ informational.data.overview.52K-3=For each of the 25×2=50 single-variant analys of the variant filters was increased if the distribution of association statistics appeared poorly calibrated. A 25-group fixed-effect inverse-variance weighted \ meta-analysis was then conducted for each of the Firth and EMMAX tests, using METAL. EMMAX results were used for association p-values and Firth results for \ effect size estimates. - +informational.data.exptsumm.ALS2016_GWAS=7,763 new ALS cases and 4,669 controls were genotyped and data were combined with those from previously published ALS GWAS studies. \ + Cohorts were combined on the basis of genotyping platform and nationality to form 27 case–control strata. A custom reference panel for imputation was constructed based \ + on high-coverage whole-genome sequencing data from 1,246 patients with ALS and 615 controls from the Netherlands. A merged reference panel consisting of the custom \ + panel and the 100 Genomes reference panel was used for imputation. Association results were combined in an inverse-variance- weighted, fixed-effect meta-analysis \ + using METAL to generate the ALS GWAS 2016 meta-analysis dataset. All strata were jointly analyzed in a linear mixed model to create the ALS GWAS 2016 LMM dataset. +informational.data.exptsumm.ALS2018_ExSeq=The ALS exome case-control 2018 dataset comprises exome sequence data from 3,864 amyotrophic lateral \ + sclerosis cases and 7,839 controls. Gene burden testing was used to discover associations of genes with ALS. diff --git a/grails-app/i18n/metadata.properties b/grails-app/i18n/metadata.properties index d2481c9c5..8d69ab259 100755 --- a/grails-app/i18n/metadata.properties +++ b/grails-app/i18n/metadata.properties @@ -27,6 +27,7 @@ metadata.BFP=Body fat percentage metadata.HIPCadjBMI=Hip circumference adj BMI metadata.WAISTadjBMI=Waist circumference adj BMI metadata.WHRadjBMI=Waist-hip ratio adj BMI +metadata.ALS=ALS metadata.intron_variant=intron metadata.missense_variant=missense @@ -330,7 +331,7 @@ metadata.SATHU=Subcutaneous adipose tissue attenuation metadata.VATHU=Visceral adipose tissue attenuation metadata.VATSAT=Ratio visceral-subcutaneous adipose tissue volume metadata.VATSATadjBMI=Ratio visceral-subcutaneous adipose tissue volume adj BMI -metadata.none=No phenotype +metadata.none=Population reference metadata.CE=Cardioembolic stroke metadata.IS=Ischemic stroke metadata.LA=Large artery stroke @@ -485,10 +486,10 @@ metadata.GWAS_GIANT=GIANT GWAS metadata.GWAS_GLGC=GLGC GWAS metadata.GWAS_MAGIC=MAGIC GWAS metadata.GWAS_PGC=PGC GWAS -metadata.HETA=Number of heterozygous cases -metadata.HETU=Number of heterozygous controls -metadata.HOMA=Number of homozygous cases -metadata.HOMU=Number of homozygous controls +metadata.HETA=Heterozygous count (cases) +metadata.HETU=Heterozygous count (controls) +metadata.HOMA=Homozygous count (cases) +metadata.HOMU=Homozygous count (controls) metadata.Hispanic=Latino metadata.HWE_PVALUE=Hardy-Weinberg P—value metadata.IN_EXSEQ=In exome sequencing @@ -498,7 +499,7 @@ metadata.LRT_pred=LRT prediction metadata.MAC=Minor allele count metadata.MAC_PH=Minor allele count (cases) metadata.MAF=Minor allele frequency -metadata.MAF_PH=Minor allele frequency (cases) +metadata.MAF_PH=Minor allele frequency (cases and controls) metadata.MAGIC=MAGIC GWAS metadata.MINA=Case minor allele counts metadata.MINU=Control minor allele counts @@ -529,6 +530,10 @@ metadata.P_VALUE=P-value metadata.PolyPhen_PRED=PolyPhen prediction metadata.Polyphen2_HDIV_pred=PolyPhen2-HumDiv prediction metadata.Polyphen2_HVAR_pred=PolyPhen2-HumVar prediction +metadata.CADD_RAW=Raw CADD score +metadata.CADD_PHRED=CADD-Phred score +metadata.HOM=Homozygous count +metadata.HET=Heterozygous count metadata.Protein_change=Protein change metadata.QCFAIL=Failed quality control metadata.Reference_Allele=Reference allele @@ -2474,6 +2479,34 @@ metadata.GWAS_BFpercent_mdv55=Body fat percentage GWAS metadata.GWAS_EGGC_mdv55=Early Growth Genetics Consortium GWAS metadata.GWAS_HRgene_mdv55=Heart rate GWAS + +#mdv60 is ALSKP + +metadata.GWAS_PGC_mdv60=PGC GWAS +metadata.ExAC_r03_mdv60=ExAC +metadata.ExSeq_EgnomAD_mdv60=gnomAD exomes +metadata.ExSeq_EgnomAD_aa_mdv60=gnomAD exomes: African Americans +metadata.ExSeq_EgnomAD_ea_mdv60=gnomAD exomes: East Asians +metadata.ExSeq_EgnomAD_eu_mdv60=gnomAD exomes: Europeans +metadata.ExSeq_EgnomAD_sa_mdv60=gnomAD exomes: South Asians +metadata.ExSeq_EgnomAD_hs_mdv60=gnomAD exomes: Latinos +metadata.WGS_WgnomAD_mdv60=gnomAD whole genomes +metadata.WGS_WgnomAD_aa_mdv60=gnomAD whole genomes: African Americans +metadata.WGS_WgnomAD_ea_mdv60=gnomAD whole genomes: East Asians +metadata.WGS_WgnomAD_eu_mdv60=gnomAD whole genomes: Europeans +metadata.WGS_WgnomAD_hs_mdv60=gnomAD whole genomes: Latinos +metadata.1kg_phase1_mdv60=1000 Genomes +metadata.1kg_phase1_eu_mdv60=1000 Genomes: Europeans +metadata.1kg_phase1_sa_mdv60=1000 Genomes: East Asians +metadata.1kg_phase1_aa_mdv60=1000 Genomes: African Americans +metadata.1kg_phase1_hs_mdv60=1000 Genomes: Hispanics +metadata.GWAS_ALS2016meta_eu_mdv60=ALS GWAS 2016 meta-analysis +metadata.GWAS_ALS2016lmm_eu_mdv60=ALS GWAS 2016 LMM +metadata.ExSeq_ALS2018_eu_mdv60=ALS exome case-control 2019 (Cases: 3864; Controls: 7839) +metadata.ExSeq_ALS2018_mdv60=ALS exome case-control 2019 (Cases: 3864; Controls: 7839) + + + #mdv70 is stroke production @@ -3330,10 +3363,11 @@ geneTable.columnHeaders.shared.acu.help.header=Allele Count Unaffected geneTable.columnHeaders.shared.acu.help.text=Total count of minor alleles in the control population geneTable.columnHeaders.shared.aca.help.header=Allele Count Affected geneTable.columnHeaders.shared.aca.help.text=Total count of minor alleles in the case population -metadata.ACU=Allele count controls -metadata.ACA=Allele count cases -metadata.ACU_PH=Allele count (control) -metadata.ACA_PH=Allele count (case) +metadata.ACU=Allele count (controls) +metadata.ACA=Allele count (cases) +metadata.ACU_PH=Allele count (controls) +metadata.ACA_PH=Allele count (cases) +metadata.AC_PH=Allele count (cases and controls) #mdv 110 is sleep portal diff --git a/grails-app/i18n/portalHome.properties b/grails-app/i18n/portalHome.properties index a26a3b8e3..cbd9b0105 100755 --- a/grails-app/i18n/portalHome.properties +++ b/grails-app/i18n/portalHome.properties @@ -17,7 +17,7 @@ portal.header.nav.grs=GRS portal.header.data_portal=Data portal portal.header.tagline=Providing data and tools to promote understanding and treatment of type 2 diabetes and its complications portal.home.collaborate=Click here to learn more -primary.text.input.header=Explore data on a gene, variant, or region +primary.text.input.header=Explore data on a gene or region regionSpecificVersion.text.input.header=Explore data on a genomic region primary.text.input.examples=examples: SLC30A8, rs13266634, chr9:21,940,000-22,190,000 variant.search.header=Variant Finder @@ -92,6 +92,7 @@ portal.mi.header.tagline=A platform for accelerating analysis of the genetics of //portal.ibd.header.tagline=A platform for accelerating genetic discoveries in inflammatory bowel disease portal.ibd.header.tagline=This is a demo portal -- we are interested in feedback on the evolving interface portal.epilepsy.header.tagline=A platform for accelerating genetic analysis in epilepsy +portal.ALS.header.tagline=A platform for accelerating genetic discoveries in amyotrophic lateral sclerosis portal.sleep.header.tagline=A platform for accelerating genetic discoveries for sleep disturbance and circadian traits about.the.mi.portal.text=The Cardiovascular Disease Knowledge Portal (CVDKP) framework is being developed by a \ team of scientists and software engineers at the Broad \ @@ -103,6 +104,11 @@ about.the.mi.portal.text=The Cardiovascular Disease Knowledge Portal (CVDKP) fra about.the.ibd.portal.text=Details about the V2F Portal project about.the.epi.portal.text=Details about the Epilepsy Knowledge Portal project and funders' logos about.the.sleep.portal.text=Details about the Sleep Disorder Knowledge Portal project and funders' logos +about.the.ALS.portal.text=The ALS Knowledge Portal (ALSKP) framework is being developed by a team of scientists and software engineers at the \ + Broad Institute of MIT and Harvard. Data in the ALSKP were generated by the \ + Familial ALS (FALS) and ALS Genetics (ALSGENS) Consortia.

    We welcome contributions of data and the involvement of interested \ + researchers in collaborations on analyses, methods, or tool development. Please contact us \ + for more information.

    about.the.stroke.portal.text=The Knowledge Portal is being developed by a team of scientists and software engineers at the \ Broad Institute of MIT and Harvard along with collaborators from \ Massachusetts General Hospital and many other institutions across the globe. \ @@ -117,9 +123,10 @@ portal.mi.about.the.data.text=The Cardiovascular Disease Knowledge Portal enable myocardial infarction, atrial fibrillation, and related traits, while protecting the integrity and confidentiality of the underlying data. portal.stroke.home.amp=Funding for development of the Knowledge Portal software infrastructure was provided by the Accelerating \ Medicines Partnership in Type 2 Diabetes. -portal.home.about.KPN=The Knowledge Portal Network is an infrastructure that integrates, interprets, and presents human genetic data to spark insights into complex diseases. +portal.home.about.KPN=The Knowledge Portal Network is an infrastructure that integrates, interprets, and presents human genetic data to spark insights into complex diseases. portal.home.link_to_CDKP=Explore genetic data related to stroke: portal.home.link_to_CVDI=Explore genetic data related to cardiovascular disease: +portal.home.link_to_sleep=Explore genetic data related to sleep disturbance and circadian traits: portal.home.link_to_CVDI_temp=Coming soon! portal.ibd.about.the.data.text=The Variant to Function demo portal is intended as a method of soliciting feedback on one form of a V2F UI. portal.home.link_to_T2DKP=Explore genetic data related to type 2 diabetes: @@ -127,3 +134,8 @@ portal.epi.about.the.data.text=The Epilepsy Knowledge Portal enables browsing, s portal.epi.use.citation.itself= Epilepsy Knowledge Portal. Year Month Date of access; URL of page you are citing. Also cite any paper(s) in which the data were published. portal.sleep.about.the.data.text=The Sleep Disorder Knowledge Portal enables browsing, searching, and analysis of human genetic information linked to sleep disorders and related traits, while protecting the integrity and confidentiality of the underlying data. portal.sleep.use.citation.itself= Sleep Disorder Knowledge Portal. Year Month Date of access; URL of page you are citing. Also cite any paper(s) in which the data were published. +portal.ALS.about.the.data.text=The ALS Knowledge Portal enables browsing, searching, and analysis of human genetic information linked to amyotrophic lateral sclerosis and related traits, while protecting the integrity and confidentiality of the underlying data. +portal.als.use.citation.itself=Amyotrophic Lateral Sclerosis Knowledge Portal. Year Month Date of access; URL of page you are citing. \ + Also, please cite Farhan et al., Exome sequencing in amyotrophic lateral sclerosis implicates a novel gene, DNAJC7, \ + encoding a heat-shock protein. Nature Neuroscience 2019. +portal.als.header.nav.faq=FAQ diff --git a/grails-app/i18n/variantSearch.properties b/grails-app/i18n/variantSearch.properties index 678f52faa..e164b496b 100755 --- a/grails-app/i18n/variantSearch.properties +++ b/grails-app/i18n/variantSearch.properties @@ -152,7 +152,7 @@ variantSearch.stroke.workflow.header.tutorial=For more information on how to use variantSearch.workflow.tab.phenotypeDependent.title=Select phenotypes and datasets variantSearch.workflow.tab.phenotypeDependent.text=Start by choosing a phenotype or trait, then select a dataset, enter any additional parameters, and click "Add criteria." See the Data page for a description of each dataset. variantSearch.workflow.tab.phenotypeIndependent.title=Additional search options -variantSearch.workflow.tab.phenotypeIndependent.text=Make selections in any or all of these three options: 1) choose a dataset (see the Data page for descriptions); 2) specify the genomic location of variants; 3) choose the predicted effect of the variants on proteins. After choosing criteria, click “Add criteria.” +variantSearch.workflow.tab.phenotypeIndependent.text=Make selections in any or all of these three options: 1) choose a dataset; 2) specify the genomic location of variants; 3) choose the predicted effect of the variants on proteins. After choosing criteria, click “Add criteria.” variantSearch.workflow.tab.phenotypeIndependent.genomicLocation=Genomic location of variants variantSearch.workflow.tab.phenotypeIndependent.proteinEffect=Predicted effect of the variants on proteins @@ -165,8 +165,8 @@ variantSearch.results.modal.addSubPheno.t2dsubtitle=Add or remove associations w your original search. For definitions of phenotypes, see our phenotype reference guide. variantSearch.results.modal.addSubDatasets=Add/Subtract Datasets variantSearch.results.modal.addSubDatasets.subtitle=Add or remove datasets for the variants in your result set (see dataset descriptions). You may not remove the datasets and phenotypes specified in your original search. -variantSearch.results.modal.addSubProps=Add/Subtract Other Information -variantSearch.results.modal.addSubProps.subtitle=Use these tabs to modify the properties displayed for each dataset, or to change the information displayed for each variant. +variantSearch.results.modal.addSubProps=Add/Subtract Columns +variantSearch.results.modal.addSubProps.subtitle=Use these tabs to modify the properties displayed for each dataset, or to change the annotations displayed for each variant. variantSearch.results.modal.confirm=Confirm variantSearch.results.modal.cancel=Cancel variantSearch.results.modal.subPheno=Subtract phenotype diff --git a/grails-app/services/dig/diabetes/portal/NewsFeedService.groovy b/grails-app/services/dig/diabetes/portal/NewsFeedService.groovy index 75a9ecfd3..71f0414a8 100755 --- a/grails-app/services/dig/diabetes/portal/NewsFeedService.groovy +++ b/grails-app/services/dig/diabetes/portal/NewsFeedService.groovy @@ -32,6 +32,7 @@ class NewsFeedService { // mi: '3944203828206499294', // ibd: '7857348124942584918', // stroke: '7961982646849648720' +// ALS: '2854182648437419920' // ] // the last time the posts were successfully retrieved private JSONObject postsLastUpdatedAt = new JSONObject() diff --git a/grails-app/services/org/broadinstitute/mpg/GoogleRestService.groovy b/grails-app/services/org/broadinstitute/mpg/GoogleRestService.groovy index 4b1211e2c..01893b14f 100755 --- a/grails-app/services/org/broadinstitute/mpg/GoogleRestService.groovy +++ b/grails-app/services/org/broadinstitute/mpg/GoogleRestService.groovy @@ -26,7 +26,7 @@ class GoogleRestService { * */ Map buildCallToRetrieveOneTimeCode(String oneTimeCode) { - String destination = "https://${grailsApplication.config.googleapi.baseGoogleUrl}/oauth2/v3/token" + String destination = "${grailsApplication.config.googleapi.oauth2AccessIdTokenDomain}" log.debug("Google authentication callback==>${grailsApplication.config.oauth.providers.google.callback}") String encodedRedirectUrl=URLEncoder.encode(grailsApplication.config.oauth.providers.google.callback, "UTF-8") String contents = "code=${oneTimeCode}&"+ @@ -37,7 +37,7 @@ class GoogleRestService { JSONObject jsonObject = postGoogleRestCallBase (contents,destination) String idToken = jsonObject?.id_token String accessToken = jsonObject?.access_token - JSONObject identityInformation = postAuthorizedGoogleRestCall(accessToken,"https://${grailsApplication.config.googleapi.baseGoogleUrl}/plus/v1/people/me") + JSONObject identityInformation = postAuthorizedGoogleRestCall(accessToken,"${grailsApplication.config.googleapi.openIdConnectUserInfoDomain}") return [identityInformation:identityInformation, accessToken:accessToken, idToken:idToken] diff --git a/grails-app/services/org/broadinstitute/mpg/RestServerService.groovy b/grails-app/services/org/broadinstitute/mpg/RestServerService.groovy index 29370f0bc..fdbda2f2d 100755 --- a/grails-app/services/org/broadinstitute/mpg/RestServerService.groovy +++ b/grails-app/services/org/broadinstitute/mpg/RestServerService.groovy @@ -17,11 +17,13 @@ import org.broadinstitute.mpg.diabetes.metadata.parser.JsonParser import org.broadinstitute.mpg.diabetes.metadata.query.GetDataQueryBean import org.broadinstitute.mpg.diabetes.metadata.query.GetDataQueryHolder import org.broadinstitute.mpg.diabetes.metadata.query.QueryFilter +import org.broadinstitute.mpg.diabetes.metadata.query.QueryFilterBean import org.broadinstitute.mpg.diabetes.metadata.query.QueryJsonBuilder import org.broadinstitute.mpg.diabetes.util.PortalException import org.codehaus.groovy.grails.commons.GrailsApplication import org.codehaus.groovy.grails.web.json.JSONArray import org.codehaus.groovy.grails.web.json.JSONObject +import org.mortbay.util.ajax.JSON @Transactional class RestServerService { @@ -962,7 +964,9 @@ time required=${(afterCall.time - beforeCall.time) / 1000} seconds "Consequence", "PolyPhen_PRED", "SIFT_PRED", - "Protein_change" + "Protein_change", + "Allele_Frequency", + "Allele_Count" ]) GetDataQueryHolder getDataQueryHolder = GetDataQueryHolder.createGetDataQueryHolder([filters], searchBuilderService, metaDataService) JsonSlurper slurper = new JsonSlurper() @@ -987,7 +991,8 @@ time required=${(afterCall.time - beforeCall.time) / 1000} seconds "Consequence", "PolyPhen_PRED", "SIFT_PRED", - "Protein_change" + "Protein_change", + "Allele_Frequency" ]) GetDataQueryHolder getDataQueryHolder = GetDataQueryHolder.createGetDataQueryHolder([filters], searchBuilderService, metaDataService) Property macProperty = metaDataService.getSampleGroupProperty(dataSet,"MAC",MetaDataService.METADATA_VARIANT) @@ -1625,7 +1630,7 @@ time required=${(afterCall.time - beforeCall.time) / 1000} seconds */ public String getMetadata() { String retdat; - retdat = getRestCallBase(METADATA_URL, REST_SERVER?.url); + retdat = getRestCallBase("${METADATA_URL}?mdv=${this.metaDataService?.getDataVersion()}", currentRestServer()); return retdat; } @@ -1811,43 +1816,6 @@ time required=${(afterCall.time - beforeCall.time) / 1000} seconds return returnValue } - /*** - * Add an existing p Property to a column map - * @param existingMap - * @param phenotype - * @param dataSet - * @param property - * @return - */ - public LinkedHashMap addColumnsForPProperties(LinkedHashMap existingMap, String phenotype, String dataSet, String property) { - LinkedHashMap returnValue = [:] - LinkedHashMap phenotypeProperties = [:] - if (!existingMap) { - returnValue.cproperty = [] - returnValue.dproperty = [:] - returnValue.pproperty = [:] - } else { - returnValue = existingMap - } - phenotypeProperties = returnValue.pproperty - - if ((phenotype) && - (dataSet) && - (property)) { - if (!phenotypeProperties.containsKey(phenotype)) { - phenotypeProperties[phenotype] = [:] - } - if (!phenotypeProperties[phenotype].containsKey(dataSet)) { - phenotypeProperties[phenotype][dataSet] = [] - } - if (!(phenotypeProperties[phenotype][dataSet] in property)) { - phenotypeProperties[phenotype][dataSet] << property - } - } - - return returnValue - } - /*** * Given filters, choose which columns to display by default. Alternatively, if requestedProperties * is not empty, then choose only those columns that are specifically requested. @@ -1872,17 +1840,18 @@ time required=${(afterCall.time - beforeCall.time) / 1000} seconds commonProperties << "Consequence" commonProperties << "CHROM" commonProperties << "POS" + commonProperties << "Allele_Frequency" + commonProperties << "Allele_Count" } // if we don't have a better idea then launch the search based on the filters. Otherwise used our stored criteria // if (!requestedProperties) { - JsonSlurper slurper = new JsonSlurper() - for (def parsedFilter in slurper.parseText(filterJson)) { - datasetsToFetch << parsedFilter.dataset_id - phenotypesToFetch << parsedFilter.phenotype - propertiesToFetch << parsedFilter.operand - } -// } + JsonSlurper slurper = new JsonSlurper() + for (def parsedFilter in slurper.parseText(filterJson)) { + datasetsToFetch << parsedFilter.dataset_id + phenotypesToFetch << parsedFilter.phenotype + propertiesToFetch << parsedFilter.operand + } // if specific data sets are requested then add them to the list if (requestedProperties) { @@ -1964,13 +1933,53 @@ time required=${(afterCall.time - beforeCall.time) / 1000} seconds // Adding Phenotype specific properties propertiesToFetch = expandPropertyList(propertiesToFetch, requestedProperties) // if (!requestedProperties) { - commonProperties = expandCommonPropertyList(commonProperties, requestedProperties) + commonProperties = expandCommonPropertyList(commonProperties, requestedProperties) // } LinkedHashMap columnsToDisplayStructure = sharedToolsService.getColumnsToDisplayStructure(phenotypesToFetch, datasetsToFetch, propertiesToFetch, commonProperties) + + + /**/ return columnsToDisplayStructure } + /*** + * Add an existing p Property to a column map + * @param existingMap + * @param phenotype + * @param dataSet + * @param property + * @return + */ + public LinkedHashMap addColumnsForPProperties(LinkedHashMap existingMap, String phenotype, String dataSet, String property) { + LinkedHashMap returnValue = [:] + LinkedHashMap phenotypeProperties = [:] + if (!existingMap) { + returnValue.cproperty = [] + returnValue.dproperty = [:] + returnValue.pproperty = [:] + } else { + returnValue = existingMap + } + phenotypeProperties = returnValue.pproperty + + if ((phenotype) && + (dataSet) && + (property)) { + if (!phenotypeProperties.containsKey(phenotype)) { + phenotypeProperties[phenotype] = [:] + } + if (!phenotypeProperties[phenotype].containsKey(dataSet)) { + phenotypeProperties[phenotype][dataSet] = [] + } + if (!(phenotypeProperties[phenotype][dataSet] in property)) { + phenotypeProperties[phenotype][dataSet] << property + } + } + + return returnValue + } + private String orSubstitute(LinkedHashMap properties) { String orValue = "" @@ -2021,6 +2030,9 @@ time required=${(afterCall.time - beforeCall.time) / 1000} seconds private JSONObject gatherGenePrioritizationInformation (String phenotypeName, String dataSetName, String propertyName) { LinkedHashMap resultColumnsToDisplay = getColumnsForCProperties([ "GENE", "START" , "END", "GEN_ID", "CHROM"]) +// String filter = "17=" + phenotypeName + "[" + dataSetName + "]" + propertyName + ">0"; +// List filters = [filter]; + List filters = [] GetDataQueryHolder getDataQueryHolder = GetDataQueryHolder.createGetDataQueryHolder(filters, searchBuilderService, metaDataService,MetaDataService.METADATA_GENE) @@ -2035,8 +2047,9 @@ time required=${(afterCall.time - beforeCall.time) / 1000} seconds addColumnsForPProperties(resultColumnsToDisplay, phenotypeName, dataSetName, propertyNameForControlCount) getDataQueryHolder.addProperties(resultColumnsToDisplay) +// getDataQueryHolder.decodeFilter(filter) getDataQueryHolder.addOrderByProperty(metaDataService.getPropertyByNamePhenotypeAndSampleGroup(propertyName, phenotypeName, dataSetName,MetaDataService.METADATA_GENE), '1') - getDataQueryHolder.getDataQuery.setLimit(7000) + getDataQueryHolder.getDataQuery.setLimit(500) JsonSlurper slurper = new JsonSlurper() String dataJsonObjectString = postGeneDataQueryRestCall(getDataQueryHolder) JSONObject dataJsonObject = slurper.parseText(dataJsonObjectString) @@ -2169,7 +2182,7 @@ time required=${(afterCall.time - beforeCall.time) / 1000} seconds "Consequence", "Reference_Allele", "Effect_Allele", - "Protein_change"]) + "Protein_change","Allele_Frequency","Allele_Count"]) resultColumnsToDisplay = buildColumnsRequestForPProperties(resultColumnsToDisplay, "DIR", technology, sampleGroupName ) resultColumnsToDisplay = buildColumnsRequestForPProperties(resultColumnsToDisplay, "BETA", technology, sampleGroupName) resultColumnsToDisplay = buildColumnsRequestForPProperties(resultColumnsToDisplay, "ODDS_RATIO", technology, sampleGroupName) @@ -2980,4 +2993,7 @@ time required=${(afterCall.time - beforeCall.time) / 1000} seconds + + + } diff --git a/grails-app/services/org/broadinstitute/mpg/SpringManipService.groovy b/grails-app/services/org/broadinstitute/mpg/SpringManipService.groovy index 54e274958..86cef4d46 100755 --- a/grails-app/services/org/broadinstitute/mpg/SpringManipService.groovy +++ b/grails-app/services/org/broadinstitute/mpg/SpringManipService.groovy @@ -48,12 +48,12 @@ class SpringManipService { */ public Boolean forceLogin(JSONObject identityInformation,javax.servlet.http.HttpSession session) { if ((!identityInformation) || - (!identityInformation.emails) || - (identityInformation.emails.size()<1) ) { + (!identityInformation.email) || + (identityInformation.email.size()<1) ) { return // no email. This is the one identifier we cannot do without } Boolean weHaveSeenYouBefore = false - String email = identityInformation.emails[0]['value'] + String email = identityInformation.email String username = email String password = 'bloodglucose' String fullName = "default" @@ -62,34 +62,12 @@ class SpringManipService { String webSiteUrl = "default" String preferredLanguage = "en" // default to English // find better values if we can - if (identityInformation.displayName){ - fullName = identityInformation.displayName + if (identityInformation.given_name){ + nickname = identityInformation.given_name } - if (identityInformation.name){ - JSONObject nameObject = identityInformation.name - if (nameObject?.names()){ - if (nameObject['givenName']) { - nickname = nameObject['givenName'] - } - } - } - if (identityInformation.organizations){ - JSONArray organizationArray = identityInformation.organizations - if (organizationArray.size()>0){ - for ( int i = 0 ; i < organizationArray.size() ; i++ ){ - JSONObject oneOrganization = organizationArray[i] - if ((oneOrganization.primary) && - (oneOrganization.name)) { - primaryOrganization = oneOrganization.name - } - } - } - } - if (identityInformation.url){ - webSiteUrl = identityInformation.url - } - if (identityInformation.language){ - preferredLanguage = identityInformation.language + fullName = identityInformation.name + if (identityInformation.locale){ + preferredLanguage = identityInformation.locale } User user = User.findByUsername(email) if (user){ // we arty have a user. Connect to it diff --git a/grails-app/views/gene/_geneSignalSummary.gsp b/grails-app/views/gene/_geneSignalSummary.gsp index 1094c708b..88527e059 100755 --- a/grails-app/views/gene/_geneSignalSummary.gsp +++ b/grails-app/views/gene/_geneSignalSummary.gsp @@ -52,7 +52,7 @@ proteinEffectsListInfo:"transcript_ablation%3Atranscript+ablation%7Esplice_donor_variant%3Asplice+donor+variant%7Esplice_acceptor_variant%3Asplice+acceptor+variant%7Estop_gained%3Astop+gained%7Eframeshift_variant%3Aframeshift+variant%7Estop_lost%3Astop+lost%7Einitiator_codon_variant%3Ainitiator+codon+variant%7Einframe_insertion%3Ainframe+insertion%7Einframe_deletion%3Ainframe+deletion%7Emissense_variant%3Amissense+variant%7Etranscript_amplification%3Atransript+amplification%7Esplice_region_variant%3Asplice+region+variant%7Eincomplete_terminal_codon_variant%3Aincomplete+terminal+codon+variant%7Esynonymous_variant%3Asynonymous+variant%7Estop_retained_variant%3Astop+retained+variant%7Ecoding_sequence_variant%3Acoding+sequence+variant%7Emature_miRNA_variant%3Amature+miRNA+variant%7E5_prime_UTR_variant%3A5%27+UTR+variant%7E3_prime_UTR_variant%3A3%27+UTR+variant%7Enon_coding_exon_variant%3Anon+coding+exon+variant%7Enc_transcript_variant%3Anc+transcript+variant%7Eintron_variant%3Aintron+variant%7ENMD_transcript_variant%3Anmd+transcript+variant%7Eupstream_gene_variant%3Aupstream+gene+variant%7Edownstream_gene_variant%3Adownstream+gene+variant%7ETFBS_ablation%3Atfbs+ablation%7ETFBS_amplification%3Atfbs+amplification%7ETF_binding_site_variant%3Atf+binding+site+variant%7Eregulatory_region_variant%3Aregulatory+region+variant%7Eregulatory_region_ablation%3Aregulatory+region+ablation%7Eregulatory_region_amplification%3Aregulatory+region+amplification%7Efeature_elongation%3Afeature+elongation%7Efeature_truncation%3Afeature+truncation%7Eintergenic_variant%3Aintergenic+variant", localeInfo:"en_US", translatedFiltersInfo:"Fasting insulin[CAMP GWAS]P-value<0.001", - additionalPropertiesInfo:"common-common-CLOSEST_GENE:common-common-VAR_ID:common-common-DBSNP_ID:common-common-Protein_change:common-common-Consequence:common-common-CHROM:common-common-POS", + additionalPropertiesInfo:"common-common-CLOSEST_GENE:common-common-VAR_ID:common-common-DBSNP_ID:common-common-Protein_change:common-common-Consequence:common-common-CHROM:common-common-POS:common-common-Allele_Frequency:common-common-Allele_Count", filtersAsJsonInfo:filtersAsJson, copyMsg:'', printMsg:'', diff --git a/grails-app/views/home/portalHome.gsp b/grails-app/views/home/portalHome.gsp index 5e917929a..652b74369 100755 --- a/grails-app/views/home/portalHome.gsp +++ b/grails-app/views/home/portalHome.gsp @@ -258,6 +258,12 @@

    + +

    + +

    +

    +

    @@ -349,6 +355,7 @@

    Type 2 Diabetes Knowledge Portal

    +

    Visit portal

    @@ -363,7 +370,12 @@

    Cerebrovascular Disease Knowledge Portal

    Visit portal

    - +
    + +

    +

    Sleep Disorder Knowledge Portal

    +

    Visit portal

    +
    @@ -404,6 +416,9 @@ + + +

    @@ -425,6 +440,17 @@ + +
    +

    + + + +

    +
    + +
    +

    @@ -480,6 +506,10 @@

    + +

    +
    +

    diff --git a/grails-app/views/home/tutorials.gsp b/grails-app/views/home/tutorials.gsp index 3fdbd26c7..da0f8fc81 100755 --- a/grails-app/views/home/tutorials.gsp +++ b/grails-app/views/home/tutorials.gsp @@ -253,7 +253,10 @@ Tutorials will go here. - PDF File + PDF File + + + PDF File PDF File diff --git a/grails-app/views/informational/_about_ALS.gsp b/grails-app/views/informational/_about_ALS.gsp new file mode 100644 index 000000000..e06ffa07c --- /dev/null +++ b/grails-app/views/informational/_about_ALS.gsp @@ -0,0 +1,98 @@ + +

    +
    +
    +
    + +

    + %{--
     
    --}% + %{--
    --}% + %{--
     
    --}% +
    +
    +
    +
    +

    +

    +

    +

    +

    + +

    +

    +

    +

    + + +
    +
    +
    +
    \ No newline at end of file diff --git a/grails-app/views/informational/about.gsp b/grails-app/views/informational/about.gsp index 67387affa..4c9765247 100755 --- a/grails-app/views/informational/about.gsp +++ b/grails-app/views/informational/about.gsp @@ -29,6 +29,9 @@ + + + diff --git a/grails-app/views/informational/alskpfaq.gsp b/grails-app/views/informational/alskpfaq.gsp new file mode 100644 index 000000000..9593937f2 --- /dev/null +++ b/grails-app/views/informational/alskpfaq.gsp @@ -0,0 +1,77 @@ + + + + + + + + + + + + + +
    +
    +
    +
    +

    + +
    +
    + +

    +

    + + +

    + + +

    +

    + + +

    + + +

    + + +

    + + +

    + + +

    + +
    +
    +

    + + + + + + + + + +
    +
    + + + + + + +
    + + + + diff --git a/grails-app/views/informational/contact.gsp b/grails-app/views/informational/contact.gsp index 133d24fee..ab8d88f2b 100755 --- a/grails-app/views/informational/contact.gsp +++ b/grails-app/views/informational/contact.gsp @@ -128,45 +128,25 @@
    - %{--
    --}% - - %{----}% +

    +

    +

    - %{--
    --}% +
    +
    +
    - diff --git a/grails-app/views/informational/data.gsp b/grails-app/views/informational/data.gsp index 95dc94164..51f935812 100755 --- a/grails-app/views/informational/data.gsp +++ b/grails-app/views/informational/data.gsp @@ -96,6 +96,11 @@

    +
    + +
    +

    +
    diff --git a/grails-app/views/informational/data/_ExSeq_ALS2018_eu.gsp b/grails-app/views/informational/data/_ExSeq_ALS2018_eu.gsp new file mode 100644 index 000000000..0bfdf0a13 --- /dev/null +++ b/grails-app/views/informational/data/_ExSeq_ALS2018_eu.gsp @@ -0,0 +1,29 @@ + \ No newline at end of file diff --git a/grails-app/views/informational/data/_GWAS_ALS2016lmm_eu.gsp b/grails-app/views/informational/data/_GWAS_ALS2016lmm_eu.gsp new file mode 100644 index 000000000..e5c90c6da --- /dev/null +++ b/grails-app/views/informational/data/_GWAS_ALS2016lmm_eu.gsp @@ -0,0 +1,922 @@ + \ No newline at end of file diff --git a/grails-app/views/informational/data/_GWAS_ALS2016meta_eu.gsp b/grails-app/views/informational/data/_GWAS_ALS2016meta_eu.gsp new file mode 100644 index 000000000..6915bab8a --- /dev/null +++ b/grails-app/views/informational/data/_GWAS_ALS2016meta_eu.gsp @@ -0,0 +1,921 @@ + \ No newline at end of file diff --git a/grails-app/views/informational/data/_GWAS_ALS2018_eu.gsp b/grails-app/views/informational/data/_GWAS_ALS2018_eu.gsp new file mode 100644 index 000000000..0c655eab9 --- /dev/null +++ b/grails-app/views/informational/data/_GWAS_ALS2018_eu.gsp @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/grails-app/views/informational/data/getPervananceData.py b/grails-app/views/informational/data/getPervananceData.py new file mode 100644 index 000000000..6eb08ad25 --- /dev/null +++ b/grails-app/views/informational/data/getPervananceData.py @@ -0,0 +1,52 @@ +import re +import json +import os + +''' +output should look like this +{id1: {"URL":<>,"data":<>}, id2: {"URL":<>,"data":<>}} +''' + +data = [] +inner_data = {} +id_name = "" +for filename in os.listdir('/Users/psingh/broadProjects/dig-diabetes-portal/grails-app/views/informational/data'): + if (filename.endswith(".gsp")): + with open(filename, "r") as f: + lines = f.readlines() + dict_data = {} + + + for line in lines: + if("id=" in line): + id_name = line.split("id=")[1].split("_script")[0].strip(' "\t\n') + if("Download date" in line): + dict_data["Download date"] = line.split("Download date:")[1].replace('\n', "").strip(' "\t\n') + inner_data[id_name] = dict_data + if("Download URL:" in line): + if(id_name == "ExSeq_EgnomAD"): + dict_data["URI"] = "https://storage.googleapis.com/gnomad-public/release/2.0.2/vcf/exomes/gnomad.exomes.r2.0.2.sites.vcf.bgz" + elif(id_name == "WGS_WgnomAD"): + dict_data["URI"] = "https://storage.googleapis.com/gnomad-public/release/2.0.2/vcf/genomes/gnomad.genomes.r2.0.2.sites.chrXX.vcf.bgz" + else: + dict_data["URI"] = line.split("href=")[1].split("")[0].replace("target", "").replace('\\', ' ').split(" =\"_blank")[0].strip(' >"\t\n').split('">')[0] + #print(line.split("href=")[1].split("")[0].replace("target", "").replace('\\', ' ').split(" =\"_blank")[0].strip(' >"\t\n').split('">')[0]) + inner_data[id_name] = dict_data + if("Data set version:" in line): + dict_data['Version'] = line.split("Data set version:")[1].split("

    ")[0].strip(' "\t\n') + inner_data[id_name] = dict_data + if("Genotype Data Quality Control Report" in line): + dict_data['Genotype Data Quality Control Report'] = line.split("href=")[1].split("target")[0].split("download")[0].strip(' >"\t\n') + inner_data[id_name] = dict_data + + data.append(inner_data) + continue + else: + continue + +#json_data = json.dumps(data) +json_data = json.dumps(inner_data, indent=4, sort_keys=True) + +#print(json_data) +with open('pervananceData.txt', 'w') as f: + f.write(json_data) diff --git a/grails-app/views/informational/data/provenance.txt b/grails-app/views/informational/data/provenance.txt new file mode 100644 index 000000000..1555d438d --- /dev/null +++ b/grails-app/views/informational/data/provenance.txt @@ -0,0 +1,81 @@ +{ + "1kg_phase1": { + "Download date": "07/26/2015", + "URI": "ftp://ftp.1000genomes.ebi.ac.uk/vol1/ftp/phase1/analysis_results/integrated_call_sets/ALL.wgs.integrated_phase1_v3.20101123.snps_indels_sv.sites.vcf.gz", + "Version": "1000 Genomes Phase 1" + }, + "ExChip_CAMP": { + "Genotype Data Quality Control Report": "https://s3.amazonaws.com/broad-portal-resources/AMP_T2DKP_CAMP_QC_Results.pdf" + }, + "ExChip_FUSION": { + "Genotype Data Quality Control Report": "https://s3.amazonaws.com/broad-portal-resources/AMP-DCC_Quality_Control_Report_FUSION.pdf" + }, + "ExSeq_EgnomAD": { + "Download date": "04/01/2017", + "URI": "https://storage.googleapis.com/gnomad-public/release/2.0.2/vcf/exomes/gnomad.exomes.r2.0.2.sites.vcf.bgz" + }, + "GWAS_BioMe": { + "Genotype Data Quality Control Report": "https://s3.amazonaws.com/broad-portal-resources/AMP-DCC+Quality+Control+Report+BioMe_2016_1102.pdf" + }, + "GWAS_CAMP": { + "Genotype Data Quality Control Report": "https://s3.amazonaws.com/broad-portal-resources/AMP_T2DKP_CAMP_QC_Results.pdf" + }, + "GWAS_CARDIoGRAM": { + "Download date": "10/1/2016", + "URI": "http://www.cardiogramplusc4d.org/data-downloads/" + }, + "GWAS_CKDGenConsortium-UACR": { + "Download date": "10/1/2016", + "URI": "https://fox.nhlbi.nih.gov/CKDGen/" + }, + "GWAS_CKDGenConsortium-eGFRcrea": { + "Download date": "10/1/2016", + "URI": "https://fox.nhlbi.nih.gov/CKDGen/" + }, + "GWAS_DCSP2": { + "Genotype Data Quality Control Report": "https://s3.amazonaws.com/broad-portal-resources/AMP-DCC_Quality_Control_Report_NUS.pdf" + }, + "GWAS_DCSP2_ea": { + "Genotype Data Quality Control Report": "https://s3.amazonaws.com/broad-portal-resources/AMP-DCC_Quality_Control_Report_NUS.pdf" + }, + "GWAS_DIAGRAM": { + "Download date": "5/10/2016", + "URI": "http://diagram-consortium.org/downloads.html" + }, + "GWAS_DIAGRAMimputed": { + "Download date": "1/1/2018", + "URI": "http://diagram-consortium.org/downloads.html" + }, + "GWAS_FUSION": { + "Genotype Data Quality Control Report": "https://s3.amazonaws.com/broad-portal-resources/AMP-DCC_Quality_Control_Report_FUSION.pdf" + }, + "GWAS_FUSIONonlyMetaboChip": { + "Genotype Data Quality Control Report": "https://s3.amazonaws.com/broad-portal-resources/AMP-DCC_Quality_Control_Report_FUSION.pdf" + }, + "GWAS_GIANT": { + "URI": "https://www.broadinstitute.org/collaboration/giant/index.php/GIANT_consortium_data_files" + }, + "GWAS_GIANT-PA": { + "URI": "https://www.broadinstitute.org/collaboration/giant/index.php/GIANT_consortium_data_files" + }, + "GWAS_GLGC": { + "URI": "http://csg.sph.umich.edu//abecasis/public/lipids2013/" + }, + "GWAS_GiantUKBB": { + "URI": "https://www.broadinstitute.org/collaboration/giant/index.php/GIANT_consortium_data_files" + }, + "GWAS_MAGIC": { + "URI": "https://www.magicinvestigators.org/downloads/" + }, + "GWAS_METSIM_eu": { + "Genotype Data Quality Control Report": "https://s3.amazonaws.com/broad-portal-resources/AMP-DCC_Quality_Control_Report_METSIM.pdf" + }, + "GWAS_VATGen": { + "Download date": "04/01/2017", + "URI": "https://www.nhlbi.nih.gov/research/intramural/researchers/ckdgen" + }, + "WGS_WgnomAD": { + "Download date": "04/01/2017", + "URI": "https://storage.googleapis.com/gnomad-public/release/2.0.2/vcf/genomes/gnomad.genomes.r2.0.2.sites.chrXX.vcf.bgz" + } +} diff --git a/grails-app/views/informational/policies.gsp b/grails-app/views/informational/policies.gsp index bc09edf27..45d7978c0 100755 --- a/grails-app/views/informational/policies.gsp +++ b/grails-app/views/informational/policies.gsp @@ -220,6 +220,65 @@ + +
    + +

    + +

    + +

    + +

    + + %{--

    --}% + + %{--

    --}% + %{--

    --}% + %{--

    --}% + + + + +

    + +
    + +

    + +
    +

    + +
    + +

    + +
    + +

    + + +

    + +

    + +

    + +

    + + +
    +
    +
    +
    +
    + %{--

    --}% + %{--

    --}% + +
    + +
    +
    diff --git a/grails-app/views/layouts/analyticsALSKP.gsp b/grails-app/views/layouts/analyticsALSKP.gsp new file mode 100644 index 000000000..4afe31f0e --- /dev/null +++ b/grails-app/views/layouts/analyticsALSKP.gsp @@ -0,0 +1,8 @@ + + \ No newline at end of file diff --git a/grails-app/views/layouts/headerBottomT2dgenes.gsp b/grails-app/views/layouts/headerBottomT2dgenes.gsp index 574d55861..5e018402d 100755 --- a/grails-app/views/layouts/headerBottomT2dgenes.gsp +++ b/grails-app/views/layouts/headerBottomT2dgenes.gsp @@ -48,6 +48,11 @@
  • + +
  • +
  • +
  • +
  • diff --git a/grails-app/views/layouts/t2dGenesCore.gsp b/grails-app/views/layouts/t2dGenesCore.gsp index d150420bc..50c0aad4a 100755 --- a/grails-app/views/layouts/t2dGenesCore.gsp +++ b/grails-app/views/layouts/t2dGenesCore.gsp @@ -23,6 +23,9 @@ <g:message code="portal.sleep.header.title.short"/> <g:message code="portal.sleep.header.title.genetics"/> + + ALS portal + <g:message code="portal.header.title.short"/> <g:message code="portal.header.title.genetics"/> @@ -48,6 +51,12 @@ + + + + + + diff --git a/grails-app/views/templates/_variantSearchResultsTemplate.gsp b/grails-app/views/templates/_variantSearchResultsTemplate.gsp index 66d8726d7..c47dc35b6 100755 --- a/grails-app/views/templates/_variantSearchResultsTemplate.gsp +++ b/grails-app/views/templates/_variantSearchResultsTemplate.gsp @@ -174,8 +174,7 @@
    {{/variantResultsTableHeader}} - -
    +
    diff --git a/grails-app/views/trait/_genePrioritizationContents.gsp b/grails-app/views/trait/_genePrioritizationContents.gsp index 490682ff2..abde837fa 100644 --- a/grails-app/views/trait/_genePrioritizationContents.gsp +++ b/grails-app/views/trait/_genePrioritizationContents.gsp @@ -9,6 +9,7 @@ prioritizedGeneInfoAjaxUrl: '${createLink(controller: "trait", action: "prioritizedGeneInfoAjax")}', getGeneLevelResultsUrl: '${createLink(controller: "home", action: "getGeneLevelResults")}', launchGeneVariantQueryUrl: '${createLink(controller: "variantSearch", action: "findEveryVariantForAGene")}', + variantInfoUrl: '${createLink(controller: "variantSearch", action: "findEveryVariantForAGene")}' + '?gene=', phenotypeDropdownIdentifier:'#phenotypeDropdownIdentifier', subphenotypeDropdownIdentifier:'#subphenotypeDropdownIdentifier', local:"${locale}", @@ -33,22 +34,27 @@ : - -

    -
    Scroll to zoom. Roll over dots for variant information.
    -
    + +
    Scroll to zoom. Roll over dots for gene information.
    +
    + + +
    Scroll to zoom. Roll over dots for variant information.
    +
    +
    - diff --git a/grails-app/views/widgets/_datasetsPageTemplate.gsp b/grails-app/views/widgets/_datasetsPageTemplate.gsp index 2646cd134..8ee80978d 100644 --- a/grails-app/views/widgets/_datasetsPageTemplate.gsp +++ b/grails-app/views/widgets/_datasetsPageTemplate.gsp @@ -72,6 +72,9 @@ + + + diff --git a/src/java/org/broadinstitute/mpg/diabetes/metadata/parser/JsonParser.java b/src/java/org/broadinstitute/mpg/diabetes/metadata/parser/JsonParser.java index dc3e8c039..189a9624a 100755 --- a/src/java/org/broadinstitute/mpg/diabetes/metadata/parser/JsonParser.java +++ b/src/java/org/broadinstitute/mpg/diabetes/metadata/parser/JsonParser.java @@ -980,6 +980,7 @@ public Property getPropertyFromJavaScriptNamingScheme(String jsNameString) throw // local variables Property property; + // create the visitor JsNameTranslationVisitor visitor = new JsNameTranslationVisitor(jsNameString); diff --git a/web-app/images/als/als_header_logo.svg b/web-app/images/als/als_header_logo.svg new file mode 100644 index 000000000..8dd6a831c --- /dev/null +++ b/web-app/images/als/als_header_logo.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web-app/images/als/front_als_banner_2018.png b/web-app/images/als/front_als_banner_2018.png new file mode 100644 index 000000000..dff2e3b5d Binary files /dev/null and b/web-app/images/als/front_als_banner_2018.png differ diff --git a/web-app/images/als/front_als_logo_2018.svg b/web-app/images/als/front_als_logo_2018.svg new file mode 100644 index 000000000..f3e8c0da4 --- /dev/null +++ b/web-app/images/als/front_als_logo_2018.svg @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web-app/images/sleep_symbol.svg b/web-app/images/sleep_symbol.svg new file mode 100644 index 000000000..83a1e617c --- /dev/null +++ b/web-app/images/sleep_symbol.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/web-app/js/lib/dport/boxWhiskerPlot.js b/web-app/js/lib/dport/boxWhiskerPlot.js index 4fb66ed66..6026dd01d 100755 --- a/web-app/js/lib/dport/boxWhiskerPlot.js +++ b/web-app/js/lib/dport/boxWhiskerPlot.js @@ -30,6 +30,9 @@ immedTip = function(){ target = null function tip(vis) { + if(vis[0] == null){ + vis[0] = "svg" + } svg = getSVGNode(vis) point = svg.createSVGPoint() document.body.appendChild(node) diff --git a/web-app/js/lib/dport/d3tooltip.js b/web-app/js/lib/dport/d3tooltip.js index 8e51c0c03..72b43909e 100755 --- a/web-app/js/lib/dport/d3tooltip.js +++ b/web-app/js/lib/dport/d3tooltip.js @@ -26,6 +26,9 @@ target = null function tip(vis) { + if(vis[0] == null){ + vis[0] = "svg" + } svg = getSVGNode(vis) point = svg.createSVGPoint() document.body.appendChild(node) diff --git a/web-app/js/lib/dport/genePrioritization.js b/web-app/js/lib/dport/genePrioritization.js index 9c9e0199c..401aeb494 100644 --- a/web-app/js/lib/dport/genePrioritization.js +++ b/web-app/js/lib/dport/genePrioritization.js @@ -18,6 +18,9 @@ var mpgSoftware = mpgSoftware || {}; var retrieveSpecifiedDataAndDisplayIt = function(currentPhenotypeName,selectedDataset,currentPropertyName){ + if(currentPropertyName == "default"){ + return + } var mySavedVariables = getMySavedVariables(); $('#spinner').show(); $.ajax({ @@ -51,6 +54,8 @@ var mpgSoftware = mpgSoftware || {}; options.empty(); + options.append(""); + // now restrict all options based on the two incoming parameters var matchingPhenotypeRecords = _.filter(dataSetJson.pheotypeRecords, function(oneGroup){ return (oneGroup.systemId === selectedDataset && oneGroup.name === currentPhenotypeName); // name here equals phenotype @@ -60,9 +65,10 @@ var mpgSoftware = mpgSoftware || {}; _.forEach(matchingPhenotypeRecords, function (oneElement) { _.forEach(oneElement.properties, function (subElement){ var selectorOption = ""; - if (subElement.name.indexOf('ynonymous')>-1){ - selectorOption = " selected"; - } + // if (subElement.name.indexOf('ynonymous')>-1){ + // selectorOption = " selected"; + // } + options.append($(""; + // retVal += ""; - retVal += ""; + // retVal += ""; retVal += ""; @@ -534,7 +534,7 @@ var UTILS = { } retVal += ""; - retVal += ""; + // retVal += ""; } return retVal; },
    " + variant.DBSNP_ID + "" + variant.DBSNP_ID + "" + variant.CLOSEST_GENE + "" + variant.CLOSEST_GENE + "" + variant.PVALUE.toPrecision(3) + "click hereclick here