Skip to content

Add C-Mod Thermal Quench Labeler#564

Draft
hwietfeldt wants to merge 21 commits into
devfrom
hcw/label-thermal-quench
Draft

Add C-Mod Thermal Quench Labeler#564
hwietfeldt wants to merge 21 commits into
devfrom
hcw/label-thermal-quench

Conversation

@hwietfeldt

Copy link
Copy Markdown
Contributor

Overview

I created a C-Mod physics method get_thermal_quench_onset_time() that labels the onset of the thermal quench (TQ) for a given shot (NaN for non-disruptive shots) using a vertical SXR array. The TQ time is returned as a column with identical values for each time slice. I used SXR instead of ECE because ECE is less reliable (especially for shots at low Bt) and because the SXR arrays can track the plasma core during a hot VDE. I used a vertical array because the horizontal array wasn't working for most 2005 shots. For 100 manually labeled flattop TQ onsets, this method labeled the onset within 1 ms of the manual label in 90% of cases. For the remaining 10%, the automated TQ label is usually still a more accurate disruption time metric compared to the current t_disrupt based on the maximum of |dIp/dt|. This method has also worked well in my UFO labeling workflow. I have not tested this method during ramp-up or ramp-down

Steps of Method

  1. Read Ip and SXR chords from MDSplus
  2. Subtract background from each SXR chord
  3. Discard bad chords dominated by noise by removing chords with low autocorrelation.
  4. Filter the SXR chords using a non-causal Butterworth low pass filter.
    This helps to smooth transient, positive SXR spikes during the TQ, which I attribute to recombination radiation. There is a tradeoff when choosing the cutoff frequency between maintaining decent temporal resolution and removing the recombination spikes. I found a cutoff frequency of 1 kHz works best.
  5. Select the SXR chord viewing the core by taking the maximum of SXR across all chords for each time slice.
  6. Search for the onset of the CQ based on Ip and t_disrupt.
    This enables us to search for the TQ in a small time window prior to the CQ onset. We need a small search window to avoid labeling sawtooth crashes as the TQ while enabling us to label the TQ for shots with long CQs (see shots 1050311013, 1050802017).
  7. Find the midpoint of the TQ by finding the minimum of dSXR/dt within a 5 ms window prior to the CQ onset.
  8. Find the TQ onset within a 0.5 ms window prior to the TQ midpoint.
    Note that almost all TQs have a duration less than 1 ms.

Case that works well

good_case

We correctly label the TQ onset, which is around 7 ms prior to $t_{disrupt}$. The $T_{e0}$ signal is junk because ECE was not working on this shot, which motivates the use of SXR for TQ labeling on C-Mod.

Results from Testing

man_labels_test

I tested this method on 100 disruptive shots for which I manually labeled the TQ onset and end using ECE, SXR, H alpha, and other diagnostics. The plot below compared the error in the automated TQ onset vs the error we currently get when we use t_disrupt as the onset of the disruption compared to my manually labeled TQ onsets. From the y-values, we see that the automated TQ labeling routine labeled the TQ onset within 0.5 ms of the actual onset for most shots. As guaranteed by the algorithm, no automated TQ labels are later than t_disrupt. There are a several labels that are early or late by more than a ms. In these cases, there may be some ambiguity in the TQ onset (multiple partial thermal collapses), or there were strong recombination spikes. The search windows and filtering cutoff frequency have tradeoffs, so I was not able to eliminate these outliers. Nevertheless, I believe that the TQ labels provide a much more accurate metric of the onset time of the disruption for many of our workflows compared to the current t_disrupt.

Most early label

most_early_label

In this shot, the TQ time is automatically labeled around 0.511 s, which is at the onset of a sawtooth or small thermal collapse. I manually labeled the TQ onset around 0.514 s, which is the main thermal quench according to ECE (second panel) and the Ip spike (first panel). Again, I don't think that is 3 ms early label for the TQ is too bad. Using t_disrupt may be worse for some workflows as it is clearly after the disruption onset. If using t_disrupt, the user risks leaking disruption information into their disruption prediction model.

Most late label

Screenshot 2026-06-04 at 3 21 13 PM

Here a very strong SXR recombination spike coupled with a long delay between the Ip spike and when Ip crashes causes a late label. The TQ onset is not much better than t_disrupt, but it's also not worse.

Timing

I timed various steps of the TQ labeler. It can be slow for disruptive shots from 2012-2016. Note that for 2005 shots, the SXR was digitized at 5 kHz, not 250 kHz, so the algorithm is faster. Reading all 38 chords from MDSplus is a bottleneck. I tried using MDSplus's getMany() function to read the chords in one batch call; however, that was slower. For non-disruptive shots, the algorithm is fast because it immediately returns NaNs if t_disrupt is 0.

Timing averages for 2005 shots
Reading MDSplus: 0.20789 s
Calculating autocorrelation: 0.0264536 s
Butterworth Filter: 0.00573944 s
Finding TQ: 0.000120203 s
Total: 0.242485 s

Timing averages for 2012-2016 shots
Reading MDSplus: 3.87387 s
Calculating autocorrelation: 0.0920277 s
Butterworth Filter: 0.194109 s
Finding TQ: 0.00131993 s
Total: 4.16501 s

@hwietfeldt hwietfeldt added enhancement Improvements or proposed new features machine: C-MOD Related to the Alcator C-MOD tokamak physics Related to plasma physics labels Jun 4, 2026
@hwietfeldt hwietfeldt changed the title Add Thermal Quench Labeler Add C-Mod Thermal Quench Labeler Jun 4, 2026
@hwietfeldt

Copy link
Copy Markdown
Contributor Author

@yumouwei @AlexSaperstein

Once we are satisfied with the method and testing, I'll clean up the method and turn the draft PR into a normal PR.

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

Labels

enhancement Improvements or proposed new features machine: C-MOD Related to the Alcator C-MOD tokamak physics Related to plasma physics

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant