Split the openadas module into atomic repository and OpenADAS parser - #377

Draft
vsnever wants to merge 28 commits into
cherab:developmentfrom
vsnever:enhancement/atomic_data_repository
Draft

Split the openadas module into atomic repository and OpenADAS parser#377
vsnever wants to merge 28 commits into
cherab:developmentfrom
vsnever:enhancement/atomic_data_repository

Conversation

@vsnever

@vsnevervsnever commented Aug 25, 2022

Copy link
Copy Markdown
Member

As discussed in #352 and #364, the user should be able to mix atomic data from different providers in a single local repository. In particular, some data such as the dictionary of spectral line wavelengths and Gaunt factors for bremsstrahlung, which are already distributed, or will be distributed with Cherab, are not taken from OpenADAS. Therefore, following @CnlPepper's advice, this PR splits the old opeanadas module into two components: the atomic module for working with a local json repository, and the new openadas module for parsing ADAS files and installing them in a local repository.

The list of changes includes:

  1. openadas.repository is moved to atomic.repository,
  2. openadas.rates is moved to atomic.rates,
  3. openadas/openadas.py is moved to atomic/atomicdata.py and OpenADAS() class is renamed to AtomicData().
  4. Default path to atomic data repository changed to ~/.cherab/atomicdata/default_repository.
  5. For backward compatibility, openadas.repository, openadas.rates and openadas.OpenADAS() now redirect to atomic.repository, atomic.rates and atomic.AtomicData() respectively.
  6. All AtomicData() methods now search for the isotope data, and fallback to the element data only if the isotope data is missing. This behaviour is controlled by the rate_element_fallback argument, which is set to True by default.
  7. Docstrings of the functions in the atomic.repository and openadas.install are improved. The new sections "Atomic data repository" and "Open-ADAS" are added to the documentation under the "Atomic Data" section.
  8. All demos are updated to use the new AtomicData() interface.

Of course, the format for representing the atomic rates in the local repository is very specific to ADAS. In the future, this format can be generalised. For example, parameters such as interpolation type or the order of coordinates for interpolation should also be stored in json. I think that a fairly general format for representing atomic and molecular data in ITER IMAS, AMNS_data IDS, can serve as a guide here.

P.S. I used git mv for all moved files, but for some reason (too many changes?) git treats some of those files as new.

@vsnever

Copy link
Copy Markdown
MemberAuthor

I've added support for the CHERAB_ATOMIC_DATA environment variable from #416.

The PR #5 in cherab-adas demonstrates how much simpler the subpackage will become after this PR is accepted.

Since #400 and #415 add new atomic data, I will need to make additional changes after they are accepted.

@vsnever

Copy link
Copy Markdown
MemberAuthor

Obviously, this change is too big to make in one PR. I'll break it down into several PRs. The first will affect only the documentation, improving docstrings of the openadas.repository and openadas.install functions and adding respective sections to the docs. The second will split the openadas module into the atomic data repository and the OpenADAS parser modules without adding new functionality. Subsequent PRs will add functions for data manipulation that are not included in OpenADAS and distributed with Cherab.

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@vsnever@jacklovell
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 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

Split the openadas module into atomic repository and OpenADAS parser - #377

Draft
vsnever wants to merge 28 commits into
cherab:developmentfrom
vsnever:enhancement/atomic_data_repository
Draft

Split the openadas module into atomic repository and OpenADAS parser#377
vsnever wants to merge 28 commits into
cherab:developmentfrom
vsnever:enhancement/atomic_data_repository

Conversation

@vsnever

@vsnevervsnever commented Aug 25, 2022

Copy link
Copy Markdown
Member

As discussed in #352 and #364, the user should be able to mix atomic data from different providers in a single local repository. In particular, some data such as the dictionary of spectral line wavelengths and Gaunt factors for bremsstrahlung, which are already distributed, or will be distributed with Cherab, are not taken from OpenADAS. Therefore, following @CnlPepper's advice, this PR splits the old opeanadas module into two components: the atomic module for working with a local json repository, and the new openadas module for parsing ADAS files and installing them in a local repository.

The list of changes includes:

  1. openadas.repository is moved to atomic.repository,
  2. openadas.rates is moved to atomic.rates,
  3. openadas/openadas.py is moved to atomic/atomicdata.py and OpenADAS() class is renamed to AtomicData().
  4. Default path to atomic data repository changed to ~/.cherab/atomicdata/default_repository.
  5. For backward compatibility, openadas.repository, openadas.rates and openadas.OpenADAS() now redirect to atomic.repository, atomic.rates and atomic.AtomicData() respectively.
  6. All AtomicData() methods now search for the isotope data, and fallback to the element data only if the isotope data is missing. This behaviour is controlled by the rate_element_fallback argument, which is set to True by default.
  7. Docstrings of the functions in the atomic.repository and openadas.install are improved. The new sections "Atomic data repository" and "Open-ADAS" are added to the documentation under the "Atomic Data" section.
  8. All demos are updated to use the new AtomicData() interface.

Of course, the format for representing the atomic rates in the local repository is very specific to ADAS. In the future, this format can be generalised. For example, parameters such as interpolation type or the order of coordinates for interpolation should also be stored in json. I think that a fairly general format for representing atomic and molecular data in ITER IMAS, AMNS_data IDS, can serve as a guide here.

P.S. I used git mv for all moved files, but for some reason (too many changes?) git treats some of those files as new.

@vsnever

Copy link
Copy Markdown
MemberAuthor

I've added support for the CHERAB_ATOMIC_DATA environment variable from #416.

The PR #5 in cherab-adas demonstrates how much simpler the subpackage will become after this PR is accepted.

Since #400 and #415 add new atomic data, I will need to make additional changes after they are accepted.

@vsnever

Copy link
Copy Markdown
MemberAuthor

Obviously, this change is too big to make in one PR. I'll break it down into several PRs. The first will affect only the documentation, improving docstrings of the openadas.repository and openadas.install functions and adding respective sections to the docs. The second will split the openadas module into the atomic data repository and the OpenADAS parser modules without adding new functionality. Subsequent PRs will add functions for data manipulation that are not included in OpenADAS and distributed with Cherab.

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@vsnever@jacklovell
, '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

Split the openadas module into atomic repository and OpenADAS parser - #377

Draft
vsnever wants to merge 28 commits into
cherab:developmentfrom
vsnever:enhancement/atomic_data_repository
Draft

Split the openadas module into atomic repository and OpenADAS parser#377
vsnever wants to merge 28 commits into
cherab:developmentfrom
vsnever:enhancement/atomic_data_repository

Conversation

@vsnever

@vsnevervsnever commented Aug 25, 2022

Copy link
Copy Markdown
Member

As discussed in #352 and #364, the user should be able to mix atomic data from different providers in a single local repository. In particular, some data such as the dictionary of spectral line wavelengths and Gaunt factors for bremsstrahlung, which are already distributed, or will be distributed with Cherab, are not taken from OpenADAS. Therefore, following @CnlPepper's advice, this PR splits the old opeanadas module into two components: the atomic module for working with a local json repository, and the new openadas module for parsing ADAS files and installing them in a local repository.

The list of changes includes:

  1. openadas.repository is moved to atomic.repository,
  2. openadas.rates is moved to atomic.rates,
  3. openadas/openadas.py is moved to atomic/atomicdata.py and OpenADAS() class is renamed to AtomicData().
  4. Default path to atomic data repository changed to ~/.cherab/atomicdata/default_repository.
  5. For backward compatibility, openadas.repository, openadas.rates and openadas.OpenADAS() now redirect to atomic.repository, atomic.rates and atomic.AtomicData() respectively.
  6. All AtomicData() methods now search for the isotope data, and fallback to the element data only if the isotope data is missing. This behaviour is controlled by the rate_element_fallback argument, which is set to True by default.
  7. Docstrings of the functions in the atomic.repository and openadas.install are improved. The new sections "Atomic data repository" and "Open-ADAS" are added to the documentation under the "Atomic Data" section.
  8. All demos are updated to use the new AtomicData() interface.

Of course, the format for representing the atomic rates in the local repository is very specific to ADAS. In the future, this format can be generalised. For example, parameters such as interpolation type or the order of coordinates for interpolation should also be stored in json. I think that a fairly general format for representing atomic and molecular data in ITER IMAS, AMNS_data IDS, can serve as a guide here.

P.S. I used git mv for all moved files, but for some reason (too many changes?) git treats some of those files as new.

@vsnever

Copy link
Copy Markdown
MemberAuthor

I've added support for the CHERAB_ATOMIC_DATA environment variable from #416.

The PR #5 in cherab-adas demonstrates how much simpler the subpackage will become after this PR is accepted.

Since #400 and #415 add new atomic data, I will need to make additional changes after they are accepted.

@vsnever

Copy link
Copy Markdown
MemberAuthor

Obviously, this change is too big to make in one PR. I'll break it down into several PRs. The first will affect only the documentation, improving docstrings of the openadas.repository and openadas.install functions and adding respective sections to the docs. The second will split the openadas module into the atomic data repository and the OpenADAS parser modules without adding new functionality. Subsequent PRs will add functions for data manipulation that are not included in OpenADAS and distributed with Cherab.

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@vsnever@jacklovell
, '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 > 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

Split the openadas module into atomic repository and OpenADAS parser - #377

Draft
vsnever wants to merge 28 commits into
cherab:developmentfrom
vsnever:enhancement/atomic_data_repository
Draft

Split the openadas module into atomic repository and OpenADAS parser#377
vsnever wants to merge 28 commits into
cherab:developmentfrom
vsnever:enhancement/atomic_data_repository

Conversation

@vsnever

@vsnevervsnever commented Aug 25, 2022

Copy link
Copy Markdown
Member

As discussed in #352 and #364, the user should be able to mix atomic data from different providers in a single local repository. In particular, some data such as the dictionary of spectral line wavelengths and Gaunt factors for bremsstrahlung, which are already distributed, or will be distributed with Cherab, are not taken from OpenADAS. Therefore, following @CnlPepper's advice, this PR splits the old opeanadas module into two components: the atomic module for working with a local json repository, and the new openadas module for parsing ADAS files and installing them in a local repository.

The list of changes includes:

  1. openadas.repository is moved to atomic.repository,
  2. openadas.rates is moved to atomic.rates,
  3. openadas/openadas.py is moved to atomic/atomicdata.py and OpenADAS() class is renamed to AtomicData().
  4. Default path to atomic data repository changed to ~/.cherab/atomicdata/default_repository.
  5. For backward compatibility, openadas.repository, openadas.rates and openadas.OpenADAS() now redirect to atomic.repository, atomic.rates and atomic.AtomicData() respectively.
  6. All AtomicData() methods now search for the isotope data, and fallback to the element data only if the isotope data is missing. This behaviour is controlled by the rate_element_fallback argument, which is set to True by default.
  7. Docstrings of the functions in the atomic.repository and openadas.install are improved. The new sections "Atomic data repository" and "Open-ADAS" are added to the documentation under the "Atomic Data" section.
  8. All demos are updated to use the new AtomicData() interface.

Of course, the format for representing the atomic rates in the local repository is very specific to ADAS. In the future, this format can be generalised. For example, parameters such as interpolation type or the order of coordinates for interpolation should also be stored in json. I think that a fairly general format for representing atomic and molecular data in ITER IMAS, AMNS_data IDS, can serve as a guide here.

P.S. I used git mv for all moved files, but for some reason (too many changes?) git treats some of those files as new.

@vsnever

Copy link
Copy Markdown
MemberAuthor

I've added support for the CHERAB_ATOMIC_DATA environment variable from #416.

The PR #5 in cherab-adas demonstrates how much simpler the subpackage will become after this PR is accepted.

Since #400 and #415 add new atomic data, I will need to make additional changes after they are accepted.

@vsnever

Copy link
Copy Markdown
MemberAuthor

Obviously, this change is too big to make in one PR. I'll break it down into several PRs. The first will affect only the documentation, improving docstrings of the openadas.repository and openadas.install functions and adding respective sections to the docs. The second will split the openadas module into the atomic data repository and the OpenADAS parser modules without adding new functionality. Subsequent PRs will add functions for data manipulation that are not included in OpenADAS and distributed with Cherab.

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@vsnever@jacklovell
, '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

Split the openadas module into atomic repository and OpenADAS parser - #377

Draft
vsnever wants to merge 28 commits into
cherab:developmentfrom
vsnever:enhancement/atomic_data_repository
Draft

Split the openadas module into atomic repository and OpenADAS parser#377
vsnever wants to merge 28 commits into
cherab:developmentfrom
vsnever:enhancement/atomic_data_repository

Conversation

@vsnever

@vsnevervsnever commented Aug 25, 2022

Copy link
Copy Markdown
Member

As discussed in #352 and #364, the user should be able to mix atomic data from different providers in a single local repository. In particular, some data such as the dictionary of spectral line wavelengths and Gaunt factors for bremsstrahlung, which are already distributed, or will be distributed with Cherab, are not taken from OpenADAS. Therefore, following @CnlPepper's advice, this PR splits the old opeanadas module into two components: the atomic module for working with a local json repository, and the new openadas module for parsing ADAS files and installing them in a local repository.

The list of changes includes:

  1. openadas.repository is moved to atomic.repository,
  2. openadas.rates is moved to atomic.rates,
  3. openadas/openadas.py is moved to atomic/atomicdata.py and OpenADAS() class is renamed to AtomicData().
  4. Default path to atomic data repository changed to ~/.cherab/atomicdata/default_repository.
  5. For backward compatibility, openadas.repository, openadas.rates and openadas.OpenADAS() now redirect to atomic.repository, atomic.rates and atomic.AtomicData() respectively.
  6. All AtomicData() methods now search for the isotope data, and fallback to the element data only if the isotope data is missing. This behaviour is controlled by the rate_element_fallback argument, which is set to True by default.
  7. Docstrings of the functions in the atomic.repository and openadas.install are improved. The new sections "Atomic data repository" and "Open-ADAS" are added to the documentation under the "Atomic Data" section.
  8. All demos are updated to use the new AtomicData() interface.

Of course, the format for representing the atomic rates in the local repository is very specific to ADAS. In the future, this format can be generalised. For example, parameters such as interpolation type or the order of coordinates for interpolation should also be stored in json. I think that a fairly general format for representing atomic and molecular data in ITER IMAS, AMNS_data IDS, can serve as a guide here.

P.S. I used git mv for all moved files, but for some reason (too many changes?) git treats some of those files as new.

@vsnever

Copy link
Copy Markdown
MemberAuthor

I've added support for the CHERAB_ATOMIC_DATA environment variable from #416.

The PR #5 in cherab-adas demonstrates how much simpler the subpackage will become after this PR is accepted.

Since #400 and #415 add new atomic data, I will need to make additional changes after they are accepted.

@vsnever

Copy link
Copy Markdown
MemberAuthor

Obviously, this change is too big to make in one PR. I'll break it down into several PRs. The first will affect only the documentation, improving docstrings of the openadas.repository and openadas.install functions and adding respective sections to the docs. The second will split the openadas module into the atomic data repository and the OpenADAS parser modules without adding new functionality. Subsequent PRs will add functions for data manipulation that are not included in OpenADAS and distributed with Cherab.

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@vsnever@jacklovell
, '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

Split the openadas module into atomic repository and OpenADAS parser - #377

Draft
vsnever wants to merge 28 commits into
cherab:developmentfrom
vsnever:enhancement/atomic_data_repository
Draft

Split the openadas module into atomic repository and OpenADAS parser#377
vsnever wants to merge 28 commits into
cherab:developmentfrom
vsnever:enhancement/atomic_data_repository

Conversation

@vsnever

@vsnevervsnever commented Aug 25, 2022

Copy link
Copy Markdown
Member

As discussed in #352 and #364, the user should be able to mix atomic data from different providers in a single local repository. In particular, some data such as the dictionary of spectral line wavelengths and Gaunt factors for bremsstrahlung, which are already distributed, or will be distributed with Cherab, are not taken from OpenADAS. Therefore, following @CnlPepper's advice, this PR splits the old opeanadas module into two components: the atomic module for working with a local json repository, and the new openadas module for parsing ADAS files and installing them in a local repository.

The list of changes includes:

  1. openadas.repository is moved to atomic.repository,
  2. openadas.rates is moved to atomic.rates,
  3. openadas/openadas.py is moved to atomic/atomicdata.py and OpenADAS() class is renamed to AtomicData().
  4. Default path to atomic data repository changed to ~/.cherab/atomicdata/default_repository.
  5. For backward compatibility, openadas.repository, openadas.rates and openadas.OpenADAS() now redirect to atomic.repository, atomic.rates and atomic.AtomicData() respectively.
  6. All AtomicData() methods now search for the isotope data, and fallback to the element data only if the isotope data is missing. This behaviour is controlled by the rate_element_fallback argument, which is set to True by default.
  7. Docstrings of the functions in the atomic.repository and openadas.install are improved. The new sections "Atomic data repository" and "Open-ADAS" are added to the documentation under the "Atomic Data" section.
  8. All demos are updated to use the new AtomicData() interface.

Of course, the format for representing the atomic rates in the local repository is very specific to ADAS. In the future, this format can be generalised. For example, parameters such as interpolation type or the order of coordinates for interpolation should also be stored in json. I think that a fairly general format for representing atomic and molecular data in ITER IMAS, AMNS_data IDS, can serve as a guide here.

P.S. I used git mv for all moved files, but for some reason (too many changes?) git treats some of those files as new.

@vsnever

Copy link
Copy Markdown
MemberAuthor

I've added support for the CHERAB_ATOMIC_DATA environment variable from #416.

The PR #5 in cherab-adas demonstrates how much simpler the subpackage will become after this PR is accepted.

Since #400 and #415 add new atomic data, I will need to make additional changes after they are accepted.

@vsnever

Copy link
Copy Markdown
MemberAuthor

Obviously, this change is too big to make in one PR. I'll break it down into several PRs. The first will affect only the documentation, improving docstrings of the openadas.repository and openadas.install functions and adding respective sections to the docs. The second will split the openadas module into the atomic data repository and the OpenADAS parser modules without adding new functionality. Subsequent PRs will add functions for data manipulation that are not included in OpenADAS and distributed with Cherab.

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@vsnever@jacklovell
, '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

Split the openadas module into atomic repository and OpenADAS parser - #377

Draft
vsnever wants to merge 28 commits into
cherab:developmentfrom
vsnever:enhancement/atomic_data_repository
Draft

Split the openadas module into atomic repository and OpenADAS parser#377
vsnever wants to merge 28 commits into
cherab:developmentfrom
vsnever:enhancement/atomic_data_repository

Conversation

@vsnever

@vsnevervsnever commented Aug 25, 2022

Copy link
Copy Markdown
Member

As discussed in #352 and #364, the user should be able to mix atomic data from different providers in a single local repository. In particular, some data such as the dictionary of spectral line wavelengths and Gaunt factors for bremsstrahlung, which are already distributed, or will be distributed with Cherab, are not taken from OpenADAS. Therefore, following @CnlPepper's advice, this PR splits the old opeanadas module into two components: the atomic module for working with a local json repository, and the new openadas module for parsing ADAS files and installing them in a local repository.

The list of changes includes:

  1. openadas.repository is moved to atomic.repository,
  2. openadas.rates is moved to atomic.rates,
  3. openadas/openadas.py is moved to atomic/atomicdata.py and OpenADAS() class is renamed to AtomicData().
  4. Default path to atomic data repository changed to ~/.cherab/atomicdata/default_repository.
  5. For backward compatibility, openadas.repository, openadas.rates and openadas.OpenADAS() now redirect to atomic.repository, atomic.rates and atomic.AtomicData() respectively.
  6. All AtomicData() methods now search for the isotope data, and fallback to the element data only if the isotope data is missing. This behaviour is controlled by the rate_element_fallback argument, which is set to True by default.
  7. Docstrings of the functions in the atomic.repository and openadas.install are improved. The new sections "Atomic data repository" and "Open-ADAS" are added to the documentation under the "Atomic Data" section.
  8. All demos are updated to use the new AtomicData() interface.

Of course, the format for representing the atomic rates in the local repository is very specific to ADAS. In the future, this format can be generalised. For example, parameters such as interpolation type or the order of coordinates for interpolation should also be stored in json. I think that a fairly general format for representing atomic and molecular data in ITER IMAS, AMNS_data IDS, can serve as a guide here.

P.S. I used git mv for all moved files, but for some reason (too many changes?) git treats some of those files as new.

@vsnever

Copy link
Copy Markdown
MemberAuthor

I've added support for the CHERAB_ATOMIC_DATA environment variable from #416.

The PR #5 in cherab-adas demonstrates how much simpler the subpackage will become after this PR is accepted.

Since #400 and #415 add new atomic data, I will need to make additional changes after they are accepted.

@vsnever

Copy link
Copy Markdown
MemberAuthor

Obviously, this change is too big to make in one PR. I'll break it down into several PRs. The first will affect only the documentation, improving docstrings of the openadas.repository and openadas.install functions and adding respective sections to the docs. The second will split the openadas module into the atomic data repository and the OpenADAS parser modules without adding new functionality. Subsequent PRs will add functions for data manipulation that are not included in OpenADAS and distributed with Cherab.

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@vsnever@jacklovell
, '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

Split the openadas module into atomic repository and OpenADAS parser - #377

Draft
vsnever wants to merge 28 commits into
cherab:developmentfrom
vsnever:enhancement/atomic_data_repository
Draft

Split the openadas module into atomic repository and OpenADAS parser#377
vsnever wants to merge 28 commits into
cherab:developmentfrom
vsnever:enhancement/atomic_data_repository

Conversation

@vsnever

@vsnevervsnever commented Aug 25, 2022

Copy link
Copy Markdown
Member

As discussed in #352 and #364, the user should be able to mix atomic data from different providers in a single local repository. In particular, some data such as the dictionary of spectral line wavelengths and Gaunt factors for bremsstrahlung, which are already distributed, or will be distributed with Cherab, are not taken from OpenADAS. Therefore, following @CnlPepper's advice, this PR splits the old opeanadas module into two components: the atomic module for working with a local json repository, and the new openadas module for parsing ADAS files and installing them in a local repository.

The list of changes includes:

  1. openadas.repository is moved to atomic.repository,
  2. openadas.rates is moved to atomic.rates,
  3. openadas/openadas.py is moved to atomic/atomicdata.py and OpenADAS() class is renamed to AtomicData().
  4. Default path to atomic data repository changed to ~/.cherab/atomicdata/default_repository.
  5. For backward compatibility, openadas.repository, openadas.rates and openadas.OpenADAS() now redirect to atomic.repository, atomic.rates and atomic.AtomicData() respectively.
  6. All AtomicData() methods now search for the isotope data, and fallback to the element data only if the isotope data is missing. This behaviour is controlled by the rate_element_fallback argument, which is set to True by default.
  7. Docstrings of the functions in the atomic.repository and openadas.install are improved. The new sections "Atomic data repository" and "Open-ADAS" are added to the documentation under the "Atomic Data" section.
  8. All demos are updated to use the new AtomicData() interface.

Of course, the format for representing the atomic rates in the local repository is very specific to ADAS. In the future, this format can be generalised. For example, parameters such as interpolation type or the order of coordinates for interpolation should also be stored in json. I think that a fairly general format for representing atomic and molecular data in ITER IMAS, AMNS_data IDS, can serve as a guide here.

P.S. I used git mv for all moved files, but for some reason (too many changes?) git treats some of those files as new.

@vsnever

Copy link
Copy Markdown
MemberAuthor

I've added support for the CHERAB_ATOMIC_DATA environment variable from #416.

The PR #5 in cherab-adas demonstrates how much simpler the subpackage will become after this PR is accepted.

Since #400 and #415 add new atomic data, I will need to make additional changes after they are accepted.

@vsnever

Copy link
Copy Markdown
MemberAuthor

Obviously, this change is too big to make in one PR. I'll break it down into several PRs. The first will affect only the documentation, improving docstrings of the openadas.repository and openadas.install functions and adding respective sections to the docs. The second will split the openadas module into the atomic data repository and the OpenADAS parser modules without adding new functionality. Subsequent PRs will add functions for data manipulation that are not included in OpenADAS and distributed with Cherab.

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@vsnever@jacklovell