Data Formats

This documentation contains information for the data structures of different saved files by the LAr10Ana analysis modules. All data are saved in the SBC Binary Format. Depending on the enabled DAQ modules for each run and the available data files, not all analysis modules will run, and only a subset of the files may be generated.
The reconstructed data is available at

/exp/e961/data/SBC-25-recon

The output from the latest version will be available at dev-output/ folder, and any new data will be processed and saved here. Older versions are archived in folders named by the version number, like v0.0.5/.

See also

For documentation on the raw data, see Run Control Documentation

Version (version.txt)

The version.txt file saves the version of LAr10Ana repository that’s run to produce the outputs. Between manually added tags (like v0.0.1), it displays the number of commits from last tag, and the hash of latest commit.

Log File (<job_id>@jobsub<id>.fnal.gov.log)

This is the log file output from running EventDealer. Only runs with a zero exit code is saved.

Event Analysis (event.sbc)

This module (EventAnalysis.py) simply copies the information from event_info.sbc in the raw data folder.

  • run_id (string100): Run ID generated by run control software, like “20240101_0”. Run_ID and event_ID combined is a unique key for the event.

  • event_id (uint32): Integer event ID starting from 0 in the run.

  • ev_exit_code (uint16): Exit code when event stops. 0 means success, and other numbers mean some kind of error. Null value mean the event quitted unexpectedly.

  • ev_livetime (uint64): Run control livetime for this event.

  • cum_livetime (uint64): Cumulative livetime of the run at the end of the event.

  • pset_lo (float, bara): Lower pressure set point for this event.

  • pset_hi (float, bara): Higher pressure set point.

  • pset_ramp1 (float, bar/s): Rate of ramp from compressed state to pset_hi.

  • pset_ramp_down (flat, bar/s): Rate of ramp from pset_hi to pset_lo.

  • pset_ramp_up (flat, bar/s): Rate of ramp from pset_lo to pset_hi.

  • pset_period (float): Period of oscillation between higher and lower set points. In units of seconds.

  • start_time (double): Timestamp of the event start.

  • end_time (double): Timestamp of the event stop.

  • trigger_source (string100): Name of trigger’s first fault.

  • runid (int, 2): Run ID of this row. (Added by EventDealer)

  • ev (int): Event ID of this row. (Added by EventDealer)

Exposure Analysis (exposure.sbc)

This module (ExposureAnalysis.py) looks at pressure transducers PT2121 (CF4 cryo) and PT1101 (Ar cryo) in slow_daq.sbc. For each PT, it counts the time the system spends in each pressure bin (0-10 bar in 0.05 bar interval). Then it only counts the portion of the pressure curve that’s below the most populated bin, which is counted as “expanded”

  • PT2121_pressure: Average pressure when expanded

  • PT2121_livetime: Time spent expanded

  • PT1101_pressure: Average pressure when expanded

  • PT1101_livetime: Time spent expanded

  • runid (int, 2): Run ID of this row. (Added by EventDealer)

  • ev (int): Event ID of this row. (Added by EventDealer)

Scintillation Analysis (scintillation.sbc)

This module (SiPMPulses.py) loads the scintillation file for each event, and performs basic analysis on the waveform of each CAEN trigger. Then the triggers of all events are concatenated together in this file. All analysis are done per CAEN trigger per channel. If no hit is identified, it will be saved as np.nan.

  • baseline: The baseline of the waveform, taken as the mean of the start of the waveform

  • rms: The root-mean-squared (RMS) value across the waveform, with signal regions removed

  • hit_t0: The initial time (t0) of the first hit in the waveform. Units of us.

  • hit_tf: The end time of the first hit in the waveform. Units of us.

  • hit_area: The sum of the ADC values within an identified hit. The baseline is subtracted such that this value is positive for a down-pulse. Units of mV.

  • wvf_area: The sum of the ADC values after the t0 from an identified hit. The baseline is subtracted such that this value is positive for a down-pulse. Units of mV.

  • second_pulse: Whether a second pulse also goes aabove threshold, after the first identified hit.

  • max_avg_fft_freq: The maximum frequency bin from the FFT of the waveform.

  • runid (int, 2): Run ID of this row. (Added by EventDealer)

  • ev (int): Event ID of this row. (Added by EventDealer)

Scintillation Rate Analysis (scint_rate.sbc)

This module (ScintRate.py) follows the same structure as the scintillation module. For each CAEN trigger, is sums the number of channels that are hit, and gives a 32-bit number that tells which channels are hit.

  • n_hits: Number of hit SiPMs in this CAEN trigger.

  • hits_mask: 32-bit mask of channels that are hit.

  • runid (int, 2): Run ID of this row. (Added by EventDealer)

  • ev (int): Event ID of this row. (Added by EventDealer)

Bubble Finder (bubble.sbc)

This modules (BubbleFinder.py) looks at the frame-to-frame diff and applies a circle Hough Transform (CHT) to find bubbles.

  • bub_num: Index of the bubble. Each bubble in each frame from each camera will have its own unique ID in the event.

  • cam: Camera ID (1, 2, 3) of the bubble.

  • pos: (x, y) pixel position of the bubble center in the image.

  • radius: Estimated radius of the bubble in pixels.

  • significance: Ratio of this bubble’s CHT vote count to the maximum vote count in the event; 1.0 for the backward t0 scan.

  • frame: Frame number in which the bubble was detected.

  • runid (int, 2): Run ID of this row. (Added by EventDealer)

  • ev (int): Event ID of this row. (Added by EventDealer)

slowDAQTexpansion (t_expansion.sbc)

This module (SlowDAQTexpansion.py) loads slow_daq data for each event and output expansion and livetime analysis:

  • expansion (bool): if the expansion is successful. i.e. pressure achieved at target pressure 1000 ms before the compression

  • t_start_daq (float, ms): start time of expansion point in slowdaq channel

  • t_compression (float, ms): compression time. This synchronizes the trigger signal in all channels. It is when the SERVO valve reaches 100% output in the slowDAQ channel. It matches 800ms timestamp in acoustic channel with pre-trigger on and 40th camera image timestamp in camera channel with pre-trigger on

  • expansion_time (float, ms): the difference between t_start and t_compression.

  • runid (int, 2): Run ID of this row. (Added by EventDealer)

  • ev (int): Event ID of this row. (Added by EventDealer)

Notice:

  1. There is a slight difference between lifetime (timewindow between expansion begins and bubble formation) and expansion time because usually bubble formation time is slightly earlier than compression time in the order of 100 ms.

  2. How to get the lifetime: lifetime expansion time - (800-t0).  t0 is the reconstructed bubble formation time in acoustic channel and it is noted as t0_fitting=t_fit in PressureT0.py

PressureT0 (pressure_t0.sbc)

This module (PressureT0.py) loads [“acoustics”][“Waveforms”] for each event and output t0 finding process:

  • t0_fitting (float, ms): bubble generation timestamp in acoustic channel

  • a_fitting (float, bara/ms2): bubble generation pressure increase rate slope in the fitting

  • t0_sigma (float, ms): uncertainty of t0 fitting

  • a_sigma (float, bara/ms2): uncertainty of a fitting

  • chi_square value (float): chi_square of the fitting

Notice: In the fitting, the pressure change is fit to flat constant 0 + linear increasing function described by the t0: the junction point and a, the linear slope. The t0 here is in the timescale of acoustic channel

3D Position Reconstruction (reco.sbc)

This module (Reconstruction3D.py) pulls bubble pixel position data from the Bubble Finder module and triangulates to output the 3D coordinate of the bubble within the chamber. Uses the first frame where at least two cameras have defined pixel coordinates. Currently only supports single bubble events (multi-bubble support in progress).

  • coords_3D: Array of xyz coords, in inches. np.nan if no frame with at least two cameras defined.

  • runid (int, 2): Run ID of this row. (Added by EventDealer)

  • ev (int): Event ID of this row. (Added by EventDealer)

Scintillation/Digiscope Time Correlation and ScintT0 (scint_t0.sbc)

This module (ScintT0.py) correlates scintillation triggers with digiscope entries, determining the trigger latch time relative to scintillation time. Then, largest scintillation pulses near pressureT0 and within random windows are found.

  • Failed (int): indicates whether the module completed in its entirety or failed. Integer values correspond to the following failure modes. 0: no failure, module finished (any np.nan values in the pulse entries below means no pulses were found within the window); 1: no latch found in digiscope; 2: no CAEN triggers found in digiscope; 3: no scintillation triggers found; 4: not enough points (<2) for RANSAC fit; 5: pt0 failed; 6: pt0 module did not run.

  • latch_time_corrected (float, ms): time of trigger latch (from digiscope) in scintillation time, where t=0 is the time of the first scintillation CAEN trigger

  • pT0_in_scint_time (float, ms): pressureT0 time, relative to the first scintillation trigger

  • biggest_pulse_pt0_20ms (float , mV): the largest sum of the areas of all SiPM channels from Scintillation Analysis module (above) within +- 20ms of pressureT0

  • idx_biggest_pulse_pt0_20ms (int): index of the above pulse

  • scint_time_biggest_pulse_pt0_20ms (float, ms): time of the above pulse, relative to the first scintillation trigger

  • biggest_pulse_random_20ms (float, mV): the largest sum of the areas of all SiPM channels in a random 40ms window (before pT0 - 20ms, so no overlap between windows)

  • biggest_pulse_pt0_40ms (float, mV): the largest sum of the areas of all SiPM channels from Scintillation Analysis module (above) within +- 40ms of pressureT0

  • idx_biggest_pulse_pt0_40ms (int): index of the above pulse

  • scint_time_biggest_pulse_pt0_40ms (float, ms): time of the above pulse, relative to the first scintillation trigger

  • biggest_pulse_random_40ms (float, mV): the largest sum of the areas of all SiPM channels in a random 80ms window (before pT0 - 40ms)

  • runid (int, 2): Run ID of this row. (Added by EventDealer)

  • ev (int): Event ID of this row. (Added by EventDealer)

Acoustic Noise (acoustic_noise.sbc)

This module (AcousticNoise.py) checks for successful expansions and quiet mode, then calculates baselines and RMS noise for piezos 2-7.

  • succ_expansion (bool): if the expansion is successful. i.e. pressure achieved at target pressure 1000 ms before the compression

  • quiet_mode (bool): if the cyromech is off during the event

  • pset (float, bara): pressure setpoint

  • baselines (float, V): average pre-trigger waveform values for piezos 2-7

  • rms_noise_full (float, V): pre-trigger RMS noise for each piezo, full frequency range

  • rms_noise_0_5kHz (float, V): pre-trigger RMS noise for each piezo in 0-5 kHz frequency band

  • rms_noise_10_20kHz (float, V): same as previous, but 10-20 kHz

  • rms_noise_20_50kHz (float, V): same as previous, but 20-50 kHz

  • rms_noise_50_200kHz (float, V): same as previous, but 50-200 kHz

  • runid (int, 2): Run ID of this row. (Added by EventDealer)

  • ev (int): Event ID of this row. (Added by EventDealer)