diff --git a/.github/workflows/develop.yml b/.github/workflows/develop.yml index 0e8f622a2b6..50c396dd7cc 100644 --- a/.github/workflows/develop.yml +++ b/.github/workflows/develop.yml @@ -15,7 +15,7 @@ jobs: test: uses: ./.github/workflows/test-analysis.yml - needs: deploy-docker-ext-tools + needs: build with: test_profile: runShortTests,runMediumTests secrets: inherit diff --git a/.github/workflows/docker-ext-tools.yml b/.github/workflows/docker-ext-tools.yml index 07062f03278..6ded6d96fbe 100644 --- a/.github/workflows/docker-ext-tools.yml +++ b/.github/workflows/docker-ext-tools.yml @@ -8,7 +8,6 @@ on: - TASK-* paths: - opencga-app/app/cloud/docker/opencga-ext-tools/Dockerfile - workflow_dispatch: jobs: build: @@ -19,5 +18,4 @@ jobs: needs: build with: cli: python3 ./build/cloud/docker/docker-build.py push --images ext-tools --tag ${{ needs.build.outputs.version }} - secrets: inherit - + secrets: inherit \ No newline at end of file diff --git a/.github/workflows/long-test-analysis.yml b/.github/workflows/long-test-analysis.yml index ef610d74bda..c898c4dfa0b 100644 --- a/.github/workflows/long-test-analysis.yml +++ b/.github/workflows/long-test-analysis.yml @@ -5,13 +5,13 @@ name: Long test for run only on weekend on: schedule: - cron: '10 1 * * 6' + workflow_dispatch: jobs: test: uses: ./.github/workflows/test-analysis.yml secrets: inherit with: - test_profile: runLongTests,runMediumTests,runShortTests - report_context: development + test_profile: runShortTests,runMediumTests,runLongTests, diff --git a/.github/workflows/manual-deploy-docker.yml b/.github/workflows/manual-deploy-docker.yml new file mode 100644 index 00000000000..3c9660bbb2c --- /dev/null +++ b/.github/workflows/manual-deploy-docker.yml @@ -0,0 +1,50 @@ +name: Manual deploy Docker base +on: + workflow_dispatch: + inputs: + branch: + description: "The branch, tag or SHA of the source code to build docker." + type: string + required: true + tag: + description: "The tag for the new docker." + type: string + required: true + +jobs: + build: + name: Build Java app + runs-on: ubuntu-22.04 + outputs: + version: ${{ steps.get_project_version.outputs.version }} + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: '10' + ref: "${{ inputs.branch }}" + - name: Set up JDK 8 + uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: '8' + cache: 'maven' + - name: Install dependencies branches + run: | + if [ -f "./.github/workflows/scripts/get_same_branch.sh" ]; then + chmod +x ./.github/workflows/scripts/get_same_branch.sh + ./.github/workflows/scripts/get_same_branch.sh ${{ github.ref_name }} + fi + - name: Maven Build (skip tests) + run: mvn -T 2 clean install -DskipTests + - uses: actions/upload-artifact@v3 + with: + name: build-folder + path: build + + + deploy-docker: + uses: opencb/java-common-libs/.github/workflows/deploy-docker-hub-workflow.yml@develop + needs: build + with: + cli: python3 ./build/cloud/docker/docker-build.py push --images base,init --tag ${{ inputs.tag }} + secrets: inherit \ No newline at end of file diff --git a/.github/workflows/manual-deploy-ext-tools.yml b/.github/workflows/manual-deploy-ext-tools.yml new file mode 100644 index 00000000000..3f64fd392de --- /dev/null +++ b/.github/workflows/manual-deploy-ext-tools.yml @@ -0,0 +1,50 @@ +name: Manual deploy Docker Ext-Tools +on: + workflow_dispatch: + inputs: + branch: + description: "The branch, tag or SHA of the source code to build docker." + type: string + required: true + tag: + description: "The tag for the new docker." + type: string + required: true + +jobs: + build: + name: Build Java app + runs-on: ubuntu-22.04 + outputs: + version: ${{ steps.get_project_version.outputs.version }} + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: '10' + ref: "${{ inputs.branch }}" + - name: Set up JDK 8 + uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: '8' + cache: 'maven' + - name: Install dependencies branches + run: | + if [ -f "./.github/workflows/scripts/get_same_branch.sh" ]; then + chmod +x ./.github/workflows/scripts/get_same_branch.sh + ./.github/workflows/scripts/get_same_branch.sh ${{ github.ref_name }} + fi + - name: Maven Build (skip tests) + run: mvn -T 2 clean install -DskipTests + - uses: actions/upload-artifact@v3 + with: + name: build-folder + path: build + + + deploy-docker-ext-tools: + uses: opencb/java-common-libs/.github/workflows/deploy-docker-hub-workflow.yml@develop + needs: build + with: + cli: python3 ./build/cloud/docker/docker-build.py push --images ext-tools --tag ${{ inputs.tag }} + secrets: inherit \ No newline at end of file diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0ed6340be1f..b7fccc7fa3f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -14,21 +14,21 @@ jobs: deploy-maven: uses: opencb/java-common-libs/.github/workflows/deploy-maven-repository-workflow.yml@develop - needs: test + needs: build with: maven_opts: -P storage-hadoop,hdp3.1 -Dopencga.war.name=opencga secrets: inherit deploy-docker: uses: opencb/java-common-libs/.github/workflows/deploy-docker-hub-workflow.yml@develop - needs: test + needs: build with: cli: python3 ./build/cloud/docker/docker-build.py push --images base,init secrets: inherit deploy-python: uses: opencb/java-common-libs/.github/workflows/deploy-python-workflow.yml@develop - needs: test + needs: build with: cli: ./clients/python/python-build.sh push artifact: build-folder @@ -42,3 +42,4 @@ jobs: file: | opencga-client-${{ needs.build.outputs.version }}.tar.gz clients/R/opencgaR_${{ needs.build.outputs.version }}.tar.gz + diff --git a/.github/workflows/test-analysis.yml b/.github/workflows/test-analysis.yml index 732d92a4e56..a83cea15dc9 100644 --- a/.github/workflows/test-analysis.yml +++ b/.github/workflows/test-analysis.yml @@ -8,6 +8,7 @@ on: required: true mvn_opts: type: string + required: false default: "" secrets: @@ -82,3 +83,4 @@ jobs: report_paths: './**/surefire-reports/TEST-*.xml' commit: '${{ github.sha }}' fail_on_test_failures: true + diff --git a/opencga-analysis/pom.xml b/opencga-analysis/pom.xml index ddefa7d2618..adcb53e2d0e 100644 --- a/opencga-analysis/pom.xml +++ b/opencga-analysis/pom.xml @@ -22,7 +22,7 @@ org.opencb.opencga opencga - 2.10.0-SNAPSHOT + 2.11.0-SNAPSHOT ../pom.xml diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/alignment/AlignmentStorageManager.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/alignment/AlignmentStorageManager.java index 38953f5ff7f..fd8a0cebad5 100644 --- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/alignment/AlignmentStorageManager.java +++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/alignment/AlignmentStorageManager.java @@ -230,7 +230,7 @@ public OpenCGAResult coverageStats(String studyIdStr, String String species = projectQueryResult.first().getOrganism().getScientificName(); String assembly = projectQueryResult.first().getOrganism().getAssembly(); String dataRelease = projectQueryResult.first().getCellbase().getDataRelease(); - String cellbaseToken = projectQueryResult.first().getCellbase().getToken(); + String cellbaseToken = projectQueryResult.first().getCellbase().getApiKey(); for (String geneName : geneNames) { @@ -451,7 +451,7 @@ public List mergeRegions(List regions, List genes, boole String species = projectQueryResult.first().getOrganism().getScientificName(); String assembly = projectQueryResult.first().getOrganism().getAssembly(); String dataRelease = projectQueryResult.first().getCellbase().getDataRelease(); - String cellbaseToken = projectQueryResult.first().getCellbase().getToken(); + String cellbaseToken = projectQueryResult.first().getCellbase().getApiKey(); CellBaseClient cellBaseClient = new CellBaseClient(species, assembly, dataRelease, cellbaseToken, projectQueryResult.first().getCellbase().toClientConfiguration()); GeneClient geneClient = cellBaseClient.getGeneClient(); diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/hrdetect/HRDetectAnalysis.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/hrdetect/HRDetectAnalysis.java index f6dee08bd8e..e808c33cd36 100644 --- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/hrdetect/HRDetectAnalysis.java +++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/hrdetect/HRDetectAnalysis.java @@ -59,7 +59,7 @@ public class HRDetectAnalysis extends OpenCgaToolScopeStudy { public static final String ID = "hr-detect"; public static final String DESCRIPTION = "Run HRDetect analysis for a given somatic sample."; - public final static String HRDETECT_SCORES_FILENAME_DEFAULT = "data_matrix.tsv"; + public final static String HRDETECT_SCORES_FILENAME_DEFAULT = "hrdetect_output.tsv"; @ToolParams private HRDetectAnalysisParams hrdetectParams = new HRDetectAnalysisParams(); diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/manager/VariantStorageManager.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/manager/VariantStorageManager.java index 806fbb6d818..22b337e9621 100644 --- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/manager/VariantStorageManager.java +++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/manager/VariantStorageManager.java @@ -49,6 +49,7 @@ import org.opencb.opencga.catalog.managers.StudyManager; import org.opencb.opencga.core.api.ParamConstants; import org.opencb.opencga.core.cellbase.CellBaseValidator; +import org.opencb.opencga.core.common.ExceptionUtils; import org.opencb.opencga.core.common.UriUtils; import org.opencb.opencga.core.config.storage.CellBaseConfiguration; import org.opencb.opencga.core.config.storage.SampleIndexConfiguration; @@ -564,7 +565,10 @@ public OpenCGAResult setCellbaseConfiguration(String project, CellBaseConfi String annotationSaveId, String token) throws CatalogException, StorageEngineException { StopWatch stopwatch = StopWatch.createStarted(); - return secureOperationByProject("configureCellbase", project, new ObjectMap(), token, engine -> { + return secureOperationByProject("configureCellbase", project, new ObjectMap() + .append("cellbaseConfiguration", cellbaseConfiguration) + .append("annotate", annotate) + .append("annotationSaveId", annotationSaveId), token, engine -> { OpenCGAResult result = new OpenCGAResult<>(); result.setResultType(Job.class.getCanonicalName()); result.setResults(new ArrayList<>()); @@ -1017,8 +1021,9 @@ private void setCellbaseConfiguration(VariantStorageEngine engine, String projec .get(project, new QueryOptions(INCLUDE, ProjectDBAdaptor.QueryParams.CELLBASE.key()), token) .first().getCellbase(); if (cellbase != null) { - if (StringUtils.isEmpty(cellbase.getToken()) || storageConfiguration.getCellbase() != null) { - cellbase.setToken(storageConfiguration.getCellbase().getToken()); + // To ensure that we use the project API key before using the storage API key + if (StringUtils.isEmpty(cellbase.getApiKey()) && storageConfiguration.getCellbase() != null) { + cellbase.setApiKey(storageConfiguration.getCellbase().getApiKey()); } engine.getConfiguration().setCellbase(cellbase); engine.reloadCellbaseConfiguration(); @@ -1225,7 +1230,7 @@ private R secureTool(String toolId, boolean isOperation, ObjectMap params, S throw e; } catch (Exception e) { exception = e; - throw new StorageEngineException("Error executing operation " + toolId, e); + throw new StorageEngineException("Error executing operation '" + toolId + "' : " + e.getMessage(), e); } finally { if (result instanceof DataResult) { auditAttributes.append("dbTime", ((DataResult) result).getTime()); @@ -1237,6 +1242,8 @@ private R secureTool(String toolId, boolean isOperation, ObjectMap params, S if (exception != null) { auditAttributes.append("errorType", exception.getClass()); auditAttributes.append("errorMessage", exception.getMessage()); + auditAttributes.append("errorMessageFull", ExceptionUtils.prettyExceptionMessage(exception, false, true)); + auditAttributes.append("exceptionStackTrace", ExceptionUtils.prettyExceptionStackTrace(exception)); status = new AuditRecord.Status(AuditRecord.Status.Result.ERROR, new Error(-1, exception.getClass().getName(), exception.getMessage())); } else { diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/mutationalSignature/MutationalSignatureLocalAnalysisExecutor.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/mutationalSignature/MutationalSignatureLocalAnalysisExecutor.java index d0b17eac64a..c542521329a 100644 --- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/mutationalSignature/MutationalSignatureLocalAnalysisExecutor.java +++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/variant/mutationalSignature/MutationalSignatureLocalAnalysisExecutor.java @@ -64,6 +64,9 @@ public class MutationalSignatureLocalAnalysisExecutor extends MutationalSignatureAnalysisExecutor implements StorageToolExecutor { + private static final String SVCLASS = "SVCLASS"; + private static final String EXT_SVTYPE = "EXT_SVTYPE"; + public final static String R_DOCKER_IMAGE = "opencb/opencga-ext-tools:" + GitRepositoryState.getInstance().getBuildVersion(); @@ -80,7 +83,6 @@ public void run() throws ToolException, CatalogException, IOException, StorageEn && getSkip().contains(MutationalSignatureAnalysisParams.SIGNATURE_CATALOGUE_SKIP_VALUE) && getSkip().contains(MutationalSignatureAnalysisParams.SIGNATURE_FITTING_SKIP_VALUE)) { // Only compute genome context file - // TODO: overwrite support ! File indexFile = checkGenomeContextFile(); logger.info("Checking genome context file {} for sample {}", indexFile.getAbsolutePath(), getSample()); } @@ -97,7 +99,6 @@ && getSkip().contains(MutationalSignatureAnalysisParams.SIGNATURE_FITTING_SKIP_V // SNV logger.info("Computing catalogue (mutational signature) for SNV variants"); - // TODO: overwrite support ! File indexFile = checkGenomeContextFile(); logger.info("Mutational signature analysis is using the genome context file {} for sample {}", indexFile.getAbsolutePath(), getSample()); @@ -191,19 +192,18 @@ refGenomePath, new FastaSequenceIndex(new File(base + ".fai")), try { // Accessing to the context sequence and write it into the context index file - ReferenceSequence refSeq = indexed.getSubsequenceAt(variant.getChromosome(), variant.getStart() - 1, - variant.getEnd() + 1); + ReferenceSequence refSeq = indexed.getSubsequenceAt(variant.getChromosome(), (long) variant.getStart() - 1, + (long) variant.getEnd() + 1); String sequence = new String(refSeq.getBases()); // Write context index pw.println(variant.toString() + "\t" + sequence); } catch (Exception e) { - logger.warn("When creating genome context file for mutational signature analysis, ignoring variant " - + variant.toStringSimple() + ". " + e.getMessage()); + logger.warn("When creating genome context file for mutational signature analysis, ignoring variant {}: {}", + variant.toStringSimple(), Arrays.toString(e.getStackTrace())); } } } - } catch (IOException | CatalogException | ToolException | StorageEngineException e) { throw new ToolExecutorException(e); } @@ -211,7 +211,8 @@ refGenomePath, new FastaSequenceIndex(new File(base + ".fai")), private void updateCountMap(Variant variant, String sequence, Map> countMap) { try { - String k, seq; + String k; + String seq; String key = variant.getReference() + ">" + variant.getAlternate(); @@ -226,16 +227,15 @@ private void updateCountMap(Variant variant, String sequence, Map indexMap = new HashMap<>(); - BufferedReader br = new BufferedReader(new FileReader(indexFile)); String line; while ((line = br.readLine()) != null) { String[] parts = line.split("\t"); @@ -288,9 +288,11 @@ public void computeSignatureCatalogueSNV(File indexFile) throws ToolExecutorExce } public void computeSignatureCatalogueSV() throws ToolExecutorException { + Query query; + File clusteredFile; try { // Get variant iterator - Query query = new Query(); + query = new Query(); if (getQuery() != null) { query.putAll(getQuery()); } @@ -301,16 +303,19 @@ public void computeSignatureCatalogueSV() throws ToolExecutorException { QueryOptions queryOptions = new QueryOptions(QueryOptions.INCLUDE, "id,sv,studies"); - logger.info("Query: {}", query.toJson()); - logger.info("Query options: {}", queryOptions.toJson()); + logger.info("Query: {}", query != null ? query.toJson() : null); + logger.info("Query options: {}", queryOptions != null ? queryOptions.toJson() : null); - File clusteredFile = computeClusteredFile(query, queryOptions); + clusteredFile = computeClusteredFile(query, queryOptions); + } catch (CatalogException | StorageEngineException | ToolException e) { + throw new ToolExecutorException(e); + } - BufferedReader br = FileUtils.newBufferedReader(clusteredFile.toPath()); + Map countMap = new HashMap<>(); + try (BufferedReader br = FileUtils.newBufferedReader(clusteredFile.toPath())) { // Skip header line // chrom1 start1 end1 chrom2 start2 end2 length type sample id is.clustered // 0 1 2 3 4 5 6 7 8 9 10 - Map countMap = new HashMap<>(); // Skip first line String line = br.readLine(); while ((line = br.readLine()) != null) { @@ -333,35 +338,36 @@ public void computeSignatureCatalogueSV() throws ToolExecutorException { countMap.put(key, 1); } } + } catch (IOException e) { + throw new ToolExecutorException(e); + } -// logger.info("Count map size = {}", countMap.size()); -// for (Map.Entry entry : countMap.entrySet()) { -// logger.info("context = {}, count = {}", entry.getKey(), entry.getValue()); -// } - - // Build teh genome context counts object for SV - List genomeContextCounts = new LinkedList<>(); - for (String clustered: new LinkedList<>(Arrays.asList(CLUSTERED, NON_CLUSTERED))) { - for (String type: new LinkedList<>(Arrays.asList(TYPE_DEL, TYPE_TDS, TYPE_INV))) { - for (String length : new LinkedList<>(Arrays.asList(LENGTH_1_10Kb, LENGTH_10Kb_100Kb, LENGTH_100Kb_1Mb, LENGTH_1Mb_10Mb, - LENGTH_10Mb))) { - String key = clustered + "_" + type + "_" + length; - genomeContextCounts.add(new Signature.GenomeContextCount(key, countMap.containsKey(key) ? countMap.get(key) : 0)); - } + // Build teh genome context counts object for SV + List genomeContextCounts = new LinkedList<>(); + for (String clustered: new LinkedList<>(Arrays.asList(CLUSTERED, NON_CLUSTERED))) { + for (String type: new LinkedList<>(Arrays.asList(TYPE_DEL, TYPE_TDS, TYPE_INV))) { + for (String length : new LinkedList<>(Arrays.asList(LENGTH_1_10Kb, LENGTH_10Kb_100Kb, LENGTH_100Kb_1Mb, LENGTH_1Mb_10Mb, + LENGTH_10Mb))) { + String key = clustered + "_" + type + "_" + length; + genomeContextCounts.add(new Signature.GenomeContextCount(key, countMap.containsKey(key) ? countMap.get(key) : 0)); } - String key = clustered + "_" + TYPE_TRANS; - genomeContextCounts.add(new Signature.GenomeContextCount(key, countMap.containsKey(key) ? countMap.get(key) : 0)); } + String key = clustered + "_" + TYPE_TRANS; + genomeContextCounts.add(new Signature.GenomeContextCount(key, countMap.containsKey(key) ? countMap.get(key) : 0)); + } - // Write catalogue file from the genome context counts - PrintWriter pw = new PrintWriter(getOutDir().resolve(CATALOGUES_FILENAME_DEFAULT).toFile()); + // Write catalogue file from the genome context counts + try (PrintWriter pw = new PrintWriter(getOutDir().resolve(CATALOGUES_FILENAME_DEFAULT).toFile())) { pw.write(query.getString(VariantQueryParam.SAMPLE.key())); pw.write("\n"); for (Signature.GenomeContextCount counts : genomeContextCounts) { pw.write(counts.getContext() + "\t" + counts.getTotal() + "\n"); } - pw.close(); + } catch (IOException e) { + throw new ToolExecutorException(e); + } + try { Signature signature = new Signature() .setId(getQueryId()) .setDescription(getQueryDescription()) @@ -371,7 +377,7 @@ public void computeSignatureCatalogueSV() throws ToolExecutorException { JacksonUtils.getDefaultObjectMapper().writerFor(Signature.class).writeValue(getOutDir() .resolve(MutationalSignatureAnalysis.MUTATIONAL_SIGNATURE_DATA_MODEL_FILENAME).toFile(), signature); - } catch (IOException | CatalogException | StorageEngineException | ToolException e) { + } catch (IOException e) { throw new ToolExecutorException(e); } } @@ -383,25 +389,59 @@ private File computeClusteredFile(Query query, QueryOptions queryOptions) throws // $ Rscript sv_clustering.R ./test.bedpe ./out.bedpe File inputFile = getOutDir().resolve("in.clustered.bedpe").toFile(); File outputFile = getOutDir().resolve("out.clustered.bedpe").toFile(); - try { - PrintWriter pw = new PrintWriter(inputFile); + try (PrintWriter pw = new PrintWriter(inputFile);) { + String mateChrom; + int matePosition; + String lengthKey; + boolean processVariant; + + Map> breakendMap = new HashMap<>(); pw.println("chrom1\tstart1\tend1\tchrom2\tstart2\tend2\tlength\ttype\tsample"); while (iterator.hasNext()) { + processVariant = true; Variant variant = iterator.next(); - if (variant.getSv() == null || variant.getSv().getBreakend() == null || variant.getSv().getBreakend().getMate() == null) { - continue; + if (breakendMap.containsKey(variant.getChromosome())) { + for (Integer position : breakendMap.get(variant.getChromosome())) { + if (Math.abs(variant.getStart() - position) <= 20) { + // Skipping since it is a mate + processVariant = false; + break; + } + } } - String typeKey = getTypeKey(variant); - String lengthKey = getLengthKey(variant); - if (typeKey != null && lengthKey != null) { - BreakendMate mate = variant.getSv().getBreakend().getMate(); - pw.println(variant.getChromosome() + "\t" + variant.getStart() + "\t" + variant.getEnd() + "\t" - + mate.getChromosome() + "\t" + mate.getPosition() + "\t" + mate.getPosition() + "\t" - + lengthKey + "\t" + typeKey + "\t" + getSample()); + if (processVariant) { + BreakendMate mate = null; + if (variant.getSv() != null && variant.getSv().getBreakend() != null + && variant.getSv().getBreakend().getMate() != null) { + mate = variant.getSv().getBreakend().getMate(); + if (!breakendMap.containsKey(mate.getChromosome())) { + breakendMap.put(mate.getChromosome(), new ArrayList<>()); + } + breakendMap.get(mate.getChromosome()).add(mate.getPosition()); + } + String typeKey = getTypeKey(variant); + if (mate == null) { + mateChrom = "0"; + matePosition = 0; + lengthKey = LENGTH_NA; + } else { + mateChrom = mate.getChromosome(); + matePosition = mate.getPosition() == null ? 0 : mate.getPosition(); + lengthKey = getLengthKey(variant, typeKey); + } + + if (typeKey != null && lengthKey != null) { + pw.println(variant.getChromosome() + "\t" + variant.getStart() + "\t" + variant.getEnd() + "\t" + + mateChrom + "\t" + matePosition + "\t" + matePosition + "\t" + + lengthKey + "\t" + typeKey + "\t" + getSample()); + } } } - pw.close(); + } catch (Exception e) { + throw new ToolException(e); + } + try { // Build command line to run R script via docker image // Input binding List> inputBindings = new ArrayList<>(); @@ -430,22 +470,17 @@ private File computeClusteredFile(Query query, QueryOptions queryOptions) throws return outputFile; } - private String getClusteredKey(Variant variant) { - return NON_CLUSTERED; - } - private String getTypeKey(Variant variant) { String variantType = variant.getType() != null ? variant.getType().name() : ""; if (CollectionUtils.isNotEmpty(variant.getStudies()) && CollectionUtils.isNotEmpty(variant.getStudies().get(0).getFiles())) { for (FileEntry file : variant.getStudies().get(0).getFiles()) { - if (file.getData() != null) { - if (file.getData().containsKey("EXT_SVTYPE")) { - variantType = file.getData().get("EXT_SVTYPE").toUpperCase(Locale.ROOT); - break; - } else if (file.getData().containsKey("SVCLASS")) { - variantType = file.getData().get("SVCLASS").toUpperCase(Locale.ROOT); - break; + if (file.getData() != null && (file.getData().containsKey(EXT_SVTYPE) || file.getData().containsKey(SVCLASS))) { + if (file.getData().containsKey(EXT_SVTYPE)) { + variantType = file.getData().get(EXT_SVTYPE).toUpperCase(Locale.ROOT); + } else if (file.getData().containsKey(SVCLASS)) { + variantType = file.getData().get(SVCLASS).toUpperCase(Locale.ROOT); } + break; } } } @@ -458,6 +493,7 @@ private String getTypeKey(Variant variant) { case "TDS": case "DUPLICATION": case "TANDEM_DUPLICATION": + case "TANDEM-DUPLICATION": return TYPE_TDS; case "INV": case "INVERSION": @@ -466,30 +502,33 @@ private String getTypeKey(Variant variant) { case "TRANS": case "TRANSLOCATION": return TYPE_TRANS; + default: { + logger.warn("Unknown variant type {}, so this variant will be ignored in mutational signature analysis", variantType); + return null; + } } - return null; } - private String getLengthKey(Variant variant) { - if (variant.getSv() == null || variant.getSv().getBreakend() == null || variant.getSv().getBreakend().getMate() == null) { + private String getLengthKey(Variant variant, String type) { + if (type == null) { return null; } - BreakendMate mate = variant.getSv().getBreakend().getMate(); - if (variant.getChromosome().equals(mate.getChromosome())) { - int length = Math.abs(mate.getPosition() - variant.getStart()); - if (length <= 10000) { - return LENGTH_1_10Kb; - } else if (length <= 100000) { - return LENGTH_10Kb_100Kb; - } else if (length <= 1000000) { - return LENGTH_100Kb_1Mb; - } else if (length <= 10000000) { - return LENGTH_1Mb_10Mb; - } - return LENGTH_10Mb; + if (type.equals(TYPE_TRANS)) { + return LENGTH_NA; } else { - if (variant.getType() == VariantType.TRANSLOCATION) { - return LENGTH_NA; + BreakendMate mate = variant.getSv().getBreakend().getMate(); + if (variant.getChromosome().equals(mate.getChromosome())) { + int length = Math.abs(mate.getPosition() - variant.getStart()); + if (length <= 10000) { + return LENGTH_1_10Kb; + } else if (length <= 100000) { + return LENGTH_10Kb_100Kb; + } else if (length <= 1000000) { + return LENGTH_100Kb_1Mb; + } else if (length <= 10000000) { + return LENGTH_1Mb_10Mb; + } + return LENGTH_10Mb; } } return null; @@ -508,12 +547,12 @@ private void computeSignatureFitting() throws IOException, ToolException, Catalo throw new ToolException("Unable to compute mutational signature analysis. Sample '" + getSample() + "' not found"); } Sample sample = sampleResult.first(); - logger.info("Searching catalogue counts from quality control for sample " + getSample()); + logger.info("Searching catalogue counts from quality control for sample {}", getSample()); if (sample.getQualityControl() != null && sample.getQualityControl().getVariant() != null && CollectionUtils.isNotEmpty(sample.getQualityControl().getVariant().getSignatures())) { - logger.info("Searching in " + sample.getQualityControl().getVariant().getSignatures().size() + " signatures"); + logger.info("Searching in {} signatures", sample.getQualityControl().getVariant().getSignatures().size()); for (Signature signature : sample.getQualityControl().getVariant().getSignatures()) { - logger.info("Matching ? " + getQueryId() + " vs " + signature.getId()); + logger.info("Matching ? {} vs {}", getQueryId(), signature.getId()); if (getQueryId().equals(signature.getId())) { // Write catalogue file try (PrintWriter pw = new PrintWriter(cataloguesFile)) { @@ -521,7 +560,6 @@ private void computeSignatureFitting() throws IOException, ToolException, Catalo for (Signature.GenomeContextCount count : signature.getCounts()) { pw.println(count.getContext() + "\t" + count.getTotal()); } - pw.close(); } catch (Exception e) { throw new ToolException("Error writing catalogue output file: " + cataloguesFile.getName(), e); } @@ -587,7 +625,8 @@ private void computeSignatureFitting() throws IOException, ToolException, Catalo scriptParams.append(" --genomev=hg19"); break; } - case "GRCh38": { + case "GRCh38": + default: { scriptParams.append(" --genomev=hg38"); break; } @@ -595,7 +634,7 @@ private void computeSignatureFitting() throws IOException, ToolException, Catalo String cmdline = DockerUtils.run(R_DOCKER_IMAGE, inputBindings, outputBinding, scriptParams.toString(), null); - logger.info("Docker command line: " + cmdline); + logger.info("Docker command line: {}", cmdline); // Check fitting file before parsing and creating the mutational signature fitting data model File signatureCoeffsFile = getOutDir().resolve(SIGNATURE_COEFFS_FILENAME).toFile(); diff --git a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/wrappers/exomiser/ExomiserWrapperAnalysisExecutor.java b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/wrappers/exomiser/ExomiserWrapperAnalysisExecutor.java index e586a47d434..099d3c6c7db 100644 --- a/opencga-analysis/src/main/java/org/opencb/opencga/analysis/wrappers/exomiser/ExomiserWrapperAnalysisExecutor.java +++ b/opencga-analysis/src/main/java/org/opencb/opencga/analysis/wrappers/exomiser/ExomiserWrapperAnalysisExecutor.java @@ -7,7 +7,6 @@ import org.opencb.biodata.models.clinical.Phenotype; import org.opencb.biodata.models.clinical.pedigree.Member; import org.opencb.biodata.models.clinical.pedigree.Pedigree; -import org.opencb.biodata.models.core.SexOntologyTermAnnotation; import org.opencb.biodata.models.pedigree.IndividualProperty; import org.opencb.commons.datastore.core.QueryOptions; import org.opencb.commons.exec.Command; @@ -21,12 +20,9 @@ import org.opencb.opencga.core.exceptions.ToolExecutorException; import org.opencb.opencga.core.models.family.Family; import org.opencb.opencga.core.models.individual.Individual; -import org.opencb.opencga.core.models.sample.Sample; import org.opencb.opencga.core.tools.annotations.ToolExecutor; import org.opencb.opencga.storage.core.exceptions.StorageEngineException; -import org.opencb.opencga.storage.core.variant.adaptors.VariantField; import org.opencb.opencga.storage.core.variant.adaptors.VariantQuery; -import org.opencb.opencga.storage.core.variant.adaptors.VariantQueryParam; import org.opencb.opencga.storage.core.variant.io.VariantWriterFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -36,7 +32,6 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.util.*; -import java.util.stream.Collectors; @ToolExecutor(id = ExomiserWrapperAnalysisExecutor.ID, tool = ExomiserWrapperAnalysis.ID, @@ -130,10 +125,11 @@ public void run() throws ToolException { VariantQuery query = new VariantQuery() .study(studyId) - .sample(sampleId + ":0/1,1/1") + .sample(sampleId) .includeSample(samples) .includeSampleData("GT") - .unknownGenotype("./."); + .unknownGenotype("./.") + .append("includeAllFromSampleIndex", true); QueryOptions queryOptions = new QueryOptions(QueryOptions.INCLUDE, "id,studies.samples"); diff --git a/opencga-analysis/src/test/java/org/opencb/opencga/analysis/variant/VariantAnalysisTest.java b/opencga-analysis/src/test/java/org/opencb/opencga/analysis/variant/VariantAnalysisTest.java index 37ae808c6bf..31a59eebc2e 100644 --- a/opencga-analysis/src/test/java/org/opencb/opencga/analysis/variant/VariantAnalysisTest.java +++ b/opencga-analysis/src/test/java/org/opencb/opencga/analysis/variant/VariantAnalysisTest.java @@ -194,7 +194,9 @@ public void setUp() throws Throwable { null, null, null, token); Phenotype phenotype = new Phenotype("phenotype", "phenotype", ""); - Disorder disorder = new Disorder("disorder", "disorder", "", "", Collections.singletonList(phenotype), Collections.emptyMap()); + Disorder disorder1 = new Disorder("disorder id 1", "disorder name 1", "", "", Collections.singletonList(phenotype), Collections.emptyMap()); + Disorder disorder2 = new Disorder("disorder id 2", "disorder name 2", "", "", Collections.singletonList(phenotype), Collections.emptyMap()); + List disorderList = new ArrayList<>(Arrays.asList(disorder1, disorder2)); List individuals = new ArrayList<>(4); // Father @@ -208,14 +210,14 @@ public void setUp() throws Throwable { // Son individuals.add(catalogManager.getIndividualManager() .create(STUDY, new Individual(son, son, new Individual(), new Individual(), new Location(), SexOntologyTermAnnotation.initMale(), null, null, null, null, "", - Collections.emptyList(), false, 0, Collections.emptyList(), Collections.emptyList(), Collections.emptyList(), IndividualInternal.init(), Collections.emptyMap()).setFather(individuals.get(0)).setMother(individuals.get(1)).setDisorders(Collections.singletonList(disorder)), Collections.singletonList(son), new QueryOptions(ParamConstants.INCLUDE_RESULT_PARAM, true), token).first()); + Collections.emptyList(), false, 0, Collections.emptyList(), Collections.emptyList(), Collections.emptyList(), IndividualInternal.init(), Collections.emptyMap()).setFather(individuals.get(0)).setMother(individuals.get(1)).setDisorders(disorderList), Collections.singletonList(son), new QueryOptions(ParamConstants.INCLUDE_RESULT_PARAM, true), token).first()); // Daughter individuals.add(catalogManager.getIndividualManager() .create(STUDY, new Individual(daughter, daughter, new Individual(), new Individual(), new Location(), SexOntologyTermAnnotation.initFemale(), null, null, null, null, "", Collections.emptyList(), false, 0, Collections.emptyList(), Collections.emptyList(), Collections.emptyList(), IndividualInternal.init(), Collections.emptyMap()).setFather(individuals.get(0)).setMother(individuals.get(1)), Collections.singletonList(daughter), new QueryOptions(ParamConstants.INCLUDE_RESULT_PARAM, true), token).first()); catalogManager.getFamilyManager().create( STUDY, - new Family("f1", "f1", Collections.singletonList(phenotype), Collections.singletonList(disorder), null, null, 3, null, null), + new Family("f1", "f1", Collections.singletonList(phenotype), disorderList, null, null, 3, null, null), individuals.stream().map(Individual::getId).collect(Collectors.toList()), new QueryOptions(), token); @@ -814,9 +816,22 @@ public void testMutationalSignatureCatalogueSV() throws Exception { params.setSample(cancer_sample); params.setId("catalogue-1"); params.setDescription("Catalogue #1"); - VariantQuery query = new VariantQuery(); - query.sample(cancer_sample); - query.type(VariantType.SV.name()); + VariantQuery query = new VariantQuery() + .sample(cancer_sample) + .type(VariantType.SV.name()) + //.file("AR2.10039966-01T_vs_AR2.10039966-01G.annot.brass.vcf.gz"); + .fileData("AR2.10039966-01T_vs_AR2.10039966-01G.annot.brass.vcf.gz:BAS>=0;BKDIST>=-1") + .region("1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,X,Y"); + + //https://ws.opencb.org/opencga-test/webservices/rest/v2/analysis/variant/mutationalSignature/query + // ?study=serena@cancer38:test38 + // &fitting=false + // &sample=AR2.10039966-01T + // &fileData=AR2.10039966-01T_vs_AR2.10039966-01G.annot.brass.vcf.gz:BAS>=0;BKDIST>=-1;EXT_PS_SOM>=4;EXT_RC_SOM>=0 + // ®ion=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,X,Y + // &type=SV + + params.setQuery(query.toJson()); params.setSkip("fitting"); @@ -992,8 +1007,12 @@ public void testHRDetect() throws Exception { List hrDetects = sample.getQualityControl().getVariant().getHrDetects(); for (HRDetect hrDetect : hrDetects) { if (hrDetect.getId().equals(hrDetect.getId())) { + System.out.println("HRDetect scores for " + hrDetect.getId()); + for (Map.Entry entry : hrDetect.getScores().entrySet()) { + System.out.println("\t" + entry.getKey() + ": " + entry.getValue()); + } if (hrDetect.getScores().containsKey("del.mh.prop")) { - Assert.assertEquals(hrDetect.getScores().getFloat("del.mh.prop"), 0.172413793103448f, 0.00001f); + Assert.assertEquals(-1.5702984, hrDetect.getScores().getFloat("del.mh.prop"), 0.00001f); return; } } @@ -1018,12 +1037,23 @@ public void testHRDetectParseResults() throws Exception { HRDetect hrDetect = HRDetectAnalysis.parseResult(hrdParams, hrdetectOutDir); for (Map.Entry entry : hrDetect.getScores().entrySet()) { - System.out.println(entry.getKey() + " -> " + entry.getValue()); + System.out.println(entry.getKey() + ": " + entry.getValue()); } assertTrue(hrDetect.getScores().containsKey("hrd")); - assertEquals(-0.102769986f, hrDetect.getScores().getFloat("hrd"), 0.00001f); + assertEquals(-1.95208666666667, hrDetect.getScores().getFloat("hrd"), 0.00001f); assertTrue(hrDetect.getScores().containsKey("Probability")); - assertEquals(0.998444f, hrDetect.getScores().getFloat("Probability"), 0.00001f); + assertEquals(4.21293910790655e-05, hrDetect.getScores().getFloat("Probability"), 0.00001f); + } + + @Test + public void testPedigreeGraph() throws CatalogException { + String base64 = "iVBORw0KGgoAAAANSUhEUgAAAeAAAAHgCAMAAABKCk6nAAAC6FBMVEUAAAABAQECAgIEBAQGBgYHBwcICAgJCQkKCgoLCwsMDAwNDQ0ODg4PDw8QEBARERESEhITExMUFBQVFRUWFhYXFxcYGBgZGRkaGhobGxsdHR0eHh4fHx8gICAhISEiIiIjIyMkJCQlJSUmJiYnJycoKCgpKSkqKiorKyssLCwtLS0uLi4vLy8wMDAxMTEyMjIzMzM0NDQ1NTU2NjY3Nzc4ODg5OTk6Ojo7Ozs8PDw9PT0+Pj4/Pz9AQEBBQUFCQkJDQ0NERERFRUVGRkZHR0dISEhJSUlKSkpLS0tMTExNTU1OTk5PT09QUFBRUVFSUlJTU1NUVFRVVVVWVlZXV1dYWFhZWVlaWlpbW1tcXFxdXV1eXl5fX19gYGBhYWFiYmJjY2NkZGRlZWVmZmZnZ2doaGhpaWlqampra2tsbGxtbW1ubm5vb29wcHBxcXFycnJzc3N0dHR1dXV2dnZ3d3d4eHh5eXl6enp7e3t9fX1+fn5/f3+AgICBgYGCgoKDg4OEhISFhYWGhoaHh4eIiIiJiYmKioqMjIyNjY2Ojo6Pj4+QkJCRkZGSkpKTk5OUlJSVlZWWlpaXl5eYmJiZmZmampqbm5ucnJydnZ2fn5+goKChoaGioqKjo6OkpKSlpaWmpqanp6eoqKipqamqqqqrq6usrKytra2urq6vr6+wsLCxsbGysrKzs7O0tLS1tbW2tra3t7e4uLi5ubm6urq7u7u8vLy+vr6/v7/AwMDBwcHCwsLDw8PExMTFxcXGxsbHx8fIyMjJycnKysrLy8vMzMzNzc3Ozs7Pz8/Q0NDR0dHS0tLT09PU1NTV1dXW1tbX19fY2NjZ2dna2trb29vc3Nzd3d3e3t7f39/g4ODh4eHi4uLj4+Pk5OTl5eXm5ubn5+fo6Ojp6enq6urr6+vs7Ozu7u7v7+/w8PDx8fHy8vLz8/P09PT19fX29vb39/f4+Pj5+fn6+vr7+/v8/Pz9/f3+/v7////lDE73AAARGklEQVR4nO3dfVwUdQLH8T2tDpXQ8ta0uB4OKq87PTpleRAhwMTKhxDsOLWEyDTS4MzrLDMf8PLSUznTyisVNbvOh9My6y6VUCyP81mUTE4BxUpFediF3783M7uzu7LKMTuLs/vt+3m9YoYZ2Pn99s0CvwXMJBh0JqMHwNo3AoNHYPAIDB6BwSMweAQGj8DgERg8AoNHYPAIDB6BwSMweAQGj8DgERg8AoNHYPAIDB6BwSMweAQGj8DgERg8AoNHYPAIDB6BwSMweAQGj8DgERg8AoNHYPAIDB6BwSMweAQGj8DgERg8AoNHYPAIDB6BwSMweAQGj8DgERg8AoNHYPAIDB6BwSMweAQGj8DgERg8HcA176u9s9S5e9p3QwuQmsu3zfv4iM3oYVwrHcBrf7PUUeKv1b3sAt8NLSA6PDFyzKwfz8mKGrvH6KFcPT3ATszJ6Z7HfhBdem5okbQJkf7bN/o354weztUisI7ODlinbEOUl/+MPG7kYK4Rgb2vbsBu+44dWByLrDFuMNeKwN6Xt8qx4wAWn6df602Ni8BeV5mo7qnAImOvMUNpJQJ73fxCdc8JXDTZmKG0EoG9bvgZdc8JbIszZiit5GPgxUPnGtD4GUZcNcx5TziBBTzwX3O2GdCwZUZctW+zOusfELAxn6Jz9hlx1dHl6p4T+HLi1d/UwAjsde8uVPecwOtnGjGQViOw19VaGhx7TuDECiMG0moE9r6l0xw7IS0P+FEE1tHot+xbB/DmwY3GjKO1CKwj67jJtfJWAW6c81itMcNoNQLrqrD/vFMKcM2blkVNRo2itXQA/+1XIx2F3aHuRS713dDannHAomHl49EpNz0a/cjSi4aNodV0ANvK1crKnLtW3w2t7RkILHex8nw73Or3aybEm0x39BqYsPo7HTcD8Ut3BgO3R6UZJqW+64pSX7/1iU+9viEC+2NnRpscdbcNK1v45oafZnj72yIE9sM+NTmLO5xms1x+snj6T7d6d1sE9r/ecfmanhq7a0X+qYdFXMX9+V7dmAbg3l3OCbE6Qt6NC6mXXi7o0/EZ+bUjCZ3uWivvvBt2Q1iJa6ueb/euC7Dm6V9ID+q1xIsLvefma0obLAZ8l7t1y+++j8mY482wtQB3m+KY4YkOXd+XNh9szJBnaA2feulfnaX7eJN545k9J1xbx/n27/oAa51+VvzZ7Z23a75Okbuv6f5PNr/4bUxzUsWswuLbtd+YNuCZXarsM5wR9cIQ5dBEeYYHOlwWIjVXiL7L7W+obh3n27/rA6xx+o2dPhciM1PrZS5YrgA2NyednrmmJLPOYk0teqBa+7C1AK8bk2Of4d0FX3ZUrqXMcF+HOmmGiaL+R/k9e+TUObcCDFjj9MtM0up4UaTWy/zuCl/ToN1P10VZRxwsKDg6whb+nPZhawIu71whz3BHxxoR/oZ8SJlh493TGnYGRYlyU0x1xS9ecW4FGrC26e81NUtfT3trvMrpK31NTw0/tHjJkVRb1OWsojWvJR7TPGxNwCI7S55hVor0aeqX8iE74IGEblGZaaLStF6Itx90bgUasLbpe/cIntYCePhIyXbcF6tnVQ0SsefSRmketjbgik6zIsTl4E5mc4ipVLgDJswT4tYNdlh1CwesafqNQTukDwaNX4ObLS2A7yleNfuUbDtly9bc87GW5v9/G1emDVjkdIsQhV1PVlVVxeYKa934rDqrEMWVla/dVivElNia031edW3V8+3e9QLWNv3MpG+LgzV+41vawtfUS8R9l/fxx3nnY5sHncxfMe4zrcPWCFwVFCEG5cqvrTVblU8nU4V4OeSmxEPSofqsYPOketdWPd/uXTdgTdO/kBZ0m9Z1cEFL4MekFXBsc/LJOatKnqzv1xj9ktZh85ksv2pCS+Cn5BVwybh6i3XkgTcXlic+rfUWCeyT8qRHcui1/gQ8z/OzmONtPc481hL4EWUFfHDJ4uMjbJEXn9mWovWCBPZJ8l367tlWTrbI8bbqGfVZz+bwlsCh0gr4iGRb+3TR+zOqk8QdTRovSGCfdBVDOetVTrp/16mecTzr2fx0mAewtErKlFbA1cliQM3vN30aMq5J2wUJrLuD/YKHZNo/Y07vcXPYbnEsMeTetUKY5/a913myemT30Dccx4TytuoZe/KKq3nCnFEtgVML7SvgFzdvm3ze0pSYMv+pJk0XJLDebGH5tq03Kvf3l6Fnxdf/td33csP2znuFOaW+WT3ZbMmr+ybsH8ox+Z1C9zjfzZ4MfPZt8QePb7KUFfAL0irp4W/++F7p4Cli+SlNFySw3nbfYhMiRbm/S7tvaxCipKv0iTIzT5i3uk6WBkvbhWOVY3Khe5zvZs/xnMm6lsDJjhXwyn+Pre/XMOql1VovSGC9/b2v9OI5+2fMdx4Mzji7/ufSgZmjhHmf6+SGG8PDw+8crhyTC93jfDd7DuCalsA9T85etUdeAaftX/bn8qFDq7VekMB6291LejFSXbXUPPK88wG133Vyr9n+HKN8TE56BKvvZk991vPhFsA/U1fAw5siL47fnKz5ggTWm+2ev4myIOX+PlBkbRiVZ7v31cadXb5S7m/1ZFPklIu2g7uVY299pHwNVt9NftX1pO6aFsBP2FfAtdk7100/M3DuSs0XJLDu9kdGp45V7u9dfbrcmvqtOJpwc3ih49GqnqzOMIf036ocGzRNefCpZ+RXXU/q2qKuBB4rr4DXyivghJqX1lgaNV+QwH7WxiuB4+wr4KmbPn3+giXnQ+23R2B/a/QVwGZpBfyJvAJO+eb1vCe8uDkC+1sXY92Beysr4LnvlY6pfyDam7+QIbDfdcr9h/5jpBWwvEoatf+VUK/++QAC+1+n49yA5RXw0j+XD1t3/1GvbozAftjliU7gqIXlI6QV8Oik8Ze8uy0C+2VfJDqAu8sr4GcnhO7w9pYI7Kd9MU4BvrfwvvE9n9jp/e0Q2G9r2r9qdua4aa/v0/VPQxAYPAKDR2DwCAwegcEjMHgEBo/A4BEYPAKDR2DwCAwegcEjMHgEBo/A4BEYPAKDR2DwCAwegcEjMHgEBo/A4BEYPAKDR2DwCAwegcGDAB6i488r0YMA5iP42hEYPAKDR2DwCAwegcEjMHgEBo/A4BEYPAKDR2DwCAwegcEjMHgEBo/A4BEYPAKDR2DwCAwegcEjMHgEBo/A4BEYPAKDR2DwCAwegcEjMHgEBo/A4BEYPAKDR2DwCAwegcEjMHgEBo/A4BEYPAKDR2DwCAwegcEjMHgEBo/A4BEYPAKDR2DwCAwegcEjMHgEBo/A4BEYPAKDR2DwCAwegcEjMHgEBo/A4BEYPAKDR2DwCAwegcEjMHgEBo/A4BEYPAKDR2DwCAwegcEjMHgEBo/A4BEYPAKDR2DwCAwegcEjMHgEBo/A4BEYPAKDR2DwCAwegcEjMHgEBg8CeHCR0SPw3yCA+Qi+dgQGj8DgERg8AoNHYPAIDB6BwSMweAQGj8DgERg8AoNHYPAIDB6BwSMweAQGj8DgERg8AoNHYPAIDB6BwSMweAQGj8DgERg8AoNHYPAIDB6BwSMweAQGj8DgERg8AoNHYPAIDB6BwSMweAQGj8DgERg8AoNHYPAIDB6BwSMweAQGj8DgERg8AoNHYPAIDB6BwSMweAQGj8DgERg8AoNHYPAIDB6BwSMweAQGj8DgERg8AoNHYPAIDJ5PgOvLyg1tzBZjr3/KF3diO+UT4AWx2YaWPMbY69/pizuxnfIJ8NoCX9xK4DbQ6AG0EoF9EIHBIzB4BAaPwOARGDwCg0dg8AgMHoHBIzB4BAaPwOARGDwCg0dg8AgMHoHBIzB4BAaPwOARGDwCg0dg8LCBazfnJ/SfteF7HwwmsPqT8y8buj6UHZM1dMST8dljjR6UR3qBD42Jn/mP9MSP85PS9vpkQIFTjMnZX9Oz/xKx4VdLsnoYPSiP9AE3zRj8b2kzOV16cXhEbqNPhhQoDXQBT3xtS+Lx6M+mvTjA6EF5pAvYOmpes7xVgIV4+5E6H4woYHIDXrAp+VjMF5OmfnKL0YPySBdw7mL71gEsVvvfl6B2zA14zaNH++3KlB7GMUYPyiM9wLvSHDsqsHh2s87hBFJuwCOOWkqfnL8x+WhPowflkR7gYV87dpzANQn6RhNQuQEf+PV/Ri5a/ejRqAeNHpRHOoAvJKl7TmAxskLfcAIpN2DL4ceXrxx2xFIabvSgPNIBvP0P6p4L+I0PdY0moHIDPpqy4s1RBywH06CAP1yg7rmAVy7TN5xAyg148IeLM/bLD+N+Rg/KIx3An8xU91zASwr1DSeQcgP+aG72l1FlKSsKoJ7oOJ2q7rmAx/9H33ACKTfguc+WRB+THsa/jTN6UB7p+S56wAXHjhO4sX+zzvEEUG7AU7cPOB6/cW52CdYTHSumO3acwIvm6xxOIOUG/M+44/Hbpk8oibYYPSiP9AA3Ddpl31GBD8U26B5Q4OQGnHg8dmfui9LD+HajB+WRrqcqq6NKlK0D+GDk17rHE0C5AZfHFD8/VX4Y/9LoQXmk76dJVcl/lB+zCrCtIO6ET4YUKLkBR+0dN3Oz/DD+udGD8kjnz4Ntf4l8ZXfd5PSGr2ZbXv8hfX4WVwDvGzt/Y/LxmOJn/e8fNdT9Gx3WLZOS7r/noYnr630xnEAqPVHtJw/cN7BHQmj/vmHxRg/KI4h/TphdOwKDR2DwCAwegcHTANy7yzkhVkfIu3Eh8vfMC/p0fEZ+7UhCp7vWyjvvht0QViLEhfSgXkuEa4tRm6d/ML5zj7wmIYZI66ebDRywPS3A3aY4ZniiQ9f3pc0HGzPkGVrDp176V+d9Qmwybzyz54QQWfFnt3fe7tpi1Obp9828VBa6TAJeVldn/NpRC/DMLlX2Gc6IemGIcmiiPMMDHS4LkZorzWy5crCx0+dCZGY6tyC1dfoiRJp21iQJeLlhY3VLC/C6MTn2Gd5d8GXHavmQMsN9HeqkGSaK+h/l9+yRUyfKTOeFWBTp3ILU1umLGVmXjt35kQR8++0PfWbokOU0AZd3rpBnuKNjjQh/Qz6kzLDx7mkNO4OiRLkpprriF6+IvaZmId7r7dyC1Nbpiz3hJtNz0onNXx3Ov9Hw/6OTJmCRnSXPMCtF+jBVfm6izFAcSOgWlZkmKk3rhXj7QdxHcNumf+mW2XUVFsevM6W8atyA7WkDrug0K0JcDu5kNoeYSoU6Q7mEeULcukGZYWPQDuleyHRuQWrr9I+ZLkof19H248NeNmi0zrQBi5xuEaKw68mqqqrYXGGtG59VZxWiuLLytdtqhZgSW3O6j/Qhm5n0bXHwdtcWo7ZO3/qTuY2V0RNE7arT5966YbfRw9YIXBUUIQblyq+tNVunKb+OJMTLITclHpIO1WcFmydJC4MLaUG3KetgxxajNk9/V1SX7hnfiYuxNwf1Nf7XxPlMFngEBo/A4BEYPAKDR2DwCAwegcEjMHgEBo/A4BEYPAKDR2DwCAwegcEjMHgEBo/A4BEYPAKDR2DwCAwegcEjMHgEBo/A4BEYPAKDR2DwCAwegcEjMHgEBo/A4BEYPAKDR2DwCAwegcEjMHgEBo/A4BEYPAKDR2DwCAwegcEjMHgEBo/A4BEYPAKDR2DwCAwegcEjMHgEBo/A4BEYPAKDR2DwCAwegcEjMHgEBo/A4BEYPAKDR2DwCAwegcEjMHgEBo/A4BEYPAKDR2DwCAwegcEjMHgEBo/A4BEYPAKDR2DwCAwegcEjMHgEBo/A4BEYPAKDR2DwCAwegcEjMHgEBo/A4BEYPAKDR2DwCAwegcEjMHgEBo/A4BEYPAKDR2DwCAze/wCMbFD0pB/BRAAAAABJRU5ErkJggg=="; + + OpenCGAResult results = catalogManager.getFamilyManager().search(STUDY, new Query("id", "f1"), QueryOptions.empty(), token); + Family family = results.first(); + + assertTrue(family.getPedigreeGraph() != null); + assertEquals(base64, family.getPedigreeGraph().getBase64()); } public void checkExecutionResult(ExecutionResult er) { diff --git a/opencga-app/app/cloud/docker/opencga-ext-tools/Dockerfile b/opencga-app/app/cloud/docker/opencga-ext-tools/Dockerfile index 1ee9b95fdee..5558259e3f5 100644 --- a/opencga-app/app/cloud/docker/opencga-ext-tools/Dockerfile +++ b/opencga-app/app/cloud/docker/opencga-ext-tools/Dockerfile @@ -15,13 +15,16 @@ RUN apt-get update -y && DEBIAN_FRONTEND="noninteractive" TZ="Europe/London" apt libfreetype6-dev libpng-dev libtiff5-dev libjpeg-dev \ gnuplot pandoc samtools bcftools tabix fastqc plink1.9 bwa r-base && \ ## Installation dependencies using R install.packages() is slower than apt-get but final size is 400GB smaller. - R -e "install.packages(c('BiocManager', 'RCircos', 'nnls', 'ggplot2', 'jsonlite', 'optparse', 'knitr', 'configr', 'dplyr', 'rmarkdown', 'tidyr', 'httr', 'kinship2'))" && \ + R -e "install.packages(c('BiocManager', 'RCircos', 'nnls', 'ggplot2', 'jsonlite', 'optparse', 'knitr', 'configr', 'dplyr', 'rmarkdown', 'tidyr', 'httr', 'kinship2', 'limSolve'))" && \ R -e "BiocManager::install('BiocStyle')" && \ - ## signature.tools.lib installation + ## signature.tools.lib installation \ R -e 'install.packages(c("devtools", "getopt"), repos="https://www.stats.bris.ac.uk/R/")' && \ - git clone https://github.com/Nik-Zainal-Group/signature.tools.lib.git /opt/opencga/signature.tools.lib && \ -# git checkout tags/v2.3.0 && \ - git checkout d3d73db497b5b83abc55d6cd55840c34ed542628 && \ + git clone https://github.com/Nik-Zainal-Group/signature.tools.lib.git /opt/opencga/signature.tools.lib + +WORKDIR /opt/opencga/signature.tools.lib + +RUN git fetch origin --tags && \ + git checkout tags/v2.4.1 && \ sed -i '/Mmusculus/d' DESCRIPTION && \ sed -i '/Cfamiliaris/d' DESCRIPTION && \ sed -i '/1000genomes/d' DESCRIPTION && \ diff --git a/opencga-app/app/misc/clients/rest_client_generator.py b/opencga-app/app/misc/clients/rest_client_generator.py index 8239fa55709..bfb3b78489f 100644 --- a/opencga-app/app/misc/clients/rest_client_generator.py +++ b/opencga-app/app/misc/clients/rest_client_generator.py @@ -198,6 +198,9 @@ def get_method_name(self, endpoint, category): # /{apiVersion}/analysis/clinical/{clinicalAnalysis}/interpretation/{interpretationId}/merge elif self.all_arg([items[0], items[2]]) and not self.any_arg([items[1], items[3]]): method_name = '_'.join([items[3], items[1]]) + # /{apiVersion}/admin/users/{user}/groups/update + elif self.all_arg([items[1]]) and not self.any_arg([items[0], items[2], items[3]]): + method_name = '_'.join([items[0], items[3], items[2]]) elif len(items) == 5: # e.g. /{apiVersion}/files/{file}/annotationSets/{annotationSet}/annotations/update if self.all_arg([items[0], items[2]]) and not self.any_arg([items[1], items[3], items[4]]): diff --git a/opencga-app/pom.xml b/opencga-app/pom.xml index c0bc97362b9..b787e5d11d2 100644 --- a/opencga-app/pom.xml +++ b/opencga-app/pom.xml @@ -22,7 +22,7 @@ org.opencb.opencga opencga - 2.10.0-SNAPSHOT + 2.11.0-SNAPSHOT ../pom.xml diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/OpenCgaCompleter.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/OpenCgaCompleter.java index fa69afab38d..b023618b21f 100644 --- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/OpenCgaCompleter.java +++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/OpenCgaCompleter.java @@ -1,5 +1,5 @@ /* -* Copyright 2015-2023-04-18 OpenCB +* Copyright 2015-2023-09-08 OpenCB * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -70,7 +70,7 @@ public abstract class OpenCgaCompleter implements Completer { .map(Candidate::new) .collect(toList()); - private List adminList = asList( "audit-group-by","catalog-index-stats","catalog-install","catalog-jwt","users-create","users-import","users-search","users-sync") + private List adminList = asList( "audit-group-by","catalog-index-stats","catalog-install","catalog-jwt","users-create","users-import","users-search","users-sync","update-groups-users") .stream() .map(Candidate::new) .collect(toList()); diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/OpencgaCliOptionsParser.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/OpencgaCliOptionsParser.java index c18998aabcc..93ae1e2ed26 100644 --- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/OpencgaCliOptionsParser.java +++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/OpencgaCliOptionsParser.java @@ -1,5 +1,5 @@ /* -* Copyright 2015-2023-04-18 OpenCB +* Copyright 2015-2023-09-08 OpenCB * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -188,6 +188,7 @@ public OpencgaCliOptionsParser() { adminSubCommands.addCommand("users-import", adminCommandOptions.importUsersCommandOptions); adminSubCommands.addCommand("users-search", adminCommandOptions.searchUsersCommandOptions); adminSubCommands.addCommand("users-sync", adminCommandOptions.syncUsersCommandOptions); + adminSubCommands.addCommand("update-groups-users", adminCommandOptions.usersUpdateGroupsCommandOptions); individualsCommandOptions = new IndividualsCommandOptions(commonCommandOptions, jCommander); jCommander.addCommand("individuals", individualsCommandOptions); diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/AdminCommandExecutor.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/AdminCommandExecutor.java index 9ab6c51ed00..a16efb4df47 100644 --- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/AdminCommandExecutor.java +++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/AdminCommandExecutor.java @@ -19,11 +19,13 @@ import org.opencb.opencga.app.cli.main.options.AdminCommandOptions; import java.util.Map; +import org.opencb.opencga.catalog.utils.ParamUtils.AddRemoveAction; import org.opencb.opencga.core.models.admin.GroupSyncParams; import org.opencb.opencga.core.models.admin.InstallationParams; import org.opencb.opencga.core.models.admin.JWTParams; import org.opencb.opencga.core.models.admin.UserCreateParams; import org.opencb.opencga.core.models.admin.UserImportParams; +import org.opencb.opencga.core.models.admin.UserUpdateGroup; import org.opencb.opencga.core.models.common.Enums.Resource; import org.opencb.opencga.core.models.sample.Sample; import org.opencb.opencga.core.models.study.Group; @@ -87,6 +89,9 @@ public void execute() throws Exception { case "users-sync": queryResponse = syncUsers(); break; + case "update-groups-users": + queryResponse = usersUpdateGroups(); + break; default: logger.error("Subcommand not valid"); break; @@ -288,4 +293,35 @@ private RestResponse syncUsers() throws Exception { } return openCGAClient.getAdminClient().syncUsers(groupSyncParams); } + + private RestResponse usersUpdateGroups() throws Exception { + logger.debug("Executing usersUpdateGroups in Admin command line"); + + AdminCommandOptions.UsersUpdateGroupsCommandOptions commandOptions = adminCommandOptions.usersUpdateGroupsCommandOptions; + + ObjectMap queryParams = new ObjectMap(); + queryParams.putIfNotNull("action", commandOptions.action); + + + UserUpdateGroup userUpdateGroup = null; + if (commandOptions.jsonDataModel) { + userUpdateGroup = new UserUpdateGroup(); + RestResponse res = new RestResponse<>(); + res.setType(QueryType.VOID); + PrintUtils.println(getObjectAsJSON(userUpdateGroup)); + return res; + } else if (commandOptions.jsonFile != null) { + userUpdateGroup = JacksonUtils.getDefaultObjectMapper() + .readValue(new java.io.File(commandOptions.jsonFile), UserUpdateGroup.class); + } else { + ObjectMap beanParams = new ObjectMap(); + putNestedIfNotNull(beanParams, "studyIds",commandOptions.studyIds, true); + putNestedIfNotNull(beanParams, "groupIds",commandOptions.groupIds, true); + + userUpdateGroup = JacksonUtils.getDefaultObjectMapper().copy() + .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true) + .readValue(beanParams.toJson(), UserUpdateGroup.class); + } + return openCGAClient.getAdminClient().usersUpdateGroups(commandOptions.user, userUpdateGroup, queryParams); + } } \ No newline at end of file diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/OperationsVariantStorageCommandExecutor.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/OperationsVariantStorageCommandExecutor.java index 408f28841f3..78ed32b92dc 100644 --- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/OperationsVariantStorageCommandExecutor.java +++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/OperationsVariantStorageCommandExecutor.java @@ -197,7 +197,7 @@ private RestResponse configureCellbase() throws Exception { putNestedIfNotEmpty(beanParams, "url",commandOptions.url, true); putNestedIfNotEmpty(beanParams, "version",commandOptions.version, true); putNestedIfNotEmpty(beanParams, "dataRelease",commandOptions.dataRelease, true); - putNestedIfNotEmpty(beanParams, "token",commandOptions.token, true); + putNestedIfNotEmpty(beanParams, "apiKey",commandOptions.apiKey, true); cellBaseConfiguration = JacksonUtils.getDefaultObjectMapper().copy() .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true) diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/ProjectsCommandExecutor.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/ProjectsCommandExecutor.java index 7facd50d4d6..2ed3593e612 100644 --- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/ProjectsCommandExecutor.java +++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/executors/ProjectsCommandExecutor.java @@ -123,7 +123,7 @@ private RestResponse create() throws Exception { putNestedIfNotEmpty(beanParams, "cellbase.url",commandOptions.cellbaseUrl, true); putNestedIfNotEmpty(beanParams, "cellbase.version",commandOptions.cellbaseVersion, true); putNestedIfNotEmpty(beanParams, "cellbase.dataRelease",commandOptions.cellbaseDataRelease, true); - putNestedIfNotEmpty(beanParams, "cellbase.token",commandOptions.cellbaseToken, true); + putNestedIfNotEmpty(beanParams, "cellbase.apiKey",commandOptions.cellbaseApiKey, true); putNestedIfNotNull(beanParams, "attributes",commandOptions.attributes, true); projectCreateParams = JacksonUtils.getDefaultObjectMapper().copy() diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/AdminCommandOptions.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/AdminCommandOptions.java index ae9c1397750..f246d8a36d8 100644 --- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/AdminCommandOptions.java +++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/AdminCommandOptions.java @@ -41,6 +41,7 @@ public class AdminCommandOptions { public ImportUsersCommandOptions importUsersCommandOptions; public SearchUsersCommandOptions searchUsersCommandOptions; public SyncUsersCommandOptions syncUsersCommandOptions; + public UsersUpdateGroupsCommandOptions usersUpdateGroupsCommandOptions; public AdminCommandOptions(CommonCommandOptions commonCommandOptions, JCommander jCommander) { @@ -55,6 +56,7 @@ public AdminCommandOptions(CommonCommandOptions commonCommandOptions, JCommander this.importUsersCommandOptions = new ImportUsersCommandOptions(); this.searchUsersCommandOptions = new SearchUsersCommandOptions(); this.syncUsersCommandOptions = new SyncUsersCommandOptions(); + this.usersUpdateGroupsCommandOptions = new UsersUpdateGroupsCommandOptions(); } @@ -278,4 +280,30 @@ public class SyncUsersCommandOptions { } + @Parameters(commandNames = {"update-groups-users"}, commandDescription ="Add or remove users from existing groups") + public class UsersUpdateGroupsCommandOptions { + + @ParametersDelegate + public CommonCommandOptions commonOptions = commonCommandOptions; + + @Parameter(names = {"--json-file"}, description = "File with the body data in JSON format. Note, that using this parameter will ignore all the other parameters.", required = false, arity = 1) + public String jsonFile; + + @Parameter(names = {"--json-data-model"}, description = "Show example of file structure for body data.", help = true, arity = 0) + public Boolean jsonDataModel = false; + + @Parameter(names = {"--user", "-u"}, description = "User ID", required = true, arity = 1) + public String user; + + @Parameter(names = {"--action"}, description = "Action to be performed: ADD or REMOVE user to/from groups", required = false, arity = 1) + public String action = "ADD"; + + @Parameter(names = {"--study-ids"}, description = "The body web service studyIds parameter", required = false, arity = 1) + public String studyIds; + + @Parameter(names = {"--group-ids"}, description = "The body web service groupIds parameter", required = false, arity = 1) + public String groupIds; + + } + } \ No newline at end of file diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/AnalysisClinicalCommandOptions.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/AnalysisClinicalCommandOptions.java index 48261ca8a3c..95636ad4c3f 100644 --- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/AnalysisClinicalCommandOptions.java +++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/AnalysisClinicalCommandOptions.java @@ -275,7 +275,7 @@ public class DistinctCommandOptions { @Parameter(names = {"--study", "-s"}, description = "Study [[user@]project:]study where study and project can be either the ID or UUID", required = false, arity = 1) public String study; - @Parameter(names = {"--id"}, description = "Comma separated list of Clinical Analysis IDs up to a maximum of 100", required = false, arity = 1) + @Parameter(names = {"--id"}, description = "Comma separated list of Clinical Analysis IDs up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String id; @Parameter(names = {"--uuid"}, description = "Comma separated list of Clinical Analysis UUIDs up to a maximum of 100", required = false, arity = 1) @@ -284,7 +284,7 @@ public class DistinctCommandOptions { @Parameter(names = {"--type"}, description = "Clinical Analysis type", required = false, arity = 1) public String type; - @Parameter(names = {"--disorder"}, description = "Clinical Analysis disorder", required = false, arity = 1) + @Parameter(names = {"--disorder"}, description = "Clinical Analysis disorder. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String disorder; @Parameter(names = {"--files"}, description = "Clinical Analysis files", required = false, arity = 1) @@ -364,7 +364,7 @@ public class DistinctInterpretationCommandOptions { @Parameter(names = {"--study", "-s"}, description = "Study [[user@]project:]study where study and project can be either the ID or UUID", required = false, arity = 1) public String study; - @Parameter(names = {"--id"}, description = "Comma separated list of Interpretation IDs up to a maximum of 100", required = false, arity = 1) + @Parameter(names = {"--id"}, description = "Comma separated list of Interpretation IDs up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String id; @Parameter(names = {"--uuid"}, description = "Comma separated list of Interpretation UUIDs up to a maximum of 100", required = false, arity = 1) @@ -376,7 +376,7 @@ public class DistinctInterpretationCommandOptions { @Parameter(names = {"--analyst-id"}, description = "Analyst ID", required = false, arity = 1) public String analystId; - @Parameter(names = {"--method-name"}, description = "Interpretation method name", required = false, arity = 1) + @Parameter(names = {"--method-name"}, description = "Interpretation method name. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String methodName; @Parameter(names = {"--panels"}, description = "Interpretation panels", required = false, arity = 1) @@ -432,7 +432,7 @@ public class SearchInterpretationCommandOptions { @Parameter(names = {"--study", "-s"}, description = "Study [[user@]project:]study where study and project can be either the ID or UUID", required = false, arity = 1) public String study; - @Parameter(names = {"--id"}, description = "Comma separated list of Interpretation IDs up to a maximum of 100", required = false, arity = 1) + @Parameter(names = {"--id"}, description = "Comma separated list of Interpretation IDs up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String id; @Parameter(names = {"--uuid"}, description = "Comma separated list of Interpretation UUIDs up to a maximum of 100", required = false, arity = 1) @@ -444,7 +444,7 @@ public class SearchInterpretationCommandOptions { @Parameter(names = {"--analyst-id"}, description = "Analyst ID", required = false, arity = 1) public String analystId; - @Parameter(names = {"--method-name"}, description = "Interpretation method name", required = false, arity = 1) + @Parameter(names = {"--method-name"}, description = "Interpretation method name. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String methodName; @Parameter(names = {"--panels"}, description = "Interpretation panels", required = false, arity = 1) @@ -1488,7 +1488,7 @@ public class SearchCommandOptions { @Parameter(names = {"--study", "-s"}, description = "Study [[user@]project:]study where study and project can be either the ID or UUID", required = false, arity = 1) public String study; - @Parameter(names = {"--id"}, description = "Comma separated list of Clinical Analysis IDs up to a maximum of 100", required = false, arity = 1) + @Parameter(names = {"--id"}, description = "Comma separated list of Clinical Analysis IDs up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String id; @Parameter(names = {"--uuid"}, description = "Comma separated list of Clinical Analysis UUIDs up to a maximum of 100", required = false, arity = 1) @@ -1497,7 +1497,7 @@ public class SearchCommandOptions { @Parameter(names = {"--type"}, description = "Clinical Analysis type", required = false, arity = 1) public String type; - @Parameter(names = {"--disorder"}, description = "Clinical Analysis disorder", required = false, arity = 1) + @Parameter(names = {"--disorder"}, description = "Clinical Analysis disorder. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String disorder; @Parameter(names = {"--files"}, description = "Clinical Analysis files", required = false, arity = 1) diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/AnalysisVariantCommandOptions.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/AnalysisVariantCommandOptions.java index fc752daaf98..0b37bec1c1c 100644 --- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/AnalysisVariantCommandOptions.java +++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/AnalysisVariantCommandOptions.java @@ -925,8 +925,8 @@ public class RunGwasCommandOptions { @Parameter(names = {"--phenotype"}, description = "The body web service phenotype parameter", required = false, arity = 1) public String phenotype; - @Parameter(names = {"--index"}, description = "The body web service index parameter", required = false, arity = 1) - public Boolean index; + @Parameter(names = {"--index"}, description = "The body web service index parameter", required = false, help = true, arity = 0) + public boolean index = false; @Parameter(names = {"--index-score-id"}, description = "The body web service indexScoreId parameter", required = false, arity = 1) public String indexScoreId; diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/CohortsCommandOptions.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/CohortsCommandOptions.java index 13373914df4..03f08e58c9e 100644 --- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/CohortsCommandOptions.java +++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/CohortsCommandOptions.java @@ -242,10 +242,10 @@ public class DistinctCommandOptions { @Parameter(names = {"--study", "-s"}, description = "Study [[user@]project:]study where study and project can be either the ID or UUID", required = false, arity = 1) public String study; - @Parameter(names = {"--id"}, description = "Comma separated list of cohort IDs up to a maximum of 100", required = false, arity = 1) + @Parameter(names = {"--id"}, description = "Comma separated list of cohort IDs up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String id; - @Parameter(names = {"--name", "-n"}, description = "Comma separated list of cohort names up to a maximum of 100", required = false, arity = 1) + @Parameter(names = {"--name", "-n"}, description = "Comma separated list of cohort names up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String name; @Parameter(names = {"--uuid"}, description = "Comma separated list of cohort IDs up to a maximum of 100", required = false, arity = 1) @@ -334,7 +334,7 @@ public class GenerateCommandOptions { @Parameter(names = {"--status"}, description = "Filter by status", required = false, arity = 1) public String status; - @Parameter(names = {"--phenotypes"}, description = "Comma separated list of phenotype ids or names", required = false, arity = 1) + @Parameter(names = {"--phenotypes"}, description = "Comma separated list of phenotype ids or names. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String phenotypes; @Parameter(names = {"--annotation"}, description = "Annotation filters. Example: age>30;gender=FEMALE. For more information, please visit http://docs.opencb.org/display/opencga/AnnotationSets+1.4.0", required = false, arity = 1) @@ -411,10 +411,10 @@ public class SearchCommandOptions { @Parameter(names = {"--study", "-s"}, description = "Study [[user@]project:]study where study and project can be either the ID or UUID", required = false, arity = 1) public String study; - @Parameter(names = {"--id"}, description = "Comma separated list of cohort IDs up to a maximum of 100", required = false, arity = 1) + @Parameter(names = {"--id"}, description = "Comma separated list of cohort IDs up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String id; - @Parameter(names = {"--name", "-n"}, description = "Comma separated list of cohort names up to a maximum of 100", required = false, arity = 1) + @Parameter(names = {"--name", "-n"}, description = "Comma separated list of cohort names up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String name; @Parameter(names = {"--uuid"}, description = "Comma separated list of cohort IDs up to a maximum of 100", required = false, arity = 1) diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/DiseasePanelsCommandOptions.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/DiseasePanelsCommandOptions.java index c6e353a7dca..1f0f1cbb9bc 100644 --- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/DiseasePanelsCommandOptions.java +++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/DiseasePanelsCommandOptions.java @@ -157,37 +157,37 @@ public class DistinctCommandOptions { @Parameter(names = {"--study", "-s"}, description = "Study [[user@]project:]study where study and project can be either the ID or UUID", required = false, arity = 1) public String study; - @Parameter(names = {"--id"}, description = "Comma separated list of panel IDs up to a maximum of 100", required = false, arity = 1) + @Parameter(names = {"--id"}, description = "Comma separated list of panel IDs up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String id; @Parameter(names = {"--uuid"}, description = "Comma separated list of panel UUIDs up to a maximum of 100", required = false, arity = 1) public String uuid; - @Parameter(names = {"--name", "-n"}, description = "Comma separated list of panel names up to a maximum of 100", required = false, arity = 1) + @Parameter(names = {"--name", "-n"}, description = "Comma separated list of panel names up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String name; @Parameter(names = {"--internal-status"}, description = "Filter by internal status", required = false, arity = 1) public String internalStatus; - @Parameter(names = {"--disorders"}, description = "Comma separated list of disorder ids or names", required = false, arity = 1) + @Parameter(names = {"--disorders"}, description = "Comma separated list of disorder ids or names. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String disorders; - @Parameter(names = {"--variants"}, description = "Comma separated list of variant ids", required = false, arity = 1) + @Parameter(names = {"--variants"}, description = "Comma separated list of variant ids. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String variants; - @Parameter(names = {"--genes"}, description = "Comma separated list of gene ids", required = false, arity = 1) + @Parameter(names = {"--genes"}, description = "Comma separated list of gene ids. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String genes; @Parameter(names = {"--source"}, description = "Comma separated list of source ids or names.", required = false, arity = 1) public String source; - @Parameter(names = {"--regions"}, description = "Comma separated list of regions", required = false, arity = 1) + @Parameter(names = {"--regions"}, description = "Comma separated list of regions. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String regions; - @Parameter(names = {"--categories"}, description = "Comma separated list of category names", required = false, arity = 1) + @Parameter(names = {"--categories"}, description = "Comma separated list of category names. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String categories; - @Parameter(names = {"--tags"}, description = "Panel tags", required = false, arity = 1) + @Parameter(names = {"--tags"}, description = "Panel tags. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String tags; @Parameter(names = {"--deleted"}, description = "Boolean to retrieve deleted entries", required = false, help = true, arity = 0) @@ -275,37 +275,37 @@ public class SearchCommandOptions { @Parameter(names = {"--study", "-s"}, description = "Study [[user@]project:]study where study and project can be either the ID or UUID", required = false, arity = 1) public String study; - @Parameter(names = {"--id"}, description = "Comma separated list of panel IDs up to a maximum of 100", required = false, arity = 1) + @Parameter(names = {"--id"}, description = "Comma separated list of panel IDs up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String id; @Parameter(names = {"--uuid"}, description = "Comma separated list of panel UUIDs up to a maximum of 100", required = false, arity = 1) public String uuid; - @Parameter(names = {"--name", "-n"}, description = "Comma separated list of panel names up to a maximum of 100", required = false, arity = 1) + @Parameter(names = {"--name", "-n"}, description = "Comma separated list of panel names up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String name; @Parameter(names = {"--internal-status"}, description = "Filter by internal status", required = false, arity = 1) public String internalStatus; - @Parameter(names = {"--disorders"}, description = "Comma separated list of disorder ids or names", required = false, arity = 1) + @Parameter(names = {"--disorders"}, description = "Comma separated list of disorder ids or names. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String disorders; - @Parameter(names = {"--variants"}, description = "Comma separated list of variant ids", required = false, arity = 1) + @Parameter(names = {"--variants"}, description = "Comma separated list of variant ids. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String variants; - @Parameter(names = {"--genes"}, description = "Comma separated list of gene ids", required = false, arity = 1) + @Parameter(names = {"--genes"}, description = "Comma separated list of gene ids. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String genes; @Parameter(names = {"--source"}, description = "Comma separated list of source ids or names.", required = false, arity = 1) public String source; - @Parameter(names = {"--regions"}, description = "Comma separated list of regions", required = false, arity = 1) + @Parameter(names = {"--regions"}, description = "Comma separated list of regions. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String regions; - @Parameter(names = {"--categories"}, description = "Comma separated list of category names", required = false, arity = 1) + @Parameter(names = {"--categories"}, description = "Comma separated list of category names. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String categories; - @Parameter(names = {"--tags"}, description = "Panel tags", required = false, arity = 1) + @Parameter(names = {"--tags"}, description = "Panel tags. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String tags; @Parameter(names = {"--deleted"}, description = "Boolean to retrieve deleted entries", required = false, help = true, arity = 0) diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/FamiliesCommandOptions.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/FamiliesCommandOptions.java index 9530f60074d..3c57ef335ba 100644 --- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/FamiliesCommandOptions.java +++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/FamiliesCommandOptions.java @@ -252,10 +252,10 @@ public class DistinctCommandOptions { @Parameter(names = {"--study", "-s"}, description = "Study [[user@]project:]study where study and project can be either the ID or UUID", required = false, arity = 1) public String study; - @Parameter(names = {"--id"}, description = "Comma separated list family IDs up to a maximum of 100", required = false, arity = 1) + @Parameter(names = {"--id"}, description = "Comma separated list family IDs up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String id; - @Parameter(names = {"--name", "-n"}, description = "Comma separated list family names up to a maximum of 100", required = false, arity = 1) + @Parameter(names = {"--name", "-n"}, description = "Comma separated list family names up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String name; @Parameter(names = {"--uuid"}, description = "Comma separated list family UUIDs up to a maximum of 100", required = false, arity = 1) @@ -270,10 +270,10 @@ public class DistinctCommandOptions { @Parameter(names = {"--samples"}, description = "Comma separated list of member's samples", required = false, arity = 1) public String samples; - @Parameter(names = {"--phenotypes"}, description = "Comma separated list of phenotype ids or names", required = false, arity = 1) + @Parameter(names = {"--phenotypes"}, description = "Comma separated list of phenotype ids or names. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String phenotypes; - @Parameter(names = {"--disorders"}, description = "Comma separated list of disorder ids or names", required = false, arity = 1) + @Parameter(names = {"--disorders"}, description = "Comma separated list of disorder ids or names. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String disorders; @Parameter(names = {"--creation-date", "--cd"}, description = "Creation date. Format: yyyyMMddHHmmss. Examples: >2018, 2017-2018, <201805", required = false, arity = 1) @@ -335,10 +335,10 @@ public class SearchCommandOptions { @Parameter(names = {"--study", "-s"}, description = "Study [[user@]project:]study where study and project can be either the ID or UUID", required = false, arity = 1) public String study; - @Parameter(names = {"--id"}, description = "Comma separated list family IDs up to a maximum of 100", required = false, arity = 1) + @Parameter(names = {"--id"}, description = "Comma separated list family IDs up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String id; - @Parameter(names = {"--name", "-n"}, description = "Comma separated list family names up to a maximum of 100", required = false, arity = 1) + @Parameter(names = {"--name", "-n"}, description = "Comma separated list family names up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String name; @Parameter(names = {"--uuid"}, description = "Comma separated list family UUIDs up to a maximum of 100", required = false, arity = 1) @@ -353,10 +353,10 @@ public class SearchCommandOptions { @Parameter(names = {"--samples"}, description = "Comma separated list of member's samples", required = false, arity = 1) public String samples; - @Parameter(names = {"--phenotypes"}, description = "Comma separated list of phenotype ids or names", required = false, arity = 1) + @Parameter(names = {"--phenotypes"}, description = "Comma separated list of phenotype ids or names. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String phenotypes; - @Parameter(names = {"--disorders"}, description = "Comma separated list of disorder ids or names", required = false, arity = 1) + @Parameter(names = {"--disorders"}, description = "Comma separated list of disorder ids or names. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String disorders; @Parameter(names = {"--creation-date", "--cd"}, description = "Creation date. Format: yyyyMMddHHmmss. Examples: >2018, 2017-2018, <201805", required = false, arity = 1) diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/FilesCommandOptions.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/FilesCommandOptions.java index d1d4e0bf0a8..5ea18955f58 100644 --- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/FilesCommandOptions.java +++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/FilesCommandOptions.java @@ -327,19 +327,19 @@ public class DistinctCommandOptions { @Parameter(names = {"--study", "-s"}, description = "Study [[user@]project:]study where study and project can be either the ID or UUID", required = false, arity = 1) public String study; - @Parameter(names = {"--id"}, description = "Comma separated list of file IDs up to a maximum of 100", required = false, arity = 1) + @Parameter(names = {"--id"}, description = "Comma separated list of file IDs up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String id; @Parameter(names = {"--uuid"}, description = "Comma separated list file UUIDs up to a maximum of 100", required = false, arity = 1) public String uuid; - @Parameter(names = {"--name", "-n"}, description = "Comma separated list of file names", required = false, arity = 1) + @Parameter(names = {"--name", "-n"}, description = "Comma separated list of file names. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String name; - @Parameter(names = {"--path"}, description = "Comma separated list of paths", required = false, arity = 1) + @Parameter(names = {"--path"}, description = "Comma separated list of paths. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String path; - @Parameter(names = {"--uri", "--input", "-i"}, description = "Comma separated list of uris", required = false, arity = 1) + @Parameter(names = {"--uri", "--input", "-i"}, description = "Comma separated list of uris. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String uri; @Parameter(names = {"--type"}, description = "File type, either FILE or DIRECTORY", required = false, arity = 1) @@ -378,7 +378,7 @@ public class DistinctCommandOptions { @Parameter(names = {"--description"}, description = "Description", required = false, arity = 1) public String description; - @Parameter(names = {"--tags"}, description = "Tags", required = false, arity = 1) + @Parameter(names = {"--tags"}, description = "Tags. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String tags; @Parameter(names = {"--size"}, description = "File size", required = false, arity = 1) @@ -609,19 +609,19 @@ public class SearchCommandOptions { @Parameter(names = {"--study", "-s"}, description = "Study [[user@]project:]study where study and project can be either the ID or UUID", required = false, arity = 1) public String study; - @Parameter(names = {"--id"}, description = "Comma separated list of file IDs up to a maximum of 100", required = false, arity = 1) + @Parameter(names = {"--id"}, description = "Comma separated list of file IDs up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String id; @Parameter(names = {"--uuid"}, description = "Comma separated list file UUIDs up to a maximum of 100", required = false, arity = 1) public String uuid; - @Parameter(names = {"--name", "-n"}, description = "Comma separated list of file names", required = false, arity = 1) + @Parameter(names = {"--name", "-n"}, description = "Comma separated list of file names. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String name; - @Parameter(names = {"--path"}, description = "Comma separated list of paths", required = false, arity = 1) + @Parameter(names = {"--path"}, description = "Comma separated list of paths. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String path; - @Parameter(names = {"--uri", "--input", "-i"}, description = "Comma separated list of uris", required = false, arity = 1) + @Parameter(names = {"--uri", "--input", "-i"}, description = "Comma separated list of uris. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String uri; @Parameter(names = {"--type"}, description = "File type, either FILE or DIRECTORY", required = false, arity = 1) @@ -660,7 +660,7 @@ public class SearchCommandOptions { @Parameter(names = {"--description"}, description = "Description", required = false, arity = 1) public String description; - @Parameter(names = {"--tags"}, description = "Tags", required = false, arity = 1) + @Parameter(names = {"--tags"}, description = "Tags. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String tags; @Parameter(names = {"--size"}, description = "File size", required = false, arity = 1) diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/IndividualsCommandOptions.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/IndividualsCommandOptions.java index a9e20c70232..d0238597f52 100644 --- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/IndividualsCommandOptions.java +++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/IndividualsCommandOptions.java @@ -350,13 +350,13 @@ public class DistinctCommandOptions { @Parameter(names = {"--study", "-s"}, description = "Study [[user@]project:]study where study and project can be either the ID or UUID", required = false, arity = 1) public String study; - @Parameter(names = {"--id"}, description = "Comma separated list individual IDs up to a maximum of 100", required = false, arity = 1) + @Parameter(names = {"--id"}, description = "Comma separated list individual IDs up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String id; @Parameter(names = {"--uuid"}, description = "Comma separated list individual UUIDs up to a maximum of 100", required = false, arity = 1) public String uuid; - @Parameter(names = {"--name", "-n"}, description = "Comma separated list individual names up to a maximum of 100", required = false, arity = 1) + @Parameter(names = {"--name", "-n"}, description = "Comma separated list individual names up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String name; @Parameter(names = {"--family-ids"}, description = "Comma separated list of family ids the individuals may belong to.", required = false, arity = 1) @@ -374,22 +374,22 @@ public class DistinctCommandOptions { @Parameter(names = {"--sex"}, description = "Individual sex", required = false, arity = 1) public String sex; - @Parameter(names = {"--ethnicity"}, description = "Individual ethnicity", required = false, arity = 1) + @Parameter(names = {"--ethnicity"}, description = "Individual ethnicity. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String ethnicity; @Parameter(names = {"--date-of-birth"}, description = "Individual date of birth", required = false, arity = 1) public String dateOfBirth; - @Parameter(names = {"--disorders"}, description = "Comma separated list of disorder ids or names", required = false, arity = 1) + @Parameter(names = {"--disorders"}, description = "Comma separated list of disorder ids or names. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String disorders; - @Parameter(names = {"--phenotypes"}, description = "Comma separated list of phenotype ids or names", required = false, arity = 1) + @Parameter(names = {"--phenotypes"}, description = "Comma separated list of phenotype ids or names. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String phenotypes; - @Parameter(names = {"--population-name"}, description = "Population name", required = false, arity = 1) + @Parameter(names = {"--population-name"}, description = "Population name. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String populationName; - @Parameter(names = {"--population-subpopulation"}, description = "Subpopulation name", required = false, arity = 1) + @Parameter(names = {"--population-subpopulation"}, description = "Subpopulation name. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String populationSubpopulation; @Parameter(names = {"--karyotypic-sex"}, description = "Individual karyotypic sex", required = false, arity = 1) @@ -457,13 +457,13 @@ public class SearchCommandOptions { @Parameter(names = {"--study", "-s"}, description = "Study [[user@]project:]study where study and project can be either the ID or UUID", required = false, arity = 1) public String study; - @Parameter(names = {"--id"}, description = "Comma separated list individual IDs up to a maximum of 100", required = false, arity = 1) + @Parameter(names = {"--id"}, description = "Comma separated list individual IDs up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String id; @Parameter(names = {"--uuid"}, description = "Comma separated list individual UUIDs up to a maximum of 100", required = false, arity = 1) public String uuid; - @Parameter(names = {"--name", "-n"}, description = "Comma separated list individual names up to a maximum of 100", required = false, arity = 1) + @Parameter(names = {"--name", "-n"}, description = "Comma separated list individual names up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String name; @Parameter(names = {"--father"}, description = "Father ID, name or UUID", required = false, arity = 1) @@ -484,19 +484,19 @@ public class SearchCommandOptions { @Parameter(names = {"--date-of-birth"}, description = "Individual date of birth", required = false, arity = 1) public String dateOfBirth; - @Parameter(names = {"--ethnicity"}, description = "Individual ethnicity", required = false, arity = 1) + @Parameter(names = {"--ethnicity"}, description = "Individual ethnicity. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String ethnicity; - @Parameter(names = {"--disorders"}, description = "Comma separated list of disorder ids or names", required = false, arity = 1) + @Parameter(names = {"--disorders"}, description = "Comma separated list of disorder ids or names. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String disorders; - @Parameter(names = {"--phenotypes"}, description = "Comma separated list of phenotype ids or names", required = false, arity = 1) + @Parameter(names = {"--phenotypes"}, description = "Comma separated list of phenotype ids or names. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String phenotypes; - @Parameter(names = {"--population-name"}, description = "Population name", required = false, arity = 1) + @Parameter(names = {"--population-name"}, description = "Population name. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String populationName; - @Parameter(names = {"--population-subpopulation"}, description = "Subpopulation name", required = false, arity = 1) + @Parameter(names = {"--population-subpopulation"}, description = "Subpopulation name. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String populationSubpopulation; @Parameter(names = {"--karyotypic-sex"}, description = "Individual karyotypic sex", required = false, arity = 1) diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/JobsCommandOptions.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/JobsCommandOptions.java index 44eac65bf28..04b6caae03c 100644 --- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/JobsCommandOptions.java +++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/JobsCommandOptions.java @@ -241,13 +241,13 @@ public class DistinctCommandOptions { @Parameter(names = {"--other-studies"}, description = "Flag indicating the entries being queried can belong to any related study, not just the primary one.", required = false, help = true, arity = 0) public boolean otherStudies = false; - @Parameter(names = {"--id"}, description = "Comma separated list of job IDs up to a maximum of 100", required = false, arity = 1) + @Parameter(names = {"--id"}, description = "Comma separated list of job IDs up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String id; @Parameter(names = {"--uuid"}, description = "Comma separated list of job UUIDs up to a maximum of 100", required = false, arity = 1) public String uuid; - @Parameter(names = {"--tool-id"}, description = "Tool ID executed by the job", required = false, arity = 1) + @Parameter(names = {"--tool-id"}, description = "Tool ID executed by the job. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String toolId; @Parameter(names = {"--tool-type"}, description = "Tool type executed by the job [OPERATION, ANALYSIS]", required = false, arity = 1) @@ -362,13 +362,13 @@ public class SearchCommandOptions { @Parameter(names = {"--other-studies"}, description = "Flag indicating the entries being queried can belong to any related study, not just the primary one.", required = false, help = true, arity = 0) public boolean otherStudies = false; - @Parameter(names = {"--id"}, description = "Comma separated list of job IDs up to a maximum of 100", required = false, arity = 1) + @Parameter(names = {"--id"}, description = "Comma separated list of job IDs up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String id; @Parameter(names = {"--uuid"}, description = "Comma separated list of job UUIDs up to a maximum of 100", required = false, arity = 1) public String uuid; - @Parameter(names = {"--tool-id"}, description = "Tool ID executed by the job", required = false, arity = 1) + @Parameter(names = {"--tool-id"}, description = "Tool ID executed by the job. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String toolId; @Parameter(names = {"--tool-type"}, description = "Tool type executed by the job [OPERATION, ANALYSIS]", required = false, arity = 1) diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/OperationsVariantStorageCommandOptions.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/OperationsVariantStorageCommandOptions.java index c3c89bf4b1a..d0b8a26d019 100644 --- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/OperationsVariantStorageCommandOptions.java +++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/OperationsVariantStorageCommandOptions.java @@ -128,8 +128,8 @@ public class ConfigureCellbaseCommandOptions { @Parameter(names = {"--data-release"}, description = "CellBase data release version to be used. If empty, will use the active one", required = false, arity = 1) public String dataRelease; - @Parameter(names = {"--token"}, description = "CellBase token to access to the licensed/restricted data sources such as COSMIC, HGMD,...", required = false, arity = 1) - public String token; + @Parameter(names = {"--api-key"}, description = "API key to access to the licensed/restricted data sources (COSMIC, HGMD,...) and to manage quota.", required = false, arity = 1) + public String apiKey; } diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/ProjectsCommandOptions.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/ProjectsCommandOptions.java index 1f7a3782e45..a2eca8cb958 100644 --- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/ProjectsCommandOptions.java +++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/ProjectsCommandOptions.java @@ -110,8 +110,8 @@ public class CreateCommandOptions { @Parameter(names = {"--cellbase-data-release"}, description = "CellBase data release version to be used. If empty, will use the active one", required = false, arity = 1) public String cellbaseDataRelease; - @Parameter(names = {"--cellbase-token"}, description = "CellBase token to access to the licensed/restricted data sources such as COSMIC, HGMD,...", required = false, arity = 1) - public String cellbaseToken; + @Parameter(names = {"--cellbase-api-key"}, description = "API key to access to the licensed/restricted data sources (COSMIC, HGMD,...) and to manage quota.", required = false, arity = 1) + public String cellbaseApiKey; @DynamicParameter(names = {"--attributes"}, description = "The body web service attributes parameter. Use: --attributes key=value", required = false) public java.util.Map attributes = new HashMap<>(); //Dynamic parameters must be initialized; diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/SamplesCommandOptions.java b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/SamplesCommandOptions.java index 0099fbf2a90..8cfc8fed346 100644 --- a/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/SamplesCommandOptions.java +++ b/opencga-app/src/main/java/org/opencb/opencga/app/cli/main/options/SamplesCommandOptions.java @@ -305,7 +305,7 @@ public class DistinctCommandOptions { @Parameter(names = {"--study", "-s"}, description = "Study [[user@]project:]study where study and project can be either the ID or UUID", required = false, arity = 1) public String study; - @Parameter(names = {"--id"}, description = "Comma separated list sample IDs up to a maximum of 100", required = false, arity = 1) + @Parameter(names = {"--id"}, description = "Comma separated list sample IDs up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String id; @Parameter(names = {"--uuid"}, description = "Comma separated list sample UUIDs up to a maximum of 100", required = false, arity = 1) @@ -356,7 +356,7 @@ public class DistinctCommandOptions { @Parameter(names = {"--collection-method"}, description = "Collection method", required = false, arity = 1) public String collectionMethod; - @Parameter(names = {"--phenotypes"}, description = "Comma separated list of phenotype ids or names", required = false, arity = 1) + @Parameter(names = {"--phenotypes"}, description = "Comma separated list of phenotype ids or names. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String phenotypes; @Parameter(names = {"--annotation"}, description = "Annotation filters. Example: age>30;gender=FEMALE. For more information, please visit http://docs.opencb.org/display/opencga/AnnotationSets+1.4.0", required = false, arity = 1) @@ -468,7 +468,7 @@ public class SearchCommandOptions { @Parameter(names = {"--study", "-s"}, description = "Study [[user@]project:]study where study and project can be either the ID or UUID", required = false, arity = 1) public String study; - @Parameter(names = {"--id"}, description = "Comma separated list sample IDs up to a maximum of 100", required = false, arity = 1) + @Parameter(names = {"--id"}, description = "Comma separated list sample IDs up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String id; @Parameter(names = {"--uuid"}, description = "Comma separated list sample UUIDs up to a maximum of 100", required = false, arity = 1) @@ -519,7 +519,7 @@ public class SearchCommandOptions { @Parameter(names = {"--collection-method"}, description = "Collection method", required = false, arity = 1) public String collectionMethod; - @Parameter(names = {"--phenotypes"}, description = "Comma separated list of phenotype ids or names", required = false, arity = 1) + @Parameter(names = {"--phenotypes"}, description = "Comma separated list of phenotype ids or names. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.", required = false, arity = 1) public String phenotypes; @Parameter(names = {"--annotation"}, description = "Annotation filters. Example: age>30;gender=FEMALE. For more information, please visit http://docs.opencb.org/display/opencga/AnnotationSets+1.4.0", required = false, arity = 1) diff --git a/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2_9_0/catalog/RenameCellBaseToken2ApiKey.java b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2_9_0/catalog/RenameCellBaseToken2ApiKey.java new file mode 100644 index 00000000000..72fe8e6499e --- /dev/null +++ b/opencga-app/src/main/java/org/opencb/opencga/app/migrations/v2_9_0/catalog/RenameCellBaseToken2ApiKey.java @@ -0,0 +1,50 @@ +package org.opencb.opencga.app.migrations.v2_9_0.catalog; + +import com.mongodb.client.model.Projections; +import com.mongodb.client.model.UpdateOneModel; +import com.mongodb.client.model.Updates; +import org.bson.Document; +import org.opencb.opencga.catalog.db.mongodb.MongoDBAdaptorFactory; +import org.opencb.opencga.catalog.migration.Migration; +import org.opencb.opencga.catalog.migration.MigrationTool; + +import java.util.List; + +import static com.mongodb.client.model.Filters.eq; + +@Migration(id = "rename_cellbase_token_2_api_key" , + description = "Rename CellBase Token to ApiKey", + version = "2.9.0", + domain = Migration.MigrationDomain.CATALOG, + language = Migration.MigrationLanguage.JAVA, + date = 20230829 +) +public class RenameCellBaseToken2ApiKey extends MigrationTool { + + @Override + protected void run() throws Exception { + + migrateCollection(MongoDBAdaptorFactory.USER_COLLECTION, + new Document("projects.id", new Document("$exists", true)), + Projections.include("_id", "projects"), + (userDocument, bulk) -> { + List projects = userDocument.getList("projects", Document.class); + for (int i = 0; i < projects.size(); i++) { + Document project = projects.get(i); + Document cellbase = project.get("cellbase", Document.class); + if (cellbase != null) { + String token = cellbase.getString("token"); + if (token != null) { + bulk.add(new UpdateOneModel<>( + eq("_id", userDocument.get("_id")), + Updates.combine( + Updates.set("projects." + i + ".cellbase.apiKey", token), + Updates.unset("projects." + i + ".cellbase.token") + ))); + } + } + } + }); + } + +} diff --git a/opencga-catalog/pom.xml b/opencga-catalog/pom.xml index c911504528d..fac7d8e548a 100644 --- a/opencga-catalog/pom.xml +++ b/opencga-catalog/pom.xml @@ -23,7 +23,7 @@ org.opencb.opencga opencga - 2.10.0-SNAPSHOT + 2.11.0-SNAPSHOT ../pom.xml diff --git a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/MongoDBAdaptor.java b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/MongoDBAdaptor.java index 376c835b8a8..a3b47c037dc 100644 --- a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/MongoDBAdaptor.java +++ b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/MongoDBAdaptor.java @@ -376,6 +376,41 @@ protected OpenCGAResult groupBy(MongoDBCollection collection, Bson query, List(aggregate); } + public static QueryOptions addPrefixInOptions(QueryOptions options, String prefix) { + if (options == null) { + return null; + } + + QueryOptions queryOptions = new QueryOptions(options); + + if (queryOptions.containsKey(QueryOptions.INCLUDE)) { + Set includeList = new HashSet<>(queryOptions.getAsStringList(QueryOptions.INCLUDE)); + List newInclude = new ArrayList<>(includeList.size()); + for (String key : includeList) { + if (key.startsWith(prefix)) { + newInclude.add(key); + } else { + newInclude.add(prefix + key); + } + } + queryOptions.put(QueryOptions.INCLUDE, newInclude); + } + if (queryOptions.containsKey(QueryOptions.EXCLUDE)) { + Set excludeList = new HashSet<>(queryOptions.getAsStringList(QueryOptions.EXCLUDE)); + List newExclude = new ArrayList<>(excludeList.size()); + for (String key : excludeList) { + if (key.startsWith(prefix)) { + newExclude.add(key); + } else { + newExclude.add(prefix + key); + } + } + queryOptions.put(QueryOptions.EXCLUDE, newExclude); + } + + return queryOptions; + } + /** * Filter QueryOptions object to ensure the keys provided are always included. * diff --git a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/ProjectMongoDBAdaptor.java b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/ProjectMongoDBAdaptor.java index 297ff31f27e..1474f1ed4e1 100644 --- a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/ProjectMongoDBAdaptor.java +++ b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/ProjectMongoDBAdaptor.java @@ -771,8 +771,10 @@ private MongoDBIterator getMongoCursor(ClientSession clientSession, Qu aggregates.add(Aggregates.match(bsonQuery)); // Check include - QueryOptions qOptions = options != null ? new QueryOptions(options) : new QueryOptions(); - List includeList = new ArrayList<>(); + QueryOptions qOptions = filterQueryOptions(options, Arrays.asList(QueryParams.UID.key(), QueryParams.FQN.key())); + qOptions = addPrefixInOptions(qOptions, "projects."); + + /*List includeList = new ArrayList<>(); if (options != null && options.get(QueryOptions.INCLUDE) != null) { List optionsAsStringList = options.getAsStringList(QueryOptions.INCLUDE); includeList.addAll(optionsAsStringList.stream().collect(Collectors.toList())); @@ -792,6 +794,7 @@ private MongoDBIterator getMongoCursor(ClientSession clientSession, Qu } qOptions.put(QueryOptions.INCLUDE, includeList); } + */ for (Bson aggregate : aggregates) { logger.debug("Get project: Aggregate : {}", aggregate.toBsonDocument()); diff --git a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/StudyMongoDBAdaptor.java b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/StudyMongoDBAdaptor.java index 34510e96868..d2e01a601be 100644 --- a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/StudyMongoDBAdaptor.java +++ b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/StudyMongoDBAdaptor.java @@ -318,10 +318,10 @@ Study insert(ClientSession clientSession, Project project, Study study) } @Override - public OpenCGAResult getAllStudiesInProject(long projectId, QueryOptions options) throws CatalogDBException { + public OpenCGAResult getAllStudiesInProject(long projectUid, QueryOptions options) throws CatalogDBException { long startTime = startQuery(); - dbAdaptorFactory.getCatalogProjectDbAdaptor().checkId(projectId); - Query query = new Query(QueryParams.PROJECT_ID.key(), projectId); + dbAdaptorFactory.getCatalogProjectDbAdaptor().checkId(projectUid); + Query query = new Query(QueryParams.PROJECT_UID.key(), projectUid); return endQuery(startTime, get(query, options)); } diff --git a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/iterators/ProjectCatalogMongoDBIterator.java b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/iterators/ProjectCatalogMongoDBIterator.java index 52aa62fb1e0..0cc8fc56180 100644 --- a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/iterators/ProjectCatalogMongoDBIterator.java +++ b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/db/mongodb/iterators/ProjectCatalogMongoDBIterator.java @@ -25,6 +25,7 @@ public class ProjectCatalogMongoDBIterator extends CatalogMongoDBIterator private final String user; private final QueryOptions options; + private boolean includeStudyInfo; private final StudyMongoDBAdaptor studyDBAdaptor; private QueryOptions studyQueryOptions; @@ -44,6 +45,7 @@ public ProjectCatalogMongoDBIterator(MongoDBIterator mongoCursor, Clie this.studyDBAdaptor = dbAdaptorFactory.getCatalogStudyDBAdaptor(); this.options = options != null ? new QueryOptions(options) : new QueryOptions(); + this.includeStudyInfo = includeStudyInfo(); this.studyQueryOptions = createInnerQueryOptionsForVersionedEntity(this.options, ProjectDBAdaptor.QueryParams.STUDIES.key(), false); this.studyQueryOptions = MongoDBAdaptor.filterQueryOptions(this.studyQueryOptions, Collections.singletonList(MongoDBAdaptor.PRIVATE_PROJECT)); @@ -90,8 +92,7 @@ private void fetchNextBatch() { projectListBuffer.add(projectDocument); counter++; - if (options == null || !options.containsKey(QueryOptions.EXCLUDE) - || !options.getAsStringList(QueryOptions.EXCLUDE).contains("projects.studies")) { + if (includeStudyInfo) { projectUidSet.add(projectDocument.get(UID, Long.class)); } } @@ -130,4 +131,29 @@ private void fetchNextBatch() { } } } + + private boolean includeStudyInfo() { + if (options == null) { + return true; + } + if (options.containsKey(QueryOptions.EXCLUDE)) { + List list = options.getAsStringList(QueryOptions.EXCLUDE); + for (String exclude : list) { + if (exclude.equals("studies") || exclude.equals("projects.studies")) { + return false; + } + } + return true; + } else if (options.containsKey(QueryOptions.INCLUDE)) { + List list = options.getAsStringList(QueryOptions.INCLUDE); + for (String include : list) { + if (include.startsWith("studies") || include.startsWith("projects.studies")) { + return true; + } + } + return false; + } else { + return true; + } + } } diff --git a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/managers/ProjectManager.java b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/managers/ProjectManager.java index 249d14ab057..7900d958a42 100644 --- a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/managers/ProjectManager.java +++ b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/managers/ProjectManager.java @@ -610,7 +610,9 @@ public OpenCGAResult incrementRelease(String projectStr, String session int currentRelease = project.getCurrentRelease(); // Check current release has been used at least in one study or file or cohort or individual... - List allStudiesInProject = project.getStudies(); + QueryOptions studyOptions = keepFieldInQueryOptions(StudyManager.INCLUDE_STUDY_IDS, StudyDBAdaptor.QueryParams.RELEASE.key()); + OpenCGAResult studyResult = studyDBAdaptor.getAllStudiesInProject(projectUid, studyOptions); + List allStudiesInProject = studyResult.getResults(); if (allStudiesInProject.isEmpty()) { throw new CatalogException("Cannot increment current release number. No studies found for release " + currentRelease); } diff --git a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/utils/PedigreeGraphUtils.java b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/utils/PedigreeGraphUtils.java index 62394a6e562..b56966a44e8 100644 --- a/opencga-catalog/src/main/java/org/opencb/opencga/catalog/utils/PedigreeGraphUtils.java +++ b/opencga-catalog/src/main/java/org/opencb/opencga/catalog/utils/PedigreeGraphUtils.java @@ -120,7 +120,7 @@ private static File createPedFile(Family family, Path outDir) throws FileNotFoun StringBuilder sbDisorders = new StringBuilder(); if (CollectionUtils.isNotEmpty(disorders) && disorders.size() > 1) { for (Disorder disorder : family.getDisorders()) { - sbDisorders.append("affected.").append(disorder.getId()).append("\t"); + sbDisorders.append("\"affected.").append(disorder.getId()).append("\"\t"); } } else { sbDisorders.append("affected").append("\t"); diff --git a/opencga-catalog/src/test/java/org/opencb/opencga/catalog/managers/ProjectManagerTest.java b/opencga-catalog/src/test/java/org/opencb/opencga/catalog/managers/ProjectManagerTest.java index 2490163b781..611a3a6204b 100644 --- a/opencga-catalog/src/test/java/org/opencb/opencga/catalog/managers/ProjectManagerTest.java +++ b/opencga-catalog/src/test/java/org/opencb/opencga/catalog/managers/ProjectManagerTest.java @@ -17,6 +17,7 @@ package org.opencb.opencga.catalog.managers; import com.fasterxml.jackson.core.JsonProcessingException; +import org.apache.commons.collections4.CollectionUtils; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -161,6 +162,42 @@ public void searchProjects() throws CatalogException { } + @Test + public void searchProjectsUsingInclude() throws CatalogException { + OpenCGAResult projects = catalogManager.getProjectManager().search(new Query(), + new QueryOptions(QueryOptions.INCLUDE, ProjectDBAdaptor.QueryParams.ID.key()), sessionIdUser); + assertEquals(1, projects.getNumResults()); + for (Project project : projects.getResults()) { + assertNotNull(project.getId()); + assertNull(project.getDescription()); + assertNull(project.getName()); + assertNull(project.getStudies()); + assertTrue(CollectionUtils.isEmpty(project.getStudies())); + } + + projects = catalogManager.getProjectManager().search(new Query(), + new QueryOptions(QueryOptions.INCLUDE, ProjectDBAdaptor.QueryParams.STUDIES.key()), sessionIdUser); + assertEquals(1, projects.getNumResults()); + for (Project project : projects.getResults()) { + assertNull(project.getId()); + assertNull(project.getDescription()); + assertNull(project.getName()); + assertNotNull(project.getStudies()); + assertTrue(CollectionUtils.isNotEmpty(project.getStudies())); + } + + projects = catalogManager.getProjectManager().search(new Query(), + new QueryOptions(QueryOptions.EXCLUDE, ProjectDBAdaptor.QueryParams.NAME.key()), sessionIdUser); + assertEquals(1, projects.getNumResults()); + for (Project project : projects.getResults()) { + assertNotNull(project.getId()); + assertNull(project.getName()); + assertNotNull(project.getDescription()); + assertNotNull(project.getStudies()); + assertFalse(CollectionUtils.isEmpty(project.getStudies())); + } + } + @Test public void getSharedProjects() throws CatalogException { try { diff --git a/opencga-client/pom.xml b/opencga-client/pom.xml index 25c7042ce63..22a563296b0 100644 --- a/opencga-client/pom.xml +++ b/opencga-client/pom.xml @@ -22,7 +22,7 @@ org.opencb.opencga opencga - 2.10.0-SNAPSHOT + 2.11.0-SNAPSHOT ../pom.xml diff --git a/opencga-client/src/main/R/R/Admin-methods.R b/opencga-client/src/main/R/R/Admin-methods.R index 11b7d569372..52e55fc3918 100644 --- a/opencga-client/src/main/R/R/Admin-methods.R +++ b/opencga-client/src/main/R/R/Admin-methods.R @@ -2,7 +2,7 @@ # WARNING: AUTOGENERATED CODE # # This code was generated by a tool. -# Autogenerated on: 2023-04-18 +# Autogenerated on: 2023-09-08 # # Manual changes to this file may cause unexpected behavior in your application. # Manual changes to this file will be overwritten if the code is regenerated. @@ -28,6 +28,7 @@ #' | importUsers | /{apiVersion}/admin/users/import | body[*] | #' | searchUsers | /{apiVersion}/admin/users/search | include, exclude, limit, skip, count, user, account, authenticationId | #' | syncUsers | /{apiVersion}/admin/users/sync | body[*] | +#' | usersUpdateGroups | /{apiVersion}/admin/users/{user}/groups/update | user[*], action, body[*] | #' #' @md #' @seealso \url{http://docs.opencb.org/display/opencga/Using+OpenCGA} and the RESTful API documentation @@ -35,7 +36,7 @@ #' [*]: Required parameter #' @export -setMethod("adminClient", "OpencgaR", function(OpencgaR, endpointName, params=NULL, ...) { +setMethod("adminClient", "OpencgaR", function(OpencgaR, user, endpointName, params=NULL, ...) { switch(endpointName, #' @section Endpoint /{apiVersion}/admin/audit/groupBy: @@ -100,5 +101,13 @@ setMethod("adminClient", "OpencgaR", function(OpencgaR, endpointName, params=NUL #' @param data JSON containing the parameters. syncUsers=fetchOpenCGA(object=OpencgaR, category="admin", categoryId=NULL, subcategory="users", subcategoryId=NULL, action="sync", params=params, httpMethod="POST", as.queryParam=NULL, ...), + + #' @section Endpoint /{apiVersion}/admin/users/{user}/groups/update: + #' Add or remove users from existing groups. + #' @param user User ID. + #' @param action Action to be performed: ADD or REMOVE user to/from groups. Allowed values: ['ADD REMOVE'] + #' @param data JSON containing the parameters. + usersUpdateGroups=fetchOpenCGA(object=OpencgaR, category="admin/users", categoryId=user, subcategory="groups", + subcategoryId=NULL, action="update", params=params, httpMethod="POST", as.queryParam=NULL, ...), ) }) \ No newline at end of file diff --git a/opencga-client/src/main/R/R/Alignment-methods.R b/opencga-client/src/main/R/R/Alignment-methods.R index 00be80c77b7..66dcf64a9a4 100644 --- a/opencga-client/src/main/R/R/Alignment-methods.R +++ b/opencga-client/src/main/R/R/Alignment-methods.R @@ -2,7 +2,7 @@ # WARNING: AUTOGENERATED CODE # # This code was generated by a tool. -# Autogenerated on: 2023-04-18 +# Autogenerated on: 2023-09-08 # # Manual changes to this file may cause unexpected behavior in your application. # Manual changes to this file will be overwritten if the code is regenerated. diff --git a/opencga-client/src/main/R/R/AllGenerics.R b/opencga-client/src/main/R/R/AllGenerics.R index 7c9d2230cf6..2b49e7247d0 100644 --- a/opencga-client/src/main/R/R/AllGenerics.R +++ b/opencga-client/src/main/R/R/AllGenerics.R @@ -1,6 +1,6 @@ # ############################################################################## ## UserClient -setGeneric("userClient", function(OpencgaR, filterId, users, user, endpointName, params=NULL, ...) +setGeneric("userClient", function(OpencgaR, users, user, filterId, endpointName, params=NULL, ...) standardGeneric("userClient")) # ############################################################################## @@ -10,12 +10,12 @@ setGeneric("projectClient", function(OpencgaR, projects, project, endpointName, # ############################################################################## ## StudyClient -setGeneric("studyClient", function(OpencgaR, members, templateId, studies, variableSet, group, study, endpointName, params=NULL, ...) +setGeneric("studyClient", function(OpencgaR, study, group, variableSet, studies, members, templateId, endpointName, params=NULL, ...) standardGeneric("studyClient")) # ############################################################################## ## FileClient -setGeneric("fileClient", function(OpencgaR, folder, file, members, files, annotationSet, endpointName, params=NULL, ...) +setGeneric("fileClient", function(OpencgaR, folder, annotationSet, file, members, files, endpointName, params=NULL, ...) standardGeneric("fileClient")) # ############################################################################## @@ -25,22 +25,22 @@ setGeneric("jobClient", function(OpencgaR, members, jobs, job, endpointName, par # ############################################################################## ## SampleClient -setGeneric("sampleClient", function(OpencgaR, members, sample, samples, annotationSet, endpointName, params=NULL, ...) +setGeneric("sampleClient", function(OpencgaR, samples, members, sample, annotationSet, endpointName, params=NULL, ...) standardGeneric("sampleClient")) # ############################################################################## ## IndividualClient -setGeneric("individualClient", function(OpencgaR, members, individual, annotationSet, individuals, endpointName, params=NULL, ...) +setGeneric("individualClient", function(OpencgaR, individuals, members, individual, annotationSet, endpointName, params=NULL, ...) standardGeneric("individualClient")) # ############################################################################## ## FamilyClient -setGeneric("familyClient", function(OpencgaR, members, families, family, annotationSet, endpointName, params=NULL, ...) +setGeneric("familyClient", function(OpencgaR, family, members, families, annotationSet, endpointName, params=NULL, ...) standardGeneric("familyClient")) # ############################################################################## ## CohortClient -setGeneric("cohortClient", function(OpencgaR, members, cohort, annotationSet, cohorts, endpointName, params=NULL, ...) +setGeneric("cohortClient", function(OpencgaR, annotationSet, members, cohort, cohorts, endpointName, params=NULL, ...) standardGeneric("cohortClient")) # ############################################################################## @@ -60,7 +60,7 @@ setGeneric("variantClient", function(OpencgaR, endpointName, params=NULL, ...) # ############################################################################## ## ClinicalClient -setGeneric("clinicalClient", function(OpencgaR, clinicalAnalysis, members, interpretation, clinicalAnalyses, interpretations, endpointName, params=NULL, ...) +setGeneric("clinicalClient", function(OpencgaR, clinicalAnalyses, interpretation, clinicalAnalysis, interpretations, members, endpointName, params=NULL, ...) standardGeneric("clinicalClient")) # ############################################################################## @@ -75,11 +75,11 @@ setGeneric("metaClient", function(OpencgaR, endpointName, params=NULL, ...) # ############################################################################## ## GA4GHClient -setGeneric("ga4ghClient", function(OpencgaR, file, study, endpointName, params=NULL, ...) +setGeneric("ga4ghClient", function(OpencgaR, study, file, endpointName, params=NULL, ...) standardGeneric("ga4ghClient")) # ############################################################################## ## AdminClient -setGeneric("adminClient", function(OpencgaR, endpointName, params=NULL, ...) +setGeneric("adminClient", function(OpencgaR, user, endpointName, params=NULL, ...) standardGeneric("adminClient")) diff --git a/opencga-client/src/main/R/R/Clinical-methods.R b/opencga-client/src/main/R/R/Clinical-methods.R index c590dab0b25..36200235c2a 100644 --- a/opencga-client/src/main/R/R/Clinical-methods.R +++ b/opencga-client/src/main/R/R/Clinical-methods.R @@ -2,7 +2,7 @@ # WARNING: AUTOGENERATED CODE # # This code was generated by a tool. -# Autogenerated on: 2023-04-18 +# Autogenerated on: 2023-09-08 # # Manual changes to this file may cause unexpected behavior in your application. # Manual changes to this file will be overwritten if the code is regenerated. @@ -58,7 +58,7 @@ #' [*]: Required parameter #' @export -setMethod("clinicalClient", "OpencgaR", function(OpencgaR, clinicalAnalysis, members, interpretation, clinicalAnalyses, interpretations, endpointName, params=NULL, ...) { +setMethod("clinicalClient", "OpencgaR", function(OpencgaR, clinicalAnalyses, interpretation, clinicalAnalysis, interpretations, members, endpointName, params=NULL, ...) { switch(endpointName, #' @section Endpoint /{apiVersion}/analysis/clinical/acl/{members}/update: @@ -94,10 +94,10 @@ setMethod("clinicalClient", "OpencgaR", function(OpencgaR, clinicalAnalysis, mem #' @section Endpoint /{apiVersion}/analysis/clinical/distinct: #' Clinical Analysis distinct method. #' @param study Study [[user@]project:]study where study and project can be either the ID or UUID. - #' @param id Comma separated list of Clinical Analysis IDs up to a maximum of 100. + #' @param id Comma separated list of Clinical Analysis IDs up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. #' @param uuid Comma separated list of Clinical Analysis UUIDs up to a maximum of 100. #' @param type Clinical Analysis type. - #' @param disorder Clinical Analysis disorder. + #' @param disorder Clinical Analysis disorder. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. #' @param files Clinical Analysis files. #' @param sample Sample associated to the proband or any member of a family. #' @param individual Proband or any member of a family. @@ -126,11 +126,11 @@ setMethod("clinicalClient", "OpencgaR", function(OpencgaR, clinicalAnalysis, mem #' @section Endpoint /{apiVersion}/analysis/clinical/interpretation/distinct: #' Interpretation distinct method. #' @param study Study [[user@]project:]study where study and project can be either the ID or UUID. - #' @param id Comma separated list of Interpretation IDs up to a maximum of 100. + #' @param id Comma separated list of Interpretation IDs up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. #' @param uuid Comma separated list of Interpretation UUIDs up to a maximum of 100. #' @param clinicalAnalysisId Clinical Analysis id. #' @param analystId Analyst ID. - #' @param methodName Interpretation method name. + #' @param methodName Interpretation method name. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. #' @param panels Interpretation panels. #' @param primaryFindings Interpretation primary findings. #' @param secondaryFindings Interpretation secondary findings. @@ -152,11 +152,11 @@ setMethod("clinicalClient", "OpencgaR", function(OpencgaR, clinicalAnalysis, mem #' @param skip Number of results to skip. #' @param sort Sort the results. #' @param study Study [[user@]project:]study where study and project can be either the ID or UUID. - #' @param id Comma separated list of Interpretation IDs up to a maximum of 100. + #' @param id Comma separated list of Interpretation IDs up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. #' @param uuid Comma separated list of Interpretation UUIDs up to a maximum of 100. #' @param clinicalAnalysisId Clinical Analysis id. #' @param analystId Analyst ID. - #' @param methodName Interpretation method name. + #' @param methodName Interpretation method name. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. #' @param panels Interpretation panels. #' @param primaryFindings Interpretation primary findings. #' @param secondaryFindings Interpretation secondary findings. @@ -484,10 +484,10 @@ setMethod("clinicalClient", "OpencgaR", function(OpencgaR, clinicalAnalysis, mem #' @param skip Number of results to skip. #' @param count Get the total number of results matching the query. Deactivated by default. #' @param study Study [[user@]project:]study where study and project can be either the ID or UUID. - #' @param id Comma separated list of Clinical Analysis IDs up to a maximum of 100. + #' @param id Comma separated list of Clinical Analysis IDs up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. #' @param uuid Comma separated list of Clinical Analysis UUIDs up to a maximum of 100. #' @param type Clinical Analysis type. - #' @param disorder Clinical Analysis disorder. + #' @param disorder Clinical Analysis disorder. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. #' @param files Clinical Analysis files. #' @param sample Sample associated to the proband or any member of a family. #' @param individual Proband or any member of a family. diff --git a/opencga-client/src/main/R/R/Cohort-methods.R b/opencga-client/src/main/R/R/Cohort-methods.R index 3d1c6034484..3ae1d7734b5 100644 --- a/opencga-client/src/main/R/R/Cohort-methods.R +++ b/opencga-client/src/main/R/R/Cohort-methods.R @@ -2,7 +2,7 @@ # WARNING: AUTOGENERATED CODE # # This code was generated by a tool. -# Autogenerated on: 2023-04-18 +# Autogenerated on: 2023-09-08 # # Manual changes to this file may cause unexpected behavior in your application. # Manual changes to this file will be overwritten if the code is regenerated. @@ -39,7 +39,7 @@ #' [*]: Required parameter #' @export -setMethod("cohortClient", "OpencgaR", function(OpencgaR, members, cohort, annotationSet, cohorts, endpointName, params=NULL, ...) { +setMethod("cohortClient", "OpencgaR", function(OpencgaR, annotationSet, members, cohort, cohorts, endpointName, params=NULL, ...) { switch(endpointName, #' @section Endpoint /{apiVersion}/cohorts/acl/{members}/update: @@ -97,8 +97,8 @@ setMethod("cohortClient", "OpencgaR", function(OpencgaR, members, cohort, annota #' @section Endpoint /{apiVersion}/cohorts/distinct: #' Cohort distinct method. #' @param study Study [[user@]project:]study where study and project can be either the ID or UUID. - #' @param id Comma separated list of cohort IDs up to a maximum of 100. - #' @param name Comma separated list of cohort names up to a maximum of 100. + #' @param id Comma separated list of cohort IDs up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + #' @param name Comma separated list of cohort names up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. #' @param uuid Comma separated list of cohort IDs up to a maximum of 100. #' @param type Cohort type. #' @param creationDate creationDate. @@ -128,7 +128,7 @@ setMethod("cohortClient", "OpencgaR", function(OpencgaR, members, cohort, annota #' @param modificationDate Modification date. Format: yyyyMMddHHmmss. Examples: >2018, 2017-2018, <201805. #' @param internalStatus Filter by internal status. #' @param status Filter by status. - #' @param phenotypes Comma separated list of phenotype ids or names. + #' @param phenotypes Comma separated list of phenotype ids or names. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. #' @param annotation Annotation filters. Example: age>30;gender=FEMALE. For more information, please visit http://docs.opencb.org/display/opencga/AnnotationSets+1.4.0. #' @param acl Filter entries for which a user has the provided permissions. Format: acl={user}:{permissions}. Example: acl=john:WRITE,WRITE_ANNOTATIONS will return all entries for which user john has both WRITE and WRITE_ANNOTATIONS permissions. Only study owners or administrators can query by this field. . #' @param release Release when it was created. @@ -147,8 +147,8 @@ setMethod("cohortClient", "OpencgaR", function(OpencgaR, members, cohort, annota #' @param count Get the total number of results matching the query. Deactivated by default. #' @param flattenAnnotations Flatten the annotations?. #' @param study Study [[user@]project:]study where study and project can be either the ID or UUID. - #' @param id Comma separated list of cohort IDs up to a maximum of 100. - #' @param name Comma separated list of cohort names up to a maximum of 100. + #' @param id Comma separated list of cohort IDs up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + #' @param name Comma separated list of cohort names up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. #' @param uuid Comma separated list of cohort IDs up to a maximum of 100. #' @param type Cohort type. #' @param creationDate creationDate. diff --git a/opencga-client/src/main/R/R/Family-methods.R b/opencga-client/src/main/R/R/Family-methods.R index b4bdd82fbc5..ffeb618a259 100644 --- a/opencga-client/src/main/R/R/Family-methods.R +++ b/opencga-client/src/main/R/R/Family-methods.R @@ -2,7 +2,7 @@ # WARNING: AUTOGENERATED CODE # # This code was generated by a tool. -# Autogenerated on: 2023-04-18 +# Autogenerated on: 2023-09-08 # # Manual changes to this file may cause unexpected behavior in your application. # Manual changes to this file will be overwritten if the code is regenerated. @@ -38,7 +38,7 @@ #' [*]: Required parameter #' @export -setMethod("familyClient", "OpencgaR", function(OpencgaR, members, families, family, annotationSet, endpointName, params=NULL, ...) { +setMethod("familyClient", "OpencgaR", function(OpencgaR, family, members, families, annotationSet, endpointName, params=NULL, ...) { switch(endpointName, #' @section Endpoint /{apiVersion}/families/acl/{members}/update: @@ -98,14 +98,14 @@ setMethod("familyClient", "OpencgaR", function(OpencgaR, members, families, fami #' @section Endpoint /{apiVersion}/families/distinct: #' Family distinct method. #' @param study Study [[user@]project:]study where study and project can be either the ID or UUID. - #' @param id Comma separated list family IDs up to a maximum of 100. - #' @param name Comma separated list family names up to a maximum of 100. + #' @param id Comma separated list family IDs up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + #' @param name Comma separated list family names up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. #' @param uuid Comma separated list family UUIDs up to a maximum of 100. #' @param members Comma separated list of family members. #' @param expectedSize Expected size of the family (number of members). #' @param samples Comma separated list of member's samples. - #' @param phenotypes Comma separated list of phenotype ids or names. - #' @param disorders Comma separated list of disorder ids or names. + #' @param phenotypes Comma separated list of phenotype ids or names. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + #' @param disorders Comma separated list of disorder ids or names. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. #' @param creationDate Creation date. Format: yyyyMMddHHmmss. Examples: >2018, 2017-2018, <201805. #' @param modificationDate Modification date. Format: yyyyMMddHHmmss. Examples: >2018, 2017-2018, <201805. #' @param deleted Boolean to retrieve deleted entries. @@ -128,14 +128,14 @@ setMethod("familyClient", "OpencgaR", function(OpencgaR, members, families, fami #' @param count Get the total number of results matching the query. Deactivated by default. #' @param flattenAnnotations Flatten the annotations?. #' @param study Study [[user@]project:]study where study and project can be either the ID or UUID. - #' @param id Comma separated list family IDs up to a maximum of 100. - #' @param name Comma separated list family names up to a maximum of 100. + #' @param id Comma separated list family IDs up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + #' @param name Comma separated list family names up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. #' @param uuid Comma separated list family UUIDs up to a maximum of 100. #' @param members Comma separated list of family members. #' @param expectedSize Expected size of the family (number of members). #' @param samples Comma separated list of member's samples. - #' @param phenotypes Comma separated list of phenotype ids or names. - #' @param disorders Comma separated list of disorder ids or names. + #' @param phenotypes Comma separated list of phenotype ids or names. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + #' @param disorders Comma separated list of disorder ids or names. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. #' @param creationDate Creation date. Format: yyyyMMddHHmmss. Examples: >2018, 2017-2018, <201805. #' @param modificationDate Modification date. Format: yyyyMMddHHmmss. Examples: >2018, 2017-2018, <201805. #' @param deleted Boolean to retrieve deleted entries. diff --git a/opencga-client/src/main/R/R/File-methods.R b/opencga-client/src/main/R/R/File-methods.R index d97412f4788..5db25da7799 100644 --- a/opencga-client/src/main/R/R/File-methods.R +++ b/opencga-client/src/main/R/R/File-methods.R @@ -2,7 +2,7 @@ # WARNING: AUTOGENERATED CODE # # This code was generated by a tool. -# Autogenerated on: 2023-04-18 +# Autogenerated on: 2023-09-08 # # Manual changes to this file may cause unexpected behavior in your application. # Manual changes to this file will be overwritten if the code is regenerated. @@ -54,7 +54,7 @@ #' [*]: Required parameter #' @export -setMethod("fileClient", "OpencgaR", function(OpencgaR, folder, file, members, files, annotationSet, endpointName, params=NULL, ...) { +setMethod("fileClient", "OpencgaR", function(OpencgaR, folder, annotationSet, file, members, files, endpointName, params=NULL, ...) { switch(endpointName, #' @section Endpoint /{apiVersion}/files/acl/{members}/update: @@ -122,11 +122,11 @@ setMethod("fileClient", "OpencgaR", function(OpencgaR, folder, file, members, fi #' @section Endpoint /{apiVersion}/files/distinct: #' File distinct method. #' @param study Study [[user@]project:]study where study and project can be either the ID or UUID. - #' @param id Comma separated list of file IDs up to a maximum of 100. + #' @param id Comma separated list of file IDs up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. #' @param uuid Comma separated list file UUIDs up to a maximum of 100. - #' @param name Comma separated list of file names. - #' @param path Comma separated list of paths. - #' @param uri Comma separated list of uris. + #' @param name Comma separated list of file names. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + #' @param path Comma separated list of paths. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + #' @param uri Comma separated list of uris. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. #' @param type File type, either FILE or DIRECTORY. #' @param bioformat Comma separated Bioformat values. For existing Bioformats see files/bioformats. #' @param format Comma separated Format values. For existing Formats see files/formats. @@ -139,7 +139,7 @@ setMethod("fileClient", "OpencgaR", function(OpencgaR, folder, file, members, fi #' @param creationDate Creation date. Format: yyyyMMddHHmmss. Examples: >2018, 2017-2018, <201805. #' @param modificationDate Modification date. Format: yyyyMMddHHmmss. Examples: >2018, 2017-2018, <201805. #' @param description Description. - #' @param tags Tags. + #' @param tags Tags. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. #' @param size File size. #' @param sampleIds Comma separated list sample IDs or UUIDs up to a maximum of 100. #' @param jobId Job ID that created the file(s) or folder(s). @@ -207,11 +207,11 @@ setMethod("fileClient", "OpencgaR", function(OpencgaR, folder, file, members, fi #' @param count Get the total number of results matching the query. Deactivated by default. #' @param flattenAnnotations Boolean indicating to flatten the annotations. #' @param study Study [[user@]project:]study where study and project can be either the ID or UUID. - #' @param id Comma separated list of file IDs up to a maximum of 100. + #' @param id Comma separated list of file IDs up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. #' @param uuid Comma separated list file UUIDs up to a maximum of 100. - #' @param name Comma separated list of file names. - #' @param path Comma separated list of paths. - #' @param uri Comma separated list of uris. + #' @param name Comma separated list of file names. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + #' @param path Comma separated list of paths. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + #' @param uri Comma separated list of uris. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. #' @param type File type, either FILE or DIRECTORY. #' @param bioformat Comma separated Bioformat values. For existing Bioformats see files/bioformats. #' @param format Comma separated Format values. For existing Formats see files/formats. @@ -224,7 +224,7 @@ setMethod("fileClient", "OpencgaR", function(OpencgaR, folder, file, members, fi #' @param creationDate Creation date. Format: yyyyMMddHHmmss. Examples: >2018, 2017-2018, <201805. #' @param modificationDate Modification date. Format: yyyyMMddHHmmss. Examples: >2018, 2017-2018, <201805. #' @param description Description. - #' @param tags Tags. + #' @param tags Tags. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. #' @param size File size. #' @param sampleIds Comma separated list sample IDs or UUIDs up to a maximum of 100. #' @param jobId Job ID that created the file(s) or folder(s). diff --git a/opencga-client/src/main/R/R/GA4GH-methods.R b/opencga-client/src/main/R/R/GA4GH-methods.R index defcc45b18f..8aae23ad4a6 100644 --- a/opencga-client/src/main/R/R/GA4GH-methods.R +++ b/opencga-client/src/main/R/R/GA4GH-methods.R @@ -2,7 +2,7 @@ # WARNING: AUTOGENERATED CODE # # This code was generated by a tool. -# Autogenerated on: 2023-04-18 +# Autogenerated on: 2023-09-08 # # Manual changes to this file may cause unexpected behavior in your application. # Manual changes to this file will be overwritten if the code is regenerated. @@ -31,7 +31,7 @@ #' [*]: Required parameter #' @export -setMethod("ga4ghClient", "OpencgaR", function(OpencgaR, file, study, endpointName, params=NULL, ...) { +setMethod("ga4ghClient", "OpencgaR", function(OpencgaR, study, file, endpointName, params=NULL, ...) { switch(endpointName, #' @section Endpoint /{apiVersion}/ga4gh/reads/search: diff --git a/opencga-client/src/main/R/R/Individual-methods.R b/opencga-client/src/main/R/R/Individual-methods.R index 1ded4cea574..35b01f1ce71 100644 --- a/opencga-client/src/main/R/R/Individual-methods.R +++ b/opencga-client/src/main/R/R/Individual-methods.R @@ -2,7 +2,7 @@ # WARNING: AUTOGENERATED CODE # # This code was generated by a tool. -# Autogenerated on: 2023-04-18 +# Autogenerated on: 2023-09-08 # # Manual changes to this file may cause unexpected behavior in your application. # Manual changes to this file will be overwritten if the code is regenerated. @@ -39,7 +39,7 @@ #' [*]: Required parameter #' @export -setMethod("individualClient", "OpencgaR", function(OpencgaR, members, individual, annotationSet, individuals, endpointName, params=NULL, ...) { +setMethod("individualClient", "OpencgaR", function(OpencgaR, individuals, members, individual, annotationSet, endpointName, params=NULL, ...) { switch(endpointName, #' @section Endpoint /{apiVersion}/individuals/acl/{members}/update: @@ -106,20 +106,20 @@ setMethod("individualClient", "OpencgaR", function(OpencgaR, members, individual #' @section Endpoint /{apiVersion}/individuals/distinct: #' Individual distinct method. #' @param study Study [[user@]project:]study where study and project can be either the ID or UUID. - #' @param id Comma separated list individual IDs up to a maximum of 100. + #' @param id Comma separated list individual IDs up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. #' @param uuid Comma separated list individual UUIDs up to a maximum of 100. - #' @param name Comma separated list individual names up to a maximum of 100. + #' @param name Comma separated list individual names up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. #' @param familyIds Comma separated list of family ids the individuals may belong to. #' @param father Father ID, name or UUID. #' @param mother Mother ID, name or UUID. #' @param samples Sample ID, name or UUID. #' @param sex Individual sex. - #' @param ethnicity Individual ethnicity. + #' @param ethnicity Individual ethnicity. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. #' @param dateOfBirth Individual date of birth. - #' @param disorders Comma separated list of disorder ids or names. - #' @param phenotypes Comma separated list of phenotype ids or names. - #' @param populationName Population name. - #' @param populationSubpopulation Subpopulation name. + #' @param disorders Comma separated list of disorder ids or names. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + #' @param phenotypes Comma separated list of phenotype ids or names. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + #' @param populationName Population name. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + #' @param populationSubpopulation Subpopulation name. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. #' @param karyotypicSex Individual karyotypic sex. #' @param lifeStatus Individual life status. #' @param internalStatus Filter by internal status. @@ -144,20 +144,20 @@ setMethod("individualClient", "OpencgaR", function(OpencgaR, members, individual #' @param count Get the total number of results matching the query. Deactivated by default. #' @param flattenAnnotations Flatten the annotations?. #' @param study Study [[user@]project:]study where study and project can be either the ID or UUID. - #' @param id Comma separated list individual IDs up to a maximum of 100. + #' @param id Comma separated list individual IDs up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. #' @param uuid Comma separated list individual UUIDs up to a maximum of 100. - #' @param name Comma separated list individual names up to a maximum of 100. + #' @param name Comma separated list individual names up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. #' @param father Father ID, name or UUID. #' @param mother Mother ID, name or UUID. #' @param samples Sample ID, name or UUID. #' @param familyIds Comma separated list of family ids the individuals may belong to. #' @param sex Individual sex. #' @param dateOfBirth Individual date of birth. - #' @param ethnicity Individual ethnicity. - #' @param disorders Comma separated list of disorder ids or names. - #' @param phenotypes Comma separated list of phenotype ids or names. - #' @param populationName Population name. - #' @param populationSubpopulation Subpopulation name. + #' @param ethnicity Individual ethnicity. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + #' @param disorders Comma separated list of disorder ids or names. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + #' @param phenotypes Comma separated list of phenotype ids or names. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + #' @param populationName Population name. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + #' @param populationSubpopulation Subpopulation name. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. #' @param karyotypicSex Individual karyotypic sex. #' @param lifeStatus Individual life status. #' @param internalStatus Filter by internal status. diff --git a/opencga-client/src/main/R/R/Job-methods.R b/opencga-client/src/main/R/R/Job-methods.R index 9a6319a293c..d61eb46c702 100644 --- a/opencga-client/src/main/R/R/Job-methods.R +++ b/opencga-client/src/main/R/R/Job-methods.R @@ -2,7 +2,7 @@ # WARNING: AUTOGENERATED CODE # # This code was generated by a tool. -# Autogenerated on: 2023-04-18 +# Autogenerated on: 2023-09-08 # # Manual changes to this file may cause unexpected behavior in your application. # Manual changes to this file will be overwritten if the code is regenerated. @@ -87,9 +87,9 @@ setMethod("jobClient", "OpencgaR", function(OpencgaR, members, jobs, job, endpoi #' Job distinct method. #' @param study Study [[user@]project:]study where study and project can be either the ID or UUID. #' @param otherStudies Flag indicating the entries being queried can belong to any related study, not just the primary one. - #' @param id Comma separated list of job IDs up to a maximum of 100. + #' @param id Comma separated list of job IDs up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. #' @param uuid Comma separated list of job UUIDs up to a maximum of 100. - #' @param toolId Tool ID executed by the job. + #' @param toolId Tool ID executed by the job. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. #' @param toolType Tool type executed by the job [OPERATION, ANALYSIS]. #' @param userId User that created the job. #' @param priority Priority of the job. @@ -128,9 +128,9 @@ setMethod("jobClient", "OpencgaR", function(OpencgaR, members, jobs, job, endpoi #' @param count Get the total number of results matching the query. Deactivated by default. #' @param study Study [[user@]project:]study where study and project can be either the ID or UUID. #' @param otherStudies Flag indicating the entries being queried can belong to any related study, not just the primary one. - #' @param id Comma separated list of job IDs up to a maximum of 100. + #' @param id Comma separated list of job IDs up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. #' @param uuid Comma separated list of job UUIDs up to a maximum of 100. - #' @param toolId Tool ID executed by the job. + #' @param toolId Tool ID executed by the job. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. #' @param toolType Tool type executed by the job [OPERATION, ANALYSIS]. #' @param userId User that created the job. #' @param priority Priority of the job. @@ -155,7 +155,7 @@ setMethod("jobClient", "OpencgaR", function(OpencgaR, members, jobs, job, endpoi #' @param internalStatus Filter by internal status. #' @param priority Priority of the job. #' @param userId User that created the job. - #' @param toolId Tool ID executed by the job. + #' @param toolId Tool ID executed by the job. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. top=fetchOpenCGA(object=OpencgaR, category="jobs", categoryId=NULL, subcategory=NULL, subcategoryId=NULL, action="top", params=params, httpMethod="GET", as.queryParam=NULL, ...), diff --git a/opencga-client/src/main/R/R/Meta-methods.R b/opencga-client/src/main/R/R/Meta-methods.R index cfd47fb4f17..100a6e11e6f 100644 --- a/opencga-client/src/main/R/R/Meta-methods.R +++ b/opencga-client/src/main/R/R/Meta-methods.R @@ -2,7 +2,7 @@ # WARNING: AUTOGENERATED CODE # # This code was generated by a tool. -# Autogenerated on: 2023-04-18 +# Autogenerated on: 2023-09-08 # # Manual changes to this file may cause unexpected behavior in your application. # Manual changes to this file will be overwritten if the code is regenerated. diff --git a/opencga-client/src/main/R/R/Operation-methods.R b/opencga-client/src/main/R/R/Operation-methods.R index 8869d0ff5a3..73e41e1eefe 100644 --- a/opencga-client/src/main/R/R/Operation-methods.R +++ b/opencga-client/src/main/R/R/Operation-methods.R @@ -2,7 +2,7 @@ # WARNING: AUTOGENERATED CODE # # This code was generated by a tool. -# Autogenerated on: 2023-04-18 +# Autogenerated on: 2023-09-08 # # Manual changes to this file may cause unexpected behavior in your application. # Manual changes to this file will be overwritten if the code is regenerated. diff --git a/opencga-client/src/main/R/R/Panel-methods.R b/opencga-client/src/main/R/R/Panel-methods.R index ea88beb1bfa..bf61ce54f10 100644 --- a/opencga-client/src/main/R/R/Panel-methods.R +++ b/opencga-client/src/main/R/R/Panel-methods.R @@ -2,7 +2,7 @@ # WARNING: AUTOGENERATED CODE # # This code was generated by a tool. -# Autogenerated on: 2023-04-18 +# Autogenerated on: 2023-09-08 # # Manual changes to this file may cause unexpected behavior in your application. # Manual changes to this file will be overwritten if the code is regenerated. @@ -62,17 +62,17 @@ setMethod("panelClient", "OpencgaR", function(OpencgaR, members, panels, endpoin #' @section Endpoint /{apiVersion}/panels/distinct: #' Panel distinct method. #' @param study Study [[user@]project:]study where study and project can be either the ID or UUID. - #' @param id Comma separated list of panel IDs up to a maximum of 100. + #' @param id Comma separated list of panel IDs up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. #' @param uuid Comma separated list of panel UUIDs up to a maximum of 100. - #' @param name Comma separated list of panel names up to a maximum of 100. + #' @param name Comma separated list of panel names up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. #' @param internalStatus Filter by internal status. - #' @param disorders Comma separated list of disorder ids or names. - #' @param variants Comma separated list of variant ids. - #' @param genes Comma separated list of gene ids. + #' @param disorders Comma separated list of disorder ids or names. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + #' @param variants Comma separated list of variant ids. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + #' @param genes Comma separated list of gene ids. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. #' @param source Comma separated list of source ids or names. - #' @param regions Comma separated list of regions. - #' @param categories Comma separated list of category names. - #' @param tags Panel tags. + #' @param regions Comma separated list of regions. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + #' @param categories Comma separated list of category names. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + #' @param tags Panel tags. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. #' @param deleted Boolean to retrieve deleted entries. #' @param status Filter by status. #' @param creationDate Creation date. Format: yyyyMMddHHmmss. Examples: >2018, 2017-2018, <201805. @@ -103,17 +103,17 @@ setMethod("panelClient", "OpencgaR", function(OpencgaR, members, panels, endpoin #' @param skip Number of results to skip. #' @param count Get the total number of results matching the query. Deactivated by default. #' @param study Study [[user@]project:]study where study and project can be either the ID or UUID. - #' @param id Comma separated list of panel IDs up to a maximum of 100. + #' @param id Comma separated list of panel IDs up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. #' @param uuid Comma separated list of panel UUIDs up to a maximum of 100. - #' @param name Comma separated list of panel names up to a maximum of 100. + #' @param name Comma separated list of panel names up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. #' @param internalStatus Filter by internal status. - #' @param disorders Comma separated list of disorder ids or names. - #' @param variants Comma separated list of variant ids. - #' @param genes Comma separated list of gene ids. + #' @param disorders Comma separated list of disorder ids or names. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + #' @param variants Comma separated list of variant ids. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + #' @param genes Comma separated list of gene ids. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. #' @param source Comma separated list of source ids or names. - #' @param regions Comma separated list of regions. - #' @param categories Comma separated list of category names. - #' @param tags Panel tags. + #' @param regions Comma separated list of regions. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + #' @param categories Comma separated list of category names. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + #' @param tags Panel tags. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. #' @param deleted Boolean to retrieve deleted entries. #' @param status Filter by status. #' @param creationDate Creation date. Format: yyyyMMddHHmmss. Examples: >2018, 2017-2018, <201805. diff --git a/opencga-client/src/main/R/R/Project-methods.R b/opencga-client/src/main/R/R/Project-methods.R index 88420d4beb6..3911d6f5f9a 100644 --- a/opencga-client/src/main/R/R/Project-methods.R +++ b/opencga-client/src/main/R/R/Project-methods.R @@ -2,7 +2,7 @@ # WARNING: AUTOGENERATED CODE # # This code was generated by a tool. -# Autogenerated on: 2023-04-18 +# Autogenerated on: 2023-09-08 # # Manual changes to this file may cause unexpected behavior in your application. # Manual changes to this file will be overwritten if the code is regenerated. diff --git a/opencga-client/src/main/R/R/Sample-methods.R b/opencga-client/src/main/R/R/Sample-methods.R index fa8bc1e707a..44d4e5e58bb 100644 --- a/opencga-client/src/main/R/R/Sample-methods.R +++ b/opencga-client/src/main/R/R/Sample-methods.R @@ -2,7 +2,7 @@ # WARNING: AUTOGENERATED CODE # # This code was generated by a tool. -# Autogenerated on: 2023-04-18 +# Autogenerated on: 2023-09-08 # # Manual changes to this file may cause unexpected behavior in your application. # Manual changes to this file will be overwritten if the code is regenerated. @@ -39,7 +39,7 @@ #' [*]: Required parameter #' @export -setMethod("sampleClient", "OpencgaR", function(OpencgaR, members, sample, samples, annotationSet, endpointName, params=NULL, ...) { +setMethod("sampleClient", "OpencgaR", function(OpencgaR, samples, members, sample, annotationSet, endpointName, params=NULL, ...) { switch(endpointName, #' @section Endpoint /{apiVersion}/samples/acl/{members}/update: @@ -98,7 +98,7 @@ setMethod("sampleClient", "OpencgaR", function(OpencgaR, members, sample, sample #' @section Endpoint /{apiVersion}/samples/distinct: #' Sample distinct method. #' @param study Study [[user@]project:]study where study and project can be either the ID or UUID. - #' @param id Comma separated list sample IDs up to a maximum of 100. + #' @param id Comma separated list sample IDs up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. #' @param uuid Comma separated list sample UUIDs up to a maximum of 100. #' @param somatic Somatic sample. #' @param individualId Individual ID or UUID. @@ -115,7 +115,7 @@ setMethod("sampleClient", "OpencgaR", function(OpencgaR, members, sample, sample #' @param collectionFrom Collection from. #' @param collectionType Collection type. #' @param collectionMethod Collection method. - #' @param phenotypes Comma separated list of phenotype ids or names. + #' @param phenotypes Comma separated list of phenotype ids or names. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. #' @param annotation Annotation filters. Example: age>30;gender=FEMALE. For more information, please visit http://docs.opencb.org/display/opencga/AnnotationSets+1.4.0. #' @param acl Filter entries for which a user has the provided permissions. Format: acl={user}:{permissions}. Example: acl=john:WRITE,WRITE_ANNOTATIONS will return all entries for which user john has both WRITE and WRITE_ANNOTATIONS permissions. Only study owners or administrators can query by this field. . #' @param internalRgaStatus Index status of the sample for the Recessive Gene Analysis. Allowed values: ['NOT_INDEXED INDEXED INVALID_PERMISSIONS INVALID_METADATA INVALID'] @@ -157,7 +157,7 @@ setMethod("sampleClient", "OpencgaR", function(OpencgaR, members, sample, sample #' @param includeIndividual Include Individual object as an attribute. #' @param flattenAnnotations Flatten the annotations?. #' @param study Study [[user@]project:]study where study and project can be either the ID or UUID. - #' @param id Comma separated list sample IDs up to a maximum of 100. + #' @param id Comma separated list sample IDs up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. #' @param uuid Comma separated list sample UUIDs up to a maximum of 100. #' @param somatic Somatic sample. #' @param individualId Individual ID or UUID. @@ -174,7 +174,7 @@ setMethod("sampleClient", "OpencgaR", function(OpencgaR, members, sample, sample #' @param collectionFrom Collection from. #' @param collectionType Collection type. #' @param collectionMethod Collection method. - #' @param phenotypes Comma separated list of phenotype ids or names. + #' @param phenotypes Comma separated list of phenotype ids or names. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. #' @param annotation Annotation filters. Example: age>30;gender=FEMALE. For more information, please visit http://docs.opencb.org/display/opencga/AnnotationSets+1.4.0. #' @param acl Filter entries for which a user has the provided permissions. Format: acl={user}:{permissions}. Example: acl=john:WRITE,WRITE_ANNOTATIONS will return all entries for which user john has both WRITE and WRITE_ANNOTATIONS permissions. Only study owners or administrators can query by this field. . #' @param internalRgaStatus Index status of the sample for the Recessive Gene Analysis. Allowed values: ['NOT_INDEXED INDEXED INVALID_PERMISSIONS INVALID_METADATA INVALID'] diff --git a/opencga-client/src/main/R/R/Study-methods.R b/opencga-client/src/main/R/R/Study-methods.R index 425059d2d03..ab51f6a4a8d 100644 --- a/opencga-client/src/main/R/R/Study-methods.R +++ b/opencga-client/src/main/R/R/Study-methods.R @@ -2,7 +2,7 @@ # WARNING: AUTOGENERATED CODE # # This code was generated by a tool. -# Autogenerated on: 2023-04-18 +# Autogenerated on: 2023-09-08 # # Manual changes to this file may cause unexpected behavior in your application. # Manual changes to this file will be overwritten if the code is regenerated. @@ -46,7 +46,7 @@ #' [*]: Required parameter #' @export -setMethod("studyClient", "OpencgaR", function(OpencgaR, members, templateId, studies, variableSet, group, study, endpointName, params=NULL, ...) { +setMethod("studyClient", "OpencgaR", function(OpencgaR, study, group, variableSet, studies, members, templateId, endpointName, params=NULL, ...) { switch(endpointName, #' @section Endpoint /{apiVersion}/studies/acl/{members}/update: diff --git a/opencga-client/src/main/R/R/User-methods.R b/opencga-client/src/main/R/R/User-methods.R index 9faadad0488..671c70ca6c9 100644 --- a/opencga-client/src/main/R/R/User-methods.R +++ b/opencga-client/src/main/R/R/User-methods.R @@ -2,7 +2,7 @@ # WARNING: AUTOGENERATED CODE # # This code was generated by a tool. -# Autogenerated on: 2023-04-18 +# Autogenerated on: 2023-09-08 # # Manual changes to this file may cause unexpected behavior in your application. # Manual changes to this file will be overwritten if the code is regenerated. @@ -38,7 +38,7 @@ #' [*]: Required parameter #' @export -setMethod("userClient", "OpencgaR", function(OpencgaR, filterId, users, user, endpointName, params=NULL, ...) { +setMethod("userClient", "OpencgaR", function(OpencgaR, users, user, filterId, endpointName, params=NULL, ...) { switch(endpointName, #' @section Endpoint /{apiVersion}/users/login: diff --git a/opencga-client/src/main/R/R/Variant-methods.R b/opencga-client/src/main/R/R/Variant-methods.R index e9e2f67edeb..911cd8ecc94 100644 --- a/opencga-client/src/main/R/R/Variant-methods.R +++ b/opencga-client/src/main/R/R/Variant-methods.R @@ -2,7 +2,7 @@ # WARNING: AUTOGENERATED CODE # # This code was generated by a tool. -# Autogenerated on: 2023-04-18 +# Autogenerated on: 2023-09-08 # # Manual changes to this file may cause unexpected behavior in your application. # Manual changes to this file will be overwritten if the code is regenerated. diff --git a/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/AdminClient.java b/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/AdminClient.java index 4baf9a8229e..b4b8cc001d6 100644 --- a/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/AdminClient.java +++ b/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/AdminClient.java @@ -25,6 +25,7 @@ import org.opencb.opencga.core.models.admin.JWTParams; import org.opencb.opencga.core.models.admin.UserCreateParams; import org.opencb.opencga.core.models.admin.UserImportParams; +import org.opencb.opencga.core.models.admin.UserUpdateGroup; import org.opencb.opencga.core.models.sample.Sample; import org.opencb.opencga.core.models.study.Group; import org.opencb.opencga.core.models.user.User; @@ -35,7 +36,7 @@ * WARNING: AUTOGENERATED CODE * * This code was generated by a tool. -* Autogenerated on: 2023-04-18 +* Autogenerated on: 2023-09-08 * * Manual changes to this file may cause unexpected behavior in your application. * Manual changes to this file will be overwritten if the code is regenerated. @@ -44,7 +45,7 @@ /** * This class contains methods for the Admin webservices. - * Client version: 2.8.0-SNAPSHOT + * Client version: 2.11.0-SNAPSHOT * PATH: admin */ public class AdminClient extends AbstractParentClient { @@ -165,4 +166,19 @@ public RestResponse syncUsers(GroupSyncParams data) throws ClientExceptio params.put("body", data); return execute("admin", null, "users", null, "sync", params, POST, Group.class); } + + /** + * Add or remove users from existing groups. + * @param user User ID. + * @param data JSON containing the parameters. + * @param params Map containing any of the following optional parameters. + * action: Action to be performed: ADD or REMOVE user to/from groups. + * @return a RestResponse object. + * @throws ClientException ClientException if there is any server error. + */ + public RestResponse usersUpdateGroups(String user, UserUpdateGroup data, ObjectMap params) throws ClientException { + params = params != null ? params : new ObjectMap(); + params.put("body", data); + return execute("admin/users", user, "groups", null, "update", params, POST, Group.class); + } } diff --git a/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/AlignmentClient.java b/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/AlignmentClient.java index c153146ca4e..ae7aef83174 100644 --- a/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/AlignmentClient.java +++ b/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/AlignmentClient.java @@ -40,7 +40,7 @@ * WARNING: AUTOGENERATED CODE * * This code was generated by a tool. -* Autogenerated on: 2023-04-18 +* Autogenerated on: 2023-09-08 * * Manual changes to this file may cause unexpected behavior in your application. * Manual changes to this file will be overwritten if the code is regenerated. @@ -49,7 +49,7 @@ /** * This class contains methods for the Alignment webservices. - * Client version: 2.8.0-SNAPSHOT + * Client version: 2.11.0-SNAPSHOT * PATH: analysis/alignment */ public class AlignmentClient extends AbstractParentClient { diff --git a/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/ClinicalAnalysisClient.java b/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/ClinicalAnalysisClient.java index 9da4bc7e24c..912ef505958 100644 --- a/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/ClinicalAnalysisClient.java +++ b/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/ClinicalAnalysisClient.java @@ -51,7 +51,7 @@ * WARNING: AUTOGENERATED CODE * * This code was generated by a tool. -* Autogenerated on: 2023-04-18 +* Autogenerated on: 2023-09-08 * * Manual changes to this file may cause unexpected behavior in your application. * Manual changes to this file will be overwritten if the code is regenerated. @@ -60,7 +60,7 @@ /** * This class contains methods for the ClinicalAnalysis webservices. - * Client version: 2.8.0-SNAPSHOT + * Client version: 2.11.0-SNAPSHOT * PATH: analysis/clinical */ public class ClinicalAnalysisClient extends AbstractParentClient { @@ -127,10 +127,12 @@ public RestResponse create(ClinicalAnalysisCreateParams data, * @param field Comma separated list of fields for which to obtain the distinct values. * @param params Map containing any of the following optional parameters. * study: Study [[user@]project:]study where study and project can be either the ID or UUID. - * id: Comma separated list of Clinical Analysis IDs up to a maximum of 100. + * id: Comma separated list of Clinical Analysis IDs up to a maximum of 100. Also admits basic regular expressions using the + * operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * uuid: Comma separated list of Clinical Analysis UUIDs up to a maximum of 100. * type: Clinical Analysis type. - * disorder: Clinical Analysis disorder. + * disorder: Clinical Analysis disorder. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. + * '~value' for case sensitive, '~/value/i' for case insensitive search. * files: Clinical Analysis files. * sample: Sample associated to the proband or any member of a family. * individual: Proband or any member of a family. @@ -166,11 +168,13 @@ public RestResponse distinct(String field, ObjectMap params) throws C * @param field Comma separated list of fields for which to obtain the distinct values. * @param params Map containing any of the following optional parameters. * study: Study [[user@]project:]study where study and project can be either the ID or UUID. - * id: Comma separated list of Interpretation IDs up to a maximum of 100. + * id: Comma separated list of Interpretation IDs up to a maximum of 100. Also admits basic regular expressions using the + * operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * uuid: Comma separated list of Interpretation UUIDs up to a maximum of 100. * clinicalAnalysisId: Clinical Analysis id. * analystId: Analyst ID. - * methodName: Interpretation method name. + * methodName: Interpretation method name. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' + * e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * panels: Interpretation panels. * primaryFindings: Interpretation primary findings. * secondaryFindings: Interpretation secondary findings. @@ -197,11 +201,13 @@ public RestResponse distinctInterpretation(String field, ObjectMap pa * skip: Number of results to skip. * sort: Sort the results. * study: Study [[user@]project:]study where study and project can be either the ID or UUID. - * id: Comma separated list of Interpretation IDs up to a maximum of 100. + * id: Comma separated list of Interpretation IDs up to a maximum of 100. Also admits basic regular expressions using the + * operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * uuid: Comma separated list of Interpretation UUIDs up to a maximum of 100. * clinicalAnalysisId: Clinical Analysis id. * analystId: Analyst ID. - * methodName: Interpretation method name. + * methodName: Interpretation method name. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' + * e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * panels: Interpretation panels. * primaryFindings: Interpretation primary findings. * secondaryFindings: Interpretation secondary findings. @@ -614,10 +620,12 @@ public RestResponse summaryRgaVariant(ObjectMap params * skip: Number of results to skip. * count: Get the total number of results matching the query. Deactivated by default. * study: Study [[user@]project:]study where study and project can be either the ID or UUID. - * id: Comma separated list of Clinical Analysis IDs up to a maximum of 100. + * id: Comma separated list of Clinical Analysis IDs up to a maximum of 100. Also admits basic regular expressions using the + * operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * uuid: Comma separated list of Clinical Analysis UUIDs up to a maximum of 100. * type: Clinical Analysis type. - * disorder: Clinical Analysis disorder. + * disorder: Clinical Analysis disorder. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. + * '~value' for case sensitive, '~/value/i' for case insensitive search. * files: Clinical Analysis files. * sample: Sample associated to the proband or any member of a family. * individual: Proband or any member of a family. diff --git a/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/CohortClient.java b/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/CohortClient.java index 11bfc04c972..88cc7b62b23 100644 --- a/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/CohortClient.java +++ b/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/CohortClient.java @@ -37,7 +37,7 @@ * WARNING: AUTOGENERATED CODE * * This code was generated by a tool. -* Autogenerated on: 2023-04-18 +* Autogenerated on: 2023-09-08 * * Manual changes to this file may cause unexpected behavior in your application. * Manual changes to this file will be overwritten if the code is regenerated. @@ -46,7 +46,7 @@ /** * This class contains methods for the Cohort webservices. - * Client version: 2.8.0-SNAPSHOT + * Client version: 2.11.0-SNAPSHOT * PATH: cohorts */ public class CohortClient extends AbstractParentClient { @@ -144,8 +144,10 @@ public RestResponse create(CohortCreateParams data, ObjectMap params) th * @param field Comma separated list of fields for which to obtain the distinct values. * @param params Map containing any of the following optional parameters. * study: Study [[user@]project:]study where study and project can be either the ID or UUID. - * id: Comma separated list of cohort IDs up to a maximum of 100. - * name: Comma separated list of cohort names up to a maximum of 100. + * id: Comma separated list of cohort IDs up to a maximum of 100. Also admits basic regular expressions using the operator '~', + * i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + * name: Comma separated list of cohort names up to a maximum of 100. Also admits basic regular expressions using the operator + * '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * uuid: Comma separated list of cohort IDs up to a maximum of 100. * type: Cohort type. * creationDate: creationDate. @@ -182,7 +184,8 @@ public RestResponse distinct(String field, ObjectMap params) throws Clie * modificationDate: Modification date. Format: yyyyMMddHHmmss. Examples: >2018, 2017-2018, <201805. * internalStatus: Filter by internal status. * status: Filter by status. - * phenotypes: Comma separated list of phenotype ids or names. + * phenotypes: Comma separated list of phenotype ids or names. Also admits basic regular expressions using the operator '~', i.e. + * '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * annotation: Annotation filters. Example: age>30;gender=FEMALE. For more information, please visit * http://docs.opencb.org/display/opencga/AnnotationSets+1.4.0. * acl: Filter entries for which a user has the provided permissions. Format: acl={user}:{permissions}. Example: @@ -210,8 +213,10 @@ public RestResponse generate(CohortGenerateParams data, ObjectMap params * count: Get the total number of results matching the query. Deactivated by default. * flattenAnnotations: Flatten the annotations?. * study: Study [[user@]project:]study where study and project can be either the ID or UUID. - * id: Comma separated list of cohort IDs up to a maximum of 100. - * name: Comma separated list of cohort names up to a maximum of 100. + * id: Comma separated list of cohort IDs up to a maximum of 100. Also admits basic regular expressions using the operator '~', + * i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + * name: Comma separated list of cohort names up to a maximum of 100. Also admits basic regular expressions using the operator + * '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * uuid: Comma separated list of cohort IDs up to a maximum of 100. * type: Cohort type. * creationDate: creationDate. diff --git a/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/DiseasePanelClient.java b/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/DiseasePanelClient.java index fc47e555d99..61f2af635da 100644 --- a/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/DiseasePanelClient.java +++ b/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/DiseasePanelClient.java @@ -35,7 +35,7 @@ * WARNING: AUTOGENERATED CODE * * This code was generated by a tool. -* Autogenerated on: 2023-04-18 +* Autogenerated on: 2023-09-08 * * Manual changes to this file may cause unexpected behavior in your application. * Manual changes to this file will be overwritten if the code is regenerated. @@ -44,7 +44,7 @@ /** * This class contains methods for the DiseasePanel webservices. - * Client version: 2.8.0-SNAPSHOT + * Client version: 2.11.0-SNAPSHOT * PATH: panels */ public class DiseasePanelClient extends AbstractParentClient { @@ -93,17 +93,27 @@ public RestResponse create(PanelCreateParams data, ObjectMap params) thro * @param field Comma separated list of fields for which to obtain the distinct values. * @param params Map containing any of the following optional parameters. * study: Study [[user@]project:]study where study and project can be either the ID or UUID. - * id: Comma separated list of panel IDs up to a maximum of 100. + * id: Comma separated list of panel IDs up to a maximum of 100. Also admits basic regular expressions using the operator '~', + * i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * uuid: Comma separated list of panel UUIDs up to a maximum of 100. - * name: Comma separated list of panel names up to a maximum of 100. + * name: Comma separated list of panel names up to a maximum of 100. Also admits basic regular expressions using the operator + * '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * internalStatus: Filter by internal status. - * disorders: Comma separated list of disorder ids or names. - * variants: Comma separated list of variant ids. - * genes: Comma separated list of gene ids. + * disorders: Comma separated list of disorder ids or names. Also admits basic regular expressions using the operator '~', i.e. + * '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.. Also admits basic regular + * expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case + * insensitive search. + * variants: Comma separated list of variant ids. Also admits basic regular expressions using the operator '~', i.e. + * '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + * genes: Comma separated list of gene ids. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' + * e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * source: Comma separated list of source ids or names. - * regions: Comma separated list of regions. - * categories: Comma separated list of category names. - * tags: Panel tags. + * regions: Comma separated list of regions. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' + * e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + * categories: Comma separated list of category names. Also admits basic regular expressions using the operator '~', i.e. + * '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + * tags: Panel tags. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case + * sensitive, '~/value/i' for case insensitive search. * deleted: Boolean to retrieve deleted entries. * status: Filter by status. * creationDate: Creation date. Format: yyyyMMddHHmmss. Examples: >2018, 2017-2018, <201805. @@ -149,17 +159,27 @@ public RestResponse importPanels(PanelImportParams data, ObjectMap params) * skip: Number of results to skip. * count: Get the total number of results matching the query. Deactivated by default. * study: Study [[user@]project:]study where study and project can be either the ID or UUID. - * id: Comma separated list of panel IDs up to a maximum of 100. + * id: Comma separated list of panel IDs up to a maximum of 100. Also admits basic regular expressions using the operator '~', + * i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * uuid: Comma separated list of panel UUIDs up to a maximum of 100. - * name: Comma separated list of panel names up to a maximum of 100. + * name: Comma separated list of panel names up to a maximum of 100. Also admits basic regular expressions using the operator + * '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * internalStatus: Filter by internal status. - * disorders: Comma separated list of disorder ids or names. - * variants: Comma separated list of variant ids. - * genes: Comma separated list of gene ids. + * disorders: Comma separated list of disorder ids or names. Also admits basic regular expressions using the operator '~', i.e. + * '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.. Also admits basic regular + * expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case + * insensitive search. + * variants: Comma separated list of variant ids. Also admits basic regular expressions using the operator '~', i.e. + * '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + * genes: Comma separated list of gene ids. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' + * e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * source: Comma separated list of source ids or names. - * regions: Comma separated list of regions. - * categories: Comma separated list of category names. - * tags: Panel tags. + * regions: Comma separated list of regions. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' + * e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + * categories: Comma separated list of category names. Also admits basic regular expressions using the operator '~', i.e. + * '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + * tags: Panel tags. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case + * sensitive, '~/value/i' for case insensitive search. * deleted: Boolean to retrieve deleted entries. * status: Filter by status. * creationDate: Creation date. Format: yyyyMMddHHmmss. Examples: >2018, 2017-2018, <201805. diff --git a/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/FamilyClient.java b/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/FamilyClient.java index 072933ac1e2..6280a7026e0 100644 --- a/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/FamilyClient.java +++ b/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/FamilyClient.java @@ -36,7 +36,7 @@ * WARNING: AUTOGENERATED CODE * * This code was generated by a tool. -* Autogenerated on: 2023-04-18 +* Autogenerated on: 2023-09-08 * * Manual changes to this file may cause unexpected behavior in your application. * Manual changes to this file will be overwritten if the code is regenerated. @@ -45,7 +45,7 @@ /** * This class contains methods for the Family webservices. - * Client version: 2.8.0-SNAPSHOT + * Client version: 2.11.0-SNAPSHOT * PATH: families */ public class FamilyClient extends AbstractParentClient { @@ -145,14 +145,18 @@ public RestResponse create(FamilyCreateParams data, ObjectMap params) th * @param field Comma separated list of fields for which to obtain the distinct values. * @param params Map containing any of the following optional parameters. * study: Study [[user@]project:]study where study and project can be either the ID or UUID. - * id: Comma separated list family IDs up to a maximum of 100. - * name: Comma separated list family names up to a maximum of 100. + * id: Comma separated list family IDs up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. + * '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + * name: Comma separated list family names up to a maximum of 100. Also admits basic regular expressions using the operator '~', + * i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * uuid: Comma separated list family UUIDs up to a maximum of 100. * members: Comma separated list of family members. * expectedSize: Expected size of the family (number of members). * samples: Comma separated list of member's samples. - * phenotypes: Comma separated list of phenotype ids or names. - * disorders: Comma separated list of disorder ids or names. + * phenotypes: Comma separated list of phenotype ids or names. Also admits basic regular expressions using the operator '~', i.e. + * '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + * disorders: Comma separated list of disorder ids or names. Also admits basic regular expressions using the operator '~', i.e. + * '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * creationDate: Creation date. Format: yyyyMMddHHmmss. Examples: >2018, 2017-2018, <201805. * modificationDate: Modification date. Format: yyyyMMddHHmmss. Examples: >2018, 2017-2018, <201805. * deleted: Boolean to retrieve deleted entries. @@ -184,14 +188,18 @@ public RestResponse distinct(String field, ObjectMap params) throws Clie * count: Get the total number of results matching the query. Deactivated by default. * flattenAnnotations: Flatten the annotations?. * study: Study [[user@]project:]study where study and project can be either the ID or UUID. - * id: Comma separated list family IDs up to a maximum of 100. - * name: Comma separated list family names up to a maximum of 100. + * id: Comma separated list family IDs up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. + * '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + * name: Comma separated list family names up to a maximum of 100. Also admits basic regular expressions using the operator '~', + * i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * uuid: Comma separated list family UUIDs up to a maximum of 100. * members: Comma separated list of family members. * expectedSize: Expected size of the family (number of members). * samples: Comma separated list of member's samples. - * phenotypes: Comma separated list of phenotype ids or names. - * disorders: Comma separated list of disorder ids or names. + * phenotypes: Comma separated list of phenotype ids or names. Also admits basic regular expressions using the operator '~', i.e. + * '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + * disorders: Comma separated list of disorder ids or names. Also admits basic regular expressions using the operator '~', i.e. + * '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * creationDate: Creation date. Format: yyyyMMddHHmmss. Examples: >2018, 2017-2018, <201805. * modificationDate: Modification date. Format: yyyyMMddHHmmss. Examples: >2018, 2017-2018, <201805. * deleted: Boolean to retrieve deleted entries. diff --git a/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/FileClient.java b/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/FileClient.java index 553e0983a27..ce6df1ebb2e 100644 --- a/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/FileClient.java +++ b/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/FileClient.java @@ -43,7 +43,7 @@ * WARNING: AUTOGENERATED CODE * * This code was generated by a tool. -* Autogenerated on: 2023-04-18 +* Autogenerated on: 2023-09-08 * * Manual changes to this file may cause unexpected behavior in your application. * Manual changes to this file will be overwritten if the code is regenerated. @@ -52,7 +52,7 @@ /** * This class contains methods for the File webservices. - * Client version: 2.8.0-SNAPSHOT + * Client version: 2.11.0-SNAPSHOT * PATH: files */ public class FileClient extends AbstractParentClient { @@ -164,11 +164,15 @@ public RestResponse create(FileCreateParams data, ObjectMap params) throws * @param field Comma separated list of fields for which to obtain the distinct values. * @param params Map containing any of the following optional parameters. * study: Study [[user@]project:]study where study and project can be either the ID or UUID. - * id: Comma separated list of file IDs up to a maximum of 100. + * id: Comma separated list of file IDs up to a maximum of 100. Also admits basic regular expressions using the operator '~', + * i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * uuid: Comma separated list file UUIDs up to a maximum of 100. - * name: Comma separated list of file names. - * path: Comma separated list of paths. - * uri: Comma separated list of uris. + * name: Comma separated list of file names. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' + * e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + * path: Comma separated list of paths. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. + * '~value' for case sensitive, '~/value/i' for case insensitive search. + * uri: Comma separated list of uris. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. + * '~value' for case sensitive, '~/value/i' for case insensitive search. * type: File type, either FILE or DIRECTORY. * bioformat: Comma separated Bioformat values. For existing Bioformats see files/bioformats. * format: Comma separated Format values. For existing Formats see files/formats. @@ -181,7 +185,8 @@ public RestResponse create(FileCreateParams data, ObjectMap params) throws * creationDate: Creation date. Format: yyyyMMddHHmmss. Examples: >2018, 2017-2018, <201805. * modificationDate: Modification date. Format: yyyyMMddHHmmss. Examples: >2018, 2017-2018, <201805. * description: Description. - * tags: Tags. + * tags: Tags. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case + * sensitive, '~/value/i' for case insensitive search. * size: File size. * sampleIds: Comma separated list sample IDs or UUIDs up to a maximum of 100. * jobId: Job ID that created the file(s) or folder(s). @@ -290,11 +295,15 @@ public RestResponse runPostlink(PostLinkToolParams data, ObjectMap params) * count: Get the total number of results matching the query. Deactivated by default. * flattenAnnotations: Boolean indicating to flatten the annotations. * study: Study [[user@]project:]study where study and project can be either the ID or UUID. - * id: Comma separated list of file IDs up to a maximum of 100. + * id: Comma separated list of file IDs up to a maximum of 100. Also admits basic regular expressions using the operator '~', + * i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * uuid: Comma separated list file UUIDs up to a maximum of 100. - * name: Comma separated list of file names. - * path: Comma separated list of paths. - * uri: Comma separated list of uris. + * name: Comma separated list of file names. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' + * e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + * path: Comma separated list of paths. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. + * '~value' for case sensitive, '~/value/i' for case insensitive search. + * uri: Comma separated list of uris. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. + * '~value' for case sensitive, '~/value/i' for case insensitive search. * type: File type, either FILE or DIRECTORY. * bioformat: Comma separated Bioformat values. For existing Bioformats see files/bioformats. * format: Comma separated Format values. For existing Formats see files/formats. @@ -307,7 +316,8 @@ public RestResponse runPostlink(PostLinkToolParams data, ObjectMap params) * creationDate: Creation date. Format: yyyyMMddHHmmss. Examples: >2018, 2017-2018, <201805. * modificationDate: Modification date. Format: yyyyMMddHHmmss. Examples: >2018, 2017-2018, <201805. * description: Description. - * tags: Tags. + * tags: Tags. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case + * sensitive, '~/value/i' for case insensitive search. * size: File size. * sampleIds: Comma separated list sample IDs or UUIDs up to a maximum of 100. * jobId: Job ID that created the file(s) or folder(s). diff --git a/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/GA4GHClient.java b/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/GA4GHClient.java index a4bc5b7f11c..28170cb2746 100644 --- a/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/GA4GHClient.java +++ b/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/GA4GHClient.java @@ -27,7 +27,7 @@ * WARNING: AUTOGENERATED CODE * * This code was generated by a tool. -* Autogenerated on: 2023-04-18 +* Autogenerated on: 2023-09-08 * * Manual changes to this file may cause unexpected behavior in your application. * Manual changes to this file will be overwritten if the code is regenerated. @@ -36,7 +36,7 @@ /** * This class contains methods for the GA4GH webservices. - * Client version: 2.8.0-SNAPSHOT + * Client version: 2.11.0-SNAPSHOT * PATH: ga4gh */ public class GA4GHClient extends AbstractParentClient { diff --git a/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/IndividualClient.java b/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/IndividualClient.java index 3b41baf7ae6..eb24455c52a 100644 --- a/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/IndividualClient.java +++ b/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/IndividualClient.java @@ -36,7 +36,7 @@ * WARNING: AUTOGENERATED CODE * * This code was generated by a tool. -* Autogenerated on: 2023-04-18 +* Autogenerated on: 2023-09-08 * * Manual changes to this file may cause unexpected behavior in your application. * Manual changes to this file will be overwritten if the code is regenerated. @@ -45,7 +45,7 @@ /** * This class contains methods for the Individual webservices. - * Client version: 2.8.0-SNAPSHOT + * Client version: 2.11.0-SNAPSHOT * PATH: individuals */ public class IndividualClient extends AbstractParentClient { @@ -153,20 +153,27 @@ public RestResponse create(IndividualCreateParams data, ObjectMap pa * @param field Comma separated list of fields for which to obtain the distinct values. * @param params Map containing any of the following optional parameters. * study: Study [[user@]project:]study where study and project can be either the ID or UUID. - * id: Comma separated list individual IDs up to a maximum of 100. + * id: Comma separated list individual IDs up to a maximum of 100. Also admits basic regular expressions using the operator '~', + * i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * uuid: Comma separated list individual UUIDs up to a maximum of 100. - * name: Comma separated list individual names up to a maximum of 100. + * name: Comma separated list individual names up to a maximum of 100. Also admits basic regular expressions using the operator + * '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * familyIds: Comma separated list of family ids the individuals may belong to. * father: Father ID, name or UUID. * mother: Mother ID, name or UUID. * samples: Sample ID, name or UUID. * sex: Individual sex. - * ethnicity: Individual ethnicity. + * ethnicity: Individual ethnicity. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. + * '~value' for case sensitive, '~/value/i' for case insensitive search. * dateOfBirth: Individual date of birth. - * disorders: Comma separated list of disorder ids or names. - * phenotypes: Comma separated list of phenotype ids or names. - * populationName: Population name. - * populationSubpopulation: Subpopulation name. + * disorders: Comma separated list of disorder ids or names. Also admits basic regular expressions using the operator '~', i.e. + * '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + * phenotypes: Comma separated list of phenotype ids or names. Also admits basic regular expressions using the operator '~', i.e. + * '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + * populationName: Population name. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. + * '~value' for case sensitive, '~/value/i' for case insensitive search. + * populationSubpopulation: Subpopulation name. Also admits basic regular expressions using the operator '~', i.e. + * '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * karyotypicSex: Individual karyotypic sex. * lifeStatus: Individual life status. * internalStatus: Filter by internal status. @@ -200,20 +207,27 @@ public RestResponse distinct(String field, ObjectMap params) throws Clie * count: Get the total number of results matching the query. Deactivated by default. * flattenAnnotations: Flatten the annotations?. * study: Study [[user@]project:]study where study and project can be either the ID or UUID. - * id: Comma separated list individual IDs up to a maximum of 100. + * id: Comma separated list individual IDs up to a maximum of 100. Also admits basic regular expressions using the operator '~', + * i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * uuid: Comma separated list individual UUIDs up to a maximum of 100. - * name: Comma separated list individual names up to a maximum of 100. + * name: Comma separated list individual names up to a maximum of 100. Also admits basic regular expressions using the operator + * '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * father: Father ID, name or UUID. * mother: Mother ID, name or UUID. * samples: Sample ID, name or UUID. * familyIds: Comma separated list of family ids the individuals may belong to. * sex: Individual sex. * dateOfBirth: Individual date of birth. - * ethnicity: Individual ethnicity. - * disorders: Comma separated list of disorder ids or names. - * phenotypes: Comma separated list of phenotype ids or names. - * populationName: Population name. - * populationSubpopulation: Subpopulation name. + * ethnicity: Individual ethnicity. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. + * '~value' for case sensitive, '~/value/i' for case insensitive search. + * disorders: Comma separated list of disorder ids or names. Also admits basic regular expressions using the operator '~', i.e. + * '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + * phenotypes: Comma separated list of phenotype ids or names. Also admits basic regular expressions using the operator '~', i.e. + * '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + * populationName: Population name. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. + * '~value' for case sensitive, '~/value/i' for case insensitive search. + * populationSubpopulation: Subpopulation name. Also admits basic regular expressions using the operator '~', i.e. + * '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * karyotypicSex: Individual karyotypic sex. * lifeStatus: Individual life status. * internalStatus: Filter by internal status. diff --git a/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/JobClient.java b/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/JobClient.java index 334c154ae53..68934888520 100644 --- a/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/JobClient.java +++ b/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/JobClient.java @@ -37,7 +37,7 @@ * WARNING: AUTOGENERATED CODE * * This code was generated by a tool. -* Autogenerated on: 2023-04-18 +* Autogenerated on: 2023-09-08 * * Manual changes to this file may cause unexpected behavior in your application. * Manual changes to this file will be overwritten if the code is regenerated. @@ -46,7 +46,7 @@ /** * This class contains methods for the Job webservices. - * Client version: 2.8.0-SNAPSHOT + * Client version: 2.11.0-SNAPSHOT * PATH: jobs */ public class JobClient extends AbstractParentClient { @@ -120,9 +120,11 @@ public RestResponse create(JobCreateParams data, ObjectMap params) throws C * @param params Map containing any of the following optional parameters. * study: Study [[user@]project:]study where study and project can be either the ID or UUID. * otherStudies: Flag indicating the entries being queried can belong to any related study, not just the primary one. - * id: Comma separated list of job IDs up to a maximum of 100. + * id: Comma separated list of job IDs up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. + * '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * uuid: Comma separated list of job UUIDs up to a maximum of 100. - * toolId: Tool ID executed by the job. + * toolId: Tool ID executed by the job. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. + * '~value' for case sensitive, '~/value/i' for case insensitive search. * toolType: Tool type executed by the job [OPERATION, ANALYSIS]. * userId: User that created the job. * priority: Priority of the job. @@ -176,9 +178,11 @@ public RestResponse retry(JobRetryParams data, ObjectMap params) throws Cli * count: Get the total number of results matching the query. Deactivated by default. * study: Study [[user@]project:]study where study and project can be either the ID or UUID. * otherStudies: Flag indicating the entries being queried can belong to any related study, not just the primary one. - * id: Comma separated list of job IDs up to a maximum of 100. + * id: Comma separated list of job IDs up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. + * '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * uuid: Comma separated list of job UUIDs up to a maximum of 100. - * toolId: Tool ID executed by the job. + * toolId: Tool ID executed by the job. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. + * '~value' for case sensitive, '~/value/i' for case insensitive search. * toolType: Tool type executed by the job [OPERATION, ANALYSIS]. * userId: User that created the job. * priority: Priority of the job. @@ -211,7 +215,8 @@ public RestResponse search(ObjectMap params) throws ClientException { * internalStatus: Filter by internal status. * priority: Priority of the job. * userId: User that created the job. - * toolId: Tool ID executed by the job. + * toolId: Tool ID executed by the job. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. + * '~value' for case sensitive, '~/value/i' for case insensitive search. * @return a RestResponse object. * @throws ClientException ClientException if there is any server error. */ diff --git a/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/MetaClient.java b/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/MetaClient.java index ac4c311a0bb..b68b929186c 100644 --- a/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/MetaClient.java +++ b/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/MetaClient.java @@ -28,7 +28,7 @@ * WARNING: AUTOGENERATED CODE * * This code was generated by a tool. -* Autogenerated on: 2023-04-18 +* Autogenerated on: 2023-09-08 * * Manual changes to this file may cause unexpected behavior in your application. * Manual changes to this file will be overwritten if the code is regenerated. @@ -37,7 +37,7 @@ /** * This class contains methods for the Meta webservices. - * Client version: 2.8.0-SNAPSHOT + * Client version: 2.11.0-SNAPSHOT * PATH: meta */ public class MetaClient extends AbstractParentClient { diff --git a/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/ProjectClient.java b/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/ProjectClient.java index 9a3094cb554..395b4593856 100644 --- a/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/ProjectClient.java +++ b/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/ProjectClient.java @@ -32,7 +32,7 @@ * WARNING: AUTOGENERATED CODE * * This code was generated by a tool. -* Autogenerated on: 2023-04-18 +* Autogenerated on: 2023-09-08 * * Manual changes to this file may cause unexpected behavior in your application. * Manual changes to this file will be overwritten if the code is regenerated. @@ -41,7 +41,7 @@ /** * This class contains methods for the Project webservices. - * Client version: 2.8.0-SNAPSHOT + * Client version: 2.11.0-SNAPSHOT * PATH: projects */ public class ProjectClient extends AbstractParentClient { diff --git a/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/SampleClient.java b/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/SampleClient.java index efeca3bd4b3..f2874078762 100644 --- a/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/SampleClient.java +++ b/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/SampleClient.java @@ -36,7 +36,7 @@ * WARNING: AUTOGENERATED CODE * * This code was generated by a tool. -* Autogenerated on: 2023-04-18 +* Autogenerated on: 2023-09-08 * * Manual changes to this file may cause unexpected behavior in your application. * Manual changes to this file will be overwritten if the code is regenerated. @@ -45,7 +45,7 @@ /** * This class contains methods for the Sample webservices. - * Client version: 2.8.0-SNAPSHOT + * Client version: 2.11.0-SNAPSHOT * PATH: samples */ public class SampleClient extends AbstractParentClient { @@ -145,7 +145,8 @@ public RestResponse create(SampleCreateParams data, ObjectMap params) th * @param field Comma separated list of fields for which to obtain the distinct values. * @param params Map containing any of the following optional parameters. * study: Study [[user@]project:]study where study and project can be either the ID or UUID. - * id: Comma separated list sample IDs up to a maximum of 100. + * id: Comma separated list sample IDs up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. + * '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * uuid: Comma separated list sample UUIDs up to a maximum of 100. * somatic: Somatic sample. * individualId: Individual ID or UUID. @@ -162,7 +163,8 @@ public RestResponse create(SampleCreateParams data, ObjectMap params) th * collectionFrom: Collection from. * collectionType: Collection type. * collectionMethod: Collection method. - * phenotypes: Comma separated list of phenotype ids or names. + * phenotypes: Comma separated list of phenotype ids or names. Also admits basic regular expressions using the operator '~', i.e. + * '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * annotation: Annotation filters. Example: age>30;gender=FEMALE. For more information, please visit * http://docs.opencb.org/display/opencga/AnnotationSets+1.4.0. * acl: Filter entries for which a user has the provided permissions. Format: acl={user}:{permissions}. Example: @@ -221,7 +223,8 @@ public RestResponse load(String file, ObjectMap params) throws ClientExc * includeIndividual: Include Individual object as an attribute. * flattenAnnotations: Flatten the annotations?. * study: Study [[user@]project:]study where study and project can be either the ID or UUID. - * id: Comma separated list sample IDs up to a maximum of 100. + * id: Comma separated list sample IDs up to a maximum of 100. Also admits basic regular expressions using the operator '~', i.e. + * '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * uuid: Comma separated list sample UUIDs up to a maximum of 100. * somatic: Somatic sample. * individualId: Individual ID or UUID. @@ -238,7 +241,8 @@ public RestResponse load(String file, ObjectMap params) throws ClientExc * collectionFrom: Collection from. * collectionType: Collection type. * collectionMethod: Collection method. - * phenotypes: Comma separated list of phenotype ids or names. + * phenotypes: Comma separated list of phenotype ids or names. Also admits basic regular expressions using the operator '~', i.e. + * '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * annotation: Annotation filters. Example: age>30;gender=FEMALE. For more information, please visit * http://docs.opencb.org/display/opencga/AnnotationSets+1.4.0. * acl: Filter entries for which a user has the provided permissions. Format: acl={user}:{permissions}. Example: diff --git a/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/StudyClient.java b/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/StudyClient.java index 47f1ce2dbc9..6216f78b94b 100644 --- a/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/StudyClient.java +++ b/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/StudyClient.java @@ -45,7 +45,7 @@ * WARNING: AUTOGENERATED CODE * * This code was generated by a tool. -* Autogenerated on: 2023-04-18 +* Autogenerated on: 2023-09-08 * * Manual changes to this file may cause unexpected behavior in your application. * Manual changes to this file will be overwritten if the code is regenerated. @@ -54,7 +54,7 @@ /** * This class contains methods for the Study webservices. - * Client version: 2.8.0-SNAPSHOT + * Client version: 2.11.0-SNAPSHOT * PATH: studies */ public class StudyClient extends AbstractParentClient { diff --git a/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/UserClient.java b/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/UserClient.java index bdf3eb4f232..93c49bdf998 100644 --- a/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/UserClient.java +++ b/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/UserClient.java @@ -36,7 +36,7 @@ * WARNING: AUTOGENERATED CODE * * This code was generated by a tool. -* Autogenerated on: 2023-04-18 +* Autogenerated on: 2023-09-08 * * Manual changes to this file may cause unexpected behavior in your application. * Manual changes to this file will be overwritten if the code is regenerated. @@ -45,7 +45,7 @@ /** * This class contains methods for the User webservices. - * Client version: 2.8.0-SNAPSHOT + * Client version: 2.11.0-SNAPSHOT * PATH: users */ public class UserClient extends AbstractParentClient { diff --git a/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/VariantClient.java b/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/VariantClient.java index 5b135d4d38e..c96321b199a 100644 --- a/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/VariantClient.java +++ b/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/VariantClient.java @@ -62,7 +62,7 @@ * WARNING: AUTOGENERATED CODE * * This code was generated by a tool. -* Autogenerated on: 2023-04-18 +* Autogenerated on: 2023-09-08 * * Manual changes to this file may cause unexpected behavior in your application. * Manual changes to this file will be overwritten if the code is regenerated. @@ -71,7 +71,7 @@ /** * This class contains methods for the Variant webservices. - * Client version: 2.8.0-SNAPSHOT + * Client version: 2.11.0-SNAPSHOT * PATH: analysis/variant */ public class VariantClient extends AbstractParentClient { diff --git a/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/VariantOperationClient.java b/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/VariantOperationClient.java index e15498be36d..4b870042648 100644 --- a/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/VariantOperationClient.java +++ b/opencga-client/src/main/java/org/opencb/opencga/client/rest/clients/VariantOperationClient.java @@ -50,7 +50,7 @@ * WARNING: AUTOGENERATED CODE * * This code was generated by a tool. -* Autogenerated on: 2023-04-18 +* Autogenerated on: 2023-09-08 * * Manual changes to this file may cause unexpected behavior in your application. * Manual changes to this file will be overwritten if the code is regenerated. @@ -59,7 +59,7 @@ /** * This class contains methods for the VariantOperation webservices. - * Client version: 2.8.0-SNAPSHOT + * Client version: 2.11.0-SNAPSHOT * PATH: operation */ public class VariantOperationClient extends AbstractParentClient { diff --git a/opencga-client/src/main/javascript/Admin.js b/opencga-client/src/main/javascript/Admin.js index 53c4f4e9c41..5edf0a466c6 100644 --- a/opencga-client/src/main/javascript/Admin.js +++ b/opencga-client/src/main/javascript/Admin.js @@ -12,7 +12,7 @@ * WARNING: AUTOGENERATED CODE * * This code was generated by a tool. - * Autogenerated on: 2023-04-18 + * Autogenerated on: 2023-09-08 * * Manual changes to this file may cause unexpected behavior in your application. * Manual changes to this file will be overwritten if the code is regenerated. @@ -116,4 +116,15 @@ export default class Admin extends OpenCGAParentClass { return this._post("admin", null, "users", null, "sync", data); } + /** Add or remove users from existing groups + * @param {String} user - User ID. + * @param {Object} data - JSON containing the parameters. + * @param {Object} [params] - The Object containing the following optional parameters: + * @param {"ADD REMOVE"} [params.action = "ADD"] - Action to be performed: ADD or REMOVE user to/from groups. The default value is ADD. + * @returns {Promise} Promise object in the form of RestResponse instance. + */ + usersUpdateGroups(user, data, params) { + return this._post("admin/users", user, "groups", null, "update", data, params); + } + } \ No newline at end of file diff --git a/opencga-client/src/main/javascript/Alignment.js b/opencga-client/src/main/javascript/Alignment.js index bc3b7eb2c02..874adaf6b67 100644 --- a/opencga-client/src/main/javascript/Alignment.js +++ b/opencga-client/src/main/javascript/Alignment.js @@ -12,7 +12,7 @@ * WARNING: AUTOGENERATED CODE * * This code was generated by a tool. - * Autogenerated on: 2023-04-18 + * Autogenerated on: 2023-09-08 * * Manual changes to this file may cause unexpected behavior in your application. * Manual changes to this file will be overwritten if the code is regenerated. diff --git a/opencga-client/src/main/javascript/ClinicalAnalysis.js b/opencga-client/src/main/javascript/ClinicalAnalysis.js index 30c195691ca..7b04cf20cdd 100644 --- a/opencga-client/src/main/javascript/ClinicalAnalysis.js +++ b/opencga-client/src/main/javascript/ClinicalAnalysis.js @@ -12,7 +12,7 @@ * WARNING: AUTOGENERATED CODE * * This code was generated by a tool. - * Autogenerated on: 2023-04-18 + * Autogenerated on: 2023-09-08 * * Manual changes to this file may cause unexpected behavior in your application. * Manual changes to this file will be overwritten if the code is regenerated. @@ -76,10 +76,12 @@ export default class ClinicalAnalysis extends OpenCGAParentClass { * @param {String} field - Comma separated list of fields for which to obtain the distinct values. * @param {Object} [params] - The Object containing the following optional parameters: * @param {String} [params.study] - Study [[user@]project:]study where study and project can be either the ID or UUID. - * @param {String} [params.id] - Comma separated list of Clinical Analysis IDs up to a maximum of 100. + * @param {String} [params.id] - Comma separated list of Clinical Analysis IDs up to a maximum of 100. Also admits basic regular + * expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * @param {String} [params.uuid] - Comma separated list of Clinical Analysis UUIDs up to a maximum of 100. * @param {String} [params.type] - Clinical Analysis type. - * @param {String} [params.disorder] - Clinical Analysis disorder. + * @param {String} [params.disorder] - Clinical Analysis disorder. Also admits basic regular expressions using the operator '~', i.e. + * '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * @param {String} [params.files] - Clinical Analysis files. * @param {String} [params.sample] - Sample associated to the proband or any member of a family. * @param {String} [params.individual] - Proband or any member of a family. @@ -112,11 +114,13 @@ export default class ClinicalAnalysis extends OpenCGAParentClass { * @param {String} field - Comma separated list of fields for which to obtain the distinct values. * @param {Object} [params] - The Object containing the following optional parameters: * @param {String} [params.study] - Study [[user@]project:]study where study and project can be either the ID or UUID. - * @param {String} [params.id] - Comma separated list of Interpretation IDs up to a maximum of 100. + * @param {String} [params.id] - Comma separated list of Interpretation IDs up to a maximum of 100. Also admits basic regular expressions + * using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * @param {String} [params.uuid] - Comma separated list of Interpretation UUIDs up to a maximum of 100. * @param {String} [params.clinicalAnalysisId] - Clinical Analysis id. * @param {String} [params.analystId] - Analyst ID. - * @param {String} [params.methodName] - Interpretation method name. + * @param {String} [params.methodName] - Interpretation method name. Also admits basic regular expressions using the operator '~', i.e. + * '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * @param {String} [params.panels] - Interpretation panels. * @param {String} [params.primaryFindings] - Interpretation primary findings. * @param {String} [params.secondaryFindings] - Interpretation secondary findings. @@ -140,11 +144,13 @@ export default class ClinicalAnalysis extends OpenCGAParentClass { * @param {Number} [params.skip] - Number of results to skip. * @param {Boolean} [params.sort] - Sort the results. * @param {String} [params.study] - Study [[user@]project:]study where study and project can be either the ID or UUID. - * @param {String} [params.id] - Comma separated list of Interpretation IDs up to a maximum of 100. + * @param {String} [params.id] - Comma separated list of Interpretation IDs up to a maximum of 100. Also admits basic regular expressions + * using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * @param {String} [params.uuid] - Comma separated list of Interpretation UUIDs up to a maximum of 100. * @param {String} [params.clinicalAnalysisId] - Clinical Analysis id. * @param {String} [params.analystId] - Analyst ID. - * @param {String} [params.methodName] - Interpretation method name. + * @param {String} [params.methodName] - Interpretation method name. Also admits basic regular expressions using the operator '~', i.e. + * '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * @param {String} [params.panels] - Interpretation panels. * @param {String} [params.primaryFindings] - Interpretation primary findings. * @param {String} [params.secondaryFindings] - Interpretation secondary findings. @@ -513,10 +519,12 @@ export default class ClinicalAnalysis extends OpenCGAParentClass { * @param {Boolean} [params.count = "false"] - Get the total number of results matching the query. Deactivated by default. The default * value is false. * @param {String} [params.study] - Study [[user@]project:]study where study and project can be either the ID or UUID. - * @param {String} [params.id] - Comma separated list of Clinical Analysis IDs up to a maximum of 100. + * @param {String} [params.id] - Comma separated list of Clinical Analysis IDs up to a maximum of 100. Also admits basic regular + * expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * @param {String} [params.uuid] - Comma separated list of Clinical Analysis UUIDs up to a maximum of 100. * @param {String} [params.type] - Clinical Analysis type. - * @param {String} [params.disorder] - Clinical Analysis disorder. + * @param {String} [params.disorder] - Clinical Analysis disorder. Also admits basic regular expressions using the operator '~', i.e. + * '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * @param {String} [params.files] - Clinical Analysis files. * @param {String} [params.sample] - Sample associated to the proband or any member of a family. * @param {String} [params.individual] - Proband or any member of a family. diff --git a/opencga-client/src/main/javascript/Cohort.js b/opencga-client/src/main/javascript/Cohort.js index 56f11ab10fa..139868db04d 100644 --- a/opencga-client/src/main/javascript/Cohort.js +++ b/opencga-client/src/main/javascript/Cohort.js @@ -12,7 +12,7 @@ * WARNING: AUTOGENERATED CODE * * This code was generated by a tool. - * Autogenerated on: 2023-04-18 + * Autogenerated on: 2023-09-08 * * Manual changes to this file may cause unexpected behavior in your application. * Manual changes to this file will be overwritten if the code is regenerated. @@ -101,8 +101,10 @@ export default class Cohort extends OpenCGAParentClass { * @param {String} field - Comma separated list of fields for which to obtain the distinct values. * @param {Object} [params] - The Object containing the following optional parameters: * @param {String} [params.study] - Study [[user@]project:]study where study and project can be either the ID or UUID. - * @param {String} [params.id] - Comma separated list of cohort IDs up to a maximum of 100. - * @param {String} [params.name] - Comma separated list of cohort names up to a maximum of 100. + * @param {String} [params.id] - Comma separated list of cohort IDs up to a maximum of 100. Also admits basic regular expressions using + * the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + * @param {String} [params.name] - Comma separated list of cohort names up to a maximum of 100. Also admits basic regular expressions + * using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * @param {String} [params.uuid] - Comma separated list of cohort IDs up to a maximum of 100. * @param {String} [params.type] - Cohort type. * @param {String} [params.creationDate] - creationDate. @@ -135,7 +137,8 @@ export default class Cohort extends OpenCGAParentClass { * @param {String} [params.modificationDate] - Modification date. Format: yyyyMMddHHmmss. Examples: >2018, 2017-2018, <201805. * @param {String} [params.internalStatus] - Filter by internal status. * @param {String} [params.status] - Filter by status. - * @param {String} [params.phenotypes] - Comma separated list of phenotype ids or names. + * @param {String} [params.phenotypes] - Comma separated list of phenotype ids or names. Also admits basic regular expressions using the + * operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * @param {String} [params.annotation] - Annotation filters. Example: age>30;gender=FEMALE. For more information, please visit * http://docs.opencb.org/display/opencga/AnnotationSets+1.4.0. * @param {String} [params.acl] - Filter entries for which a user has the provided permissions. Format: acl={user}:{permissions}. @@ -161,8 +164,10 @@ export default class Cohort extends OpenCGAParentClass { * value is false. * @param {Boolean} [params.flattenAnnotations = "false"] - Flatten the annotations?. The default value is false. * @param {String} [params.study] - Study [[user@]project:]study where study and project can be either the ID or UUID. - * @param {String} [params.id] - Comma separated list of cohort IDs up to a maximum of 100. - * @param {String} [params.name] - Comma separated list of cohort names up to a maximum of 100. + * @param {String} [params.id] - Comma separated list of cohort IDs up to a maximum of 100. Also admits basic regular expressions using + * the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + * @param {String} [params.name] - Comma separated list of cohort names up to a maximum of 100. Also admits basic regular expressions + * using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * @param {String} [params.uuid] - Comma separated list of cohort IDs up to a maximum of 100. * @param {String} [params.type] - Cohort type. * @param {String} [params.creationDate] - creationDate. diff --git a/opencga-client/src/main/javascript/DiseasePanel.js b/opencga-client/src/main/javascript/DiseasePanel.js index c8a18d38ab6..2f8e596a9a9 100644 --- a/opencga-client/src/main/javascript/DiseasePanel.js +++ b/opencga-client/src/main/javascript/DiseasePanel.js @@ -12,7 +12,7 @@ * WARNING: AUTOGENERATED CODE * * This code was generated by a tool. - * Autogenerated on: 2023-04-18 + * Autogenerated on: 2023-09-08 * * Manual changes to this file may cause unexpected behavior in your application. * Manual changes to this file will be overwritten if the code is regenerated. @@ -62,17 +62,27 @@ export default class DiseasePanel extends OpenCGAParentClass { * @param {String} field - Comma separated list of fields for which to obtain the distinct values. * @param {Object} [params] - The Object containing the following optional parameters: * @param {String} [params.study] - Study [[user@]project:]study where study and project can be either the ID or UUID. - * @param {String} [params.id] - Comma separated list of panel IDs up to a maximum of 100. + * @param {String} [params.id] - Comma separated list of panel IDs up to a maximum of 100. Also admits basic regular expressions using + * the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * @param {String} [params.uuid] - Comma separated list of panel UUIDs up to a maximum of 100. - * @param {String} [params.name] - Comma separated list of panel names up to a maximum of 100. + * @param {String} [params.name] - Comma separated list of panel names up to a maximum of 100. Also admits basic regular expressions + * using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * @param {String} [params.internalStatus] - Filter by internal status. - * @param {String} [params.disorders] - Comma separated list of disorder ids or names. - * @param {String} [params.variants] - Comma separated list of variant ids. - * @param {String} [params.genes] - Comma separated list of gene ids. + * @param {String} [params.disorders] - Comma separated list of disorder ids or names. Also admits basic regular expressions using the + * operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.. Also admits basic + * regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive + * search. + * @param {String} [params.variants] - Comma separated list of variant ids. Also admits basic regular expressions using the operator '~', + * i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + * @param {String} [params.genes] - Comma separated list of gene ids. Also admits basic regular expressions using the operator '~', i.e. + * '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * @param {String} [params.source] - Comma separated list of source ids or names. - * @param {String} [params.regions] - Comma separated list of regions. - * @param {String} [params.categories] - Comma separated list of category names. - * @param {String} [params.tags] - Panel tags. + * @param {String} [params.regions] - Comma separated list of regions. Also admits basic regular expressions using the operator '~', i.e. + * '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + * @param {String} [params.categories] - Comma separated list of category names. Also admits basic regular expressions using the operator + * '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + * @param {String} [params.tags] - Panel tags. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. + * '~value' for case sensitive, '~/value/i' for case insensitive search. * @param {Boolean} [params.deleted = "false"] - Boolean to retrieve deleted entries. The default value is false. * @param {String} [params.status] - Filter by status. * @param {String} [params.creationDate] - Creation date. Format: yyyyMMddHHmmss. Examples: >2018, 2017-2018, <201805. @@ -112,17 +122,27 @@ export default class DiseasePanel extends OpenCGAParentClass { * @param {Boolean} [params.count = "false"] - Get the total number of results matching the query. Deactivated by default. The default * value is false. * @param {String} [params.study] - Study [[user@]project:]study where study and project can be either the ID or UUID. - * @param {String} [params.id] - Comma separated list of panel IDs up to a maximum of 100. + * @param {String} [params.id] - Comma separated list of panel IDs up to a maximum of 100. Also admits basic regular expressions using + * the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * @param {String} [params.uuid] - Comma separated list of panel UUIDs up to a maximum of 100. - * @param {String} [params.name] - Comma separated list of panel names up to a maximum of 100. + * @param {String} [params.name] - Comma separated list of panel names up to a maximum of 100. Also admits basic regular expressions + * using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * @param {String} [params.internalStatus] - Filter by internal status. - * @param {String} [params.disorders] - Comma separated list of disorder ids or names. - * @param {String} [params.variants] - Comma separated list of variant ids. - * @param {String} [params.genes] - Comma separated list of gene ids. + * @param {String} [params.disorders] - Comma separated list of disorder ids or names. Also admits basic regular expressions using the + * operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search.. Also admits basic + * regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive + * search. + * @param {String} [params.variants] - Comma separated list of variant ids. Also admits basic regular expressions using the operator '~', + * i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + * @param {String} [params.genes] - Comma separated list of gene ids. Also admits basic regular expressions using the operator '~', i.e. + * '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * @param {String} [params.source] - Comma separated list of source ids or names. - * @param {String} [params.regions] - Comma separated list of regions. - * @param {String} [params.categories] - Comma separated list of category names. - * @param {String} [params.tags] - Panel tags. + * @param {String} [params.regions] - Comma separated list of regions. Also admits basic regular expressions using the operator '~', i.e. + * '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + * @param {String} [params.categories] - Comma separated list of category names. Also admits basic regular expressions using the operator + * '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + * @param {String} [params.tags] - Panel tags. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. + * '~value' for case sensitive, '~/value/i' for case insensitive search. * @param {Boolean} [params.deleted = "false"] - Boolean to retrieve deleted entries. The default value is false. * @param {String} [params.status] - Filter by status. * @param {String} [params.creationDate] - Creation date. Format: yyyyMMddHHmmss. Examples: >2018, 2017-2018, <201805. diff --git a/opencga-client/src/main/javascript/Family.js b/opencga-client/src/main/javascript/Family.js index eef6b77e11e..ffd436567e0 100644 --- a/opencga-client/src/main/javascript/Family.js +++ b/opencga-client/src/main/javascript/Family.js @@ -12,7 +12,7 @@ * WARNING: AUTOGENERATED CODE * * This code was generated by a tool. - * Autogenerated on: 2023-04-18 + * Autogenerated on: 2023-09-08 * * Manual changes to this file may cause unexpected behavior in your application. * Manual changes to this file will be overwritten if the code is regenerated. @@ -104,14 +104,18 @@ export default class Family extends OpenCGAParentClass { * @param {String} field - Comma separated list of fields for which to obtain the distinct values. * @param {Object} [params] - The Object containing the following optional parameters: * @param {String} [params.study] - Study [[user@]project:]study where study and project can be either the ID or UUID. - * @param {String} [params.id] - Comma separated list family IDs up to a maximum of 100. - * @param {String} [params.name] - Comma separated list family names up to a maximum of 100. + * @param {String} [params.id] - Comma separated list family IDs up to a maximum of 100. Also admits basic regular expressions using the + * operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + * @param {String} [params.name] - Comma separated list family names up to a maximum of 100. Also admits basic regular expressions using + * the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * @param {String} [params.uuid] - Comma separated list family UUIDs up to a maximum of 100. * @param {String} [params.members] - Comma separated list of family members. * @param {Number} [params.expectedSize] - Expected size of the family (number of members). * @param {String} [params.samples] - Comma separated list of member's samples. - * @param {String} [params.phenotypes] - Comma separated list of phenotype ids or names. - * @param {String} [params.disorders] - Comma separated list of disorder ids or names. + * @param {String} [params.phenotypes] - Comma separated list of phenotype ids or names. Also admits basic regular expressions using the + * operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + * @param {String} [params.disorders] - Comma separated list of disorder ids or names. Also admits basic regular expressions using the + * operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * @param {String} [params.creationDate] - Creation date. Format: yyyyMMddHHmmss. Examples: >2018, 2017-2018, <201805. * @param {String} [params.modificationDate] - Modification date. Format: yyyyMMddHHmmss. Examples: >2018, 2017-2018, <201805. * @param {Boolean} [params.deleted = "false"] - Boolean to retrieve deleted entries. The default value is false. @@ -140,14 +144,18 @@ export default class Family extends OpenCGAParentClass { * value is false. * @param {Boolean} [params.flattenAnnotations = "false"] - Flatten the annotations?. The default value is false. * @param {String} [params.study] - Study [[user@]project:]study where study and project can be either the ID or UUID. - * @param {String} [params.id] - Comma separated list family IDs up to a maximum of 100. - * @param {String} [params.name] - Comma separated list family names up to a maximum of 100. + * @param {String} [params.id] - Comma separated list family IDs up to a maximum of 100. Also admits basic regular expressions using the + * operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + * @param {String} [params.name] - Comma separated list family names up to a maximum of 100. Also admits basic regular expressions using + * the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * @param {String} [params.uuid] - Comma separated list family UUIDs up to a maximum of 100. * @param {String} [params.members] - Comma separated list of family members. * @param {Number} [params.expectedSize] - Expected size of the family (number of members). * @param {String} [params.samples] - Comma separated list of member's samples. - * @param {String} [params.phenotypes] - Comma separated list of phenotype ids or names. - * @param {String} [params.disorders] - Comma separated list of disorder ids or names. + * @param {String} [params.phenotypes] - Comma separated list of phenotype ids or names. Also admits basic regular expressions using the + * operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + * @param {String} [params.disorders] - Comma separated list of disorder ids or names. Also admits basic regular expressions using the + * operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * @param {String} [params.creationDate] - Creation date. Format: yyyyMMddHHmmss. Examples: >2018, 2017-2018, <201805. * @param {String} [params.modificationDate] - Modification date. Format: yyyyMMddHHmmss. Examples: >2018, 2017-2018, <201805. * @param {Boolean} [params.deleted = "false"] - Boolean to retrieve deleted entries. The default value is false. diff --git a/opencga-client/src/main/javascript/File.js b/opencga-client/src/main/javascript/File.js index 66ca23ddf1e..a2455a0953f 100644 --- a/opencga-client/src/main/javascript/File.js +++ b/opencga-client/src/main/javascript/File.js @@ -12,7 +12,7 @@ * WARNING: AUTOGENERATED CODE * * This code was generated by a tool. - * Autogenerated on: 2023-04-18 + * Autogenerated on: 2023-09-08 * * Manual changes to this file may cause unexpected behavior in your application. * Manual changes to this file will be overwritten if the code is regenerated. @@ -112,11 +112,15 @@ export default class File extends OpenCGAParentClass { * @param {String} field - Comma separated list of fields for which to obtain the distinct values. * @param {Object} [params] - The Object containing the following optional parameters: * @param {String} [params.study] - Study [[user@]project:]study where study and project can be either the ID or UUID. - * @param {String} [params.id] - Comma separated list of file IDs up to a maximum of 100. + * @param {String} [params.id] - Comma separated list of file IDs up to a maximum of 100. Also admits basic regular expressions using the + * operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * @param {String} [params.uuid] - Comma separated list file UUIDs up to a maximum of 100. - * @param {String} [params.name] - Comma separated list of file names. - * @param {String} [params.path] - Comma separated list of paths. - * @param {String} [params.uri] - Comma separated list of uris. + * @param {String} [params.name] - Comma separated list of file names. Also admits basic regular expressions using the operator '~', i.e. + * '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + * @param {String} [params.path] - Comma separated list of paths. Also admits basic regular expressions using the operator '~', i.e. + * '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + * @param {String} [params.uri] - Comma separated list of uris. Also admits basic regular expressions using the operator '~', i.e. + * '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * @param {String} [params.type] - File type, either FILE or DIRECTORY. * @param {String} [params.bioformat] - Comma separated Bioformat values. For existing Bioformats see files/bioformats. * @param {String} [params.format] - Comma separated Format values. For existing Formats see files/formats. @@ -129,7 +133,8 @@ export default class File extends OpenCGAParentClass { * @param {String} [params.creationDate] - Creation date. Format: yyyyMMddHHmmss. Examples: >2018, 2017-2018, <201805. * @param {String} [params.modificationDate] - Modification date. Format: yyyyMMddHHmmss. Examples: >2018, 2017-2018, <201805. * @param {String} [params.description] - Description. - * @param {String} [params.tags] - Tags. + * @param {String} [params.tags] - Tags. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' + * for case sensitive, '~/value/i' for case insensitive search. * @param {String} [params.size] - File size. * @param {String} [params.sampleIds] - Comma separated list sample IDs or UUIDs up to a maximum of 100. * @param {String} [params.jobId] - Job ID that created the file(s) or folder(s). @@ -220,11 +225,15 @@ export default class File extends OpenCGAParentClass { * value is false. * @param {Boolean} [params.flattenAnnotations = "false"] - Boolean indicating to flatten the annotations. The default value is false. * @param {String} [params.study] - Study [[user@]project:]study where study and project can be either the ID or UUID. - * @param {String} [params.id] - Comma separated list of file IDs up to a maximum of 100. + * @param {String} [params.id] - Comma separated list of file IDs up to a maximum of 100. Also admits basic regular expressions using the + * operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * @param {String} [params.uuid] - Comma separated list file UUIDs up to a maximum of 100. - * @param {String} [params.name] - Comma separated list of file names. - * @param {String} [params.path] - Comma separated list of paths. - * @param {String} [params.uri] - Comma separated list of uris. + * @param {String} [params.name] - Comma separated list of file names. Also admits basic regular expressions using the operator '~', i.e. + * '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + * @param {String} [params.path] - Comma separated list of paths. Also admits basic regular expressions using the operator '~', i.e. + * '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + * @param {String} [params.uri] - Comma separated list of uris. Also admits basic regular expressions using the operator '~', i.e. + * '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * @param {String} [params.type] - File type, either FILE or DIRECTORY. * @param {String} [params.bioformat] - Comma separated Bioformat values. For existing Bioformats see files/bioformats. * @param {String} [params.format] - Comma separated Format values. For existing Formats see files/formats. @@ -237,7 +246,8 @@ export default class File extends OpenCGAParentClass { * @param {String} [params.creationDate] - Creation date. Format: yyyyMMddHHmmss. Examples: >2018, 2017-2018, <201805. * @param {String} [params.modificationDate] - Modification date. Format: yyyyMMddHHmmss. Examples: >2018, 2017-2018, <201805. * @param {String} [params.description] - Description. - * @param {String} [params.tags] - Tags. + * @param {String} [params.tags] - Tags. Also admits basic regular expressions using the operator '~', i.e. '~{perl-regex}' e.g. '~value' + * for case sensitive, '~/value/i' for case insensitive search. * @param {String} [params.size] - File size. * @param {String} [params.sampleIds] - Comma separated list sample IDs or UUIDs up to a maximum of 100. * @param {String} [params.jobId] - Job ID that created the file(s) or folder(s). diff --git a/opencga-client/src/main/javascript/GA4GH.js b/opencga-client/src/main/javascript/GA4GH.js index e6fb38143ac..f5e18645184 100644 --- a/opencga-client/src/main/javascript/GA4GH.js +++ b/opencga-client/src/main/javascript/GA4GH.js @@ -12,7 +12,7 @@ * WARNING: AUTOGENERATED CODE * * This code was generated by a tool. - * Autogenerated on: 2023-04-18 + * Autogenerated on: 2023-09-08 * * Manual changes to this file may cause unexpected behavior in your application. * Manual changes to this file will be overwritten if the code is regenerated. diff --git a/opencga-client/src/main/javascript/Individual.js b/opencga-client/src/main/javascript/Individual.js index 2487febccf8..da0324012b5 100644 --- a/opencga-client/src/main/javascript/Individual.js +++ b/opencga-client/src/main/javascript/Individual.js @@ -12,7 +12,7 @@ * WARNING: AUTOGENERATED CODE * * This code was generated by a tool. - * Autogenerated on: 2023-04-18 + * Autogenerated on: 2023-09-08 * * Manual changes to this file may cause unexpected behavior in your application. * Manual changes to this file will be overwritten if the code is regenerated. @@ -111,20 +111,27 @@ export default class Individual extends OpenCGAParentClass { * @param {String} field - Comma separated list of fields for which to obtain the distinct values. * @param {Object} [params] - The Object containing the following optional parameters: * @param {String} [params.study] - Study [[user@]project:]study where study and project can be either the ID or UUID. - * @param {String} [params.id] - Comma separated list individual IDs up to a maximum of 100. + * @param {String} [params.id] - Comma separated list individual IDs up to a maximum of 100. Also admits basic regular expressions using + * the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * @param {String} [params.uuid] - Comma separated list individual UUIDs up to a maximum of 100. - * @param {String} [params.name] - Comma separated list individual names up to a maximum of 100. + * @param {String} [params.name] - Comma separated list individual names up to a maximum of 100. Also admits basic regular expressions + * using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * @param {String} [params.familyIds] - Comma separated list of family ids the individuals may belong to. * @param {String} [params.father] - Father ID, name or UUID. * @param {String} [params.mother] - Mother ID, name or UUID. * @param {String} [params.samples] - Sample ID, name or UUID. * @param {String} [params.sex] - Individual sex. - * @param {String} [params.ethnicity] - Individual ethnicity. + * @param {String} [params.ethnicity] - Individual ethnicity. Also admits basic regular expressions using the operator '~', i.e. '~{perl- + * regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * @param {String} [params.dateOfBirth] - Individual date of birth. - * @param {String} [params.disorders] - Comma separated list of disorder ids or names. - * @param {String} [params.phenotypes] - Comma separated list of phenotype ids or names. - * @param {String} [params.populationName] - Population name. - * @param {String} [params.populationSubpopulation] - Subpopulation name. + * @param {String} [params.disorders] - Comma separated list of disorder ids or names. Also admits basic regular expressions using the + * operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + * @param {String} [params.phenotypes] - Comma separated list of phenotype ids or names. Also admits basic regular expressions using the + * operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + * @param {String} [params.populationName] - Population name. Also admits basic regular expressions using the operator '~', i.e. '~{perl- + * regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + * @param {String} [params.populationSubpopulation] - Subpopulation name. Also admits basic regular expressions using the operator '~', + * i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * @param {String} [params.karyotypicSex] - Individual karyotypic sex. * @param {String} [params.lifeStatus] - Individual life status. * @param {String} [params.internalStatus] - Filter by internal status. @@ -155,20 +162,27 @@ export default class Individual extends OpenCGAParentClass { * value is false. * @param {Boolean} [params.flattenAnnotations = "false"] - Flatten the annotations?. The default value is false. * @param {String} [params.study] - Study [[user@]project:]study where study and project can be either the ID or UUID. - * @param {String} [params.id] - Comma separated list individual IDs up to a maximum of 100. + * @param {String} [params.id] - Comma separated list individual IDs up to a maximum of 100. Also admits basic regular expressions using + * the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * @param {String} [params.uuid] - Comma separated list individual UUIDs up to a maximum of 100. - * @param {String} [params.name] - Comma separated list individual names up to a maximum of 100. + * @param {String} [params.name] - Comma separated list individual names up to a maximum of 100. Also admits basic regular expressions + * using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * @param {String} [params.father] - Father ID, name or UUID. * @param {String} [params.mother] - Mother ID, name or UUID. * @param {String} [params.samples] - Sample ID, name or UUID. * @param {String} [params.familyIds] - Comma separated list of family ids the individuals may belong to. * @param {String} [params.sex] - Individual sex. * @param {String} [params.dateOfBirth] - Individual date of birth. - * @param {String} [params.ethnicity] - Individual ethnicity. - * @param {String} [params.disorders] - Comma separated list of disorder ids or names. - * @param {String} [params.phenotypes] - Comma separated list of phenotype ids or names. - * @param {String} [params.populationName] - Population name. - * @param {String} [params.populationSubpopulation] - Subpopulation name. + * @param {String} [params.ethnicity] - Individual ethnicity. Also admits basic regular expressions using the operator '~', i.e. '~{perl- + * regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + * @param {String} [params.disorders] - Comma separated list of disorder ids or names. Also admits basic regular expressions using the + * operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + * @param {String} [params.phenotypes] - Comma separated list of phenotype ids or names. Also admits basic regular expressions using the + * operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + * @param {String} [params.populationName] - Population name. Also admits basic regular expressions using the operator '~', i.e. '~{perl- + * regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. + * @param {String} [params.populationSubpopulation] - Subpopulation name. Also admits basic regular expressions using the operator '~', + * i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * @param {String} [params.karyotypicSex] - Individual karyotypic sex. * @param {String} [params.lifeStatus] - Individual life status. * @param {String} [params.internalStatus] - Filter by internal status. diff --git a/opencga-client/src/main/javascript/Job.js b/opencga-client/src/main/javascript/Job.js index e76d111f0b5..1125c50f9f1 100644 --- a/opencga-client/src/main/javascript/Job.js +++ b/opencga-client/src/main/javascript/Job.js @@ -12,7 +12,7 @@ * WARNING: AUTOGENERATED CODE * * This code was generated by a tool. - * Autogenerated on: 2023-04-18 + * Autogenerated on: 2023-09-08 * * Manual changes to this file may cause unexpected behavior in your application. * Manual changes to this file will be overwritten if the code is regenerated. @@ -85,9 +85,11 @@ export default class Job extends OpenCGAParentClass { * @param {String} [params.study] - Study [[user@]project:]study where study and project can be either the ID or UUID. * @param {Boolean} [params.otherStudies = "false"] - Flag indicating the entries being queried can belong to any related study, not just * the primary one. The default value is false. - * @param {String} [params.id] - Comma separated list of job IDs up to a maximum of 100. + * @param {String} [params.id] - Comma separated list of job IDs up to a maximum of 100. Also admits basic regular expressions using the + * operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * @param {String} [params.uuid] - Comma separated list of job UUIDs up to a maximum of 100. - * @param {String} [params.toolId] - Tool ID executed by the job. + * @param {String} [params.toolId] - Tool ID executed by the job. Also admits basic regular expressions using the operator '~', i.e. + * '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * @param {String} [params.toolType] - Tool type executed by the job [OPERATION, ANALYSIS]. * @param {String} [params.userId] - User that created the job. * @param {String} [params.priority] - Priority of the job. @@ -136,9 +138,11 @@ export default class Job extends OpenCGAParentClass { * @param {String} [params.study] - Study [[user@]project:]study where study and project can be either the ID or UUID. * @param {Boolean} [params.otherStudies = "false"] - Flag indicating the entries being queried can belong to any related study, not just * the primary one. The default value is false. - * @param {String} [params.id] - Comma separated list of job IDs up to a maximum of 100. + * @param {String} [params.id] - Comma separated list of job IDs up to a maximum of 100. Also admits basic regular expressions using the + * operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * @param {String} [params.uuid] - Comma separated list of job UUIDs up to a maximum of 100. - * @param {String} [params.toolId] - Tool ID executed by the job. + * @param {String} [params.toolId] - Tool ID executed by the job. Also admits basic regular expressions using the operator '~', i.e. + * '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * @param {String} [params.toolType] - Tool type executed by the job [OPERATION, ANALYSIS]. * @param {String} [params.userId] - User that created the job. * @param {String} [params.priority] - Priority of the job. @@ -168,7 +172,8 @@ export default class Job extends OpenCGAParentClass { * @param {String} [params.internalStatus] - Filter by internal status. * @param {String} [params.priority] - Priority of the job. * @param {String} [params.userId] - User that created the job. - * @param {String} [params.toolId] - Tool ID executed by the job. + * @param {String} [params.toolId] - Tool ID executed by the job. Also admits basic regular expressions using the operator '~', i.e. + * '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * @returns {Promise} Promise object in the form of RestResponse instance. */ top(params) { diff --git a/opencga-client/src/main/javascript/Meta.js b/opencga-client/src/main/javascript/Meta.js index b0208dd1cfd..ca2c12b459b 100644 --- a/opencga-client/src/main/javascript/Meta.js +++ b/opencga-client/src/main/javascript/Meta.js @@ -12,7 +12,7 @@ * WARNING: AUTOGENERATED CODE * * This code was generated by a tool. - * Autogenerated on: 2023-04-18 + * Autogenerated on: 2023-09-08 * * Manual changes to this file may cause unexpected behavior in your application. * Manual changes to this file will be overwritten if the code is regenerated. diff --git a/opencga-client/src/main/javascript/Project.js b/opencga-client/src/main/javascript/Project.js index 06abda04b57..9ed80c76552 100644 --- a/opencga-client/src/main/javascript/Project.js +++ b/opencga-client/src/main/javascript/Project.js @@ -12,7 +12,7 @@ * WARNING: AUTOGENERATED CODE * * This code was generated by a tool. - * Autogenerated on: 2023-04-18 + * Autogenerated on: 2023-09-08 * * Manual changes to this file may cause unexpected behavior in your application. * Manual changes to this file will be overwritten if the code is regenerated. diff --git a/opencga-client/src/main/javascript/Sample.js b/opencga-client/src/main/javascript/Sample.js index 2c4fdd8956a..ebe4b047ade 100644 --- a/opencga-client/src/main/javascript/Sample.js +++ b/opencga-client/src/main/javascript/Sample.js @@ -12,7 +12,7 @@ * WARNING: AUTOGENERATED CODE * * This code was generated by a tool. - * Autogenerated on: 2023-04-18 + * Autogenerated on: 2023-09-08 * * Manual changes to this file may cause unexpected behavior in your application. * Manual changes to this file will be overwritten if the code is regenerated. @@ -103,7 +103,8 @@ export default class Sample extends OpenCGAParentClass { * @param {String} field - Comma separated list of fields for which to obtain the distinct values. * @param {Object} [params] - The Object containing the following optional parameters: * @param {String} [params.study] - Study [[user@]project:]study where study and project can be either the ID or UUID. - * @param {String} [params.id] - Comma separated list sample IDs up to a maximum of 100. + * @param {String} [params.id] - Comma separated list sample IDs up to a maximum of 100. Also admits basic regular expressions using the + * operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * @param {String} [params.uuid] - Comma separated list sample UUIDs up to a maximum of 100. * @param {Boolean} [params.somatic] - Somatic sample. * @param {String} [params.individualId] - Individual ID or UUID. @@ -120,7 +121,8 @@ export default class Sample extends OpenCGAParentClass { * @param {String} [params.collectionFrom] - Collection from. * @param {String} [params.collectionType] - Collection type. * @param {String} [params.collectionMethod] - Collection method. - * @param {String} [params.phenotypes] - Comma separated list of phenotype ids or names. + * @param {String} [params.phenotypes] - Comma separated list of phenotype ids or names. Also admits basic regular expressions using the + * operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * @param {String} [params.annotation] - Annotation filters. Example: age>30;gender=FEMALE. For more information, please visit * http://docs.opencb.org/display/opencga/AnnotationSets+1.4.0. * @param {String} [params.acl] - Filter entries for which a user has the provided permissions. Format: acl={user}:{permissions}. @@ -173,7 +175,8 @@ export default class Sample extends OpenCGAParentClass { * @param {Boolean} [params.includeIndividual = "false"] - Include Individual object as an attribute. The default value is false. * @param {Boolean} [params.flattenAnnotations = "false"] - Flatten the annotations?. The default value is false. * @param {String} [params.study] - Study [[user@]project:]study where study and project can be either the ID or UUID. - * @param {String} [params.id] - Comma separated list sample IDs up to a maximum of 100. + * @param {String} [params.id] - Comma separated list sample IDs up to a maximum of 100. Also admits basic regular expressions using the + * operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * @param {String} [params.uuid] - Comma separated list sample UUIDs up to a maximum of 100. * @param {Boolean} [params.somatic] - Somatic sample. * @param {String} [params.individualId] - Individual ID or UUID. @@ -190,7 +193,8 @@ export default class Sample extends OpenCGAParentClass { * @param {String} [params.collectionFrom] - Collection from. * @param {String} [params.collectionType] - Collection type. * @param {String} [params.collectionMethod] - Collection method. - * @param {String} [params.phenotypes] - Comma separated list of phenotype ids or names. + * @param {String} [params.phenotypes] - Comma separated list of phenotype ids or names. Also admits basic regular expressions using the + * operator '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search. * @param {String} [params.annotation] - Annotation filters. Example: age>30;gender=FEMALE. For more information, please visit * http://docs.opencb.org/display/opencga/AnnotationSets+1.4.0. * @param {String} [params.acl] - Filter entries for which a user has the provided permissions. Format: acl={user}:{permissions}. diff --git a/opencga-client/src/main/javascript/Study.js b/opencga-client/src/main/javascript/Study.js index 029d4133c82..09159e5bc29 100644 --- a/opencga-client/src/main/javascript/Study.js +++ b/opencga-client/src/main/javascript/Study.js @@ -12,7 +12,7 @@ * WARNING: AUTOGENERATED CODE * * This code was generated by a tool. - * Autogenerated on: 2023-04-18 + * Autogenerated on: 2023-09-08 * * Manual changes to this file may cause unexpected behavior in your application. * Manual changes to this file will be overwritten if the code is regenerated. diff --git a/opencga-client/src/main/javascript/User.js b/opencga-client/src/main/javascript/User.js index fd3b9adaf52..bd11746e1de 100644 --- a/opencga-client/src/main/javascript/User.js +++ b/opencga-client/src/main/javascript/User.js @@ -12,7 +12,7 @@ * WARNING: AUTOGENERATED CODE * * This code was generated by a tool. - * Autogenerated on: 2023-04-18 + * Autogenerated on: 2023-09-08 * * Manual changes to this file may cause unexpected behavior in your application. * Manual changes to this file will be overwritten if the code is regenerated. diff --git a/opencga-client/src/main/javascript/Variant.js b/opencga-client/src/main/javascript/Variant.js index f5f8b2e09a1..34884a86bb7 100644 --- a/opencga-client/src/main/javascript/Variant.js +++ b/opencga-client/src/main/javascript/Variant.js @@ -12,7 +12,7 @@ * WARNING: AUTOGENERATED CODE * * This code was generated by a tool. - * Autogenerated on: 2023-04-18 + * Autogenerated on: 2023-09-08 * * Manual changes to this file may cause unexpected behavior in your application. * Manual changes to this file will be overwritten if the code is regenerated. diff --git a/opencga-client/src/main/javascript/VariantOperation.js b/opencga-client/src/main/javascript/VariantOperation.js index 604e09d9ccf..2ce54e16534 100644 --- a/opencga-client/src/main/javascript/VariantOperation.js +++ b/opencga-client/src/main/javascript/VariantOperation.js @@ -12,7 +12,7 @@ * WARNING: AUTOGENERATED CODE * * This code was generated by a tool. - * Autogenerated on: 2023-04-18 + * Autogenerated on: 2023-09-08 * * Manual changes to this file may cause unexpected behavior in your application. * Manual changes to this file will be overwritten if the code is regenerated. diff --git a/opencga-client/src/main/python/pyopencga/rest_clients/admin_client.py b/opencga-client/src/main/python/pyopencga/rest_clients/admin_client.py index 7048467edf6..53fdc052390 100644 --- a/opencga-client/src/main/python/pyopencga/rest_clients/admin_client.py +++ b/opencga-client/src/main/python/pyopencga/rest_clients/admin_client.py @@ -2,7 +2,7 @@ WARNING: AUTOGENERATED CODE This code was generated by a tool. - Autogenerated on: 2023-04-18 + Autogenerated on: 2023-09-08 Manual changes to this file may cause unexpected behavior in your application. Manual changes to this file will be overwritten if the code is regenerated. @@ -14,7 +14,7 @@ class Admin(_ParentRestClient): """ This class contains methods for the 'Admin' webservices - Client version: 2.8.0-SNAPSHOT + Client version: 2.11.0-SNAPSHOT PATH: /{apiVersion}/admin """ @@ -128,3 +128,16 @@ def sync_users(self, data=None, **options): return self._post(category='admin', resource='sync', subcategory='users', data=data, **options) + def users_update_groups(self, user, data=None, **options): + """ + Add or remove users from existing groups. + PATH: /{apiVersion}/admin/users/{user}/groups/update + + :param dict data: JSON containing the parameters. (REQUIRED) + :param str user: User ID. (REQUIRED) + :param str action: Action to be performed: ADD or REMOVE user to/from + groups. Allowed values: ['ADD REMOVE'] + """ + + return self._post(category='admin/users', resource='update', query_id=user, subcategory='groups', data=data, **options) + diff --git a/opencga-client/src/main/python/pyopencga/rest_clients/alignment_client.py b/opencga-client/src/main/python/pyopencga/rest_clients/alignment_client.py index 826ae8b6957..091948e5f53 100644 --- a/opencga-client/src/main/python/pyopencga/rest_clients/alignment_client.py +++ b/opencga-client/src/main/python/pyopencga/rest_clients/alignment_client.py @@ -2,7 +2,7 @@ WARNING: AUTOGENERATED CODE This code was generated by a tool. - Autogenerated on: 2023-04-18 + Autogenerated on: 2023-09-08 Manual changes to this file may cause unexpected behavior in your application. Manual changes to this file will be overwritten if the code is regenerated. @@ -14,7 +14,7 @@ class Alignment(_ParentRestClient): """ This class contains methods for the 'Analysis - Alignment' webservices - Client version: 2.8.0-SNAPSHOT + Client version: 2.11.0-SNAPSHOT PATH: /{apiVersion}/analysis/alignment """ diff --git a/opencga-client/src/main/python/pyopencga/rest_clients/clinical_analysis_client.py b/opencga-client/src/main/python/pyopencga/rest_clients/clinical_analysis_client.py index e6ced9ecbf3..83ab4dbb7da 100644 --- a/opencga-client/src/main/python/pyopencga/rest_clients/clinical_analysis_client.py +++ b/opencga-client/src/main/python/pyopencga/rest_clients/clinical_analysis_client.py @@ -2,7 +2,7 @@ WARNING: AUTOGENERATED CODE This code was generated by a tool. - Autogenerated on: 2023-04-18 + Autogenerated on: 2023-09-08 Manual changes to this file may cause unexpected behavior in your application. Manual changes to this file will be overwritten if the code is regenerated. @@ -14,7 +14,7 @@ class ClinicalAnalysis(_ParentRestClient): """ This class contains methods for the 'Analysis - Clinical' webservices - Client version: 2.8.0-SNAPSHOT + Client version: 2.11.0-SNAPSHOT PATH: /{apiVersion}/analysis/clinical """ @@ -86,11 +86,16 @@ def distinct(self, field, **options): :param str study: Study [[user@]project:]study where study and project can be either the ID or UUID. :param str id: Comma separated list of Clinical Analysis IDs up to a - maximum of 100. + maximum of 100. Also admits basic regular expressions using the + operator '~', i.e. '~{perl-regex}' e.g. '~value' for case + sensitive, '~/value/i' for case insensitive search. :param str uuid: Comma separated list of Clinical Analysis UUIDs up to a maximum of 100. :param str type: Clinical Analysis type. - :param str disorder: Clinical Analysis disorder. + :param str disorder: Clinical Analysis disorder. Also admits basic + regular expressions using the operator '~', i.e. '~{perl-regex}' + e.g. '~value' for case sensitive, '~/value/i' for case insensitive + search. :param str files: Clinical Analysis files. :param str sample: Sample associated to the proband or any member of a family. @@ -133,12 +138,17 @@ def distinct_interpretation(self, field, **options): :param str study: Study [[user@]project:]study where study and project can be either the ID or UUID. :param str id: Comma separated list of Interpretation IDs up to a - maximum of 100. + maximum of 100. Also admits basic regular expressions using the + operator '~', i.e. '~{perl-regex}' e.g. '~value' for case + sensitive, '~/value/i' for case insensitive search. :param str uuid: Comma separated list of Interpretation UUIDs up to a maximum of 100. :param str clinical_analysis_id: Clinical Analysis id. :param str analyst_id: Analyst ID. - :param str method_name: Interpretation method name. + :param str method_name: Interpretation method name. Also admits basic + regular expressions using the operator '~', i.e. '~{perl-regex}' + e.g. '~value' for case sensitive, '~/value/i' for case insensitive + search. :param str panels: Interpretation panels. :param str primary_findings: Interpretation primary findings. :param str secondary_findings: Interpretation secondary findings. @@ -169,12 +179,17 @@ def search_interpretation(self, **options): :param str study: Study [[user@]project:]study where study and project can be either the ID or UUID. :param str id: Comma separated list of Interpretation IDs up to a - maximum of 100. + maximum of 100. Also admits basic regular expressions using the + operator '~', i.e. '~{perl-regex}' e.g. '~value' for case + sensitive, '~/value/i' for case insensitive search. :param str uuid: Comma separated list of Interpretation UUIDs up to a maximum of 100. :param str clinical_analysis_id: Clinical Analysis id. :param str analyst_id: Analyst ID. - :param str method_name: Interpretation method name. + :param str method_name: Interpretation method name. Also admits basic + regular expressions using the operator '~', i.e. '~{perl-regex}' + e.g. '~value' for case sensitive, '~/value/i' for case insensitive + search. :param str panels: Interpretation panels. :param str primary_findings: Interpretation primary findings. :param str secondary_findings: Interpretation secondary findings. @@ -606,11 +621,16 @@ def search(self, **options): :param str study: Study [[user@]project:]study where study and project can be either the ID or UUID. :param str id: Comma separated list of Clinical Analysis IDs up to a - maximum of 100. + maximum of 100. Also admits basic regular expressions using the + operator '~', i.e. '~{perl-regex}' e.g. '~value' for case + sensitive, '~/value/i' for case insensitive search. :param str uuid: Comma separated list of Clinical Analysis UUIDs up to a maximum of 100. :param str type: Clinical Analysis type. - :param str disorder: Clinical Analysis disorder. + :param str disorder: Clinical Analysis disorder. Also admits basic + regular expressions using the operator '~', i.e. '~{perl-regex}' + e.g. '~value' for case sensitive, '~/value/i' for case insensitive + search. :param str files: Clinical Analysis files. :param str sample: Sample associated to the proband or any member of a family. diff --git a/opencga-client/src/main/python/pyopencga/rest_clients/cohort_client.py b/opencga-client/src/main/python/pyopencga/rest_clients/cohort_client.py index 6c685b9772a..445f4a66826 100644 --- a/opencga-client/src/main/python/pyopencga/rest_clients/cohort_client.py +++ b/opencga-client/src/main/python/pyopencga/rest_clients/cohort_client.py @@ -2,7 +2,7 @@ WARNING: AUTOGENERATED CODE This code was generated by a tool. - Autogenerated on: 2023-04-18 + Autogenerated on: 2023-09-08 Manual changes to this file may cause unexpected behavior in your application. Manual changes to this file will be overwritten if the code is regenerated. @@ -14,7 +14,7 @@ class Cohort(_ParentRestClient): """ This class contains methods for the 'Cohorts' webservices - Client version: 2.8.0-SNAPSHOT + Client version: 2.11.0-SNAPSHOT PATH: /{apiVersion}/cohorts """ @@ -121,9 +121,13 @@ def distinct(self, field, **options): :param str study: Study [[user@]project:]study where study and project can be either the ID or UUID. :param str id: Comma separated list of cohort IDs up to a maximum of - 100. + 100. Also admits basic regular expressions using the operator '~', + i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' + for case insensitive search. :param str name: Comma separated list of cohort names up to a maximum - of 100. + of 100. Also admits basic regular expressions using the operator + '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, + '~/value/i' for case insensitive search. :param str uuid: Comma separated list of cohort IDs up to a maximum of 100. :param str type: Cohort type. @@ -166,6 +170,9 @@ def generate(self, data=None, **options): :param str internal_status: Filter by internal status. :param str status: Filter by status. :param str phenotypes: Comma separated list of phenotype ids or names. + Also admits basic regular expressions using the operator '~', i.e. + '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for + case insensitive search. :param str annotation: Annotation filters. Example: age>30;gender=FEMALE. For more information, please visit http://docs.opencb.org/display/opencga/AnnotationSets+1.4.0. @@ -200,9 +207,13 @@ def search(self, **options): :param str study: Study [[user@]project:]study where study and project can be either the ID or UUID. :param str id: Comma separated list of cohort IDs up to a maximum of - 100. + 100. Also admits basic regular expressions using the operator '~', + i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' + for case insensitive search. :param str name: Comma separated list of cohort names up to a maximum - of 100. + of 100. Also admits basic regular expressions using the operator + '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, + '~/value/i' for case insensitive search. :param str uuid: Comma separated list of cohort IDs up to a maximum of 100. :param str type: Cohort type. diff --git a/opencga-client/src/main/python/pyopencga/rest_clients/disease_panel_client.py b/opencga-client/src/main/python/pyopencga/rest_clients/disease_panel_client.py index 4ec0b95c8fa..fdf80361f55 100644 --- a/opencga-client/src/main/python/pyopencga/rest_clients/disease_panel_client.py +++ b/opencga-client/src/main/python/pyopencga/rest_clients/disease_panel_client.py @@ -2,7 +2,7 @@ WARNING: AUTOGENERATED CODE This code was generated by a tool. - Autogenerated on: 2023-04-18 + Autogenerated on: 2023-09-08 Manual changes to this file may cause unexpected behavior in your application. Manual changes to this file will be overwritten if the code is regenerated. @@ -14,7 +14,7 @@ class DiseasePanel(_ParentRestClient): """ This class contains methods for the 'Disease Panels' webservices - Client version: 2.8.0-SNAPSHOT + Client version: 2.11.0-SNAPSHOT PATH: /{apiVersion}/panels """ @@ -67,19 +67,42 @@ def distinct(self, field, **options): :param str study: Study [[user@]project:]study where study and project can be either the ID or UUID. :param str id: Comma separated list of panel IDs up to a maximum of - 100. + 100. Also admits basic regular expressions using the operator '~', + i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' + for case insensitive search. :param str uuid: Comma separated list of panel UUIDs up to a maximum of 100. :param str name: Comma separated list of panel names up to a maximum - of 100. + of 100. Also admits basic regular expressions using the operator + '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, + '~/value/i' for case insensitive search. :param str internal_status: Filter by internal status. :param str disorders: Comma separated list of disorder ids or names. - :param str variants: Comma separated list of variant ids. - :param str genes: Comma separated list of gene ids. + Also admits basic regular expressions using the operator '~', i.e. + '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for + case insensitive search.. Also admits basic regular expressions + using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case + sensitive, '~/value/i' for case insensitive search. + :param str variants: Comma separated list of variant ids. Also admits + basic regular expressions using the operator '~', i.e. + '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for + case insensitive search. + :param str genes: Comma separated list of gene ids. Also admits basic + regular expressions using the operator '~', i.e. '~{perl-regex}' + e.g. '~value' for case sensitive, '~/value/i' for case insensitive + search. :param str source: Comma separated list of source ids or names. - :param str regions: Comma separated list of regions. - :param str categories: Comma separated list of category names. - :param str tags: Panel tags. + :param str regions: Comma separated list of regions. Also admits basic + regular expressions using the operator '~', i.e. '~{perl-regex}' + e.g. '~value' for case sensitive, '~/value/i' for case insensitive + search. + :param str categories: Comma separated list of category names. Also + admits basic regular expressions using the operator '~', i.e. + '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for + case insensitive search. + :param str tags: Panel tags. Also admits basic regular expressions + using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case + sensitive, '~/value/i' for case insensitive search. :param bool deleted: Boolean to retrieve deleted entries. :param str status: Filter by status. :param str creation_date: Creation date. Format: yyyyMMddHHmmss. @@ -133,19 +156,42 @@ def search(self, **options): :param str study: Study [[user@]project:]study where study and project can be either the ID or UUID. :param str id: Comma separated list of panel IDs up to a maximum of - 100. + 100. Also admits basic regular expressions using the operator '~', + i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' + for case insensitive search. :param str uuid: Comma separated list of panel UUIDs up to a maximum of 100. :param str name: Comma separated list of panel names up to a maximum - of 100. + of 100. Also admits basic regular expressions using the operator + '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, + '~/value/i' for case insensitive search. :param str internal_status: Filter by internal status. :param str disorders: Comma separated list of disorder ids or names. - :param str variants: Comma separated list of variant ids. - :param str genes: Comma separated list of gene ids. + Also admits basic regular expressions using the operator '~', i.e. + '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for + case insensitive search.. Also admits basic regular expressions + using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case + sensitive, '~/value/i' for case insensitive search. + :param str variants: Comma separated list of variant ids. Also admits + basic regular expressions using the operator '~', i.e. + '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for + case insensitive search. + :param str genes: Comma separated list of gene ids. Also admits basic + regular expressions using the operator '~', i.e. '~{perl-regex}' + e.g. '~value' for case sensitive, '~/value/i' for case insensitive + search. :param str source: Comma separated list of source ids or names. - :param str regions: Comma separated list of regions. - :param str categories: Comma separated list of category names. - :param str tags: Panel tags. + :param str regions: Comma separated list of regions. Also admits basic + regular expressions using the operator '~', i.e. '~{perl-regex}' + e.g. '~value' for case sensitive, '~/value/i' for case insensitive + search. + :param str categories: Comma separated list of category names. Also + admits basic regular expressions using the operator '~', i.e. + '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for + case insensitive search. + :param str tags: Panel tags. Also admits basic regular expressions + using the operator '~', i.e. '~{perl-regex}' e.g. '~value' for case + sensitive, '~/value/i' for case insensitive search. :param bool deleted: Boolean to retrieve deleted entries. :param str status: Filter by status. :param str creation_date: Creation date. Format: yyyyMMddHHmmss. diff --git a/opencga-client/src/main/python/pyopencga/rest_clients/family_client.py b/opencga-client/src/main/python/pyopencga/rest_clients/family_client.py index ab94612b324..6642396fb41 100644 --- a/opencga-client/src/main/python/pyopencga/rest_clients/family_client.py +++ b/opencga-client/src/main/python/pyopencga/rest_clients/family_client.py @@ -2,7 +2,7 @@ WARNING: AUTOGENERATED CODE This code was generated by a tool. - Autogenerated on: 2023-04-18 + Autogenerated on: 2023-09-08 Manual changes to this file may cause unexpected behavior in your application. Manual changes to this file will be overwritten if the code is regenerated. @@ -14,7 +14,7 @@ class Family(_ParentRestClient): """ This class contains methods for the 'Families' webservices - Client version: 2.8.0-SNAPSHOT + Client version: 2.11.0-SNAPSHOT PATH: /{apiVersion}/families """ @@ -124,8 +124,13 @@ def distinct(self, field, **options): :param str study: Study [[user@]project:]study where study and project can be either the ID or UUID. :param str id: Comma separated list family IDs up to a maximum of 100. + Also admits basic regular expressions using the operator '~', i.e. + '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for + case insensitive search. :param str name: Comma separated list family names up to a maximum of - 100. + 100. Also admits basic regular expressions using the operator '~', + i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' + for case insensitive search. :param str uuid: Comma separated list family UUIDs up to a maximum of 100. :param str members: Comma separated list of family members. @@ -133,7 +138,13 @@ def distinct(self, field, **options): members). :param str samples: Comma separated list of member's samples. :param str phenotypes: Comma separated list of phenotype ids or names. + Also admits basic regular expressions using the operator '~', i.e. + '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for + case insensitive search. :param str disorders: Comma separated list of disorder ids or names. + Also admits basic regular expressions using the operator '~', i.e. + '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for + case insensitive search. :param str creation_date: Creation date. Format: yyyyMMddHHmmss. Examples: >2018, 2017-2018, <201805. :param str modification_date: Modification date. Format: @@ -174,8 +185,13 @@ def search(self, **options): :param str study: Study [[user@]project:]study where study and project can be either the ID or UUID. :param str id: Comma separated list family IDs up to a maximum of 100. + Also admits basic regular expressions using the operator '~', i.e. + '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for + case insensitive search. :param str name: Comma separated list family names up to a maximum of - 100. + 100. Also admits basic regular expressions using the operator '~', + i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' + for case insensitive search. :param str uuid: Comma separated list family UUIDs up to a maximum of 100. :param str members: Comma separated list of family members. @@ -183,7 +199,13 @@ def search(self, **options): members). :param str samples: Comma separated list of member's samples. :param str phenotypes: Comma separated list of phenotype ids or names. + Also admits basic regular expressions using the operator '~', i.e. + '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for + case insensitive search. :param str disorders: Comma separated list of disorder ids or names. + Also admits basic regular expressions using the operator '~', i.e. + '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for + case insensitive search. :param str creation_date: Creation date. Format: yyyyMMddHHmmss. Examples: >2018, 2017-2018, <201805. :param str modification_date: Modification date. Format: diff --git a/opencga-client/src/main/python/pyopencga/rest_clients/file_client.py b/opencga-client/src/main/python/pyopencga/rest_clients/file_client.py index 0db45804764..45719c4b213 100644 --- a/opencga-client/src/main/python/pyopencga/rest_clients/file_client.py +++ b/opencga-client/src/main/python/pyopencga/rest_clients/file_client.py @@ -2,7 +2,7 @@ WARNING: AUTOGENERATED CODE This code was generated by a tool. - Autogenerated on: 2023-04-18 + Autogenerated on: 2023-09-08 Manual changes to this file may cause unexpected behavior in your application. Manual changes to this file will be overwritten if the code is regenerated. @@ -14,7 +14,7 @@ class File(_ParentRestClient): """ This class contains methods for the 'Files' webservices - Client version: 2.8.0-SNAPSHOT + Client version: 2.11.0-SNAPSHOT PATH: /{apiVersion}/files """ @@ -129,12 +129,23 @@ def distinct(self, field, **options): :param str study: Study [[user@]project:]study where study and project can be either the ID or UUID. :param str id: Comma separated list of file IDs up to a maximum of - 100. + 100. Also admits basic regular expressions using the operator '~', + i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' + for case insensitive search. :param str uuid: Comma separated list file UUIDs up to a maximum of 100. - :param str name: Comma separated list of file names. - :param str path: Comma separated list of paths. - :param str uri: Comma separated list of uris. + :param str name: Comma separated list of file names. Also admits basic + regular expressions using the operator '~', i.e. '~{perl-regex}' + e.g. '~value' for case sensitive, '~/value/i' for case insensitive + search. + :param str path: Comma separated list of paths. Also admits basic + regular expressions using the operator '~', i.e. '~{perl-regex}' + e.g. '~value' for case sensitive, '~/value/i' for case insensitive + search. + :param str uri: Comma separated list of uris. Also admits basic + regular expressions using the operator '~', i.e. '~{perl-regex}' + e.g. '~value' for case sensitive, '~/value/i' for case insensitive + search. :param str type: File type, either FILE or DIRECTORY. :param str bioformat: Comma separated Bioformat values. For existing Bioformats see files/bioformats. @@ -154,7 +165,9 @@ def distinct(self, field, **options): :param str modification_date: Modification date. Format: yyyyMMddHHmmss. Examples: >2018, 2017-2018, <201805. :param str description: Description. - :param str tags: Tags. + :param str tags: Tags. Also admits basic regular expressions using the + operator '~', i.e. '~{perl-regex}' e.g. '~value' for case + sensitive, '~/value/i' for case insensitive search. :param str size: File size. :param str sample_ids: Comma separated list sample IDs or UUIDs up to a maximum of 100. @@ -269,12 +282,23 @@ def search(self, **options): :param str study: Study [[user@]project:]study where study and project can be either the ID or UUID. :param str id: Comma separated list of file IDs up to a maximum of - 100. + 100. Also admits basic regular expressions using the operator '~', + i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' + for case insensitive search. :param str uuid: Comma separated list file UUIDs up to a maximum of 100. - :param str name: Comma separated list of file names. - :param str path: Comma separated list of paths. - :param str uri: Comma separated list of uris. + :param str name: Comma separated list of file names. Also admits basic + regular expressions using the operator '~', i.e. '~{perl-regex}' + e.g. '~value' for case sensitive, '~/value/i' for case insensitive + search. + :param str path: Comma separated list of paths. Also admits basic + regular expressions using the operator '~', i.e. '~{perl-regex}' + e.g. '~value' for case sensitive, '~/value/i' for case insensitive + search. + :param str uri: Comma separated list of uris. Also admits basic + regular expressions using the operator '~', i.e. '~{perl-regex}' + e.g. '~value' for case sensitive, '~/value/i' for case insensitive + search. :param str type: File type, either FILE or DIRECTORY. :param str bioformat: Comma separated Bioformat values. For existing Bioformats see files/bioformats. @@ -294,7 +318,9 @@ def search(self, **options): :param str modification_date: Modification date. Format: yyyyMMddHHmmss. Examples: >2018, 2017-2018, <201805. :param str description: Description. - :param str tags: Tags. + :param str tags: Tags. Also admits basic regular expressions using the + operator '~', i.e. '~{perl-regex}' e.g. '~value' for case + sensitive, '~/value/i' for case insensitive search. :param str size: File size. :param str sample_ids: Comma separated list sample IDs or UUIDs up to a maximum of 100. diff --git a/opencga-client/src/main/python/pyopencga/rest_clients/ga4gh_client.py b/opencga-client/src/main/python/pyopencga/rest_clients/ga4gh_client.py index 0b1c0df4afa..a7ec7e99b6c 100644 --- a/opencga-client/src/main/python/pyopencga/rest_clients/ga4gh_client.py +++ b/opencga-client/src/main/python/pyopencga/rest_clients/ga4gh_client.py @@ -2,7 +2,7 @@ WARNING: AUTOGENERATED CODE This code was generated by a tool. - Autogenerated on: 2023-04-18 + Autogenerated on: 2023-09-08 Manual changes to this file may cause unexpected behavior in your application. Manual changes to this file will be overwritten if the code is regenerated. @@ -14,7 +14,7 @@ class GA4GH(_ParentRestClient): """ This class contains methods for the 'GA4GH' webservices - Client version: 2.8.0-SNAPSHOT + Client version: 2.11.0-SNAPSHOT PATH: /{apiVersion}/ga4gh """ diff --git a/opencga-client/src/main/python/pyopencga/rest_clients/individual_client.py b/opencga-client/src/main/python/pyopencga/rest_clients/individual_client.py index e4830dbe5ab..044a326dd67 100644 --- a/opencga-client/src/main/python/pyopencga/rest_clients/individual_client.py +++ b/opencga-client/src/main/python/pyopencga/rest_clients/individual_client.py @@ -2,7 +2,7 @@ WARNING: AUTOGENERATED CODE This code was generated by a tool. - Autogenerated on: 2023-04-18 + Autogenerated on: 2023-09-08 Manual changes to this file may cause unexpected behavior in your application. Manual changes to this file will be overwritten if the code is regenerated. @@ -14,7 +14,7 @@ class Individual(_ParentRestClient): """ This class contains methods for the 'Individuals' webservices - Client version: 2.8.0-SNAPSHOT + Client version: 2.11.0-SNAPSHOT PATH: /{apiVersion}/individuals """ @@ -132,23 +132,42 @@ def distinct(self, field, **options): :param str study: Study [[user@]project:]study where study and project can be either the ID or UUID. :param str id: Comma separated list individual IDs up to a maximum of - 100. + 100. Also admits basic regular expressions using the operator '~', + i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' + for case insensitive search. :param str uuid: Comma separated list individual UUIDs up to a maximum of 100. :param str name: Comma separated list individual names up to a maximum - of 100. + of 100. Also admits basic regular expressions using the operator + '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, + '~/value/i' for case insensitive search. :param str family_ids: Comma separated list of family ids the individuals may belong to. :param str father: Father ID, name or UUID. :param str mother: Mother ID, name or UUID. :param str samples: Sample ID, name or UUID. :param str sex: Individual sex. - :param str ethnicity: Individual ethnicity. + :param str ethnicity: Individual ethnicity. Also admits basic regular + expressions using the operator '~', i.e. '~{perl-regex}' e.g. + '~value' for case sensitive, '~/value/i' for case insensitive + search. :param str date_of_birth: Individual date of birth. :param str disorders: Comma separated list of disorder ids or names. + Also admits basic regular expressions using the operator '~', i.e. + '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for + case insensitive search. :param str phenotypes: Comma separated list of phenotype ids or names. - :param str population_name: Population name. - :param str population_subpopulation: Subpopulation name. + Also admits basic regular expressions using the operator '~', i.e. + '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for + case insensitive search. + :param str population_name: Population name. Also admits basic regular + expressions using the operator '~', i.e. '~{perl-regex}' e.g. + '~value' for case sensitive, '~/value/i' for case insensitive + search. + :param str population_subpopulation: Subpopulation name. Also admits + basic regular expressions using the operator '~', i.e. + '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for + case insensitive search. :param str karyotypic_sex: Individual karyotypic sex. :param str life_status: Individual life status. :param str internal_status: Filter by internal status. @@ -191,11 +210,15 @@ def search(self, **options): :param str study: Study [[user@]project:]study where study and project can be either the ID or UUID. :param str id: Comma separated list individual IDs up to a maximum of - 100. + 100. Also admits basic regular expressions using the operator '~', + i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' + for case insensitive search. :param str uuid: Comma separated list individual UUIDs up to a maximum of 100. :param str name: Comma separated list individual names up to a maximum - of 100. + of 100. Also admits basic regular expressions using the operator + '~', i.e. '~{perl-regex}' e.g. '~value' for case sensitive, + '~/value/i' for case insensitive search. :param str father: Father ID, name or UUID. :param str mother: Mother ID, name or UUID. :param str samples: Sample ID, name or UUID. @@ -203,11 +226,26 @@ def search(self, **options): individuals may belong to. :param str sex: Individual sex. :param str date_of_birth: Individual date of birth. - :param str ethnicity: Individual ethnicity. + :param str ethnicity: Individual ethnicity. Also admits basic regular + expressions using the operator '~', i.e. '~{perl-regex}' e.g. + '~value' for case sensitive, '~/value/i' for case insensitive + search. :param str disorders: Comma separated list of disorder ids or names. + Also admits basic regular expressions using the operator '~', i.e. + '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for + case insensitive search. :param str phenotypes: Comma separated list of phenotype ids or names. - :param str population_name: Population name. - :param str population_subpopulation: Subpopulation name. + Also admits basic regular expressions using the operator '~', i.e. + '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for + case insensitive search. + :param str population_name: Population name. Also admits basic regular + expressions using the operator '~', i.e. '~{perl-regex}' e.g. + '~value' for case sensitive, '~/value/i' for case insensitive + search. + :param str population_subpopulation: Subpopulation name. Also admits + basic regular expressions using the operator '~', i.e. + '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for + case insensitive search. :param str karyotypic_sex: Individual karyotypic sex. :param str life_status: Individual life status. :param str internal_status: Filter by internal status. diff --git a/opencga-client/src/main/python/pyopencga/rest_clients/job_client.py b/opencga-client/src/main/python/pyopencga/rest_clients/job_client.py index fe0a9ec74d3..eeda7834cd9 100644 --- a/opencga-client/src/main/python/pyopencga/rest_clients/job_client.py +++ b/opencga-client/src/main/python/pyopencga/rest_clients/job_client.py @@ -2,7 +2,7 @@ WARNING: AUTOGENERATED CODE This code was generated by a tool. - Autogenerated on: 2023-04-18 + Autogenerated on: 2023-09-08 Manual changes to this file may cause unexpected behavior in your application. Manual changes to this file will be overwritten if the code is regenerated. @@ -14,7 +14,7 @@ class Job(_ParentRestClient): """ This class contains methods for the 'Jobs' webservices - Client version: 2.8.0-SNAPSHOT + Client version: 2.11.0-SNAPSHOT PATH: /{apiVersion}/jobs """ @@ -92,9 +92,15 @@ def distinct(self, field, **options): :param bool other_studies: Flag indicating the entries being queried can belong to any related study, not just the primary one. :param str id: Comma separated list of job IDs up to a maximum of 100. + Also admits basic regular expressions using the operator '~', i.e. + '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for + case insensitive search. :param str uuid: Comma separated list of job UUIDs up to a maximum of 100. - :param str tool_id: Tool ID executed by the job. + :param str tool_id: Tool ID executed by the job. Also admits basic + regular expressions using the operator '~', i.e. '~{perl-regex}' + e.g. '~value' for case sensitive, '~/value/i' for case insensitive + search. :param str tool_type: Tool type executed by the job [OPERATION, ANALYSIS]. :param str user_id: User that created the job. @@ -157,9 +163,15 @@ def search(self, **options): :param bool other_studies: Flag indicating the entries being queried can belong to any related study, not just the primary one. :param str id: Comma separated list of job IDs up to a maximum of 100. + Also admits basic regular expressions using the operator '~', i.e. + '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for + case insensitive search. :param str uuid: Comma separated list of job UUIDs up to a maximum of 100. - :param str tool_id: Tool ID executed by the job. + :param str tool_id: Tool ID executed by the job. Also admits basic + regular expressions using the operator '~', i.e. '~{perl-regex}' + e.g. '~value' for case sensitive, '~/value/i' for case insensitive + search. :param str tool_type: Tool type executed by the job [OPERATION, ANALYSIS]. :param str user_id: User that created the job. @@ -196,7 +208,10 @@ def top(self, **options): :param str internal_status: Filter by internal status. :param str priority: Priority of the job. :param str user_id: User that created the job. - :param str tool_id: Tool ID executed by the job. + :param str tool_id: Tool ID executed by the job. Also admits basic + regular expressions using the operator '~', i.e. '~{perl-regex}' + e.g. '~value' for case sensitive, '~/value/i' for case insensitive + search. """ return self._get(category='jobs', resource='top', **options) diff --git a/opencga-client/src/main/python/pyopencga/rest_clients/meta_client.py b/opencga-client/src/main/python/pyopencga/rest_clients/meta_client.py index 96982cc0e3d..bee9670a694 100644 --- a/opencga-client/src/main/python/pyopencga/rest_clients/meta_client.py +++ b/opencga-client/src/main/python/pyopencga/rest_clients/meta_client.py @@ -2,7 +2,7 @@ WARNING: AUTOGENERATED CODE This code was generated by a tool. - Autogenerated on: 2023-04-18 + Autogenerated on: 2023-09-08 Manual changes to this file may cause unexpected behavior in your application. Manual changes to this file will be overwritten if the code is regenerated. @@ -14,7 +14,7 @@ class Meta(_ParentRestClient): """ This class contains methods for the 'Meta' webservices - Client version: 2.8.0-SNAPSHOT + Client version: 2.11.0-SNAPSHOT PATH: /{apiVersion}/meta """ diff --git a/opencga-client/src/main/python/pyopencga/rest_clients/project_client.py b/opencga-client/src/main/python/pyopencga/rest_clients/project_client.py index d28ecf4d846..c3b4c0a9e38 100644 --- a/opencga-client/src/main/python/pyopencga/rest_clients/project_client.py +++ b/opencga-client/src/main/python/pyopencga/rest_clients/project_client.py @@ -2,7 +2,7 @@ WARNING: AUTOGENERATED CODE This code was generated by a tool. - Autogenerated on: 2023-04-18 + Autogenerated on: 2023-09-08 Manual changes to this file may cause unexpected behavior in your application. Manual changes to this file will be overwritten if the code is regenerated. @@ -14,7 +14,7 @@ class Project(_ParentRestClient): """ This class contains methods for the 'Projects' webservices - Client version: 2.8.0-SNAPSHOT + Client version: 2.11.0-SNAPSHOT PATH: /{apiVersion}/projects """ diff --git a/opencga-client/src/main/python/pyopencga/rest_clients/sample_client.py b/opencga-client/src/main/python/pyopencga/rest_clients/sample_client.py index dca81d4e863..7cf520ad6c0 100644 --- a/opencga-client/src/main/python/pyopencga/rest_clients/sample_client.py +++ b/opencga-client/src/main/python/pyopencga/rest_clients/sample_client.py @@ -2,7 +2,7 @@ WARNING: AUTOGENERATED CODE This code was generated by a tool. - Autogenerated on: 2023-04-18 + Autogenerated on: 2023-09-08 Manual changes to this file may cause unexpected behavior in your application. Manual changes to this file will be overwritten if the code is regenerated. @@ -14,7 +14,7 @@ class Sample(_ParentRestClient): """ This class contains methods for the 'Samples' webservices - Client version: 2.8.0-SNAPSHOT + Client version: 2.11.0-SNAPSHOT PATH: /{apiVersion}/samples """ @@ -122,6 +122,9 @@ def distinct(self, field, **options): :param str study: Study [[user@]project:]study where study and project can be either the ID or UUID. :param str id: Comma separated list sample IDs up to a maximum of 100. + Also admits basic regular expressions using the operator '~', i.e. + '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for + case insensitive search. :param str uuid: Comma separated list sample UUIDs up to a maximum of 100. :param bool somatic: Somatic sample. @@ -143,6 +146,9 @@ def distinct(self, field, **options): :param str collection_type: Collection type. :param str collection_method: Collection method. :param str phenotypes: Comma separated list of phenotype ids or names. + Also admits basic regular expressions using the operator '~', i.e. + '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for + case insensitive search. :param str annotation: Annotation filters. Example: age>30;gender=FEMALE. For more information, please visit http://docs.opencb.org/display/opencga/AnnotationSets+1.4.0. @@ -215,6 +221,9 @@ def search(self, **options): :param str study: Study [[user@]project:]study where study and project can be either the ID or UUID. :param str id: Comma separated list sample IDs up to a maximum of 100. + Also admits basic regular expressions using the operator '~', i.e. + '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for + case insensitive search. :param str uuid: Comma separated list sample UUIDs up to a maximum of 100. :param bool somatic: Somatic sample. @@ -236,6 +245,9 @@ def search(self, **options): :param str collection_type: Collection type. :param str collection_method: Collection method. :param str phenotypes: Comma separated list of phenotype ids or names. + Also admits basic regular expressions using the operator '~', i.e. + '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for + case insensitive search. :param str annotation: Annotation filters. Example: age>30;gender=FEMALE. For more information, please visit http://docs.opencb.org/display/opencga/AnnotationSets+1.4.0. diff --git a/opencga-client/src/main/python/pyopencga/rest_clients/study_client.py b/opencga-client/src/main/python/pyopencga/rest_clients/study_client.py index 53849f904d7..09a0d3d5e96 100644 --- a/opencga-client/src/main/python/pyopencga/rest_clients/study_client.py +++ b/opencga-client/src/main/python/pyopencga/rest_clients/study_client.py @@ -2,7 +2,7 @@ WARNING: AUTOGENERATED CODE This code was generated by a tool. - Autogenerated on: 2023-04-18 + Autogenerated on: 2023-09-08 Manual changes to this file may cause unexpected behavior in your application. Manual changes to this file will be overwritten if the code is regenerated. @@ -14,7 +14,7 @@ class Study(_ParentRestClient): """ This class contains methods for the 'Studies' webservices - Client version: 2.8.0-SNAPSHOT + Client version: 2.11.0-SNAPSHOT PATH: /{apiVersion}/studies """ diff --git a/opencga-client/src/main/python/pyopencga/rest_clients/user_client.py b/opencga-client/src/main/python/pyopencga/rest_clients/user_client.py index 0a446be7d9a..c05e00b0e30 100644 --- a/opencga-client/src/main/python/pyopencga/rest_clients/user_client.py +++ b/opencga-client/src/main/python/pyopencga/rest_clients/user_client.py @@ -2,7 +2,7 @@ WARNING: AUTOGENERATED CODE This code was generated by a tool. - Autogenerated on: 2023-04-18 + Autogenerated on: 2023-09-08 Manual changes to this file may cause unexpected behavior in your application. Manual changes to this file will be overwritten if the code is regenerated. @@ -14,7 +14,7 @@ class User(_ParentRestClient): """ This class contains methods for the 'Users' webservices - Client version: 2.8.0-SNAPSHOT + Client version: 2.11.0-SNAPSHOT PATH: /{apiVersion}/users """ diff --git a/opencga-client/src/main/python/pyopencga/rest_clients/variant_client.py b/opencga-client/src/main/python/pyopencga/rest_clients/variant_client.py index cc233157566..7a2081d3bbb 100644 --- a/opencga-client/src/main/python/pyopencga/rest_clients/variant_client.py +++ b/opencga-client/src/main/python/pyopencga/rest_clients/variant_client.py @@ -2,7 +2,7 @@ WARNING: AUTOGENERATED CODE This code was generated by a tool. - Autogenerated on: 2023-04-18 + Autogenerated on: 2023-09-08 Manual changes to this file may cause unexpected behavior in your application. Manual changes to this file will be overwritten if the code is regenerated. @@ -14,7 +14,7 @@ class Variant(_ParentRestClient): """ This class contains methods for the 'Analysis - Variant' webservices - Client version: 2.8.0-SNAPSHOT + Client version: 2.11.0-SNAPSHOT PATH: /{apiVersion}/analysis/variant """ diff --git a/opencga-client/src/main/python/pyopencga/rest_clients/variant_operation_client.py b/opencga-client/src/main/python/pyopencga/rest_clients/variant_operation_client.py index 80eb4b8c973..775c3130a2b 100644 --- a/opencga-client/src/main/python/pyopencga/rest_clients/variant_operation_client.py +++ b/opencga-client/src/main/python/pyopencga/rest_clients/variant_operation_client.py @@ -2,7 +2,7 @@ WARNING: AUTOGENERATED CODE This code was generated by a tool. - Autogenerated on: 2023-04-18 + Autogenerated on: 2023-09-08 Manual changes to this file may cause unexpected behavior in your application. Manual changes to this file will be overwritten if the code is regenerated. @@ -14,7 +14,7 @@ class VariantOperation(_ParentRestClient): """ This class contains methods for the 'Operations - Variant Storage' webservices - Client version: 2.8.0-SNAPSHOT + Client version: 2.11.0-SNAPSHOT PATH: /{apiVersion}/operation """ diff --git a/opencga-clinical/pom.xml b/opencga-clinical/pom.xml index d7c383eec63..de52a8ef4e1 100644 --- a/opencga-clinical/pom.xml +++ b/opencga-clinical/pom.xml @@ -5,7 +5,7 @@ org.opencb.opencga opencga - 2.10.0-SNAPSHOT + 2.11.0-SNAPSHOT ../pom.xml 4.0.0 diff --git a/opencga-core/pom.xml b/opencga-core/pom.xml index b23641a3dbd..e2d8fc127e4 100644 --- a/opencga-core/pom.xml +++ b/opencga-core/pom.xml @@ -22,7 +22,7 @@ org.opencb.opencga opencga - 2.10.0-SNAPSHOT + 2.11.0-SNAPSHOT ../pom.xml diff --git a/opencga-core/src/main/java/org/opencb/opencga/core/api/ParamConstants.java b/opencga-core/src/main/java/org/opencb/opencga/core/api/ParamConstants.java index b65214a9ba4..ebcfa07153c 100644 --- a/opencga-core/src/main/java/org/opencb/opencga/core/api/ParamConstants.java +++ b/opencga-core/src/main/java/org/opencb/opencga/core/api/ParamConstants.java @@ -38,6 +38,8 @@ public class ParamConstants { public static final String RELEASE_DESCRIPTION = "Release when it was created"; public static final String INTERNAL_STATUS_PARAM = "internalStatus"; public static final String INTERNAL_STATUS_DESCRIPTION = "Filter by internal status"; + private static final String REGEX_SUPPORT = ". Also admits basic regular expressions using the operator '~', " + + "i.e. '~{perl-regex}' e.g. '~value' for case sensitive, '~/value/i' for case insensitive search."; @Deprecated // Use INTERNAL_VARIANT_INDEX_STATUS_PARAM public static final String INTERNAL_INDEX_STATUS_PARAM = "internalIndexStatus"; public static final String INTERNAL_VARIANT_INDEX_STATUS_PARAM = "internalVariantIndexStatus"; @@ -66,9 +68,9 @@ public class ParamConstants { public static final String DISTINCT_FIELD_PARAM = "field"; public static final String DISTINCT_FIELD_DESCRIPTION = "Comma separated list of fields for which to obtain the distinct values"; public static final String PHENOTYPES_PARAM = "phenotypes"; - public static final String PHENOTYPES_DESCRIPTION = "Comma separated list of phenotype ids or names"; + public static final String PHENOTYPES_DESCRIPTION = "Comma separated list of phenotype ids or names" + REGEX_SUPPORT; public static final String DISORDERS_PARAM = "disorders"; - public static final String DISORDERS_DESCRIPTION = "Comma separated list of disorder ids or names"; + public static final String DISORDERS_DESCRIPTION = "Comma separated list of disorder ids or names" + REGEX_SUPPORT; public static final String BODY_PARAM = "body"; public static final String OVERWRITE = "overwrite"; @@ -76,7 +78,7 @@ public class ParamConstants { public static final String CELLBASE_URL = "https://ws.zettagenomics.com/cellbase"; public static final String CELLBASE_VERSION = "v5.1"; public static final String CELLBASE_DATA_RELEASE = "2"; - public static final String CELLBASE_TOKEN = ""; + public static final String CELLBASE_APIKEY = ""; public static final String POP_FREQ_1000G_CB_V4 = "1kG_phase3"; public static final String POP_FREQ_1000G_CB_V5 = "1000G"; @@ -169,12 +171,12 @@ public class ParamConstants { + "exception whenever one of the entries looked for cannot be shown for whichever reason"; public static final String FILE_ID_DESCRIPTION = "File ID"; public static final String FILE_NAME_DESCRIPTION = "File name"; - public static final String FILE_NAMES_DESCRIPTION = "Comma separated list of file names"; + public static final String FILE_NAMES_DESCRIPTION = "Comma separated list of file names" + REGEX_SUPPORT; // --------------------------------------------- public static final String FILE_PATH_PARAM = "path"; public static final String FILE_PATH_DESCRIPTION = "File path"; - public static final String FILE_PATHS_DESCRIPTION = "Comma separated list of paths"; - public static final String FILE_URIS_DESCRIPTION = "Comma separated list of uris"; + public static final String FILE_PATHS_DESCRIPTION = "Comma separated list of paths" + REGEX_SUPPORT; + public static final String FILE_URIS_DESCRIPTION = "Comma separated list of uris" + REGEX_SUPPORT; public static final String FILE_TYPE_DESCRIPTION = "File type, either FILE or DIRECTORY"; public static final String FILE_FORMAT_DESCRIPTION = "Comma separated Format values. For existing Formats see files/formats"; public static final String FILE_EXTERNAL_DESCRIPTION = "Boolean field indicating whether to filter by external or non external files"; @@ -182,7 +184,7 @@ public class ParamConstants { "files/bioformats"; public static final String FILE_STATUS_DESCRIPTION = "File status"; public static final String FILE_DESCRIPTION_DESCRIPTION = "Description"; - public static final String FILE_TAGS_DESCRIPTION = "Tags"; + public static final String FILE_TAGS_DESCRIPTION = "Tags" + REGEX_SUPPORT; public static final String FILE_SOFTWARE_NAME_PARAM = "softwareName"; public static final String FILE_SOFTWARE_NAME_DESCRIPTION = "Software name"; public static final String FILE_JOB_ID_DESCRIPTION = "Job ID that created the file(s) or folder(s)"; @@ -316,12 +318,12 @@ public class ParamConstants { public static final String INDIVIDUAL_MOTHER_DESCRIPTION = "Mother ID, name or UUID"; public static final String INDIVIDUAL_SAMPLES_DESCRIPTION = "Sample ID, name or UUID"; public static final String INDIVIDUAL_SEX_DESCRIPTION = "Individual sex"; - public static final String INDIVIDUAL_ETHNICITY_DESCRIPTION = "Individual ethnicity"; + public static final String INDIVIDUAL_ETHNICITY_DESCRIPTION = "Individual ethnicity" + REGEX_SUPPORT; public static final String INDIVIDUAL_DATE_OF_BIRTH_DESCRIPTION = "Individual date of birth"; public static final String INDIVIDUAL_DISORDERS_DESCRIPTION = DISORDERS_DESCRIPTION; public static final String INDIVIDUAL_PHENOTYPES_DESCRIPTION = PHENOTYPES_DESCRIPTION; - public static final String INDIVIDUAL_POPULATION_NAME_DESCRIPTION = "Population name"; - public static final String INDIVIDUAL_POPULATION_SUBPOPULATION_DESCRIPTION = "Subpopulation name"; + public static final String INDIVIDUAL_POPULATION_NAME_DESCRIPTION = "Population name" + REGEX_SUPPORT; + public static final String INDIVIDUAL_POPULATION_SUBPOPULATION_DESCRIPTION = "Subpopulation name" + REGEX_SUPPORT; public static final String INDIVIDUAL_KARYOTYPIC_SEX_DESCRIPTION = "Individual karyotypic sex"; public static final String INDIVIDUAL_LIFE_STATUS_DESCRIPTION = "Individual life status"; public static final String INDIVIDUAL_DELETED_DESCRIPTION = DELETED_DESCRIPTION; @@ -422,7 +424,7 @@ public class ParamConstants { public static final String CLINICAL_STATUS_PARAM = STATUS_PARAM; public static final String CLINICAL_INTERNAL_STATUS_PARAM = INTERNAL_STATUS_PARAM; public static final String CLINICAL_TYPE_DESCRIPTION = "Clinical Analysis type"; - public static final String CLINICAL_DISORDER_DESCRIPTION = "Clinical Analysis disorder"; + public static final String CLINICAL_DISORDER_DESCRIPTION = "Clinical Analysis disorder" + REGEX_SUPPORT; public static final String CLINICAL_FILES_DESCRIPTION = "Clinical Analysis files"; public static final String CLINICAL_SAMPLE_DESCRIPTION = "Sample associated to the proband or any member of a family"; public static final String CLINICAL_INDIVIDUAL_DESCRIPTION = "Proband or any member of a family"; @@ -466,7 +468,7 @@ public class ParamConstants { public static final String INTERPRETATION_LOCKED_PARAM = "locked"; public static final String INTERPRETATION_CLINICAL_ANALYSIS_ID_DESCRIPTION = "Clinical Analysis id"; public static final String INTERPRETATION_ANALYST_ID_DESCRIPTION = "Analyst ID"; - public static final String INTERPRETATION_METHOD_NAME_DESCRIPTION = "Interpretation method name"; + public static final String INTERPRETATION_METHOD_NAME_DESCRIPTION = "Interpretation method name" + REGEX_SUPPORT; public static final String INTERPRETATION_PANELS_DESCRIPTION = "Interpretation panels"; public static final String INTERPRETATION_PRIMARY_FINDINGS_IDS_DESCRIPTION = "Interpretation primary findings"; public static final String INTERPRETATION_SECONDARY_FINDINGS_IDS_DESCRIPTION = "Interpretation secondary findings"; @@ -498,12 +500,12 @@ public class ParamConstants { public static final String PANEL_ACL_PARAM = ACL_PARAM; public static final String PANEL_RELEASE_PARAM = RELEASE_PARAM; public static final String PANEL_SNAPSHOT_PARAM = SNAPSHOT_PARAM; - public static final String PANEL_DISORDERS_DESCRIPTION = DISORDERS_DESCRIPTION; - public static final String PANEL_VARIANTS_DESCRIPTION = "Comma separated list of variant ids"; - public static final String PANEL_GENES_DESCRIPTION = "Comma separated list of gene ids"; - public static final String PANEL_REGIONS_DESCRIPTION = "Comma separated list of regions"; - public static final String PANEL_CATEGORIES_DESCRIPTION = "Comma separated list of category names"; - public static final String PANEL_TAGS_DESCRIPTION = "Panel tags"; + public static final String PANEL_DISORDERS_DESCRIPTION = DISORDERS_DESCRIPTION + REGEX_SUPPORT; + public static final String PANEL_VARIANTS_DESCRIPTION = "Comma separated list of variant ids" + REGEX_SUPPORT; + public static final String PANEL_GENES_DESCRIPTION = "Comma separated list of gene ids" + REGEX_SUPPORT; + public static final String PANEL_REGIONS_DESCRIPTION = "Comma separated list of regions" + REGEX_SUPPORT; + public static final String PANEL_CATEGORIES_DESCRIPTION = "Comma separated list of category names" + REGEX_SUPPORT; + public static final String PANEL_TAGS_DESCRIPTION = "Panel tags" + REGEX_SUPPORT; public static final String PANEL_DELETED_DESCRIPTION = DELETED_DESCRIPTION; public static final String PANEL_STATUS_DESCRIPTION = STATUS_DESCRIPTION; @@ -539,7 +541,7 @@ public class ParamConstants { public static final String JOB_DEPENDS_ON_DESCRIPTION = "Comma separated list of existing job IDs the job will depend on."; public static final String JOB_TOOL_ID_PARAM = "toolId"; public static final String JOB_TOOL_TYPE_PARAM = "toolType"; - public static final String JOB_TOOL_ID_DESCRIPTION = "Tool ID executed by the job"; + public static final String JOB_TOOL_ID_DESCRIPTION = "Tool ID executed by the job" + REGEX_SUPPORT; public static final String JOB_TOOL_TYPE_DESCRIPTION = "Tool type executed by the job [OPERATION, ANALYSIS]"; public static final String JOB_USER_PARAM = "userId"; public static final String JOB_USER_DESCRIPTION = "User that created the job"; @@ -1475,34 +1477,34 @@ public class ParamConstants { public static final String ADMIN_CATALOG_JWT_SECRETKEY = "The body web service secretKey parameter"; private static final String UP_TO_100 = " up to a maximum of 100"; public static final String FILES_DESCRIPTION = "Comma separated list of file IDs or names" + UP_TO_100; - public static final String FILES_ID_DESCRIPTION = "Comma separated list of file IDs" + UP_TO_100; + public static final String FILES_ID_DESCRIPTION = "Comma separated list of file IDs" + UP_TO_100 + REGEX_SUPPORT; public static final String FILES_UUID_DESCRIPTION = "Comma separated list file UUIDs" + UP_TO_100; public static final String SAMPLES_DESCRIPTION = "Comma separated list sample IDs or UUIDs" + UP_TO_100; - public static final String SAMPLES_ID_DESCRIPTION = "Comma separated list sample IDs" + UP_TO_100; + public static final String SAMPLES_ID_DESCRIPTION = "Comma separated list sample IDs" + UP_TO_100 + REGEX_SUPPORT; public static final String SAMPLES_UUID_DESCRIPTION = "Comma separated list sample UUIDs" + UP_TO_100; public static final String INDIVIDUALS_DESCRIPTION = "Comma separated list of individual IDs, names or UUIDs" + UP_TO_100; - public static final String INDIVIDUALS_ID_DESCRIPTION = "Comma separated list individual IDs" + UP_TO_100; - public static final String INDIVIDUAL_NAME_DESCRIPTION = "Comma separated list individual names" + UP_TO_100; + public static final String INDIVIDUALS_ID_DESCRIPTION = "Comma separated list individual IDs" + UP_TO_100 + REGEX_SUPPORT; + public static final String INDIVIDUAL_NAME_DESCRIPTION = "Comma separated list individual names" + UP_TO_100 + REGEX_SUPPORT; public static final String INDIVIDUAL_UUID_DESCRIPTION = "Comma separated list individual UUIDs" + UP_TO_100; public static final String FAMILIES_DESCRIPTION = "Comma separated list of family IDs or names" + UP_TO_100; - public static final String FAMILY_ID_DESCRIPTION = "Comma separated list family IDs" + UP_TO_100; - public static final String FAMILY_NAME_DESCRIPTION = "Comma separated list family names" + UP_TO_100; + public static final String FAMILY_ID_DESCRIPTION = "Comma separated list family IDs" + UP_TO_100 + REGEX_SUPPORT; + public static final String FAMILY_NAME_DESCRIPTION = "Comma separated list family names" + UP_TO_100 + REGEX_SUPPORT; public static final String FAMILY_UUID_DESCRIPTION = "Comma separated list family UUIDs" + UP_TO_100; public static final String COHORTS_DESCRIPTION = "Comma separated list of cohort IDs or UUIDs" + UP_TO_100; - public static final String COHORT_IDS_DESCRIPTION = "Comma separated list of cohort IDs" + UP_TO_100; - public static final String COHORT_NAMES_DESCRIPTION = "Comma separated list of cohort names" + UP_TO_100; + public static final String COHORT_IDS_DESCRIPTION = "Comma separated list of cohort IDs" + UP_TO_100 + REGEX_SUPPORT; + public static final String COHORT_NAMES_DESCRIPTION = "Comma separated list of cohort names" + UP_TO_100 + REGEX_SUPPORT; public static final String COHORT_UUIDS_DESCRIPTION = "Comma separated list of cohort IDs" + UP_TO_100; - public static final String CLINICAL_ID_DESCRIPTION = "Comma separated list of Clinical Analysis IDs" + UP_TO_100; + public static final String CLINICAL_ID_DESCRIPTION = "Comma separated list of Clinical Analysis IDs" + UP_TO_100 + REGEX_SUPPORT; public static final String CLINICAL_UUID_DESCRIPTION = "Comma separated list of Clinical Analysis UUIDs" + UP_TO_100; public static final String CLINICAL_ANALYSES_DESCRIPTION = "Comma separated list of clinical analysis IDs or names" + UP_TO_100; - public static final String INTERPRETATION_ID_DESCRIPTION = "Comma separated list of Interpretation IDs" + UP_TO_100; + public static final String INTERPRETATION_ID_DESCRIPTION = "Comma separated list of Interpretation IDs" + UP_TO_100 + REGEX_SUPPORT; public static final String INTERPRETATION_UUID_DESCRIPTION = "Comma separated list of Interpretation UUIDs" + UP_TO_100; public static final String INTERPRETATION_DESCRIPTION = "Comma separated list of clinical interpretation IDs " + UP_TO_100; - public static final String PANEL_ID_DESCRIPTION = "Comma separated list of panel IDs " + UP_TO_100; + public static final String PANEL_ID_DESCRIPTION = "Comma separated list of panel IDs " + UP_TO_100 + REGEX_SUPPORT; public static final String PANEL_UUID_DESCRIPTION = "Comma separated list of panel UUIDs " + UP_TO_100; - public static final String PANEL_NAME_DESCRIPTION = "Comma separated list of panel names " + UP_TO_100; + public static final String PANEL_NAME_DESCRIPTION = "Comma separated list of panel names " + UP_TO_100 + REGEX_SUPPORT; public static final String JOBS_DESCRIPTION = "Comma separated list of job IDs or UUIDs" + UP_TO_100; - public static final String JOB_IDS_DESCRIPTION = "Comma separated list of job IDs" + UP_TO_100; + public static final String JOB_IDS_DESCRIPTION = "Comma separated list of job IDs" + UP_TO_100 + REGEX_SUPPORT; public static final String JOB_UUIDS_DESCRIPTION = "Comma separated list of job UUIDs" + UP_TO_100; // --------------------------------------------- public static final String PROJECTS_DESCRIPTION = "Comma separated list of projects [user@]project" + UP_TO_100; diff --git a/opencga-core/src/main/java/org/opencb/opencga/core/cellbase/CellBaseValidator.java b/opencga-core/src/main/java/org/opencb/opencga/core/cellbase/CellBaseValidator.java index 21f5c79fecd..edf5e3e50bc 100644 --- a/opencga-core/src/main/java/org/opencb/opencga/core/cellbase/CellBaseValidator.java +++ b/opencga-core/src/main/java/org/opencb/opencga/core/cellbase/CellBaseValidator.java @@ -1,20 +1,23 @@ package org.opencb.opencga.core.cellbase; +import io.jsonwebtoken.JwtException; import org.apache.commons.lang3.StringUtils; +import org.opencb.biodata.models.variant.avro.VariantAnnotation; import org.opencb.cellbase.client.rest.CellBaseClient; +import org.opencb.cellbase.core.api.key.ApiKeyManager; import org.opencb.cellbase.core.config.SpeciesConfiguration; import org.opencb.cellbase.core.config.SpeciesProperties; import org.opencb.cellbase.core.models.DataRelease; import org.opencb.cellbase.core.result.CellBaseDataResponse; -import org.opencb.cellbase.core.token.DataAccessTokenManager; -import org.opencb.cellbase.core.token.DataAccessTokenSources; -import org.opencb.opencga.core.common.VersionUtils; +import org.opencb.commons.datastore.core.QueryOptions; +import org.opencb.commons.utils.VersionUtils; import org.opencb.opencga.core.config.storage.CellBaseConfiguration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; import java.util.ArrayList; +import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; @@ -46,6 +49,7 @@ private CellBaseClient newCellBaseClient(CellBaseConfiguration cellBaseConfigura toCellBaseSpeciesName(species), assembly, cellBaseConfiguration.getDataRelease(), + cellBaseConfiguration.getApiKey(), cellBaseConfiguration.toClientConfiguration()); } @@ -69,13 +73,13 @@ public String getDataRelease() { return cellBaseClient.getDataRelease(); } - public String getToken() { - return cellBaseClient.getToken(); + public String getApiKey() { + return cellBaseClient.getApiKey(); } - public DataAccessTokenSources getTokenSources() { - DataAccessTokenManager tokenManager = new DataAccessTokenManager(); - return tokenManager.decode(cellBaseClient.getToken()); + public List getApiKeyDataSources() { + ApiKeyManager apiKeyManager = new ApiKeyManager(); + return new ArrayList<>(apiKeyManager.getValidSources(cellBaseClient.getApiKey())); } public String getURL() { @@ -91,7 +95,7 @@ public CellBaseClient getCellBaseClient() { } public CellBaseConfiguration getCellBaseConfiguration() { - return new CellBaseConfiguration(getURL(), getVersion(), getDataRelease(), getToken()); + return new CellBaseConfiguration(getURL(), getVersion(), getDataRelease(), getApiKey()); } public String getDefaultDataRelease() throws IOException { @@ -136,7 +140,7 @@ public void validate() throws IOException { validate(false); } - public CellBaseConfiguration validate(boolean autoComplete) throws IOException { + private CellBaseConfiguration validate(boolean autoComplete) throws IOException { CellBaseConfiguration cellBaseConfiguration = getCellBaseConfiguration(); String inputVersion = getVersion(); CellBaseDataResponse species; @@ -189,6 +193,41 @@ public CellBaseConfiguration validate(boolean autoComplete) throws IOException { } } } + String apiKey = getApiKey(); + if (StringUtils.isEmpty(apiKey)) { + cellBaseConfiguration.setApiKey(null); + } else { + // Check it's supported + if (!supportsApiKey(serverVersion)) { + throw new IllegalArgumentException("API key not supported for cellbase " + + "url: '" + getURL() + "'" + + ", version: '" + inputVersion + "'"); + } + + // Check it's an actual API key + ApiKeyManager apiKeyManager = new ApiKeyManager(); + try { + apiKeyManager.decode(apiKey); + } catch (JwtException e) { + throw new IllegalArgumentException("Malformed API key for cellbase " + + "url: '" + getURL() + "'" + + ", version: '" + inputVersion + + "', species: '" + getSpecies() + + "', assembly: '" + getAssembly() + "'"); + } + + // Check it's a valid API key + CellBaseDataResponse response = cellBaseClient.getVariantClient() + .getAnnotationByVariantIds(Collections.singletonList("1:1:N:C"), new QueryOptions(), true); + if (response.firstResult() == null) { + throw new IllegalArgumentException("Invalid API key for cellbase " + + "url: '" + getURL() + "'" + + ", version: '" + inputVersion + + "', species: '" + getSpecies() + + "', assembly: '" + getAssembly() + "'"); + } + } + return cellBaseConfiguration; } @@ -231,6 +270,11 @@ public static boolean supportsDataReleaseActiveByDefaultIn(String serverVersion) return VersionUtils.isMinVersion("5.5.0", serverVersion, true); } + public static boolean supportsApiKey(String serverVersion) { + // API keys support starts at version 5.4.0 + return VersionUtils.isMinVersion("5.4.0", serverVersion); + } + public String getVersionFromServerMajor() throws IOException { return major(getVersionFromServer()); } @@ -281,7 +325,7 @@ public String toString() { + "species '" + getSpecies() + "', " + "assembly '" + getAssembly() + "', " + "dataRelease '" + getDataRelease() + "', " - + "token '" + getToken() + "'"; + + "apiKey '" + getApiKey() + "'"; } } diff --git a/opencga-core/src/main/java/org/opencb/opencga/core/common/VersionUtils.java b/opencga-core/src/main/java/org/opencb/opencga/core/common/VersionUtils.java deleted file mode 100644 index 4e32c6ada32..00000000000 --- a/opencga-core/src/main/java/org/opencb/opencga/core/common/VersionUtils.java +++ /dev/null @@ -1,123 +0,0 @@ -package org.opencb.opencga.core.common; - -import org.apache.commons.lang3.StringUtils; - -import java.util.Comparator; -import java.util.List; -import java.util.stream.Collectors; - -public class VersionUtils { - - public static List order(List versions) { - return versions.stream().map(Version::new).sorted().map(Version::toString).collect(Collectors.toList()); - } - - public static boolean isMinVersion(String minVersion, String version) { - return isMinVersion(minVersion, version, false); - } - - public static boolean isMinVersion(String minVersion, String version, boolean ignorePreReleaseVersioning) { - return new Version(minVersion).compareTo(new Version(version), ignorePreReleaseVersioning) <= 0; - } - - public static class Version implements Comparable { - - private final int major; - private final int minor; - private final int patch; - private final int repatch; - private final String other; - - public static final Comparator COMPARATOR = Comparator - .comparingInt(Version::getMajor) - .thenComparingInt(Version::getMinor) - .thenComparingInt(Version::getPatch) - .thenComparingInt(Version::getRepatch) - .thenComparing((o1, o2) -> { - if (o1.other.equals(o2.other)) { - return 0; - } - if (o1.other.isEmpty()) { - return +1; - } - if (o2.other.isEmpty()) { - return -1; - } - if (o1.other.equals("-SNAPSHOT")) { - return -1; - } - if (o2.other.equals("-SNAPSHOT")) { - return +1; - } - return o1.other.compareTo(o2.other); - }); - - public static final Comparator COMPARATOR_NO_PR = Comparator - .comparingInt(Version::getMajor) - .thenComparingInt(Version::getMinor) - .thenComparingInt(Version::getPatch) - .thenComparingInt(Version::getRepatch); - - public Version(String version) { - String[] split = StringUtils.split(version, ".", 4); - major = Integer.parseInt(split[0]); - minor = Integer.parseInt(split[1]); - if (split.length == 4) { - patch = Integer.parseInt(split[2]); - String last = split[3]; - String[] split2 = StringUtils.split(last, "-+", 3); - repatch = Integer.parseInt(split2[0]); - other = last.substring(split2[0].length()); - } else { - String last = split[2]; - String[] split2 = StringUtils.split(last, "-+", 2); - patch = Integer.parseInt(split2[0]); - repatch = 0; - other = last.substring(split2[0].length()); - } - } - - @Override - public String toString() { - if (repatch > 0) { - return major + "." + minor + "." + patch + "." + repatch + other; - } else { - return major + "." + minor + "." + patch + other; - } - } - - @Override - public int compareTo(Version o) { - return COMPARATOR.compare(this, o); - } - - public int compareTo(Version o, boolean ignorePreReleaseVersioning) { - if (ignorePreReleaseVersioning) { - return COMPARATOR_NO_PR.compare(this, o); - } else { - return COMPARATOR.compare(this, o); - } - } - - public int getMajor() { - return major; - } - - public int getMinor() { - return minor; - } - - public int getPatch() { - return patch; - } - - public int getRepatch() { - return repatch; - } - - public String getOther() { - return other; - } - } - -} diff --git a/opencga-core/src/main/java/org/opencb/opencga/core/config/storage/CellBaseConfiguration.java b/opencga-core/src/main/java/org/opencb/opencga/core/config/storage/CellBaseConfiguration.java index 9a392c88168..2ef6a77cca4 100644 --- a/opencga-core/src/main/java/org/opencb/opencga/core/config/storage/CellBaseConfiguration.java +++ b/opencga-core/src/main/java/org/opencb/opencga/core/config/storage/CellBaseConfiguration.java @@ -42,8 +42,8 @@ public class CellBaseConfiguration { @DataField(id = "dataRelease", description = "CellBase data release version to be used. If empty, will use the active one") private String dataRelease; - @DataField(id = "token", description = "CellBase token to access to the licensed/restricted data sources such as COSMIC, HGMD,...") - private String token; + @DataField(id = "apiKey", description = "API key to access to the licensed/restricted data sources (COSMIC, HGMD,...) and to manage quota.") + private String apiKey; public CellBaseConfiguration() { this(ParamConstants.CELLBASE_URL, ParamConstants.CELLBASE_VERSION); @@ -54,11 +54,11 @@ public CellBaseConfiguration(String url, String version) { this.version = version; } - public CellBaseConfiguration(String url, String version, String dataRelease, String token) { + public CellBaseConfiguration(String url, String version, String dataRelease, String apiKey) { this.url = url; this.version = version; this.dataRelease = dataRelease; - this.token = token; + this.apiKey = apiKey; } @Override @@ -67,7 +67,7 @@ public String toString() { sb.append("url='").append(url).append('\''); sb.append(", version='").append(version).append('\''); sb.append(", dataRelease='").append(dataRelease).append('\''); - sb.append(", token='").append(token).append('\''); + sb.append(", apiKey='").append(apiKey).append('\''); sb.append('}'); return sb.toString(); } @@ -99,12 +99,12 @@ public CellBaseConfiguration setDataRelease(String dataRelease) { return this; } - public String getToken() { - return token; + public String getApiKey() { + return apiKey; } - public CellBaseConfiguration setToken(String token) { - this.token = token; + public CellBaseConfiguration setApiKey(String apiKey) { + this.apiKey = apiKey; return this; } diff --git a/opencga-core/src/main/java/org/opencb/opencga/core/config/storage/SampleIndexConfiguration.java b/opencga-core/src/main/java/org/opencb/opencga/core/config/storage/SampleIndexConfiguration.java index f2e6bf1c3f8..21178f7fdf4 100644 --- a/opencga-core/src/main/java/org/opencb/opencga/core/config/storage/SampleIndexConfiguration.java +++ b/opencga-core/src/main/java/org/opencb/opencga/core/config/storage/SampleIndexConfiguration.java @@ -386,6 +386,15 @@ public List getCustomFields() { return customFields; } + public IndexFieldConfiguration getCustomField(IndexFieldConfiguration.Source source, String key) { + for (IndexFieldConfiguration s : customFields) { + if (s.getKey().equals(key) && s.getSource() == source) { + return s; + } + } + return null; + } + public int getFilePositionBits() { return filePositionBits; } @@ -705,4 +714,13 @@ public boolean equals(Object o) { public int hashCode() { return Objects.hash(fileIndexConfiguration, annotationIndexConfiguration); } + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("SampleIndexConfiguration{"); + sb.append("fileIndexConfiguration=").append(fileIndexConfiguration); + sb.append(", annotationIndexConfiguration=").append(annotationIndexConfiguration); + sb.append('}'); + return sb.toString(); + } } diff --git a/opencga-core/src/test/java/org/opencb/opencga/core/cellbase/CellBaseValidatorTest.java b/opencga-core/src/test/java/org/opencb/opencga/core/cellbase/CellBaseValidatorTest.java index 36db80985f0..ada81158f44 100644 --- a/opencga-core/src/test/java/org/opencb/opencga/core/cellbase/CellBaseValidatorTest.java +++ b/opencga-core/src/test/java/org/opencb/opencga/core/cellbase/CellBaseValidatorTest.java @@ -1,6 +1,8 @@ package org.opencb.opencga.core.cellbase; +import org.apache.commons.lang3.StringUtils; import org.junit.Assert; +import org.junit.Assume; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; @@ -70,4 +72,44 @@ public void testNoActiveReleases() throws IOException { thrown.expectMessage("No active data releases found on cellbase"); CellBaseValidator.validate(new CellBaseConfiguration(ParamConstants.CELLBASE_URL, "v5.1", null, null), "mmusculus", "GRCm38", true); } + + @Test + public void testApiKey() throws IOException { + String apiKey = System.getenv("CELLBASE_HGMD_APIKEY"); + Assume.assumeTrue(StringUtils.isNotEmpty(apiKey)); + CellBaseConfiguration validated = CellBaseValidator.validate(new CellBaseConfiguration(ParamConstants.CELLBASE_URL, "v5.4", null, apiKey), "hsapiens", "grch38", true); + Assert.assertNotNull(validated.getApiKey()); + } + + @Test + public void testApiKeyNotSupported() throws IOException { + String apiKey = System.getenv("CELLBASE_HGMD_APIKEY"); + Assume.assumeTrue(StringUtils.isNotEmpty(apiKey)); + thrown.expectMessage("API key not supported"); + CellBaseConfiguration validated = CellBaseValidator.validate(new CellBaseConfiguration(ParamConstants.CELLBASE_URL, "v5.1", null, apiKey), "hsapiens", "grch38", true); + Assert.assertNotNull(validated.getApiKey()); + } + + @Test + public void testApiKeyEmpty() throws IOException { + String apiKey = ""; + CellBaseConfiguration validated = CellBaseValidator.validate(new CellBaseConfiguration(ParamConstants.CELLBASE_URL, "v5.1", null, apiKey), "hsapiens", "grch38", true); + Assert.assertNull(validated.getApiKey()); + } + + @Test + public void testMalformedApiKey() throws IOException { + thrown.expectMessage("Malformed API key for cellbase"); + String apiKey = "MALFORMED_API_KEY"; + CellBaseConfiguration validated = CellBaseValidator.validate(new CellBaseConfiguration(ParamConstants.CELLBASE_URL, "v5.4", null, apiKey), "hsapiens", "grch38", true); + Assert.assertNotNull(validated.getApiKey()); + } + + @Test + public void testUnsignedApiKey() throws IOException { + thrown.expectMessage("Invalid API key for cellbase"); + String apiKey = "eyJhbGciOiJIUzI1NiJ9.eyJzb3VyY2VzIjp7ImhnbWQiOjkyMjMzNzIwMzY4NTQ3NzU4MDd9LCJ2ZXJzaW9uIjoiMS4wIiwic3ViIjoiWkVUVEEiLCJpYXQiOjE2OTMyMTY5MDd9.invalidsignature"; + CellBaseConfiguration validated = CellBaseValidator.validate(new CellBaseConfiguration(ParamConstants.CELLBASE_URL, "v5.4", null, apiKey), "hsapiens", "grch38", true); + Assert.assertNotNull(validated.getApiKey()); + } } \ No newline at end of file diff --git a/opencga-core/src/test/java/org/opencb/opencga/core/common/VersionUtilsTest.java b/opencga-core/src/test/java/org/opencb/opencga/core/common/VersionUtilsTest.java deleted file mode 100644 index a6b0dce858f..00000000000 --- a/opencga-core/src/test/java/org/opencb/opencga/core/common/VersionUtilsTest.java +++ /dev/null @@ -1,35 +0,0 @@ -package org.opencb.opencga.core.common; - -import org.junit.Assert; -import org.junit.Test; -import org.junit.experimental.categories.Category; -import org.opencb.opencga.core.testclassification.duration.ShortTests; - -@Category(ShortTests.class) -public class VersionUtilsTest { - public static String getComparation(String minVersion, String version) { - int c = new VersionUtils.Version(minVersion).compareTo(new VersionUtils.Version(version)); - String comp; - if (c == 0) { - comp = "="; - } else if (c < 0) { - comp = "<"; - } else { - comp = ">"; - } - System.out.println(minVersion + "\t" + comp + "\t" + version); - return comp; - } - - @Test - public void testOrder() { - Assert.assertEquals("<", getComparation("5.2.7", "5.2.8")); - Assert.assertEquals("=", getComparation("5.2.7", "5.2.7")); - Assert.assertEquals(">", getComparation("5.2.7.1", "5.2.7.1-alpha")); - Assert.assertEquals(">", getComparation("5.2.7", "5.2.7-SNAPSHOT")); - Assert.assertEquals("<", getComparation("5.2.7-alpha", "5.2.7")); - Assert.assertEquals("<", getComparation("5.2.7-alpha", "5.2.7-beta")); - Assert.assertEquals(">", getComparation("5.2.7", "5.2.6")); - Assert.assertEquals("=", getComparation("5.2.7", "5.2.7.0")); - } -} \ No newline at end of file diff --git a/opencga-master/pom.xml b/opencga-master/pom.xml index d1e079cf6a8..2d6fd5a8da6 100644 --- a/opencga-master/pom.xml +++ b/opencga-master/pom.xml @@ -22,7 +22,7 @@ opencga org.opencb.opencga - 2.10.0-SNAPSHOT + 2.11.0-SNAPSHOT ../pom.xml diff --git a/opencga-server/pom.xml b/opencga-server/pom.xml index f16e51062b9..65cebaebdda 100644 --- a/opencga-server/pom.xml +++ b/opencga-server/pom.xml @@ -22,7 +22,7 @@ org.opencb.opencga opencga - 2.10.0-SNAPSHOT + 2.11.0-SNAPSHOT ../pom.xml diff --git a/opencga-server/src/main/java/org/opencb/opencga/server/generator/writers/ParentClientRestApiWriter.java b/opencga-server/src/main/java/org/opencb/opencga/server/generator/writers/ParentClientRestApiWriter.java index 2ac80dfd288..72857bc2aec 100644 --- a/opencga-server/src/main/java/org/opencb/opencga/server/generator/writers/ParentClientRestApiWriter.java +++ b/opencga-server/src/main/java/org/opencb/opencga/server/generator/writers/ParentClientRestApiWriter.java @@ -218,6 +218,8 @@ protected static String getMethodName(String subpath) { // methodName = items[3] + "_" + items[1] + "_" + items[2]; } else if (items[0].contains("}") && items[2].contains("}") && (!items[1].contains("}")) && (!items[3].contains("}"))) { methodName = items[3] + "_" + items[1]; + } else if (items[1].contains("}") && (!items[0].contains("}") && !items[2].contains("}") && !items[3].contains("}"))) { + methodName = items[0] + "_" + items[3] + "_" + items[2]; } } else if (items.length == 5) { if (items[0].contains("}") && items[2].contains("}") && (!items[1].contains("}")) && (!items[3].contains("}")) diff --git a/opencga-storage/opencga-storage-app/pom.xml b/opencga-storage/opencga-storage-app/pom.xml index 209b780bb8c..cafb6d1c2ac 100644 --- a/opencga-storage/opencga-storage-app/pom.xml +++ b/opencga-storage/opencga-storage-app/pom.xml @@ -22,7 +22,7 @@ org.opencb.opencga opencga-storage - 2.10.0-SNAPSHOT + 2.11.0-SNAPSHOT ../pom.xml diff --git a/opencga-storage/opencga-storage-benchmark/pom.xml b/opencga-storage/opencga-storage-benchmark/pom.xml index e43034af54f..aa79ec720fd 100644 --- a/opencga-storage/opencga-storage-benchmark/pom.xml +++ b/opencga-storage/opencga-storage-benchmark/pom.xml @@ -22,7 +22,7 @@ opencga-storage org.opencb.opencga - 2.10.0-SNAPSHOT + 2.11.0-SNAPSHOT ../pom.xml diff --git a/opencga-storage/opencga-storage-core/pom.xml b/opencga-storage/opencga-storage-core/pom.xml index 95c37c68a8c..b97d0472984 100644 --- a/opencga-storage/opencga-storage-core/pom.xml +++ b/opencga-storage/opencga-storage-core/pom.xml @@ -25,7 +25,7 @@ org.opencb.opencga opencga-storage - 2.10.0-SNAPSHOT + 2.11.0-SNAPSHOT ../pom.xml diff --git a/opencga-storage/opencga-storage-core/src/main/java/org/opencb/opencga/storage/core/metadata/VariantStorageMetadataManager.java b/opencga-storage/opencga-storage-core/src/main/java/org/opencb/opencga/storage/core/metadata/VariantStorageMetadataManager.java index 33f6de51fea..cf4477bb4f1 100644 --- a/opencga-storage/opencga-storage-core/src/main/java/org/opencb/opencga/storage/core/metadata/VariantStorageMetadataManager.java +++ b/opencga-storage/opencga-storage-core/src/main/java/org/opencb/opencga/storage/core/metadata/VariantStorageMetadataManager.java @@ -185,6 +185,10 @@ public VariantStorageMetadataManager(VariantStorageMetadataDBAdaptorFactory dbAd }); } + public ObjectMap getConfiguration() { + return dbAdaptorFactory.getConfiguration(); + } + public Lock lockGlobal(long lockDuration, long timeout, String lockName) throws StorageEngineException { try { diff --git a/opencga-storage/opencga-storage-core/src/main/java/org/opencb/opencga/storage/core/metadata/models/ProjectMetadata.java b/opencga-storage/opencga-storage-core/src/main/java/org/opencb/opencga/storage/core/metadata/models/ProjectMetadata.java index c27111d1c03..e64deedff64 100644 --- a/opencga-storage/opencga-storage-core/src/main/java/org/opencb/opencga/storage/core/metadata/models/ProjectMetadata.java +++ b/opencga-storage/opencga-storage-core/src/main/java/org/opencb/opencga/storage/core/metadata/models/ProjectMetadata.java @@ -85,10 +85,6 @@ public VariantAnnotationMetadata() { sourceVersion = new ArrayList<>(); } - public VariantAnnotationMetadata(int id, String name, Date creationDate, VariantAnnotatorProgram annotator, - List sourceVersion, DataRelease dataRelease) { - - } public VariantAnnotationMetadata(int id, String name, Date creationDate, VariantAnnotatorProgram annotator, List sourceVersion, DataRelease dataRelease, List privateSources) { this.id = id; diff --git a/opencga-storage/opencga-storage-core/src/main/java/org/opencb/opencga/storage/core/variant/VariantStorageEngine.java b/opencga-storage/opencga-storage-core/src/main/java/org/opencb/opencga/storage/core/variant/VariantStorageEngine.java index c3c27c26c35..a4f560e49f2 100644 --- a/opencga-storage/opencga-storage-core/src/main/java/org/opencb/opencga/storage/core/variant/VariantStorageEngine.java +++ b/opencga-storage/opencga-storage-core/src/main/java/org/opencb/opencga/storage/core/variant/VariantStorageEngine.java @@ -1117,7 +1117,7 @@ public CellBaseUtils getCellBaseUtils() throws StorageEngineException { } species = toCellBaseSpeciesName(species); cellBaseUtils = new CellBaseUtils(new CellBaseClient(species, assembly, configuration.getCellbase().getDataRelease(), - configuration.getCellbase().getToken(), clientConfiguration)); + configuration.getCellbase().getApiKey(), clientConfiguration)); } return cellBaseUtils; } diff --git a/opencga-storage/opencga-storage-core/src/main/java/org/opencb/opencga/storage/core/variant/adaptors/GenotypeClass.java b/opencga-storage/opencga-storage-core/src/main/java/org/opencb/opencga/storage/core/variant/adaptors/GenotypeClass.java index d54e03fd3db..d3f5e8dd1ef 100644 --- a/opencga-storage/opencga-storage-core/src/main/java/org/opencb/opencga/storage/core/variant/adaptors/GenotypeClass.java +++ b/opencga-storage/opencga-storage-core/src/main/java/org/opencb/opencga/storage/core/variant/adaptors/GenotypeClass.java @@ -211,6 +211,25 @@ public enum GenotypeClass implements Predicate { return true; }), + /** + * Genotypes containing any secondary alternate. + *

+ * 1/2, 2/3, ./2, 0/2, ... + */ + SEC(str -> { + Genotype gt = parseGenotype(str); + if (gt == null) { + // Skip invalid genotypes + return false; + } + for (int allele : gt.getAllelesIdx()) { + if (allele > 1) { + return true; + } + } + return false; + }), + /** * Genotypes containing reference and secondary alternates only. *

@@ -233,6 +252,7 @@ public enum GenotypeClass implements Predicate { return hasSecondaryAlternate; }), + /** * Contains the main alternate. *

diff --git a/opencga-storage/opencga-storage-core/src/main/java/org/opencb/opencga/storage/core/variant/adaptors/VariantField.java b/opencga-storage/opencga-storage-core/src/main/java/org/opencb/opencga/storage/core/variant/adaptors/VariantField.java index d0eb0a335e6..8c208b1cd30 100644 --- a/opencga-storage/opencga-storage-core/src/main/java/org/opencb/opencga/storage/core/variant/adaptors/VariantField.java +++ b/opencga-storage/opencga-storage-core/src/main/java/org/opencb/opencga/storage/core/variant/adaptors/VariantField.java @@ -71,6 +71,7 @@ public enum VariantField { ANNOTATION_CONSERVATION(ANNOTATION, "annotation.conservation"), ANNOTATION_CANCER_HOTSPOTS(ANNOTATION, "annotation.cancerHotspots"), ANNOTATION_GENE_EXPRESSION(ANNOTATION, "annotation.geneExpression"), + ANNOTATION_PHARMACOGENOMICS(ANNOTATION, "annotation.pharmacogenomics"), ANNOTATION_GENE_TRAIT_ASSOCIATION(ANNOTATION, "annotation.geneTraitAssociation"), ANNOTATION_GENE_DRUG_INTERACTION(ANNOTATION, "annotation.geneDrugInteraction"), ANNOTATION_GENE_CANCER_ASSOCIATIONS(ANNOTATION, "annotation.geneCancerAssociations"), diff --git a/opencga-storage/opencga-storage-core/src/main/java/org/opencb/opencga/storage/core/variant/adaptors/VariantQuery.java b/opencga-storage/opencga-storage-core/src/main/java/org/opencb/opencga/storage/core/variant/adaptors/VariantQuery.java index c2798e0dba8..65c2bda05e6 100644 --- a/opencga-storage/opencga-storage-core/src/main/java/org/opencb/opencga/storage/core/variant/adaptors/VariantQuery.java +++ b/opencga-storage/opencga-storage-core/src/main/java/org/opencb/opencga/storage/core/variant/adaptors/VariantQuery.java @@ -9,6 +9,7 @@ import org.opencb.opencga.storage.core.variant.query.VariantQueryUtils; import java.util.Arrays; +import java.util.Collection; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -193,6 +194,12 @@ public VariantQuery includeSampleData(String value) { put(VariantQueryParam.INCLUDE_SAMPLE_DATA.key(), value); return this; } + + public VariantQuery includeSampleData(Collection value) { + put(VariantQueryParam.INCLUDE_SAMPLE_DATA.key(), value); + return this; + } + public String includeSampleData() { return getString(VariantQueryParam.INCLUDE_SAMPLE_DATA.key()); } @@ -257,6 +264,12 @@ public VariantQuery includeFile(String value) { put(VariantQueryParam.INCLUDE_FILE.key(), value); return this; } + + public VariantQuery includeFile(Collection value) { + put(VariantQueryParam.INCLUDE_FILE.key(), value); + return this; + } + public VariantQuery includeFileAll() { return includeFile(ParamConstants.ALL); } diff --git a/opencga-storage/opencga-storage-core/src/main/java/org/opencb/opencga/storage/core/variant/annotation/annotators/AbstractCellBaseVariantAnnotator.java b/opencga-storage/opencga-storage-core/src/main/java/org/opencb/opencga/storage/core/variant/annotation/annotators/AbstractCellBaseVariantAnnotator.java index 320c909c33a..da8d44b05b5 100644 --- a/opencga-storage/opencga-storage-core/src/main/java/org/opencb/opencga/storage/core/variant/annotation/annotators/AbstractCellBaseVariantAnnotator.java +++ b/opencga-storage/opencga-storage-core/src/main/java/org/opencb/opencga/storage/core/variant/annotation/annotators/AbstractCellBaseVariantAnnotator.java @@ -56,7 +56,7 @@ public abstract class AbstractCellBaseVariantAnnotator extends VariantAnnotator protected final String assembly; protected final String cellbaseVersion; protected final String cellbaseDataRelease; - protected final String cellbaseToken; + protected final String cellbaseApiKey; protected final QueryOptions queryOptions; protected final boolean supportImpreciseVariants; protected final boolean supportStarAlternate; @@ -72,7 +72,7 @@ public AbstractCellBaseVariantAnnotator(StorageConfiguration storageConfiguratio assembly = projectMetadata.getAssembly(); cellbaseVersion = storageConfiguration.getCellbase().getVersion(); cellbaseDataRelease = storageConfiguration.getCellbase().getDataRelease(); - cellbaseToken = storageConfiguration.getCellbase().getToken(); + cellbaseApiKey = storageConfiguration.getCellbase().getApiKey(); queryOptions = new QueryOptions(); if (StringUtils.isNotEmpty(params.getString(VariantStorageOptions.ANNOTATOR_CELLBASE_INCLUDE.key()))) { diff --git a/opencga-storage/opencga-storage-core/src/main/java/org/opencb/opencga/storage/core/variant/annotation/annotators/CellBaseRestVariantAnnotator.java b/opencga-storage/opencga-storage-core/src/main/java/org/opencb/opencga/storage/core/variant/annotation/annotators/CellBaseRestVariantAnnotator.java index 889cba2f42a..a589a21e1a4 100644 --- a/opencga-storage/opencga-storage-core/src/main/java/org/opencb/opencga/storage/core/variant/annotation/annotators/CellBaseRestVariantAnnotator.java +++ b/opencga-storage/opencga-storage-core/src/main/java/org/opencb/opencga/storage/core/variant/annotation/annotators/CellBaseRestVariantAnnotator.java @@ -67,7 +67,7 @@ public CellBaseRestVariantAnnotator(StorageConfiguration storageConfiguration, P VariantStorageOptions.ANNOTATION_TIMEOUT.defaultValue()); clientConfiguration.getRest().setTimeout(timeoutMillis); - cellBaseClient = new CellBaseClient(species, assembly, cellbaseDataRelease, cellbaseToken, clientConfiguration); + cellBaseClient = new CellBaseClient(species, assembly, cellbaseDataRelease, cellbaseApiKey, clientConfiguration); cellBaseUtils = new CellBaseUtils(cellBaseClient); logger.info("Annotating with Cellbase REST. {}", cellBaseUtils); @@ -113,8 +113,8 @@ public ProjectMetadata.VariantAnnotationMetadata getVariantAnnotationMetadata() + getDebugInfo("/meta/" + species + "/dataReleases") + ". "); } List privateSources; - if (StringUtils.isNotEmpty(cellBaseUtils.getToken())) { - privateSources = new ArrayList<>(cellBaseUtils.getTokenSources().getSources().keySet()); + if (StringUtils.isNotEmpty(cellBaseUtils.getApiKey())) { + privateSources = cellBaseUtils.getApiKeyDataSources(); } else { privateSources = new ArrayList<>(); } diff --git a/opencga-storage/opencga-storage-core/src/main/java/org/opencb/opencga/storage/core/variant/query/VariantQueryUtils.java b/opencga-storage/opencga-storage-core/src/main/java/org/opencb/opencga/storage/core/variant/query/VariantQueryUtils.java index 6e7831c69ed..114379c77a9 100644 --- a/opencga-storage/opencga-storage-core/src/main/java/org/opencb/opencga/storage/core/variant/query/VariantQueryUtils.java +++ b/opencga-storage/opencga-storage-core/src/main/java/org/opencb/opencga/storage/core/variant/query/VariantQueryUtils.java @@ -25,6 +25,7 @@ import org.opencb.biodata.models.core.Region; import org.opencb.biodata.models.variant.StudyEntry; import org.opencb.biodata.models.variant.Variant; +import org.opencb.biodata.models.variant.VariantBuilder; import org.opencb.biodata.models.variant.annotation.ConsequenceTypeMappings; import org.opencb.biodata.models.variant.avro.*; import org.opencb.commons.datastore.core.*; @@ -515,9 +516,18 @@ public static boolean isHpo(String value) { */ public static boolean isVariantId(String value) { int count = StringUtils.countMatches(value, ':'); - return count == 3 - // It may have more colons if is a symbolic alternate like , or a breakend 4:100:C:]15:300]A - || count > 3 && StringUtils.containsAny(value, '<', '[', ']'); + if (count == 3) { + return true; + } + if (count > 3) { + try { + new VariantBuilder(value); + } catch (RuntimeException e) { + return false; + } + return true; + } + return false; } /** diff --git a/opencga-storage/opencga-storage-core/src/test/java/org/opencb/opencga/storage/core/utils/CellBaseUtilsTest.java b/opencga-storage/opencga-storage-core/src/test/java/org/opencb/opencga/storage/core/utils/CellBaseUtilsTest.java index 1f679ace47e..93cb92e8899 100644 --- a/opencga-storage/opencga-storage-core/src/test/java/org/opencb/opencga/storage/core/utils/CellBaseUtilsTest.java +++ b/opencga-storage/opencga-storage-core/src/test/java/org/opencb/opencga/storage/core/utils/CellBaseUtilsTest.java @@ -21,7 +21,7 @@ import org.opencb.commons.datastore.core.ObjectMap; import org.opencb.commons.datastore.core.Query; import org.opencb.commons.datastore.core.QueryOptions; -import org.opencb.opencga.core.common.VersionUtils; +import org.opencb.commons.utils.VersionUtils; import org.opencb.opencga.core.testclassification.duration.MediumTests; import org.opencb.opencga.storage.core.variant.adaptors.VariantQueryException; import org.opencb.opencga.storage.core.variant.adaptors.VariantQueryParam; @@ -255,10 +255,10 @@ public void testGetTranscriptFlags() throws IOException { } @Test - public void testAnnotationWithHGMDToken() throws IOException { - Assume.assumeTrue(cellBaseUtils.isMinVersion("5.3.0")); - Assume.assumeThat(assembly, CoreMatchers.equalTo("grch37")); - String hgmdToken = System.getenv("CELLBASE_HGMD_TOKEN"); + public void testAnnotationWithHGMDApiKey() throws IOException { + Assume.assumeTrue(cellBaseUtils.isMinVersion("5.4.0")); + Assume.assumeThat(assembly, CoreMatchers.equalTo("grch38")); + String hgmdToken = System.getenv("CELLBASE_HGMD_APIKEY"); Assume.assumeTrue(StringUtils.isNotEmpty(hgmdToken)); cellBaseClient = new CellBaseClient("hsapiens", assembly, dataRelease, hgmdToken, @@ -271,14 +271,14 @@ public void testAnnotationWithHGMDToken() throws IOException { .getAnnotationByVariantIds(Collections.singletonList("10:113588287:G:A"), queryOptions); VariantAnnotation variantAnnotation = v.firstResult(); assertEquals(2, variantAnnotation.getTraitAssociation().size()); - assertEquals("clinvar", variantAnnotation.getTraitAssociation().get(0).getSource().getName()); - assertEquals("hgmd", variantAnnotation.getTraitAssociation().get(1).getSource().getName()); + assertTrue(variantAnnotation.getTraitAssociation().stream().anyMatch(e -> e.getSource().getName().equals("clinvar"))); + assertTrue(variantAnnotation.getTraitAssociation().stream().anyMatch(e -> e.getSource().getName().equals("hgmd"))); } @Test - public void testAnnotationWithoutHGMDToken() throws IOException { - Assume.assumeTrue(cellBaseUtils.isMinVersion("5.3.0")); - Assume.assumeThat(assembly, CoreMatchers.equalTo("grch37")); + public void testAnnotationWithoutHGMDAPiKey() throws IOException { + Assume.assumeTrue(cellBaseUtils.isMinVersion("5.4.0")); + Assume.assumeThat(assembly, CoreMatchers.equalTo("grch38")); cellBaseClient = new CellBaseClient("hsapiens", assembly, dataRelease, "", new ClientConfiguration().setVersion(version) diff --git a/opencga-storage/opencga-storage-core/src/test/java/org/opencb/opencga/storage/core/variant/adaptors/VariantDBAdaptorTest.java b/opencga-storage/opencga-storage-core/src/test/java/org/opencb/opencga/storage/core/variant/adaptors/VariantDBAdaptorTest.java index 1476416b6e2..1f305574a64 100644 --- a/opencga-storage/opencga-storage-core/src/test/java/org/opencb/opencga/storage/core/variant/adaptors/VariantDBAdaptorTest.java +++ b/opencga-storage/opencga-storage-core/src/test/java/org/opencb/opencga/storage/core/variant/adaptors/VariantDBAdaptorTest.java @@ -2285,7 +2285,12 @@ public void testReturnNoneFiles() { queryResult = query(new Query(INCLUDE_FILE.key(), VariantQueryUtils.NONE).append(INCLUDE_SAMPLE.key(), ALL), new QueryOptions()); assertEquals(allVariants.getResults().size(), queryResult.getResults().size()); for (Variant variant : queryResult.getResults()) { - assertThat(variant.getStudies().get(0).getFiles(), is(Collections.emptyList())); + if (variant.getLengthReference() == 0 || variant.getLengthAlternate() == 0) { + assertThat(variant.getStudies().get(0).getFiles(), is(not(Collections.emptyList()))); + assertThat(variant.getStudies().get(0).getFiles().get(0).getCall(), is(not(nullValue()))); + } else { + assertThat(variant.getStudies().get(0).getFiles(), is(Collections.emptyList())); + } assertThat(new HashSet<>(variant.getStudies().get(0).getSampleDataKeys()), is(FORMAT)); } } diff --git a/opencga-storage/opencga-storage-core/src/test/java/org/opencb/opencga/storage/core/variant/adaptors/VariantQueryUtilsTest.java b/opencga-storage/opencga-storage-core/src/test/java/org/opencb/opencga/storage/core/variant/adaptors/VariantQueryUtilsTest.java index 8f14f1a202b..c939064307e 100644 --- a/opencga-storage/opencga-storage-core/src/test/java/org/opencb/opencga/storage/core/variant/adaptors/VariantQueryUtilsTest.java +++ b/opencga-storage/opencga-storage-core/src/test/java/org/opencb/opencga/storage/core/variant/adaptors/VariantQueryUtilsTest.java @@ -435,6 +435,8 @@ public void isVariantId() { checkIsVariantId("1:1000:A:T"); checkIsVariantId("1:1000-2000:A:T"); checkIsVariantId("1:1000-2000:A:"); + checkIsVariantId("HLA-DRB1*04:03:01:3349:GAGACAGAG:-", true); + checkIsVariantId("HLA-DRB1*04:03:01:3349:GAGACAGAG:-:2", false); checkIsVariantId("11:14525312:-:]11:14521700]."); checkIsVariantId("4:100:C:[15:300[A"); checkIsVariantId("4:100:C:]15:300]A"); @@ -442,8 +444,6 @@ public void isVariantId() { } public void checkIsVariantId(String v) { - - boolean actual = VariantQueryUtils.isVariantId(v); boolean expected; try { new Variant(v); @@ -451,6 +451,11 @@ public void checkIsVariantId(String v) { } catch (Exception e) { expected = false; } + checkIsVariantId(v, expected); + } + + public void checkIsVariantId(String v, boolean expected) { + boolean actual = VariantQueryUtils.isVariantId(v); assertEquals(v, expected, actual); } diff --git a/opencga-storage/opencga-storage-core/src/test/java/org/opencb/opencga/storage/core/variant/annotation/DummyTestAnnotator.java b/opencga-storage/opencga-storage-core/src/test/java/org/opencb/opencga/storage/core/variant/annotation/DummyTestAnnotator.java index 71f5135e08c..b36e8fa90ad 100644 --- a/opencga-storage/opencga-storage-core/src/test/java/org/opencb/opencga/storage/core/variant/annotation/DummyTestAnnotator.java +++ b/opencga-storage/opencga-storage-core/src/test/java/org/opencb/opencga/storage/core/variant/annotation/DummyTestAnnotator.java @@ -59,7 +59,7 @@ public List annotate(List variants) throws VariantAn public ProjectMetadata.VariantAnnotationMetadata getVariantAnnotationMetadata() throws VariantAnnotatorException { return new ProjectMetadata.VariantAnnotationMetadata(-1, null, null, new ProjectMetadata.VariantAnnotatorProgram("MyAnnotator", key, null), - Collections.singletonList(new ObjectMap("data", "genes")), null); + Collections.singletonList(new ObjectMap("data", "genes")), null,null); } } diff --git a/opencga-storage/opencga-storage-core/src/test/java/org/opencb/opencga/storage/core/variant/annotation/annotators/VariantAnnotatorByTokenTest.java b/opencga-storage/opencga-storage-core/src/test/java/org/opencb/opencga/storage/core/variant/annotation/annotators/VariantAnnotatorByApiKeyTest.java similarity index 77% rename from opencga-storage/opencga-storage-core/src/test/java/org/opencb/opencga/storage/core/variant/annotation/annotators/VariantAnnotatorByTokenTest.java rename to opencga-storage/opencga-storage-core/src/test/java/org/opencb/opencga/storage/core/variant/annotation/annotators/VariantAnnotatorByApiKeyTest.java index 0faf42d6cb7..02ae9aded18 100644 --- a/opencga-storage/opencga-storage-core/src/test/java/org/opencb/opencga/storage/core/variant/annotation/annotators/VariantAnnotatorByTokenTest.java +++ b/opencga-storage/opencga-storage-core/src/test/java/org/opencb/opencga/storage/core/variant/annotation/annotators/VariantAnnotatorByApiKeyTest.java @@ -21,7 +21,7 @@ import static org.junit.Assert.assertEquals; import static org.opencb.opencga.storage.core.variant.VariantStorageOptions.ANNOTATOR_CELLBASE_INCLUDE; -public class VariantAnnotatorByTokenTest { +public class VariantAnnotatorByApiKeyTest { private StorageConfiguration storageConfiguration; @@ -34,21 +34,18 @@ public void setUp() throws Exception { storageConfiguration = StorageConfiguration.load(StorageEngine.class.getClassLoader().getResourceAsStream("storage-configuration.yml"), "yml"); String url = "https://uk.ws.zettagenomics.com/cellbase/"; storageConfiguration.getCellbase().setUrl(url); - storageConfiguration.getCellbase().setDataRelease("1"); - storageConfiguration.getCellbase().setVersion("v5.3"); - storageConfiguration.getCellbase().setToken(null); + storageConfiguration.getCellbase().setDataRelease("3"); + storageConfiguration.getCellbase().setVersion("v5.4"); + storageConfiguration.getCellbase().setApiKey(null); CellBaseUtils cellBaseUtils = new CellBaseUtils(new CellBaseClient(storageConfiguration.getCellbase().toClientConfiguration())); - try { - Assume.assumeTrue(cellBaseUtils.isMinVersion("5.3.0")); - } catch (RuntimeException e) { - Assume.assumeNoException("Cellbase '" + url + "' not available", e); - } + Assume.assumeTrue(cellBaseUtils.isMinVersion("v5.4")); + + projectMetadata = new ProjectMetadata("hsapiens", "grch38", "3", 1, null, null, null); } @Test - public void testNoToken() throws Exception { - projectMetadata = new ProjectMetadata("hsapiens", "grch37", "1", 1, null, null, null); + public void testNoApiKey() throws Exception { ObjectMap options = new ObjectMap(VariantStorageOptions.ANNOTATOR.key(), "cellbase"); CellBaseRestVariantAnnotator annotator = new CellBaseRestVariantAnnotator(storageConfiguration, projectMetadata, options); @@ -61,12 +58,12 @@ public void testNoToken() throws Exception { } @Test - public void testCOSMICToken() throws Exception { - String cosmicToken = System.getenv("CELLBASE_COSMIC_TOKEN"); - Assume.assumeTrue(StringUtils.isNotEmpty(cosmicToken)); + public void testCOSMICApiKey() throws Exception { + String apiKey = System.getenv("CELLBASE_COSMIC_APIKEY"); + Assume.assumeTrue(StringUtils.isNotEmpty(apiKey)); + + storageConfiguration.getCellbase().setApiKey(apiKey); - storageConfiguration.getCellbase().setToken(cosmicToken); - projectMetadata = new ProjectMetadata("hsapiens", "grch37", "1", 1, null, null, null); ObjectMap options = new ObjectMap(VariantStorageOptions.ANNOTATOR.key(), "cellbase"); CellBaseRestVariantAnnotator annotator = new CellBaseRestVariantAnnotator(storageConfiguration, projectMetadata, options); assertEquals(Collections.singletonList("cosmic"), annotator.getVariantAnnotationMetadata().getPrivateSources()); @@ -80,12 +77,12 @@ public void testCOSMICToken() throws Exception { } @Test - public void testHGMDToken() throws Exception { - String hgmdToken = System.getenv("CELLBASE_HGMD_TOKEN"); - Assume.assumeTrue(StringUtils.isNotEmpty(hgmdToken)); + public void testHGMDApiKey() throws Exception { + String apiKey = System.getenv("CELLBASE_HGMD_APIKEY"); + Assume.assumeTrue(StringUtils.isNotEmpty(apiKey)); + + storageConfiguration.getCellbase().setApiKey(apiKey); - storageConfiguration.getCellbase().setToken(hgmdToken); - projectMetadata = new ProjectMetadata("hsapiens", "grch37", "1", 1, null, null, null); ObjectMap options = new ObjectMap(VariantStorageOptions.ANNOTATOR.key(), "cellbase"); CellBaseRestVariantAnnotator annotator = new CellBaseRestVariantAnnotator(storageConfiguration, projectMetadata, options); assertEquals(Collections.singletonList("hgmd"), annotator.getVariantAnnotationMetadata().getPrivateSources()); @@ -99,13 +96,12 @@ public void testHGMDToken() throws Exception { } @Test - public void testCOSMICandHGMDToken() throws Exception { - String token = System.getenv("CELLBASE_TOKEN"); - Assume.assumeTrue(StringUtils.isNotEmpty(token)); + public void testCOSMICandHGMDApiKey() throws Exception { + String apiKey = System.getenv("CELLBASE_COSMIC_HGMD_APIKEY"); + Assume.assumeTrue(StringUtils.isNotEmpty(apiKey)); - storageConfiguration.getCellbase().setToken(token); + storageConfiguration.getCellbase().setApiKey(apiKey); - projectMetadata = new ProjectMetadata("hsapiens", "grch37", "1", 1, null, null, null); ObjectMap options = new ObjectMap(VariantStorageOptions.ANNOTATOR.key(), "cellbase"); options.put(ANNOTATOR_CELLBASE_INCLUDE.key(), "clinical"); CellBaseRestVariantAnnotator annotator = new CellBaseRestVariantAnnotator(storageConfiguration, projectMetadata, options); diff --git a/opencga-storage/opencga-storage-core/src/test/java/org/opencb/opencga/storage/core/variant/annotation/annotators/VariantAnnotatorTest.java b/opencga-storage/opencga-storage-core/src/test/java/org/opencb/opencga/storage/core/variant/annotation/annotators/VariantAnnotatorTest.java index cf2b4201b5f..02b84fc38a9 100644 --- a/opencga-storage/opencga-storage-core/src/test/java/org/opencb/opencga/storage/core/variant/annotation/annotators/VariantAnnotatorTest.java +++ b/opencga-storage/opencga-storage-core/src/test/java/org/opencb/opencga/storage/core/variant/annotation/annotators/VariantAnnotatorTest.java @@ -1,6 +1,7 @@ package org.opencb.opencga.storage.core.variant.annotation.annotators; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang.StringUtils; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -9,20 +10,15 @@ import org.opencb.biodata.models.variant.Variant; import org.opencb.biodata.models.variant.avro.EvidenceEntry; import org.opencb.biodata.models.variant.avro.VariantAnnotation; -import org.opencb.cellbase.client.config.ClientConfiguration; -import org.opencb.cellbase.client.config.RestConfig; -import org.opencb.cellbase.client.rest.CellBaseClient; import org.opencb.cellbase.core.result.CellBaseDataResult; import org.opencb.commons.datastore.core.ObjectMap; import org.opencb.opencga.core.testclassification.duration.ShortTests; import org.opencb.opencga.storage.core.StorageEngine; import org.opencb.opencga.core.config.storage.StorageConfiguration; import org.opencb.opencga.storage.core.metadata.models.ProjectMetadata; -import org.opencb.opencga.storage.core.utils.CellBaseUtils; import org.opencb.opencga.storage.core.variant.VariantStorageOptions; import org.opencb.opencga.storage.core.variant.annotation.VariantAnnotatorException; -import java.io.IOException; import java.util.*; import static org.hamcrest.CoreMatchers.instanceOf; @@ -116,9 +112,9 @@ public void testErrorVariant() throws VariantAnnotatorException { } @Test - public void useCellBaseTokens() throws VariantAnnotatorException { + public void useCellBaseApiKeys() throws VariantAnnotatorException { storageConfiguration.getCellbase().setUrl("https://uk.ws.zettagenomics.com/cellbase/"); - storageConfiguration.getCellbase().setVersion("task-3808"); + storageConfiguration.getCellbase().setVersion("v5.4"); storageConfiguration.getCellbase().setDataRelease("3"); VariantAnnotator variantAnnotator = null; @@ -131,6 +127,8 @@ public void useCellBaseTokens() throws VariantAnnotatorException { } assumeTrue(variantAnnotator != null); + String apiKey; + // No token List results = variantAnnotator.annotate(Collections.singletonList(new Variant("10:113588287:G:A"))); assertEquals(1, results.size()); @@ -139,41 +137,40 @@ public void useCellBaseTokens() throws VariantAnnotatorException { assertFalse(results.get(0).getTraitAssociation().stream().anyMatch(e -> e.getSource().getName().equals("hgmd"))); // Using COSMIC token - storageConfiguration.getCellbase().setToken("eyJhbGciOiJIUzI1NiJ9.eyJzb3VyY2VzIjp7ImNvc21pYyI6OTIyMzM3MjAzNjg1NDc3NTgwN30sInZlcnNpb24iOiIxLjAiLCJzdWIiOiJaRVRUQSIsImlhdCI6MTY3NTg3MjQ2Nn0.ByfPJn8Lkh5Sow4suRZcOqVxvWZRmTBBNLDzHEIZQ5U"); - variantAnnotator = VariantAnnotatorFactory.buildVariantAnnotator(storageConfiguration, projectMetadata, options); - results = variantAnnotator.annotate(Collections.singletonList(new Variant("10:113588287:G:A"))); - assertEquals(1, results.size()); - assertTrue(results.get(0).getTraitAssociation().stream().anyMatch(e -> e.getSource().getName().equals("clinvar"))); - assertTrue(results.get(0).getTraitAssociation().stream().anyMatch(e -> e.getSource().getName().equals("cosmic"))); - assertFalse(results.get(0).getTraitAssociation().stream().anyMatch(e -> e.getSource().getName().equals("hgmd"))); + apiKey = System.getenv("CELLBASE_COSMIC_APIKEY"); + if (StringUtils.isNotEmpty(apiKey)) { + storageConfiguration.getCellbase().setApiKey(apiKey); + variantAnnotator = VariantAnnotatorFactory.buildVariantAnnotator(storageConfiguration, projectMetadata, options); + results = variantAnnotator.annotate(Collections.singletonList(new Variant("10:113588287:G:A"))); + assertEquals(1, results.size()); + assertTrue(results.get(0).getTraitAssociation().stream().anyMatch(e -> e.getSource().getName().equals("clinvar"))); + assertTrue(results.get(0).getTraitAssociation().stream().anyMatch(e -> e.getSource().getName().equals("cosmic"))); + assertFalse(results.get(0).getTraitAssociation().stream().anyMatch(e -> e.getSource().getName().equals("hgmd"))); + } // Using HGMD token - storageConfiguration.getCellbase().setToken("eyJhbGciOiJIUzI1NiJ9.eyJzb3VyY2VzIjp7ImhnbWQiOjkyMjMzNzIwMzY4NTQ3NzU4MDd9LCJ2ZXJzaW9uIjoiMS4wIiwic3ViIjoiWkVUVEEiLCJpYXQiOjE2NzU4NzI1MDd9.f3JgVRt7_VrifNWTaRMW3aQfrKbtDbIxlzoenJRYJo0"); - variantAnnotator = VariantAnnotatorFactory.buildVariantAnnotator(storageConfiguration, projectMetadata, options); - results = variantAnnotator.annotate(Collections.singletonList(new Variant("10:113588287:G:A"))); - assertEquals(1, results.size()); - assertTrue(results.get(0).getTraitAssociation().stream().anyMatch(e -> e.getSource().getName().equals("clinvar"))); - assertFalse(results.get(0).getTraitAssociation().stream().anyMatch(e -> e.getSource().getName().equals("cosmic"))); - assertTrue(results.get(0).getTraitAssociation().stream().anyMatch(e -> e.getSource().getName().equals("hgmd"))); - - // Using COSMIC = HGMD token - storageConfiguration.getCellbase().setToken("eyJhbGciOiJIUzI1NiJ9.eyJzb3VyY2VzIjp7ImNvc21pYyI6OTIyMzM3MjAzNjg1NDc3NTgwNywiaGdtZCI6OTIyMzM3MjAzNjg1NDc3NTgwN30sInZlcnNpb24iOiIxLjAiLCJzdWIiOiJaRVRUQSIsImlhdCI6MTY3NTg3MjUyN30.NCCFc4SAhjUsN5UU0wXGY6nCZx8jLglvaO1cNZYI0u4"); - variantAnnotator = VariantAnnotatorFactory.buildVariantAnnotator(storageConfiguration, projectMetadata, options); - results = variantAnnotator.annotate(Collections.singletonList(new Variant("10:113588287:G:A"))); - assertEquals(1, results.size()); - assertTrue(results.get(0).getTraitAssociation().stream().anyMatch(e -> e.getSource().getName().equals("clinvar"))); - assertTrue(results.get(0).getTraitAssociation().stream().anyMatch(e -> e.getSource().getName().equals("cosmic"))); - assertTrue(results.get(0).getTraitAssociation().stream().anyMatch(e -> e.getSource().getName().equals("hgmd"))); - } + apiKey = System.getenv("CELLBASE_HGMD_APIKEY"); + if (StringUtils.isNotEmpty(apiKey)) { + storageConfiguration.getCellbase().setApiKey(apiKey); + variantAnnotator = VariantAnnotatorFactory.buildVariantAnnotator(storageConfiguration, projectMetadata, options); + results = variantAnnotator.annotate(Collections.singletonList(new Variant("10:113588287:G:A"))); + assertEquals(1, results.size()); + assertTrue(results.get(0).getTraitAssociation().stream().anyMatch(e -> e.getSource().getName().equals("clinvar"))); + assertFalse(results.get(0).getTraitAssociation().stream().anyMatch(e -> e.getSource().getName().equals("cosmic"))); + assertTrue(results.get(0).getTraitAssociation().stream().anyMatch(e -> e.getSource().getName().equals("hgmd"))); + } - private Set getSources(VariantAnnotation variantAnnotation) { - Set sources = new HashSet<>(); - if (variantAnnotation != null && CollectionUtils.isNotEmpty(variantAnnotation.getTraitAssociation())) { - for (EvidenceEntry entry : variantAnnotation.getTraitAssociation()) { - sources.add(entry.getSource().getName()); - } + // Using COSMIC + HGMD token + apiKey = System.getenv("CELLBASE_COSMIC_HGMD_APIKEY"); + if (StringUtils.isNotEmpty(apiKey)) { + storageConfiguration.getCellbase().setApiKey(apiKey); + variantAnnotator = VariantAnnotatorFactory.buildVariantAnnotator(storageConfiguration, projectMetadata, options); + results = variantAnnotator.annotate(Collections.singletonList(new Variant("10:113588287:G:A"))); + assertEquals(1, results.size()); + assertTrue(results.get(0).getTraitAssociation().stream().anyMatch(e -> e.getSource().getName().equals("clinvar"))); + assertTrue(results.get(0).getTraitAssociation().stream().anyMatch(e -> e.getSource().getName().equals("cosmic"))); + assertTrue(results.get(0).getTraitAssociation().stream().anyMatch(e -> e.getSource().getName().equals("hgmd"))); } - return sources; } public static class TestCellBaseRestVariantAnnotator extends CellBaseRestVariantAnnotator { diff --git a/opencga-storage/opencga-storage-core/src/test/resources/hrdetect_output_38.tsv b/opencga-storage/opencga-storage-core/src/test/resources/hrdetect_output_38.tsv index f69d855e19c..14b9e346363 100644 --- a/opencga-storage/opencga-storage-core/src/test/resources/hrdetect_output_38.tsv +++ b/opencga-storage/opencga-storage-core/src/test/resources/hrdetect_output_38.tsv @@ -1,2 +1,2 @@ intercept del.mh.prop SNV3 SV3 SV5 hrd SNV8 Probability -AR2.10039966-01T -3.364 6.1388694855816 2.93200322296942 -0.876753168376584 1.62647246717118 -0.102769988932733 0.110259929136027 0.998444003582779 +AR2.10039966-01T -3.364 -1.70122966415816 -0.949832911392405 -0.876753168376584 -1.10515509103169 -1.95208666666667 -0.125665303554577 4.21293910790655e-05 diff --git a/opencga-storage/opencga-storage-core/src/test/resources/variant-large-sv.vcf b/opencga-storage/opencga-storage-core/src/test/resources/variant-large-sv.vcf new file mode 100644 index 00000000000..7038eb551fb --- /dev/null +++ b/opencga-storage/opencga-storage-core/src/test/resources/variant-large-sv.vcf @@ -0,0 +1,10 @@ +##fileformat=VCFv4.1 +##FILTER= +##FILTER= +##FORMAT= +##FORMAT= +##FORMAT= +##command=seq 1000000 500 3000000 | while read i ; do echo -e "chr1\t$i\t.\tA\tC\t$RANDOM\tPASS\t.\tGT\t0/1\t1/1\t1|0\t0|1" ; done +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA19600 NA19660 NA19661 NA19685 +chr1 1000000 . A 6067 PASS END=4000000 GT 0/1 1/1 1|0 0|1 +chr1 4000200 . A C 5536 PASS . GT 0/1 1/1 1|0 0|1 \ No newline at end of file diff --git a/opencga-storage/opencga-storage-core/src/test/resources/variant-multiallelic.vcf b/opencga-storage/opencga-storage-core/src/test/resources/variant-multiallelic.vcf new file mode 100644 index 00000000000..dc1cfc5d784 --- /dev/null +++ b/opencga-storage/opencga-storage-core/src/test/resources/variant-multiallelic.vcf @@ -0,0 +1,20 @@ +##fileformat=VCFv4.1 +##FILTER= +##FILTER= +##FILTER= +##FILTER= +##FORMAT= +##FORMAT= +##FORMAT= +##command=seq 1000000 500 3000000 | while read i ; do echo -e "chr1\t$i\t.\tA\tC\t$RANDOM\tPASS\t.\tGT\t0/1\t1/1\t1|0\t0|1" ; done +#CHROM POS ID REF ALT QUAL FILTER INFO FORMAT NA19600 NA19660 NA19661 NA19685 +chr1 1000000 . A C,T 5 noPass,noPass2 . GT 1/2 1/1 0|0 0|1 +chr1 1000010 . A AC,CA 20 PASS . GT 1/2 1/1 0|0 0|1 +chr1 1000020 . AT T,A 60 . . GT 1/2 1/1 0|0 0|1 +chr1 1000030 . C G 60 . PASS GT 1/0 1/1 0|0 0|1 +chr1 1000040 . C G 60 . PASS GT 1/0 1/1 0|0 0|1 +chr1 1000050 . C G 60 . PASS GT 1/0 1/1 0|0 0|1 +chr1 1000060 . C G 60 . PASS GT 1/0 1/1 0|0 0|1 +chr1 1000070 . C G 60 . PASS GT 1/0 1/1 0|0 0|1 +chr1 1000080 . C G 60 . PASS GT 1/0 1/1 0|0 0|1 +chr1 1000090 . C G 60 . PASS GT 1/0 1/1 0|0 0|1 \ No newline at end of file diff --git a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/pom.xml b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/pom.xml index ca90d6fc622..97db69b63b9 100644 --- a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/pom.xml +++ b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/pom.xml @@ -23,7 +23,7 @@ org.opencb.opencga opencga-storage-hadoop - 2.10.0-SNAPSHOT + 2.11.0-SNAPSHOT ../pom.xml diff --git a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/HadoopLocalLoadVariantStoragePipeline.java b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/HadoopLocalLoadVariantStoragePipeline.java index b67fa9887e5..063219f7654 100644 --- a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/HadoopLocalLoadVariantStoragePipeline.java +++ b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/HadoopLocalLoadVariantStoragePipeline.java @@ -50,6 +50,7 @@ import org.opencb.opencga.storage.hadoop.variant.archive.VariantHBaseArchiveDataWriter; import org.opencb.opencga.storage.hadoop.variant.index.sample.SampleIndexDBAdaptor; import org.opencb.opencga.storage.hadoop.variant.index.sample.SampleIndexDBLoader; +import org.opencb.opencga.storage.hadoop.variant.index.sample.SampleIndexSchema; import org.opencb.opencga.storage.hadoop.variant.load.VariantHadoopDBWriter; import org.opencb.opencga.storage.hadoop.variant.transform.VariantSliceReader; import org.opencb.opencga.storage.hadoop.variant.transform.VariantToVcfSliceConverterTask; @@ -83,6 +84,7 @@ public class HadoopLocalLoadVariantStoragePipeline extends HadoopVariantStorageP private int taskId; private HashSet loadedGenotypes; private int sampleIndexVersion; + private int largestVariantLength; public HadoopLocalLoadVariantStoragePipeline(StorageConfiguration configuration, VariantHadoopDBAdaptor dbAdaptor, IOConnectorProvider ioConnectorProvider, @@ -266,6 +268,7 @@ protected void loadFromProto(URI input, URI outdir, ArchiveTableHelper helper, P VariantHadoopDBWriter variantsWriter = newVariantHadoopDBWriter(); List sampleIds = new ArrayList<>(getMetadataManager().getFileMetadata(getStudyId(), getFileId()).getSamples()); SampleIndexDBLoader sampleIndexDBLoader = newSampleIndexDBLoader(sampleIds); + GetLargestVariantTask largestVariantTask = new GetLargestVariantTask(); // ((TaskMetadata) t -> t) // .then(archiveWriter) @@ -294,6 +297,7 @@ protected void loadFromProto(URI input, URI outdir, ArchiveTableHelper helper, P } List variants = converter.convert(slice); + largestVariantTask.apply(variants); variants = VariantHadoopDBWriter.filterVariantsNotFromThisSlice(slice.getPosition(), variants); variantsWriter.write(variants); if (sampleIndexDBLoader != null) { @@ -327,6 +331,7 @@ protected void loadFromProto(URI input, URI outdir, ArchiveTableHelper helper, P // Update list of loaded genotypes this.loadedGenotypes = sampleIndexDBLoader.getLoadedGenotypes(); this.sampleIndexVersion = sampleIndexDBLoader.getSampleIndexVersion(); + this.largestVariantLength = largestVariantTask.getMaxLength(); } } @@ -354,6 +359,7 @@ protected void loadFromAvroWithArchive(URI input, URI outdir, ArchiveTableHelper boolean stdin = options.getBoolean(STDIN.key(), STDIN.defaultValue()); int sliceBufferSize = options.getInt(ARCHIVE_SLICE_BUFFER_SIZE.key(), ARCHIVE_SLICE_BUFFER_SIZE.defaultValue()); VariantReader variantReader = variantReaderUtils.getVariantReader(input, helper.getStudyMetadata(), stdin); + GetLargestVariantTask largestVariantTask = new GetLargestVariantTask(); AbstractDuplicatedVariantsResolver resolver = new DuplicatedVariantsResolverFactory(getOptions(), ioConnectorProvider) .getResolver(UriUtils.fileName(input), outdir); VariantDeduplicationTask dedupTask = new DuplicatedVariantsResolverFactory(getOptions(), ioConnectorProvider) @@ -374,7 +380,7 @@ protected void loadFromAvroWithArchive(URI input, URI outdir, ArchiveTableHelper String nonRefFilter = options.getString(ARCHIVE_NON_REF_FILTER.key()); // TODO: Move "SampleIndexDBLoader" to Write step so we can increase the number of threads GroupedVariantsTask task = new GroupedVariantsTask(archiveWriter, hadoopDBWriter, sampleIndexDBLoader, - null, archiveFields, nonRefFilter); + null, archiveFields, nonRefFilter, largestVariantTask); ParallelTaskRunner>, Object> ptr = new ParallelTaskRunner<>(sliceReader, task, null, config); @@ -389,6 +395,7 @@ protected void loadFromAvroWithArchive(URI input, URI outdir, ArchiveTableHelper // Update list of loaded genotypes this.loadedGenotypes = sampleIndexDBLoader.getLoadedGenotypes(); this.sampleIndexVersion = sampleIndexDBLoader.getSampleIndexVersion(); + this.largestVariantLength = largestVariantTask.getMaxLength(); } } @@ -397,7 +404,7 @@ protected void loadFromAvroWithoutArchive(URI input, URI outdir, ArchiveTableHel int studyId = helper.getStudyId(); int fileId = Integer.parseInt(helper.getFileMetadata().getId()); - + List sampleIds = new ArrayList<>(getMetadataManager().getFileMetadata(studyId, fileId).getSamples()); // Reader boolean stdin = options.getBoolean(STDIN.key(), STDIN.defaultValue()); @@ -406,12 +413,12 @@ protected void loadFromAvroWithoutArchive(URI input, URI outdir, ArchiveTableHel .getResolver(UriUtils.fileName(input), outdir); VariantDeduplicationTask dedupTask = new DuplicatedVariantsResolverFactory(getOptions(), ioConnectorProvider) .getTask(resolver); - DataReader reader = variantReader.then(dedupTask); + GetLargestVariantTask largestVariantTask = new GetLargestVariantTask(); + DataReader reader = variantReader.then(dedupTask).then(largestVariantTask); // Variants Writer VariantHadoopDBWriter hadoopDBWriter = newVariantHadoopDBWriter(); // Sample Index Writer - List sampleIds = new ArrayList<>(getMetadataManager().getFileMetadata(studyId, fileId).getSamples()); SampleIndexDBLoader sampleIndexDBLoader = newSampleIndexDBLoader(sampleIds); Task progressLoggerTask = progressLogger @@ -436,6 +443,7 @@ protected void loadFromAvroWithoutArchive(URI input, URI outdir, ArchiveTableHel // Update list of loaded genotypes this.loadedGenotypes = sampleIndexDBLoader.getLoadedGenotypes(); this.sampleIndexVersion = sampleIndexDBLoader.getSampleIndexVersion(); + this.largestVariantLength = largestVariantTask.getMaxLength(); } } @@ -490,6 +498,8 @@ private void logLoadResults(VariantFileMetadata variantFileMetadata, int duplica } } } + getLoadStats().put("largestVariantLength", largestVariantLength); + logger.info("Largest variant found in VCF had a length of : {}", largestVariantLength); logger.info("============================================================"); } @@ -503,16 +513,50 @@ public URI postLoad(URI input, URI output) throws StorageEngineException { metadataManager.setStatus(getStudyId(), taskId, Status.READY); boolean loadSampleIndex = YesNoAuto.parse(getOptions(), LOAD_SAMPLE_INDEX.key()).orYes().booleanValue(); - if (loadSampleIndex) { - for (Integer sampleId : metadataManager.getSampleIdsFromFileId(getStudyId(), getFileId())) { - // Worth to check first to avoid too many updates in scenarios like 1000G - SampleMetadata sampleMetadata = metadataManager.getSampleMetadata(getStudyId(), sampleId); - if (sampleMetadata.getSampleIndexStatus(sampleIndexVersion) != Status.READY) { - metadataManager.updateSampleMetadata(getStudyId(), sampleId, - s -> s.setSampleIndexStatus(Status.READY, sampleIndexVersion)); + for (Integer sampleId : metadataManager.getSampleIdsFromFileId(getStudyId(), getFileId())) { + // Worth to check first to avoid too many updates in scenarios like 1000G + SampleMetadata sampleMetadata = metadataManager.getSampleMetadata(getStudyId(), sampleId); + boolean updateSampleIndexStatus = loadSampleIndex && sampleMetadata.getSampleIndexStatus(sampleIndexVersion) != Status.READY; + int actualLargestVariantLength = sampleMetadata.getAttributes().getInt(SampleIndexSchema.LARGEST_VARIANT_LENGTH); + boolean alreadyLoadedFiles = false; + if (sampleMetadata.getFiles().size() > 1) { + int loadedFiles = 0; + for (Integer fileId : sampleMetadata.getFiles()) { + if (metadataManager.isFileIndexed(getStudyId(), fileId)) { + loadedFiles++; + } + } + if (loadedFiles > 1) { + alreadyLoadedFiles = true; + } + metadataManager.getFileIdsFromSampleId(1, 1, true); + } + boolean updateLargestVariantLength; + if (alreadyLoadedFiles) { + if (actualLargestVariantLength > 0) { + // Already loaded files, with a valid value. Update if needed. + updateLargestVariantLength = largestVariantLength > actualLargestVariantLength; + } else { + // Already loaded files without a valid value. Do not set a value, as it might be smaller than previous files. + updateLargestVariantLength = false; } + } else { + // First file loaded. Update value + updateLargestVariantLength = true; + } + + if (updateSampleIndexStatus || updateLargestVariantLength) { + metadataManager.updateSampleMetadata(getStudyId(), sampleId, s -> { + if (updateSampleIndexStatus) { + s.setSampleIndexStatus(Status.READY, sampleIndexVersion); + } + if (updateLargestVariantLength) { + s.getAttributes().put(SampleIndexSchema.LARGEST_VARIANT_LENGTH, largestVariantLength); + } + }); } } + boolean loadArchive = YesNoAuto.parse(getOptions(), LOAD_ARCHIVE.key()).orYes().booleanValue(); if (loadArchive) { metadataManager.updateFileMetadata(getStudyId(), getFileId(), fileMetadata -> { @@ -578,18 +622,20 @@ protected static class GroupedVariantsTask implements Task otherTask; GroupedVariantsTask(VariantHBaseArchiveDataWriter archiveWriter, VariantHadoopDBWriter hadoopDBWriter, - SampleIndexDBLoader sampleIndexDBLoader, ProgressLogger progressLogger) { - this(archiveWriter, hadoopDBWriter, sampleIndexDBLoader, progressLogger, null, null); - } - - GroupedVariantsTask(VariantHBaseArchiveDataWriter archiveWriter, VariantHadoopDBWriter hadoopDBWriter, - SampleIndexDBLoader sampleIndexDBLoader, ProgressLogger progressLogger, String fields, String nonRefFilter) { + SampleIndexDBLoader sampleIndexDBLoader, ProgressLogger progressLogger, String fields, String nonRefFilter, + Task otherTask) { this.converterTask = new VariantToVcfSliceConverterTask(progressLogger, fields, nonRefFilter); this.archiveWriter = Objects.requireNonNull(archiveWriter); this.hadoopDBWriter = Objects.requireNonNull(hadoopDBWriter); this.sampleIndexDBLoader = sampleIndexDBLoader; + if (otherTask == null) { + this.otherTask = t -> t; + } else { + this.otherTask = otherTask; + } } @Override @@ -606,10 +652,11 @@ public void pre() throws Exception { } converterTask.pre(); + otherTask.pre(); } @Override - public List apply(List>> batch) { + public List apply(List>> batch) throws Exception { for (ImmutablePair> pair : batch) { List variants = VariantHadoopDBWriter.filterVariantsNotFromThisSlice(pair.getKey(), pair.getValue()); hadoopDBWriter.write(variants); @@ -617,6 +664,7 @@ public List apply(List>> batch) { if (sampleIndexDBLoader != null) { sampleIndexDBLoader.write(variants); } + otherTask.apply(variants); } List slices = converterTask.apply(batch); @@ -639,7 +687,36 @@ public void post() throws Exception { } converterTask.post(); + otherTask.post(); } } + private static class GetLargestVariantTask implements Task { + + private final AtomicInteger maxLength = new AtomicInteger(); + + @Override + public List apply(List variants) { + int localMax = maxLength.get(); + boolean newValue = false; + for (Variant variant : variants) { + if (variant.getLengthReference() > localMax) { + localMax = variant.getLengthReference(); + newValue = true; + } + } + if (newValue) { + updateMaxLength(localMax); + } + return variants; + } + + private void updateMaxLength(int local) { + maxLength.updateAndGet(v -> Math.max(v, local)); + } + + public int getMaxLength() { + return maxLength.get(); + } + } } diff --git a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/HadoopVariantStorageOptions.java b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/HadoopVariantStorageOptions.java index 3b487eaa7aa..ab6dfaf87ef 100644 --- a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/HadoopVariantStorageOptions.java +++ b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/HadoopVariantStorageOptions.java @@ -95,6 +95,9 @@ public enum HadoopVariantStorageOptions implements ConfigurationOption { SAMPLE_INDEX_BUILD_MAX_SAMPLES_PER_MR("storage.hadoop.sampleIndex.build.maxSamplesPerMR", 2000), SAMPLE_INDEX_ANNOTATION_MAX_SAMPLES_PER_MR("storage.hadoop.sampleIndex.annotation.maxSamplesPerMR", 2000), SAMPLE_INDEX_FAMILY_MAX_TRIOS_PER_MR("storage.hadoop.sampleIndex.family.maxTriosPerMR", 1000), + SAMPLE_INDEX_QUERY_SAMPLE_INDEX_ONLY_PD_BUFFER("storage.hadoop.sampleIndex.query.sampleIndexOnly.partialData.buffer", 10000), + SAMPLE_INDEX_QUERY_SAMPLE_INDEX_ONLY_PD_BATCH("storage.hadoop.sampleIndex.query.sampleIndexOnly.partialData.batch", 250), + SAMPLE_INDEX_QUERY_EXTENDED_REGION_FILTER("storage.hadoop.sampleIndex.query.extendedRegionFilter.default", 5_000_000), ///////////////////////// // Annotation index table configuration diff --git a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/adaptors/VariantHBaseQueryParser.java b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/adaptors/VariantHBaseQueryParser.java index 2d6c3ce8593..1de83e96382 100644 --- a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/adaptors/VariantHBaseQueryParser.java +++ b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/adaptors/VariantHBaseQueryParser.java @@ -225,7 +225,8 @@ public List parseQueryMultiRegion(VariantQueryProjection selectElements, Q } List scans; - if ((regions.isEmpty() || regions.size() == 1) && variants.isEmpty() && idIntersect.isEmpty()) { + int numLocusFilters = regions.size() + variants.size() + idIntersect.size(); + if (numLocusFilters <= 1) { scans = Collections.singletonList(parseQuery(selectElements, query, options)); } else { scans = new ArrayList<>(regions.size() + variants.size() + idIntersect.size()); @@ -236,7 +237,7 @@ public List parseQueryMultiRegion(VariantQueryProjection selectElements, Q subQuery.remove(ID.key()); subQuery.remove(ID_INTERSECT.key()); - subQuery.put(REGION.key(), "MULTI_REGION"); + subQuery.put(REGION.key(), "MULTI_REGION (#" + numLocusFilters + ")"); Scan templateScan = parseQuery(selectElements, subQuery, options); for (Region region : regions) { @@ -254,7 +255,7 @@ public List parseQueryMultiRegion(VariantQueryProjection selectElements, Q subQuery.put(ID.key(), variant); try { Scan scan = new Scan(templateScan); - scan.setSmall(true); + scan.setOneRowLimit(); addVariantIdFilter(scan, variant); scans.add(scan); } catch (IOException e) { @@ -301,6 +302,17 @@ public Scan parseQuery(VariantQueryProjection selectElements, Query query, Query Variant variant = VariantQueryUtils.toVariant(ids.get(0)); addVariantIdFilter(scan, variant); regionOrVariant = variant; + scan.setOneRowLimit(); + } + if (isValidParam(query, ID_INTERSECT)) { + List ids = query.getAsStringList(ID_INTERSECT.key()); + if (ids.size() != 1) { + throw VariantQueryException.malformedParam(ID_INTERSECT, ids.toString(), "Unsupported multiple variant ids filter"); + } + Variant variant = VariantQueryUtils.toVariant(ids.get(0)); + addVariantIdFilter(scan, variant); + regionOrVariant = variant; + scan.setOneRowLimit(); } // if (isValidParam(query, ID)) { @@ -587,21 +599,26 @@ public Scan parseQuery(VariantQueryProjection selectElements, Query query, Query } scan.setReversed(options.getString(QueryOptions.ORDER, QueryOptions.ASCENDING).equals(QueryOptions.DESCENDING)); - logger.info("----------------------------"); - logger.info("StartRow = " + Bytes.toStringBinary(scan.getStartRow())); - logger.info("StopRow = " + Bytes.toStringBinary(scan.getStopRow())); - if (regionOrVariant != null) { - logger.info("\tRegion = " + regionOrVariant); - } - logger.info("columns (" + scan.getFamilyMap().getOrDefault(family, Collections.emptyNavigableSet()).size() + ") = " - + scan.getFamilyMap().getOrDefault(family, Collections.emptyNavigableSet()) - .stream().map(Bytes::toString).collect(Collectors.joining(","))); - logger.info("MaxResultSize = " + scan.getMaxResultSize()); - logger.info("Filters = " + scan.getFilter()); - if (!scan.getTimeRange().isAllTime()) { - logger.info("TimeRange = " + scan.getTimeRange()); - } - logger.info("Batch = " + scan.getBatch()); + if (!options.getBoolean(VariantHadoopDBAdaptor.QUIET)) { + logger.info("----------------------------"); + String startRow = Bytes.toStringBinary(scan.getStartRow()); + if (!startRow.startsWith("MULTI_REGION")) { + logger.info("StartRow = " + startRow); + logger.info("StopRow = " + Bytes.toStringBinary(scan.getStopRow())); + } + if (regionOrVariant != null) { + logger.info("\tRegion = " + regionOrVariant); + } + logger.info("columns (" + scan.getFamilyMap().getOrDefault(family, Collections.emptyNavigableSet()).size() + ") = " + + scan.getFamilyMap().getOrDefault(family, Collections.emptyNavigableSet()) + .stream().map(Bytes::toString).collect(Collectors.joining(","))); + logger.info("MaxResultSize = " + scan.getMaxResultSize()); + logger.info("Filters = " + scan.getFilter()); + if (!scan.getTimeRange().isAllTime()) { + logger.info("TimeRange = " + scan.getTimeRange()); + } + logger.info("Batch = " + scan.getBatch()); + } return scan; } diff --git a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/adaptors/VariantHadoopDBAdaptor.java b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/adaptors/VariantHadoopDBAdaptor.java index e4b1acc4980..3d6fe440da1 100644 --- a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/adaptors/VariantHadoopDBAdaptor.java +++ b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/adaptors/VariantHadoopDBAdaptor.java @@ -90,6 +90,7 @@ public class VariantHadoopDBAdaptor implements VariantDBAdaptor { public static final String NATIVE = "native"; + public static final String QUIET = "quiet"; public static final QueryParam ANNOT_NAME = QueryParam.create("annotName", "", Type.TEXT); protected static Logger logger = LoggerFactory.getLogger(VariantHadoopDBAdaptor.class); diff --git a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/converters/study/HBaseToStudyEntryConverter.java b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/converters/study/HBaseToStudyEntryConverter.java index c6921fdfb55..7acd417c78e 100644 --- a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/converters/study/HBaseToStudyEntryConverter.java +++ b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/converters/study/HBaseToStudyEntryConverter.java @@ -240,11 +240,7 @@ protected StudyEntry convert(List sampleDataMap, } Map> alternateFileMap = new HashMap<>(); - for (Pair pair : filesMap) { - String fileId = pair.getKey(); - PhoenixArray fileColumn = pair.getValue(); - addFileEntry(studyMetadata, variant, studyEntry, fileId, fileColumn, alternateFileMap); - } + addFileEntries(filesMap, variant, studyMetadata, studyEntry, alternateFileMap); addSecondaryAlternates(variant, studyEntry, studyMetadata, alternateFileMap); fillEmptySamplesData(studyEntry, studyMetadata, fillMissingColumnValue); @@ -386,8 +382,36 @@ private List remapSamplesData(List sampleData, int[] formatsMap) } } - private void addFileEntry(StudyMetadata studyMetadata, Variant variant, StudyEntry studyEntry, String fileIdStr, - PhoenixArray fileColumn, Map> alternateFileMap) { + private void addFileEntries(List> filesMap, Variant variant, StudyMetadata studyMetadata, + StudyEntry studyEntry, Map> alternateFileMap) { + // Some file entries might be added only for their "OriginalCall" info. + // These would be added at the end, but only if the original call is not already present. + ArrayList filesOnlyCall = new ArrayList<>(); + for (Pair pair : filesMap) { + String fileId = pair.getKey(); + PhoenixArray fileColumn = pair.getValue(); + addFileEntry(studyMetadata, variant, fileId, fileColumn, alternateFileMap, studyEntry.getFiles(), filesOnlyCall); + } + if (!filesOnlyCall.isEmpty()) { + // Create a set of original calls to avoid duplicates + Set variantIds = new HashSet<>(); + for (FileEntry fileEntry : studyEntry.getFiles()) { + if (fileEntry.getCall() != null) { + variantIds.add(fileEntry.getCall().getVariantId()); + } + } + for (FileEntry fileEntry : filesOnlyCall) { + if (variantIds.add(fileEntry.getCall().getVariantId())) { + // Not seen, so add to the list of file entries + studyEntry.getFiles().add(fileEntry); + } + } + } + } + + private void addFileEntry(StudyMetadata studyMetadata, Variant variant, String fileIdStr, + PhoenixArray fileColumn, Map> alternateFileMap, + List files, List filesOnlyCall) { int fileId = Integer.parseInt(fileIdStr); String alternateRaw = (String) (fileColumn.getElement(FILE_SEC_ALTS_IDX)); String alternate = normalizeNonRefAlternateCoordinate(variant, alternateRaw); @@ -399,10 +423,10 @@ private void addFileEntry(StudyMetadata studyMetadata, Variant variant, StudyEnt if (configuration.getProjection() != null && !configuration.getProjection().getStudy(studyMetadata.getId()).getFiles().contains(fileId)) { - // TODO: Should we return the original CALL? -// if (call != null && !call.isEmpty()) { -// studyEntry.getFiles().add(new FileEntry(fileName, call, Collections.emptyMap())); -// } + if (call != null && !call.isEmpty()) { + OriginalCall originalCall = parseOriginalCall(call); + filesOnlyCall.add(new FileEntry(fileName, originalCall, Collections.emptyMap())); + } return; } @@ -412,8 +436,7 @@ private void addFileEntry(StudyMetadata studyMetadata, Variant variant, StudyEnt VariantOverlappingStatus overlappingStatus = VariantOverlappingStatus.valueFromShortString((String) (fileColumn.getElement(FILE_VARIANT_OVERLAPPING_STATUS_IDX))); if (call != null && !call.isEmpty()) { - int i = call.lastIndexOf(':'); - originalCall = new OriginalCall(call.substring(0, i), Integer.valueOf(call.substring(i + 1))); + originalCall = parseOriginalCall(call); } else if (overlappingStatus.equals(VariantOverlappingStatus.MULTI)) { attributes.put(StudyEntry.FILTER, "SiteConflict"); AlternateCoordinate alternateCoordinate = getAlternateCoordinate(alternateRaw); @@ -424,7 +447,13 @@ private void addFileEntry(StudyMetadata studyMetadata, Variant variant, StudyEnt alternateCoordinate.getReference(), alternateCoordinate.getAlternate()).toString(), 0); } - studyEntry.getFiles().add(new FileEntry(fileName, originalCall, attributes)); + files.add(new FileEntry(fileName, originalCall, attributes)); + } + + private OriginalCall parseOriginalCall(String call) { + int i = call.lastIndexOf(':'); + OriginalCall originalCall = new OriginalCall(call.substring(0, i), Integer.valueOf(call.substring(i + 1))); + return originalCall; } public static HashMap convertFileAttributes(PhoenixArray fileColumn, List fixedAttributes) { diff --git a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/SampleIndexOnlyVariantQueryExecutor.java b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/SampleIndexOnlyVariantQueryExecutor.java index 9211318768a..5829a9580a8 100644 --- a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/SampleIndexOnlyVariantQueryExecutor.java +++ b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/SampleIndexOnlyVariantQueryExecutor.java @@ -6,21 +6,24 @@ import org.apache.commons.lang3.time.StopWatch; import org.opencb.biodata.models.variant.StudyEntry; import org.opencb.biodata.models.variant.Variant; +import org.opencb.biodata.models.variant.avro.FileEntry; import org.opencb.biodata.models.variant.avro.SampleEntry; import org.opencb.biodata.tools.commons.Converter; import org.opencb.commons.datastore.core.DataResult; import org.opencb.commons.datastore.core.ObjectMap; import org.opencb.commons.datastore.core.Query; import org.opencb.commons.datastore.core.QueryOptions; +import org.opencb.commons.run.Task; +import org.opencb.opencga.core.common.BatchUtils; import org.opencb.opencga.core.common.TimeUtils; +import org.opencb.opencga.core.config.storage.IndexFieldConfiguration; import org.opencb.opencga.core.response.VariantQueryResult; +import org.opencb.opencga.storage.core.io.bit.BitBuffer; import org.opencb.opencga.storage.core.metadata.VariantStorageMetadataManager; import org.opencb.opencga.storage.core.metadata.models.SampleMetadata; import org.opencb.opencga.storage.core.metadata.models.TaskMetadata; import org.opencb.opencga.storage.core.utils.iterators.CloseableIterator; -import org.opencb.opencga.storage.core.variant.adaptors.VariantField; -import org.opencb.opencga.storage.core.variant.adaptors.VariantQueryException; -import org.opencb.opencga.storage.core.variant.adaptors.VariantQueryParam; +import org.opencb.opencga.storage.core.variant.adaptors.*; import org.opencb.opencga.storage.core.variant.adaptors.iterators.VariantDBIterator; import org.opencb.opencga.storage.core.variant.query.ParsedVariantQuery; import org.opencb.opencga.storage.core.variant.query.VariantQueryParser; @@ -30,10 +33,12 @@ import org.opencb.opencga.storage.core.variant.query.projection.VariantQueryProjectionParser; import org.opencb.opencga.storage.hadoop.variant.adaptors.VariantHadoopDBAdaptor; import org.opencb.opencga.storage.hadoop.variant.converters.HBaseToVariantConverter; +import org.opencb.opencga.storage.hadoop.variant.index.core.IndexField; import org.opencb.opencga.storage.hadoop.variant.index.family.GenotypeCodec; import org.opencb.opencga.storage.hadoop.variant.index.query.SampleIndexQuery; import org.opencb.opencga.storage.hadoop.variant.index.sample.SampleIndexDBAdaptor; import org.opencb.opencga.storage.hadoop.variant.index.sample.SampleIndexQueryParser; +import org.opencb.opencga.storage.hadoop.variant.index.sample.SampleIndexSchema; import org.opencb.opencga.storage.hadoop.variant.index.sample.SampleVariantIndexEntry; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -41,8 +46,13 @@ import java.io.IOException; import java.util.*; import java.util.concurrent.*; +import java.util.function.BiConsumer; +import java.util.stream.Collectors; +import static org.opencb.opencga.storage.core.variant.query.VariantQueryUtils.NONE; import static org.opencb.opencga.storage.core.variant.query.VariantQueryUtils.addSamplesMetadataIfRequested; +import static org.opencb.opencga.storage.hadoop.variant.HadoopVariantStorageOptions.SAMPLE_INDEX_QUERY_SAMPLE_INDEX_ONLY_PD_BATCH; +import static org.opencb.opencga.storage.hadoop.variant.HadoopVariantStorageOptions.SAMPLE_INDEX_QUERY_SAMPLE_INDEX_ONLY_PD_BUFFER; import static org.opencb.opencga.storage.hadoop.variant.index.SampleIndexVariantQueryExecutor.SAMPLE_INDEX_TABLE_SOURCE; /** @@ -56,11 +66,16 @@ public class SampleIndexOnlyVariantQueryExecutor extends VariantQueryExecutor { private final VariantHadoopDBAdaptor dbAdaptor; private final VariantQueryParser variantQueryParser; private final VariantQueryProjectionParser variantQueryProjectionParser; - private Logger logger = LoggerFactory.getLogger(SampleIndexOnlyVariantQueryExecutor.class); + private static Logger logger = LoggerFactory.getLogger(SampleIndexOnlyVariantQueryExecutor.class); private static final ExecutorService THREAD_POOL = Executors.newCachedThreadPool(new BasicThreadFactory.Builder() .namingPattern("sample-index-async-count-%s") .build()); + private static final ExecutorService THREAD_POOL_FETCH_CALL = Executors.newCachedThreadPool(new BasicThreadFactory.Builder() + .namingPattern("sample-index-fetch-call-%s") + .build()); + private int partialDataBufferSize; + private int partialDataBatchSize; public SampleIndexOnlyVariantQueryExecutor(VariantHadoopDBAdaptor dbAdaptor, SampleIndexDBAdaptor sampleIndexDBAdaptor, String storageEngineId, ObjectMap options) { @@ -69,6 +84,10 @@ public SampleIndexOnlyVariantQueryExecutor(VariantHadoopDBAdaptor dbAdaptor, Sam this.dbAdaptor = dbAdaptor; variantQueryParser = new VariantQueryParser(null, getMetadataManager()); variantQueryProjectionParser = new VariantQueryProjectionParser(getMetadataManager()); + partialDataBufferSize = options.getInt(SAMPLE_INDEX_QUERY_SAMPLE_INDEX_ONLY_PD_BUFFER.key(), + SAMPLE_INDEX_QUERY_SAMPLE_INDEX_ONLY_PD_BUFFER.defaultValue()); + partialDataBatchSize = options.getInt(SAMPLE_INDEX_QUERY_SAMPLE_INDEX_ONLY_PD_BATCH.key(), + SAMPLE_INDEX_QUERY_SAMPLE_INDEX_ONLY_PD_BATCH.defaultValue()); } @Override @@ -143,9 +162,9 @@ protected Object getOrIterator(Query inputQuery, QueryOptions options, boolean i } private VariantDBIterator getVariantDBIterator(SampleIndexQuery sampleIndexQuery, Query inputQuery, QueryOptions options) { - ParsedVariantQuery parseQuery = variantQueryParser.parseQuery(inputQuery, options, true); + ParsedVariantQuery parsedQuery = variantQueryParser.parseQuery(inputQuery, options, true); VariantDBIterator variantIterator; - if (parseQuery.getProjection().getStudyIds().isEmpty()) { + if (parsedQuery.getProjection().getStudyIds().isEmpty()) { logger.info("Using sample index iterator Iterator"); variantIterator = sampleIndexDBAdaptor.iterator(sampleIndexQuery, options); variantIterator = variantIterator.map(v -> v.setId(v.toString())); @@ -157,9 +176,13 @@ private VariantDBIterator getVariantDBIterator(SampleIndexQuery sampleIndexQuery } catch (IOException e) { throw VariantQueryException.internalException(e).setQuery(inputQuery); } - SampleVariantIndexEntryToVariantConverter converter = - new SampleVariantIndexEntryToVariantConverter(parseQuery, sampleIndexQuery, dbAdaptor.getMetadataManager()); + boolean includeAll = inputQuery.getBoolean("includeAllFromSampleIndex", false); + SampleVariantIndexEntryToVariantConverter converter = new SampleVariantIndexEntryToVariantConverter( + parsedQuery, sampleIndexQuery, dbAdaptor.getMetadataManager(), includeAll); variantIterator = VariantDBIterator.wrapper(Iterators.transform(rawIterator, converter::convert)); + AddMissingDataTask task = new AddMissingDataTask( + parsedQuery, sampleIndexQuery, dbAdaptor.getMetadataManager()); + variantIterator = variantIterator.mapBuffered(task::apply, partialDataBufferSize); variantIterator.addCloseable(rawIterator); } return variantIterator; @@ -201,7 +224,6 @@ private boolean isIncludeCovered(SampleIndexQuery sampleIndexQuery, Query inputQ || includeFields.contains(VariantField.STUDIES_FILES) || includeFields.contains(VariantField.STUDIES_ISSUES) || includeFields.contains(VariantField.STUDIES_SCORES) - || includeFields.contains(VariantField.STUDIES_SECONDARY_ALTERNATES) ) { return false; } @@ -270,7 +292,7 @@ private static class SampleVariantIndexEntryToVariantConverter implements Conver enum FamilyRole { MOTHER, FATHER, - SAMPLE + SAMPLE; } private final boolean includeStudy; @@ -280,9 +302,18 @@ enum FamilyRole { private String motherName; private String fatherName; private LinkedHashMap samplesPosition; + private List sampleFiles; + private IndexField filterField; + private IndexField qualField; + private final SampleIndexSchema schema; + private final boolean includeAll; + SampleVariantIndexEntryToVariantConverter(ParsedVariantQuery parseQuery, SampleIndexQuery sampleIndexQuery, - VariantStorageMetadataManager metadataManager) { + VariantStorageMetadataManager metadataManager, boolean includeAll) { + schema = sampleIndexQuery.getSchema(); + this.includeAll = includeAll; + VariantQueryProjection projection = parseQuery.getProjection(); includeStudy = !projection.getStudyIds().isEmpty(); if (includeStudy) { @@ -298,7 +329,6 @@ enum FamilyRole { sampleName = sampleIndexQuery.getSamplesMap().keySet().iterator().next(); Integer sampleId = metadataManager.getSampleId(studyId, sampleName); - familyRoleOrder = new ArrayList<>(); samplesPosition = new LinkedHashMap<>(); SampleMetadata sampleMetadata = null; // lazy init @@ -333,6 +363,31 @@ enum FamilyRole { this.fatherName = null; } + if (includeAll) { + if (sampleMetadata == null) { + sampleMetadata = metadataManager.getSampleMetadata(studyId, sampleId); + } + if (sampleMetadata.isMultiFileSample()) { + List sampleFileIds = sampleMetadata.getFiles(); + sampleFiles = new ArrayList<>(sampleFileIds.size()); + for (Integer fileId : sampleFileIds) { + sampleFiles.add(metadataManager.getFileName(studyId, fileId)); + } + } else { + List fileIds = metadataManager.getFileIdsFromSampleId(studyId, sampleId, true); + if (fileIds.isEmpty()) { + logger.warn("Sample without indexed files!"); + sampleFiles = Collections.singletonList("sample_without_indexed_files.vcf"); + } else { + String fileName = metadataManager.getFileName(studyId, fileIds.get(0)); + sampleFiles = Collections.singletonList(fileName); + } + } + filterField = schema.getFileIndex() + .getCustomField(IndexFieldConfiguration.Source.FILE, StudyEntry.FILTER); + qualField = schema.getFileIndex() + .getCustomField(IndexFieldConfiguration.Source.FILE, StudyEntry.QUAL); + } } } @@ -345,28 +400,261 @@ public Variant convert(SampleVariantIndexEntry entry) { studyEntry.setStudyId(studyName); studyEntry.setSampleDataKeys(Collections.singletonList("GT")); studyEntry.setSamples(new ArrayList<>(familyRoleOrder.size())); + SampleEntry sampleEntry = null; for (FamilyRole role : familyRoleOrder) { switch (role) { case MOTHER: studyEntry.getSamples().add(new SampleEntry(motherName, null, - Collections.singletonList(GenotypeCodec.decodeMother(entry.getParentsCode())))); + Arrays.asList(GenotypeCodec.decodeMother(entry.getParentsCode())))); break; case FATHER: studyEntry.getSamples().add(new SampleEntry(fatherName, null, - Collections.singletonList(GenotypeCodec.decodeFather(entry.getParentsCode())))); + Arrays.asList(GenotypeCodec.decodeFather(entry.getParentsCode())))); break; case SAMPLE: - studyEntry.getSamples().add(new SampleEntry(sampleName, null, - Collections.singletonList(entry.getGenotype()))); + sampleEntry = new SampleEntry(sampleName, null, + Arrays.asList(entry.getGenotype())); + studyEntry.getSamples().add(sampleEntry); break; default: throw new IllegalStateException("Unexpected value: " + role); } } + if (includeAll) { + HashMap fileAttributes = new HashMap<>(); + for (BitBuffer fileIndexBitBuffer : entry.getFilesIndex()) { + String filter = filterField.readAndDecode(fileIndexBitBuffer); + if (filter == null) { + filter = "NA"; + } + fileAttributes.put(StudyEntry.FILTER, filter); + String qual = qualField.readAndDecode(fileIndexBitBuffer); + if (qual == null) { + qual = "NA"; + } + fileAttributes.put(StudyEntry.QUAL, qual); + + Integer idx = schema.getFileIndex().getFilePositionIndex().readAndDecode(fileIndexBitBuffer); + String fileName = sampleFiles.get(idx); + studyEntry.setFiles(new ArrayList<>()); + studyEntry.getFiles().add(new FileEntry(fileName, null, fileAttributes)); + if (sampleEntry != null) { + sampleEntry.setFileIndex(0); + } + } + } studyEntry.setSortedSamplesPosition(samplesPosition); v.setStudies(Collections.singletonList(studyEntry)); } return v; } } + + private class AddMissingDataTask implements Task { + private final ParsedVariantQuery parsedQuery; + private final String studyName; + private final String sampleName; + private final List filesFromSample; + private final List includeSamples; + private final List allFiles; // from all includedSamples + private final int gtIdx; + + AddMissingDataTask(ParsedVariantQuery parsedQuery, SampleIndexQuery sampleIndexQuery, + VariantStorageMetadataManager metadataManager) { + this.parsedQuery = parsedQuery; + VariantQueryProjection projection = this.parsedQuery.getProjection(); + + int studyId = projection.getStudyIds().get(0); // only one study + VariantQueryProjection.StudyVariantQueryProjection projectionStudy = projection.getStudy(studyId); + studyName = projectionStudy.getStudyMetadata().getName(); + + if (sampleIndexQuery.getSamplesMap().size() != 1) { + // This should never happen + throw new IllegalStateException("Unexpected number of samples. Expected one, found " + + sampleIndexQuery.getSamplesMap().keySet()); + } + includeSamples = new ArrayList<>(projectionStudy.getSamples().size()); + for (Integer sample : projectionStudy.getSamples()) { + includeSamples.add(metadataManager.getSampleName(studyId, sample)); + } + Set allFileIds = metadataManager.getFileIdsFromSampleIds(studyId, projectionStudy.getSamples(), true); + allFiles = new ArrayList<>(allFileIds.size()); + for (Integer fileId : allFileIds) { + allFiles.add(metadataManager.getFileName(studyId, fileId)); + } + + sampleName = sampleIndexQuery.getSamplesMap().keySet().iterator().next(); + Integer sampleId = metadataManager.getSampleId(studyId, sampleName); + List fileIds = metadataManager.getFileIdsFromSampleId(studyId, sampleId, true); + filesFromSample = new ArrayList<>(fileIds.size()); + for (Integer fileId : fileIds) { + filesFromSample.add(metadataManager.getFileName(studyId, fileId)); + } + List includeSampleData = VariantQueryUtils.getIncludeSampleData(parsedQuery.getInputQuery()); + gtIdx = includeSampleData.indexOf("GT"); + } + + @Override + public List apply(List variants) { + // Multi allelic variants, to be read entirely + List multiAllelic = new ArrayList<>(); + // INDELs (non multiallelic) variants, to fetch the original call + List indels = new ArrayList<>(); + for (Variant variant : variants) { + boolean secAlt = false; + for (SampleEntry sample : variant.getStudies().get(0).getSamples()) { + if (GenotypeClass.SEC.test(sample.getData().get(0))) { + secAlt = true; + break; + } + } + if (secAlt) { + multiAllelic.add(variant); + } else { + if (variant.getLengthReference() == 0 || variant.getLengthAlternate() == 0) { + indels.add(variant); + } + } + } + // Process in multiple treads + List> futures = new ArrayList<>(10); + if (!multiAllelic.isEmpty()) { + List> batches = BatchUtils.splitBatches(multiAllelic, partialDataBatchSize); + for (List batch : batches) { + futures.add(THREAD_POOL_FETCH_CALL.submit(() -> addSecondaryAlternates(batch))); + } + } + if (!indels.isEmpty()) { + List> batches = BatchUtils.splitBatches(indels, partialDataBatchSize); + for (List batch : batches) { + futures.add(THREAD_POOL_FETCH_CALL.submit(() -> addOriginalCall(batch, studyName))); + } + } + + StopWatch stopWatch = StopWatch.createStarted(); + for (Future future : futures) { + try { + // Should end in few seconds + future.get(90, TimeUnit.SECONDS); + } catch (InterruptedException | ExecutionException | TimeoutException e) { + throw new VariantQueryException("Error fetching extra data", e); + } + } + logger.info("Fetch {} partial variants in {} in {} threads", + multiAllelic.size() + indels.size(), + TimeUtils.durationToString(stopWatch), + futures.size()); + return variants; + } + + /** + * Fetch the Secondary alternates, sample GTs and original call of these variants. + * @param toReadFull variants to complete + */ + private void addSecondaryAlternates(List toReadFull) { +// StopWatch stopWatch = StopWatch.createStarted(); + Set includeFields = new HashSet<>(VariantField.getIncludeFields(parsedQuery.getInputOptions())); + includeFields.add(VariantField.STUDIES_SECONDARY_ALTERNATES); + includeFields.add(VariantField.STUDIES_FILES); + + QueryOptions options = new QueryOptions(parsedQuery.getInputOptions()); + options.remove(QueryOptions.EXCLUDE); + options.remove(VariantField.SUMMARY); + options.put(QueryOptions.INCLUDE, includeFields); + options.put(VariantHadoopDBAdaptor.QUIET, true); + options.put(VariantHadoopDBAdaptor.NATIVE, true); + + Map variantsExtra = dbAdaptor.get(new VariantQuery() + .id(toReadFull) + .study(studyName) + .includeSample(includeSamples) + .includeSampleData("GT") // read only GT + .includeFile(allFiles), + options) + .getResults().stream().collect(Collectors.toMap(Variant::toString, v -> v)); + + for (Variant variant : toReadFull) { + Variant variantExtra = variantsExtra.get(variant.toString()); + if (variantExtra == null) { + // TODO: Should we fail here? +// throw new VariantQueryException("Variant " + variant + " not found!"); + logger.warn("Variant " + variant + " not found!"); + continue; + } + StudyEntry studyExtra = variantExtra.getStudies().get(0); + StudyEntry study = variant.getStudies().get(0); + + study.setSecondaryAlternates(studyExtra.getSecondaryAlternates()); + + mergeFileEntries(study, studyExtra.getFiles(), (fe, newFe) -> { + fe.setCall(newFe.getCall()); + }); + // merge sampleEntries + for (int i = 0; i < includeSamples.size(); i++) { + SampleEntry sample = study.getSample(i); + SampleEntry sampleExtra = studyExtra.getSample(i); + + sample.getData().set(gtIdx, sampleExtra.getData().get(0)); + } + } +// logger.info(" # Fetch {} SEC_ALTS in {}", toReadFull.size(), TimeUtils.durationToString(stopWatch)); + } + + private void addOriginalCall(List variants, String study) { +// StopWatch stopWatch = StopWatch.createStarted(); + Map> filesMap = new HashMap<>(variants.size()); + for (Variant variant : dbAdaptor.iterable( + new Query() + .append(VariantQueryParam.ID.key(), variants) + .append(VariantQueryParam.INCLUDE_FILE.key(), filesFromSample) + .append(VariantQueryParam.INCLUDE_SAMPLE.key(), NONE) + .append(VariantQueryParam.INCLUDE_STUDY.key(), study), + new QueryOptions() + .append(VariantHadoopDBAdaptor.NATIVE, true) + .append(VariantHadoopDBAdaptor.QUIET, true) + .append(QueryOptions.INCLUDE, Arrays.asList(VariantField.STUDIES_FILES)))) { + + List fileEntries = variant.getStudies().get(0).getFiles(); + // Remove data, as we only want the original call + fileEntries.forEach(fileEntry -> fileEntry.setData(Collections.emptyMap())); + filesMap.put(variant.toString(), fileEntries); + } + + for (Variant variant : variants) { + List fileEntries = filesMap.get(variant.toString()); + if (fileEntries == null) { + // TODO: Should we fail here? +// throw new VariantQueryException("Variant " + variant + " not found!"); + logger.warn("Variant " + variant + " not found!"); + continue; + } + StudyEntry studyEntry = variant.getStudies().get(0); + mergeFileEntries(studyEntry, fileEntries, (fe, newFe) -> { + fe.setCall(newFe.getCall()); + }); + } +// logger.info(" # Fetch {} INDEL original call in {}", filesMap.size(), TimeUtils.durationToString(stopWatch)); + } + + private void mergeFileEntries(StudyEntry studyEntry, List newFileEntries, + BiConsumer merge) { + if (studyEntry.getFiles() == null) { + studyEntry.setFiles(new ArrayList<>(newFileEntries.size())); + } + for (FileEntry newFileEntry : newFileEntries) { + FileEntry fileEntry = studyEntry.getFile(newFileEntry.getFileId()); + if (fileEntry == null) { + fileEntry = new FileEntry(newFileEntry.getFileId(), null, new HashMap<>()); + studyEntry.getFiles().add(fileEntry); + if (filesFromSample.contains(fileEntry.getFileId())) { + SampleEntry sampleEntry = studyEntry.getSample(sampleName); + if (sampleEntry.getFileIndex() == null) { + sampleEntry.setFileIndex(studyEntry.getFiles().size() - 1); + } + } + } + merge.accept(fileEntry, newFileEntry); + } + } + } } diff --git a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/core/CategoricalIndexField.java b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/core/CategoricalIndexField.java index 1ebc25bbe97..59e373257d7 100644 --- a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/core/CategoricalIndexField.java +++ b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/core/CategoricalIndexField.java @@ -8,10 +8,7 @@ import org.opencb.opencga.storage.hadoop.variant.index.core.filters.MultiValueIndexFieldFilter; import org.opencb.opencga.storage.hadoop.variant.index.core.filters.SingleValueIndexFieldFilter; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; /** @@ -22,7 +19,7 @@ * Value "0" represents NA. */ public class CategoricalIndexField extends IndexField implements IndexCodec { - private final int numBits; + private final int bitLength; private final IndexCodec codec; public static CategoricalIndexField create(IndexFieldConfiguration configuration, int bitOffset) { @@ -43,18 +40,18 @@ public CategoricalIndexField(IndexFieldConfiguration configuration, int bitOffse numValues = values.length; codec = new BasicCodec<>(values, valuesMapping); } - this.numBits = Math.max(1, IndexUtils.log2(numValues - 1) + 1); + this.bitLength = Math.max(1, IndexUtils.log2(numValues - 1) + 1); } public CategoricalIndexField(IndexFieldConfiguration configuration, int bitOffset, int numValues, IndexCodec codec) { super(configuration, bitOffset); - this.numBits = IndexUtils.log2(numValues - 1) + 1; + this.bitLength = IndexUtils.log2(numValues - 1) + 1; this.codec = codec; } @Override public int getBitLength() { - return numBits; + return bitLength; } @Override @@ -124,6 +121,16 @@ public T decode(int code) { public boolean ambiguous(int code) { return ambiguousValues[code]; } + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("BasicCodec{"); + sb.append("values=").append(Arrays.toString(values)); + sb.append(", valuesMappingRev=").append(valuesMappingRev); + sb.append(", ambiguousValues=").append(Arrays.toString(ambiguousValues)); + sb.append('}'); + return sb.toString(); + } } private static class BasicCodecWithNa implements IndexCodec { @@ -178,6 +185,20 @@ public T decode(int code) { public boolean ambiguous(int code) { return ambiguousValues[code]; } + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("BasicCodecWithNa{"); + sb.append("values=").append(Arrays.toString(values)); + sb.append(", valuesMappingRev=").append(valuesMappingRev); + sb.append(", ambiguousValues=").append(Arrays.toString(ambiguousValues)); + sb.append('}'); + return sb.toString(); + } + } + + protected IndexCodec getCodec() { + return codec; } @Override @@ -195,4 +216,14 @@ public boolean ambiguous(int code) { return codec.ambiguous(code); } + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("CategoricalIndexField{"); + sb.append("configuration=").append(getConfiguration()); + sb.append(", bitOffset=").append(getBitOffset()); + sb.append(", bitLength=").append(bitLength); + sb.append(", codec=").append(codec); + sb.append('}'); + return sb.toString(); + } } diff --git a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/core/CategoricalMultiValuedIndexField.java b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/core/CategoricalMultiValuedIndexField.java index 3f172f9db72..e7bafeb4b11 100644 --- a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/core/CategoricalMultiValuedIndexField.java +++ b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/core/CategoricalMultiValuedIndexField.java @@ -20,7 +20,7 @@ */ public class CategoricalMultiValuedIndexField extends CategoricalIndexField> { - private final int numBits; + private final int bitLength; public static CategoricalMultiValuedIndexField createMultiValued(IndexFieldConfiguration configuration, int bitOffset) { return new CategoricalMultiValuedIndexField<>( @@ -41,7 +41,7 @@ public CategoricalMultiValuedIndexField(IndexFieldConfiguration configuration, i private CategoricalMultiValuedIndexField(IndexFieldConfiguration configuration, int bitOffset, T[] values, MaskValueCodec codec) { super(configuration, bitOffset, values.length, codec); - numBits = codec.numBits; + bitLength = codec.numBits; } @Override @@ -59,7 +59,7 @@ protected IndexFieldFilter getSingleValueIndexFilter(OpValue> opValue) { @Override public int getBitLength() { - return numBits; + return bitLength; } /** @@ -145,6 +145,28 @@ public List decode(int code) { public boolean ambiguous(int code) { return code == NA || (code & ambiguousValues) != 0; } + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("MaskValueCodec{"); + sb.append("values=").append(Arrays.toString(values)); + sb.append(", otherValuePosition=").append(otherValuePosition); + sb.append(", valuesPosition=").append(valuesPosition); + sb.append(", numBits=").append(numBits); + sb.append(", ambiguousValues=").append(ambiguousValues); + sb.append('}'); + return sb.toString(); + } } + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("CategoricalMultiValuedIndexField{"); + sb.append("configuration=").append(getConfiguration()); + sb.append(", codec=").append(getCodec()); + sb.append(", bitOffset=").append(getBitOffset()); + sb.append(", bitLength=").append(bitLength); + sb.append('}'); + return sb.toString(); + } } diff --git a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/core/FixedSizeIndexSchema.java b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/core/FixedSizeIndexSchema.java index 727d21c6ae6..1b2592caec9 100644 --- a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/core/FixedSizeIndexSchema.java +++ b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/core/FixedSizeIndexSchema.java @@ -38,4 +38,12 @@ public BitBuffer read(BitBuffer buffer, int i) { return buffer.getBitBuffer(i * indexSizeBits, indexSizeBits); } + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("FixedSizeIndexSchema{"); + sb.append("indexSizeBits=").append(indexSizeBits); + sb.append(", fields=").append(fields); + sb.append('}'); + return sb.toString(); + } } diff --git a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/core/IndexField.java b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/core/IndexField.java index aa12c98653f..ae0715ff52e 100644 --- a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/core/IndexField.java +++ b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/core/IndexField.java @@ -170,4 +170,12 @@ public R decode(int code) { }; } + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("IndexField{"); + sb.append("configuration=").append(configuration); + sb.append(", bitOffset=").append(bitOffset); + sb.append('}'); + return sb.toString(); + } } diff --git a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/core/RangeIndexField.java b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/core/RangeIndexField.java index 5cf4d9e75c0..5e37863cee7 100644 --- a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/core/RangeIndexField.java +++ b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/core/RangeIndexField.java @@ -7,6 +7,7 @@ import org.opencb.opencga.storage.hadoop.variant.index.core.filters.IndexFieldFilter; import org.opencb.opencga.storage.hadoop.variant.index.core.filters.RangeIndexFieldFilter; +import java.util.Arrays; import java.util.List; /** @@ -18,7 +19,7 @@ public class RangeIndexField extends IndexField { private final double[] thresholds; private final double min; private final double max; - private final int numBits; + private final int bitLength; private final IndexCodec codec; private int numRanges; @@ -40,7 +41,7 @@ public RangeIndexField(IndexFieldConfiguration configuration, int bitOffset, dou } else { codec = new NonNullableRangeCodec(); } - numBits = Math.max(1, IndexUtils.log2(numRanges - 1) + 1); + bitLength = Math.max(1, IndexUtils.log2(numRanges - 1) + 1); if (configuration.getType().equals(IndexFieldConfiguration.Type.RANGE_GT)) { // Add one DELTA to each value to invert ranges from [s, e) to (s, e], therefore the operation ">" is exact for (int i = 0; i < thresholds.length; i++) { @@ -77,7 +78,7 @@ public double getMax() { @Override public int getBitLength() { - return numBits; + return bitLength; } @Override @@ -120,13 +121,20 @@ public int encode(Double value) { @Override public Double decode(int code) { - return code == thresholds.length ? max : code < 0 ? min : thresholds[code]; + return code <= 0 ? min : thresholds[code - 1]; } @Override public boolean ambiguous(int code) { return true; } + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("NonNullableRangeCodec{"); + sb.append('}'); + return sb.toString(); + } } public class NullableRangeCodec extends NonNullableRangeCodec { @@ -142,6 +150,13 @@ public int encode(Double value) { public Double decode(int code) { return code == NA ? null : super.decode(code - 1); } + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("NullableRangeCodec{"); + sb.append('}'); + return sb.toString(); + } } /** @@ -174,4 +189,19 @@ public static boolean lessThan(double a, double b) { public static boolean equalsTo(double a, double b) { return Math.abs(a - b) < (DELTA / 10); } + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("RangeIndexField{"); + sb.append("configuration=").append(getConfiguration()); + sb.append(", bitOffset=").append(getBitOffset()); + sb.append(", bitLength=").append(bitLength); + sb.append(", thresholds=").append(Arrays.toString(thresholds)); + sb.append(", min=").append(min); + sb.append(", max=").append(max); + sb.append(", codec=").append(codec); + sb.append(", numRanges=").append(numRanges); + sb.append('}'); + return sb.toString(); + } } diff --git a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/core/SingleFieldIndexSchema.java b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/core/SingleFieldIndexSchema.java index 58da9585b8f..2f2cf67409a 100644 --- a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/core/SingleFieldIndexSchema.java +++ b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/core/SingleFieldIndexSchema.java @@ -21,4 +21,12 @@ public int readFieldValue(BitBuffer buffer, int i) { // return getField().read(read(buffer, i)); return buffer.getIntPartial(i * getBitsLength(), getBitsLength()); } + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("SingleFieldIndexSchema{"); + sb.append("field=").append(field); + sb.append('}'); + return sb.toString(); + } } diff --git a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/family/MendelianErrorSampleIndexEntryIterator.java b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/family/MendelianErrorSampleIndexEntryIterator.java index 233129ef337..f089c82f20e 100644 --- a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/family/MendelianErrorSampleIndexEntryIterator.java +++ b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/family/MendelianErrorSampleIndexEntryIterator.java @@ -125,9 +125,12 @@ public Variant next() { @Override public SampleVariantIndexEntry nextSampleVariantIndexEntry() { AnnotationIndexEntry annotationIndexEntry = nextAnnotationIndexEntry(); - BitBuffer fileIndex = null; + List filesIndex = new ArrayList<>(); if (hasFileIndex()) { - fileIndex = nextFileIndexEntry(); + filesIndex.add(nextFileIndexEntry()); + while (isMultiFileIndex()) { + filesIndex.add(nextMultiFileIndexEntry()); + } } String genotype = nextGenotype(); int meCode = nextMendelianErrorCode(); @@ -136,7 +139,7 @@ public SampleVariantIndexEntry nextSampleVariantIndexEntry() { parentsCode = nextParentsIndexEntry(); } Variant variant = next(); - return new SampleVariantIndexEntry(variant, fileIndex, genotype, annotationIndexEntry, parentsCode, meCode); + return new SampleVariantIndexEntry(variant, filesIndex, genotype, annotationIndexEntry, parentsCode, meCode); } @Override diff --git a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/query/LocusQuery.java b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/query/LocusQuery.java index ff031718ebd..2bd4c84f900 100644 --- a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/query/LocusQuery.java +++ b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/query/LocusQuery.java @@ -2,7 +2,6 @@ import org.opencb.biodata.models.core.Region; import org.opencb.biodata.models.variant.Variant; -import org.opencb.opencga.storage.hadoop.variant.index.sample.SampleIndexSchema; import java.util.ArrayList; import java.util.List; @@ -14,7 +13,7 @@ /** * Sample index queries based on position, aligned to SampleIndex chunks. */ -public class LocusQuery { +public class LocusQuery implements Comparable { /** * Region aligned with sampleIndex chunks covering all locus from regions and variants. */ @@ -34,12 +33,6 @@ public LocusQuery(Region chunkRegion, List regions, List varian this.variants = variants; } - public static LocusQuery buildLocusQuery(Region r) { - LocusQuery locusQuery = new LocusQuery(SampleIndexSchema.getChunkRegion(r)); - locusQuery.getRegions().add(r); - return locusQuery; - } - public Region getChunkRegion() { return chunkRegion; } @@ -96,4 +89,9 @@ public String toString() { sb.append('}'); return sb.toString(); } + + @Override + public int compareTo(LocusQuery o) { + return REGION_COMPARATOR.compare(chunkRegion, o.chunkRegion); + } } diff --git a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/query/SampleIndexQuery.java b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/query/SampleIndexQuery.java index fddc76a5fc2..664ace07747 100644 --- a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/query/SampleIndexQuery.java +++ b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/query/SampleIndexQuery.java @@ -33,6 +33,7 @@ public class SampleIndexQuery { private final SampleIndexSchema schema; private final Collection locusQueries; + private final int extendedFilteringRegion; private final Set variantTypes; private final String study; private final Map> samplesMap; @@ -59,6 +60,7 @@ public enum MendelianErrorType { public SampleIndexQuery(Collection locusQueries, SampleIndexQuery query) { this.schema = query.schema; this.locusQueries = locusQueries; + this.extendedFilteringRegion = query.extendedFilteringRegion; this.variantTypes = query.variantTypes; this.study = query.study; this.samplesMap = query.samplesMap; @@ -74,14 +76,8 @@ public SampleIndexQuery(Collection locusQueries, SampleIndexQuery qu this.queryOperation = query.queryOperation; } - public SampleIndexQuery(SampleIndexSchema schema, Collection locusQueries, String study, Map> samplesMap, QueryOperation queryOperation) { - this(schema, locusQueries, null, study, samplesMap, Collections.emptySet(), null, Collections.emptyMap(), Collections.emptyMap(), - Collections.emptyMap(), - new SampleAnnotationIndexQuery(schema), Collections.emptySet(), null, false, queryOperation); - } - - public SampleIndexQuery(SampleIndexSchema schema, Collection locusQueries, Set variantTypes, String study, + public SampleIndexQuery(SampleIndexSchema schema, Collection locusQueries, int extendedFilteringRegion, + Set variantTypes, String study, Map> samplesMap, Set multiFileSamplesSet, Set negatedSamples, Map fatherFilter, Map motherFilter, Map> fileFilterMap, @@ -90,6 +86,7 @@ public SampleIndexQuery(SampleIndexSchema schema, Collection locusQu QueryOperation queryOperation) { this.schema = schema; this.locusQueries = locusQueries; + this.extendedFilteringRegion = extendedFilteringRegion; this.variantTypes = variantTypes; this.study = study; this.samplesMap = samplesMap; @@ -113,6 +110,10 @@ public Collection getLocusQueries() { return locusQueries; } + public int getExtendedFilteringRegion() { + return extendedFilteringRegion; + } + public List getAllRegions() { return locusQueries.stream() .map(LocusQuery::getRegions) @@ -163,7 +164,6 @@ public Set getNegatedSamples() { return negatedSamples; } - public boolean isNegated(String sample) { return getNegatedSamples().contains(sample); } diff --git a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/query/SingleSampleIndexQuery.java b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/query/SingleSampleIndexQuery.java index 7db8c2d0e8b..35a9e67e718 100644 --- a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/query/SingleSampleIndexQuery.java +++ b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/query/SingleSampleIndexQuery.java @@ -24,7 +24,7 @@ protected SingleSampleIndexQuery(SampleIndexQuery query, String sample) { protected SingleSampleIndexQuery(SampleIndexQuery query, String sample, List gts) { super(query.getSchema(), query.getLocusQueries() == null ? null : new ArrayList<>(query.getLocusQueries()), - query.getVariantTypes() == null ? null : new HashSet<>(query.getVariantTypes()), + query.getExtendedFilteringRegion(), query.getVariantTypes() == null ? null : new HashSet<>(query.getVariantTypes()), query.getStudy(), Collections.singletonMap(sample, gts), query.getMultiFileSamplesSet(), diff --git a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/sample/AbstractSampleIndexEntryFilter.java b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/sample/AbstractSampleIndexEntryFilter.java index 37dbb0180b3..1a0fd0935d9 100644 --- a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/sample/AbstractSampleIndexEntryFilter.java +++ b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/sample/AbstractSampleIndexEntryFilter.java @@ -206,7 +206,12 @@ private Collection filter(SampleIndexEntry entry, boolean count) { entry.getSampleId(), entry.getChromosome(), entry.getBatchStart(), gtEntry.getGt()); - logger.warn(gtEntry.toStringSummary()); + try { + logger.warn(gtEntry.toStringSummary()); + logger.warn(converter.getSchema().toString()); + } catch (Exception exception) { + e.addSuppressed(exception); + } throw e; } if (!variants.isEmpty()) { @@ -459,7 +464,7 @@ private boolean filterLocus(Variant variant) { return true; } for (Region region : locusQuery.getRegions()) { - if (region.contains(variant.getChromosome(), variant.getStart())) { + if (region.overlaps(variant.getChromosome(), variant.getStart(), variant.getEnd())) { return true; } } diff --git a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/sample/FileIndexSchema.java b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/sample/FileIndexSchema.java index 4ea023e75e5..a383109139d 100644 --- a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/sample/FileIndexSchema.java +++ b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/sample/FileIndexSchema.java @@ -213,7 +213,32 @@ private static IndexField buildCustomIndexField(IndexFieldConfiguration } else { return Arrays.asList(s.split(VCFConstants.FILTER_CODE_SEPARATOR)); } - }, v -> v == null ? null : String.join(VCFConstants.FILTER_CODE_SEPARATOR, v)); + }, values -> { + if (values == null || values.isEmpty()) { + return null; + } + if (values.size() == 1) { + String value = values.get(0); + if (value == null) { + return null; + } else { + return value; + } + } else { + StringBuilder sb = new StringBuilder(); + for (String v : values) { + if (sb.length() != 0) { + sb.append(VCFConstants.FILTER_CODE_SEPARATOR); + } + if (v == null) { + sb.append("NA"); + } else { + sb.append(v); + } + } + return sb.toString(); + } + }); } else { return new CategoricalMultiValuedIndexField<>(conf, bitOffset, conf.getValues()) .from(s -> { diff --git a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/sample/SampleIndexDBAdaptor.java b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/sample/SampleIndexDBAdaptor.java index d94ec75cab5..c7abaedcde9 100644 --- a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/sample/SampleIndexDBAdaptor.java +++ b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/sample/SampleIndexDBAdaptor.java @@ -369,14 +369,8 @@ private long count(SingleSampleIndexQuery query) { long count = 0; for (LocusQuery locusQuery : locusQueries) { // Split region in countable regions - List subLocusQueries; - if (locusQuery != null && locusQuery.getVariants().isEmpty() && locusQuery.getRegions().size() == 1) { - subLocusQueries = splitRegion(locusQuery.getRegions().get(0)) - .stream().map(LocusQuery::buildLocusQuery).collect(Collectors.toList()); - } else { - // Do not split - subLocusQueries = Collections.singletonList(locusQuery); - } + List subLocusQueries = splitLocusQuery(locusQuery); + for (LocusQuery subLocusQuery : subLocusQueries) { boolean noLocusFilter = subLocusQuery == null || (subLocusQuery.getVariants().isEmpty() @@ -466,36 +460,60 @@ protected List getAllLoadedGenotypes(int study) { /** * Split region into regions that match with batches at SampleIndexTable. * - * @param region Region to split + * @param locusQuery Locus query to split * @return List of regions. */ - protected static List splitRegion(Region region) { - List regions; + protected static List splitLocusQuery(LocusQuery locusQuery) { + if (locusQuery == null || !locusQuery.getVariants().isEmpty() || locusQuery.getRegions().size() != 1) { + // Do not split + return Collections.singletonList(locusQuery); + } + Region region = locusQuery.getRegions().get(0); + List locusQueries; if (region.getEnd() - region.getStart() < SampleIndexSchema.BATCH_SIZE) { // Less than one batch. Do not split region - regions = Collections.singletonList(region); + locusQueries = Collections.singletonList(locusQuery); } else if (region.getStart() / SampleIndexSchema.BATCH_SIZE + 1 == region.getEnd() / SampleIndexSchema.BATCH_SIZE && !startsAtBatch(region) && !endsAtBatch(region)) { // Consecutive partial batches. Do not split region - regions = Collections.singletonList(region); + locusQueries = Collections.singletonList(locusQuery); } else { - // Copy region before modifying + locusQueries = new ArrayList<>(3); +// Copy regions before modifying region = new Region(region.getChromosome(), region.getStart(), region.getEnd()); - regions = new ArrayList<>(3); + Region chunkRegion = new Region(locusQuery.getChunkRegion().getChromosome(), + locusQuery.getChunkRegion().getStart(), + locusQuery.getChunkRegion().getEnd()); if (!startsAtBatch(region)) { - int splitPoint = region.getStart() - region.getStart() % SampleIndexSchema.BATCH_SIZE + SampleIndexSchema.BATCH_SIZE; - regions.add(new Region(region.getChromosome(), region.getStart(), splitPoint - 1)); + int splitPoint = SampleIndexSchema.getChunkStartNext(region.getStart()); + Region startRegion = new Region(region.getChromosome(), region.getStart(), splitPoint - 1); + locusQueries.add(new LocusQuery( + // Keep the exceeded start only for the first split. + new Region(chunkRegion.getChromosome(), chunkRegion.getStart(), splitPoint), + Collections.singletonList(startRegion), + Collections.emptyList())); region.setStart(splitPoint); + chunkRegion.setStart(splitPoint); } - regions.add(region); if (!endsAtBatch(region)) { - int splitPoint = region.getEnd() - region.getEnd() % SampleIndexSchema.BATCH_SIZE; - regions.add(new Region(region.getChromosome(), splitPoint, region.getEnd())); + int splitPoint = SampleIndexSchema.getChunkStart(region.getEnd()); + Region endRegion = new Region(region.getChromosome(), splitPoint, region.getEnd()); + locusQueries.add(new LocusQuery( + SampleIndexSchema.getChunkRegion(endRegion, 0), + Collections.singletonList(endRegion), + Collections.emptyList() + )); region.setEnd(splitPoint - 1); + chunkRegion.setEnd(splitPoint); } + locusQueries.add(new LocusQuery( + chunkRegion, + Collections.singletonList(region), + Collections.emptyList())); + locusQueries.sort(LocusQuery::compareTo); } - return regions; + return locusQueries; } protected static boolean matchesWithBatch(Region region) { @@ -711,7 +729,12 @@ public static void printScan(Scan scan) { public static void printQuery(LocusQuery locusQuery) { if (locusQuery != null) { - logger.info("ChunkRegion: [ " + locusQuery.getChunkRegion() + " )"); + Region chunk = locusQuery.getChunkRegion(); + if (chunk.getStart() == 0 && chunk.getEnd() == Integer.MAX_VALUE) { + logger.info("ChunkRegion: [ " + chunk.getChromosome() + " )"); + } else { + logger.info("ChunkRegion: [ " + chunk.getChromosome() + ":" + chunk.getStart() + "-" + chunk.getEnd() + " )"); + } if (!locusQuery.getRegions().isEmpty()) { logger.info(" - Regions: " + locusQuery.getRegions()); } diff --git a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/sample/SampleIndexDBLoader.java b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/sample/SampleIndexDBLoader.java index 428e835025c..f2700831e94 100644 --- a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/sample/SampleIndexDBLoader.java +++ b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/sample/SampleIndexDBLoader.java @@ -143,7 +143,8 @@ public void addVariant(int sampleIdx, String gt, SampleVariantIndexEntry variant throw new IllegalArgumentException("Already loaded variant " + variantIndexEntry.getVariant()); } } - if (schema.getFileIndex().isMultiFile(variantIndexEntry.getFileIndex())) { + if (variantIndexEntry.getFilesIndex().size() > 1 + || schema.getFileIndex().isMultiFile(variantIndexEntry.getFilesIndex().get(0))) { throw new IllegalArgumentException("Unexpected multi-file at variant " + variantIndexEntry.getVariant()); } sampleEntry.add(gt, variantIndexEntry); diff --git a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/sample/SampleIndexDriver.java b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/sample/SampleIndexDriver.java index 2dda3e69562..d8488e87a8e 100644 --- a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/sample/SampleIndexDriver.java +++ b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/sample/SampleIndexDriver.java @@ -538,7 +538,7 @@ private void countSampleGt(Context context, int sampleId, String gt) { public void flush(Context context, String chromosome, int position) throws IOException, InterruptedException { logger.info("Flush {}:{}-{} with {} variants", chromosome, SampleIndexSchema.getChunkStart(position), - SampleIndexSchema.getChunkStart(position) + SampleIndexSchema.BATCH_SIZE, + SampleIndexSchema.getChunkStartNext(position), variantsInBatch); variantsInBatch = 0; for (SampleIndexEntryPutBuilder builder : samplesMap.values()) { diff --git a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/sample/SampleIndexEntryIterator.java b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/sample/SampleIndexEntryIterator.java index 61627ddfd7b..da9c4a3a517 100644 --- a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/sample/SampleIndexEntryIterator.java +++ b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/sample/SampleIndexEntryIterator.java @@ -4,7 +4,9 @@ import org.opencb.opencga.storage.core.io.bit.BitBuffer; import org.opencb.opencga.storage.hadoop.variant.index.annotation.AnnotationIndexEntry; +import java.util.ArrayList; import java.util.Iterator; +import java.util.List; /** * Iterate through the variants of a SampleIndexEntry. @@ -36,9 +38,12 @@ default SampleVariantIndexEntry nextSampleVariantIndexEntry() { // This object could be reused annotationIndexEntry = new AnnotationIndexEntry(annotationIndexEntry); } - BitBuffer fileIndex = null; + List filesIndex = new ArrayList<>(); if (hasFileIndex()) { - fileIndex = nextFileIndexEntry(); + filesIndex.add(nextFileIndexEntry()); + while (isMultiFileIndex()) { + filesIndex.add(nextMultiFileIndexEntry()); + } } Byte parentsCode = null; if (hasParentsIndex()) { @@ -46,7 +51,7 @@ default SampleVariantIndexEntry nextSampleVariantIndexEntry() { } String genotype = nextGenotype(); Variant variant = next(); - return new SampleVariantIndexEntry(variant, fileIndex, genotype, annotationIndexEntry, parentsCode); + return new SampleVariantIndexEntry(variant, filesIndex, genotype, annotationIndexEntry, parentsCode, null); } /** diff --git a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/sample/SampleIndexQueryParser.java b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/sample/SampleIndexQueryParser.java index 5c0b2e77570..3731d3ff6f4 100644 --- a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/sample/SampleIndexQueryParser.java +++ b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/sample/SampleIndexQueryParser.java @@ -20,6 +20,7 @@ import org.opencb.opencga.storage.core.variant.adaptors.VariantQueryException; import org.opencb.opencga.storage.core.variant.adaptors.VariantQueryParam; import org.opencb.opencga.storage.core.variant.query.*; +import org.opencb.opencga.storage.hadoop.variant.HadoopVariantStorageOptions; import org.opencb.opencga.storage.hadoop.variant.index.annotation.CtBtFtCombinationIndexSchema; import org.opencb.opencga.storage.hadoop.variant.index.core.IndexField; import org.opencb.opencga.storage.hadoop.variant.index.core.RangeIndexField; @@ -51,15 +52,18 @@ public class SampleIndexQueryParser { private static Logger logger = LoggerFactory.getLogger(SampleIndexQueryParser.class); private final VariantStorageMetadataManager metadataManager; private final SampleIndexSchemaFactory schemaFactory; + private final int extendedFilteringRegionDefault; public SampleIndexQueryParser(VariantStorageMetadataManager metadataManager) { - this.metadataManager = metadataManager; - this.schemaFactory = new SampleIndexSchemaFactory(metadataManager); + this(metadataManager, new SampleIndexSchemaFactory(metadataManager)); } public SampleIndexQueryParser(VariantStorageMetadataManager metadataManager, SampleIndexSchemaFactory schemaFactory) { this.metadataManager = metadataManager; this.schemaFactory = schemaFactory; + this.extendedFilteringRegionDefault = metadataManager.getConfiguration().getInt( + HadoopVariantStorageOptions.SAMPLE_INDEX_QUERY_EXTENDED_REGION_FILTER.key(), + HadoopVariantStorageOptions.SAMPLE_INDEX_QUERY_EXTENDED_REGION_FILTER.defaultValue()); } /** @@ -528,9 +532,20 @@ public SampleIndexQuery parse(Query query) { // } } - Collection regionGroups = buildLocusQueries(regions, variants); + int extendedFilteringRegion = 0; + for (String sample : sampleGenotypeQuery.keySet()) { + SampleMetadata sampleMetadata = getSampleMetadata(sampleMetadatas, sample, studyId); + extendedFilteringRegion = Math.max(extendedFilteringRegion, sampleMetadata.getAttributes() + .getInt(SampleIndexSchema.LARGEST_VARIANT_LENGTH, -1)); + } + if (extendedFilteringRegion <= 0) { + extendedFilteringRegion = extendedFilteringRegionDefault; + } + + Collection regionGroups = buildLocusQueries(regions, variants, extendedFilteringRegion); - return new SampleIndexQuery(schema, regionGroups, variantTypes, study, sampleGenotypeQuery, multiFileSamples, negatedSamples, + return new SampleIndexQuery(schema, regionGroups, extendedFilteringRegion, variantTypes, study, + sampleGenotypeQuery, multiFileSamples, negatedSamples, fatherFilterMap, motherFilterMap, fileIndexMap, annotationIndexQuery, mendelianErrorSet, mendelianErrorType, includeParentsField, queryOperation); } @@ -563,13 +578,14 @@ private SampleMetadata getSampleMetadata(Map sampleMetad * * @param regions List of regions to group * @param variants List of variants to group + * @param extendedFilteringRegion number of positions to start filtering before any actual region filter start * @return Locus Queries */ - public static Collection buildLocusQueries(List regions, List variants) { + public static Collection buildLocusQueries(List regions, List variants, int extendedFilteringRegion) { regions = mergeRegions(regions); Map groupsMap = new HashMap<>(); for (Region region : regions) { - Region chunkRegion = SampleIndexSchema.getChunkRegion(region); + Region chunkRegion = SampleIndexSchema.getChunkRegion(region, extendedFilteringRegion); groupsMap.computeIfAbsent(chunkRegion, LocusQuery::new).getRegions().add(region); } for (Variant variant : variants) { diff --git a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/sample/SampleIndexSchema.java b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/sample/SampleIndexSchema.java index be24989a7f4..d050421a160 100644 --- a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/sample/SampleIndexSchema.java +++ b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/sample/SampleIndexSchema.java @@ -118,6 +118,8 @@ public final class SampleIndexSchema { static final String ANNOTATION_CLINICAL_PREFIX = META_PREFIX + "CL_"; static final byte[] ANNOTATION_CLINICAL_PREFIX_BYTES = Bytes.toBytes(ANNOTATION_CLINICAL_PREFIX); + public static final String LARGEST_VARIANT_LENGTH = "largestVariantLength"; + private final int version; private final SampleIndexConfiguration configuration; private final FileIndexSchema fileIndex; @@ -196,12 +198,32 @@ public FileIndexSchema getFileIndex() { return fileIndex; } + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("SampleIndexSchema{"); + sb.append("version=").append(version); + sb.append(", configuration=").append(configuration); + sb.append(", fileIndex=").append(fileIndex); + sb.append(", popFreqIndex=").append(popFreqIndex); + sb.append(", ctIndex=").append(ctIndex); + sb.append(", biotypeIndex=").append(biotypeIndex); + sb.append(", transcriptFlagIndexSchema=").append(transcriptFlagIndexSchema); + sb.append(", ctBtTfIndex=").append(ctBtTfIndex); + sb.append(", clinicalIndexSchema=").append(clinicalIndexSchema); + sb.append('}'); + return sb.toString(); + } + public static int getChunkStart(Integer start) { return (start / BATCH_SIZE) * BATCH_SIZE; } - public static Region getChunkRegion(Region region) { - return getChunkRegion(region.getChromosome(), region.getStart(), region.getEnd()); + public static int getChunkStartNext(Integer start) { + return getChunkStart(start + SampleIndexSchema.BATCH_SIZE); + } + + public static Region getChunkRegion(Region region, int extendedFilteringRegion) { + return getChunkRegion(region.getChromosome(), Math.max(0, region.getStart() - extendedFilteringRegion), region.getEnd()); } public static Region getChunkRegion(Variant variant) { @@ -209,11 +231,11 @@ public static Region getChunkRegion(Variant variant) { return getChunkRegion(variant.getChromosome(), variant.getStart(), variant.getStart()); } - public static Region getChunkRegion(String chromosome, int start, int end) { + private static Region getChunkRegion(String chromosome, int start, int end) { return new Region(chromosome, SampleIndexSchema.getChunkStart(start), end == Integer.MAX_VALUE ? Integer.MAX_VALUE - : SampleIndexSchema.getChunkStart(end + SampleIndexSchema.BATCH_SIZE)); + : SampleIndexSchema.getChunkStartNext(end)); } public static int getExpectedSize(String chromosome) { diff --git a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/sample/SampleIndexVariantBiConverter.java b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/sample/SampleIndexVariantBiConverter.java index 4c0fb21701f..d8961251205 100644 --- a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/sample/SampleIndexVariantBiConverter.java +++ b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/sample/SampleIndexVariantBiConverter.java @@ -196,6 +196,10 @@ public MendelianErrorSampleIndexEntryIterator toMendelianIterator(SampleIndexEnt return new MendelianErrorSampleIndexEntryIterator(sampleIndexEntry, schema); } + public SampleIndexSchema getSchema() { + return schema; + } + private abstract static class SampleIndexGtEntryIterator implements SampleIndexEntryIterator { protected SampleIndexEntry.SampleIndexGtEntry gtEntry; private final SampleIndexSchema schema; diff --git a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/sample/SampleVariantIndexEntry.java b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/sample/SampleVariantIndexEntry.java index 359591ed3d1..3d919ce846f 100644 --- a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/sample/SampleVariantIndexEntry.java +++ b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/sample/SampleVariantIndexEntry.java @@ -6,7 +6,9 @@ import org.opencb.opencga.storage.core.io.bit.BitBuffer; import org.opencb.opencga.storage.hadoop.variant.index.annotation.AnnotationIndexEntry; +import java.util.Collections; import java.util.Comparator; +import java.util.List; import java.util.Objects; import static org.opencb.opencga.storage.hadoop.variant.index.sample.SampleIndexSchema.INTRA_CHROMOSOME_VARIANT_COMPARATOR; @@ -15,21 +17,18 @@ public class SampleVariantIndexEntry { private final Variant variant; private final String genotype; + @Deprecated private final BitBuffer fileIndex; + private final List filesIndex; private final AnnotationIndexEntry annotationIndexEntry; private final Integer meCode; private final Byte parentsCode; public SampleVariantIndexEntry(Variant variant, BitBuffer fileIndex) { - this(variant, fileIndex, null, null, null); + this(variant, Collections.singletonList(fileIndex), null, null, null, null); } - public SampleVariantIndexEntry(Variant variant, BitBuffer fileIndex, String genotype, AnnotationIndexEntry annotationIndexEntry, - Byte parentsCode) { - this(variant, fileIndex, genotype, annotationIndexEntry, parentsCode, null); - } - - public SampleVariantIndexEntry(Variant variant, BitBuffer fileIndex, String genotype, AnnotationIndexEntry annotationIndexEntry, + public SampleVariantIndexEntry(Variant variant, List filesIndex, String genotype, AnnotationIndexEntry annotationIndexEntry, Byte parentsCode, Integer meCode) { if (CollectionUtils.isEmpty(variant.getImpl().getStudies())) { this.variant = variant; @@ -48,7 +47,12 @@ public SampleVariantIndexEntry(Variant variant, BitBuffer fileIndex, String geno variant.getType(), null, null)); } - this.fileIndex = fileIndex; + this.filesIndex = filesIndex; + if (filesIndex == null) { + this.fileIndex = null; + } else { + this.fileIndex = filesIndex.get(0); + } this.genotype = genotype; this.annotationIndexEntry = annotationIndexEntry; this.meCode = meCode; @@ -59,10 +63,15 @@ public Variant getVariant() { return variant; } + @Deprecated public BitBuffer getFileIndex() { return fileIndex; } + public List getFilesIndex() { + return filesIndex; + } + public String getGenotype() { return genotype; } @@ -88,7 +97,7 @@ public boolean equals(Object o) { return false; } SampleVariantIndexEntry that = (SampleVariantIndexEntry) o; - return fileIndex.equals(that.fileIndex) && Objects.equals(variant, that.variant); + return filesIndex.equals(that.filesIndex) && Objects.equals(variant, that.variant); } @Override @@ -106,7 +115,7 @@ public String toString(SampleIndexSchema schema, String separator) { sb.append(separator).append("gt: ") .append(this.getGenotype()); sb.append(separator).append("file: ") - .append(this.getFileIndex()); + .append(this.getFilesIndex()); if (annotationIndexEntry != null) { annotationIndexEntry.toString(schema, separator, sb); } diff --git a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/sample/VariantTypeIndexCodec.java b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/sample/VariantTypeIndexCodec.java index dd4acb565b2..a385183398f 100644 --- a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/sample/VariantTypeIndexCodec.java +++ b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/index/sample/VariantTypeIndexCodec.java @@ -74,4 +74,11 @@ public VariantType decode(int code) { public boolean ambiguous(int code) { return code == TYPE_OTHER_CODE || code == TYPE_CNV_CODE; } + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("VariantTypeIndexCodec{"); + sb.append('}'); + return sb.toString(); + } } diff --git a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/mr/SampleIndexTableRecordReader.java b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/mr/SampleIndexTableRecordReader.java index 69f4576b7d2..2efd1115846 100644 --- a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/mr/SampleIndexTableRecordReader.java +++ b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/main/java/org/opencb/opencga/storage/hadoop/variant/mr/SampleIndexTableRecordReader.java @@ -20,6 +20,7 @@ import org.opencb.opencga.storage.hadoop.variant.index.query.LocusQuery; import org.opencb.opencga.storage.hadoop.variant.index.query.SampleIndexQuery; import org.opencb.opencga.storage.hadoop.variant.index.sample.SampleIndexDBAdaptor; +import org.opencb.opencga.storage.hadoop.variant.index.sample.SampleIndexQueryParser; import org.opencb.opencga.storage.hadoop.variant.metadata.HBaseVariantStorageMetadataDBAdaptorFactory; import org.opencb.opencga.storage.hadoop.variant.utils.HBaseVariantTableNameGenerator; import org.slf4j.Logger; @@ -27,7 +28,6 @@ import java.io.IOException; import java.util.*; -import java.util.stream.Collectors; import static org.opencb.opencga.storage.hadoop.variant.utils.HBaseVariantTableNameGenerator.getDBNameFromVariantsTableName; @@ -222,7 +222,8 @@ public void initialize(InputSplit inputsplit, TaskAttemptContext context) throws if (regions.isEmpty()) { iterator = VariantDBIterator.emptyIterator(); } else { - Collection locusQueries = regions.stream().map(LocusQuery::buildLocusQuery).collect(Collectors.toList()); + Collection locusQueries = SampleIndexQueryParser + .buildLocusQueries(regions, Collections.emptyList(), sampleIndexQuery.getExtendedFilteringRegion()); SampleIndexQuery query = new SampleIndexQuery(locusQueries, sampleIndexQuery); iterator = sampleIndexDBAdaptor.iterator(query); } diff --git a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/test/java/org/opencb/opencga/storage/hadoop/variant/HadoopVariantStorageEngineSplitDataTest.java b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/test/java/org/opencb/opencga/storage/hadoop/variant/HadoopVariantStorageEngineSplitDataTest.java index b68a8a85342..5d77e7dc375 100644 --- a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/test/java/org/opencb/opencga/storage/hadoop/variant/HadoopVariantStorageEngineSplitDataTest.java +++ b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/test/java/org/opencb/opencga/storage/hadoop/variant/HadoopVariantStorageEngineSplitDataTest.java @@ -412,7 +412,8 @@ public void testLoadByRegion() throws Exception { assertEquals(TaskMetadata.Status.NONE, sampleMetadata.getSampleIndexAnnotationStatus(1)); } - checkVariantsTable(studyId_split, studyId_normal, new VariantQuery().includeSample(ParamConstants.ALL), new QueryOptions(QueryOptions.EXCLUDE, VariantField.STUDIES_FILES)); + checkVariantsTable(studyId_split, studyId_normal, new VariantQuery().includeSample(ParamConstants.ALL), new QueryOptions(QueryOptions.EXCLUDE, VariantField.STUDIES_FILES), + v -> v.getStudies().get(0).getFiles().forEach(file -> file.setFileId(""))); checkSampleIndex(studyId_split, studyId_normal); } diff --git a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/test/java/org/opencb/opencga/storage/hadoop/variant/VariantHadoopDBWriterTest.java b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/test/java/org/opencb/opencga/storage/hadoop/variant/VariantHadoopDBWriterTest.java index 714435ac771..289052ad00f 100644 --- a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/test/java/org/opencb/opencga/storage/hadoop/variant/VariantHadoopDBWriterTest.java +++ b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/test/java/org/opencb/opencga/storage/hadoop/variant/VariantHadoopDBWriterTest.java @@ -268,7 +268,7 @@ private void loadVariantsBasic(StudyMetadata sc, int fileId, List varia fileId, metadataManager, dbAdaptor.getHBaseManager(), false, false); // TaskMetadata - HadoopLocalLoadVariantStoragePipeline.GroupedVariantsTask task = new HadoopLocalLoadVariantStoragePipeline.GroupedVariantsTask(archiveWriter, hadoopDBWriter, null, null); + HadoopLocalLoadVariantStoragePipeline.GroupedVariantsTask task = new HadoopLocalLoadVariantStoragePipeline.GroupedVariantsTask(archiveWriter, hadoopDBWriter, null, null, null, null, null); ParallelTaskRunner.Config config = ParallelTaskRunner.Config.builder().setNumTasks(1).setBatchSize(1).build(); ParallelTaskRunner>, Object> ptr = diff --git a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/test/java/org/opencb/opencga/storage/hadoop/variant/index/core/CategoricalIndexFieldTest.java b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/test/java/org/opencb/opencga/storage/hadoop/variant/index/core/CategoricalIndexFieldTest.java index a062617da1f..feae2ca31e6 100644 --- a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/test/java/org/opencb/opencga/storage/hadoop/variant/index/core/CategoricalIndexFieldTest.java +++ b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/test/java/org/opencb/opencga/storage/hadoop/variant/index/core/CategoricalIndexFieldTest.java @@ -1,7 +1,9 @@ package org.opencb.opencga.storage.hadoop.variant.index.core; +import org.apache.commons.lang3.tuple.Pair; import org.junit.Test; import org.junit.experimental.categories.Category; +import org.opencb.biodata.models.variant.StudyEntry; import org.opencb.opencga.core.config.storage.IndexFieldConfiguration; import org.opencb.opencga.core.config.storage.SampleIndexConfiguration; import org.opencb.opencga.core.testclassification.duration.ShortTests; @@ -15,6 +17,7 @@ import java.util.Set; import static org.junit.Assert.assertEquals; +import static org.opencb.opencga.core.config.storage.IndexFieldConfiguration.Source.FILE; import static org.opencb.opencga.core.config.storage.IndexFieldConfiguration.Source.SAMPLE; @Category(ShortTests.class) @@ -39,10 +42,57 @@ public void testLength() { assertEquals(3, CategoricalIndexField.create(new IndexFieldConfiguration(SAMPLE, "K", IndexFieldConfiguration.Type.CATEGORICAL, "1", "2", "3", "4", "5", "6").setNullable(nullable), 0).getBitLength()); } + @Test + public void testEncodeDecodeQual() { + SampleIndexSchema indexSchema = SampleIndexSchema.defaultSampleIndexSchema(); + IndexField qualfield = indexSchema.getFileIndex().getCustomField(FILE, StudyEntry.QUAL); + + List> pairs = Arrays.asList( + Pair.of("45", "30.0"), + Pair.of("25", "20.0"), + Pair.of("30", "30.0"), + Pair.of("10", "10.0"), + Pair.of("0", Double.toString(Double.MIN_VALUE)) + ); + for (Pair pair : pairs) { + String qual = pair.getKey(); + String expectedQual = pair.getValue(); + int encode = qualfield.encode(qual); + String actualQual = qualfield.decode(encode); + assertEquals(expectedQual, actualQual); + } + } + + @Test + public void testEncodeDecodeFilter() { + SampleIndexConfiguration indexConfiguration = SampleIndexConfiguration.defaultConfiguration(); + indexConfiguration.getFileIndexConfiguration().getCustomField(FILE, StudyEntry.FILTER) + .setType(IndexFieldConfiguration.Type.CATEGORICAL_MULTI_VALUE) + .setValues("PASS", "noPass"); + SampleIndexSchema indexSchema = new SampleIndexSchema(indexConfiguration, 0); + IndexField field = indexSchema.getFileIndex().getCustomField(FILE, StudyEntry.FILTER); + + List> pairs = Arrays.asList( + Pair.of("PASS", "PASS"), + Pair.of("asdfasdf", null), + Pair.of("noPass", "noPass"), + Pair.of("PASS;noPass", "PASS;noPass"), + Pair.of("PASS;noPass;other;another", "PASS;noPass;NA"), + Pair.of(".", null) + ); + for (Pair pair : pairs) { + String filter = pair.getKey(); + String expectedFilter = pair.getValue(); + int encode = field.encode(filter); + String actualFilter = field.decode(encode); + assertEquals(expectedFilter, actualFilter); + } + } + @Test public void testEncodeDecode() { SampleIndexSchema indexSchema = SampleIndexSchema.defaultSampleIndexSchema(); - CategoricalMultiValuedIndexField field = (CategoricalMultiValuedIndexField) indexSchema.getCtIndex().getField(); + CategoricalMultiValuedIndexField field = indexSchema.getCtIndex().getField(); List expected = Arrays.asList("synonymous_variant", "missense_variant"); int encode = field.encode(expected); diff --git a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/test/java/org/opencb/opencga/storage/hadoop/variant/index/sample/SampleIndexDBAdaptorTest.java b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/test/java/org/opencb/opencga/storage/hadoop/variant/index/sample/SampleIndexDBAdaptorTest.java index fa3e6cfbf75..03e8b3cd4fb 100644 --- a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/test/java/org/opencb/opencga/storage/hadoop/variant/index/sample/SampleIndexDBAdaptorTest.java +++ b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/test/java/org/opencb/opencga/storage/hadoop/variant/index/sample/SampleIndexDBAdaptorTest.java @@ -9,9 +9,11 @@ import org.opencb.opencga.core.testclassification.duration.ShortTests; import org.opencb.opencga.storage.core.metadata.VariantStorageMetadataManager; import org.opencb.opencga.storage.core.metadata.models.SampleMetadata; -import org.opencb.opencga.storage.core.variant.query.VariantQueryUtils; import org.opencb.opencga.storage.core.variant.dummy.DummyVariantStorageMetadataDBAdaptorFactory; +import org.opencb.opencga.storage.core.variant.query.VariantQueryUtils; import org.opencb.opencga.storage.hadoop.utils.HBaseManager; +import org.opencb.opencga.storage.hadoop.variant.index.query.LocusQuery; +import org.opencb.opencga.storage.hadoop.variant.index.query.SampleAnnotationIndexQuery; import org.opencb.opencga.storage.hadoop.variant.index.query.SampleIndexQuery; import java.util.Arrays; @@ -40,38 +42,45 @@ public void testSampleIdFF() throws Exception { String sampleName = "FF"; metadataManager.unsecureUpdateSampleMetadata(studyId, new SampleMetadata(studyId, sampleId, sampleName)); - SampleIndexQuery query = new SampleIndexQuery(SampleIndexSchema.defaultSampleIndexSchema(), Collections.emptyList(), "ST", - Collections.singletonMap(sampleName, Collections.singletonList("0/1")), VariantQueryUtils.QueryOperation.AND); + SampleIndexQuery query = new SampleIndexQuery(SampleIndexSchema.defaultSampleIndexSchema(), Collections.emptyList(), 0, null, "ST", + Collections.singletonMap(sampleName, Collections.singletonList("0/1")), Collections.emptySet(), null, Collections.emptyMap(), + Collections.emptyMap(), Collections.emptyMap(), new SampleAnnotationIndexQuery(SampleIndexSchema.defaultSampleIndexSchema()), + Collections.emptySet(), null, false, VariantQueryUtils.QueryOperation.AND); new SampleIndexDBAdaptor(new HBaseManager(new Configuration()), null, metadataManager).parse(query.forSample(sampleName), null); } @Test public void testSplitRegion() { - Region region = new Region("1", 1000, 16400000); - List split = SampleIndexDBAdaptor.splitRegion(region); + Region region = new Region("1", 11001000, 16400000); + List split = SampleIndexDBAdaptor.splitLocusQuery( + new LocusQuery( + SampleIndexSchema.getChunkRegion(region, 3000000), + Collections.singletonList(region), + Collections.emptyList())); // Check region is not modified - Assert.assertEquals("1:1000-16400000", region.toString()); + Assert.assertEquals("1:11001000-16400000", region.toString()); Assert.assertEquals(Arrays.asList( - new Region("1", 1000, 999999), - new Region("1", 1000000, 15999999), - new Region("1", 16000000, 16400000)), + new LocusQuery(new Region("1", 8000000, 12000000), Collections.singletonList(new Region("1", 11001000, 11999999)), Collections.emptyList()), + new LocusQuery(new Region("1", 12000000, 16000000), Collections.singletonList(new Region("1", 12000000, 15999999)), Collections.emptyList()), + new LocusQuery(new Region("1", 16000000, 17000000), Collections.singletonList(new Region("1", 16000000, 16400000)), Collections.emptyList())), split); - Assert.assertFalse(SampleIndexDBAdaptor.startsAtBatch(split.get(0))); - Assert.assertTrue(SampleIndexDBAdaptor.endsAtBatch(split.get(0))); - Assert.assertTrue(SampleIndexDBAdaptor.startsAtBatch(split.get(1))); - Assert.assertTrue(SampleIndexDBAdaptor.endsAtBatch(split.get(1))); - Assert.assertTrue(SampleIndexDBAdaptor.startsAtBatch(split.get(2))); - Assert.assertFalse(SampleIndexDBAdaptor.endsAtBatch(split.get(2))); + Assert.assertFalse(SampleIndexDBAdaptor.startsAtBatch(split.get(0).getRegions().get(0))); + Assert.assertTrue(SampleIndexDBAdaptor.endsAtBatch(split.get(0).getRegions().get(0))); + Assert.assertTrue(SampleIndexDBAdaptor.startsAtBatch(split.get(1).getRegions().get(0))); + Assert.assertTrue(SampleIndexDBAdaptor.endsAtBatch(split.get(1).getRegions().get(0))); + Assert.assertTrue(SampleIndexDBAdaptor.startsAtBatch(split.get(2).getRegions().get(0))); + Assert.assertFalse(SampleIndexDBAdaptor.endsAtBatch(split.get(2).getRegions().get(0))); - split = SampleIndexDBAdaptor.splitRegion(new Region("1", 1000000, 16400000)); + region = new Region("1", 1000000, 16400000); + split = SampleIndexDBAdaptor.splitLocusQuery(new LocusQuery(SampleIndexSchema.getChunkRegion(region, 0), Collections.singletonList(region), Collections.emptyList())); Assert.assertEquals(Arrays.asList( - new Region("1", 1000000, 15999999), - new Region("1", 16000000, 16400000)), + new LocusQuery(new Region("1", 1000000, 16000000), Collections.singletonList(new Region("1", 1000000, 15999999)), Collections.emptyList()), + new LocusQuery(new Region("1", 16000000, 17000000), Collections.singletonList(new Region("1", 16000000, 16400000)), Collections.emptyList())), split); - Assert.assertTrue(SampleIndexDBAdaptor.startsAtBatch(split.get(0))); - Assert.assertTrue(SampleIndexDBAdaptor.endsAtBatch(split.get(0))); - Assert.assertTrue(SampleIndexDBAdaptor.startsAtBatch(split.get(1))); - Assert.assertFalse(SampleIndexDBAdaptor.endsAtBatch(split.get(1))); + Assert.assertTrue(SampleIndexDBAdaptor.startsAtBatch(split.get(0).getRegions().get(0))); + Assert.assertTrue(SampleIndexDBAdaptor.endsAtBatch(split.get(0).getRegions().get(0))); + Assert.assertTrue(SampleIndexDBAdaptor.startsAtBatch(split.get(1).getRegions().get(0))); + Assert.assertFalse(SampleIndexDBAdaptor.endsAtBatch(split.get(1).getRegions().get(0))); } } \ No newline at end of file diff --git a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/test/java/org/opencb/opencga/storage/hadoop/variant/index/sample/SampleIndexEntryFilterTest.java b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/test/java/org/opencb/opencga/storage/hadoop/variant/index/sample/SampleIndexEntryFilterTest.java index 063727ddd84..f4989f9ff79 100644 --- a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/test/java/org/opencb/opencga/storage/hadoop/variant/index/sample/SampleIndexEntryFilterTest.java +++ b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/test/java/org/opencb/opencga/storage/hadoop/variant/index/sample/SampleIndexEntryFilterTest.java @@ -279,7 +279,7 @@ private SingleSampleIndexQuery getSingleSampleIndexQuery(SampleAnnotationIndexQu private SingleSampleIndexQuery getSingleSampleIndexQuery(SampleAnnotationIndexQuery annotationIndexQuery, Map> fileFilterMap) { return new SampleIndexQuery( - schema, Collections.emptyList(), null, "study", Collections.singletonMap("S1", Arrays.asList("0/1", "1/1")), Collections.emptySet(), null, Collections.emptyMap(), Collections.emptyMap(), fileFilterMap, annotationIndexQuery, Collections.emptySet(), null, false, VariantQueryUtils.QueryOperation.AND) + schema, Collections.emptyList(), 0, null, "study", Collections.singletonMap("S1", Arrays.asList("0/1", "1/1")), Collections.emptySet(), null, Collections.emptyMap(), Collections.emptyMap(), fileFilterMap, annotationIndexQuery, Collections.emptySet(), null, false, VariantQueryUtils.QueryOperation.AND) .forSample("S1"); } } \ No newline at end of file diff --git a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/test/java/org/opencb/opencga/storage/hadoop/variant/index/sample/SampleIndexQueryParserTest.java b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/test/java/org/opencb/opencga/storage/hadoop/variant/index/sample/SampleIndexQueryParserTest.java index 1f8763e0ccf..0eafe0ca875 100644 --- a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/test/java/org/opencb/opencga/storage/hadoop/variant/index/sample/SampleIndexQueryParserTest.java +++ b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/test/java/org/opencb/opencga/storage/hadoop/variant/index/sample/SampleIndexQueryParserTest.java @@ -1851,7 +1851,7 @@ public void testBuildLocusQueries() { new Region("6", 33_200_000, 34_800_000), new Region("8", 144_671_680, 144_690_000), new Region("6", 31_200_000, 31_800_000), - new Region("8", 145_100_000, 146_100_000)), Collections.emptyList()); + new Region("8", 145_100_000, 146_100_000)), Collections.emptyList(), 0); assertEquals(Arrays.asList( new LocusQuery(new Region("6", 31_000_000, 35_000_000), Arrays.asList(new Region("6", 31_200_000, 31_800_000),new Region("6", 33_200_000, 34_800_000)), Collections.emptyList()), // new LocusQuery(new Region("6", 31_000_000, 32_000_000), Collections.singletonList(new Region("6", 31_200_000, 31_800_000)), Collections.emptyList()), @@ -1866,7 +1866,7 @@ public void testBuildLocusQueries() { new Region("6", 31_200_000, 33_800_000), new Region("8", 144_671_680, 144_690_000), new Region("8", 144_700_000, 144_995_738), - new Region("8", 145_100_000, 146_100_000)), Collections.emptyList()); + new Region("8", 145_100_000, 146_100_000)), Collections.emptyList(), 0); assertEquals(Arrays.asList( new LocusQuery(new Region("6", 31_000_000, 35_000_000), Collections.singletonList(new Region("6", 31_200_000, 34_800_000)), Collections.emptyList()), new LocusQuery(new Region("8", 144_000_000, 147_000_000), Arrays.asList(new Region("8", 144_671_680, 144_690_000), @@ -1885,7 +1885,7 @@ public void testBuildLocusQueries() { new Variant("6:35001000:A:T"), new Variant("7:35001000:A:T"), new Variant("7:35002000:A:T") - )); + ), 0); assertEquals(Arrays.asList( new LocusQuery(new Region("6", 31_000_000, 36_000_000), Collections.singletonList(new Region("6", 31_200_000, 34_800_000)), Arrays.asList(new Variant("6:35001000:A:T"))), @@ -1895,5 +1895,38 @@ public void testBuildLocusQueries() { new Region("8", 144_700_000, 144_995_738), new Region("8", 145_100_000, 146_100_000)), Collections.emptyList()) ), queries); + + queries = buildLocusQueries( + Arrays.asList( + new Region("6", 31_200_000, 31_800_000), + new Region("6", 41_200_000, 43_800_000), + new Region("6", 35_200_000, 36_800_000), + new Region("8", 144_671_680, 144_690_000), + new Region("8", 144_700_000, 144_995_738), + new Region("8", 145_100_000, 146_100_000)), + Arrays.asList( + new Variant("6:35001000:A:T"), + new Variant("7:35001000:A:T"), + new Variant("7:35002000:A:T") + ), 2000000); + assertEquals(Arrays.asList( + new LocusQuery(new Region("6", 29_000_000, 44_000_000), + Arrays.asList( + new Region("6", 31_200_000, 31_800_000), + new Region("6", 35_200_000, 36_800_000), + new Region("6", 41_200_000, 43_800_000)), + Arrays.asList( + new Variant("6:35001000:A:T"))), + new LocusQuery(new Region("7", 35_000_000, 36_000_000), + Collections.emptyList(), + Arrays.asList( + new Variant("7:35001000:A:T"), + new Variant("7:35002000:A:T"))), + new LocusQuery(new Region("8", 142_000_000, 147_000_000), + Arrays.asList( + new Region("8", 144_671_680, 144_690_000), + new Region("8", 144_700_000, 144_995_738), + new Region("8", 145_100_000, 146_100_000)), Collections.emptyList()) + ), queries); } } \ No newline at end of file diff --git a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/test/java/org/opencb/opencga/storage/hadoop/variant/index/sample/SampleIndexTest.java b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/test/java/org/opencb/opencga/storage/hadoop/variant/index/sample/SampleIndexTest.java index 4ab4180d2ba..0319c2bc43b 100644 --- a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/test/java/org/opencb/opencga/storage/hadoop/variant/index/sample/SampleIndexTest.java +++ b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-core/src/test/java/org/opencb/opencga/storage/hadoop/variant/index/sample/SampleIndexTest.java @@ -14,8 +14,10 @@ import org.junit.experimental.categories.Category; import org.junit.rules.ExternalResource; import org.opencb.biodata.models.core.Region; +import org.opencb.biodata.models.variant.StudyEntry; import org.opencb.biodata.models.variant.Variant; import org.opencb.biodata.models.variant.avro.ConsequenceType; +import org.opencb.biodata.models.variant.avro.FileEntry; import org.opencb.biodata.models.variant.avro.VariantType; import org.opencb.biodata.models.variant.metadata.SampleVariantStats; import org.opencb.commons.datastore.core.*; @@ -59,6 +61,7 @@ import java.util.*; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; +import java.util.function.Function; import java.util.stream.Collectors; import static java.util.stream.Collectors.*; @@ -84,12 +87,23 @@ public class SampleIndexTest extends VariantStorageBaseTest implements HadoopVar private static boolean loaded = false; public static final String STUDY_NAME_3 = "study_3"; public static final String STUDY_NAME_4 = "study_4"; - private static final List studies = Arrays.asList(STUDY_NAME, STUDY_NAME_2, STUDY_NAME_3, STUDY_NAME_4); + public static final String STUDY_NAME_5 = "study_5"; // large SV + public static final String STUDY_NAME_6 = "study_6"; // multiallelic + private static final List studies = Arrays.asList( + STUDY_NAME, + STUDY_NAME_2, + STUDY_NAME_3, + STUDY_NAME_4, + STUDY_NAME_5, + STUDY_NAME_6 + ); private static final Map> sampleNames = new HashMap>() {{ put(STUDY_NAME, Arrays.asList("NA19600", "NA19660", "NA19661", "NA19685")); put(STUDY_NAME_2, Arrays.asList("NA19600", "NA19660", "NA19661", "NA19685")); put(STUDY_NAME_3, Arrays.asList("NA12877", "NA12878")); put(STUDY_NAME_4, Arrays.asList("NA19600", "NA19660", "NA19661", "NA19685")); + put(STUDY_NAME_5, Arrays.asList("NA19600", "NA19660", "NA19661", "NA19685")); + put(STUDY_NAME_6, Arrays.asList("NA19600", "NA19660", "NA19661", "NA19685")); }}; // private static List> trios = Arrays.asList( // Arrays.asList("NA19600", "NA19660", "NA19661"), @@ -183,6 +197,27 @@ public void load() throws Exception { runETL(engine, getResourceUri("variant-test-dense.vcf.gz"), outputUri, params, true, true, true); engine.familyIndex(STUDY_NAME_4, trios, new ObjectMap()); + // Study 5, large SV + params = new ObjectMap() + .append(VariantStorageOptions.STUDY.key(), STUDY_NAME_5) + .append(VariantStorageOptions.ANNOTATE.key(), false) + .append(VariantStorageOptions.STATS_CALCULATE.key(), false); + runETL(engine, getResourceUri("variant-large-sv.vcf"), outputUri, params, true, true, true); + engine.familyIndex(STUDY_NAME_5, trios, new ObjectMap()); + + // Study 6, multiallelic + SampleIndexConfiguration sampleIndexConfiguration = SampleIndexConfiguration.defaultConfiguration(); + sampleIndexConfiguration.getFileIndexConfiguration().getCustomField(IndexFieldConfiguration.Source.FILE, "FILTER") + .setValues("PASS", "noPass", "noPass2"); + engine.getMetadataManager().addSampleIndexConfiguration(STUDY_NAME_6, sampleIndexConfiguration, true); + + params = new ObjectMap() + .append(VariantStorageOptions.STUDY.key(), STUDY_NAME_6) + .append(VariantStorageOptions.ANNOTATE.key(), false) + .append(VariantStorageOptions.STATS_CALCULATE.key(), false); + runETL(engine, getResourceUri("variant-multiallelic.vcf"), outputUri, params, true, true, true); + engine.familyIndex(STUDY_NAME_6, trios, new ObjectMap()); + // ---------------- Annotate // variantStorageEngine.getConfiguration().getCellbase().setUrl(ParamConstants.CELLBASE_URL); @@ -427,6 +462,36 @@ public void testMultiFileFilters() throws Exception { .append(SAMPLE_DATA.key(), "NA19600:DS=1.005")); } + @Test + public void testLocusQueryOverlap() throws Exception { + + VariantQuery query = new VariantQuery().study(STUDY_NAME_5).sample("NA19600"); +// System.out.println("query = " + query.toJson()); + List variants = sampleIndexDBAdaptor.iterator(new Query(query), new QueryOptions()) + .toDataResult().getResults(); + assertEquals(2, variants.size()); + + query.region("1:2000200-5500000"); +// System.out.println("query = " + query.toJson()); + variants = sampleIndexDBAdaptor.iterator(new Query(query), new QueryOptions()) + .toDataResult().getResults(); + assertEquals(2, variants.size()); + + query.region("1:200-2500000"); +// System.out.println("query = " + query.toJson()); + variants = sampleIndexDBAdaptor.iterator(new Query(query), new QueryOptions()) + .toDataResult().getResults(); + assertEquals(1, variants.size()); + assertEquals("1:1000001-4000000:-:", variants.get(0).toString()); + + query.region("1:2000200-2500000"); +// System.out.println("query = " + query.toJson()); + variants = sampleIndexDBAdaptor.iterator(new Query(query), new QueryOptions()) + .toDataResult().getResults(); + assertEquals(1, variants.size()); + assertEquals("1:1000001-4000000:-:", variants.get(0).toString()); + } + @Test public void testQueryAnnotationIndex() throws Exception { testQueryAnnotationIndex(new Query(ANNOT_PROTEIN_SUBSTITUTION.key(), "sift=tolerated")); @@ -1083,9 +1148,42 @@ public void testSampleIndexOnlyVariantQueryExecutor() { new QueryOptions(QueryOptions.INCLUDE, Arrays.asList(VariantField.ID, VariantField.STUDIES_SAMPLES)), SampleIndexOnlyVariantQueryExecutor.class); + testSampleIndexOnlyVariantQueryExecutor( + new VariantQuery() + .study(STUDY_NAME_6) + .sample("NA19600") + .includeGenotype(true), + new QueryOptions(QueryOptions.INCLUDE, Arrays.asList(VariantField.ID, VariantField.STUDIES_SAMPLES)), + SampleIndexOnlyVariantQueryExecutor.class); + + testSampleIndexOnlyVariantQueryExecutor( + new VariantQuery() + .study(STUDY_NAME_6) + .sample("NA19600") + .includeGenotype(true) + .append("includeAllFromSampleIndex", true), + new QueryOptions(QueryOptions.INCLUDE, Arrays.asList(VariantField.ID, VariantField.STUDIES_SAMPLES)), + SampleIndexOnlyVariantQueryExecutor.class, + v -> { + assertEquals(v.toString(), 1, v.getStudies().get(0).getFiles().size()); + for (FileEntry fe : v.getStudies().get(0).getFiles()) { + assertNotNull(fe.getData().get(StudyEntry.FILTER)); + fe.setData(Collections.emptyMap()); + } + v.getStudies().get(0).getFiles().removeIf(fe -> fe.getCall() == null); + if (v.getStudies().get(0).getFiles().isEmpty()) { + v.getStudies().get(0).getSamples().forEach(s -> s.setFileIndex(null)); + } + return v; + }); } private void testSampleIndexOnlyVariantQueryExecutor(VariantQuery query, QueryOptions options, Class expected) { + testSampleIndexOnlyVariantQueryExecutor(query, options, expected, v -> v); + } + + private void testSampleIndexOnlyVariantQueryExecutor(VariantQuery query, QueryOptions options, Class expected, + Function mapper) { VariantQueryExecutor variantQueryExecutor = variantStorageEngine.getVariantQueryExecutor( query, options); @@ -1114,16 +1212,33 @@ private void testSampleIndexOnlyVariantQueryExecutor(VariantQuery query, QueryOp assertEquals( expectedVariants.stream().map(String::valueOf).collect(toList()), actualVariants.stream().map(String::valueOf).collect(toList())); - System.out.println("DBAdaptor " + expectedVariants.get(0).toJson()); - System.out.println("Actual " + actualVariants.get(0).toJson()); - assertEquals(expectedVariants, actualVariants); +// System.out.println("DBAdaptor " + expectedVariants.get(0).toJson()); +// System.out.println("Actual " + actualVariants.get(0).toJson()); + for (int i = 0; i < actualVariants.size(); i++) { + Variant av = actualVariants.get(i); + Variant ev = expectedVariants.get(i); + mapper.apply(av); + if (!ev.getStudies().isEmpty()) { + if (av.getLengthAlternate() == 0 || av.getLengthReference() == 0) { +// System.out.println("-------" + av + "----------"); +// System.out.println("DBAdaptor " + ev.toJson()); +// System.out.println("Actual " + av.toJson()); + assertNotNull(av.toString(), av.getStudies().get(0).getFiles().get(0).getCall()); + assertNotNull(ev.toString(), ev.getStudies().get(0).getFiles().get(0).getCall()); + ev.getStudies().get(0).getSamples().forEach(s -> s.setFileIndex(null)); + av.getStudies().get(0).getSamples().forEach(s -> s.setFileIndex(null)); + } + } + try { + assertEquals(ev, av); + } catch (AssertionError error) { + System.out.println("-------" + av + "----------"); + System.out.println("DBAdaptor " + ev.toJson()); + System.out.println("Actual " + av.toJson()); + throw error; + } + } +// assertEquals(expectedVariants, actualVariants); assertEquals(count, actualVariants.size()); } } - -/* - -10:101166544:C:T, 10:101473218:A:G, 10:104229785:C:T, 10:105194086:C:T, 10:11805354:A:G, 10:119043554:C:T, 10:121086097:A:T, 10:123976285:G:A, 10:129899922:T:C, 10:134013974:C:A, 10:135000148:T:C, 10:14941654:C:T, 10:21104613:T:C, 10:26463043:A:T, 10:27964470:G:A, 10:28345418:T:C, 10:33137551:T:C, 10:45953767:A:G, 10:46965018:C:G, 10:49659637:T:C, 10:5435918:G:A, 10:6063508:G:A, 10:61665886:C:A, 10:64573771:C:T, 10:69926319:C:A, 10:71027231:G:C, 10:73044580:G:A, 10:75871735:C:G, 10:7601810:TTTTG:-, 10:81065938:C:T, 10:85997105:G:T, 10:88696622:C:G, 10:88702350:G:C, 10:88730312:T:C, 10:92456132:T:C, 10:93841227:A:G, 10:95552653:T:C, 10:96163039:C:G, 10:99006083:G:A, 10:99130282:T:G, 11:103229027:T:C, 11:1087972:C:T, 11:111324266:T:A, 11:1158073:T:C, 11:117376413:G:A, 11:118529069:G:C, 11:121491782:G:A, 11:123777498:C:T, 11:124015994:C:T, 11:125707761:A:C, 11:1272559:C:T, 11:128781978:T:G, 11:134158745:A:G, 11:1502097:A:G, 11:18210580:C:T, 11:1858262:C:T, 11:233067:C:T, 11:284299:A:G, 11:2869188:C:T, 11:31703352:C:T, 11:36458997:A:G, 11:46745003:C:T, 11:4730985:C:T, 11:47469439:A:G, 11:4791111:T:C, 11:48285982:CTT:-, 11:4976554:A:G, 11:5079946:C:T, 11:51516000:C:T, 11:5248243:A:G, 11:5510598:A:T, 11:5510626:T:C, 11:551753:G:A, 11:55340379:T:C, 11:57982832:T:A, 11:5809548:G:A, 11:6007899:C:T, 11:60285575:A:G, 11:60698054:G:A, 11:60701987:G:A, 11:62010863:C:T, 11:6243804:A:G, 11:62847453:T:C, 11:62951221:C:G, 11:63991581:G:A, 11:64367862:T:C, 11:64591972:T:C, 11:64808682:C:-, 11:67258391:A:G, 11:6789929:C:A, 11:68030173:C:A, 11:68703959:A:G, 11:70279766:C:T, 11:7324475:T:C, 11:73681135:G:A, 11:77635882:A:C, 11:77920930:A:G, 11:870446:G:A, 11:87908448:A:G, 11:89224131:-:TC, 11:92088177:C:T, 11:93517874:C:G, 12:10206925:A:G, 12:104709559:C:T, 12:105568176:G:A, 12:10588530:C:G, 12:10958658:T:C, 12:109696838:G:A, 12:109937534:G:A, 12:110893682:C:A, 12:112580071:C:T, 12:113357209:G:A, 12:11420941:G:T, 12:114377885:G:C, 12:117693817:G:A, 12:118199286:C:G, 12:11905443:G:T, 12:122674758:G:A, 12:123345736:C:G, 12:123799974:A:G, 12:124325977:T:G, 12:124417889:C:T, 12:124968359:C:T, 12:129189702:C:G, 12:129566340:G:A, 12:13214537:A:G, 12:133202004:C:T, 12:133331459:G:C, 12:18443809:C:A, 12:19506870:C:G, 12:26217567:T:C, 12:27077409:G:A, 12:49390677:T:C, 12:50189807:C:A, 12:50190653:C:T, 12:50744119:G:A, 12:51237816:G:A, 12:52885350:T:C, 12:52886911:T:C, 12:52981512:G:A, 12:53217701:C:A, 12:55808469:C:G, 12:55820121:C:T, 12:56335107:A:G, 12:57109931:A:T, 12:57619362:G:A, 12:6091000:A:G, 12:63083521:G:A, 12:6424188:T:C, 12:7981462:T:A, 12:9083336:A:G, 12:93147907:A:T, 12:94976084:T:C, 12:97254620:G:A, 13:110436232:G:A, 13:111319754:T:C, 13:111368164:T:G, 13:113979969:-:CACA, 13:19999913:G:A, 13:23907677:C:T, 13:24243200:T:C, 13:25265139:T:C, 13:26043182:A:C, 13:28009031:G:C, 13:31495179:G:A, 13:31729729:A:G, 13:33590851:T:C, 13:47243196:C:G, 13:52660472:G:A, 13:52951802:T:C, 13:64417500:C:G, 13:95726541:A:G, 13:95863008:C:A, 14:100625902:C:T, 14:101200645:T:C, 14:101350721:T:C, 14:103986255:C:T, 14:105187469:G:A, 14:105344823:G:A, 14:105414252:C:T, 14:105419234:T:C, 14:20528362:A:G, 14:20586432:C:T, 14:21467913:T:G, 14:21511497:C:T, 14:22133997:A:G, 14:39648629:C:T, 14:51057727:G:A, 14:51368610:A:G, 14:52186966:G:A, 14:60574539:A:G, 14:69704553:G:T, 14:75513883:T:C, 14:77942316:G:A, 14:88477882:A:C, 14:90398907:G:A, 14:92088016:G:A, 14:95903306:GTA:-, 14:97002317:G:A, 15:100269796:A:G, 15:29415698:A:G, 15:34673722:C:T, 15:40914177:T:C, 15:41148199:C:T, 15:41149161:G:C, 15:41991315:A:T, 15:42139642:C:T, 15:51217361:T:C, 15:52353498:C:G, 15:52901977:G:A, 15:56959028:C:T, 15:63340647:A:G, 15:63433766:G:A, 15:65715171:G:A, 15:68596203:C:A, 15:68624290:G:A, 15:73994847:C:A, 15:78632830:C:G, 15:79058968:T:C, 15:80215597:G:T, 15:82443939:G:A, 15:84255758:T:C, 15:90126121:C:T, 15:90168693:T:A, 15:90226947:C:A, 15:90628591:G:A, 16:1291250:C:G, 16:16278863:G:T, 16:18872050:C:T, 16:19509305:C:G, 16:1961674:G:C, 16:20376755:T:C, 16:20648702:G:A, 16:23546561:G:C, 16:2815237:A:C, 16:29814234:G:A, 16:3085335:G:C, 16:31004169:T:C, 16:31091209:T:C, 16:3199713:C:T, 16:3297181:C:T, 16:33961918:G:T, 16:3639139:A:G, 16:427820:C:T, 16:4432029:A:C, 16:4938160:T:G, 16:50342658:C:T, 16:51173559:G:A, 16:5140541:G:C, 16:53636000:G:A, 16:68598007:A:G, 16:68712730:C:A, 16:69364437:G:A, 16:70161263:T:C, 16:71660310:G:A, 16:72110541:G:A, 16:76311603:-:T, 16:81211548:G:A, 16:83984844:A:C, 16:84229559:T:C, 16:84229580:C:T, 16:84516309:G:A, 16:84691433:C:T, 16:8738579:A:G, 16:88713236:A:G, 16:88724347:G:T, 16:88805183:G:A, 16:89590168:-:TA, 17:10544416:G:T, 17:11523082:A:G, 17:15341183:A:C, 17:17696531:G:C, 17:21203964:C:G, 17:21318770:G:A, 17:29161358:C:T, 17:30469423:C:A, 17:34328461:A:G, 17:3594277:G:-, 17:3628362:T:C, 17:36478450:G:T, 17:36963226:G:T, 17:38122686:G:A, 17:38955961:G:A, 17:3909383:G:C, 17:39135207:A:G, 17:39334133:T:C, 17:3947533:G:A, 17:39633349:G:C, 17:39661689:G:A, 17:39983849:G:C, 17:41891589:G:A, 17:4463713:A:G, 17:47210506:C:A, 17:47572518:C:T, 17:48452776:A:C, 17:4926882:A:G, 17:56232675:G:A, 17:56598439:T:C, 17:60503892:A:G, 17:6157:A:G, 17:62019103:G:T, 17:65104743:G:A, 17:6515454:C:T, 17:66416357:C:T, 17:6943266:G:A, 17:71390366:C:A, 17:72346855:T:C, 17:7293715:C:T, 17:73949555:C:T, 17:74287204:C:G, 17:74468111:G:A, 17:76230729:T:C, 17:76462770:G:A, 17:7681412:C:G, 17:79477830:C:T, 17:79478019:G:A, 17:8021608:G:C, 17:80391684:A:G, 17:8243661:G:A, 17:8416901:C:T, 18:11609978:C:T, 18:13056682:G:A, 18:13069782:C:T, 18:14752957:G:A, 18:166819:T:C, 18:21100240:C:T, 18:2707619:G:A, 18:28710615:C:A, 18:3164385:C:T, 18:42529996:G:C, 18:56205262:A:C, 18:60191428:G:A, 18:60237388:A:G, 18:61390361:T:C, 18:76753768:C:G, 18:77171061:T:G, 18:77894844:G:A, 18:8784612:A:G, 18:9887205:A:G, 19:10106787:G:A, 19:10221642:A:G, 19:1032689:G:T, 19:10450285:G:A, 19:1047002:A:G, 19:11465316:G:C, 19:12936617:C:G, 19:14495661:A:C, 19:14512489:G:A, 19:14580328:A:G, 19:14589378:C:T, 19:14817548:T:A, 19:14877102:C:T, 19:14910321:A:G, 19:14952017:T:A, 19:15905661:C:A, 19:17450016:T:C, 19:17648350:T:C, 19:18054110:G:A, 19:1811547:A:G, 19:18337260:G:A, 19:18562438:C:T, 19:19168542:A:G, 19:19655670:C:T, 19:1969882:G:T, 19:20229486:G:A, 19:20807047:A:G, 19:21477431:T:C, 19:21606429:G:T, 19:30199200:C:T, 19:33110204:T:C, 19:33792748:G:A, 19:35719106:A:G, 19:36940760:G:T, 19:36981137:A:-, 19:37488499:T:C, 19:39923952:G:A, 19:41018832:A:G, 19:41133643:C:T, 19:42085873:A:G, 19:42301763:A:C, 19:4251069:T:C, 19:4322990:G:A, 19:43243238:A:G, 19:4333711:C:T, 19:43585111:C:G, 19:43585325:G:A, 19:43922060:C:T, 19:43983740:T:C, 19:44470420:T:C, 19:44740602:G:A, 19:44934489:G:A, 19:4511278:C:T, 19:48622427:A:G, 19:4910889:G:T, 19:49513273:C:T, 19:49526191:G:A, 19:49869051:T:G, 19:49950298:C:T, 19:49954803:C:T, 19:501725:G:A, 19:501900:C:A, 19:50312653:C:T, 19:51330932:G:T, 19:51850290:G:A, 19:52004792:-:C, 19:52090100:T:C, 19:5212482:G:A, 19:52887247:-:CAA, 19:52942445:C:T, 19:53995004:G:A, 19:5455976:C:T, 19:54599222:G:T, 19:54677759:T:C, 19:55045042:G:A, 19:55526345:T:G, 19:55871019:A:G, 19:55993876:T:C, 19:56114237:G:A, 19:57036012:G:T, 19:57840547:A:G, 19:57931303:C:A, 19:58002964:G:C, 19:58565233:G:A, 19:58904396:G:A, 19:6731057:T:C, 19:7528734:A:G, 19:7571030:T:A, 19:7755056:G:A, 19:8564288:C:T, 19:8576670:C:T, 19:8645786:A:C, 19:9024994:C:T, 19:9065632:T:C, 19:9072742:T:C, 1:100203648:C:T, 1:100515497:T:C, 1:101704674:T:C, 1:104076462:C:T, 1:104116413:T:C, 1:107979396:A:C, 1:109735416:A:C, 1:116534852:C:T, 1:117487710:A:G, 1:11839971:C:T, 1:11848068:G:C, 1:120611554:T:C, 1:120611715:A:G, 1:13910417:C:T, 1:144917841:T:C, 1:146758054:G:A, 1:150526044:G:C, 1:150970577:G:T, 1:152079989:T:G, 1:152185864:G:A, 1:152192825:C:T, 1:152278689:C:A, 1:152325732:G:A, 1:152770533:G:A, 1:156760887:C:A, 1:158735691:T:C, 1:158813081:T:C, 1:15909850:C:G, 1:160648875:C:T, 1:16386447:G:C, 1:16451767:G:A, 1:1650807:T:C, 1:165389129:G:A, 1:167097739:C:A, 1:169391154:A:G, 1:17586134:A:G, 1:176992553:A:G, 1:17739586:G:A, 1:177902388:G:A, 1:179533915:G:A, 1:182850483:C:T, 1:183184616:C:T, 1:1849529:A:G, 1:18808526:A:C, 1:19175846:T:C, 1:19597420:G:T, 1:200880978:C:T, 1:202129826:T:C, 1:204402500:C:T, 1:208391085:G:A, 1:208391254:C:T, 1:209811886:T:G, 1:21050958:C:T, 1:212873074:C:T, 1:214820299:A:G, 1:215799210:A:G, 1:223717496:C:T, 1:223951857:G:A, 1:225266966:C:G, 1:226553676:C:T, 1:227171487:C:T, 1:228496014:G:A, 1:228504670:C:T, 1:228559994:C:T, 1:229622162:A:G, 1:229623338:T:C, 1:23111551:A:T, 1:234745009:A:G, 1:235652513:T:C, 1:237890437:C:T, 1:2441358:T:C, 1:245133550:GC:-, 1:245704130:G:C, 1:2458010:G:C, 1:247902448:G:A, 1:248436611:G:A, 1:248458876:T:-, 1:248487016:C:T, 1:248525060:T:A, 1:248737511:A:G, 1:25291010:A:T, 1:25890189:A:G, 1:27320356:T:C, 1:29189597:C:T, 1:29475648:T:G, 1:32148571:A:G, 1:33161212:T:C, 1:34330067:A:C, 1:40881041:C:G, 1:40980731:G:T, 1:41285553:T:C, 1:43296173:C:T, 1:47133811:T:C, 1:54605320:-:C, 1:55075062:C:T, 1:59125683:C:T, 1:60381646:C:T, 1:6162054:T:C, 1:62603421:C:T, 1:65860687:A:C, 1:67313249:G:A, 1:67558739:C:T, 1:67852335:G:A, 1:75672376:A:G, 1:76198785:G:A, 1:7797503:C:G, 1:7909737:C:T, 1:84880380:T:C, 1:84944989:A:G, 1:89426902:G:A, 1:89847411:C:T, 1:9009406:C:T, 1:90178336:G:A, 1:92445257:C:G, 20:1600524:T:C, 20:23017017:T:C, 20:25255338:C:T, 20:30795819:T:C, 20:31024207:C:T, 20:31044088:C:T, 20:31897554:G:C, 20:3209072:A:C, 20:36979265:T:C, 20:40714479:G:A, 20:4163302:A:G, 20:42815190:G:A, 20:43379268:C:A, 20:44680412:C:T, 20:44996182:A:G, 20:57045667:T:C, 20:57244493:G:A, 20:60293919:C:A, 20:60640306:GCCAGG:-, 20:61167883:G:A, 20:61881296:A:G, 20:62903550:A:G, 20:7980390:C:T, 21:15954528:G:A, 21:28216674:G:C, 21:33717877:G:A, 21:33956579:T:C, 21:34883618:T:C, 21:37420650:G:A, 21:38437917:A:C, 21:40191638:A:G, 21:43547788:T:C, 21:43824123:G:C, 21:45107518:A:G, 21:45959386:G:A, 21:46020527:C:T, 21:46271452:C:T, 21:47831866:G:A, 22:17469026:G:A, 22:18835221:A:G, 22:19753449:A:G, 22:20780030:-:C, 22:20800835:A:G, 22:21044998:C:T, 22:24109774:T:G, 22:24891380:C:T, 22:26862041:G:A, 22:29454778:G:A, 22:32334229:A:C, 22:36591380:A:G, 22:38369976:A:G, 22:38485540:A:G, 22:41548008:A:G, 22:42416056:A:G, 22:44681612:A:G, 22:45685002:A:G, 22:45813687:G:A, 22:50547247:A:G, 22:50962208:T:G, 2:101096960:C:T, 2:101594191:C:T, 2:107073469:T:A, 2:109381927:A:C, 2:112686988:G:A, 2:120199140:A:G, 2:129025758:C:A, 2:130897620:A:G, 2:136594158:G:A, 2:158636910:G:A, 2:159663599:T:C, 2:159954175:C:T, 2:160035207:T:C, 2:160738677:G:A, 2:160968628:A:G, 2:169985338:C:T, 2:170053505:C:T, 2:170218847:C:G, 2:170354138:G:A, 2:171822466:C:T, 2:172725301:A:G, 2:172945107:C:T, 2:174097106:A:G, 2:176945176:C:G, 2:17698678:A:G, 2:178417142:C:T, 2:179464527:T:C, 2:179578704:G:A, 2:185800905:A:T, 2:186673485:C:T, 2:189932831:T:C, 2:197004439:A:G, 2:203686202:T:C, 2:207041933:T:C, 2:216242917:T:A, 2:219602819:G:A, 2:220283277:T:C, 2:225719693:G:A, 2:228776996:T:C, 2:233712227:ACA:-, 2:233750074:C:T, 2:234707460:G:C, 2:238277795:A:G, 2:240982131:A:G, 2:240985099:G:A, 2:241404317:C:T, 2:241451351:G:A, 2:24149439:G:A, 2:24432839:A:G, 2:277003:A:G, 2:32713706:A:T, 2:32822957:G:A, 2:3392295:A:G, 2:38298139:T:C, 2:55096321:T:C, 2:61647901:A:G, 2:71190384:C:T, 2:71221822:A:G, 2:73339708:G:A, 2:75937801:C:T, 2:96626292:C:T, 2:97637905:T:C, 2:98274527:G:C, 2:99778985:T:C, 3:100712249:T:C, 3:100963154:G:A, 3:101283792:C:G, 3:108634973:C:A, 3:108719470:C:G, 3:111981878:T:C, 3:112993367:G:A, 3:121100283:G:A, 3:121263720:C:A, 3:121351338:C:T, 3:121416623:G:C, 3:123452838:G:A, 3:124379817:T:C, 3:125726048:G:C, 3:1262474:T:C, 3:128369596:A:C, 3:130368301:G:A, 3:13421150:C:T, 3:14183188:G:A, 3:146177815:C:T, 3:14755572:A:G, 3:148847613:G:T, 3:151090424:G:A, 3:154002714:A:G, 3:183823576:T:C, 3:183951431:C:T, 3:183975408:G:A, 3:184003317:C:T, 3:18427924:G:T, 3:190578566:A:G, 3:191093310:A:G, 3:194081635:T:C, 3:195510217:A:G, 3:195701388:G:A, 3:195938177:A:G, 3:196046830:A:G, 3:27472936:C:T, 3:38151731:T:C, 3:38798171:C:T, 3:49690199:G:A, 3:51990315:A:G, 3:52544470:A:G, 3:52825585:T:C, 3:56627598:A:G, 3:56716922:T:G, 3:66287056:G:A, 3:97365074:A:G, 3:97983257:C:G, 3:9798773:C:G, 3:98073313:A:G, 4:104004064:T:C, 4:106155185:C:G, 4:107168431:G:C, 4:109010342:G:A, 4:113352397:G:A, 4:123664204:G:A, 4:129043204:C:G, 4:1388583:A:G, 4:154479430:T:C, 4:155256177:A:G, 4:15569018:G:A, 4:164435265:A:C, 4:173852389:C:T, 4:189012728:G:C, 4:3519881:C:T, 4:39094738:G:A, 4:42003671:A:G, 4:4249884:G:T, 4:42895308:G:A, 4:46086060:T:C, 4:56262374:A:G, 4:5785442:G:A, 4:5991384:T:C, 4:5991476:G:A, 4:69095197:T:C, 4:69687987:C:A, 4:70160342:T:C, 4:7043945:G:T, 4:71469604:C:T, 4:75719517:A:C, 4:7717012:G:A, 4:80905990:C:G, 4:83838262:G:T, 4:84376743:A:T, 4:95578588:G:A, 5:10282396:A:G, 5:109181682:A:T, 5:111611076:A:G, 5:121488506:C:G, 5:122425832:G:T, 5:125802027:G:A, 5:127609633:G:A, 5:134782450:T:A, 5:135388663:A:G, 5:136961566:C:A, 5:13701525:T:C, 5:138861078:C:T, 5:140346468:T:A, 5:140531374:T:C, 5:140605162:C:G, 5:140772427:T:G, 5:141335284:G:A, 5:145508340:A:G, 5:148207447:G:C, 5:154271948:G:A, 5:159835658:A:G, 5:16794916:G:A, 5:169454941:C:G, 5:171723739:T:C, 5:175792605:G:C, 5:176863519:G:C, 5:177422908:A:G, 5:180472498:C:T, 5:32087253:A:G, 5:35861068:T:C, 5:40998196:T:C, 5:41158863:G:A, 5:42719239:A:C, 5:476353:C:T, 5:54253615:C:T, 5:54404015:C:T, 5:56526783:G:A, 5:57751443:A:G, 5:57753149:A:G, 5:73076511:C:A, 5:78340257:C:G, 5:82833391:A:G, 5:89943571:G:T, 5:89985882:A:G, 5:9190404:G:A, 5:95234392:A:C, 5:96237326:G:A, 6:107113715:G:A, 6:111696257:G:A, 6:117246719:C:T, 6:129691132:C:G, 6:133035098:G:A, 6:136683828:A:G, 6:146112348:T:C, 6:151669875:A:G, 6:152470752:C:A, 6:152489294:T:C, 6:155141313:C:T, 6:155597147:C:T, 6:160858188:G:A, 6:166720806:G:C, 6:166873010:C:T, 6:167790110:C:T, 6:170485571:T:C, 6:17665479:G:C, 6:26056549:A:G, 6:26104217:T:C, 6:26370605:T:C, 6:27279852:T:C, 6:29080450:G:A, 6:29911064:A:G, 6:30313268:G:A, 6:30893127:G:A, 6:31110391:G:C, 6:31324864:G:A, 6:31378977:G:A, 6:31540784:C:A, 6:31555657:A:G, 6:31839309:C:T, 6:32370908:T:A, 6:32489748:-:CC, 6:32551959:-:TT, 6:32609271:G:C, 6:32632714:G:C, 6:32802938:C:T, 6:32826233:A:G, 6:32974551:G:T, 6:33756532:G:A, 6:36198421:T:C, 6:36446975:G:C, 6:38746176:G:A, 6:4122249:C:A, 6:41773735:G:A, 6:43251912:A:G, 6:47649265:T:A, 6:51483961:T:C, 6:54186147:T:C, 6:56470690:G:A, 6:62390916:T:C, 6:65300143:G:C, 6:656555:G:T, 6:7246998:G:A, 6:72889472:A:G, 6:74354175:C:T, 6:79656570:G:A, 6:82461520:A:G, 6:83949261:T:C, 6:84799059:C:T, 6:90459454:G:A, 6:9900600:-:GAG, 7:100391581:T:C, 7:100807230:G:T, 7:102112980:G:A, 7:104110492:C:T, 7:106524689:C:T, 7:107834734:C:T, 7:117282644:A:G, 7:12417407:C:T, 7:134925411:G:A, 7:138732497:G:A, 7:150696111:T:G, 7:150935430:G:C, 7:154681216:G:A, 7:156742675:C:T, 7:20698270:A:G, 7:20778646:G:A, 7:2645526:G:A, 7:30915262:C:T, 7:31009576:G:T, 7:36366483:G:C, 7:37907304:T:C, 7:43664280:A:G, 7:44620836:C:A, 7:45124465:A:T, 7:47872845:A:G, 7:50435777:T:G, 7:5112057:C:G, 7:5518331:A:G, 7:55433884:A:C, 7:6026988:G:A, 7:63225873:C:T, 7:6550540:G:A, 7:66098384:G:A, 7:66703328:G:A, 7:75659815:T:C, 7:87160618:A:C, 7:91503228:C:T, 7:92098776:C:T, 7:97823125:G:A, 7:99580907:C:G, 8:104337096:A:G, 8:10480268:A:C, 8:110302047:T:G, 8:11996150:C:G, 8:124448804:T:A, 8:124665124:C:T, 8:12878807:T:G, 8:142367400:G:A, 8:142488837:G:A, 8:144332082:T:C, 8:144671685:G:C, 8:144697041:A:G, 8:144946252:C:T, 8:144995736:G:A, 8:144998514:C:T, 8:145693720:A:G, 8:146033347:T:C, 8:146115367:A:G, 8:146156247:C:A, 8:18257854:T:C, 8:2021421:G:T, 8:22864622:T:C, 8:23150878:T:G, 8:27634589:T:C, 8:27925796:A:T, 8:30585310:T:C, 8:30695226:C:T, 8:3200877:C:T, 8:41132742:A:T, 8:48173561:G:A, 8:57026229:C:A, 8:74005131:A:G, 8:74888616:G:C, 8:75157094:C:T, 8:75737733:A:G, 8:8234192:G:C, 8:977600:C:T, 9:103064530:G:A, 9:107361439:G:C, 9:112069477:T:A, 9:113169630:T:C, 9:115968797:C:T, 9:116028559:C:A, 9:117835931:G:A, 9:125637471:A:T, 9:125920376:G:A, 9:126520068:T:C, 9:127220952:T:C, 9:131403096:A:G, 9:131689361:G:A, 9:132382596:C:A, 9:132591509:A:G, 9:133710820:-:C, 9:133761001:A:G, 9:133951230:C:T, 9:135139901:T:C, 9:136340200:T:G, 9:138591266:A:G, 9:139100805:T:C, 9:139273288:C:T, 9:139391636:G:A, 9:139413908:C:T, 9:139650678:A:G, 9:139656670:T:C, 9:139937795:T:C, 9:139990813:C:T, 9:14775859:G:A, 9:17466802:A:G, 9:18681821:A:G, 9:19058483:C:A, 9:27524731:A:G, 9:33935736:A:G, 9:34379692:C:T, 9:35606884:G:A, 9:35870001:T:C, 9:37441650:T:C, 9:429719:T:C, 9:90343780:A:C, 9:91978397:C:T, X:107976940:G:C, X:11316892:C:T, X:117700141:A:G, X:13677862:G:A, X:153151285:T:-, X:2408437:G:A, X:295231:A:G, X:3241791:G:A, X:45051111:C:T, X:48460314:A:G, X:70146475:G:C -1:1650807:T:C, 1:1849529:A:G, 1:2441358:T:C, 1:2458010:G:C, 1:6162054:T:C, 1:7797503:C:G, 1:7909737:C:T, 1:9009406:C:T, 1:11839971:C:T, 1:11848068:G:C, 1:13910417:C:T, 1:15909850:C:G, 1:16386447:G:C, 1:16451767:G:A, 1:17586134:A:G, 1:17739586:G:A, 1:18808526:A:C, 1:19175846:T:C, 1:19597420:G:T, 1:21050958:C:T, 1:23111551:A:T, 1:25291010:A:T, 1:25890189:A:G, 1:27320356:T:C, 1:29189597:C:T, 1:29475648:T:G, 1:32148571:A:G, 1:33161212:T:C, 1:34330067:A:C, 1:40881041:C:G, 1:40980731:G:T, 1:41285553:T:C, 1:43296173:C:T, 1:47133811:T:C, 1:54605320:-:C, 1:55075062:C:T, 1:59125683:C:T, 1:60381646:C:T, 1:62603421:C:T, 1:65860687:A:C, 1:67313249:G:A, 1:67558739:C:T, 1:67852335:G:A, 1:75672376:A:G, 1:76198785:G:A, 1:84880380:T:C, 1:84944989:A:G, 1:89426902:G:A, 1:89847411:C:T, 1:90178336:G:A, 1:92445257:C:G, 1:100203648:C:T, 1:100515497:T:C, 1:101704674:T:C, 1:104076462:C:T, 1:104116413:T:C, 1:107979396:A:C, 1:109735416:A:C, 1:116534852:C:T, 1:117487710:A:G, 1:120611554:T:C, 1:120611715:A:G, 1:144917841:T:C, 1:146758054:G:A, 1:150526044:G:C, 1:150970577:G:T, 1:152079989:T:G, 1:152185864:G:A, 1:152192825:C:T, 1:152278689:C:A, 1:152325732:G:A, 1:152770533:G:A, 1:156760887:C:A, 1:158735691:T:C, 1:158813081:T:C, 1:160648875:C:T, 1:165389129:G:A, 1:167097739:C:A, 1:169391154:A:G, 1:176992553:A:G, 1:177902388:G:A, 1:179533915:G:A, 1:182850483:C:T, 1:183184616:C:T, 1:200880978:C:T, 1:202129826:T:C, 1:204402500:C:T, 1:208391085:G:A, 1:208391254:C:T, 1:209811886:T:G, 1:212873074:C:T, 1:214820299:A:G, 1:215799210:A:G, 1:223717496:C:T, 1:223951857:G:A, 1:225266966:C:G, 1:226553676:C:T, 1:227171487:C:T, 1:228496014:G:A, 1:228504670:C:T, 1:228559994:C:T, 1:229622162:A:G, 1:229623338:T:C, 1:234745009:A:G, 1:235652513:T:C, 1:237890437:C:T, 1:245133550:GC:-, 1:245704130:G:C, 1:247902448:G:A, 1:248436611:G:A, 1:248458876:T:-, 1:248487016:C:T, 1:248525060:T:A, 1:248737511:A:G, 10:5435918:G:A, 10:6063508:G:A, 10:7601810:TTTTG:-, 10:11805354:A:G, 10:14941654:C:T, 10:21104613:T:C, 10:26463043:A:T, 10:27964470:G:A, 10:28345418:T:C, 10:33137551:T:C, 10:45953767:A:G, 10:46965018:C:G, 10:49659637:T:C, 10:61665886:C:A, 10:64573771:C:T, 10:69926319:C:A, 10:71027231:G:C, 10:73044580:G:A, 10:75871735:C:G, 10:81065938:C:T, 10:85997105:G:T, 10:88696622:C:G, 10:88702350:G:C, 10:88730312:T:C, 10:92456132:T:C, 10:93841227:A:G, 10:95552653:T:C, 10:96163039:C:G, 10:99006083:G:A, 10:99130282:T:G, 10:101166544:C:T, 10:101473218:A:G, 10:104229785:C:T, 10:105194086:C:T, 10:119043554:C:T, 10:121086097:A:T, 10:123976285:G:A, 10:129899922:T:C, 10:134013974:C:A, 10:135000148:T:C, 11:233067:C:T, 11:284299:A:G, 11:551753:G:A, 11:870446:G:A, 11:1087972:C:T, 11:1158073:T:C, 11:1272559:C:T, 11:1502097:A:G, 11:1858262:C:T, 11:2869188:C:T, 11:4730985:C:T, 11:4791111:T:C, 11:4976554:A:G, 11:5079946:C:T, 11:5248243:A:G, 11:5510598:A:T, 11:5510626:T:C, 11:5809548:G:A, 11:6007899:C:T, 11:6243804:A:G, 11:6789929:C:A, 11:7324475:T:C, 11:18210580:C:T, 11:31703352:C:T, 11:36458997:A:G, 11:46745003:C:T, 11:47469439:A:G, 11:48285982:CTT:-, 11:51516000:C:T, 11:55340379:T:C, 11:57982832:T:A, 11:60285575:A:G, 11:60698054:G:A, 11:60701987:G:A, 11:62010863:C:T, 11:62847453:T:C, 11:62951221:C:G, 11:63991581:G:A, 11:64367862:T:C, 11:64591972:T:C, 11:64808682:C:-, 11:67258391:A:G, 11:68030173:C:A, 11:68703959:A:G, 11:70279766:C:T, 11:73681135:G:A, 11:77635882:A:C, 11:77920930:A:G, 11:87908448:A:G, 11:89224131:-:TC, 11:92088177:C:T, 11:93517874:C:G, 11:103229027:T:C, 11:111324266:T:A, 11:117376413:G:A, 11:118529069:G:C, 11:121491782:G:A, 11:123777498:C:T, 11:124015994:C:T, 11:125707761:A:C, 11:128781978:T:G, 11:134158745:A:G, 12:6091000:A:G, 12:6424188:T:C, 12:7981462:T:A, 12:9083336:A:G, 12:10206925:A:G, 12:10588530:C:G, 12:10958658:T:C, 12:11420941:G:T, 12:11905443:G:T, 12:13214537:A:G, 12:18443809:C:A, 12:19506870:C:G, 12:26217567:T:C, 12:27077409:G:A, 12:49390677:T:C, 12:50189807:C:A, 12:50190653:C:T, 12:50744119:G:A, 12:51237816:G:A, 12:52885350:T:C, 12:52886911:T:C, 12:52981512:G:A, 12:53217701:C:A, 12:55808469:C:G, 12:55820121:C:T, 12:56335107:A:G, 12:57109931:A:T, 12:57619362:G:A, 12:63083521:G:A, 12:93147907:A:T, 12:94976084:T:C, 12:97254620:G:A, 12:104709559:C:T, 12:105568176:G:A, 12:109696838:G:A, 12:109937534:G:A, 12:110893682:C:A, 12:112580071:C:T, 12:113357209:G:A, 12:114377885:G:C, 12:117693817:G:A, 12:118199286:C:G, 12:122674758:G:A, 12:123345736:C:G, 12:123799974:A:G, 12:124325977:T:G, 12:124417889:C:T, 12:124968359:C:T, 12:129189702:C:G, 12:129566340:G:A, 12:133202004:C:T, 12:133331459:G:C, 13:19999913:G:A, 13:23907677:C:T, 13:24243200:T:C, 13:25265139:T:C, 13:26043182:A:C, 13:28009031:G:C, 13:31495179:G:A, 13:31729729:A:G, 13:33590851:T:C, 13:47243196:C:G, 13:52660472:G:A, 13:52951802:T:C, 13:64417500:C:G, 13:95726541:A:G, 13:95863008:C:A, 13:110436232:G:A, 13:111319754:T:C, 13:111368164:T:G, 13:113979969:-:CACA, 14:20528362:A:G, 14:20586432:C:T, 14:21467913:T:G, 14:21511497:C:T, 14:22133997:A:G, 14:39648629:C:T, 14:51057727:G:A, 14:51368610:A:G, 14:52186966:G:A, 14:60574539:A:G, 14:69704553:G:T, 14:75513883:T:C, 14:77942316:G:A, 14:88477882:A:C, 14:90398907:G:A, 14:92088016:G:A, 14:95903306:GTA:-, 14:97002317:G:A, 14:100625902:C:T, 14:101200645:T:C, 14:101350721:T:C, 14:103986255:C:T, 14:105187469:G:A, 14:105344823:G:A, 14:105414252:C:T, 14:105419234:T:C, 15:29415698:A:G, 15:34673722:C:T, 15:40914177:T:C, 15:41148199:C:T, 15:41149161:G:C, 15:41991315:A:T, 15:42139642:C:T, 15:51217361:T:C, 15:52353498:C:G, 15:52901977:G:A, 15:56959028:C:T, 15:63340647:A:G, 15:63433766:G:A, 15:65715171:G:A, 15:68596203:C:A, 15:68624290:G:A, 15:73994847:C:A, 15:78632830:C:G, 15:79058968:T:C, 15:80215597:G:T, 15:82443939:G:A, 15:84255758:T:C, 15:90126121:C:T, 15:90168693:T:A, 15:90226947:C:A, 15:90628591:G:A, 15:100269796:A:G, 16:427820:C:T, 16:1291250:C:G, 16:1961674:G:C, 16:2815237:A:C, 16:3085335:G:C, 16:3199713:C:T, 16:3297181:C:T, 16:3639139:A:G, 16:4432029:A:C, 16:4938160:T:G, 16:5140541:G:C, 16:8738579:A:G, 16:16278863:G:T, 16:18872050:C:T, 16:19509305:C:G, 16:20376755:T:C, 16:20648702:G:A, 16:23546561:G:C, 16:29814234:G:A, 16:31004169:T:C, 16:31091209:T:C, 16:33961918:G:T, 16:50342658:C:T, 16:51173559:G:A, 16:53636000:G:A, 16:68598007:A:G, 16:68712730:C:A, 16:69364437:G:A, 16:70161263:T:C, 16:71660310:G:A, 16:72110541:G:A, 16:76311603:-:T, 16:81211548:G:A, 16:83984844:A:C, 16:84229559:T:C, 16:84229580:C:T, 16:84516309:G:A, 16:84691433:C:T, 16:88713236:A:G, 16:88724347:G:T, 16:88805183:G:A, 16:89590168:-:TA, 17:6157:A:G, 17:3594277:G:-, 17:3628362:T:C, 17:3909383:G:C, 17:3947533:G:A, 17:4463713:A:G, 17:4926882:A:G, 17:6515454:C:T, 17:6943266:G:A, 17:7293715:C:T, 17:7681412:C:G, 17:8021608:G:C, 17:8243661:G:A, 17:8416901:C:T, 17:10544416:G:T, 17:11523082:A:G, 17:15341183:A:C, 17:17696531:G:C, 17:21203964:C:G, 17:21318770:G:A, 17:29161358:C:T, 17:30469423:C:A, 17:34328461:A:G, 17:36478450:G:T, 17:36963226:G:T, 17:38122686:G:A, 17:38955961:G:A, 17:39135207:A:G, 17:39334133:T:C, 17:39633349:G:C, 17:39661689:G:A, 17:39983849:G:C, 17:41891589:G:A, 17:47210506:C:A, 17:47572518:C:T, 17:48452776:A:C, 17:56232675:G:A, 17:56598439:T:C, 17:60503892:A:G, 17:62019103:G:T, 17:65104743:G:A, 17:66416357:C:T, 17:71390366:C:A, 17:72346855:T:C, 17:73949555:C:T, 17:74287204:C:G, 17:74468111:G:A, 17:76230729:T:C, 17:76462770:G:A, 17:79477830:C:T, 17:79478019:G:A, 17:80391684:A:G, 18:166819:T:C, 18:2707619:G:A, 18:3164385:C:T, 18:8784612:A:G, 18:9887205:A:G, 18:11609978:C:T, 18:13056682:G:A, 18:13069782:C:T, 18:14752957:G:A, 18:21100240:C:T, 18:28710615:C:A, 18:42529996:G:C, 18:56205262:A:C, 18:60191428:G:A, 18:60237388:A:G, 18:61390361:T:C, 18:76753768:C:G, 18:77171061:T:G, 18:77894844:G:A, 19:501725:G:A, 19:501900:C:A, 19:1032689:G:T, 19:1047002:A:G, 19:1811547:A:G, 19:1969882:G:T, 19:4251069:T:C, 19:4322990:G:A, 19:4333711:C:T, 19:4511278:C:T, 19:4910889:G:T, 19:5212482:G:A, 19:5455976:C:T, 19:6731057:T:C, 19:7528734:A:G, 19:7571030:T:A, 19:7755056:G:A, 19:8564288:C:T, 19:8576670:C:T, 19:8645786:A:C, 19:9024994:C:T, 19:9065632:T:C, 19:9072742:T:C, 19:10106787:G:A, 19:10221642:A:G, 19:10450285:G:A, 19:11465316:G:C, 19:12936617:C:G, 19:14495661:A:C, 19:14512489:G:A, 19:14580328:A:G, 19:14589378:C:T, 19:14817548:T:A, 19:14877102:C:T, 19:14910321:A:G, 19:14952017:T:A, 19:15905661:C:A, 19:17450016:T:C, 19:17648350:T:C, 19:18054110:G:A, 19:18337260:G:A, 19:18562438:C:T, 19:19168542:A:G, 19:19655670:C:T, 19:20229486:G:A, 19:20807047:A:G, 19:21477431:T:C, 19:21606429:G:T, 19:30199200:C:T, 19:33110204:T:C, 19:33792748:G:A, 19:35719106:A:G, 19:36940760:G:T, 19:36981137:A:-, 19:37488499:T:C, 19:39923952:G:A, 19:41018832:A:G, 19:41133643:C:T, 19:42085873:A:G, 19:42301763:A:C, 19:43243238:A:G, 19:43585111:C:G, 19:43585325:G:A, 19:43922060:C:T, 19:43983740:T:C, 19:44470420:T:C, 19:44740602:G:A, 19:44934489:G:A, 19:48622427:A:G, 19:49513273:C:T, 19:49526191:G:A, 19:49869051:T:G, 19:49950298:C:T, 19:49954803:C:T, 19:50312653:C:T, 19:51330932:G:T, 19:51850290:G:A, 19:52004792:-:C, 19:52090100:T:C, 19:52887247:-:CAA, 19:52942445:C:T, 19:53995004:G:A, 19:54599222:G:T, 19:54677759:T:C, 19:55045042:G:A, 19:55526345:T:G, 19:55871019:A:G, 19:55993876:T:C, 19:56114237:G:A, 19:57036012:G:T, 19:57840547:A:G, 19:57931303:C:A, 19:58002964:G:C, 19:58565233:G:A, 19:58904396:G:A, 2:277003:A:G, 2:3392295:A:G, 2:17698678:A:G, 2:24149439:G:A, 2:24432839:A:G, 2:32713706:A:T, 2:32822957:G:A, 2:38298139:T:C, 2:55096321:T:C, 2:61647901:A:G, 2:71190384:C:T, 2:71221822:A:G, 2:73339708:G:A, 2:75937801:C:T, 2:96626292:C:T, 2:97637905:T:C, 2:98274527:G:C, 2:99778985:T:C, 2:101096960:C:T, 2:101594191:C:T, 2:107073469:T:A, 2:109381927:A:C, 2:112686988:G:A, 2:120199140:A:G, 2:129025758:C:A, 2:130897620:A:G, 2:136594158:G:A, 2:158636910:G:A, 2:159663599:T:C, 2:159954175:C:T, 2:160035207:T:C, 2:160738677:G:A, 2:160968628:A:G, 2:169985338:C:T, 2:170053505:C:T, 2:170218847:C:G, 2:170354138:G:A, 2:171822466:C:T, 2:172725301:A:G, 2:172945107:C:T, 2:174097106:A:G, 2:176945176:C:G, 2:178417142:C:T, 2:179464527:T:C, 2:179578704:G:A, 2:185800905:A:T, 2:186673485:C:T, 2:189932831:T:C, 2:197004439:A:G, 2:203686202:T:C, 2:207041933:T:C, 2:216242917:T:A, 2:219602819:G:A, 2:220283277:T:C, 2:225719693:G:A, 2:228776996:T:C, 2:233712227:ACA:-, 2:233750074:C:T, 2:234707460:G:C, 2:238277795:A:G, 2:240982131:A:G, 2:240985099:G:A, 2:241404317:C:T, 2:241451351:G:A, 20:1600524:T:C, 20:3209072:A:C, 20:4163302:A:G, 20:7980390:C:T, 20:23017017:T:C, 20:25255338:C:T, 20:30795819:T:C, 20:31024207:C:T, 20:31044088:C:T, 20:31897554:G:C, 20:36979265:T:C, 20:40714479:G:A, 20:42815190:G:A, 20:43379268:C:A, 20:44680412:C:T, 20:44996182:A:G, 20:57045667:T:C, 20:57244493:G:A, 20:60293919:C:A, 20:60640306:GCCAGG:-, 20:61167883:G:A, 20:61881296:A:G, 20:62903550:A:G, 21:15954528:G:A, 21:28216674:G:C, 21:33717877:G:A, 21:33956579:T:C, 21:34883618:T:C, 21:37420650:G:A, 21:38437917:A:C, 21:40191638:A:G, 21:43547788:T:C, 21:43824123:G:C, 21:45107518:A:G, 21:45959386:G:A, 21:46020527:C:T, 21:46271452:C:T, 21:47831866:G:A, 22:17469026:G:A, 22:18835221:A:G, 22:19753449:A:G, 22:20780030:-:C, 22:20800835:A:G, 22:21044998:C:T, 22:24109774:T:G, 22:24891380:C:T, 22:26862041:G:A, 22:29454778:G:A, 22:32334229:A:C, 22:36591380:A:G, 22:38369976:A:G, 22:38485540:A:G, 22:41548008:A:G, 22:42416056:A:G, 22:44681612:A:G, 22:45685002:A:G, 22:45813687:G:A, 22:50547247:A:G, 22:50962208:T:G, 3:1262474:T:C, 3:9798773:C:G, 3:13421150:C:T, 3:14183188:G:A, 3:14755572:A:G, 3:18427924:G:T, 3:27472936:C:T, 3:38151731:T:C, 3:38798171:C:T, 3:49690199:G:A, 3:51990315:A:G, 3:52544470:A:G, 3:52825585:T:C, 3:56627598:A:G, 3:56716922:T:G, 3:66287056:G:A, 3:97365074:A:G, 3:97983257:C:G, 3:98073313:A:G, 3:100712249:T:C, 3:100963154:G:A, 3:101283792:C:G, 3:108634973:C:A, 3:108719470:C:G, 3:111981878:T:C, 3:112993367:G:A, 3:121100283:G:A, 3:121263720:C:A, 3:121351338:C:T, 3:121416623:G:C, 3:123452838:G:A, 3:124379817:T:C, 3:125726048:G:C, 3:128369596:A:C, 3:130368301:G:A, 3:146177815:C:T, 3:148847613:G:T, 3:151090424:G:A, 3:154002714:A:G, 3:183823576:T:C, 3:183951431:C:T, 3:183975408:G:A, 3:184003317:C:T, 3:190578566:A:G, 3:191093310:A:G, 3:194081635:T:C, 3:195510217:A:G, 3:195701388:G:A, 3:195938177:A:G, 3:196046830:A:G, 4:1388583:A:G, 4:3519881:C:T, 4:4249884:G:T, 4:5785442:G:A, 4:5991384:T:C, 4:5991476:G:A, 4:7043945:G:T, 4:7717012:G:A, 4:15569018:G:A, 4:39094738:G:A, 4:42003671:A:G, 4:42895308:G:A, 4:46086060:T:C, 4:56262374:A:G, 4:69095197:T:C, 4:69687987:C:A, 4:70160342:T:C, 4:71469604:C:T, 4:75719517:A:C, 4:80905990:C:G, 4:83838262:G:T, 4:84376743:A:T, 4:95578588:G:A, 4:104004064:T:C, 4:106155185:C:G, 4:107168431:G:C, 4:109010342:G:A, 4:113352397:G:A, 4:123664204:G:A, 4:129043204:C:G, 4:154479430:T:C, 4:155256177:A:G, 4:164435265:A:C, 4:173852389:C:T, 4:189012728:G:C, 5:476353:C:T, 5:9190404:G:A, 5:10282396:A:G, 5:13701525:T:C, 5:16794916:G:A, 5:32087253:A:G, 5:35861068:T:C, 5:40998196:T:C, 5:41158863:G:A, 5:42719239:A:C, 5:54253615:C:T, 5:54404015:C:T, 5:56526783:G:A, 5:57751443:A:G, 5:57753149:A:G, 5:73076511:C:A, 5:78340257:C:G, 5:82833391:A:G, 5:89943571:G:T, 5:89985882:A:G, 5:95234392:A:C, 5:96237326:G:A, 5:109181682:A:T, 5:111611076:A:G, 5:121488506:C:G, 5:122425832:G:T, 5:125802027:G:A, 5:127609633:G:A, 5:134782450:T:A, 5:135388663:A:G, 5:136961566:C:A, 5:138861078:C:T, 5:140346468:T:A, 5:140531374:T:C, 5:140605162:C:G, 5:140772427:T:G, 5:141335284:G:A, 5:145508340:A:G, 5:148207447:G:C, 5:154271948:G:A, 5:159835658:A:G, 5:169454941:C:G, 5:171723739:T:C, 5:175792605:G:C, 5:176863519:G:C, 5:177422908:A:G, 5:180472498:C:T, 6:656555:G:T, 6:4122249:C:A, 6:7246998:G:A, 6:9900600:-:GAG, 6:17665479:G:C, 6:26056549:A:G, 6:26104217:T:C, 6:26370605:T:C, 6:27279852:T:C, 6:29080450:G:A, 6:29911064:A:G, 6:30313268:G:A, 6:30893127:G:A, 6:31110391:G:C, 6:31324864:G:A, 6:31378977:G:A, 6:31540784:C:A, 6:31555657:A:G, 6:31839309:C:T, 6:32370908:T:A, 6:32489748:-:CC, 6:32551959:-:TT, 6:32609271:G:C, 6:32632714:G:C, 6:32802938:C:T, 6:32826233:A:G, 6:32974551:G:T, 6:33756532:G:A, 6:36198421:T:C, 6:36446975:G:C, 6:38746176:G:A, 6:41773735:G:A, 6:43251912:A:G, 6:47649265:T:A, 6:51483961:T:C, 6:54186147:T:C, 6:56470690:G:A, 6:62390916:T:C, 6:65300143:G:C, 6:72889472:A:G, 6:74354175:C:T, 6:79656570:G:A, 6:82461520:A:G, 6:83949261:T:C, 6:84799059:C:T, 6:90459454:G:A, 6:107113715:G:A, 6:111696257:G:A, 6:117246719:C:T, 6:129691132:C:G, 6:133035098:G:A, 6:136683828:A:G, 6:146112348:T:C, 6:151669875:A:G, 6:152470752:C:A, 6:152489294:T:C, 6:155141313:C:T, 6:155597147:C:T, 6:160858188:G:A, 6:166720806:G:C, 6:166873010:C:T, 6:167790110:C:T, 6:170485571:T:C, 7:2645526:G:A, 7:5112057:C:G, 7:5518331:A:G, 7:6026988:G:A, 7:6550540:G:A, 7:12417407:C:T, 7:20698270:A:G, 7:20778646:G:A, 7:30915262:C:T, 7:31009576:G:T, 7:36366483:G:C, 7:37907304:T:C, 7:43664280:A:G, 7:44620836:C:A, 7:45124465:A:T, 7:47872845:A:G, 7:50435777:T:G, 7:55433884:A:C, 7:63225873:C:T, 7:66098384:G:A, 7:66703328:G:A, 7:75659815:T:C, 7:87160618:A:C, 7:91503228:C:T, 7:92098776:C:T, 7:97823125:G:A, 7:99580907:C:G, 7:100391581:T:C, 7:100807230:G:T, 7:102112980:G:A, 7:104110492:C:T, 7:106524689:C:T, 7:107834734:C:T, 7:117282644:A:G, 7:134925411:G:A, 7:138732497:G:A, 7:150696111:T:G, 7:150935430:G:C, 7:154681216:G:A, 7:156742675:C:T, 8:977600:C:T, 8:2021421:G:T, 8:3200877:C:T, 8:8234192:G:C, 8:10480268:A:C, 8:11996150:C:G, 8:12878807:T:G, 8:18257854:T:C, 8:22864622:T:C, 8:23150878:T:G, 8:27634589:T:C, 8:27925796:A:T, 8:30585310:T:C, 8:30695226:C:T, 8:41132742:A:T, 8:48173561:G:A, 8:57026229:C:A, 8:74005131:A:G, 8:74888616:G:C, 8:75157094:C:T, 8:75737733:A:G, 8:104337096:A:G, 8:110302047:T:G, 8:124448804:T:A, 8:124665124:C:T, 8:142367400:G:A, 8:142488837:G:A, 8:144332082:T:C, 8:144671685:G:C, 8:144697041:A:G, 8:144946252:C:T, 8:144995736:G:A, 8:144998514:C:T, 8:145693720:A:G, 8:146033347:T:C, 8:146115367:A:G, 8:146156247:C:A, 9:429719:T:C, 9:14775859:G:A, 9:17466802:A:G, 9:18681821:A:G, 9:19058483:C:A, 9:27524731:A:G, 9:33935736:A:G, 9:34379692:C:T, 9:35606884:G:A, 9:35870001:T:C, 9:37441650:T:C, 9:90343780:A:C, 9:91978397:C:T, 9:103064530:G:A, 9:107361439:G:C, 9:112069477:T:A, 9:113169630:T:C, 9:115968797:C:T, 9:116028559:C:A, 9:117835931:G:A, 9:125637471:A:T, 9:125920376:G:A, 9:126520068:T:C, 9:127220952:T:C, 9:131403096:A:G, 9:131689361:G:A, 9:132382596:C:A, 9:132591509:A:G, 9:133710820:-:C, 9:133761001:A:G, 9:133951230:C:T, 9:135139901:T:C, 9:136340200:T:G, 9:138591266:A:G, 9:139100805:T:C, 9:139273288:C:T, 9:139391636:G:A, 9:139413908:C:T, 9:139650678:A:G, 9:139656670:T:C, 9:139937795:T:C, 9:139990813:C:T, X:295231:A:G, X:2408437:G:A, X:3241791:G:A, X:11316892:C:T, X:13677862:G:A, X:45051111:C:T, X:48460314:A:G, X:70146475:G:C, X:107976940:G:C, X:117700141:A:G, X:153151285:T:- - - */ \ No newline at end of file diff --git a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-deps/opencga-storage-hadoop-deps-emr6.1/pom.xml b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-deps/opencga-storage-hadoop-deps-emr6.1/pom.xml index 001205ea43e..1c27bd10350 100644 --- a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-deps/opencga-storage-hadoop-deps-emr6.1/pom.xml +++ b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-deps/opencga-storage-hadoop-deps-emr6.1/pom.xml @@ -22,7 +22,7 @@ org.opencb.opencga opencga-storage-hadoop-deps - 2.10.0-SNAPSHOT + 2.11.0-SNAPSHOT ../pom.xml diff --git a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-deps/opencga-storage-hadoop-deps-hdp2.6/pom.xml b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-deps/opencga-storage-hadoop-deps-hdp2.6/pom.xml index e8ed3f367fc..f1f99b70468 100644 --- a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-deps/opencga-storage-hadoop-deps-hdp2.6/pom.xml +++ b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-deps/opencga-storage-hadoop-deps-hdp2.6/pom.xml @@ -22,7 +22,7 @@ org.opencb.opencga opencga-storage-hadoop-deps - 2.10.0-SNAPSHOT + 2.11.0-SNAPSHOT ../pom.xml diff --git a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-deps/opencga-storage-hadoop-deps-hdp3.1/pom.xml b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-deps/opencga-storage-hadoop-deps-hdp3.1/pom.xml index 19403f3054e..03561e6c93d 100644 --- a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-deps/opencga-storage-hadoop-deps-hdp3.1/pom.xml +++ b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-deps/opencga-storage-hadoop-deps-hdp3.1/pom.xml @@ -22,7 +22,7 @@ org.opencb.opencga opencga-storage-hadoop-deps - 2.10.0-SNAPSHOT + 2.11.0-SNAPSHOT ../pom.xml diff --git a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-deps/pom.xml b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-deps/pom.xml index f46f425eede..c0e60a63db5 100644 --- a/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-deps/pom.xml +++ b/opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-deps/pom.xml @@ -50,7 +50,7 @@ org.opencb.opencga opencga-storage-hadoop - 2.10.0-SNAPSHOT + 2.11.0-SNAPSHOT ../pom.xml diff --git a/opencga-storage/opencga-storage-hadoop/pom.xml b/opencga-storage/opencga-storage-hadoop/pom.xml index d2c588dc56f..1ea5e5a91d1 100644 --- a/opencga-storage/opencga-storage-hadoop/pom.xml +++ b/opencga-storage/opencga-storage-hadoop/pom.xml @@ -28,7 +28,7 @@ org.opencb.opencga opencga-storage - 2.10.0-SNAPSHOT + 2.11.0-SNAPSHOT ../pom.xml diff --git a/opencga-storage/opencga-storage-server/pom.xml b/opencga-storage/opencga-storage-server/pom.xml index 42703d7ee32..c9a6b5604a3 100644 --- a/opencga-storage/opencga-storage-server/pom.xml +++ b/opencga-storage/opencga-storage-server/pom.xml @@ -22,7 +22,7 @@ org.opencb.opencga opencga-storage - 2.10.0-SNAPSHOT + 2.11.0-SNAPSHOT ../pom.xml diff --git a/opencga-storage/pom.xml b/opencga-storage/pom.xml index 643cebae481..49b680170d0 100644 --- a/opencga-storage/pom.xml +++ b/opencga-storage/pom.xml @@ -22,7 +22,7 @@ org.opencb.opencga opencga - 2.10.0-SNAPSHOT + 2.11.0-SNAPSHOT ../pom.xml diff --git a/opencga-test/pom.xml b/opencga-test/pom.xml index 18c878e910c..caa613c03e2 100644 --- a/opencga-test/pom.xml +++ b/opencga-test/pom.xml @@ -24,7 +24,7 @@ org.opencb.opencga opencga - 2.10.0-SNAPSHOT + 2.11.0-SNAPSHOT ../pom.xml diff --git a/pom.xml b/pom.xml index 8d23566bf5c..c0b9f02fd71 100644 --- a/pom.xml +++ b/pom.xml @@ -22,7 +22,7 @@ org.opencb.opencga opencga - 2.10.0-SNAPSHOT + 2.11.0-SNAPSHOT pom OpenCGA OpenCGA projects implements a big data platform for genomic data analysis @@ -42,12 +42,13 @@ - 2.10.0_dev - 2.10.0_dev - 5.6.0-SNAPSHOT - 2.10.0-SNAPSHOT - 4.10.0-SNAPSHOT - 2.10.0-SNAPSHOT + 2.11.0_dev + 2.11.0_dev + 5.7.0-SNAPSHOT + 2.11.0-SNAPSHOT + 4.11.0-SNAPSHOT + 2.11.0-SNAPSHOT + 0.2.0 2.11.4