Fix GROUP plot x-range and y-scaling persistence across refinement cyles - #285

Closed
mguthriem wants to merge 1 commit into
AdvancedPhotonSource:TOFgroupfrom
mguthriem:TOFgroup
Closed

Fix GROUP plot x-range and y-scaling persistence across refinement cyles#285
mguthriem wants to merge 1 commit into
AdvancedPhotonSource:TOFgroupfrom
mguthriem:TOFgroup

Conversation

@mguthriem

Copy link
Copy Markdown
Contributor

@brian I spent a few hours working with the TOF groups and found quite a few things, all relating to the powder pattern display. These really reflect my workflow and may not be ideal for everyone, but they made more sense to me. I just naturally found myself changing units and zooming/unzooming and found issues scaling when doing that.

I didn't edit a single line of code! This was all done by AI with me then testing and prompting it. It also wrote the PR summary below. I'm not sure if this should be considered a real PR that you merge (?) but it's a good way for you to see what I (what it) did in the diff.

I really like how it displays now :)

Malcolm

------------------- AI summary -------------------------

Fixes for histogram GROUP plot display when using shared X-axes in Q/d-space:

  1. Preserve x-units (Q/d) across refinement cycles

    • Save qPlot/dPlot settings in savedSettings tuple in refPlotUpdate
    • Restore settings via G2frame.savedPlotStyle after Page recreation
  2. Preserve zoomed x-range across refinement cycles

    • Store x-limits in G2frame.groupXlim and plot mode in G2frame.groupPlotMode
    • Restore limits when plot is redrawn after refinement
  3. Convert x-range when switching between Q and d units

    • Apply d=2π/Q conversion (with min/max inversion) when changing units
  4. Fix y-axis scaling to show all visible data when zoomed

    • Remove sharey='row' when sharedX enabled to allow independent y-limit control
    • Add xlim_changed callback to recalculate y-limits based on visible x-range
    • Calculate global y-range across all panels to ensure consistent scaling
  5. Add reset functionality

    • 'r' key clears saved limits and resets to full data range
    • Override home() button in GSASIItoolbar to clear limits and trigger replot
  6. Fix x-label to show Q/d units for GROUP plottype

…cles
Fixes for histogram GROUP plot display when using shared X-axes in Q/d-space:
1. Preserve x-units (Q/d) across refinement cycles
- Save qPlot/dPlot settings in savedSettings tuple in refPlotUpdate
- Restore settings via G2frame.savedPlotStyle after Page recreation
2. Preserve zoomed x-range across refinement cycles
- Store x-limits in G2frame.groupXlim and plot mode in G2frame.groupPlotMode
- Restore limits when plot is redrawn after refinement
3. Convert x-range when switching between Q and d units
- Apply d=2π/Q conversion (with min/max inversion) when changing units
4. Fix y-axis scaling to show all visible data when zoomed
- Remove sharey='row' when sharedX enabled to allow independent y-limit control
- Add xlim_changed callback to recalculate y-limits based on visible x-range
- Calculate global y-range across all panels to ensure consistent scaling
5. Add reset functionality
- 'r' key clears saved limits and resets to full data range
- Override home() button in GSASIItoolbar to clear limits and trigger replot
6. Fix x-label to show Q/d units for GROUP plottype
briantoby added a commit that referenced this pull request Jan 2, 2026
briantoby added a commit that referenced this pull request Jan 2, 2026
@briantobybriantoby self-assigned this Jan 3, 2026
@briantobybriantoby added enhancement New feature or request ORNL Bug or need identified/requested by ORNL user/staff labels Jan 3, 2026
@briantoby

Copy link
Copy Markdown
Collaborator

Everything here (except 'r' key for reset, omitted as this duplicates the home button) is incorporated now in the TOFgroup branch. Closing.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or requestORNLBug or need identified/requested by ORNL user/staff

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@mguthriem@briantoby
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all \u003cpre\u003e\u003ccode\u003e blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks"); } } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); } })(); (function(){ try { var __m = "github.com"; var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Fix GROUP plot x-range and y-scaling persistence across refinement cyles - #285

Closed
mguthriem wants to merge 1 commit into
AdvancedPhotonSource:TOFgroupfrom
mguthriem:TOFgroup
Closed

Fix GROUP plot x-range and y-scaling persistence across refinement cyles#285
mguthriem wants to merge 1 commit into
AdvancedPhotonSource:TOFgroupfrom
mguthriem:TOFgroup

Conversation

@mguthriem

Copy link
Copy Markdown
Contributor

@brian I spent a few hours working with the TOF groups and found quite a few things, all relating to the powder pattern display. These really reflect my workflow and may not be ideal for everyone, but they made more sense to me. I just naturally found myself changing units and zooming/unzooming and found issues scaling when doing that.

I didn't edit a single line of code! This was all done by AI with me then testing and prompting it. It also wrote the PR summary below. I'm not sure if this should be considered a real PR that you merge (?) but it's a good way for you to see what I (what it) did in the diff.

I really like how it displays now :)

Malcolm

------------------- AI summary -------------------------

Fixes for histogram GROUP plot display when using shared X-axes in Q/d-space:

  1. Preserve x-units (Q/d) across refinement cycles

    • Save qPlot/dPlot settings in savedSettings tuple in refPlotUpdate
    • Restore settings via G2frame.savedPlotStyle after Page recreation
  2. Preserve zoomed x-range across refinement cycles

    • Store x-limits in G2frame.groupXlim and plot mode in G2frame.groupPlotMode
    • Restore limits when plot is redrawn after refinement
  3. Convert x-range when switching between Q and d units

    • Apply d=2π/Q conversion (with min/max inversion) when changing units
  4. Fix y-axis scaling to show all visible data when zoomed

    • Remove sharey='row' when sharedX enabled to allow independent y-limit control
    • Add xlim_changed callback to recalculate y-limits based on visible x-range
    • Calculate global y-range across all panels to ensure consistent scaling
  5. Add reset functionality

    • 'r' key clears saved limits and resets to full data range
    • Override home() button in GSASIItoolbar to clear limits and trigger replot
  6. Fix x-label to show Q/d units for GROUP plottype

…cles
Fixes for histogram GROUP plot display when using shared X-axes in Q/d-space:
1. Preserve x-units (Q/d) across refinement cycles
- Save qPlot/dPlot settings in savedSettings tuple in refPlotUpdate
- Restore settings via G2frame.savedPlotStyle after Page recreation
2. Preserve zoomed x-range across refinement cycles
- Store x-limits in G2frame.groupXlim and plot mode in G2frame.groupPlotMode
- Restore limits when plot is redrawn after refinement
3. Convert x-range when switching between Q and d units
- Apply d=2π/Q conversion (with min/max inversion) when changing units
4. Fix y-axis scaling to show all visible data when zoomed
- Remove sharey='row' when sharedX enabled to allow independent y-limit control
- Add xlim_changed callback to recalculate y-limits based on visible x-range
- Calculate global y-range across all panels to ensure consistent scaling
5. Add reset functionality
- 'r' key clears saved limits and resets to full data range
- Override home() button in GSASIItoolbar to clear limits and trigger replot
6. Fix x-label to show Q/d units for GROUP plottype
briantoby added a commit that referenced this pull request Jan 2, 2026
briantoby added a commit that referenced this pull request Jan 2, 2026
@briantobybriantoby self-assigned this Jan 3, 2026
@briantobybriantoby added enhancement New feature or request ORNL Bug or need identified/requested by ORNL user/staff labels Jan 3, 2026
@briantoby

Copy link
Copy Markdown
Collaborator

Everything here (except 'r' key for reset, omitted as this duplicates the home button) is incorporated now in the TOFgroup branch. Closing.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or requestORNLBug or need identified/requested by ORNL user/staff

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@mguthriem@briantoby
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Fix GROUP plot x-range and y-scaling persistence across refinement cyles - #285

Closed
mguthriem wants to merge 1 commit into
AdvancedPhotonSource:TOFgroupfrom
mguthriem:TOFgroup
Closed

Fix GROUP plot x-range and y-scaling persistence across refinement cyles#285
mguthriem wants to merge 1 commit into
AdvancedPhotonSource:TOFgroupfrom
mguthriem:TOFgroup

Conversation

@mguthriem

Copy link
Copy Markdown
Contributor

@brian I spent a few hours working with the TOF groups and found quite a few things, all relating to the powder pattern display. These really reflect my workflow and may not be ideal for everyone, but they made more sense to me. I just naturally found myself changing units and zooming/unzooming and found issues scaling when doing that.

I didn't edit a single line of code! This was all done by AI with me then testing and prompting it. It also wrote the PR summary below. I'm not sure if this should be considered a real PR that you merge (?) but it's a good way for you to see what I (what it) did in the diff.

I really like how it displays now :)

Malcolm

------------------- AI summary -------------------------

Fixes for histogram GROUP plot display when using shared X-axes in Q/d-space:

  1. Preserve x-units (Q/d) across refinement cycles

    • Save qPlot/dPlot settings in savedSettings tuple in refPlotUpdate
    • Restore settings via G2frame.savedPlotStyle after Page recreation
  2. Preserve zoomed x-range across refinement cycles

    • Store x-limits in G2frame.groupXlim and plot mode in G2frame.groupPlotMode
    • Restore limits when plot is redrawn after refinement
  3. Convert x-range when switching between Q and d units

    • Apply d=2π/Q conversion (with min/max inversion) when changing units
  4. Fix y-axis scaling to show all visible data when zoomed

    • Remove sharey='row' when sharedX enabled to allow independent y-limit control
    • Add xlim_changed callback to recalculate y-limits based on visible x-range
    • Calculate global y-range across all panels to ensure consistent scaling
  5. Add reset functionality

    • 'r' key clears saved limits and resets to full data range
    • Override home() button in GSASIItoolbar to clear limits and trigger replot
  6. Fix x-label to show Q/d units for GROUP plottype

…cles
Fixes for histogram GROUP plot display when using shared X-axes in Q/d-space:
1. Preserve x-units (Q/d) across refinement cycles
- Save qPlot/dPlot settings in savedSettings tuple in refPlotUpdate
- Restore settings via G2frame.savedPlotStyle after Page recreation
2. Preserve zoomed x-range across refinement cycles
- Store x-limits in G2frame.groupXlim and plot mode in G2frame.groupPlotMode
- Restore limits when plot is redrawn after refinement
3. Convert x-range when switching between Q and d units
- Apply d=2π/Q conversion (with min/max inversion) when changing units
4. Fix y-axis scaling to show all visible data when zoomed
- Remove sharey='row' when sharedX enabled to allow independent y-limit control
- Add xlim_changed callback to recalculate y-limits based on visible x-range
- Calculate global y-range across all panels to ensure consistent scaling
5. Add reset functionality
- 'r' key clears saved limits and resets to full data range
- Override home() button in GSASIItoolbar to clear limits and trigger replot
6. Fix x-label to show Q/d units for GROUP plottype
briantoby added a commit that referenced this pull request Jan 2, 2026
briantoby added a commit that referenced this pull request Jan 2, 2026
@briantobybriantoby self-assigned this Jan 3, 2026
@briantobybriantoby added enhancement New feature or request ORNL Bug or need identified/requested by ORNL user/staff labels Jan 3, 2026
@briantoby

Copy link
Copy Markdown
Collaborator

Everything here (except 'r' key for reset, omitted as this duplicates the home button) is incorporated now in the TOFgroup branch. Closing.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or requestORNLBug or need identified/requested by ORNL user/staff

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@mguthriem@briantoby
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length \u003e 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Fix GROUP plot x-range and y-scaling persistence across refinement cyles - #285

Closed
mguthriem wants to merge 1 commit into
AdvancedPhotonSource:TOFgroupfrom
mguthriem:TOFgroup
Closed

Fix GROUP plot x-range and y-scaling persistence across refinement cyles#285
mguthriem wants to merge 1 commit into
AdvancedPhotonSource:TOFgroupfrom
mguthriem:TOFgroup

Conversation

@mguthriem

Copy link
Copy Markdown
Contributor

@brian I spent a few hours working with the TOF groups and found quite a few things, all relating to the powder pattern display. These really reflect my workflow and may not be ideal for everyone, but they made more sense to me. I just naturally found myself changing units and zooming/unzooming and found issues scaling when doing that.

I didn't edit a single line of code! This was all done by AI with me then testing and prompting it. It also wrote the PR summary below. I'm not sure if this should be considered a real PR that you merge (?) but it's a good way for you to see what I (what it) did in the diff.

I really like how it displays now :)

Malcolm

------------------- AI summary -------------------------

Fixes for histogram GROUP plot display when using shared X-axes in Q/d-space:

  1. Preserve x-units (Q/d) across refinement cycles

    • Save qPlot/dPlot settings in savedSettings tuple in refPlotUpdate
    • Restore settings via G2frame.savedPlotStyle after Page recreation
  2. Preserve zoomed x-range across refinement cycles

    • Store x-limits in G2frame.groupXlim and plot mode in G2frame.groupPlotMode
    • Restore limits when plot is redrawn after refinement
  3. Convert x-range when switching between Q and d units

    • Apply d=2π/Q conversion (with min/max inversion) when changing units
  4. Fix y-axis scaling to show all visible data when zoomed

    • Remove sharey='row' when sharedX enabled to allow independent y-limit control
    • Add xlim_changed callback to recalculate y-limits based on visible x-range
    • Calculate global y-range across all panels to ensure consistent scaling
  5. Add reset functionality

    • 'r' key clears saved limits and resets to full data range
    • Override home() button in GSASIItoolbar to clear limits and trigger replot
  6. Fix x-label to show Q/d units for GROUP plottype

…cles
Fixes for histogram GROUP plot display when using shared X-axes in Q/d-space:
1. Preserve x-units (Q/d) across refinement cycles
- Save qPlot/dPlot settings in savedSettings tuple in refPlotUpdate
- Restore settings via G2frame.savedPlotStyle after Page recreation
2. Preserve zoomed x-range across refinement cycles
- Store x-limits in G2frame.groupXlim and plot mode in G2frame.groupPlotMode
- Restore limits when plot is redrawn after refinement
3. Convert x-range when switching between Q and d units
- Apply d=2π/Q conversion (with min/max inversion) when changing units
4. Fix y-axis scaling to show all visible data when zoomed
- Remove sharey='row' when sharedX enabled to allow independent y-limit control
- Add xlim_changed callback to recalculate y-limits based on visible x-range
- Calculate global y-range across all panels to ensure consistent scaling
5. Add reset functionality
- 'r' key clears saved limits and resets to full data range
- Override home() button in GSASIItoolbar to clear limits and trigger replot
6. Fix x-label to show Q/d units for GROUP plottype
briantoby added a commit that referenced this pull request Jan 2, 2026
briantoby added a commit that referenced this pull request Jan 2, 2026
@briantobybriantoby self-assigned this Jan 3, 2026
@briantobybriantoby added enhancement New feature or request ORNL Bug or need identified/requested by ORNL user/staff labels Jan 3, 2026
@briantoby

Copy link
Copy Markdown
Collaborator

Everything here (except 'r' key for reset, omitted as this duplicates the home button) is incorporated now in the TOFgroup branch. Closing.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or requestORNLBug or need identified/requested by ORNL user/staff

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@mguthriem@briantoby
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Fix GROUP plot x-range and y-scaling persistence across refinement cyles - #285

Closed
mguthriem wants to merge 1 commit into
AdvancedPhotonSource:TOFgroupfrom
mguthriem:TOFgroup
Closed

Fix GROUP plot x-range and y-scaling persistence across refinement cyles#285
mguthriem wants to merge 1 commit into
AdvancedPhotonSource:TOFgroupfrom
mguthriem:TOFgroup

Conversation

@mguthriem

Copy link
Copy Markdown
Contributor

@brian I spent a few hours working with the TOF groups and found quite a few things, all relating to the powder pattern display. These really reflect my workflow and may not be ideal for everyone, but they made more sense to me. I just naturally found myself changing units and zooming/unzooming and found issues scaling when doing that.

I didn't edit a single line of code! This was all done by AI with me then testing and prompting it. It also wrote the PR summary below. I'm not sure if this should be considered a real PR that you merge (?) but it's a good way for you to see what I (what it) did in the diff.

I really like how it displays now :)

Malcolm

------------------- AI summary -------------------------

Fixes for histogram GROUP plot display when using shared X-axes in Q/d-space:

  1. Preserve x-units (Q/d) across refinement cycles

    • Save qPlot/dPlot settings in savedSettings tuple in refPlotUpdate
    • Restore settings via G2frame.savedPlotStyle after Page recreation
  2. Preserve zoomed x-range across refinement cycles

    • Store x-limits in G2frame.groupXlim and plot mode in G2frame.groupPlotMode
    • Restore limits when plot is redrawn after refinement
  3. Convert x-range when switching between Q and d units

    • Apply d=2π/Q conversion (with min/max inversion) when changing units
  4. Fix y-axis scaling to show all visible data when zoomed

    • Remove sharey='row' when sharedX enabled to allow independent y-limit control
    • Add xlim_changed callback to recalculate y-limits based on visible x-range
    • Calculate global y-range across all panels to ensure consistent scaling
  5. Add reset functionality

    • 'r' key clears saved limits and resets to full data range
    • Override home() button in GSASIItoolbar to clear limits and trigger replot
  6. Fix x-label to show Q/d units for GROUP plottype

…cles
Fixes for histogram GROUP plot display when using shared X-axes in Q/d-space:
1. Preserve x-units (Q/d) across refinement cycles
- Save qPlot/dPlot settings in savedSettings tuple in refPlotUpdate
- Restore settings via G2frame.savedPlotStyle after Page recreation
2. Preserve zoomed x-range across refinement cycles
- Store x-limits in G2frame.groupXlim and plot mode in G2frame.groupPlotMode
- Restore limits when plot is redrawn after refinement
3. Convert x-range when switching between Q and d units
- Apply d=2π/Q conversion (with min/max inversion) when changing units
4. Fix y-axis scaling to show all visible data when zoomed
- Remove sharey='row' when sharedX enabled to allow independent y-limit control
- Add xlim_changed callback to recalculate y-limits based on visible x-range
- Calculate global y-range across all panels to ensure consistent scaling
5. Add reset functionality
- 'r' key clears saved limits and resets to full data range
- Override home() button in GSASIItoolbar to clear limits and trigger replot
6. Fix x-label to show Q/d units for GROUP plottype
briantoby added a commit that referenced this pull request Jan 2, 2026
briantoby added a commit that referenced this pull request Jan 2, 2026
@briantobybriantoby self-assigned this Jan 3, 2026
@briantobybriantoby added enhancement New feature or request ORNL Bug or need identified/requested by ORNL user/staff labels Jan 3, 2026
@briantoby

Copy link
Copy Markdown
Collaborator

Everything here (except 'r' key for reset, omitted as this duplicates the home button) is incorporated now in the TOFgroup branch. Closing.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or requestORNLBug or need identified/requested by ORNL user/staff

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@mguthriem@briantoby
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Fix GROUP plot x-range and y-scaling persistence across refinement cyles - #285

Closed
mguthriem wants to merge 1 commit into
AdvancedPhotonSource:TOFgroupfrom
mguthriem:TOFgroup
Closed

Fix GROUP plot x-range and y-scaling persistence across refinement cyles#285
mguthriem wants to merge 1 commit into
AdvancedPhotonSource:TOFgroupfrom
mguthriem:TOFgroup

Conversation

@mguthriem

Copy link
Copy Markdown
Contributor

@brian I spent a few hours working with the TOF groups and found quite a few things, all relating to the powder pattern display. These really reflect my workflow and may not be ideal for everyone, but they made more sense to me. I just naturally found myself changing units and zooming/unzooming and found issues scaling when doing that.

I didn't edit a single line of code! This was all done by AI with me then testing and prompting it. It also wrote the PR summary below. I'm not sure if this should be considered a real PR that you merge (?) but it's a good way for you to see what I (what it) did in the diff.

I really like how it displays now :)

Malcolm

------------------- AI summary -------------------------

Fixes for histogram GROUP plot display when using shared X-axes in Q/d-space:

  1. Preserve x-units (Q/d) across refinement cycles

    • Save qPlot/dPlot settings in savedSettings tuple in refPlotUpdate
    • Restore settings via G2frame.savedPlotStyle after Page recreation
  2. Preserve zoomed x-range across refinement cycles

    • Store x-limits in G2frame.groupXlim and plot mode in G2frame.groupPlotMode
    • Restore limits when plot is redrawn after refinement
  3. Convert x-range when switching between Q and d units

    • Apply d=2π/Q conversion (with min/max inversion) when changing units
  4. Fix y-axis scaling to show all visible data when zoomed

    • Remove sharey='row' when sharedX enabled to allow independent y-limit control
    • Add xlim_changed callback to recalculate y-limits based on visible x-range
    • Calculate global y-range across all panels to ensure consistent scaling
  5. Add reset functionality

    • 'r' key clears saved limits and resets to full data range
    • Override home() button in GSASIItoolbar to clear limits and trigger replot
  6. Fix x-label to show Q/d units for GROUP plottype

…cles
Fixes for histogram GROUP plot display when using shared X-axes in Q/d-space:
1. Preserve x-units (Q/d) across refinement cycles
- Save qPlot/dPlot settings in savedSettings tuple in refPlotUpdate
- Restore settings via G2frame.savedPlotStyle after Page recreation
2. Preserve zoomed x-range across refinement cycles
- Store x-limits in G2frame.groupXlim and plot mode in G2frame.groupPlotMode
- Restore limits when plot is redrawn after refinement
3. Convert x-range when switching between Q and d units
- Apply d=2π/Q conversion (with min/max inversion) when changing units
4. Fix y-axis scaling to show all visible data when zoomed
- Remove sharey='row' when sharedX enabled to allow independent y-limit control
- Add xlim_changed callback to recalculate y-limits based on visible x-range
- Calculate global y-range across all panels to ensure consistent scaling
5. Add reset functionality
- 'r' key clears saved limits and resets to full data range
- Override home() button in GSASIItoolbar to clear limits and trigger replot
6. Fix x-label to show Q/d units for GROUP plottype
briantoby added a commit that referenced this pull request Jan 2, 2026
briantoby added a commit that referenced this pull request Jan 2, 2026
@briantobybriantoby self-assigned this Jan 3, 2026
@briantobybriantoby added enhancement New feature or request ORNL Bug or need identified/requested by ORNL user/staff labels Jan 3, 2026
@briantoby

Copy link
Copy Markdown
Collaborator

Everything here (except 'r' key for reset, omitted as this duplicates the home button) is incorporated now in the TOFgroup branch. Closing.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or requestORNLBug or need identified/requested by ORNL user/staff

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@mguthriem@briantoby
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Fix GROUP plot x-range and y-scaling persistence across refinement cyles - #285

Closed
mguthriem wants to merge 1 commit into
AdvancedPhotonSource:TOFgroupfrom
mguthriem:TOFgroup
Closed

Fix GROUP plot x-range and y-scaling persistence across refinement cyles#285
mguthriem wants to merge 1 commit into
AdvancedPhotonSource:TOFgroupfrom
mguthriem:TOFgroup

Conversation

@mguthriem

Copy link
Copy Markdown
Contributor

@brian I spent a few hours working with the TOF groups and found quite a few things, all relating to the powder pattern display. These really reflect my workflow and may not be ideal for everyone, but they made more sense to me. I just naturally found myself changing units and zooming/unzooming and found issues scaling when doing that.

I didn't edit a single line of code! This was all done by AI with me then testing and prompting it. It also wrote the PR summary below. I'm not sure if this should be considered a real PR that you merge (?) but it's a good way for you to see what I (what it) did in the diff.

I really like how it displays now :)

Malcolm

------------------- AI summary -------------------------

Fixes for histogram GROUP plot display when using shared X-axes in Q/d-space:

  1. Preserve x-units (Q/d) across refinement cycles

    • Save qPlot/dPlot settings in savedSettings tuple in refPlotUpdate
    • Restore settings via G2frame.savedPlotStyle after Page recreation
  2. Preserve zoomed x-range across refinement cycles

    • Store x-limits in G2frame.groupXlim and plot mode in G2frame.groupPlotMode
    • Restore limits when plot is redrawn after refinement
  3. Convert x-range when switching between Q and d units

    • Apply d=2π/Q conversion (with min/max inversion) when changing units
  4. Fix y-axis scaling to show all visible data when zoomed

    • Remove sharey='row' when sharedX enabled to allow independent y-limit control
    • Add xlim_changed callback to recalculate y-limits based on visible x-range
    • Calculate global y-range across all panels to ensure consistent scaling
  5. Add reset functionality

    • 'r' key clears saved limits and resets to full data range
    • Override home() button in GSASIItoolbar to clear limits and trigger replot
  6. Fix x-label to show Q/d units for GROUP plottype

…cles
Fixes for histogram GROUP plot display when using shared X-axes in Q/d-space:
1. Preserve x-units (Q/d) across refinement cycles
- Save qPlot/dPlot settings in savedSettings tuple in refPlotUpdate
- Restore settings via G2frame.savedPlotStyle after Page recreation
2. Preserve zoomed x-range across refinement cycles
- Store x-limits in G2frame.groupXlim and plot mode in G2frame.groupPlotMode
- Restore limits when plot is redrawn after refinement
3. Convert x-range when switching between Q and d units
- Apply d=2π/Q conversion (with min/max inversion) when changing units
4. Fix y-axis scaling to show all visible data when zoomed
- Remove sharey='row' when sharedX enabled to allow independent y-limit control
- Add xlim_changed callback to recalculate y-limits based on visible x-range
- Calculate global y-range across all panels to ensure consistent scaling
5. Add reset functionality
- 'r' key clears saved limits and resets to full data range
- Override home() button in GSASIItoolbar to clear limits and trigger replot
6. Fix x-label to show Q/d units for GROUP plottype
briantoby added a commit that referenced this pull request Jan 2, 2026
briantoby added a commit that referenced this pull request Jan 2, 2026
@briantobybriantoby self-assigned this Jan 3, 2026
@briantobybriantoby added enhancement New feature or request ORNL Bug or need identified/requested by ORNL user/staff labels Jan 3, 2026
@briantoby

Copy link
Copy Markdown
Collaborator

Everything here (except 'r' key for reset, omitted as this duplicates the home button) is incorporated now in the TOFgroup branch. Closing.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or requestORNLBug or need identified/requested by ORNL user/staff

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@mguthriem@briantoby
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Fix GROUP plot x-range and y-scaling persistence across refinement cyles - #285

Closed
mguthriem wants to merge 1 commit into
AdvancedPhotonSource:TOFgroupfrom
mguthriem:TOFgroup
Closed

Fix GROUP plot x-range and y-scaling persistence across refinement cyles#285
mguthriem wants to merge 1 commit into
AdvancedPhotonSource:TOFgroupfrom
mguthriem:TOFgroup

Conversation

@mguthriem

Copy link
Copy Markdown
Contributor

@brian I spent a few hours working with the TOF groups and found quite a few things, all relating to the powder pattern display. These really reflect my workflow and may not be ideal for everyone, but they made more sense to me. I just naturally found myself changing units and zooming/unzooming and found issues scaling when doing that.

I didn't edit a single line of code! This was all done by AI with me then testing and prompting it. It also wrote the PR summary below. I'm not sure if this should be considered a real PR that you merge (?) but it's a good way for you to see what I (what it) did in the diff.

I really like how it displays now :)

Malcolm

------------------- AI summary -------------------------

Fixes for histogram GROUP plot display when using shared X-axes in Q/d-space:

  1. Preserve x-units (Q/d) across refinement cycles

    • Save qPlot/dPlot settings in savedSettings tuple in refPlotUpdate
    • Restore settings via G2frame.savedPlotStyle after Page recreation
  2. Preserve zoomed x-range across refinement cycles

    • Store x-limits in G2frame.groupXlim and plot mode in G2frame.groupPlotMode
    • Restore limits when plot is redrawn after refinement
  3. Convert x-range when switching between Q and d units

    • Apply d=2π/Q conversion (with min/max inversion) when changing units
  4. Fix y-axis scaling to show all visible data when zoomed

    • Remove sharey='row' when sharedX enabled to allow independent y-limit control
    • Add xlim_changed callback to recalculate y-limits based on visible x-range
    • Calculate global y-range across all panels to ensure consistent scaling
  5. Add reset functionality

    • 'r' key clears saved limits and resets to full data range
    • Override home() button in GSASIItoolbar to clear limits and trigger replot
  6. Fix x-label to show Q/d units for GROUP plottype

…cles
Fixes for histogram GROUP plot display when using shared X-axes in Q/d-space:
1. Preserve x-units (Q/d) across refinement cycles
- Save qPlot/dPlot settings in savedSettings tuple in refPlotUpdate
- Restore settings via G2frame.savedPlotStyle after Page recreation
2. Preserve zoomed x-range across refinement cycles
- Store x-limits in G2frame.groupXlim and plot mode in G2frame.groupPlotMode
- Restore limits when plot is redrawn after refinement
3. Convert x-range when switching between Q and d units
- Apply d=2π/Q conversion (with min/max inversion) when changing units
4. Fix y-axis scaling to show all visible data when zoomed
- Remove sharey='row' when sharedX enabled to allow independent y-limit control
- Add xlim_changed callback to recalculate y-limits based on visible x-range
- Calculate global y-range across all panels to ensure consistent scaling
5. Add reset functionality
- 'r' key clears saved limits and resets to full data range
- Override home() button in GSASIItoolbar to clear limits and trigger replot
6. Fix x-label to show Q/d units for GROUP plottype
briantoby added a commit that referenced this pull request Jan 2, 2026
briantoby added a commit that referenced this pull request Jan 2, 2026
@briantobybriantoby self-assigned this Jan 3, 2026
@briantobybriantoby added enhancement New feature or request ORNL Bug or need identified/requested by ORNL user/staff labels Jan 3, 2026
@briantoby

Copy link
Copy Markdown
Collaborator

Everything here (except 'r' key for reset, omitted as this duplicates the home button) is incorporated now in the TOFgroup branch. Closing.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or requestORNLBug or need identified/requested by ORNL user/staff

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@mguthriem@briantoby