<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="http://mengxiangxi.info/BLOG/feed.xml" rel="self" type="application/atom+xml" /><link href="http://mengxiangxi.info/BLOG/" rel="alternate" type="text/html" /><updated>2026-02-15T08:04:59+00:00</updated><id>http://mengxiangxi.info/BLOG/feed.xml</id><title type="html">Minimum Blog</title><subtitle>A very simple blog site to track ideas using MarkDown.
</subtitle><author><name>Xiangxi Meng</name><email>https://mengxiangxi.info/</email></author><entry><title type="html">How I Generated the Cue File of Sound Tracks from a Ripped CD</title><link href="http://mengxiangxi.info/BLOG/coding/2026/02/15/Generate-Cue-File-Using-LLM.html" rel="alternate" type="text/html" title="How I Generated the Cue File of Sound Tracks from a Ripped CD" /><published>2026-02-15T00:00:00+00:00</published><updated>2026-02-15T00:00:00+00:00</updated><id>http://mengxiangxi.info/BLOG/coding/2026/02/15/Generate-Cue-File-Using-LLM</id><content type="html" xml:base="http://mengxiangxi.info/BLOG/coding/2026/02/15/Generate-Cue-File-Using-LLM.html"><![CDATA[<h2 id="background">Background</h2>

<p>Ripping CDs to digital audio files has become a routine task for audiophiles and music collectors. Tools like Exact Audio Copy (EAC), dbpoweramp, or even iTunes make it trivial to extract audio tracks from CDs and convert them to various formats. However, creating the corresponding cue files - those essential metadata files that preserve track boundaries, titles, performers, and timing information - remains a surprisingly tiresome, manual process.</p>

<p>When you rip a CD, you typically get the audio files, but the detailed track information embedded in cue files requires painstaking data entry. You need to type in each track title, performer names, composer information, and precise timing indexes - all information usually found only in the physical album pamphlet. This process has been poorly automated, especially for classical or obscure recordings that aren’t indexed in mainstream databases like Gracenote, MusicBrainz, or Discogs.</p>

<h2 id="the-problem">The problem</h2>

<p>Recently, I purchased a CD album from a used record store in Osaka’s famous Den Den Town - DENON COCO-7418 and COCO-7419, featuring Lorin Maazel conducting the Berlin German Opera Orchestra in Georges Bizet’s <em>Carmen</em>.</p>

<p>This particular recording from 1970 is legendary among opera enthusiasts. It features Anna Moffo as Carmen, Franco Corelli as Don José, Piero Cappuccilli as Escamillo, and Arleen Auger as Micaëla. The performances are exceptional, capturing the passion and drama of Bizet’s masterpiece with remarkable clarity.</p>

<p>Here’s the problem: despite being a famous recording, these catalog numbers (COCO-7418/7419) weren’t indexed in any mainstream metadata platforms. No automatic lookup could provide me with the detailed track information I needed for proper cue files.</p>

<p>I was left with:</p>
<ul>
  <li>A folder of ripped WAV files (Track 01, Track 02, etc.)</li>
  <li>The original album pamphlet with detailed Japanese descriptions and French track titles</li>
  <li>No automated way to bridge this gap</li>
</ul>

<h2 id="the-traditional-approach">The traditional approach</h2>

<p>The traditional approach would have been:</p>

<ol>
  <li>Open the pamphlet</li>
  <li>Read each track’s information</li>
  <li>Type it into a text editor or cue file generator</li>
  <li>Use audio software to determine exact track timing and indexes</li>
  <li>Calculate precise INDEX markers for sub-tracks</li>
  <li>Repeat for both CDs</li>
</ol>

<p>This process is tedious, error-prone, and frankly, boring. For a 2-CD opera with 31 total tracks and multiple INDEX markers within many tracks, this could easily take 2-3 hours of concentrated work.</p>

<p><img src="/BLOG/assets/images/2026-02-15-Generate-Cue-File-Using-LLM/pamphlet.png" alt="Album Pamphlet" /></p>

<p><em>Figure 1: The album pamphlet containing all track information in Japanese and French</em></p>

<h2 id="the-solution">The solution</h2>

<p>I realized that while I didn’t want to spend hours typing, I could leverage modern AI tools to do the heavy lifting. Here’s how I approached it:</p>

<h3 id="step-1-digitize-the-pamphlet">Step 1: Digitize the pamphlet</h3>

<p>First, I scanned the album pamphlet into my computer. This gave me high-quality images of all the track information, performer credits, and timing details.</p>

<h3 id="step-2-ocr-with-gemini">Step 2: OCR with Gemini</h3>

<p>Next, I used Google’s Gemini-2.5-flash model to perform OCR (Optical Character Recognition) on the scanned images. I uploaded the pamphlet images and asked Gemini to extract all the text, preserving both the Japanese and French content.</p>

<p>The result was a clean text file (<code class="language-plaintext highlighter-rouge">info.txt</code>) containing:</p>
<ul>
  <li>Album title, composer, and performers</li>
  <li>Track titles in both Japanese and French</li>
  <li>Timing information and INDEX markers</li>
  <li>Act/scene divisions for the opera</li>
</ul>

<p>This step took about 5 minutes, and the accuracy was impressive - Gemini handled the mixed Japanese-French text beautifully.</p>

<h3 id="step-3-prepare-the-audio-files">Step 3: Prepare the audio files</h3>

<p>I organized my ripped WAV files into two directories:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Carmen_LorinMaazel/
├── DISC1/
│   ├── CD Track 01.wav
│   ├── CD Track 02.wav
│   └── ...
├── DISC2/
│   ├── CD Track 01.wav
│   ├── CD Track 02.wav
│   └── ...
├── info.txt (from OCR)
</code></pre></div></div>

<h3 id="step-4-ask-the-ai-agent-for-help">Step 4: Ask the AI agent for help</h3>

<p>This is where the magic happened. I opened my AI coding assistant and had a conversation:</p>

<p><strong>Me</strong>: “Please help me generate cue files for my ripped CD. I have WAV files in DISC1 and DISC2 directories, and all the album information in info.txt. Can you create detailed cue files with proper track titles, INDEX markers, and performer information?”</p>

<p>That was it. One simple prompt.</p>

<h3 id="what-happened-next">What happened next</h3>

<p>The AI agent understood my request and immediately:</p>

<ol>
  <li><strong>Read the info.txt file</strong> to understand the album structure</li>
  <li><strong>Explored the directory</strong> to see what WAV files were available</li>
  <li><strong>Extracted metadata</strong> from each WAV file using ffprobe to get precise durations</li>
  <li><strong>Correlated everything</strong> - matching the pamphlet information with the actual audio files</li>
  <li><strong>Generated two complete cue files</strong> with all the proper formatting</li>
</ol>

<p>I didn’t need to explain:</p>
<ul>
  <li>What a cue file format looks like</li>
  <li>How to extract audio metadata</li>
  <li>How to calculate INDEX markers</li>
  <li>The relationship between the pamphlet and the audio files</li>
</ul>

<p>The agent figured all of that out on its own.</p>

<p><img src="/BLOG/assets/images/2026-02-15-Generate-Cue-File-Using-LLM/foobar.png" alt="Generated Cue Files in Foobar" /></p>

<p><em>Figure 2: The generated cue files loaded in foobar2000, showing all tracks with proper metadata</em></p>

<h2 id="the-result">The result</h2>

<p>Two minutes later, I had two complete cue files:</p>

<p><strong>DISC 1</strong> (COCO-7418): 17 tracks covering Prélude, Act I, and most of Act II
<strong>DISC 2</strong> (COCO-7419): 14 tracks covering the remainder through Act IV</p>

<p>Each cue file included:</p>
<ul>
  <li>Proper album and composer attribution</li>
  <li>Correct track numbering</li>
  <li>French opera titles (the original language)</li>
  <li>Performer names for each vocal number</li>
  <li>Precise INDEX markers for sub-tracks</li>
  <li>File references matching my actual WAV filenames</li>
</ul>

<p>The output was ready to use immediately - no manual corrections needed.</p>

<h2 id="why-this-approach-works">Why this approach works</h2>

<h3 id="natural-interaction">Natural interaction</h3>

<p>I didn’t need to learn any special tools or write scripts. I just had a conversation with my AI assistant in plain English. The agent understood the context, figured out what needed to be done, and did it.</p>

<h3 id="handles-obscure-recordings">Handles obscure recordings</h3>

<p>This method shines where automated services fail. Mainstream databases focus on popular releases, leaving classical recordings, Japanese pressings, and rare albums poorly indexed. By combining OCR (to digitize the pamphlet) with an AI agent (to process that information), this method works with any recording, provided you have the original documentation.</p>

<h3 id="preserves-original-metadata">Preserves original metadata</h3>

<p>Rather than relying on crowd-sourced databases that may contain errors or incomplete information, this method captures the exact information from the original album pamphlet.</p>

<h3 id="massive-time-savings">Massive time savings</h3>

<p>For a multi-disc set like this opera (2 CDs, 31 tracks), what would have taken 2-3 hours manually took about 10 minutes total:</p>
<ul>
  <li>5 minutes: Scanning pamphlet + OCR with Gemini</li>
  <li>2 minutes: AI agent generating the cue files</li>
  <li>3 minutes: Verification and loading into my music player</li>
</ul>

<h2 id="how-you-can-do-this-too">How you can do this too</h2>

<p>If you want to replicate this approach, here’s what you need:</p>

<p><strong>Tools:</strong></p>
<ul>
  <li>A scanner or phone camera (for digitizing the pamphlet)</li>
  <li>An OCR tool (Gemini-2.5-flash or similar)</li>
  <li>An AI coding assistant</li>
  <li>Your favorite CD ripping software</li>
  <li>ffprobe (part of FFmpeg) - though the AI agent can handle this</li>
</ul>

<p><strong>Workflow:</strong></p>
<ol>
  <li>Rip your CDs to digital audio files</li>
  <li>Scan the album pamphlet/liner notes</li>
  <li>Use Gemini (or similar) to OCR the scanned images into text</li>
  <li>Organize everything in a folder</li>
  <li>Ask your AI assistant: “Please generate cue files for my CD rip using the information from the pamphlet”</li>
  <li>Verify and enjoy!</li>
</ol>

<h2 id="real-world-tips">Real-world tips</h2>

<p>Based on my experience, here are some practical suggestions:</p>

<p><strong>Scanning quality</strong>: The better your scan, the better the OCR results. I used 300 DPI and made sure the text was clear and well-lit.</p>

<p><strong>OCR verification</strong>: After Gemini performs OCR, quickly scan the output for any obvious errors. In my case, the Japanese-French mixed text was handled perfectly, but it’s always good to check.</p>

<p><strong>Folder organization</strong>: Keep everything together - audio files, OCR text, and original images. This makes it easier for the AI agent to understand the context.</p>

<p><strong>Be specific in your request</strong>: While my simple prompt worked well, you could add more specific instructions if needed:</p>
<ul>
  <li>“Include INDEX markers for sub-tracks”</li>
  <li>“Use French titles as the primary track names”</li>
  <li>“List performer names for each vocal number”</li>
</ul>

<h2 id="limitations-and-considerations">Limitations and considerations</h2>

<p>While this approach is powerful, it has some limitations:</p>

<ol>
  <li>
    <p><strong>Requires physical documentation</strong>: You need the original album pamphlet or access to track information. Without source documentation, the agent can’t work effectively.</p>
  </li>
  <li>
    <p><strong>OCR quality matters</strong>: Poor scans or unusual fonts can lead to OCR errors. Always verify the OCR output.</p>
  </li>
  <li>
    <p><strong>Language considerations</strong>: Gemini handled Japanese-French mixed text beautifully, but extremely rare languages or poor printing quality could pose challenges.</p>
  </li>
  <li>
    <p><strong>Verification recommended</strong>: Always spot-check the generated cue files, especially for critical INDEX markers.</p>
  </li>
</ol>

<h2 id="conclusion">Conclusion</h2>

<p>Creating cue files for ripped CDs has been a persistent pain point for digital music collectors. Traditional manual data entry is time-consuming and error-prone, while automated services often fail for obscure or specialized recordings.</p>

<p>By combining modern AI tools - Gemini for OCR and an AI coding assistant for processing - I transformed a 2-3 hour manual task into a 10-minute workflow. The resulting cue files for my DENON COCO-7418/7419 recording of <em>Carmen</em> were accurate, detailed, and ready to use immediately.</p>

<p>This approach is particularly valuable for:</p>
<ul>
  <li>Classical music collectors with complex indexing needs</li>
  <li>Fans of Japanese releases seeking proper documentation</li>
  <li>Anyone with rare or obscure recordings not in mainstream databases</li>
</ul>

<p>The key insight is that we don’t need specialized tools for every problem. Sometimes, a general-purpose AI assistant that can understand context and figure things out is more effective than a dedicated tool that requires manual configuration.</p>

<p>My <em>Carmen</em> recording now has proper cue files, preserving all the detail from the original album pamphlet while maintaining the convenience of digital audio files. The workflow was smooth, the interaction felt natural, and the results are perfect.</p>

<hr />

<p><em>This recording (DENON COCO-7418/7419) features Lorin Maazel conducting the Berlin German Opera Orchestra, with Anna Moffo, Franco Corelli, Piero Cappuccilli, and Arleen Auger. Recorded in Berlin, Autumn 1970.</em></p>]]></content><author><name>Xiangxi Meng</name><email>https://mengxiangxi.info/</email></author><category term="Coding" /><category term="solution" /><category term="ai-generated" /><summary type="html"><![CDATA[Ripping CDs to digital audio files has become a routine task for audiophiles and music collectors. Tools like Exact Audio Copy (EAC), dbpoweramp, or even iTunes make it trivial to extract audio tracks from CDs and convert them to various formats. However, creating the corresponding cue files - those essential metadata files that preserve track boundaries, titles, performers, and timing information - remains a surprisingly tiresome, manual process.]]></summary></entry><entry><title type="html">The checklist for setting up a new Windows PC</title><link href="http://mengxiangxi.info/BLOG/coding/2025/09/07/New-Windows-PC.html" rel="alternate" type="text/html" title="The checklist for setting up a new Windows PC" /><published>2025-09-07T00:00:00+00:00</published><updated>2025-09-07T00:00:00+00:00</updated><id>http://mengxiangxi.info/BLOG/coding/2025/09/07/New-Windows-PC</id><content type="html" xml:base="http://mengxiangxi.info/BLOG/coding/2025/09/07/New-Windows-PC.html"><![CDATA[<p>When setting up a new Windows PC, I usually follow the checklist below. It is mainly for my own reference, but you may find it useful as well.</p>

<blockquote>
  <p><strong>Updated 20260102</strong> Migirating to various softwares</p>
</blockquote>

<ul>
  <li>Install necessary updates</li>
  <li>Add network destinations</li>
  <li>Move Downloads to D:/, Remove shortcuts to Music and Pictures; Remove startup fixed icons.</li>
  <li><strong>Clash Verge</strong>, sync via webdav</li>
  <li>Download <strong>Firefox</strong> via Edge, log in, set as default, fix to task bar</li>
  <li><strong>Bitwarden</strong></li>
  <li><strong>Everything</strong>
Exclude:
    <div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>%LOCALAPPDATA%/QNAP
%APPDATA%/Microsoft
</code></pre></div>    </div>
  </li>
  <li><strong>Logitech Logi Options +</strong>, set up mouse</li>
  <li><strong>Obsidian</strong>, WebDAV sync up with <code class="language-plaintext highlighter-rouge">Remotely Sync</code> addon.</li>
  <li><strong>Tailscale</strong>, install and log in</li>
  <li><strong>Qsync</strong>, establish links, excldue the following
    <div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>*.lnk
*.rdp
ShareX.url
*\.venv\*
*\node_modules\*
</code></pre></div>    </div>
  </li>
  <li>Activate Windows</li>
  <li>Windows settings
    <ul>
      <li>Power: No sleep</li>
      <li>Desktop icons</li>
      <li>Link bluetooth earphone</li>
      <li>Enable clipboard history (Winkey+V)</li>
      <li>Developer Options
        <ul>
          <li>Show file extension, show full path</li>
          <li>Enable remote desktop</li>
          <li>Set Windows Terminal as the default terminal.</li>
          <li>Use sudo</li>
        </ul>
      </li>
      <li>Add Scan Utility</li>
      <li>Add Windows function: Hyper-V</li>
      <li>Add Printer, setup default (double side)</li>
    </ul>
  </li>
  <li>Remove Edge from the startup</li>
  <li><a href="https://support.microsoft.com/en-us/office/turn-off-disable-or-uninstall-onedrive-f32a17ce-3336-40fe-9c38-6efb09f944b0">Uninstall OneDrive</a></li>
  <li><strong>VSCode</strong>, log in, and sync</li>
  <li><strong>Rime</strong>, install, set up sync (as in the BLOG post)</li>
  <li>Add “AutoLock.exe” to startup (<code class="language-plaintext highlighter-rouge">shell:startup</code> from Run command)</li>
  <li><strong>Thunderbird</strong> (Edit <code class="language-plaintext highlighter-rouge">profiles.ini</code>, and use the <code class="language-plaintext highlighter-rouge">-p</code> flag to start Thunderbird)</li>
  <li><strong>Wechat</strong>, set the file location</li>
  <li><strong>Office</strong>, add personal templates</li>
  <li><strong>7zip</strong> (Not really necessary with Windows 10, or can be replaced with <a href="https://github.com/M2Team/NanaZip"><code class="language-plaintext highlighter-rouge">NanaZip</code></a>)</li>
  <li><strong>AnyDesk</strong>, set up stand-alone password, update address</li>
  <li><strong>Sunlogin</strong>, switch to long-term password, update address ==&gt; <strong>AweSunRemote</strong></li>
  <li><del><strong>Fiddler Classic</strong>, exempt all Windows Apps.</del> Now integrated in <code class="language-plaintext highlighter-rouge">Clash Verge</code>.</li>
  <li><strong>CAS Preview</strong> via Microsoft Store</li>
  <li><del>Log in to <strong>Microsoft To Do</strong>, pin to task bar </del></li>
  <li><strong>Sumutra PDF</strong></li>
  <li><strong>Tencent Meeting</strong></li>
  <li><strong>Cherry Studio</strong>, retrive from WebDAV</li>
  <li><strong>TeXLive</strong>, can be installed via mirror</li>
  <li><del><strong>MobaXterm</strong></del> <strong>Tabby</strong>, WebDAV sync using <code class="language-plaintext highlighter-rouge">Settings Sync</code> plugin.</li>
  <li><strong>Git for Windows</strong></li>
  <li><strong>GitHub Desktop</strong></li>
  <li>Renew the ssh key. Set the ssh key in GitHub.</li>
  <li><del><strong>Anaconda</strong></del> <strong>MiniConda</strong></li>
  <li><strong>MATLAB</strong>, add custom packages to the path variable</li>
  <li><strong>Origin</strong>, set the User File Folder to the sync folder.</li>
  <li><strong>Zotero</strong>, log in, set sync with WebDAV, cancel sync with Zotero Cloud.</li>
  <li><strong>Calibre</strong></li>
  <li><strong>R</strong></li>
  <li><strong>RStudio</strong></li>
  <li>Import Hyper-V VM. Set up router and shared folder.</li>
  <li><strong>MicroDicom</strong></li>
  <li><strong>3D Slicer</strong></li>
  <li><strong>ITK-SNAP</strong></li>
  <li><strong>Tencent Docs</strong></li>
  <li><strong>Adobe Acrobat</strong></li>
  <li><strong>Adobe Photoshop</strong></li>
  <li><strong>Adobe Illustrator</strong></li>
  <li><strong>Fiji ImageJ</strong></li>
  <li><del><strong>monolixSuite</strong></del></li>
  <li><strong>Feishu</strong></li>
</ul>]]></content><author><name>Xiangxi Meng</name><email>https://mengxiangxi.info/</email></author><category term="Coding" /><category term="cheat sheet" /><summary type="html"><![CDATA[When setting up a new Windows PC, I usually follow the checklist below. It is mainly for my own reference, but you may find it useful as well.]]></summary></entry><entry><title type="html">How I used the LLM to streamline my BibTeX formatting</title><link href="http://mengxiangxi.info/BLOG/coding/2025/05/11/Use-LLM-to-Format-BibTeX.html" rel="alternate" type="text/html" title="How I used the LLM to streamline my BibTeX formatting" /><published>2025-05-11T00:00:00+00:00</published><updated>2025-05-11T00:00:00+00:00</updated><id>http://mengxiangxi.info/BLOG/coding/2025/05/11/Use-LLM-to-Format-BibTeX</id><content type="html" xml:base="http://mengxiangxi.info/BLOG/coding/2025/05/11/Use-LLM-to-Format-BibTeX.html"><![CDATA[<h2 id="the-problem-definition">The problem definition</h2>

<p>I have a <a href="https://mengxiangxi.info/Link/uexplorer.html">webpage</a> to keep track of all peer-reviewed papers I could find on the world’s first total-body PET scanner, uEXPLORER. On this webpage, I used a javascript code called <a href="https://github.com/pcooksey/bibtex-js">bibtex_js</a> to render the bibliography from a bibtex file that I manually maintain. Over the years, I have developed a set of rules and conventions to build the bibliography entries, assigning different meanings and functions to different fields.</p>

<p>For a certain paper that I want to include in my bibliography, <a href="https://link.springer.com/article/10.1007/s40291-025-00778-6">like this one</a>, I will add the following entry to my bibtex file:</p>

<div class="language-bibtex highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nc">@article</span><span class="p">{</span><span class="nl">filippi2025fapitargeted</span><span class="p">,</span>
<span class="na">title</span><span class="p">=</span><span class="s">{FAPI-targeted molecular imaging: Transforming insights into post-ischemic myocardial remodeling?}</span><span class="p">,</span>
<span class="na">author</span><span class="p">=</span><span class="s">{Filippi, Luca and Perrone, Marco Alfonso and Schillaci, Orazio}</span><span class="p">,</span>
<span class="na">journal</span><span class="p">=</span><span class="s">{Molecular Diagnostics \&amp; Therapy}</span><span class="p">,</span>
<span class="na">year</span><span class="p">=</span><span class="s">{Just Accepted}</span><span class="p">,</span>
<span class="na">doi</span><span class="p">=</span><span class="s">{10.1007/s40291-025-00778-6}</span><span class="p">,</span>
<span class="na">pmid</span><span class="p">=</span><span class="s">{40263181}</span><span class="p">,</span>
<span class="na">institution</span><span class="p">=</span><span class="s">{Tor Vergata University Hospital}</span><span class="p">,</span>
<span class="na">keywords</span><span class="p">=</span><span class="s">{FAPI; cardiovascular}</span>
<span class="p">}</span>
</code></pre></div></div>

<p>Then, the javascript code will render the entry as follows:</p>

<blockquote>
  <p><strong>FAPI-targeted molecular imaging: Transforming insights into post-ischemic myocardial remodeling?</strong>
Luca Filippi, Marco Alfonso  Perrone, Orazio Schillaci. <em>Molecular Diagnostics &amp; Therapy</em>
<a href="https://dx.doi.org/10.1007/s40291-025-00778-6">[doi link]</a> <a href="https://pubmed.ncbi.nlm.nih.gov/40263181/">[PubMed]</a> | Tor Vergata University Hospital | <strong>Tag:</strong> FAPI; cardiovascular</p>
</blockquote>

<h2 id="manual-workflow">Manual Workflow</h2>

<p>In my routine workflow, I usually first export a preliminary bibtex entry using the Google Scholar <a href="https://chromewebstore.google.com/detail/ldipcbpaocekfooobnbcddclnhejkcpn">button</a> browser addon. Then, I retrieve various information from the publisher’s site and <a href="https://pubmed.ncbi.nlm.nih.gov/">PubMed</a>, gradually filling out all fields.</p>

<p>The journal title should be in the Sentence case; the author names should not be abbreviated; the institution names should be concise and consistent; the keywords should be reflect the tracers, the diseases, and the type of paper. Multiple rules apply which requires complicated analysis.</p>

<p>Admittedly, this is slow and distractive. My original intention was to keep a record of the papers I have read, but I found myself spending more time on formatting than on reading.</p>

<h2 id="how-ai-helps">How AI helps</h2>

<p>Things changed when I realized that I could build an agent using some certain MCPs (model context protocol). There is one called “fetch” which allows the LLM to retrieve information from a webpage. There is another called “PubMed MCP” which can communicate with the PubMed website. Those are almost all I need.</p>

<p>Thus, I first wrote my own version of rules and steps as a prompt. I asked Gemini to generated lists of the known keywords and institutions from <a href="https://mengxiangxi.info/bibliography/uExplorer.bib">my existing bibtex file</a>. My human-intelligence version of the prompt is as follows:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>I am going to provide you a link to a certain web page, or other sources indicating a specific paper. Your task is to generate the bibtex style citation entry of this article. The entry should include the title, author, journal, year, volume, number, pages, doi, pmid, institution, and keywords.

- Please closely follow the styles in the final "=== Example BibTeX File===" section (the example file).
- The citekey should consist the last name of the author+ year + two to three key words in the title
- If the paper has not been assigned the final page number (such as early access), the "year" should be "Just Accepted".
- If an article is determined as "Just Accepted", you should not leave blank "pages", "number", or "volume" filed, rather, you should remove these entries. However, "doi", "pmid", and "institution" fields should always be there even if you failed to determine their values.
- The keywords has to be within the ones already contained in the example webpage. Do not add new words unless absolutely necessary. Hint: You can consult the list of all keywords and all institutions names provided in the "=== Lists ===" section before proceeding.
- The keywords should contain the tracer name (EXCEPT "FDG"), the related disease (if clearly defined), and the related areas, among others. It should NOT contain too general terms such as "total body", "PET".
- The journal names should be spelled in the full format. The Journal Name Should be Capitalized.
- Pay attention to the superscript and subscript, use html elements to wrap around them. The title should be in the sentence case.
- Pay attention to the author names, names that are already contained in the example webpage should have the same format. The given names should not be abbreviated to only one letter. For example, "Given, F." should be "Given, First". However, middle names can be abbreviated when necessary, in which case, omit the period.
- You can use a tool to look up pubmed for the pmid when necessary.
- Do not use leading spaces in formatting. Use as few spaces as possible. Avoid any tabs.
- If there are multiple institutions, or keywords, connect them with a semicolon.

STEPS:

1. Fully appreciate the rules, understand all requirements and exceptions.
2. Retrieve the information from the article link provided. Determine the title, authors (full name), journal, page, number volume, read throught the abstract. Hint: directly fetch the url.
3. Generate the citekey.
4. Format the title in sentence case and make sure the subscripts and superscripts are taken care of.
5. Generate the author list, check if the Given Names are complete. Check if the format of the authors are consistent with the names already in the example bib file. Double check the author list with the source, to make sure no errors are introduced during formatting.
6. Format the journal name.
7. Check if it a "Just Accepted", if so, remove page, number, and volume.
8. Generate doi and pmid.
9.  Analyze the institutions, format them according to the institutions in the example file. Do not include the university if the instution is an affiliated hospital.
10. Choose and format keywords. No need to capitalize the first letter in the keywords.

=== Special Considerations ===

Finally, in the following situations, the following rules have higher priority than other rules:

- The journal name "Journal of Nuclear Medicine" should be "J. Nucl. Med."
- The following institution names should be changed:
{"The First Affiliated Hospital of Shandong First Medical University" should be "Qianfoshan Hospital";}

=== Lists ===

Institutions:
Guangdong People's Hospital; Nanfang Hospital; Ruijin Hospital; University of Bern; 
### more entries omitted ###

Keywords:
novel tracer; lung cancer; immune; PD-L1; [68Ga]Ga-DOTA-PEG2-Asp2-PDL1P; PDL1P; ### more entries omitted ###

=== Example BibTeX File===

@article{zhang2024myocardialmetabolism,
title={Feasibility of shortening scan duration of &lt;sup&gt;18&lt;/sup&gt;F-FDG myocardial metabolism imaging using a total-body PET/CT scanner},
author={Zhang, Xiaochun and Xiang, Zeyin and Wang, Fanghu and Han, Chunlei and Zhang, Qing and Liu, Entao and Yuan, Hui and Jiang, Lei},
journal={EJNMMI Physics},
year={Just Accepted},
doi={10.1186/s40658-024-00689-1},
pmid={39390229},
institution={Guangdong People's Hospital},
category={#Clinical},
keywords={fast; cardiovascular}
}

### more examples omitted ###

</code></pre></div></div>

<p>At this point, I realized that I have another agent specifically designed to optimize the prompts. Thus, I asked this “prompt engineer” to help me optimize the prompt for this task. It suddenly became more logical and clear. After some manual editing, the optimized version looks like this:</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>I want you to generate properly formatted BibTeX citation entries for academic articles based on the links or sources I provide. Each entry must comply fully with the following rules and exceptions. Please follow these steps in order to deliver accurate and consistent results:  

---

## **General Rules for Generating BibTeX Entries**  

### Tools to use

- Use a "fetch_txt" tool to retrieve the full citation details from the provided link.
- Use a "pubmed" tool only if necessary (such as to determine the PMID).

### Formatting Guidelines

1. **Required Citation Components**:  
   - Include the following fields: `title`, `author`, `journal`, `year`, `volume`, `number`, `pages`, `doi`, `pmid`, `institution`, and `keywords`.  
   - If the paper has no final page numbers and is categorized as "Just Accepted," remove the `volume`, `number`, and `pages` fields; however, always include `doi`, `pmid`, and `institution`.

2. **Citekey**:  
   - Format: `&lt;last name of first author&gt;&lt;year&gt;&lt;two-to-three meaningful keywords from the title&gt;`.  
   - Example: If the first author’s last name is "Zhang," the year is "2024," and the title includes "myocardial metabolism imaging," the citekey should be `zhang2024myocardialmetabolism`.

3. **Title Formatting**:  
   - Titles should use **sentence case** (capitalize only the first word and proper nouns).  
   - Handle any superscripts (e.g., `&lt;sup&gt;18&lt;/sup&gt;F`) and subscripts (e.g., `H&lt;sub&gt;2&lt;/sub&gt;O`) using HTML tags.

4. **Author Names**:  
   - Ensure full given names are used, unless they are already standardized in the example file (e.g., "Gu, First" instead of "Gu, F."), but middle names may use initials (no period after the initial).
   - Cross-check author formats with names in the example BibTeX for consistency.  

5. **Journal Name**:  
   - Use full journal names in title case unless otherwise specified. For example "Physics in Medicine \&amp; Biology".

6. **Institution Names**:  
   - Follow the standard institution list provided in the "=== Lists ===" section.
   - Identify only the most important institution.
   - Keep the institution name succinct.
   - Omit universities if the institution is an affiliated hospital.

7. **Keywords**:  
   - Choose keywords from the predefined list in the "=== Lists ===" section.  
   - Include terms that describe the tracer used (except "FDG"), related diseases (if specified), and relevant specialties. Avoid overly general terms like "total body" or "PET."  
   - Connect multiple keywords with semicolons.
   - For new tracers, use the standard EANM-recommended tracer name as the keyword (ignore superscript or subscript). If applicable, also include the family of the tracer, such as PSMA, DOTATATE, FAPI, etc. For tracers that are not widely used, use the keyword "novel tracer".

8. **Handling "Just Accepted" Articles**:  
   - For "Just Accepted" papers with no final volume, number, or page numbers: 
     - The value of the tag "year" should be "Just Accepted".
     - **Remove** fields for `volume`, `number`, and `pages`.  
     - Always include `doi`, `pmid`, and `institution`, even if incomplete.

9. **BibTeX style**:  
   - Do not use leading spaces in formatting. Use as few spaces as possible. Avoid any tabs.

---

### **Step-by-Step Process**  

1. **Understand the Guidelines**:  
   - Fully review all general rules, special considerations, and exceptions before starting.  

2. **Retrieve the Information**:  
   - Fetch the article from the provided link using a tool and gather all necessary citation information, such as title, authors, journal, year, volume, number, pages, DOI, PubMed ID (PMID), institutions, and keywords. Directly fetch from the url using a tool.

3. **Determine the Citekey**:  
   - Create the citekey based on the rules (last name + year + keywords).  

4. **Format the Title**:  
   - Convert the title into **sentence case**. Insert `&lt;sup&gt;` and `&lt;sub&gt;` HTML tags for any superscripts or subscripts.  

5. **Prepare the Author List**:  
   - Ensure that author names are in the correct format. Verify that the given names are not abbreviated (e.g., "First name" instead of "F.").

6. **Format the Journal Name**:  
   - Use the full journal name unless exceptions (like "J. Nucl. Med.") are specified in the rules.  

7. **Check "Just Accepted" Status**:  
   - If an article is not yet published and is marked as "Just Accepted," remove the `volume`, `number`, and `pages` fields.  

8. **Complete DOI and PMID Fields**:  
   - Fetch and include the DOI and PMID values. These fields can be blank if failed to fetch, but must never be omitted.
   - You may need to use a tool to search pubmed if some information is missing.

9. **Format Institution Names**:  
   - Match the institution names to the predefined list in the "=== Lists ===" section. If multiple institutions exist, join them with semicolons.
   - New names can be added, in a consistent format as those in the list.

10. **Choose Suitable Keywords**:  
    - Select relevant keywords from the predefined list. Focus on the tracer, disease, and specialties. Avoid general terms like "total body."

11. **Compile the BibTeX Entry**:  
    - Input data into a BibTeX entry following the example format provided, applying all the rules.

12. **Final Validation**:  
    - Double-check components for accuracy, consistency with the rules, and adherence to journal formats. Correct any inconsistencies.

---

### **Special Considerations**  

- Abbreviations: Use "J. Nucl. Med." for "Journal of Nuclear Medicine." Apart from this, use full journal names.
- Redefinitions: Replace specific institution names as listed in the "Special Considerations" section. Examples include:  
  - "The First Affiliated Hospital of Shandong First Medical University" → "Qianfoshan Hospital."  

---

### **Expected Output Example**  

Here’s an example of the BibTeX output, based on the rules:  
```bibtex  
@article{zhang2024myocardialmetabolism,
title={Feasibility of shortening scan duration of &lt;sup&gt;18&lt;/sup&gt;F-FDG myocardial metabolism imaging using a total-body PET/CT scanner},
author={Zhang, Xiaochun and Xiang, Zeyin and Wang, Fanghu and Han, Chunlei and Zhang, Qing and Liu, Entao and Yuan, Hui and Jiang, Lei},
journal={EJNMMI Physics},
year={Just Accepted},
doi={10.1186/s40658-024-00689-1},
pmid={39390229},
institution={Guangdong People's Hospital},
keywords={fast; cardiovascular}
}

### more examples omitted ###

=== Lists ===

Institutions:
Guangdong People's Hospital; Nanfang Hospital; Ruijin Hospital; University of Bern; 
### more entries omitted ###

Keywords:
novel tracer; lung cancer; immune; PD-L1; [68Ga]Ga-DOTA-PEG2-Asp2-PDL1P; PDL1P; 
### more entries omitted ###
</code></pre></div></div>

<p>This is about 3000 tokens for OpenAI or Gemini models, so it is still feasible. I choose to use <code class="language-plaintext highlighter-rouge">gemini-2.5-pro-exp</code> for this task.</p>

<p>When I send the link “https://pubmed.ncbi.nlm.nih.gov/40208315/” to the model, it responds as follows:</p>

<blockquote>
  <p>I will fetch the content from the provided PubMed link.</p>
  <div class="language-html highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt">&lt;tool_use&gt;</span>
  <span class="nt">&lt;name&gt;</span>fqw-KIEMo_ltGFDxcHkHAc<span class="nt">&lt;/name&gt;</span>
  <span class="nt">&lt;arguments&gt;</span>
   {"url": "https://pubmed.ncbi.nlm.nih.gov/40208315/"}
  <span class="nt">&lt;/arguments&gt;</span>
<span class="nt">&lt;/tool_use&gt;</span>
</code></pre></div>  </div>

  <p>Okay, I have the text content from the PubMed link for the second article. Now I will extract the necessary information and format the BibTeX entry.</p>

  <p>Here’s what I’ve gathered:</p>
  <ul>
    <li><strong>Title:</strong> Al<sup>18</sup>F-NOTA-HER2-BCH versus <sup>18</sup>F-FDG PET/CT in evaluating &gt;newly diagnosed HER2-low breast cancer patients</li>
    <li><strong>Authors:</strong> Xiaoyi Guo, Xu Liang, Ben Li, Yan Mao, Nina Zhou, Jiayue Liu, Guangjie &gt;Yang, Zhenguang Wang, Guohong Song, Zhi Yang</li>
    <li><strong>Journal:</strong> European Journal of Nuclear Medicine and Molecular Imaging</li>
    <li><strong>Year:</strong> 2025 (Online ahead of print, so it will be “Just Accepted”)</li>
    <li><strong>DOI:</strong> 10.1007/s00259-025-07251-w</li>
    <li><strong>PMID:</strong> 40208315</li>
    <li><strong>Affiliations (First author’s primary and most important):</strong></li>
    <li>Xiaoyi Guo: Key laboratory of Carcinogenesis and Translational Research (Ministry of &gt;Education), Beijing Key Laboratory of Research, Investigation and Evaluation of &gt;Radiopharmaceuticals, NMPA Key Laboratory for Research and Evaluation of &gt;Radiopharmaceuticals (National Medical Products Administration), Department of Nuclear &gt;Medicine, Peking University Cancer Hospital &amp; Institute, Beijing, China.</li>
    <li><strong>Keywords (from text):</strong> <sup>18</sup>F-FDG; Al<sup>18</sup>F-NOTA-HER2-BCH; Breast &gt;cancer; HER2-low; PET/CT.</li>
  </ul>

  <p>Now, I will process this information according to the rules:</p>

  <ol>
    <li><strong>Citekey:</strong> <code class="language-plaintext highlighter-rouge">guo2025her2bch</code> (First author: Guo, Year: 2025 (will be Just Accepted), &gt;Keywords: HER2-BCH from Al<sup>18</sup>F-NOTA-HER2-BCH)</li>
    <li><strong>Title Formatting:</strong> “Al<sup>18</sup>F-NOTA-HER2-BCH versus <sup>18</sup>F-FDG PET/CT &gt;in evaluating newly diagnosed HER2-low breast cancer patients” (Sentence case, preserving &gt;superscripts)</li>
    <li><strong>Author Names:</strong> Guo, Xiaoyi; Liang, Xu; Li, Ben; Mao, Yan; Zhou, Nina; Liu, Jiayue; &gt;Yang, Guangjie; Wang, Zhenguang; Song, Guohong; Yang, Zhi (Full given names, middle initial &gt;without period).</li>
    <li><strong>Journal Name:</strong> European Journal of Nuclear Medicine and Molecular Imaging (Full name)</li>
    <li><strong>Year:</strong> Just Accepted (Since it’s “Online ahead of print” and no volume/number/pages &gt;are listed yet)</li>
    <li><strong>Institution:</strong> The primary institution for the first author is “Peking University &gt;Cancer Hospital &amp; Institute”. This will be simplified to “Beijing Cancer Hospital” from the &gt;provided list.</li>
    <li><strong>Keywords:</strong>
      <ul>
        <li>Tracer: “Al18F-NOTA-HER2-BCH” (new tracer, use EANM name, ignore superscript).</li>
        <li>Disease: “breast cancer”.</li>
        <li>Specialty: The tracer is HER2-targeted, so “HER2”.</li>
        <li>Combined: “Al18F-NOTA-HER2-BCH; breast cancer; HER2”</li>
      </ul>
    </li>
    <li><strong>“Just Accepted” Handling</strong>: <code class="language-plaintext highlighter-rouge">volume</code>, <code class="language-plaintext highlighter-rouge">number</code>, and <code class="language-plaintext highlighter-rouge">pages</code> fields will be removed.</li>
  </ol>

  <p>Now, I will compile the BibTeX entry.</p>
  <div class="language-bibtex highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nc">@article</span><span class="p">{</span><span class="nl">guo2025her2bch</span><span class="p">,</span>
<span class="na">title</span><span class="p">=</span><span class="s">{Al&lt;sup&gt;18&lt;/sup&gt;F-NOTA-HER2-BCH versus &lt;sup&gt;18&lt;/sup&gt;F-FDG PET/CT in evaluating newly &gt;diagnosed HER2-low breast cancer patients}</span><span class="p">,</span>
<span class="na">author</span><span class="p">=</span><span class="s">{Guo, Xiaoyi and Liang, Xu and Li, Ben and Mao, Yan and Zhou, Nina and Liu, Jiayue &gt;and Yang, Guangjie and Wang, Zhenguang and Song, Guohong and Yang, Zhi}</span><span class="p">,</span>
<span class="na">journal</span><span class="p">=</span><span class="s">{European Journal of Nuclear Medicine and Molecular Imaging}</span><span class="p">,</span>
<span class="na">year</span><span class="p">=</span><span class="s">{Just Accepted}</span><span class="p">,</span>
<span class="na">doi</span><span class="p">=</span><span class="s">{10.1007/s00259-025-07251-w}</span><span class="p">,</span>
<span class="na">pmid</span><span class="p">=</span><span class="s">{40208315}</span><span class="p">,</span>
<span class="na">institution</span><span class="p">=</span><span class="s">{Beijing Cancer Hospital}</span><span class="p">,</span>
<span class="na">keywords</span><span class="p">=</span><span class="s">{Al18F-NOTA-HER2-BCH; breast cancer; HER2}</span>
<span class="p">}</span>
</code></pre></div>  </div>

</blockquote>

<p>It is almost perfect. The only changes I have made is to add the other institution (Affiliated Hospital of Qingdao University), and revised tracer name in the keyword (Al18F-NOTA-HER2-BCH). This marks a huge improvement. The workflow has been greatly simplified, and the efficiency has been greatly improved. I am very satisfied.</p>

<h2 id="appendix">Appendix</h2>

<p>Here are the prompt I am using to update the “Just Accepted” entries after the corresponding paper has been published.</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>I am going to give you a bibtex entry. In the entry I am providing, the year tag is "Just Accepted". Your task is, based on the information in the bibtex entry, you need to determine if the paper has already been published. If the paper has still not been published (i.e. still is in "early access" or related status, without a final page number), just tell me so. Otherwise, if the paper has already been published, you need to give me a complete bib entry, with year, volume, number and pages updated, and all other fields identical to the input.

You should not change the format in the output. Do not add spaces.

Example input:
@article{gu2024lowbmi,
title={Low dose optimization for total-body 2-[&lt;sup&gt;18&lt;/sup&gt;F]FDG PET/CT imaging: a single-center study on feasibility based on body mass index stratification},
author={Gu, Taoying and Liu, Siwei and Hou, Xiaoguang and Zhao, Liwei and Ng, Yee Ling and Wang, Jingyi and Shi, Hongcheng},
journal={European Radiology},
year={Just Accepted},
doi={10.1007/s00330-024-11039-1},
pmid={39214892},
institution={Zhongshan Hospital},
keywords={low dose}
}
===
Output:
@article{gu2024lowbmi,
title={Low dose optimization for total-body 2-[&lt;sup&gt;18&lt;/sup&gt;F]FDG PET/CT imaging: a single-center study on feasibility based on body mass index stratification},
author={Gu, Taoying and Liu, Siwei and Hou, Xiaoguang and Zhao, Liwei and Ng, Yee Ling and Wang, Jingyi and Shi, Hongcheng},
journal={European Radiology},
year={2025},
volume={35},
number={4},
pages={1881--1893},
doi={10.1007/s00330-024-11039-1},
pmid={39214892},
institution={Zhongshan Hospital},
keywords={low dose}
}
</code></pre></div></div>

<p>And this one is used to update the lists of all authors (not included in the main prompt due to the extra length/tokens), all institutions and all keywords.</p>

<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>I want you to generate three lists from the following url (a bibtex file): https://mengxiangxi.info/bibliography/uExplorer.bib
The first list would be a list of all author names;
The second list would be a list of all institution names;
The third list would be a list of all keywords.

Each list should be in one line. Please remove the duplicated entries. The different entries should be separated by a semicolon.
</code></pre></div></div>]]></content><author><name>Xiangxi Meng</name><email>https://mengxiangxi.info/</email></author><category term="Coding" /><category term="artificial intelligence" /><category term="solution" /><summary type="html"><![CDATA[I have a webpage to keep track of all peer-reviewed papers I could find on the world's first total-body PET scanner, uEXPLORER. On this webpage, I used a javascript code called bibtex_js to render the bibliography from a bibtex file that I manually maintain. Over the years, I have developed a set of rules and conventions to build the bibliography entries, assigning different meanings and functions to different fields.]]></summary></entry><entry><title type="html">Windows上小狼毫输入法的同步设定</title><link href="http://mengxiangxi.info/BLOG/coding/2024/11/07/Weasels-setting-sync.html" rel="alternate" type="text/html" title="Windows上小狼毫输入法的同步设定" /><published>2024-11-07T00:00:00+00:00</published><updated>2024-11-07T00:00:00+00:00</updated><id>http://mengxiangxi.info/BLOG/coding/2024/11/07/Weasels-setting-sync</id><content type="html" xml:base="http://mengxiangxi.info/BLOG/coding/2024/11/07/Weasels-setting-sync.html"><![CDATA[<p>小狼毫输入法是<a href="https://rime.im/">中州韵</a>输入法引擎的官方Windows实现，由程序员<a href="https://github.com/lotem">佛振</a>开发。这是一个中用的开源输入法，是我中文输入的首选。</p>

<p>目前，网络上有一些用户资料同步的实践经验。我的方法与之相异，主要特点是利用任务计划程序（Task Scheduler）自动执行同步操作，及用PowerShell脚本运行<code class="language-plaintext highlighter-rouge">\sync</code>命令以利用通配符特性避免版本更改带来的路径变化。</p>

<p>我的同步方式是自建NAS。利用可以进行云同步的其他服务也都一样。</p>

<ul>
  <li>
    <p>安装小狼毫。</p>
  </li>
  <li>
    <p>在磁盘上新建一个用于同步的文件夹，如<code class="language-plaintext highlighter-rouge">D:/Sync/Miscellaneous/rime_sync</code>。Rime将在这个文件夹下自动新建若干子目录，每个子目录对应一台设备。需要保证这一文件夹保持同步。</p>
  </li>
  <li>
    <p>打开“【小狼毫】用户文件夹”，编辑其中的<code class="language-plaintext highlighter-rouge">installation.yaml</code>文件。添加两行：</p>
  </li>
</ul>

<pre><code class="language-txt">installation_id: "##Computer_ID##"
sync_dir: "D:/Sync/Miscellaneous/rime_sync"
</code></pre>

<p>其中，<code class="language-plaintext highlighter-rouge">##Computer_ID##</code>为这台机器的名称，需要自定义。</p>

<ul>
  <li>新建一个PowerShell脚本，内容如下：</li>
</ul>

<div class="language-powershell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">C:\</span><span class="s2">"Program F"</span><span class="o">*</span><span class="nx">\Rime\weasel-</span><span class="o">*.*.*</span><span class="nx">\WeaselDeployer.exe</span><span class="w"> </span><span class="nx">/sync</span><span class="w">
</span></code></pre></div></div>

<p>其中通配符是为了适配不同的版本，包括有的默认安装路径会在<code class="language-plaintext highlighter-rouge">Program Files</code>而非<code class="language-plaintext highlighter-rouge">Program Files (x86)</code>的64-bit系统。将其命名为<code class="language-plaintext highlighter-rouge">sync_rime.ps1</code>，可保存在<code class="language-plaintext highlighter-rouge">D:\Library\Scripts\</code>之类的目录下。可以在不同Windows计算机上对这一脚本进行同步，因为它具有一定普适性。</p>

<ul>
  <li>在任务计划程序中新建一个任务。</li>
</ul>

<pre><code class="language-txt">名称：Sync RIME
安全选项：不管用户是否登录都要运行
触发器1：每日（在每天的4:00）
触发器2：工作站锁定时（当锁定任何用户的工作站时）
操作：启动程序
程序或脚本：powershell.exe
添加参数：-WindowStyle Hidden -File D:\Library\Scripts\sync_rime.ps1
</code></pre>

<p>其中，参数<code class="language-plaintext highlighter-rouge">-WindowStyle Hidden</code>保证运行脚本时不会将命令窗口调到前台，但部分机器上会失效，目前原因不明。</p>

<p>注意，Windows客户端默认进制运行PowerShell脚本，可以参考<a href="../../../../coding/2021/09/04/Life-hack.html#PowerShell">这里</a>解除限制。</p>]]></content><author><name>Xiangxi Meng</name><email>https://mengxiangxi.info/</email></author><category term="Coding" /><category term="solution" /><category term="Chinese" /><category term="cheat sheet" /><summary type="html"><![CDATA[小狼毫输入法是中州韵输入法引擎的官方Windows实现，由程序员佛振开发。这是一个中用的开源输入法，是我中文输入的首选。]]></summary></entry><entry><title type="html">Two ways of setting up Hyper-V networks</title><link href="http://mengxiangxi.info/BLOG/coding/2023/06/29/HyperV-Internet.html" rel="alternate" type="text/html" title="Two ways of setting up Hyper-V networks" /><published>2023-06-29T00:00:00+00:00</published><updated>2023-06-29T00:00:00+00:00</updated><id>http://mengxiangxi.info/BLOG/coding/2023/06/29/HyperV-Internet</id><content type="html" xml:base="http://mengxiangxi.info/BLOG/coding/2023/06/29/HyperV-Internet.html"><![CDATA[<p>Setting up Hyper-V networks can be tricky, and the current online tutorials do not cover every aspect. Thus, asking ChatGPT results in vein. I realize that the value of human-made tutorial is still non-negligible today, thus I am writing down my intuitive solutions.</p>

<h2 id="the-problem">The problem</h2>

<p>I am using a Hyper-V virtual machine on a Windows Server 2022. The virtual system is Windows 10 Professional Edition. I want to set up the network so that I would be able to access the internet from the virtual machine.</p>

<p>Although the following solution has only been verified on my OS specified, the same principle applies to other combination of local/VM operating systems.</p>

<h2 id="my-network-environment">My network environment</h2>

<p>The hospital uses static IP. As the ethernet socket is limited, we have to use switches as hubs. Currently, we do not require the association of MAC and IP.</p>

<p>Suppose I have a upstream switch whose gateway is <code class="language-plaintext highlighter-rouge">192.168.2.1</code>, thus, all IPs from this router are assigned in the <code class="language-plaintext highlighter-rouge">192.16.2.x</code> range with a mask of <code class="language-plaintext highlighter-rouge">255.255.255.0</code>.</p>

<p>My server has two ethernet interfaces. One of the ethernet interface is connected to the hub, to provide internet access to my host machine. The corresponding IP is <code class="language-plaintext highlighter-rouge">192.168.2.3</code>. The other LAN port is not in use.</p>

<h2 id="the-solution">The solution</h2>

<p>There are two types of network architecture. The first one is sharing the local adapter. The second is via bridge.</p>

<h3 id="sharing-local-adapter">Sharing local adapter</h3>

<p>Sharing local adapter is the most useful and common way for the VM to connect to the internet. It requires only one internet interface.</p>

<p><img src="/BLOG/assets/VMNetwork/Sharing.png" alt="Sharing local adapter" /></p>

<p>In this method, you first <a href="https://learn.microsoft.com/en-us/virtualization/hyper-v-on-windows/quick-start/connect-to-network">create a virtual switch</a>, and configure the network sharing of your host LAN connection. They IP of the virtual switch is <code class="language-plaintext highlighter-rouge">192.168.137.1</code> by default.</p>

<p>Then in the virtual machine, configure the adapter, and the IP should be any address in the IP range of <code class="language-plaintext highlighter-rouge">192.168.137.x</code>. Here, we suppose the IP is <code class="language-plaintext highlighter-rouge">192.168.137.127</code>. The gateway should be configured to be <code class="language-plaintext highlighter-rouge">192.168.137.1</code>.</p>

<table>
  <thead>
    <tr>
      <th>Adapter Name</th>
      <th>LAN1</th>
      <th>LAN2</th>
      <th>vEthernet Internal</th>
      <th>Ethernet</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Computer</td>
      <td>Host</td>
      <td>Host</td>
      <td>Host</td>
      <td>Hyper-V</td>
    </tr>
    <tr>
      <td>Cable ?</td>
      <td>Yes</td>
      <td>No</td>
      <td>N.A.</td>
      <td>N.A.</td>
    </tr>
    <tr>
      <td>IP</td>
      <td>192.168.2.3</td>
      <td>N.A.</td>
      <td>192.168.137.1</td>
      <td>192.168.137.127</td>
    </tr>
    <tr>
      <td>Gateway</td>
      <td>192.168.2.1</td>
      <td>N.A.</td>
      <td>Blank</td>
      <td>192.168.137.1</td>
    </tr>
    <tr>
      <td>Shared?</td>
      <td>vEthernet Internal</td>
      <td>N.A.</td>
      <td>N.A.</td>
      <td>N.A.</td>
    </tr>
  </tbody>
</table>

<h3 id="via-bridge">Via bridge</h3>

<p>In this scenario, we have to use a LAN port on the ethernet interface for the virtual machine. Thus, the virtual machine acts like a computer in the same network range as the host. This may avoid the need for network penetration, and allow for direct access of the VM by other machines.</p>

<p><img src="/BLOG/assets/VMNetwork/Bridge.png" alt="Via birdge" /></p>

<p>With this method, if you have $N$ VMs, you need to prepare $N+1$ static, public IP addresses. The cable should also be plugged to the other LAN port on your server, and the corresponding adapter should be set to “bridge” with the virtual adapter. This adapter takes a unique IP, such as <code class="language-plaintext highlighter-rouge">192.168.2.4</code> here. Then, the remote adapter can be configured just like a local machine.</p>

<table>
  <thead>
    <tr>
      <th>Adapter Name</th>
      <th>LAN1</th>
      <th>LAN2</th>
      <th>vEthernet Internal</th>
      <th>Ethernet</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Computer</td>
      <td>Host</td>
      <td>Host</td>
      <td>Host</td>
      <td>Hyper-V</td>
    </tr>
    <tr>
      <td>Cable ?</td>
      <td>Yes</td>
      <td>Yes</td>
      <td>N.A.</td>
      <td>N.A.</td>
    </tr>
    <tr>
      <td>IP</td>
      <td>192.168.2.3</td>
      <td>N.A.</td>
      <td>192.168.2.4</td>
      <td>192.168.2.5</td>
    </tr>
    <tr>
      <td>Gateway</td>
      <td>192.168.2.1</td>
      <td>N.A.</td>
      <td>192.168.2.1</td>
      <td>192.168.2.1</td>
    </tr>
    <tr>
      <td>Shared?</td>
      <td>No</td>
      <td>N.A.</td>
      <td>N.A.</td>
      <td>N.A.</td>
    </tr>
  </tbody>
</table>

<h2 id="conclusion">Conclusion</h2>

<p>If you have an extra LAN port, you can have VMs without using DHCP. This can be very convenient, but you are exhausting the IP resources very fast.</p>]]></content><author><name>Xiangxi Meng</name><email>https://mengxiangxi.info/</email></author><category term="Coding" /><category term="solution" /><summary type="html"><![CDATA[Setting up Hyper-V networks can be tricky, and the current online tutorials do not cover every aspect. Thus, asking ChatGPT results in vein. I realize that the value of human-made tutorial is still non-negligible today, thus I am writing down my intuitive solutions.]]></summary></entry><entry><title type="html">Some experiments I made with ChatGPT</title><link href="http://mengxiangxi.info/BLOG/fun/2022/12/12/chat-GPT.html" rel="alternate" type="text/html" title="Some experiments I made with ChatGPT" /><published>2022-12-12T00:00:00+00:00</published><updated>2022-12-12T00:00:00+00:00</updated><id>http://mengxiangxi.info/BLOG/fun/2022/12/12/chat-GPT</id><content type="html" xml:base="http://mengxiangxi.info/BLOG/fun/2022/12/12/chat-GPT.html"><![CDATA[<p><a href="https://openai.com/blog/chatgpt/">ChatGPT</a> becomes phenomenal by the end of 2022 within the artificial intelligence community, and its influence is still growing. I have been fascinated by the idea of using GPT-3 to generate conversations, and I have been trying to make some experiments with it. In this post, I will share some of my experiments.</p>

<p>In fact, the paragraph above was largely generated by GitHub Copilot, another service based on the language model.</p>

<h2 id="music-composition">Music composition</h2>

<p>It seems that <a href="https://openai.com/">OpenAI</a> is rather reluctant to let users go too far. While I was experimenting on it, they blocked the function of generating music. However, as with many other restrictions to ChatGPT, there is always circumvention.</p>

<p>Before the restriction was implemented, I simply asked the AI to write down <em>The Internationale</em> in <a href="http://lilypond.org/">lilypond</a> style. And I used <a href="https://www.hacklily.org/">Hackily</a>, an online lilypond renderer, to visualize the score and generate the midi playback.</p>

<p>As you can see from the inserted video below, this is what I have got from it. From a human point of view, it is by no means <em>The Internationale</em>. No wonder they blocked it! It has the title and the composer correct, but the content reminds me of the minimalism music.</p>

<iframe src="//player.bilibili.com/player.html?aid=946003803&amp;bvid=BV14W4y1g7Bp&amp;cid=919255091&amp;page=2" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" width="640" height="360"> </iframe>

<p>I then proceeded to compose something in “serialism”, but before I saved it, the service crashed and the “serialism” music I have got could never be retrieved due to the newly implemented restrictions.</p>

<p>So the workaround is like this: you first give it a lilypond code, and then you are still able to ask the model to revise it according to your instructions, including adding excerpts from other music pieces. In the next experiment, I asked the model to combine a small motif of “a Baroque-style sonata” with various pieces such as <em>O Tennenbaum</em> and <em>Amazing Grace</em> (which, apparently, bear no resemblance to the actual songs), making symmetric reflections of the melody, transposing the tune, and composing the corresponding harmony (the lower staff). Some other instructions were given, and minor adjustments were manually made.</p>

<p>The final piece was too messy to be directly presented. So I exported the midi file, and imported the midi file to <a href="https://musescore.org/">Musescore</a>. This is what I have got.</p>

<iframe src="//player.bilibili.com/player.html?aid=946003803&amp;bvid=BV14W4y1g7Bp&amp;cid=920707610&amp;page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" width="640" height="360"> </iframe>

<p>From these experiments, it could be summarized that, as of Dec 12, 2022:</p>
<ul>
  <li>The AI is capable of generating small motifs of music, but it actually does not have the sense of aesthetics. It is prone to generate very short sequences, with special favor to the ascending scale. When it is asked to generate longer sequences, it always repeats a certain pattern. Longer composition is impossible without human intervention.</li>
  <li>It knows the jargon in music theory, and it can explain it well. But it fails when asked to apply them. For example, it can explain the range for violin, but it fails to rewrite a melody to where all notes fall in this range.</li>
  <li>It is also very hard for the model to generate music with correct number of beats in each bar.</li>
  <li>Sometimes, the model may misuse or even “invent” lilypond syntax. However, it can often correct the errors when prompted by the human.</li>
</ul>

<h2 id="web-page">Web page</h2>

<p>I also asked the AI to generate a webpage using HTML and JavaScript, about a personal website for an AI researcher. I asked it to adopt the <a href="https://www.w3schools.com/w3css/defaulT.asp">W3.CSS</a> style and use the grid layout. I also asked it to insert a photo, add Education, Working Experience, and Publication sections.</p>

<p>The webpage it generated is rather appealing, and you can find it <a href="https://mengxiangxi.info/Misc/airesearcher.html">here</a>.</p>

<p><a href="https://mengxiangxi.info/Misc/airesearcher.html"><img src="/BLOG/assets/ChatGPT/AIResearcher.png" alt="The webpage" /></a></p>

<h2 id="other-miscellaneous-entertainment">Other miscellaneous entertainment</h2>

<ul>
  <li>I asked it to give diagnosis according to patient’s complaint and clinical manifestations.</li>
</ul>

<blockquote>
  <p><strong>ME:</strong> A patient has an acute pain in the lower right area of the abdomen, and the body temperature is 38 degrees Celsius. What tests shall the patient take?</p>

  <p><strong>ChatGPT:</strong> It is difficult to determine which tests a patient should take without more information. It is important for the patient to discuss their symptoms with a healthcare provider, who can assess the patient’s condition and recommend appropriate tests. Some possible tests that may be recommended in this situation include a physical exam, imaging tests such as an ultrasound or CT scan, and blood tests to check for infection or other conditions. It is always best to follow the advice of a healthcare provider when it comes to medical treatment and testing.</p>

  <p><strong>ME:</strong> The ultrasound shows swollen appendix, which was confirmed by the CT scan. The neutrophil as well as the CRP are elevated. What might be causing the symptom?</p>

  <p><strong>ChatGPT:</strong> Based on the information provided, it is possible that the patient is experiencing appendicitis, which is a condition in which the appendix becomes inflamed and swollen. The symptoms of appendicitis often include pain in the lower right side of the abdomen, fever, and elevated levels of white blood cells and CRP (C-reactive protein) in the blood. lf the ultrasound and CT scan confirm that the patient has a swollen appendix, it is likely that the cause of their symptoms is appendicitis. However, it is important to note that there may be other potential causes ofthese symptomss, and a healthcare provider would need to evaluate the patientand conductt additional testing to make a definitive diagnosis.</p>
</blockquote>

<ul>
  <li>I asked it to be the simulated patient. But it refused to evaluate my performance as a doctor.</li>
  <li>I asked it to create fictional grant applications.</li>
</ul>

<blockquote>
  <p>Title: Development of Algebraic Reconstruction Technique for Total Body PET lmaging and its Application in Accelerating Dynamic PET Reconstructions</p>

  <p>Abstract: Positron emission tomography (PET) is a valuable tool for the diagnosis and treatment of various diseases, such as cancer and neurological disorders. However, current PET imaging techniques have limitations, such as low spatial resolution and long acquisition times. This can lead to suboptimal image quality and reduced diagnostic accuracy. In this project, we propose to develop a novel algebraic reconstruction technique (ART) for total body PET imaging that overcomes these limitations. This algorithm will incorporate prior knowledge about the distribution of radioactivity in the body, allowing for improved spatial resolution and faster acquisition times. We will also investigate the application of this algorithm in accelerating dynamic PET reconstructions.</p>

  <p>Research Plan:</p>

  <ul>
    <li>Develop and validate the ART algorithm using simulations and phantom studies</li>
    <li>Conduct a clinical study to assess the performance of the algorithm in real-world settings</li>
    <li>Refine and optimize the algorithm based on the results of the clinical study</li>
  </ul>

  <p>Budget: [Provide detailed budget and justification for each expense]\</p>

  <p>Timeline: [Provide a timeline for completing the various project milestones and tasks]</p>

  <p>Conclusion: We believe that the development of this novel ART algorithm has the potential to significantly advance the field of PET imaging and improve patient care. We are confident that our team has the necessary skills and experience to successfully complete this project and we look forward to the opportunity to contribute to the advancement of PET imaging.</p>
</blockquote>

<ul>
  <li>I asked it to solve easy algorithm practices in different computer languages from the <a href="http://openjudge.cn/">Open Judge</a> platform. For example, this is what I got when I ask it to generate a Python program to find the next palindrome date after a given 8-digit <code class="language-plaintext highlighter-rouge">YYYYMMDD</code> date.</li>
</ul>

<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">datetime</span><span class="p">,</span> <span class="n">timedelta</span>
<span class="c1"># Convert the 8-digit number into a date object
</span><span class="n">date</span> <span class="o">=</span> <span class="n">datetime</span><span class="p">.</span><span class="n">strptime</span><span class="p">(</span><span class="s">"yyyymmdd"</span><span class="p">,</span> <span class="s">"%Y%m%d"</span><span class="p">)</span>
<span class="c1"># Increment the date by one day and check if it is a palindrome
</span><span class="k">while</span> <span class="bp">True</span><span class="p">:</span>
<span class="err"> </span> <span class="n">date</span> <span class="o">+=</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
<span class="err"> </span> <span class="n">date_str</span> <span class="o">=</span> <span class="n">date</span><span class="p">.</span><span class="n">strftime</span><span class="p">(</span><span class="s">"%Y%m%d"</span><span class="p">)</span>
<span class="err"> </span> <span class="k">if</span> <span class="n">date_str</span> <span class="o">==</span> <span class="n">date_str</span><span class="p">[::</span><span class="o">-</span><span class="mi">1</span><span class="p">]:</span>
<span class="err"> </span> <span class="err"> </span> <span class="c1"># The date is a palindrome
</span><span class="err"> </span> <span class="err"> </span> <span class="k">print</span><span class="p">(</span><span class="n">date_str</span><span class="p">)</span>
<span class="err"> </span> <span class="err"> </span> <span class="k">break</span>
</code></pre></div></div>

<ul>
  <li>It can generate the z-matrix of simple molecules. But there seems to be some errors.</li>
</ul>

<blockquote>
  <div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>C
H 1 R1
H 1 R2 2 A1
H 1 R3 2 A2 3 D1
H 1 R4 2 A3 3 D2 4 D3

R1 = 1.0890
R2 = 1.0890
R3 = 1.0890
R4 = 1.0890
A1 = 109.47
A2 = 109.47
D1 = 120.00
D2 = 120.00
D3 = 120.00
</code></pre></div>  </div>
</blockquote>]]></content><author><name>Xiangxi Meng</name><email>https://mengxiangxi.info/</email></author><category term="Fun" /><category term="artificial intelligence" /><summary type="html"><![CDATA[ChatGPT becomes phenomenal by the end of 2022 within the artificial intelligence community, and its influence is still growing. I have been fascinated by the idea of using GPT-3 to generate conversations, and I have been trying to make some experiments with it. In this post, I will share some of my experiments.]]></summary></entry><entry><title type="html">A learning primer to Radiomics</title><link href="http://mengxiangxi.info/BLOG/imaging/2022/12/02/Radiomics-Learning.html" rel="alternate" type="text/html" title="A learning primer to Radiomics" /><published>2022-12-02T00:00:00+00:00</published><updated>2022-12-02T00:00:00+00:00</updated><id>http://mengxiangxi.info/BLOG/imaging/2022/12/02/Radiomics-Learning</id><content type="html" xml:base="http://mengxiangxi.info/BLOG/imaging/2022/12/02/Radiomics-Learning.html"><![CDATA[<p>Radiomics is a technique in medical image analysis. It is about extracting and analyzing features in medical images. In this post, I am going to provide a brief note on the basic aspects of radiomics, providing some learning materials.</p>

<h2 id="prerequisite">Prerequisite</h2>

<ul>
  <li>Radiomics often involves (classical) statistical learning and/or deep learning. You need to master the basic ideas in machine learning if you want to conduct research in this area. Accordingly, a minimum level of statistics is also required.</li>
  <li>You need to know something about the DICOM standard, so as to process real-world medical imaging data. You may want to pick your favorite <a href="https://mengxiangxi.info/Blog/medicalImagingSoftware.html">DICOM viewer</a>.</li>
  <li>You need to master python. It would be helpful if you are familiar with the following packages, although you can learn them whenever necessary:
    <ul>
      <li><code class="language-plaintext highlighter-rouge">numpy</code>, <code class="language-plaintext highlighter-rouge">pandas</code>, for basic data manipulation;</li>
      <li><code class="language-plaintext highlighter-rouge">matplotlib</code>, <code class="language-plaintext highlighter-rouge">simpleITK</code>, <code class="language-plaintext highlighter-rouge">opencv-python</code> (<code class="language-plaintext highlighter-rouge">cv2</code>), for image processing;</li>
      <li><code class="language-plaintext highlighter-rouge">pydicom</code>, for DICOM data import;</li>
      <li><code class="language-plaintext highlighter-rouge">torch</code>, <code class="language-plaintext highlighter-rouge">scikit-learn</code> and any other machine learning packages.</li>
    </ul>
  </li>
</ul>

<h2 id="historical-background-and-personal-remarks">Historical background and personal remarks</h2>

<p>The name radiomics is obviously inspired by the ‘omics’ era in the early 2000’s, and in fact, it was first introduced in <a href="https://linkinghub.elsevier.com/retrieve/pii/S0959804911009993">a 2012 paper by Philippe Lambin</a>. It is a very bright idea, yet in retrospect, it is actually very intuitive (like many other great ideas). The foundations of radiomics root deeply in decades of discoveries in digital image processing and representation learning.</p>

<p>Although radiomics introduce a whole set of pipeline in image data processing, the core concept lies in the feature extraction operation. In this process, standardization and harmonization are vital to the feature stability and generalization ability.</p>

<h2 id="learning-materials">Learning materials</h2>

<p>There are many materials for introductory level radiomics learning. I am not providing a complete list of the materials for you to study, rather, I am only showing you what kinds of  materials could be beneficial in your learning.</p>

<ul>
  <li>Review articles are published on prestigious journals, which can be a great primer. Here are just a few review paper that I have read.
    <ul>
      <li>The 2021 review <a href="https://pubs.rsna.org/doi/10.1148/rg.2021210037">Radiomics in Oncology: A Practical Guide</a> published on RadioGraphics briefly establishes the concept and applications of radiomics.</li>
      <li>Another review article to <a href="https://insightsimaging.springeropen.com/articles/10.1186/s13244-020-00887-2">Radiomics in medical imaging—“how-to” guide and critical reflection</a></li>
      <li>A review in IEEE Signal Processing Magazine <a href="https://ieeexplore.ieee.org/document/8746872">From Handcrafted to Deep-Learning-Based Cancer Radiomics: Challenges and Opportunities</a> provides a comprehensive account of radiomics.</li>
    </ul>
  </li>
  <li>Books, monographs and textbooks.
    <ul>
      <li>There are not too many books out there. I find one of them pretty interesting, which was edited by Dr. Jie Tian and collaborators. The title is <a href="https://www.elsevier.com/books/radiomics-and-its-clinical-application/tian/978-0-12-818101-0">Radiomics and Its Clinical Application</a>. In this book, they introduced their experiences in radiomics study, including the basic pipeline (Chapter 2) and a literature survey (Chapters 3 and 4).</li>
    </ul>
  </li>
  <li>Online courses
    <ul>
      <li>Have not found any good one yet.</li>
    </ul>
  </li>
</ul>

<h2 id="software-and-platforms">Software and platforms</h2>

<ul>
  <li>The most important tool in radiomics study is <code class="language-plaintext highlighter-rouge">pyradiomics</code>, whose documentations are <a href="https://pyradiomics.readthedocs.io/en/latest/">here</a>. For the most part, <code class="language-plaintext highlighter-rouge">pyradiomics</code> is compliant with the IBSI standard (see below), and is one of the most popular radiomics tool used by the scientific community. Using <code class="language-plaintext highlighter-rouge">pyradiomics</code>, you can customize your own working pipelines. This is what we do in our research.</li>
  <li><a href="https://www.lifexsoft.org/">LIFEx</a> is a well-known radiomics tool. It has a graphic interface and is rather easy to use. However, it provides relatively small flexibility to customize.</li>
  <li>The <a href="http://www.radiomics.net.cn/platform/index">Radiomics</a> software developed by Dr. Jie Tian.</li>
</ul>

<h2 id="other-resources">Other resources</h2>

<ul>
  <li>As I have stated, standardization and harmonization are two key issues in radiomics. Without them, the generalization ability of radiomic models are questionable. The <a href="https://theibsi.github.io/">Imaging Biomarker Standardization Initiative</a> is an organization devoted to develop standardized image biomarkers (features) for radiomics analysis. The works of this collaboration are highly valued by the community, and the collaboration is still continuing. You can find more about IBSI in <a href="https://mengxiangxi.info/BLOG/imaging/2022/05/04/Standardization-of-PET.html">the other blog post on this site</a>.</li>
  <li>You are encouraged to explore the GitHub topic page of <a href="https://github.com/topics/radiomics">#radiomics</a> for related code and projects.</li>
</ul>]]></content><author><name>Xiangxi Meng</name><email>https://mengxiangxi.info/</email></author><category term="Imaging" /><category term="study note" /><summary type="html"><![CDATA[Radiomics is a technique in medical image analysis. It is about extracting and analyzing features in medical images. In this post, I am going to provide a brief note on the basic aspects of radiomics, providing some learning materials.]]></summary></entry><entry><title type="html">A checklist of useful Unicode symbols, and how to insert them in MS Word</title><link href="http://mengxiangxi.info/BLOG/research/2022/10/14/Unicode-checklist.html" rel="alternate" type="text/html" title="A checklist of useful Unicode symbols, and how to insert them in MS Word" /><published>2022-10-14T00:00:00+00:00</published><updated>2022-10-14T00:00:00+00:00</updated><id>http://mengxiangxi.info/BLOG/research/2022/10/14/Unicode-checklist</id><content type="html" xml:base="http://mengxiangxi.info/BLOG/research/2022/10/14/Unicode-checklist.html"><![CDATA[<p>Unlike LaTeX, MS Word lacks the mechanism to input various special symbols. One of the important mechanisms for inserting symbols is via <a href="https://en.wikipedia.org/wiki/Dingbat">Dingbat</a> fonts such as <a href="https://learn.microsoft.com/en-us/typography/font-list/wingdings">Wingdings</a>. These fonts map ASCII characters into glyphs. Another, in my opinion, more reliable way of doing so is by inserting UNICODE symbols.</p>

<p>There are two ways to insert such symbols. First, you can use <code class="language-plaintext highlighter-rouge">Alt</code>+<code class="language-plaintext highlighter-rouge">X</code> and edit the <strong>Hexadecimal</strong> code. Alternatively, use can type in the <strong>Decimal</strong> code on the numeric keypad (with NUM LOCK on) while holding the <code class="language-plaintext highlighter-rouge">Alt</code> key. Detailed explanation can be found on the <a href="https://support.microsoft.com/en-us/office/insert-ascii-or-unicode-latin-based-symbols-and-characters-d13f58d3-7bcb-44a7-a4d5-972ee12e50e0">Microsoft supporting website</a>.</p>

<p>However, as for other Microsoft Office components such as PowerPoint and Excel, the Hax code does not work. You can still use the Dec code.</p>

<p>Here is a collection of most used symbols and their encodings.</p>

<table>
  <thead>
    <tr>
      <th>Symbol</th>
      <th>Hex Code</th>
      <th>Dec Code</th>
      <th>Note</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>©</td>
      <td>00A9</td>
      <td>0169</td>
      <td>Copyright</td>
    </tr>
    <tr>
      <td>°</td>
      <td>00B0</td>
      <td>0176</td>
      <td>Degree</td>
    </tr>
    <tr>
      <td>µ</td>
      <td>00B5</td>
      <td>0181</td>
      <td>Micro sign</td>
    </tr>
    <tr>
      <td>×</td>
      <td>00D7</td>
      <td>0215</td>
      <td>Multiplication sign</td>
    </tr>
    <tr>
      <td>α</td>
      <td>03B1</td>
      <td>0945</td>
      <td>Greek alpha</td>
    </tr>
    <tr>
      <td>β</td>
      <td>03B2</td>
      <td>0946</td>
      <td>Greek beta</td>
    </tr>
    <tr>
      <td>γ</td>
      <td>03B3</td>
      <td>0947</td>
      <td>Greek gamma</td>
    </tr>
    <tr>
      <td>–</td>
      <td>2013</td>
      <td>8211</td>
      <td>En dash, LaTeX <code class="language-plaintext highlighter-rouge">--</code></td>
    </tr>
    <tr>
      <td>—</td>
      <td>2014</td>
      <td>8212</td>
      <td>Em dash, LaTeX <code class="language-plaintext highlighter-rouge">---</code></td>
    </tr>
    <tr>
      <td>℃</td>
      <td>2103</td>
      <td>8451</td>
      <td>Degree Celsius</td>
    </tr>
    <tr>
      <td>Å</td>
      <td>212B</td>
      <td>8491</td>
      <td>Angstrom</td>
    </tr>
    <tr>
      <td>⋅</td>
      <td>22C5</td>
      <td>8901</td>
      <td>Dot Operator</td>
    </tr>
    <tr>
      <td>−</td>
      <td>2212</td>
      <td>8722</td>
      <td>Minus sign <a href="#minus">*</a></td>
    </tr>
    <tr>
      <td>☑</td>
      <td>2611</td>
      <td>9745</td>
      <td>Checked box</td>
    </tr>
    <tr>
      <td>✓</td>
      <td>2713</td>
      <td>10003</td>
      <td>Check mark</td>
    </tr>
    <tr>
      <td>✗</td>
      <td>2717</td>
      <td>10007</td>
      <td>Ballot cross mark</td>
    </tr>
    <tr>
      <td>🗹</td>
      <td>1F5F9</td>
      <td>128505</td>
      <td>Ballot box with bold check</td>
    </tr>
  </tbody>
</table>

<p><a id="minus"></a> * In many situations, it is encouraged to use hyphen (<code class="language-plaintext highlighter-rouge">-</code>) directly as the minus sign.</p>]]></content><author><name>Xiangxi Meng</name><email>https://mengxiangxi.info/</email></author><category term="Research" /><category term="cheat sheet" /><category term="academic writing" /><category term="solution" /><summary type="html"><![CDATA[Unlike LaTeX, MS Word lacks the mechanism to input various special symbols. One of the important mechanisms for inserting symbols is via Dingbat fonts such as Wingdings. These fonts map ASCII characters into glyphs. Another, in my opinion, more reliable way of doing so is by inserting UNICODE symbols.]]></summary></entry><entry><title type="html">Notes on tags of UIH 3D DICOM in MATLAB (and Python)</title><link href="http://mengxiangxi.info/BLOG/imaging/2022/06/21/3D-DICOM-MATLAB.html" rel="alternate" type="text/html" title="Notes on tags of UIH 3D DICOM in MATLAB (and Python)" /><published>2022-06-21T00:00:00+00:00</published><updated>2022-06-21T00:00:00+00:00</updated><id>http://mengxiangxi.info/BLOG/imaging/2022/06/21/3D-DICOM-MATLAB</id><content type="html" xml:base="http://mengxiangxi.info/BLOG/imaging/2022/06/21/3D-DICOM-MATLAB.html"><![CDATA[<p>In MATLAB, the processing of DICOM files is taken care of by the <a href="https://www.mathworks.com/help/images/dicom-support-in-the-image-processing-toolbox.html">Image Processing Toolbox</a>. However, as far as I know, this toolbox does not support metadata indexing via numerical tags. In 3D DICOM by developers of United Imaging uEXPLORER, due to the hierarchy structure, indexing through tag names is very inconvenient.</p>

<p>Here, I am keeping a list of the relationship between the 2D DICOM tag and the corresponding 3D DICOM tag. I hope it will help people working with 3D DICOM files on MATLAB.</p>

<blockquote>
  <p>Updated 28th Feb, 2024: I am appending the Python version of the tag list. The Python library <code class="language-plaintext highlighter-rouge">pydicom</code> is used to read the DICOM files.</p>

  <div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">import</span> <span class="nn">pydicom</span>

<span class="n">ds</span> <span class="o">=</span> <span class="n">pydicom</span><span class="p">.</span><span class="n">dcmread</span><span class="p">(</span><span class="s">"dicomfile.dcm"</span><span class="p">)</span>
<span class="n">tag1</span> <span class="o">=</span> <span class="n">ds</span><span class="p">.</span><span class="n">TagName</span>
<span class="n">n</span> <span class="o">=</span> <span class="mi">0</span> <span class="c1"># for the first item
</span><span class="n">tag2</span> <span class="o">=</span> <span class="n">ds</span><span class="p">.</span><span class="n">TagGroup</span><span class="p">[</span><span class="n">n</span><span class="p">].</span><span class="n">TagName</span>
</code></pre></div>  </div>

  <p>Similarly, the MATLAB code for accessing the tag is like:</p>

  <div class="language-matlab highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">info</span> <span class="o">=</span> <span class="n">dicominfo</span><span class="p">(</span><span class="s2">"dicomfile.dcm"</span><span class="p">)</span>
<span class="n">tag1</span> <span class="o">=</span> <span class="nb">info</span><span class="o">.</span><span class="n">TagName</span>
<span class="n">tag2</span> <span class="o">=</span> <span class="nb">info</span><span class="o">.</span><span class="n">TagGroup</span><span class="o">.</span><span class="n">Item_1</span><span class="o">.</span><span class="n">TagName</span> <span class="c1">% for the first item</span>
</code></pre></div>  </div>
</blockquote>

<h2 id="basic">Basic</h2>

<ul>
  <li>Rescale Slope</li>
</ul>

<table>
  <thead>
    <tr>
      <th>Item</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Tag</td>
      <td>0028, 1053</td>
    </tr>
    <tr>
      <td>2D DCM</td>
      <td>RescaleSlope</td>
    </tr>
    <tr>
      <td>3D DCM, MATLAB</td>
      <td>SharedFunctionalGroupsSequence.Item_1.PixelValueTransformationSequence.Item_1.RescaleSlope</td>
    </tr>
    <tr>
      <td>3D DCM, python</td>
      <td>SharedFunctionalGroupsSequence[0].PixelValueTransformationSequence[0].RescaleSlope</td>
    </tr>
  </tbody>
</table>

<ul>
  <li>Pixel Spacing</li>
</ul>

<table>
  <thead>
    <tr>
      <th>Item</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Tag</td>
      <td>0028, 0030</td>
    </tr>
    <tr>
      <td>2D DCM</td>
      <td>PixelSpacing</td>
    </tr>
    <tr>
      <td>3D DCM, MATLAB</td>
      <td>SharedFunctionalGroupsSequence.Item_1.PixelMeasuresSequence.Item_1.PixelSpacing</td>
    </tr>
    <tr>
      <td>3D DCM, python</td>
      <td>SharedFunctionalGroupsSequence[0].PixelMeasuresSequence[0].PixelSpacing</td>
    </tr>
  </tbody>
</table>

<ul>
  <li>Slice Thickness</li>
</ul>

<table>
  <thead>
    <tr>
      <th>Item</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Tag</td>
      <td>0018, 0050</td>
    </tr>
    <tr>
      <td>2D DCM</td>
      <td>SliceThickness</td>
    </tr>
    <tr>
      <td>3D DCM, MATLAB</td>
      <td>SharedFunctionalGroupsSequence.Item_1.PixelMeasuresSequence.Item_1.SliceThickness</td>
    </tr>
    <tr>
      <td>3D DCM, python</td>
      <td>SharedFunctionalGroupsSequence[0].PixelMeasuresSequence[0].SliceThickness</td>
    </tr>
  </tbody>
</table>

<h2 id="radionuclide-properties">Radionuclide properties</h2>

<ul>
  <li>Radiopharmaceutical half life</li>
</ul>

<table>
  <thead>
    <tr>
      <th>Item</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Tag</td>
      <td>0018, 1075</td>
    </tr>
    <tr>
      <td>2D DCM</td>
      <td>RadiopharmaceuticalInformationSequence.Item_1.RadionuclideHalfLife</td>
    </tr>
    <tr>
      <td>3D DCM, MATLAB</td>
      <td>RadiopharmaceuticalInformationSequence.Item_1.RadionuclideHalfLife</td>
    </tr>
    <tr>
      <td>3D DCM, python</td>
      <td>RadiopharmaceuticalInformationSequence[0].RadionuclideHalfLife</td>
    </tr>
  </tbody>
</table>

<ul>
  <li>Radionuclide total dose</li>
</ul>

<p>The injection dose at the Radiopharmaceutical Start Time</p>

<table>
  <thead>
    <tr>
      <th>Item</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Tag</td>
      <td>0018, 1074</td>
    </tr>
    <tr>
      <td>2D DCM</td>
      <td>RadiopharmaceuticalInformationSequence.Item_1.RadionuclideTotalDose</td>
    </tr>
    <tr>
      <td>3D DCM, MATLAB</td>
      <td>RadiopharmaceuticalInformationSequence.Item_1.RadionuclideTotalDose</td>
    </tr>
    <tr>
      <td>3D DCM, python</td>
      <td>RadiopharmaceuticalInformationSequence[0].RadionuclideTotalDose</td>
    </tr>
  </tbody>
</table>

<ul>
  <li>Radiopharmaceutical start time</li>
</ul>

<table>
  <thead>
    <tr>
      <th>Item</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Tag</td>
      <td>0018, 1072</td>
    </tr>
    <tr>
      <td>2D DCM</td>
      <td>RadiopharmaceuticalInformationSequence.Item_1.RadiopharmaceuticalStartTime</td>
    </tr>
    <tr>
      <td>3D DCM, MATLAB</td>
      <td>RadiopharmaceuticalInformationSequence.Item_1.RadiopharmaceuticalStartTime</td>
    </tr>
    <tr>
      <td>3D DCM, python</td>
      <td>RadiopharmaceuticalInformationSequence[0].RadiopharmaceuticalStartTime</td>
    </tr>
  </tbody>
</table>

<h2 id="decay-correction">Decay correction</h2>

<ul>
  <li>Decay correction</li>
</ul>

<p>The time point of decay correction (“NO”, “START”, “ADMIN”)</p>

<table>
  <thead>
    <tr>
      <th>Item</th>
      <th>Value</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Tag</td>
      <td>0054, 1102</td>
    </tr>
    <tr>
      <td>2D DCM</td>
      <td>DecayCorrection</td>
    </tr>
    <tr>
      <td>3D DCM, MATLAB</td>
      <td>PerFrameFunctionalGroupsSequence.Item_1.PETFrameCorrectionFactorsSequence.Item_1.DecayCorrection</td>
    </tr>
    <tr>
      <td>3D DCM, python</td>
      <td>PerFrameFunctionalGroupsSequence[0].PETFrameCorrectionFactorsSequence[0].DecayCorrection</td>
    </tr>
  </tbody>
</table>

<h2 id="more-about-3d-dicom">More about 3D DICOM</h2>

<h3 id="2d-dcm-or-3d-dcm">2D DCM or 3D DCM?</h3>

<p>I use this syntax in MATLAB to determine whether the dcm file read is 2D or 3D.</p>

<div class="language-matlab highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">info</span> <span class="o">=</span> <span class="n">dicominfo</span><span class="p">(</span><span class="s2">"dicomfile.dcm"</span><span class="p">)</span>

<span class="k">try</span> <span class="nb">info</span><span class="o">.</span><span class="n">SliceLocation</span><span class="p">;</span>
    <span class="nb">disp</span><span class="p">(</span><span class="s2">"Reading 2D DICOM files."</span><span class="p">)</span>
<span class="k">catch</span>
    <span class="nb">disp</span><span class="p">(</span><span class="s2">"Reading 3D DICOM files."</span><span class="p">)</span>
<span class="k">end</span>
</code></pre></div></div>

<h3 id="perframefunctionalgroupssequence">PerFrameFunctionalGroupsSequence</h3>

<p>The <code class="language-plaintext highlighter-rouge">PerFrameFunctionalGroupsSequence</code> is a collection of individual metadata which would otherwise be in each slice (2D DICOM file). It has multiple <code class="language-plaintext highlighter-rouge">Item</code>s, and the <code class="language-plaintext highlighter-rouge">i</code>‘th slice is represented in <code class="language-plaintext highlighter-rouge">PerFrameFunctionalGroupsSequence.Item_i</code>.</p>

<h3 id="how-to-find-corresponding-metadata-in-matlab">How to find corresponding metadata in MATLAB</h3>

<pre><code class="language-MATLAB">% First, obtain the DICOM information struct
info = dicominfo("#PATH_TO_DCM_FILE#");

% Direct the output to a text file
diary('./dcminfo.txt')

% Write the struct into the text file
% Use the third-party function `unfold()`
unfold(info)

% Search for the keyword using a text editor

% Stop recording the output
diary off
</code></pre>]]></content><author><name>Xiangxi Meng</name><email>https://mengxiangxi.info/</email></author><category term="Imaging" /><category term="cheat sheet" /><category term="dynamic imaging" /><summary type="html"><![CDATA[In MATLAB, the processing of DICOM files is taken care of by the Image Processing Toolbox. However, as far as I know, this toolbox does not support metadata indexing via numerical tags. In 3D DICOM by developers of United Imaging uEXPLORER, due to the hierarchy structure, indexing through tag names is very inconvenient.]]></summary></entry><entry><title type="html">核医学及辐射防护相关的法律法规与标准</title><link href="http://mengxiangxi.info/BLOG/imaging/2022/05/10/Regulations-nuclear-medicine.html" rel="alternate" type="text/html" title="核医学及辐射防护相关的法律法规与标准" /><published>2022-05-10T00:00:00+00:00</published><updated>2022-05-10T00:00:00+00:00</updated><id>http://mengxiangxi.info/BLOG/imaging/2022/05/10/Regulations-nuclear-medicine</id><content type="html" xml:base="http://mengxiangxi.info/BLOG/imaging/2022/05/10/Regulations-nuclear-medicine.html"><![CDATA[<p>核医学科开展诊疗活动和日常管理中，要受到各种法律、行政法规、部门规章、规范性文件等的约束。这里给出一个粗浅的总结。特别地，我们整理了国内对于正电子设备的相关标准。</p>

<h2 id="法律">法律</h2>

<ul>
  <li>中华人民共和国放射性污染防治法（2003）</li>
  <li>中华人民共和国核安全法（2017）</li>
  <li>中华人民共和国职业病防治法（2018）</li>
</ul>

<h2 id="行政法规">行政法规</h2>

<ul>
  <li>放射性同位素与射线装置安全和防护条例（2019）</li>
  <li>放射性药品管理办法（2022）</li>
  <li>放射性废物安全管理条例(2012)</li>
</ul>

<h2 id="部门规章">部门规章</h2>

<ul>
  <li>放射性同位素与射线装置安全许可管理办法（2021）</li>
  <li>放射诊疗管理规定（2016）</li>
  <li>放射工作人员职业健康管理办法（2007）</li>
  <li>放射性物品运输安全许可管理办法（2021）</li>
  <li>工作场所职业卫生管理规定（2020）</li>
</ul>

<h2 id="标准">标准</h2>

<h3 id="国家标准">国家标准</h3>

<ul>
  <li>GB 18871—2002 电离辐射防护与辐射安全基本标准 <a href="http://www.nirp.cn/userfiles/file/GB18871-2002.pdf">下载地址</a></li>
  <li>GB 16361—2012 临床核医学的患者防护与质量控制规范 <a href="http://www.nhc.gov.cn/ewebeditor/uploadfile/2014/10/20141029113914449.pdf">下载地址</a></li>
  <li>GB 11806—2019 放射性物品安全运输规程 <a href="https://www.mee.gov.cn/ywgz/fgbz/bz/bzwb/hxxhj/fsxhjbz/201903/W020190322511199923924.pdf">下载地址</a></li>
</ul>

<h3 id="其它标准">其它标准</h3>

<ul>
  <li>GBZ 120-2020 核医学放射防护要求 【国家职业卫生标准】<a href="http://www.nhc.gov.cn/fzs/s7852d/202011/9d778170b914471fad56cf8308d4bda1/files/657e04bc556e428db6db6f4bc98191a7.pdf">下载地址</a>
    <blockquote>
      <p>本标准代替了GBZ 120—2006、GBZ 133—2009、GBZ 134—2002、GBZ 136—2002、GBZ 178—2017、WS 457—2014、WS 533—2017、GBZ 179—2006的核医学部分。</p>
    </blockquote>
  </li>
  <li>GBZ 98—2020 放射工作人员健康要求及监护规范 【国家职业卫生标准】<a href="http://www.nhc.gov.cn/fzs/s7852d/202011/9d778170b914471fad56cf8308d4bda1/files/9c0c4af0e6704c56aa56ede4bb1a7b14.pdf">下载地址</a></li>
  <li><del>WS 533—2017 临床核医学患者防护要求 【卫生行业标准】</del></li>
  <li>HJ 1188—2021 核医学辐射防护与安全要求 【生态环境标准】<a href="https://www.mee.gov.cn/ywgz/fgbz/bz/bzwb/hxxhj/xgbz/202109/W020210922368889711824.pdf">下载地址</a></li>
  <li>T/CSBME 041—2021 PET/CT肺癌检查操作和应用</li>
  <li>DB31/T 1116-2018 <sup>18</sup>F-FDG PET/CT肿瘤显像报告要素规范</li>
</ul>

<h3 id="正电子设备相关标准">正电子设备相关标准</h3>

<ul>
  <li>NEMA NU2-2018 Performance Measurements of Positron Emission Tomographs (PET)
 <a href="https://www.nema.org/standards/view/Performance-Measurements-of-Positron-Emission-Tomographs">购买</a></li>
  <li>IEC TR 61675-1:2022 Radionuclide imaging devices - Characteristics and test conditions - Part 1: Positron emission tomographs <a href="https://webstore.iec.ch/publication/67292">购买</a></li>
  <li>IEC TR 61948-3:2018 Nuclear medicine instrumentation - Routine tests - Part 3: Positron emission tomographs <a href="https://webstore.iec.ch/publication/60788">购买</a></li>
  <li>GB/T 18988.1—2013 放射性核素成像设备 性能和试验规则 第1部分：正电子发射断层成像装置 <a href="https://file.wuxuwang.com/qixieflyzbz/355_GB18988.1-2013.pdf">未经证实的来源</a>
    <blockquote>
      <p>引用IEC TR 61675-1:1998，但将NEMA NU2-2007列入附录</p>
    </blockquote>
  </li>
  <li>GB/T 20013.3—2015 核医学仪器 例行试验 第3部分：正电子发射断层成像装置 <a href="https://file.wuxuwang.com/qixieflyzbz/354_GB20013.3-2015.pdf">未经证实的来源</a>
    <blockquote>
      <p>引用IEC TR 61948-3:2005</p>
    </blockquote>
  </li>
  <li>GB/T 39867—2021 正电子发射断层扫描仪用锗酸铋闪烁晶体 <a href="https://openstd.samr.gov.cn/bzgk/gb/newGbInfo?hcno=008448C47454207CAB87FF9E7FFC7106">下载地址</a></li>
  <li>WS 817—2023 正电子发射断层成像（PET）设备质量检测标准 <a href="http://www.nhc.gov.cn/wjw/pcrb/202303/c3f0c8f0185e4f2fa065ba39b08d0dbd.shtml">下载地址</a></li>
  <li>DB32/T 4451.8-2023 医用影像设备临床使用管理与质量控制规范 第8部分：正电子发射及X射线计算机断层成像系统（PETCT）</li>
  <li>DB32/T 4451.9-2023 医用影像设备临床使用管理与质量控制规范 第9部分：正电子发射磁共振成像系统（PETMR）</li>
  <li>YY/T0829—2011 正电子发射及X射线计算机断层成像系统性能和试验方法 <a href="https://file.wuxuwang.com/qixieflyzbz/357_YY0829-2011.pdf">未经证实的来源</a>
    <blockquote>
      <p>这一标准分别规定了CT和PET部分的性能测试方案与标准，其中PET部分更偏向NEMA NU2标准，并将NU2-2018 标准引入附录。</p>
    </blockquote>
  </li>
  <li>T/CAME 6—2019 PET/MR质量控制检测规范</li>
  <li>T/CAME 10-2019 正电子发射X射线计算机断层成像系统(PET/CT)图像融合软件临床应用质量检测技术规范</li>
  <li>国家药监局《正电子发射/X射线计算机断层成像系统注册技术审查指导原则》 <a href="https://www.cmde.org.cn/flfg/zdyz/zdyzwbk/20200312140405299.html">下载地址</a></li>
  <li>国家药监局医疗器械技术评审中心《正电子发射/X射线计算机断层成像系统（数字化技术专用）注册审查指导原则》 <a href="https://www.cmde.org.cn/flfg/zdyz/zdyzwbk/20220120131600594.html">下载地址</a></li>
</ul>

<h2 id="其它">其它</h2>

<p>有两项卫生行业标准（WS/T XXX-XXXX）即将发布：</p>

<ul>
  <li>医用磁共振（MR）及正电子发射体层显像/磁共振（PET/MR）成像设备质量控制检测规范</li>
  <li>正电子发射断层成像设备（PET）质量控制检测规范</li>
</ul>

<p>还有两项职业卫生标准（GBZ）在征求意见：</p>

<ul>
  <li>正电子发射断层成像设备（PET）质量控制检测规范（与WS/T名称相同但内容有差异）</li>
  <li>正电子发射断层成像（PET）的放射防护要求</li>
</ul>]]></content><author><name>Xiangxi Meng</name><email>https://mengxiangxi.info/</email></author><category term="Imaging" /><category term="Chinese" /><category term="resources" /><category term="regulatory" /><summary type="html"><![CDATA[核医学科开展诊疗活动和日常管理中，要受到各种法律、行政法规、部门规章、规范性文件等的约束。这里给出一个粗浅的总结。特别地，我们整理了国内对于正电子设备的相关标准。]]></summary></entry></feed>