From a97cd092fc481f558b26e3c33d856c8fdb6ad84e Mon Sep 17 00:00:00 2001 From: Isaac Hill <71404865+isaachilly@users.noreply.github.com> Date: Thu, 29 Jan 2026 12:30:29 +0100 Subject: [PATCH 1/4] [O2B-1523] Remove GAQ summary from overiew Eliminated GAQ summary fetching and display from RunsPerDataPass and adjusted tests. --- .../RunsPerDataPassOverviewModel.js | 21 ------------------- .../RunsPerDataPassOverviewPage.js | 13 +++--------- .../runs/runsPerDataPass.overview.test.js | 19 ----------------- 3 files changed, 3 insertions(+), 50 deletions(-) diff --git a/lib/public/views/Runs/RunPerDataPass/RunsPerDataPassOverviewModel.js b/lib/public/views/Runs/RunPerDataPass/RunsPerDataPassOverviewModel.js index c8a48b9228..863840d869 100644 --- a/lib/public/views/Runs/RunPerDataPass/RunsPerDataPassOverviewModel.js +++ b/lib/public/views/Runs/RunPerDataPass/RunsPerDataPassOverviewModel.js @@ -55,9 +55,6 @@ export class RunsPerDataPassOverviewModel extends FixedPdpBeamTypeRunsOverviewMo this.registerDetectorsForQcFlagsDataExport(this._detectors$); this.registerObervablesQcSummaryDependesOn([this._detectors$]); - this._gaqSummary$ = new ObservableData(RemoteData.notAsked()); - this._gaqSummary$.bubbleTo(this); - this._markAsSkimmableRequestResult$ = new ObservableData(RemoteData.notAsked()); this._markAsSkimmableRequestResult$.bubbleTo(this); @@ -119,7 +116,6 @@ export class RunsPerDataPassOverviewModel extends FixedPdpBeamTypeRunsOverviewMo return; } - this._fetchGaqSummary(); await this._fetchDataPass().then(() => this._dataPass$.getCurrent().match({ Success: ({ skimmingStage, pdpBeamTypes }) => { @@ -325,23 +321,6 @@ export class RunsPerDataPassOverviewModel extends FixedPdpBeamTypeRunsOverviewMo } } - /** - * Fetch GAQ summary for given data pass - * @return {Promise} resolves once data are fetched - */ - async _fetchGaqSummary() { - this._gaqSummary$.setCurrent(RemoteData.loading()); - try { - const { data: gaqSummary } = await getRemoteData(buildUrl('/api/qcFlags/summary/gaq', { - dataPassId: this._dataPassId, - mcReproducibleAsNotBad: this._mcReproducibleAsNotBad, - })); - this._gaqSummary$.setCurrent(RemoteData.success(gaqSummary)); - } catch (error) { - this._gaqSummary$.setCurrent(RemoteData.failure(error)); - } - } - /** * Fetch skimmable runs for given data pass * @return {Promise} resolves once data are fetched diff --git a/lib/public/views/Runs/RunPerDataPass/RunsPerDataPassOverviewPage.js b/lib/public/views/Runs/RunPerDataPass/RunsPerDataPassOverviewPage.js index e9aa823d24..964d8669da 100644 --- a/lib/public/views/Runs/RunPerDataPass/RunsPerDataPassOverviewPage.js +++ b/lib/public/views/Runs/RunPerDataPass/RunsPerDataPassOverviewPage.js @@ -25,7 +25,6 @@ import { runNumbersFilter } from '../../../components/Filters/RunsFilter/runNumb import { qcSummaryLegendTooltip } from '../../../components/qcFlags/qcSummaryLegendTooltip.js'; import { isRunNotSubjectToQc } from '../../../components/qcFlags/isRunNotSubjectToQc.js'; import { frontLink } from '../../../components/common/navigation/frontLink.js'; -import { getQcSummaryDisplay } from '../ActiveColumns/getQcSummaryDisplay.js'; import errorAlert from '../../../components/common/errorAlert.js'; import { switchInput } from '../../../components/common/form/switchInput.js'; import { PdpBeamType } from '../../../domain/enums/PdpBeamType.js'; @@ -103,7 +102,6 @@ export const RunsPerDataPassOverviewPage = ({ detectors: remoteDetectors, dataPass: remoteDataPass, qcSummary: remoteQcSummary, - gaqSummary: remoteGaqSummary, displayOptions, dataPassId, sortModel, @@ -120,10 +118,10 @@ export const RunsPerDataPassOverviewPage = ({ return h( '.intermediate-flex-column', - mergeRemoteData([remoteDataPass, remoteRuns, remoteDetectors, remoteQcSummary, remoteGaqSummary]).match({ + mergeRemoteData([remoteDataPass, remoteRuns, remoteDetectors, remoteQcSummary]).match({ NotAsked: () => null, Failure: (errors) => errorAlert(errors), - Success: ([dataPass, runs, detectors, qcSummary, gaqSummary]) => { + Success: ([dataPass, runs, detectors, qcSummary]) => { const activeColumns = { ...runsActiveColumns, ...getInelasticInteractionRateColumns(pdpBeamTypes), @@ -162,12 +160,7 @@ export const RunsPerDataPassOverviewPage = ({ ), visible: true, format: (_, { runNumber }) => { - const runGaqSummary = gaqSummary[runNumber]; - - const gaqDisplay = runGaqSummary?.undefinedQualityPeriodsCount === 0 - ? getQcSummaryDisplay(runGaqSummary) - : h('button.btn.btn-primary.w-100', 'GAQ'); - + const gaqDisplay = h('button.btn.btn-primary.w-100', 'GAQ'); return frontLink(gaqDisplay, 'gaq-flags', { dataPassId, runNumber }); }, filter: ({ filteringModel }) => numericalComparisonFilter( diff --git a/test/public/runs/runsPerDataPass.overview.test.js b/test/public/runs/runsPerDataPass.overview.test.js index e8ea387b87..f4a9b91df0 100644 --- a/test/public/runs/runsPerDataPass.overview.test.js +++ b/test/public/runs/runsPerDataPass.overview.test.js @@ -147,9 +147,6 @@ module.exports = () => { await expectInnerText(page, '#row106-globalAggregatedQuality', 'GAQ'); - await expectInnerText(page, '#row107-globalAggregatedQuality', '76'); - expect(await getPopoverInnerText(await page.waitForSelector('#row107-globalAggregatedQuality .popover-trigger'))) - .to.be.equal('Missing 3 verifications'); }); it('should ignore QC flags created by services in QC summaries of AOT and MUON ', async () => { @@ -471,23 +468,7 @@ module.exports = () => { }); } - it('should successfully apply gaqNotBadFraction filters', async () => { - await navigateToRunsPerDataPass(page, 2, 1, 3); - - await pressElement(page, '#openFilterToggle', true); - - await page.waitForSelector('#gaqNotBadFraction-operator'); - await page.select('#gaqNotBadFraction-operator', '<='); - await fillInput(page, '#gaqNotBadFraction-operand', '80', ['change']); - await expectColumnValues(page, 'runNumber', ['107']); - - await pressElement(page, '#mcReproducibleAsNotBadToggle input', true); - await expectColumnValues(page, 'runNumber', []); - await pressElement(page, '#openFilterToggle', true); - await pressElement(page, '#reset-filters', true); - await expectColumnValues(page, 'runNumber', ['108', '107', '106']); - }); it('should successfully apply detectors notBadFraction filters', async () => { await page.waitForSelector('#detectorsQc-for-1-notBadFraction-operator'); From d54b26c3c8fd1393b19d28e5a1918c079bffbf8a Mon Sep 17 00:00:00 2001 From: Isaac Hill <71404865+isaachilly@users.noreply.github.com> Date: Thu, 29 Jan 2026 12:45:44 +0100 Subject: [PATCH 2/4] [O2B-1523] unnecessarily removed gaqNotBadFraction filter --- .../public/runs/runsPerDataPass.overview.test.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/test/public/runs/runsPerDataPass.overview.test.js b/test/public/runs/runsPerDataPass.overview.test.js index f4a9b91df0..bc16db4ee5 100644 --- a/test/public/runs/runsPerDataPass.overview.test.js +++ b/test/public/runs/runsPerDataPass.overview.test.js @@ -468,7 +468,23 @@ module.exports = () => { }); } + it('should successfully apply gaqNotBadFraction filters', async () => { + await navigateToRunsPerDataPass(page, 2, 1, 3); + + await pressElement(page, '#openFilterToggle', true); + + await page.waitForSelector('#gaqNotBadFraction-operator'); + await page.select('#gaqNotBadFraction-operator', '<='); + await fillInput(page, '#gaqNotBadFraction-operand', '80', ['change']); + await expectColumnValues(page, 'runNumber', ['107']); + + await pressElement(page, '#mcReproducibleAsNotBadToggle input', true); + await expectColumnValues(page, 'runNumber', []); + await pressElement(page, '#openFilterToggle', true); + await pressElement(page, '#reset-filters', true); + await expectColumnValues(page, 'runNumber', ['108', '107', '106']); + }); it('should successfully apply detectors notBadFraction filters', async () => { await page.waitForSelector('#detectorsQc-for-1-notBadFraction-operator'); From 2c6dc204119daf720b011862a11ddcefeb2dbf6a Mon Sep 17 00:00:00 2001 From: Isaac Hill <71404865+isaachilly@users.noreply.github.com> Date: Thu, 29 Jan 2026 12:59:52 +0100 Subject: [PATCH 3/4] [O2B1523] Fix indentation in gaqNotBadFraction filter test --- test/public/runs/runsPerDataPass.overview.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/public/runs/runsPerDataPass.overview.test.js b/test/public/runs/runsPerDataPass.overview.test.js index bc16db4ee5..4e7bdedcdf 100644 --- a/test/public/runs/runsPerDataPass.overview.test.js +++ b/test/public/runs/runsPerDataPass.overview.test.js @@ -468,7 +468,7 @@ module.exports = () => { }); } - it('should successfully apply gaqNotBadFraction filters', async () => { + it('should successfully apply gaqNotBadFraction filters', async () => { await navigateToRunsPerDataPass(page, 2, 1, 3); await pressElement(page, '#openFilterToggle', true); From 94e36eec19d88cec23bdd7a036a950b734023d8c Mon Sep 17 00:00:00 2001 From: Isaac Hill <71404865+isaachilly@users.noreply.github.com> Date: Thu, 29 Jan 2026 15:31:37 +0100 Subject: [PATCH 4/4] [O2B-1524] Add tooltip to GAQ button Added tooltip indicating that the GAQ Summary is disabled and prompting users to click to view GAQ flags. Updated the corresponding test to verify the tooltip's presence. --- .../Runs/RunPerDataPass/RunsPerDataPassOverviewPage.js | 8 +++++++- test/public/runs/runsPerDataPass.overview.test.js | 2 ++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/public/views/Runs/RunPerDataPass/RunsPerDataPassOverviewPage.js b/lib/public/views/Runs/RunPerDataPass/RunsPerDataPassOverviewPage.js index 964d8669da..6b664df587 100644 --- a/lib/public/views/Runs/RunPerDataPass/RunsPerDataPassOverviewPage.js +++ b/lib/public/views/Runs/RunPerDataPass/RunsPerDataPassOverviewPage.js @@ -160,7 +160,13 @@ export const RunsPerDataPassOverviewPage = ({ ), visible: true, format: (_, { runNumber }) => { - const gaqDisplay = h('button.btn.btn-primary.w-100', 'GAQ'); + const gaqDisplay = h('button.btn.btn-primary.w-100', [ + 'GAQ', + h( + '.d-inline-block.va-t-bottom', + tooltip(h('.f7', iconWarning()), 'GAQ Summary is disabled, please click to view GAQ flags'), + ), + ]); return frontLink(gaqDisplay, 'gaq-flags', { dataPassId, runNumber }); }, filter: ({ filteringModel }) => numericalComparisonFilter( diff --git a/test/public/runs/runsPerDataPass.overview.test.js b/test/public/runs/runsPerDataPass.overview.test.js index 4e7bdedcdf..98f69a3648 100644 --- a/test/public/runs/runsPerDataPass.overview.test.js +++ b/test/public/runs/runsPerDataPass.overview.test.js @@ -147,6 +147,8 @@ module.exports = () => { await expectInnerText(page, '#row106-globalAggregatedQuality', 'GAQ'); + expect(await getPopoverInnerText(await page.waitForSelector('#row106-globalAggregatedQuality .popover-trigger'))) + .to.be.equal('GAQ Summary is disabled, please click to view GAQ flags'); }); it('should ignore QC flags created by services in QC summaries of AOT and MUON ', async () => {