/** * Remove an individual (from individual ID) of a given variant study metadata (from study ID). * * @param individualId Individual ID * @param studyId Study ID */ public void removeIndividual(String individualId, String studyId) { // Sanity check if (StringUtils.isEmpty(individualId)) { logger.error("Individual ID {} is null or empty.", individualId); return; } VariantStudyMetadata variantStudyMetadata = getVariantStudyMetadata(studyId); if (variantStudyMetadata == null) { logger.error("Study not found. Check your study ID: '{}'", studyId); return; } if (variantStudyMetadata.getIndividuals() != null) { for (int i = 0; i < variantStudyMetadata.getIndividuals().size(); i++) { if (individualId.equals(variantStudyMetadata.getIndividuals().get(i).getId())) { variantStudyMetadata.getIndividuals().remove(i); return; } } } }
private Individual getIndividualBySampleName(String sampleName, VariantStudyMetadata studyMetadata) { for (Individual individual: studyMetadata.getIndividuals()) { for (Sample sample: individual.getSamples()) { if (sampleName.equals(sample.getId())) { return individual; } } } return null; } }
/** * Get sample names form a variant study metadata. * * @param variantStudyMetadata Variant study metadata target * @return List of sample names */ public static List<String> getSampleNames(VariantStudyMetadata variantStudyMetadata) { if (variantStudyMetadata == null) { return null; } List<String> sampleNames = new ArrayList<>(); if (variantStudyMetadata.getIndividuals() != null) { for (org.opencb.biodata.models.metadata.Individual individual : variantStudyMetadata.getIndividuals()) { for (Sample sample : individual.getSamples()) { if (!StringUtils.isEmpty(sample.getId())) { sampleNames.add(sample.getId()); } } } } return sampleNames; } }
/** * Retrieve all samples for a given study (from its study ID). * * @param studyId Study ID * @return Sample list */ public List<Sample> getSamples(String studyId) { VariantStudyMetadata variantStudyMetadata = getVariantStudyMetadata(studyId); if (variantStudyMetadata == null) { logger.error("Study not found. Check your study ID: '{}'", studyId); return null; } List<Sample> samples = new ArrayList<>(); if (variantStudyMetadata.getIndividuals() != null) { for (org.opencb.biodata.models.metadata.Individual individual : variantStudyMetadata.getIndividuals()) { for (Sample sample : individual.getSamples()) { if (sample.getAnnotations() == null) { sample.setAnnotations(new HashMap<>()); } samples.add(sample); } } } return samples; }
/** * Add an individual to a given variant study metadata (from study ID). * * @param individual Individual to add * @param studyId Study ID */ public void addIndividual(org.opencb.biodata.models.metadata.Individual individual, String studyId) { // Sanity check if (individual == null || StringUtils.isEmpty(individual.getId())) { logger.error("Individual (or its ID) is null or empty."); return; } VariantStudyMetadata variantStudyMetadata = getVariantStudyMetadata(studyId); if (variantStudyMetadata == null) { logger.error("Study not found. Check your study ID: '{}'", studyId); return; } if (variantStudyMetadata.getIndividuals() == null) { variantStudyMetadata.setIndividuals(new ArrayList<>()); } for (org.opencb.biodata.models.metadata.Individual indi: variantStudyMetadata.getIndividuals()) { if (indi.getId() != null && indi.getId().equals(individual.getId())) { logger.error("Individual with id '{}' already exists in study '{}'", individual.getId(), studyId); return; } } variantStudyMetadata.getIndividuals().add(individual); }
@Override public boolean pre() { String study = metadata.getStudies().get(0).getId(); List<String> samples = metadata.getStudies().get(0).getIndividuals().stream() .flatMap(individual -> individual.getSamples().stream()).map(Sample::getId).collect(Collectors.toList()); VCFHeader vcfHeader = new VariantStudyMetadataToVCFHeaderConverter().convert(metadata.getStudies().get(0), annotations); variantContextWriter = VcfUtils.createVariantContextWriter(outputStream, vcfHeader.getSequenceDictionary(), Options.ALLOW_MISSING_FIELDS_IN_HEADER); variantContextWriter.writeHeader(vcfHeader); converter = newConverter(study, samples, annotations); return true; }
Iterator<org.opencb.biodata.models.metadata.Individual> iterator = studyMetadata.getIndividuals().iterator(); while (iterator.hasNext()) { org.opencb.biodata.models.metadata.Individual individual = iterator.next();
/** * Load variant metadata file. * * @param path Path to the variant metadata file * @throws IOException IOException */ public void load(Path path) throws IOException { FileUtils.checkPath(path); logger.debug("Loading variant metadata from '{}'", path.toAbsolutePath().toString()); variantMetadata = mapper.readValue(path.toFile(), VariantMetadata.class); // We need to add Individual info fields to their sample annotations to allow more complex queries for (VariantStudyMetadata variantStudyMetadata: variantMetadata.getStudies()) { if (variantStudyMetadata.getIndividuals() != null) { for (org.opencb.biodata.models.metadata.Individual individual : variantStudyMetadata.getIndividuals()) { for (Sample sample : individual.getSamples()) { sample.getAnnotations().put(INDIVIDUAL_ID, individual.getId()); sample.getAnnotations().put(INDIVIDUAL_FAMILY, individual.getFamily()); sample.getAnnotations().put(INDIVIDUAL_FATHER, individual.getFather()); sample.getAnnotations().put(INDIVIDUAL_MOTHER, individual.getMother()); sample.getAnnotations().put(INDIVIDUAL_SEX, individual.getSex()); sample.getAnnotations().put(INDIVIDUAL_PHENOTYPE, individual.getPhenotype()); } } } } }
if (variantStudyMetadata.getIndividuals() == null) { variantStudyMetadata.setIndividuals(new ArrayList<>()); if (!variantStudyMetadata.getIndividuals().isEmpty()) { for (org.opencb.biodata.models.metadata.Individual individual: variantStudyMetadata.getIndividuals()) { for (Sample sample: individual.getSamples()) { if (sampleId.equals(sample.getId())) { individual.setSamples(samples); variantStudyMetadata.getIndividuals().add(individual);
for (org.opencb.biodata.models.metadata.Individual src: variantStudyMetadata.getIndividuals()) { for (org.opencb.biodata.models.metadata.Individual src: variantStudyMetadata.getIndividuals()) {
for (Individual individual : variantStudyMetadata.getIndividuals()) { for (Sample sample : individual.getSamples()) { samples.add(sample.getId());
for (Member src: pedigree.getMembers()) { found = false; for (int i = 0; i < variantStudyMetadata.getIndividuals().size(); i++) { dest = variantStudyMetadata.getIndividuals().get(i); if (dest.getId().equals(src.getName())) { found = true;