Class VerifyPublicationEvidenceCli
- All Implemented Interfaces:
org.springframework.beans.factory.Aware, org.springframework.beans.factory.InitializingBean, org.springframework.context.ApplicationContextAware, org.springframework.context.EnvironmentAware, CLI
V25 asserted a basis for every publication link that existed when it ran, and for a
GEO-accessioned dataset that basis is an inference: the GEO importer is the only writer that
sets a primary without a human in the loop, so a primary on a GEO dataset is taken to be
GEO's !Series_pubmed_id. That is why those 23,066 rows carry IIA — inferred from
imported annotation — and not TAS. This command is what turns the inference into a check.
Why acc.cgi and not a batched esummary
🛑 An agreement with esummary db=gds would not be evidence of anything, and it is the
disagreements it hides that matter. The gds index lags the live GEO record
(ExpressionExperimentBibRefFinder.locatePubMedId(String) documents this, and chose acc.cgi
for the same reason). Follow a re-pointed series through:
GEO moves GSE123 from paper A to paper B Gemma still holds A (imported before the change) esummary still reports A (lagging) => A == A, "verified", stamped TAS -- on the one link that has actually drifted
A drifted link is exactly the shape of a false agreement, so re-checking only the disagreements
would never revisit it. Lag makes false MISMATCHES, which are harmless and self-correcting, and
false MATCHES, which are not. So every series is read from acc.cgi — one request each,
paced, and the run is resumable because at that rate it is measured in hours.
What it will and will not write
- Agreement — the assertion is re-stated with
TASand evidence saying it was checked against GEO on the day it ran. The link itself is not touched; only its basis. - Disagreement — nothing is written. It splits two ways that no automated rule can separate: a curator corrected GEO, or GEO is wrong (GSE227854, where the submitter cross-linked the wrong one of their own two papers). Both land in the change log for a person to read.
- Gemma has no primary and GEO has one — added, under
--fill. This is the case that creates a link rather than describing one. - GEO lists more than one paper — first is the primary, the rest are other-relevant.
parseSeriesPubMedIdshas always read them; nothing could act on them before.
A curator's assertion outranks GEO, so apply() in
PublicationAssociationService silently declines a promotion over one. Silently is not good
enough for a run whose output is a record of what changed, so the held assertion is read first and
a curator-held row is reported as skipped rather than attempted.
- Author:
- claude
-
Nested Class Summary
Nested classes/interfaces inherited from interface CLI
CLI.CommandGroup -
Field Summary
Fields inherited from class ExpressionExperimentManipulatingCLI
auditEventService, auditTrailService, entityLocator, entityUrlBuilderFields inherited from class AbstractAutoSeekingCLI
FORCE_OPTIONFields inherited from class AbstractCLI
ABORTED, FAILURE, FAILURE_FROM_ERROR_OBJECTS, log, SUCCESS -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidprotected voidbuildExperimentOptions(org.apache.commons.cli.Options options) A short memorable name for the command that can be used to locate this class.Obtain a short description for this command explaining what it does.protected voidprocessExperimentOptions(org.apache.commons.cli.CommandLine commandLine) protected voidprocessExpressionExperiment(ubic.gemma.model.expression.experiment.ExpressionExperiment ee) Process anExpressionExperiment.protected voidprocessExpressionExperiments(Collection<ubic.gemma.model.expression.experiment.ExpressionExperiment> ees) Process multipleExpressionExperiment.Methods inherited from class ExpressionExperimentManipulatingCLI
addCellMetadataFileOptions, addDataFileOptions, addDataFileOptions, addDesignFileOptions, addExpressionDataFileOptions, addSingleCellExpressionDataFileOptions, addSingleExperimentAutoOption, addSingleExperimentEnumOption, addSingleExperimentOption, addSingleExperimentOption, buildOptions, doAuthenticatedWork, formatExperiment, getCellMetadataFileOptionValue, getCommandGroup, getDataFileOptionValue, getDataFileOptionValue, getDesignFileOptionValue, getExpressionDataFileOptionValue, getSingleCellExpressionDataFileOptionValue, isAbortOnError, noNeedToRun, postprocessExpressionExperiments, preprocessExpressionExperiments, processAllExpressionExperiments, processOptions, readChangelogEntryFromConsole, refreshExpressionExperimentFromGemmaWeb, refreshExpressionExperimentFromGemmaWebSilently, setAbortOnError, setAllIsLazy, setDefaultToAll, setSingleExperimentMode, setUseReferencesIfPossible, toBatchObjectMethods inherited from class AbstractAutoSeekingCLI
addAutoOption, addAutoOption, addErrorObject, addErrorObject, addErrorObject, addForceOption, addForceOption, addLimitingDateOption, addSuccessObject, addSuccessObject, addWarningObject, addWarningObject, getAutoSeekEventType, getLimitingDate, isAutoSeek, isForce, setForceMethods inherited from class AbstractAuthenticatedCLI
doWork, setAuthenticateAnonymously, setEnvironment, setRequireLoginMethods inherited from class AbstractCLI
abort, addBatchOption, addErrorObject, addErrorObject, addErrorObject, addSuccessObject, addSuccessObject, addThreadsOption, addWarningObject, addWarningObject, allowPositionalArguments, awaitBatchExecutorService, executeCommand, getApplicationContext, getBatchTaskExecutor, getBatchTaskProgressReporter, getCliContext, getCommandAliases, getHelpFooter, getNumThreads, getOptions, getPipelineJobReporter, getUsage, promptConfirmationOrAbort, setAllowPositionalArguments, setApplicationContext, setEstimatedMaxTasks, setReportFrequencyMillis
-
Constructor Details
-
VerifyPublicationEvidenceCli
public VerifyPublicationEvidenceCli()
-
-
Method Details
-
afterPropertiesSet
- Specified by:
afterPropertiesSetin interfaceorg.springframework.beans.factory.InitializingBean- Overrides:
afterPropertiesSetin classAbstractAuthenticatedCLI- Throws:
Exception
-
getCommandName
Description copied from interface:CLIA short memorable name for the command that can be used to locate this class.- Specified by:
getCommandNamein interfaceCLI- Overrides:
getCommandNamein classAbstractCLI- Returns:
- name; if null or blank, this will not be available as a shortcut command.
-
getShortDesc
Description copied from interface:CLIObtain a short description for this command explaining what it does.- Specified by:
getShortDescin interfaceCLI- Overrides:
getShortDescin classAbstractCLI
-
buildExperimentOptions
protected void buildExperimentOptions(org.apache.commons.cli.Options options) - Overrides:
buildExperimentOptionsin classExpressionExperimentManipulatingCLI
-
processExperimentOptions
protected void processExperimentOptions(org.apache.commons.cli.CommandLine commandLine) throws org.apache.commons.cli.ParseException - Overrides:
processExperimentOptionsin classExpressionExperimentManipulatingCLI- Throws:
org.apache.commons.cli.ParseException
-
processExpressionExperiments
protected void processExpressionExperiments(Collection<ubic.gemma.model.expression.experiment.ExpressionExperiment> ees) Description copied from class:ExpressionExperimentManipulatingCLIProcess multipleExpressionExperiment.This only called if more than one experiment was found.
- Overrides:
processExpressionExperimentsin classExpressionExperimentManipulatingCLI
-
processExpressionExperiment
protected void processExpressionExperiment(ubic.gemma.model.expression.experiment.ExpressionExperiment ee) throws Exception Description copied from class:ExpressionExperimentManipulatingCLIProcess anExpressionExperiment.- Overrides:
processExpressionExperimentin classExpressionExperimentManipulatingCLI- Throws:
Exception
-