void processDeNovo(ClinicalAnalysis clinicalAnalysis, Pedigree pedigree, Phenotype phenotype, Query query, Map<String, ReportedVariant> reportedVariantMap, Panel diseasePanel) throws CatalogException, StorageEngineException, IOException { VariantQueryResult<Variant> variantQueryResult; Map<String, List<String>> probandGenotype = new HashMap<>(); probandGenotype.put(clinicalAnalysis.getProband().getId(), Arrays.asList(ModeOfInheritance.toGenotypeString(ModeOfInheritance.GENOTYPE_0_0))); putGenotypesNegated(probandGenotype, query); variantQueryResult = variantStorageManager.get(query, QueryOptions.empty(), token); List<Variant> deNovoVariantList = ModeOfInheritance.deNovoVariants(pedigree.getProband(), variantQueryResult.getResult().iterator()); // TODO: We need to create another ReportedModeOfInheritance for de novo!!?? generateReportedVariants(deNovoVariantList, phenotype, diseasePanel, ClinicalProperty.ModeOfInheritance.DE_NOVO, reportedVariantMap); }
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); } }
if (member.getId().equals(clinicalAnalysis.getProband().getId())) { proband = member; List<Long> probandSample = clinicalAnalysis.getProband().getSamples().stream().map(Sample::getUid).collect(Collectors.toList()); } else if (clinicalAnalysis.getProband() != null && clinicalAnalysis.getProband().getSamples() != null) { for (Sample sample : clinicalAnalysis.getProband().getSamples()) { sampleMap.put(sample.getId(), sample.getUid());
if (clinicalAnalysis.getProband() != null && clinicalAnalysis.getProband().getSamples() != null && !clinicalAnalysis.getProband().getSamples().isEmpty()) { samples.add(getClinicalAnalysis().getProband().getSamples().get(0).getId());
private void validateFamilyAndProband(ClinicalAnalysis clinicalAnalysis, Study study, String sessionId) throws CatalogException { if (clinicalAnalysis.getFamily() != null && StringUtils.isNotEmpty(clinicalAnalysis.getFamily().getId())) { MyResource<Family> familyResource = catalogManager.getFamilyManager().getUid(clinicalAnalysis.getFamily().getId(), study.getFqn(), sessionId); clinicalAnalysis.setFamily(familyResource.getResource()); // Check the proband is an actual member of the family Query query = new Query() .append(FamilyDBAdaptor.QueryParams.UID.key(), familyResource.getResource().getUid()) .append(FamilyDBAdaptor.QueryParams.MEMBER_UID.key(), clinicalAnalysis.getProband().getUid()); QueryResult<Family> count = catalogManager.getFamilyManager().count(study.getFqn(), query, sessionId); if (count.getNumTotalResults() == 0) { throw new CatalogException("The member " + clinicalAnalysis.getProband().getId() + " does not belong to the family " + clinicalAnalysis.getFamily().getId()); } } }
private void validateMembers(ClinicalAnalysis clinicalAnalysis, Study study, String sessionId) throws CatalogException { Individual proband = clinicalAnalysis.getProband();
@Test public void createClinicalAnalysisTest() throws CatalogException { QueryResult<ClinicalAnalysis> dummyEnvironment = createDummyEnvironment(true); assertEquals(1, dummyEnvironment.getNumResults()); assertEquals(0, dummyEnvironment.first().getInterpretations().size()); assertEquals("family", dummyEnvironment.first().getFamily().getId()); assertEquals(5, dummyEnvironment.first().getFamily().getMembers().size()); assertNotNull(dummyEnvironment.first().getProband()); assertEquals("child1", dummyEnvironment.first().getProband().getId()); assertEquals(1, dummyEnvironment.first().getProband().getSamples().size()); assertEquals("sample2", dummyEnvironment.first().getProband().getSamples().get(0).getId()); assertEquals(catalogManager.getSampleManager().getUid("sample2", STUDY, sessionIdUser).getResource().getUid(), dummyEnvironment.first().getProband().getSamples().get(0).getUid()); }
@Test public void createClinicalAnalysisNoFamilyTest() throws CatalogException { QueryResult<ClinicalAnalysis> dummyEnvironment = createDummyEnvironment(false); assertEquals(1, dummyEnvironment.getNumResults()); assertEquals(0, dummyEnvironment.first().getInterpretations().size()); assertEquals(catalogManager.getIndividualManager().getUid("child1", STUDY, sessionIdUser).getResource().getUid(), dummyEnvironment.first().getProband().getUid()); assertEquals(1, dummyEnvironment.first().getProband().getSamples().size()); assertEquals(catalogManager.getSampleManager().getUid("sample2", STUDY, sessionIdUser).getResource().getUid(), dummyEnvironment.first().getProband().getSamples().get(0).getUid()); }
if (clinicalAnalysis.getProband() == null || StringUtils.isEmpty(clinicalAnalysis.getProband().getId())) { throw new AnalysisException("Missing proband in clinical analysis " + clinicalAnalysisId); org.opencb.opencga.core.models.Individual proband = clinicalAnalysis.getProband(); if (ListUtils.isEmpty(proband.getSamples())) { throw new AnalysisException("Missing samples in proband " + proband.getId() + " in clinical analysis " + clinicalAnalysisId); probandSampleId = clinicalAnalysis.getProband().getSamples().get(0).getId();
if (clinicalAnalysis.getProband() == null || StringUtils.isEmpty(clinicalAnalysis.getProband().getId())) { throw new AnalysisException("Missing proband in clinical analysis " + clinicalAnalysisId); org.opencb.opencga.core.models.Individual proband = clinicalAnalysis.getProband(); if (ListUtils.isEmpty(proband.getSamples())) { throw new AnalysisException("Missing samples in proband " + proband.getId() + " in clinical analysis " + clinicalAnalysisId); .append(FileDBAdaptor.QueryParams.SAMPLES.key(), clinicalAnalysis.getProband().getSamples().get(0).getId()) .append(FileDBAdaptor.QueryParams.FORMAT.key(), File.Format.BAM), new QueryOptions(QueryOptions.INCLUDE, FileDBAdaptor.QueryParams.UUID.key()), token);
@Test public void updateSubjectsNoFamilyTest() throws CatalogException { createDummyEnvironment(false); ObjectMap params = new ObjectMap(ClinicalAnalysisDBAdaptor.QueryParams.PROBAND.key(), new Individual().setId("child1").setSamples(Arrays.asList(new Sample().setId("sample2")))); QueryResult<ClinicalAnalysis> updateResult = catalogManager.getClinicalAnalysisManager().update(STUDY, "analysis", params, QueryOptions.empty(), sessionIdUser); assertEquals(1, updateResult.getNumResults()); assertEquals(0, updateResult.first().getInterpretations().size()); assertEquals(catalogManager.getIndividualManager().getUid("child1", STUDY, sessionIdUser).getResource().getUid(), updateResult.first().getProband().getUid()); assertEquals(1, updateResult.first().getProband().getSamples().size()); assertEquals(catalogManager.getSampleManager().getUid("sample2", STUDY, sessionIdUser).getResource().getUid(), updateResult.first().getProband().getSamples().get(0).getUid()); }
@Test public void updateSubjectsAndFamilyTest() throws CatalogException { createDummyEnvironment(false); ObjectMap params = new ObjectMap() .append(ClinicalAnalysisDBAdaptor.QueryParams.PROBAND.key(), new Individual().setId("child1").setSamples(Arrays.asList(new Sample().setId("sample2")))) .append(ClinicalAnalysisDBAdaptor.QueryParams.FAMILY.key(), new Family().setId("family")); QueryResult<ClinicalAnalysis> updateResult = catalogManager.getClinicalAnalysisManager().update(STUDY, "analysis", params, QueryOptions.empty(), sessionIdUser); assertEquals(1, updateResult.getNumResults()); assertEquals(0, updateResult.first().getInterpretations().size()); assertEquals(catalogManager.getFamilyManager().getUid("family", STUDY, sessionIdUser).getResource().getUid(), updateResult.first().getFamily().getUid()); assertEquals(catalogManager.getIndividualManager().getUid("child1", STUDY, sessionIdUser).getResource().getUid(), updateResult.first().getProband().getUid()); assertEquals(1, updateResult.first().getProband().getSamples().size()); assertEquals(catalogManager.getSampleManager().getUid("sample2", STUDY, sessionIdUser).getResource().getUid(), updateResult.first().getProband().getSamples().get(0).getUid()); }
@Override public QueryResult<ClinicalAnalysis> create(String studyStr, ClinicalAnalysis clinicalAnalysis, QueryOptions options, String sessionId) throws CatalogException { String userId = catalogManager.getUserManager().getUserId(sessionId); Study study = catalogManager.getStudyManager().resolveId(studyStr, userId); authorizationManager.checkStudyPermission(study.getUid(), userId, StudyAclEntry.StudyPermissions.WRITE_CLINICAL_ANALYSIS); options = ParamUtils.defaultObject(options, QueryOptions::new); ParamUtils.checkObj(clinicalAnalysis, "clinicalAnalysis"); ParamUtils.checkAlias(clinicalAnalysis.getId(), "id"); ParamUtils.checkObj(clinicalAnalysis.getType(), "type"); ParamUtils.checkObj(clinicalAnalysis.getDueDate(), "dueDate"); if (TimeUtils.toDate(clinicalAnalysis.getDueDate()) == null) { throw new CatalogException("Unrecognised due date. Accepted format is: yyyyMMddHHmmss"); } clinicalAnalysis.setProband(getFullValidatedMember(clinicalAnalysis.getProband(), study, sessionId)); clinicalAnalysis.setFamily(getFullValidatedFamily(clinicalAnalysis.getFamily(), study, sessionId)); validateClinicalAnalysisFields(clinicalAnalysis, study, sessionId); clinicalAnalysis.setCreationDate(TimeUtils.getTime()); clinicalAnalysis.setDescription(ParamUtils.defaultString(clinicalAnalysis.getDescription(), "")); clinicalAnalysis.setStatus(new ClinicalAnalysis.ClinicalStatus()); clinicalAnalysis.setRelease(catalogManager.getStudyManager().getCurrentRelease(study, userId)); clinicalAnalysis.setAttributes(ParamUtils.defaultObject(clinicalAnalysis.getAttributes(), Collections.emptyMap())); clinicalAnalysis.setInterpretations(ParamUtils.defaultObject(clinicalAnalysis.getInterpretations(), ArrayList::new)); clinicalAnalysis.setPriority(ParamUtils.defaultObject(clinicalAnalysis.getPriority(), ClinicalAnalysis.Priority.MEDIUM)); clinicalAnalysis.setUuid(UUIDUtils.generateOpenCGAUUID(UUIDUtils.Entity.CLINICAL)); QueryResult<ClinicalAnalysis> queryResult = clinicalDBAdaptor.insert(study.getUid(), clinicalAnalysis, options); return queryResult; }