Class ExpressionExperimentValueObject
- All Implemented Interfaces:
Serializable, Securable, SecureValueObject, Describable, Identifiable, BioAssaySetValueObject
- Direct Known Subclasses:
ExpressionExperimentDetailsValueObject
- See Also:
-
Nested Class Summary
Nested classes/interfaces inherited from class AbstractCuratableValueObject
AbstractCuratableValueObject.LastEventTriple -
Field Summary
FieldsFields inherited from class IdentifiableValueObject
id -
Constructor Summary
ConstructorsModifierConstructorDescriptionRequired when using the class as a spring bean.ExpressionExperimentValueObject(ExpressionExperiment ee, boolean ignoreDesign, boolean ignoreAccession) Creates a new value object out of given Expression Experiment.ExpressionExperimentValueObject(ExpressionExperiment ee, boolean ignoreDesign, boolean ignoreAccession, boolean skipEvents) Variant that skips reading the threelast*Eventassociations offCurationDetailswhenskipEvents=true.Creates a newExpressionExperimentvalue object with additional information about ownership.protected -
Method Summary
Modifier and TypeMethodDescriptionObtain the accession of this set if one exists.Batch effect type.Summary statistics of a batch effect is present.intDeprecated.booleanbooleanWhen the dataset was created in Gemma — loaded, not published.Obtain a human-readable description of the objectgetDoi()DOI of the primary publication, when it is a preprint or otherwise identified by a DOI rather than a PubMed ID.What was extracted from the dataset's samples and assayed, as the distinctextractedMoleculevalues with a count of the samples carrying each.getGeeq()booleanIndicate if the object is public.booleanIndicate if the object is shared.booleanLombok would name theseisSingleCell/setSingleCell; the wire name and the convention these flags follow in this class isgetIsX/setIsX(seegetIsPublic()).How the dataset's libraries were selected, as the distinctlibrarySelectionvalues with a count of the samples carrying each.What kind of libraries the dataset's samples were made from, as the distinctlibraryStrategyvalues with a count of the samples carrying each.getName()Obtain the name of the object.Obtain the number of assays in this set.Number of cell IDs in the preferred single-cell dimension, ornullwhen there is none.Total number of cells, ornullwhen this is not a single-cell experiment or the count has not been computed.The platforms this dataset's assays were run on BEFORE a platform switch, when one happened.The other parts of the study this dataset was split off from, empty when it was not split.The platforms this dataset's assays were run on, as accession + full name.PubMed ID of the primary publication, when it is indexed by PubMed.getTaxon()Deprecated.usegetTaxonObject()insteadFIXME: this should be named simply "taxon", but that field is already taken for Gemma Web, seegetTaxon().booleanIndicate if the current user can modify this object.booleanIndicate if the current user owns the object.static voidApply ACL-derived flags (isPublic, userCanWrite, isShared, userOwned) onto an existing VO.voidsetAccession(String accession) voidsetArrayDesignCount(Long arrayDesignCount) voidsetBatchConfound(String batchConfound) voidsetBatchEffect(String batchEffect) Batch effect type.voidsetBatchEffectStatistics(String batchEffectStatistics) Summary statistics of a batch effect is present.voidsetBioMaterialCount(Integer bioMaterialCount) voidsetCharacteristics(Set<CharacteristicValueObject> characteristics) voidsetDateCreated(Date dateCreated) When the dataset was created in Gemma — loaded, not published.voidsetDescription(String description) voidDOI of the primary publication, when it is a preprint or otherwise identified by a DOI rather than a PubMed ID.voidsetExperimentalDesign(Long experimentalDesign) voidsetExternalDatabase(String externalDatabase) voidsetExternalDatabaseUri(String externalDatabaseUri) voidsetExternalLabel(String externalLabel) voidsetExternalUri(String externalUri) voidsetExtractedMolecules(List<BioAssayFieldCountValueObject> extractedMolecules) What was extracted from the dataset's samples and assayed, as the distinctextractedMoleculevalues with a count of the samples carrying each.voidsetGeeq(GeeqValueObject geeq) voidsetIsPublic(boolean b) voidsetIsShared(boolean b) voidsetIsSingleCell(boolean isSingleCell) voidsetLibrarySelections(List<BioAssayFieldCountValueObject> librarySelections) How the dataset's libraries were selected, as the distinctlibrarySelectionvalues with a count of the samples carrying each.voidsetLibraryStrategies(List<BioAssayFieldCountValueObject> libraryStrategies) What kind of libraries the dataset's samples were made from, as the distinctlibraryStrategyvalues with a count of the samples carrying each.voidsetMetadata(String metadata) voidsetMinPvalue(Double minPvalue) voidvoidsetNumberOfBioAssays(Integer numberOfBioAssays) voidsetNumberOfCellIds(Integer numberOfCellIds) Number of cell IDs in the preferred single-cell dimension, ornullwhen there is none.voidsetNumberOfCells(Integer numberOfCells) Total number of cells, ornullwhen this is not a single-cell experiment or the count has not been computed.voidsetOriginalPlatforms(List<ArrayDesignReferenceValueObject> originalPlatforms) The platforms this dataset's assays were run on BEFORE a platform switch, when one happened.voidsetOtherParts(List<ExpressionExperimentReferenceValueObject> otherParts) The other parts of the study this dataset was split off from, empty when it was not split.voidsetPlatforms(List<ArrayDesignReferenceValueObject> platforms) The platforms this dataset's assays were run on, as accession + full name.voidsetProcessedExpressionVectorCount(Integer processedExpressionVectorCount) voidsetPubmedId(String pubmedId) PubMed ID of the primary publication, when it is indexed by PubMed.voidsetShortName(String shortName) voidvoidsetSuitableForDEA(Boolean suitableForDEA) voidsetTaxonObject(TaxonValueObject taxonObject) FIXME: this should be named simply "taxon", but that field is already taken for Gemma Web, seegetTaxon().voidsetTechnologyType(String technologyType) voidsetUserCanWrite(boolean userCanWrite) voidsetUserOwned(boolean isUserOwned) toString()Methods inherited from class AbstractCuratableValueObject
applyLastEventTriple, getCurationNote, getLastNeedsAttentionEvent, getLastNoteUpdateEvent, getLastTroubledEvent, getLastUpdated, getNeedsAttention, getTroubled, getTroubleDetails, getTroubleDetails, setCurationNote, setLastNeedsAttentionEvent, setLastNoteUpdateEvent, setLastTroubledEvent, setLastUpdated, setNeedsAttention, setTroubledMethods inherited from interface Identifiable
getId
-
Field Details
-
numberOfBioAssays
-
description
-
name
-
-
Constructor Details
-
ExpressionExperimentValueObject
public ExpressionExperimentValueObject()Required when using the class as a spring bean. -
ExpressionExperimentValueObject
-
ExpressionExperimentValueObject
public ExpressionExperimentValueObject(ExpressionExperiment ee, boolean ignoreDesign, boolean ignoreAccession) Creates a new value object out of given Expression Experiment.- Parameters:
ee- the experiment to convert into a value object.ignoreDesign- exclude the experimental design from serializationignoreAccession- exclude accession from serialization
-
ExpressionExperimentValueObject
public ExpressionExperimentValueObject(ExpressionExperiment ee, boolean ignoreDesign, boolean ignoreAccession, boolean skipEvents) Variant that skips reading the threelast*Eventassociations offCurationDetailswhenskipEvents=true. Use this from a transformer that batch-hydrates the events post-fetch and callsAbstractCuratableValueObject.applyLastEventTriple(ubic.gemma.model.common.auditAndSecurity.curation.AbstractCuratableValueObject.LastEventTriple)to fill them in once a per-page prefetch is available. -
ExpressionExperimentValueObject
-
ExpressionExperimentValueObject
Creates a newExpressionExperimentvalue object with additional information about ownership. -
ExpressionExperimentValueObject
-
ExpressionExperimentValueObject
-
-
Method Details
-
populateAclInfo
public static void populateAclInfo(ExpressionExperimentValueObject vo, @Nullable AclObjectIdentity aoi, @Nullable AclSid sid) Apply ACL-derived flags (isPublic, userCanWrite, isShared, userOwned) onto an existing VO.Extracted from the
(ExpressionExperiment, AclObjectIdentity, AclSid)constructor so that the EXISTS-rewritten filtering query path can post-fetch ACL info and inject it onto a VO that was constructed without theaoi/sidpair available at projection time. Public so DAOs in other packages (e.g.ExpressionExperimentDaoImpl) can reach it. -
getBioAssayCount
Deprecated.usegetNumberOfBioAssays()instead.Obtain the number ofBioAssayin this experiment. -
getIsSingleCell
public boolean getIsSingleCell()Lombok would name theseisSingleCell/setSingleCell; the wire name and the convention these flags follow in this class isgetIsX/setIsX(seegetIsPublic()). -
setIsSingleCell
public void setIsSingleCell(boolean isSingleCell) -
getIsPublic
public boolean getIsPublic()Description copied from interface:SecureValueObjectIndicate if the object is public.- Specified by:
getIsPublicin interfaceSecureValueObject
-
getTaxon
-
getTaxonId
Deprecated.usegetTaxonObject()instead -
getSecurableClass
- Specified by:
getSecurableClassin interfaceSecureValueObject- Returns:
- the securable Class of the represented entity.
-
getUserCanWrite
public boolean getUserCanWrite()Description copied from interface:SecureValueObjectIndicate if the current user can modify this object.- Specified by:
getUserCanWritein interfaceSecureValueObject
-
getUserOwned
public boolean getUserOwned()Description copied from interface:SecureValueObjectIndicate if the current user owns the object.- Specified by:
getUserOwnedin interfaceSecureValueObject
-
setIsPublic
public void setIsPublic(boolean b) - Specified by:
setIsPublicin interfaceSecureValueObject
-
setUserCanWrite
public void setUserCanWrite(boolean userCanWrite) - Specified by:
setUserCanWritein interfaceSecureValueObject
-
setUserOwned
public void setUserOwned(boolean isUserOwned) - Specified by:
setUserOwnedin interfaceSecureValueObject
-
getCurrentUserHasWritePermission
public boolean getCurrentUserHasWritePermission() -
getCurrentUserIsOwner
public boolean getCurrentUserIsOwner() -
toString
- Overrides:
toStringin classIdentifiableValueObject<ExpressionExperiment>
-
getNumberOfBioAssays
Description copied from interface:BioAssaySetValueObjectObtain the number of assays in this set.- Specified by:
getNumberOfBioAssaysin interfaceBioAssaySetValueObject
-
getDescription
Description copied from interface:DescribableObtain a human-readable description of the object- Specified by:
getDescriptionin interfaceDescribable
-
getName
Description copied from interface:DescribableObtain the name of the object.It may be human-readable.
It is case-insensitive and usually unique within a certain context (e.g. in a collection).
It is non-null by default, but implementation may override this with a
Nullableannotation. If null, it should not be treated as equal to otherDescribableobjects (i.e. there can be multiple null-named describable within a given set).- Specified by:
getNamein interfaceDescribable
-
getAccession
Description copied from interface:BioAssaySetValueObjectObtain the accession of this set if one exists.- Specified by:
getAccessionin interfaceBioAssaySetValueObject- See Also:
-
getExternalUri
- See Also:
-
getExternalLabel
- See Also:
-
getExternalDatabase
- See Also:
-
getExternalDatabaseUri
- See Also:
-
getPubmedId
PubMed ID of the primary publication, when it is indexed by PubMed. Mutually exclusive withdoi: the primary publication carries a single accession, so a PubMed-indexed paper populates this and a preprint (bioRxiv/arXiv/CrossRef DOI) populatesdoi. -
getDoi
DOI of the primary publication, when it is a preprint or otherwise identified by a DOI rather than a PubMed ID. SeepubmedId. -
getArrayDesignCount
-
getPlatforms
The platforms this dataset's assays were run on, as accession + full name.A list because a dataset may use more than one;
arrayDesignCountis the size of this list and is kept because clients read it. Populated on every filtered read out of the same query that produces the count — the join to the platform was already being paid for. -
getOriginalPlatforms
The platforms this dataset's assays were run on BEFORE a platform switch, when one happened.Empty for the great majority of datasets. A no-op switch — an original platform that is also a platform in use — is left out, so a non-empty list here means the dataset really was moved.
-
getLibraryStrategies
What kind of libraries the dataset's samples were made from, as the distinctlibraryStrategyvalues with a count of the samples carrying each.Here because it is the dataset's answer to "what kind of experiment is this", and
technologyTypeis not: Gemma maps sequencing data onto generic gene-list platforms, so GSE270825 readsGENELISTwith 24SSRNA_SEQsamples. The curatedassaytag that clients used instead is being retired.A list rather than a single value because a dataset is not obliged to be uniform, and 18 of the 23,544 on prod are not (measured, uib, 2026-09-16) — but it is a one-element list for the other 99.92%, which is why it belongs on the dataset instead of being re-derived from the sample list by every client. Reading it off
/datasets/{id}/samplescost the whole assay list: 652 KiB gzipped and 2.3 s for GSE2109's 2,158 samples, for one line of text on a page.- See Also:
-
getLibrarySelections
How the dataset's libraries were selected, as the distinctlibrarySelectionvalues with a count of the samples carrying each.🛑 Read beside
extractedMolecules, not instead of it — seeBioAssay.getLibrarySelection(): total RNA with a polyA selection step is common, and the molecule alone does not say so. On a microarray dataset every sample is null here, because the technology has no selection step. -
getExtractedMolecules
What was extracted from the dataset's samples and assayed, as the distinctextractedMoleculevalues with a count of the samples carrying each. -
getDateCreated
When the dataset was created in Gemma — loaded, not published.Read from the
Caudit event, which is the only record of it: there is no creation column on the dataset (aCURATION_DETAILS.CREATEDbackfill was proposed and deferred, 2026-08-21). Measured universal — 200 of 200 sampled datasets carry the event — but null is still possible and means the event is missing, never "created just now".🛑 Not filterable or sortable.
AbstractCuratableDaounregistersauditTrail.*from the dataset filter surface, so this is a projection for display. Filtering on it is what the deferred migration was for. -
getBatchConfound
-
getBatchEffect
Batch effect type. SeeBatchEffectTypeenum for possible values. -
getBatchEffectStatistics
Summary statistics of a batch effect is present. -
getBioMaterialCount
-
getExperimentalDesign
-
getGeeq
-
getMetadata
-
getProcessedExpressionVectorCount
-
getShortName
-
getSource
-
getSuitableForDEA
-
getTaxonObject
FIXME: this should be named simply "taxon", but that field is already taken for Gemma Web, seegetTaxon(). -
getTechnologyType
-
getNumberOfCells
Total number of cells, ornullwhen this is not a single-cell experiment or the count has not been computed. Denormalized on the experiment itself, so it costs nothing to serve.🛑 Not a substitute for
isSingleCell: 63 of the 546 single-cell datasets on prod have no count. -
getNumberOfCellIds
Number of cell IDs in the preferred single-cell dimension, ornullwhen there is none. -
getOtherParts
The other parts of the study this dataset was split off from, empty when it was not split.Gemma splits an experiment by a factor — usually organism part for single-cell data — and names each part
Split part N of: … [organism part = …]. That title tells a reader siblings exist and gives them no way to reach one: 52 of 100 sampled single-cell datasets are split parts over 32 parent studies, and neither the curation UI nor the browser could follow the link, because the field lived on a VO only/experiment-sets/{id}/datasetsserves (uib, 2026-09-03).References rather than whole VOs: a sibling is rendered as a name and a link, and the previous full-VO form cost a
loadValueObjectsByIdsper split experiment. -
getCharacteristics
- Specified by:
getCharacteristicsin interfaceBioAssaySetValueObject
-
getMinPvalue
-
setNumberOfBioAssays
-
setDescription
-
setName
-
setAccession
- See Also:
-
setExternalUri
- See Also:
-
setExternalLabel
- See Also:
-
setExternalDatabase
- See Also:
-
setExternalDatabaseUri
- See Also:
-
setPubmedId
PubMed ID of the primary publication, when it is indexed by PubMed. Mutually exclusive withdoi: the primary publication carries a single accession, so a PubMed-indexed paper populates this and a preprint (bioRxiv/arXiv/CrossRef DOI) populatesdoi. -
setDoi
DOI of the primary publication, when it is a preprint or otherwise identified by a DOI rather than a PubMed ID. SeepubmedId. -
setArrayDesignCount
-
setPlatforms
The platforms this dataset's assays were run on, as accession + full name.A list because a dataset may use more than one;
arrayDesignCountis the size of this list and is kept because clients read it. Populated on every filtered read out of the same query that produces the count — the join to the platform was already being paid for. -
setOriginalPlatforms
The platforms this dataset's assays were run on BEFORE a platform switch, when one happened.Empty for the great majority of datasets. A no-op switch — an original platform that is also a platform in use — is left out, so a non-empty list here means the dataset really was moved.
-
setLibraryStrategies
What kind of libraries the dataset's samples were made from, as the distinctlibraryStrategyvalues with a count of the samples carrying each.Here because it is the dataset's answer to "what kind of experiment is this", and
technologyTypeis not: Gemma maps sequencing data onto generic gene-list platforms, so GSE270825 readsGENELISTwith 24SSRNA_SEQsamples. The curatedassaytag that clients used instead is being retired.A list rather than a single value because a dataset is not obliged to be uniform, and 18 of the 23,544 on prod are not (measured, uib, 2026-09-16) — but it is a one-element list for the other 99.92%, which is why it belongs on the dataset instead of being re-derived from the sample list by every client. Reading it off
/datasets/{id}/samplescost the whole assay list: 652 KiB gzipped and 2.3 s for GSE2109's 2,158 samples, for one line of text on a page.- See Also:
-
setLibrarySelections
How the dataset's libraries were selected, as the distinctlibrarySelectionvalues with a count of the samples carrying each.🛑 Read beside
extractedMolecules, not instead of it — seeBioAssay.getLibrarySelection(): total RNA with a polyA selection step is common, and the molecule alone does not say so. On a microarray dataset every sample is null here, because the technology has no selection step. -
setExtractedMolecules
What was extracted from the dataset's samples and assayed, as the distinctextractedMoleculevalues with a count of the samples carrying each. -
setDateCreated
When the dataset was created in Gemma — loaded, not published.Read from the
Caudit event, which is the only record of it: there is no creation column on the dataset (aCURATION_DETAILS.CREATEDbackfill was proposed and deferred, 2026-08-21). Measured universal — 200 of 200 sampled datasets carry the event — but null is still possible and means the event is missing, never "created just now".🛑 Not filterable or sortable.
AbstractCuratableDaounregistersauditTrail.*from the dataset filter surface, so this is a projection for display. Filtering on it is what the deferred migration was for. -
setBatchConfound
-
setBatchEffect
Batch effect type. SeeBatchEffectTypeenum for possible values. -
setBatchEffectStatistics
Summary statistics of a batch effect is present. -
setBioMaterialCount
-
setExperimentalDesign
-
setGeeq
-
setMetadata
-
setProcessedExpressionVectorCount
-
setShortName
-
setSource
-
setSuitableForDEA
-
setTaxonObject
FIXME: this should be named simply "taxon", but that field is already taken for Gemma Web, seegetTaxon(). -
setTechnologyType
-
setNumberOfCells
Total number of cells, ornullwhen this is not a single-cell experiment or the count has not been computed. Denormalized on the experiment itself, so it costs nothing to serve.🛑 Not a substitute for
isSingleCell: 63 of the 546 single-cell datasets on prod have no count. -
setNumberOfCellIds
Number of cell IDs in the preferred single-cell dimension, ornullwhen there is none. -
setOtherParts
The other parts of the study this dataset was split off from, empty when it was not split.Gemma splits an experiment by a factor — usually organism part for single-cell data — and names each part
Split part N of: … [organism part = …]. That title tells a reader siblings exist and gives them no way to reach one: 52 of 100 sampled single-cell datasets are split parts over 32 parent studies, and neither the curation UI nor the browser could follow the link, because the field lived on a VO only/experiment-sets/{id}/datasetsserves (uib, 2026-09-03).References rather than whole VOs: a sibling is rendered as a name and a link, and the previous full-VO form cost a
loadValueObjectsByIdsper split experiment. -
setCharacteristics
-
setMinPvalue
-
getNumberOfBioAssays()instead.