void fillDefaultStats(Panel panel) { if (panel.getDiseasePanel().getStats() == null || panel.getDiseasePanel().getStats().isEmpty()) { Map<String, Integer> stats = new HashMap<>(); stats.put("numberOfVariants", panel.getDiseasePanel().getVariants().size()); stats.put("numberOfGenes", panel.getDiseasePanel().getGenes().size()); stats.put("numberOfRegions", panel.getDiseasePanel().getRegions().size()); panel.getDiseasePanel().setStats(stats); } }
attributes.put("PanelAppInfo", panel); Panel diseasePanel = new Panel(); diseasePanel.getDiseasePanel().setId(String.valueOf(panelInfo.get("id"))); diseasePanel.getDiseasePanel().setName(String.valueOf(panelInfo.get("name"))); diseasePanel.getDiseasePanel().setCategories(categories); diseasePanel.getDiseasePanel().setPhenotypes(phenotypes); diseasePanel.getDiseasePanel().setGenes(genes); diseasePanel.getDiseasePanel().setSource(new SourcePanel() .setId(String.valueOf(panelInfo.get("id"))) .setName(String.valueOf(panelInfo.get("name"))) .setProject("PanelApp (GEL)") ); diseasePanel.getDiseasePanel().setDescription(panelInfo.get("disease_sub_group") + " (" + panelInfo.get("disease_group") + ")"); diseasePanel.getDiseasePanel().setAttributes(attributes);
filterList.add(Filters.eq(QueryParams.ID.key(), panel.getDiseasePanel().getId())); filterList.add(Filters.eq(PRIVATE_STUDY_ID, studyId)); filterList.add(Filters.eq(QueryParams.STATUS_NAME.key(), Status.READY)); throw new CatalogDBException("Panel { id: '" + panel.getDiseasePanel().getId() + "'} already exists."); panel.setUid(newPanelId); panel.setStudyUid(studyId); if (StringUtils.isEmpty(panel.getUuid())) { panel.setUuid(UUIDUtils.generateOpenCGAUUID(UUIDUtils.Entity.PANEL)); panelDocument.put(RELEASE_FROM_VERSION, Arrays.asList(panel.getRelease())); panelDocument.put(LAST_OF_VERSION, true); panelDocument.put(LAST_OF_RELEASE, true); if (StringUtils.isNotEmpty(panel.getDiseasePanel().getCreationDate())) { panelDocument.put(PRIVATE_CREATION_DATE, TimeUtils.toDate(panel.getDiseasePanel().getCreationDate())); } else { panelDocument.put(PRIVATE_CREATION_DATE, TimeUtils.getDate()); panelCollection.insert(panelDocument, null); } catch (DuplicateKeyException e) { throw CatalogDBException.alreadyExists("Panel", studyId, "id", panel.getDiseasePanel().getId());
@Override public Document convertToStorageType(Panel object) { Document document = super.convertToStorageType(object); document.put("uid", object.getUid()); document.put("studyUid", object.getStudyUid()); return document; }
ParamUtils.checkAlias(panel.getDiseasePanel().getId(), "id"); panel.getDiseasePanel().setName(ParamUtils.defaultString(panel.getDiseasePanel().getName(), panel.getDiseasePanel().getId())); panel.setRelease(-1); panel.setVersion(1); panel.setAuthor(ParamUtils.defaultString(panel.getAuthor(), "")); panel.getDiseasePanel().setCreationDate(TimeUtils.getTime()); panel.getDiseasePanel().setModificationDate(TimeUtils.getTime()); panel.setStatus(new Status()); panel.getDiseasePanel().setCategories(ParamUtils.defaultObject(panel.getDiseasePanel().getCategories(), Collections.emptyList())); panel.getDiseasePanel().setTags(ParamUtils.defaultObject(panel.getDiseasePanel().getTags(), Collections.emptyList())); panel.getDiseasePanel().setDescription(ParamUtils.defaultString(panel.getDiseasePanel().getDescription(), "")); panel.getDiseasePanel().setPhenotypes(ParamUtils.defaultObject(panel.getDiseasePanel().getPhenotypes(), Collections.emptyList())); panel.getDiseasePanel().setVariants(ParamUtils.defaultObject(panel.getDiseasePanel().getVariants(), Collections.emptyList())); panel.getDiseasePanel().setRegions(ParamUtils.defaultObject(panel.getDiseasePanel().getRegions(), Collections.emptyList())); panel.getDiseasePanel().setGenes(ParamUtils.defaultObject(panel.getDiseasePanel().getGenes(), Collections.emptyList())); panel.getDiseasePanel().setAttributes(ParamUtils.defaultObject(panel.getDiseasePanel().getAttributes(), Collections.emptyMap())); panel.setUuid(UUIDUtils.generateOpenCGAUUID(UUIDUtils.Entity.PANEL));
@Test public void createInstallationPanelOverwrite() throws CatalogException, IOException { Panel panel = Panel.load(getClass().getResource("/disease_panels/panel1.json").openStream()); panelManager.create(panel, false, adminToken); QueryResult<Panel> diseasePanelQueryResult = panelManager.get(PanelManager.INSTALLATION_PANELS, panel.getDiseasePanel().getId(), QueryOptions.empty(), null); panelManager.create(panel, true, adminToken); QueryResult<Panel> diseasePanelQueryResult2 = panelManager.get(PanelManager.INSTALLATION_PANELS, panel.getDiseasePanel().getId(), QueryOptions.empty(), null); assertNotEquals(diseasePanelQueryResult.first().getUuid(), diseasePanelQueryResult2.first().getUuid()); }
public QueryResult<Panel> importInstallationPanel(String studyStr, String panelId, QueryOptions options, String token) throws CatalogException { String userId = userManager.getUserId(token); Study study = catalogManager.getStudyManager().resolveId(studyStr, userId); // 1. We check everything can be done authorizationManager.checkStudyPermission(study.getUid(), userId, StudyAclEntry.StudyPermissions.WRITE_PANELS); // Fetch the installation Panel (if it exists) Panel diseasePanel = getInstallationPanel(panelId); diseasePanel.setUuid(UUIDUtils.generateOpenCGAUUID(UUIDUtils.Entity.PANEL)); diseasePanel.getDiseasePanel().setCreationDate(TimeUtils.getTime()); diseasePanel.setRelease(studyManager.getCurrentRelease(study, userId)); diseasePanel.setVersion(1); // Install the current diseasePanel return panelDBAdaptor.insert(study.getUid(), diseasePanel, options); }
@Test public void createInstallationPanel() throws CatalogException, IOException { Panel panel = Panel.load(getClass().getResource("/disease_panels/panel1.json").openStream()); panelManager.create(panel, false, adminToken); QueryResult<Panel> diseasePanelQueryResult = panelManager.get(PanelManager.INSTALLATION_PANELS, panel.getDiseasePanel().getId(), QueryOptions.empty(), null); assertEquals(1, diseasePanelQueryResult.getNumResults()); assertEquals(panel.getDiseasePanel().getId(), diseasePanelQueryResult.first().getDiseasePanel().getId()); assertEquals(panel.toString(), diseasePanelQueryResult.first().toString()); }
panel.setUid(newPanelId); panel.setStudyUid(-1); panelDocument.put(RELEASE_FROM_VERSION, Arrays.asList(panel.getRelease())); panelDocument.put(LAST_OF_VERSION, true); panelDocument.put(LAST_OF_RELEASE, true); if (StringUtils.isNotEmpty(panel.getDiseasePanel().getCreationDate())) { panelDocument.put(PRIVATE_CREATION_DATE, TimeUtils.toDate(panel.getDiseasePanel().getCreationDate())); } else { panelDocument.put(PRIVATE_CREATION_DATE, TimeUtils.getDate()); .append(QueryParams.ID.key(), panel.getDiseasePanel().getId()); try { delete(query); } catch (CatalogDBException e1) { throw new CatalogDBException("Could not overwrite disease panel " + panel.getDiseasePanel().getId(), e1); throw CatalogDBException.alreadyExists("Panel", "id", panel.getDiseasePanel().getId());
authorizationManager.checkPanelPermission(study.getUid(), panel.getUid(), userId, PanelAclEntry.PanelPermissions.DELETE); .append(PanelDBAdaptor.QueryParams.UID.key(), panel.getUid()) .append(PanelDBAdaptor.QueryParams.STUDY_UID.key(), study.getUid()) .append(Constants.ALL_VERSIONS, true); ObjectMap updateParams = new ObjectMap() .append(PanelDBAdaptor.QueryParams.STATUS_NAME.key(), Status.DELETED) .append(PanelDBAdaptor.QueryParams.ID.key(), panel.getDiseasePanel().getName() + suffixName); QueryResult<Long> update = panelDBAdaptor.update(updateQuery, updateParams, QueryOptions.empty()); if (update.first() > 0) { numModified += 1; auditManager.recordDeletion(AuditRecord.Resource.panel, panel.getUid(), userId, null, updateParams, null, null); } else { failedList.add(new WriteResult.Fail(panel.getDiseasePanel().getId(), "Unknown reason")); failedList.add(new WriteResult.Fail(panel.getDiseasePanel().getId(), e.getMessage())); logger.debug("Cannot delete panel {}: {}", panel.getDiseasePanel().getId(), e.getMessage(), e);
@Test public void updateTest() throws IOException, CatalogException { Panel panel = Panel.load(getClass().getResource("/disease_panels/panel1.json").openStream()); panelManager.create(panel, false, adminToken); Panel diseasePanelQueryResult = panelManager.importInstallationPanel(studyFqn, panel.getDiseasePanel().getId(), null, sessionIdUser).first(); new ObjectMap("id", "BRCA2") )); Panel panelUpdated = panelManager.update(studyFqn, diseasePanelQueryResult.getDiseasePanel().getId(), params, null, sessionIdUser) .first(); assertEquals("author", panelUpdated.getDiseasePanel().getSource().getAuthor()); assertEquals(1, panelUpdated.getDiseasePanel().getRegions().size()); assertEquals("chr1:1-1000", panelUpdated.getDiseasePanel().getRegions().get(0).getLocation()); assertEquals(1, panelUpdated.getDiseasePanel().getGenes().size()); assertEquals("BRCA2", panelUpdated.getDiseasePanel().getGenes().get(0).getId()); assertEquals(1, panelUpdated.getDiseasePanel().getPhenotypes().size()); assertEquals("ontologyTerm", panelUpdated.getDiseasePanel().getPhenotypes().get(0).getId()); assertEquals(1, panelUpdated.getDiseasePanel().getVariants().size()); assertEquals("variant1", panelUpdated.getDiseasePanel().getVariants().get(0).getId());
long studyId = panelQueryResult.first().getStudyUid();
@Override public QueryResult<Panel> create(String studyStr, Panel panel, QueryOptions options, String sessionId) throws CatalogException { String userId = userManager.getUserId(sessionId); Study study = catalogManager.getStudyManager().resolveId(studyStr, userId); // 1. We check everything can be done authorizationManager.checkStudyPermission(study.getUid(), userId, StudyAclEntry.StudyPermissions.WRITE_PANELS); // Check all the panel fields ParamUtils.checkAlias(panel.getDiseasePanel().getId(), "id"); panel.getDiseasePanel().setName(ParamUtils.defaultString(panel.getDiseasePanel().getName(), panel.getDiseasePanel().getId())); panel.setRelease(studyManager.getCurrentRelease(study, userId)); panel.setVersion(1); panel.setAuthor(ParamUtils.defaultString(panel.getAuthor(), "")); panel.getDiseasePanel().setCreationDate(TimeUtils.getTime()); panel.getDiseasePanel().setModificationDate(TimeUtils.getTime()); panel.setStatus(new Status()); panel.getDiseasePanel().setCategories(ParamUtils.defaultObject(panel.getDiseasePanel().getCategories(), Collections.emptyList())); panel.getDiseasePanel().setTags(ParamUtils.defaultObject(panel.getDiseasePanel().getTags(), Collections.emptyList())); panel.getDiseasePanel().setDescription(ParamUtils.defaultString(panel.getDiseasePanel().getDescription(), "")); panel.getDiseasePanel().setPhenotypes(ParamUtils.defaultObject(panel.getDiseasePanel().getPhenotypes(), Collections.emptyList())); panel.getDiseasePanel().setVariants(ParamUtils.defaultObject(panel.getDiseasePanel().getVariants(), Collections.emptyList())); panel.getDiseasePanel().setRegions(ParamUtils.defaultObject(panel.getDiseasePanel().getRegions(), Collections.emptyList())); panel.getDiseasePanel().setGenes(ParamUtils.defaultObject(panel.getDiseasePanel().getGenes(), Collections.emptyList())); panel.getDiseasePanel().setAttributes(ParamUtils.defaultObject(panel.getDiseasePanel().getAttributes(), Collections.emptyMap())); panel.setUuid(UUIDUtils.generateOpenCGAUUID(UUIDUtils.Entity.PANEL)); fillDefaultStats(panel); options = ParamUtils.defaultObject(options, QueryOptions::new); return panelDBAdaptor.insert(study.getUid(), panel, options); }
@Test public void importGlobalPanel() throws CatalogException, IOException { Panel panel = Panel.load(getClass().getResource("/disease_panels/panel1.json").openStream()); panelManager.create(panel, false, adminToken); Panel installationPanel = panelManager.get(PanelManager.INSTALLATION_PANELS, panel.getDiseasePanel().getId(), QueryOptions.empty(), null).first(); QueryResult<Panel> diseasePanelQueryResult = panelManager.importInstallationPanel(studyFqn, panel.getDiseasePanel().getId(), QueryOptions.empty(), sessionIdUser); assertEquals(1, diseasePanelQueryResult.getNumResults()); assertNotEquals(installationPanel.getUuid(), diseasePanelQueryResult.first().getUuid()); }
@Test public void createTest() throws IOException, CatalogException { Panel panel = Panel.load(getClass().getResource("/disease_panels/panel1.json").openStream()); QueryResult<Panel> diseasePanelQueryResult = panelManager.create(studyFqn, panel, null, sessionIdUser); assertEquals(1, diseasePanelQueryResult.getNumResults()); assertEquals(panel.getDiseasePanel().getId(), diseasePanelQueryResult.first().getDiseasePanel().getId()); assertEquals(panel.toString(), diseasePanelQueryResult.first().toString()); }
private List<String> getGeneIdsFromPanel(Panel diseasePanel) throws CatalogException { List<String> geneIds = new ArrayList<>(diseasePanel.getDiseasePanel().getGenes().size()); for (GenePanel gene : diseasePanel.getDiseasePanel().getGenes()) { geneIds.add(gene.getId()); } return geneIds; }
catalog.getStudyManager().create("p2", "p2s2", null, "s1", Study.Type.CONTROL_SET, null, null, null, null, null, null, null, null, null, null, sessionId); Panel panel = new Panel("MyPanel", "MyPanel", 1); panel.getDiseasePanel().setGenes( Arrays.asList( new GenePanel().setName("BRCA2"),
void processCompoundHeterozygous(ClinicalAnalysis clinicalAnalysis, Pedigree pedigree, Phenotype phenotype, Query query, Map<String, ReportedVariant> reportedVariantMap, Panel diseasePanel) throws Exception { VariantQueryResult<Variant> variantQueryResult; Map<String, List<String>> probandGenotype; // Calculate compound heterozygous probandGenotype = new HashMap<>(); probandGenotype.put(clinicalAnalysis.getProband().getId(), Arrays.asList(ModeOfInheritance.toGenotypeString(ModeOfInheritance.GENOTYPE_0_1))); putGenotypes(probandGenotype, query); for (GenePanel gene : diseasePanel.getDiseasePanel().getGenes()) { query.put(VariantQueryParam.ANNOT_XREF.key(), gene); variantQueryResult = variantStorageManager.get(query, QueryOptions.empty(), token); List<Variant> compoundHetVariantList = ModeOfInheritance.compoundHeterozygosity(pedigree, variantQueryResult.getResult().iterator()); // TODO: We need to create another ReportedModeOfInheritance for compound heterozygous!!?? generateReportedVariants(compoundHetVariantList, phenotype, diseasePanel, ClinicalProperty.ModeOfInheritance.COMPOUND_HETEROZYGOUS, reportedVariantMap); } }
private void generateReportedVariants(List<Variant> variantList, Phenotype phenotype, Panel diseasePanel, ClinicalProperty.ModeOfInheritance moi, Map<String, ReportedVariant> reportedVariantMap) { for (Variant variant : variantList) { if (!reportedVariantMap.containsKey(variant.getId())) { reportedVariantMap.put(variant.getId(), new ReportedVariant(variant.getImpl(), 0, new ArrayList<>(), Collections.emptyList(), Collections.emptyMap())); } ReportedVariant reportedVariant = reportedVariantMap.get(variant.getId()); // Sanity check if (variant.getAnnotation() != null && ListUtils.isNotEmpty(variant.getAnnotation().getConsequenceTypes())) { for (ConsequenceType ct: variant.getAnnotation().getConsequenceTypes()) { // Create the reported event ReportedEvent reportedEvent = new ReportedEvent() .setId("JT-PF-" + reportedVariant.getReportedEvents().size()) .setPhenotypes(Collections.singletonList(phenotype)) .setConsequenceTypeIds(Collections.singletonList(ct.getBiotype())) .setGenomicFeature(new GenomicFeature(ct.getEnsemblGeneId(), ct.getEnsemblTranscriptId(), ct.getGeneName(), null, null)) .setModeOfInheritance(moi) .setPanelId(diseasePanel.getDiseasePanel().getId()); // TODO: add additional reported event fields // Add reported event to the reported variant reportedVariant.getReportedEvents().add(reportedEvent); } } } }
private void generateReportedVariants(VariantQueryResult<Variant> variantQueryResult, Phenotype phenotype, Panel diseasePanel, ClinicalProperty.ModeOfInheritance moi, Penetrance penetrance, Map<String, ReportedVariant> reportedVariantMap) { for (Variant variant: variantQueryResult.getResult()) { if (!reportedVariantMap.containsKey(variant.getId())) { reportedVariantMap.put(variant.getId(), new ReportedVariant(variant.getImpl(), 0, new ArrayList<>(), Collections.emptyList(), Collections.emptyMap())); } ReportedVariant reportedVariant = reportedVariantMap.get(variant.getId()); // Sanity check if (variant.getAnnotation() != null && ListUtils.isNotEmpty(variant.getAnnotation().getConsequenceTypes())) { for (ConsequenceType ct: variant.getAnnotation().getConsequenceTypes()) { // Create the reported event ReportedEvent reportedEvent = new ReportedEvent() .setId("JT-PF-" + reportedVariant.getReportedEvents().size()) .setPhenotypes(Collections.singletonList(phenotype)) .setConsequenceTypeIds(Collections.singletonList(ct.getBiotype())) .setGenomicFeature(new GenomicFeature(ct.getEnsemblGeneId(), ct.getEnsemblTranscriptId(), ct.getGeneName(), null, null)) .setModeOfInheritance(moi) .setPanelId(diseasePanel.getDiseasePanel().getId()) .setPenetrance(penetrance); // TODO: add additional reported event fields // Add reported event to the reported variant reportedVariant.getReportedEvents().add(reportedEvent); } } } }