SelectVariantElements selectVariantElements = parseSelectElements(query, options, studyConfigurationManager); phoenixSQLQuery.select = selectVariantElements; Set<VariantField> returnedFields = selectVariantElements.getFields(); Map<Integer, List<Integer>> returnedSamples = selectVariantElements.getSamples(); Collection<Integer> studyIds = selectVariantElements.getStudies(); selectVariantElements.getFiles().forEach((studyId, fileIds) -> { for (Integer fileId : fileIds) { sb.append(",\""); selectVariantElements.getStudyConfigurations().get(studyId), sampleIds); List<Integer> includeFiles = selectVariantElements.getFiles().get(studyId); for (Integer fileId : fileIds) { if (!includeFiles.contains(fileId)) {
public static SelectVariantElements parseSelectElements( Query query, QueryOptions options, StudyConfigurationManager studyConfigurationManager) { Set<VariantField> includeFields = VariantField.getIncludeFields(options); List<Integer> includeStudies = VariantQueryUtils.getIncludeStudies(query, options, studyConfigurationManager, includeFields); Map<Integer, StudyConfiguration> studyConfigurations = new HashMap<>(); for (Integer studyId : includeStudies) { StudyConfiguration sc = studyConfigurationManager.getStudyConfiguration(studyId, options).first(); if (sc == null) { throw VariantQueryException.studyNotFound(studyId, studyConfigurationManager.getStudyNames(options)); } studyConfigurations.put(studyId, sc); } Function<Integer, StudyConfiguration> provider = studyConfigurations::get; Map<Integer, List<Integer>> sampleIds = VariantQueryUtils.getIncludeSamples(query, options, includeStudies, provider); Map<Integer, List<Integer>> fileIds = VariantQueryUtils.getIncludeFiles(query, includeStudies, includeFields, provider); if (fileIds.values().stream().allMatch(List::isEmpty)) { includeFields.remove(VariantField.STUDIES_FILES); includeFields.removeAll(VariantField.STUDIES_FILES.getChildren()); } if (sampleIds.values().stream().allMatch(List::isEmpty)) { includeFields.remove(VariantField.STUDIES_SAMPLES_DATA); includeFields.removeAll(VariantField.STUDIES_SAMPLES_DATA.getChildren()); } return new SelectVariantElements(includeFields, includeStudies, studyConfigurations, sampleIds, fileIds); }
if (!isValidParam(query, INCLUDE_STUDY)) { List<String> includeStudy = new ArrayList<>(); for (Integer studyId : selectVariantElements.getStudies()) { includeStudy.add(selectVariantElements.getStudyConfigurations().get(studyId).getStudyName()); List<String> includeSample = selectVariantElements.getSamples() .entrySet() .stream() .flatMap(e -> e.getValue() .stream() .map(selectVariantElements.getStudyConfigurations().get(e.getKey()).getSampleIds().inverse()::get)) .collect(Collectors.toList()); if (includeSample.isEmpty()) { List<String> includeFile = selectVariantElements.getFiles() .entrySet() .stream() .flatMap(e -> e.getValue() .stream() .map(selectVariantElements.getStudyConfigurations().get(e.getKey()).getFileIds().inverse()::get)) .collect(Collectors.toList()); if (includeFile.isEmpty()) {
if (!selectElements.getFields().contains(VariantField.ANNOTATION)) { scan.addColumn(family, annotationColumn); if (selectElements.getFields().contains(VariantField.STUDIES)) { for (Integer studyId : selectElements.getStudies()) { scan.addColumn(family, VariantPhoenixHelper.getStudyColumn(studyId).bytes()); scan.addColumn(family, VariantPhoenixHelper.getFillMissingColumn(studyId).bytes()); if (selectElements.getFields().contains(VariantField.STUDIES_STATS)) { for (StudyConfiguration sc : selectElements.getStudyConfigurations().values()) { for (Integer cohortId : sc.getCalculatedStats()) { scan.addColumn(family, selectElements.getSamples().forEach((studyId, sampleIds) -> { scan.addColumn(family, VariantPhoenixHelper.getStudyColumn(studyId).bytes()); for (Integer sampleId : sampleIds) { selectElements.getStudyConfigurations().get(studyId), sampleIds); for (Integer fileId : fileIds) { scan.addColumn(family, buildFileColumnKey(studyId, fileId)); selectElements.getFiles().forEach((studyId, fileIds) -> { scan.addColumn(family, VariantPhoenixHelper.getStudyColumn(studyId).bytes()); for (Integer fileId : fileIds) { if (selectElements.getFields().contains(VariantField.ANNOTATION)) { if (isValidParam(query, VariantHadoopDBAdaptor.ANNOT_NAME)) { int id = query.getInt(VariantHadoopDBAdaptor.ANNOT_NAME.key());
VariantQueryUtils.parseSelectElements(query, options, studyConfigurationManager); if (selectVariantElements.getStudies().size() != 1) { return null; Integer studyId = selectVariantElements.getStudies().get(0); StudyConfiguration studyConfiguration = selectVariantElements.getStudyConfigurations().get(studyId); Set<String> samples = new HashSet<>(); if (isValidParam(query, VariantQueryParam.SAMPLE)) { if (samples.isEmpty()) { sampleIds = selectVariantElements.getSamples().get(studyId); } else { sampleIds = samples.stream()
Set<VariantField> returnedFields = new HashSet<>(selectVariantElements.getFields()); List<Integer> studiesIds = selectVariantElements.getStudies();
sampleIds = studyConfiguration.getSampleIds().values(); } else { sampleIds = new HashSet<>(selectVariantElements.getSamples().get(studyConfiguration.getStudyId()));
HBaseToVariantAnnotationConverter converter = new HBaseToVariantAnnotationConverter(genomeHelper, ts) .setAnnotationIds(getStudyConfigurationManager().getProjectMetadata().first().getAnnotation()) .setIncludeFields(selectElements.getFields()); converter.setAnnotationColumn(annotationColumn, name); Iterator<Result> iterator = Iterators.concat(iterators);
private DocumentToVariantConverter getDocumentToVariantConverter(Query query, SelectVariantElements selectVariantElements) { List<Integer> returnedStudies = selectVariantElements.getStudies(); DocumentToSamplesConverter samplesConverter; samplesConverter = new DocumentToSamplesConverter(studyConfigurationManager); samplesConverter.setFormat(getIncludeFormats(query)); for (StudyConfiguration studyConfiguration : selectVariantElements.getStudyConfigurations().values()) { samplesConverter.addStudyConfiguration(studyConfiguration); samplesConverter.setIncludeSamples(selectVariantElements.getSamples()); studyEntryConverter = new DocumentToStudyVariantEntryConverter(false, selectVariantElements.getFiles(), samplesConverter); studyEntryConverter.setStudyConfigurationManager(studyConfigurationManager); ProjectMetadata projectMetadata = getStudyConfigurationManager().getProjectMetadata().first();
if (!selectVariantElements.getFiles().get(studyConfiguration.getStudyId()).contains(fileId)) {
/** * Creates a SORTED MAP with the required samples position. * * @param studyConfiguration Study Configuration * @return Sorted linked hash map */ private LinkedHashMap<String, Integer> getReturnedSamplesPosition(StudyConfiguration studyConfiguration) { if (!returnedSamplesPositionMap.containsKey(studyConfiguration.getStudyId())) { // LinkedHashMap<String, Integer> samplesPosition = StudyConfiguration.getReturnedSamplesPosition(studyConfiguration, // returnedSamples == null ? null : new LinkedHashSet<>(returnedSamples), StudyConfiguration::getIndexedSamplesPosition); // returnedSamplesPositionMap.put(studyConfiguration.getStudyId(), samplesPosition); LinkedHashMap<String, Integer> returnedSamples; if (selectVariantElements == null) { returnedSamples = StudyConfiguration.getSortedIndexedSamplesPosition(studyConfiguration); } else { List<Integer> sampleIds = selectVariantElements.getSamples().get(studyConfiguration.getStudyId()); returnedSamples = new LinkedHashMap<>(sampleIds.size()); BiMap<Integer, String> inverse = studyConfiguration.getSampleIds().inverse(); for (Integer sampleId : sampleIds) { returnedSamples.put(inverse.get(sampleId), returnedSamples.size()); } } returnedSamplesPositionMap.put(studyConfiguration.getStudyId(), returnedSamples); return returnedSamples; } else { return returnedSamplesPositionMap.get(studyConfiguration.getStudyId()); } }
@Override public Variant convert(Result result) { Variant variant = extractVariantFromVariantRowKey(result.getRow()); try { VariantAnnotation annotation = annotationConverter.convert(result); Map<Integer, StudyEntry> studies; if (selectVariantElements != null && selectVariantElements.getStudies().isEmpty()) { studies = Collections.emptyMap(); } else { studies = studyEntryConverter.convert(result); } return convert(variant, studies, annotation); } catch (RuntimeException e) { throw new IllegalStateException("Fail to parse variant: " + variant, e); } } }
protected StudyConfiguration getStudyConfiguration(Integer studyId) { StudyConfiguration studyConfiguration = selectVariantElements == null ? null : selectVariantElements.getStudyConfigurations().get(studyId); if (studyConfiguration != null) { return studyConfiguration; } else { QueryResult<StudyConfiguration> queryResult = scm.getStudyConfiguration(studyId, RO_CACHED_OPTIONS); if (queryResult.getResult().isEmpty()) { throw new IllegalStateException("No study found for study ID: " + studyId); } return queryResult.first(); } }
public VariantMetadata makeVariantMetadata(Query query, QueryOptions queryOptions) throws StorageEngineException { VariantQueryUtils.SelectVariantElements selectElements = VariantQueryUtils.parseSelectElements(query, queryOptions, scm); Map<Integer, List<Integer>> returnedSamples = selectElements.getSamples(); Map<Integer, List<Integer>> returnedFiles = selectElements.getFiles(); ProjectMetadata projectMetadata = scm.getProjectMetadata().first(); List<StudyConfiguration> studyConfigurations = new ArrayList<>(selectElements.getStudies().size()); for (Integer studyId : selectElements.getStudies()) { studyConfigurations.add(scm.getStudyConfiguration(studyId, QueryOptions.empty()).first()); } return makeVariantMetadata(studyConfigurations, projectMetadata, returnedSamples, returnedFiles, queryOptions); }
private HBaseToGenotypeCountConverter(byte[] columnFamily) { super(columnFamily, null, null); sampleIds = samples.stream().map(sc.getSampleIds()::get).collect(Collectors.toList()); sampleIdsSet = samples.stream().map(sc.getSampleIds()::get).collect(Collectors.toSet()); fileIds = StudyConfigurationManager.getFileIdsFromSampleIds(sc, sampleIds); super.setSelectVariantElements(new VariantQueryUtils.SelectVariantElements(sc, sampleIds, Collections.emptyList())); super.setUnknownGenotype("./."); }
public HBaseToVariantConverter<T> setSelectVariantElements(VariantQueryUtils.SelectVariantElements selectVariantElements) { this.selectVariantElements = selectVariantElements; studyEntryConverter.setSelectVariantElements(selectVariantElements); annotationConverter.setIncludeFields(selectVariantElements.getFields()); return this; }