Skip to content
Merged
Show file tree
Hide file tree
Changes from 43 commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
90eed36
ODM-12847: cell analysis: diff expression
m-smazhevsky Oct 24, 2025
ab524ef
ODM-12847: response model fix
m-smazhevsky Oct 24, 2025
fbe6d07
Merge branch 'develop' into feature/ODM-12847_diff-expression
m-smazhevsky Oct 29, 2025
745abb6
Merge branch 'develop' into feature/ODM-12847_diff-expression
m-smazhevsky Oct 30, 2025
b28773c
Merge branch 'develop' into feature/ODM-12847_diff-expression
m-smazhevsky Nov 1, 2025
5065e71
Merge remote-tracking branch 'origin/develop' into feature/ODM-12847_…
m-smazhevsky Nov 3, 2025
658d76a
ODM-12847: diff expression
m-smazhevsky Nov 3, 2025
2284fdd
ODM-12847: bugfix
m-smazhevsky Nov 4, 2025
1267fd4
ODM-12847: bugfix
m-smazhevsky Nov 4, 2025
10e0d77
ODM-12847: allowing NaN and Infs in sdk?
m-smazhevsky Nov 4, 2025
e7eaf5e
ODM-12847: test python gen
m-smazhevsky Nov 5, 2025
7233d7e
ODM-12847: test python gen2
m-smazhevsky Nov 5, 2025
bae14d0
ODM-12847: one more version...
m-smazhevsky Nov 5, 2025
28aba9a
ODM-12847: switching back to number
m-smazhevsky Nov 5, 2025
85168b6
ODM-12846: Cell analytics - Gene Summary - added endpoint skeleton fo…
marijan-mihaljev Nov 5, 2025
a720ee0
ODM-12846: Cell analytics - Gene Summary - added endpoint skeleton fo…
marijan-mihaljev Nov 5, 2025
76adcb2
ODM-12847: shorten names (to shorten "DifferentialExpressionResultRes…
m-smazhevsky Nov 5, 2025
0ec015d
ODM-12847: Mann–Whitney U test
m-smazhevsky Nov 5, 2025
32ecefe
ODM-12846: Cell analytics - Gene Summary - added GeneSummaryRequest f…
marijan-mihaljev Nov 5, 2025
3d25f6d
ODM-12846: Cell analytics - Gene Summary - added GeneSummaryResponse …
marijan-mihaljev Nov 5, 2025
ace5a54
ODM-12846: Cell analytics - Gene Summary - added GeneSummaryRequest a…
marijan-mihaljev Nov 5, 2025
9cbacf4
ODM-12846: Cell analytics - Gene Summary - added GeneSummaryRequest a…
marijan-mihaljev Nov 6, 2025
1b204a1
ODM-12846: Cell analytics - Gene Summary - removed trailing whitespace
marijan-mihaljev Nov 6, 2025
9cbca74
ODM-12846: Cell analytics - Gene Summary - renamed request property
marijan-mihaljev Nov 6, 2025
9654dee
ODM-12846: Cell analytics - Gene Summary - added summary for Curator …
marijan-mihaljev Nov 6, 2025
dfc96ec
Merge branch 'feature/ODM-12847_diff-expression' into feature/ODM-128…
marijan-mihaljev Nov 6, 2025
6fdd84b
Merge branch 'develop' into feature/ODM-12847_diff-expression
m-smazhevsky Nov 6, 2025
84f2551
ODM-12847: code review comment
m-smazhevsky Nov 6, 2025
72adc74
Merge branch 'feature/ODM-12847_diff-expression' into feature/ODM-128…
marijan-mihaljev Nov 6, 2025
fe37afd
ODM-12846: Cell analytics - Gene Summary - fixed user's endpoint
marijan-mihaljev Nov 7, 2025
431bf0a
ODM-12846: Cell analytics - Gene Summary - fixed user's endpoint
marijan-mihaljev Nov 7, 2025
617cab5
Merge branch 'develop' into feature/ODM-12847_diff-expression
eeliane Nov 10, 2025
54bf9e0
ODM-12847: minor
m-smazhevsky Nov 10, 2025
dc94a51
Merge branch 'feature/ODM-12847_diff-expression' into feature/ODM-128…
eeliane Nov 10, 2025
46fa2d7
Merge branch 'develop' into feature/ODM-12847_diff-expression
eeliane Nov 11, 2025
ea682e2
Merge branch 'feature/ODM-12847_diff-expression' into feature/ODM-128…
eeliane Nov 11, 2025
3d79e7b
ODM-12846: Cell analytics - Gene Summary - changed analysis to analytics
marijan-mihaljev Nov 12, 2025
be1f0cc
ODM-12846: Cell analytics - Gene Summary - renamed gene summary respo…
marijan-mihaljev Nov 12, 2025
012efda
!!ODM-12847: duplicating params description
m-smazhevsky Nov 12, 2025
7ebcc7f
ODM-12846: Cell analytics - Gene Summary - renamed gene summary respo…
marijan-mihaljev Nov 12, 2025
9aaa96a
Merge branch 'feature/ODM-12847_diff-expression' into feature/ODM-128…
marijan-mihaljev Nov 12, 2025
5787d70
ODM-12846: Cell analytics - Gene Summary - update summary and descrip…
marijan-mihaljev Nov 12, 2025
9000cff
ODM-12846: Cell analytics - Gene Summary - Refactor emphasizing on re…
marijan-mihaljev Nov 12, 2025
6e0aae3
Merge branch 'develop' into feature/ODM-12846-gene-summary-analytics
marijan-mihaljev Nov 13, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,9 @@ tasks {
// Workaround for https://github.com/OpenAPITools/openapi-generator/issues/21619
// The second version asks for license, which we can't provide due to unavailability of
// "licenseName" and "licenseUrl" fields in the specification for python generator.
"poetry1" to "true"
"poetry1" to "true",
// All float fields accept "NaN", "Infinity", "-Infinity" values
"mapNumberTo" to "float"
// "disallowAdditionalPropertiesIfNotPresent" to "true"
)
}
Expand Down
114 changes: 114 additions & 0 deletions openapi/v1/integrationCurator.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7021,6 +7021,112 @@ paths:
summary: Stream data from a given VCF file
tags:
- Omics queries as Curator
/api/v1/as-curator/omics/cells/analytics/differential-expression:
post:
operationId: differentialExpressionAsCurator
summary: "[BETA] Perform differential gene expression analytics between case and control cell groups"
tags:
- "[BETA] Analytics omics queries as Curator"
# The descriptions below are also duplicated in the schema description, make sure to keep them in sync.
description: |+
This endpoint computes differential gene expression between two specified cell groups (case vs control) within single-cell data.

Consult `/omics` search endpoints to find description of parameters within the cell groups.
The response includes per-gene metrics that characterize expression differences between the two groups:
- `Gene name` - gene identifier.
- `Case cell count` - number of cells expressing the gene in the case group.
- `Control cell count` - number of cells expressing the gene in the control group.
- `Average expression (case)` - mean expression level across case cells.
- `Average expression (control)` - mean expression level across control cells.
- `Expression difference` - numerical difference between average expressions.
- `Fold change` - ratio of average expressions between case and control groups.
- `U statistic` - Mann–Whitney U test statistic that measures the difference between Case and Control groups.
- `p-value` - the probability of observing results as extreme as (or more extreme than) those obtained, assuming that the null hypothesis is true.
Results are sorted by absolute value of fold change in descending order, allowing easy identification of the most differentially expressed genes.

Request and response parameters are subject to change as this feature is in BETA.
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/DERequest"
required: true
responses:
"200":
content:
application/json:
schema:
$ref: "#/components/schemas/DEResponse"
description: Differential expression result
"400":
content: { }
description: Entities cannot be retrieved.
"401":
content: { }
description: |-
User is not authenticated. Please supply a valid Access Token in the `Authorization` HTTP header (e.g. Authorization: bearer [token])
or Genestack API token in the `Genestack-API-Token` header (this token may be obtained from the Genestack UI _Profile_ page).
"500":
content: { }
description: "An internal server error occurred. This indicates an unexpected\
\ failure in the Genestack system, please file a bug report to support@genestack.com,\
\ including the error details."
security:
- Access-token: [ ]
- Genestack-API-Token: [ ]
/api/v1/as-curator/omics/cells/analytics/gene-summary:
post:
operationId: geneSummaryAsCurator
summary: "[BETA] Compute and retrieve descriptive statistics and visual summaries for single-cell data."
tags:
- "[BETA] Analytics omics queries as Curator"
description: |+
This endpoint provides descriptive statistical metrics for gene expression across single-cell datasets.
It aggregates and summarizes expression data for each gene to help assess variability, distribution,
and intensity of expression within the population of cells.

The computed metrics include:
- `Gene name` - gene identifier.
- `Cell count` - number of cells with measurable expression for each gene.
- `Mean expression value`
- `Median expression value`
- `Quantiles` - configurable expression percentiles.
- `Histogram (density)` - binned distribution of expression levels for visualization.
- `Standard deviation` - dispersion of expression values.
- `Minimum and maximum values` - range of expression across cells.

Results are sorted by gene name.
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/GSRequest"
responses:
"200":
description: Gene summary result
content:
application/json:
schema:
$ref: "#/components/schemas/GSResponse"
"400":
content: { }
description: Invalid data in the request. See the error message for details.
"401":
content: { }
description: |+
User is not authenticated. Please supply a valid Access Token in the `Authorization`
HTTP header (e.g. Authorization: bearer [token]) or Genestack API token in the `Genestack-API-Token`
header (this token may be obtained from the Genestack UI _Profile_ page).
"500":
content: { }
description: |+
An internal server error occurred. This indicates an unexpected
failure in the Genestack system, please file a bug report to support@genestack.com,
including the error details."
security:
- Access-token: [ ]
- Genestack-API-Token: [ ]
/api/v1/as-curator/integration/studies/{id}/tasks/publish-versions:
post:
description: This endpoint publishes information from staging and creates new
Expand Down Expand Up @@ -7372,6 +7478,14 @@ components:
$ref: "./schemas/integration/FilterOption.yaml"
AFile:
$ref: "./schemas/afile/AFile.yaml"
DERequest:
$ref: "./schemas/cell/DERequest.yaml"
DEResponse:
$ref: "./schemas/cell/DEResponse.yaml"
GSRequest:
$ref: "./schemas/cell/GSRequest.yaml"
GSResponse:
$ref: "./schemas/cell/GSResponse.yaml"
securitySchemes:
Access-token:
in: header
Expand Down
114 changes: 114 additions & 0 deletions openapi/v1/integrationUser.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5472,6 +5472,112 @@ paths:
summary: Stream data from a given VCF file
tags:
- Omics queries as User
/api/v1/as-user/omics/cells/analytics/differential-expression:
post:
operationId: differentialExpressionAsUser
summary: "[BETA] Perform differential gene expression analytics between case and control cell groups"
tags:
- "[BETA] Analytics omics queries as User"
# The descriptions below are also duplicated in the schema description, make sure to keep them in sync.
description: |+
This endpoint computes differential gene expression between two specified cell groups (case vs control) within single-cell data.

Consult `/omics` search endpoints to find description of parameters within the cell groups.
The response includes per-gene metrics that characterize expression differences between the two groups:
- `Gene name` - gene identifier.
- `Case cell count` - number of cells expressing the gene in the case group.
- `Control cell count` - number of cells expressing the gene in the control group.
- `Average expression (case)` - mean expression level across case cells.
- `Average expression (control)` - mean expression level across control cells.
- `Expression difference` - numerical difference between average expressions.
- `Fold change` - ratio of average expressions between case and control groups.
- `U statistic` - Mann–Whitney U test statistic that measures the difference between Case and Control groups.
- `p-value` - the probability of observing results as extreme as (or more extreme than) those obtained, assuming that the null hypothesis is true.
Results are sorted by absolute value of fold change in descending order, allowing easy identification of the most differentially expressed genes.

Request and response parameters are subject to change as this feature is in BETA.
requestBody:
content:
application/json:
schema:
$ref: "#/components/schemas/DERequest"
required: true
responses:
"200":
content:
application/json:
schema:
$ref: "#/components/schemas/DEResponse"
description: Differential expression result
"400":
content: { }
description: Entities cannot be retrieved.
"401":
content: { }
description: |-
User is not authenticated. Please supply a valid Access Token in the `Authorization` HTTP header (e.g. Authorization: bearer [token])
or Genestack API token in the `Genestack-API-Token` header (this token may be obtained from the Genestack UI _Profile_ page).
"500":
content: { }
description: "An internal server error occurred. This indicates an unexpected\
\ failure in the Genestack system, please file a bug report to support@genestack.com,\
\ including the error details."
security:
- Access-token: [ ]
- Genestack-API-Token: [ ]
/api/v1/as-user/omics/cells/analytics/gene-summary:
post:
operationId: geneSummaryAsUser
summary: "[BETA] Compute and retrieve descriptive statistics and visual summaries for single-cell data."
tags:
- "[BETA] Analytics omics queries as User"
description: |+
This endpoint provides descriptive statistical metrics for gene expression across single-cell datasets.
It aggregates and summarizes expression data for each gene to help assess variability, distribution,
and intensity of expression within the population of cells.

The computed metrics include:
- `Gene name` - gene identifier.
- `Cell count` - number of cells with measurable expression for each gene.
- `Mean expression value`
- `Median expression value`
- `Quantiles` - configurable expression percentiles.
- `Histogram (density)` - binned distribution of expression levels for visualization.
- `Standard deviation` - dispersion of expression values.
- `Minimum and maximum values` - range of expression across cells.

Results are sorted by gene name.
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/GSRequest"
responses:
"200":
description: Gene summary result
content:
application/json:
schema:
$ref: "#/components/schemas/GSResponse"
"400":
content: { }
description: Invalid data in the request. See the error message for details.
"401":
content: { }
description: |+
User is not authenticated. Please supply a valid Access Token in the `Authorization`
HTTP header (e.g. Authorization: bearer [token]) or Genestack API token in the `Genestack-API-Token`
header (this token may be obtained from the Genestack UI _Profile_ page).
"500":
content: { }
description: |+
An internal server error occurred. This indicates an unexpected
failure in the Genestack system, please file a bug report to support@genestack.com,
including the error details."
security:
- Access-token: [ ]
- Genestack-API-Token: [ ]
/api/v1/as-user/integration/link/files/by/study/{id}:
get:
operationId: getFilesByStudyAsUser
Expand Down Expand Up @@ -5591,6 +5697,14 @@ components:
$ref: "./schemas/integration/FilterOption.yaml"
AFile:
$ref: "./schemas/afile/AFile.yaml"
DERequest:
$ref: "./schemas/cell/DERequest.yaml"
DEResponse:
$ref: "./schemas/cell/DEResponse.yaml"
GSRequest:
$ref: "./schemas/cell/GSRequest.yaml"
GSResponse:
$ref: "./schemas/cell/GSResponse.yaml"
securitySchemes:
Access-token:
in: header
Expand Down
57 changes: 57 additions & 0 deletions openapi/v1/schemas/cell/DERequest.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
type: object
properties:
caseGroup:
$ref: '#/components/schemas/CellGroupRequest'
controlGroup:
$ref: '#/components/schemas/CellGroupRequest'
exQuery:
type: string
example: 'feature=ENSG00000230368,ENSG00000188976'
limit:
type: integer
format: int32
description: This parameter determines the number of results to retrieve per page, with the default set at 2000.
example: 2000
offset:
type: integer
format: int32
description: This parameter allows skipping a specified number of results, with the default set at 0.
example: 0
required:
- caseGroup
- controlGroup
components:
schemas:
CellGroupRequest:
type: object
properties:
studyFilter:
type: string
example: '"Study Source"=ArrayExpress'
studyQuery:
type: string
example: 'RNA-Seq of human dendritic cells'
sampleFilter:
type: string
example: '"Species or strain"="Homo sapiens"'
sampleQuery:
type: string
example: 'Clozapine'
libraryFilter:
type: string
example: '"Library Type"=RNA-Seq-1'
libraryQuery:
type: string
example: 'illumina HiSeq500'
preparationFilter:
type: string
example: 'Digestion=Trypsin'
preparationQuery:
type: string
example: 'reversed-phase liquid chromatography'
cellQuery:
type: string
example: 'cellType=Macrophage,Monocyte'
searchSpecificTerms:
type: boolean
example: false
Loading