From 8e04b9a7593579f9228ad5e584ec5ecb87f4a5e2 Mon Sep 17 00:00:00 2001 From: Cal Wing <20716204+calw20@users.noreply.github.com> Date: Tue, 22 Oct 2024 14:04:36 +1000 Subject: [PATCH] Update info.yaml and quick refactor --- data/x2s5823/_info.yaml | 51 +++++++++++++++----- data/x2s5824/_info.yaml | 32 ++++++++++++- data/x2s5827/_info.yaml | 33 +++++++++++-- data/x2s5829/_info.yaml | 53 ++++++++++++++------- data/x2s5830/_info.yaml | 42 +++++++++-------- data/x2s5831/_info.yaml | 14 ++++++ data/x2s5832/_info.yaml | 17 +++++++ main.py | 102 +++++++++++++++++++++++----------------- 8 files changed, 250 insertions(+), 94 deletions(-) diff --git a/data/x2s5823/_info.yaml b/data/x2s5823/_info.yaml index 792a3f8..3a30f42 100644 --- a/data/x2s5823/_info.yaml +++ b/data/x2s5823/_info.yaml @@ -12,31 +12,58 @@ shot-info: config: "x2s5823.config" info: "x2s5823.txt" +pcb-canny: + - sigma: 4 + post_pres: 0.05 + # Canny Args canny-args: - sigma: 2 post_pres: 0.03 +no-graph: + - "None" + # - "at1" + # - "at2" + # - "at3" + + # - "at4" + # - "at5" + # - "at6" + pcb-refs: + #- "at1" + #- "at2" + #- "at3" + # + #- "at4" + #- "at5" + #- "at6" + - "st1" - "st3" probe-info: type: "Fat" - locations: # In order of pulse - - "st2" overhang: 1 # mm c2c: 5.6 # mm gauge-diam: 3.05 # mm gauge-c2c: 4 #mm - data-record: - type: "scope" - config: "eProbe-Scope.txt" - data: "eProbe-Scope.csv" - - trigger: - type: "channel" - channel: 4 - alignment-offset: 0 # 601 # us [TODO] Make this auto-magic - delay: 100 # us + + gauges: + - 1 + - 2 + locations: # In order of pulse + - "st2" + + data-records: + - type: "scope" + config: "eProbe-Scope.txt" + data: "eProbe-Scope.csv" + + trigger: # Redundant? + type: "channel" + channel: 4 + alignment-offset: 0 # 601 # us [TODO] Make this auto-magic + delay: 100 # us diff --git a/data/x2s5824/_info.yaml b/data/x2s5824/_info.yaml index 10ca2a6..71e14d0 100644 --- a/data/x2s5824/_info.yaml +++ b/data/x2s5824/_info.yaml @@ -12,23 +12,51 @@ shot-info: config: "x2s5824.config" info: "x2s5824.txt" +pcb-canny: + - sigma: 4 + post_pres: 0.05 + # Canny Args canny-args: - sigma: 2 post_pres: 0.03 +no-graph: + - "None" + # - "at1" + # - "at2" + # - "at3" + + # - "at4" + # - "at5" + # - "at6" + pcb-refs: + #- "at1" + #- "at2" + #- "at3" + # + #- "at4" + #- "at5" + #- "at6" + - "st1" - "st3" probe-info: type: "Thin" - locations: # In order of pulse - - "st2" overhang: 1 # mm c2c: 5.6 # mm gauge-diam: 0.8 # mm gauge-c2c: 1.8 #mm + + gauges: + - 1 + - 2 + locations: # In order of pulse + - "st2" + - "st3" + data-record: type: "scope" config: "eProbe-Scope.txt" diff --git a/data/x2s5827/_info.yaml b/data/x2s5827/_info.yaml index 1c590a8..6db0be0 100644 --- a/data/x2s5827/_info.yaml +++ b/data/x2s5827/_info.yaml @@ -12,6 +12,10 @@ shot-info: config: "x2s5827.config" info: "x2s5827.txt" +pcb-canny: + - sigma: 4 + post_pres: 0.05 + # Canny Args canny-args: - sigma: 2 @@ -20,18 +24,41 @@ canny-args: - sigma: 0.75 post_pres: 0.1 +no-graph: + - "None" + # - "at1" + # - "at2" + # - "at3" + + # - "at4" + # - "at5" + # - "at6" + pcb-refs: + #- "at1" + #- "at2" + #- "at3" + # + #- "at4" + #- "at5" + #- "at6" + - "st1" probe-info: type: "Thin" - locations: # In order of pulse - - "st2" - - "st3" overhang: 1 # mm c2c: 5.6 # mm gauge-diam: 0.8 # mm gauge-c2c: 1.8 #mm + + gauges: + - 1 + - 2 + locations: # In order of pulse + - "st2" + - "st3" + data-record: type: "scope" config: "eProbe-Scope.txt" diff --git a/data/x2s5829/_info.yaml b/data/x2s5829/_info.yaml index ad98c18..4caccec 100644 --- a/data/x2s5829/_info.yaml +++ b/data/x2s5829/_info.yaml @@ -22,31 +22,52 @@ canny-args: - sigma: 1 post_pres: 0.2 -pcb-refs: - - "st1" +pcb-canny: + - sigma: 4 + post_pres: 0.05 no-graph: - "None" + # - "at1" + # - "at2" + # - "at3" + + # - "at4" + # - "at5" + # - "at6" + +pcb-refs: + #- "at1" + #- "at2" + #- "at3" + # + #- "at4" + #- "at5" + #- "at6" + + - "st1" probe-info: type: "Thin" - locations: # In order of pulse - - "st2" - - "st3" overhang: 1 # mm c2c: 5.6 # mm gauge-diam: 0.8 # mm gauge-c2c: 1.8 #mm - data-records: - - type: "scope" - config: "eProbe-Scope.txt" - data: "eProbe-Scope.csv" + gauges: + - 1 + - 2 + locations: # In order of pulse + - "st2" + - "st3" + + data-record: + type: "scope" + config: "eProbe-Scope.txt" + data: "eProbe-Scope.csv" - trigger: # Redundant? - type: "channel" - channel: 4 - alignment-offset: 0 # 601 # us [TODO] Make this auto-magic - delay: 100 # us - - + trigger: # Redundant? + type: "channel" + channel: 4 + alignment-offset: 0 # 601 # us [TODO] Make this auto-magic + delay: 100 # us \ No newline at end of file diff --git a/data/x2s5830/_info.yaml b/data/x2s5830/_info.yaml index 18fa09b..989a42e 100644 --- a/data/x2s5830/_info.yaml +++ b/data/x2s5830/_info.yaml @@ -20,7 +20,12 @@ canny-args: - sigma: 1 post_pres: 0.2 +pcb-canny: + - sigma: 4 + post_pres: 0.05 + no-graph: + - "None" - "at1" - "at2" - "at3" @@ -30,38 +35,37 @@ no-graph: - "at6" pcb-refs: - - "st1" - - "at1" - "at2" - "at3" - + - "at4" - "at5" - "at6" + - "st1" + probe-info: type: "Thin" + overhang: 1 # mm + c2c: 5.6 # mm + gauge-diam: 0.8 # mm + gauge-c2c: 1.8 #mm + gauges: - 1 - 2 locations: # In order of pulse - "st2" - "st3" - overhang: 1 # mm - c2c: 5.6 # mm - gauge-diam: 0.8 # mm - gauge-c2c: 1.8 #mm - - data-records: - - type: "scope" - config: "eProbe-Scope.txt" - data: "eProbe-Scope.csv" + + data-record: + type: "scope" + config: "eProbe-Scope.txt" + data: "eProbe-Scope.csv" - trigger: # Redundant? - type: "channel" - channel: 4 - alignment-offset: 0 # 601 # us [TODO] Make this auto-magic - delay: 100 # us - - + trigger: # Redundant? + type: "channel" + channel: 4 + alignment-offset: 0 # 601 # us [TODO] Make this auto-magic + delay: 100 # us \ No newline at end of file diff --git a/data/x2s5831/_info.yaml b/data/x2s5831/_info.yaml index 9faf8bd..dadf9a7 100644 --- a/data/x2s5831/_info.yaml +++ b/data/x2s5831/_info.yaml @@ -2,6 +2,7 @@ # Cal Wing - Oct 24 long_name: "Shot 6 (x2s5829) - Thin Probe (ST1, ST2 & ST3) - 2024-10-18 - Flush ST2" +comments: "G2 Pointless, Wasn't attached" name: "Shot 6" date: "2024-10-18" time: "14:00" @@ -62,4 +63,17 @@ probe-info: alignment-offset: 0 # 601 # us [TODO] Make this auto-magic delay: 100 # us + - type: "x2" + channels: # Gauge Channel Name + - "st2" + - "st3" + + trigger: + type: "x2" + # Info isn't really needed + channel: "trigbox" + alignment-offset: 0 # 601 # us [TODO] Make this auto-magic + delay: 0 # us + + diff --git a/data/x2s5832/_info.yaml b/data/x2s5832/_info.yaml index 9276faa..ab0e131 100644 --- a/data/x2s5832/_info.yaml +++ b/data/x2s5832/_info.yaml @@ -12,6 +12,10 @@ shot-info: config: "{0}.config" info: "{0}.txt" +pcb-canny: + - sigma: 4 + post_pres: 0.05 + # Canny Args canny-args: - sigma: 2 @@ -66,4 +70,17 @@ probe-info: alignment-offset: 0 # 601 # us [TODO] Make this auto-magic delay: 100 # us + - type: "x2" + channels: # Gauge Channel Name + - "st2" + - "st3" + + trigger: + type: "x2" + # Info isn't really needed + channel: "trigbox" + alignment-offset: 0 # 601 # us [TODO] Make this auto-magic + delay: 0 # us + + diff --git a/main.py b/main.py index 444e1e5..8464504 100644 --- a/main.py +++ b/main.py @@ -30,11 +30,11 @@ with open(TUNNEL_INFO_FILE, 'r') as file: TUNNEL_INFO = yaml.safe_load(file) data_to_load = [ - #"x2s5823", - #"x2s5824", - #"x2s5827", + "x2s5823", + "x2s5824", + "x2s5827", "x2s5829", - #"x2s5830", + "x2s5830", "x2s5831", "x2s5832" ] @@ -201,13 +201,25 @@ def load_data(data_path: str, data={}) -> dict: # Find Shock Times # X2 - Canning Edge data[x2_shot]["shock-point"] = {} - for ref in dataInfo["pcb-refs"]: + cArgs = dataInfo["pcb-canny"] + for i, ref in enumerate(dataInfo["pcb-refs"]): refData = data[x2_shot]["data"]["x2"][ref] - first_value, first_value_uncertainty, _, _ = canny_shock_finder(x2_time_us, refData, plot=False, print_func=None) + + if i in range(len(cArgs)): + sigma = cArgs[i]["sigma"] + post_sup_thresh = cArgs[i]["post_pres"] + else: + sigma = cArgs[-1]["sigma"] + post_sup_thresh = cArgs[-1]["post_pres"] + + first_value, first_value_uncertainty, _, _ = canny_shock_finder(x2_time_us, refData, sigma=sigma, post_suppression_threshold=post_sup_thresh, plot=False, print_func=None) shock_point = np.where(x2_time_us >= first_value)[0][0] # [BUG] Seems to give n+1 data[x2_shot]["shock-point"][ref] = shock_point, first_value + + + # ---- Gauge Canning Edge ---- for i, probe in enumerate(dataInfo["probe-info"]["locations"]): probeCh1 = data[x2_shot]["data"]["probes"][0] probeCh2 = data[x2_shot]["data"]["probes"][1] @@ -230,27 +242,29 @@ def load_data(data_path: str, data={}) -> dict: time_offset = None # Find G1 Shock Time - first_value, first_value_uncertainty, _, _ = canny_shock_finder(scope_time, probeCh1, sigma=sigma, post_suppression_threshold=post_sup_thresh, plot=doCannyPlot, start_time=time_offset, print_func=None) - if first_value is None: - print(f"[ERROR] {x2_shot} - {probe}-g1 could not be detected using: Sigma = {sigma}, post_suppression_threshold = {post_sup_thresh}") - raise ValueError(f"{probe}-g1 not detected") + if 1 in dataInfo["probe-info"]["gauges"]: + first_value, first_value_uncertainty, _, _ = canny_shock_finder(scope_time, probeCh1, sigma=sigma, post_suppression_threshold=post_sup_thresh, plot=doCannyPlot, start_time=time_offset, print_func=None) + if first_value is None: + print(f"[ERROR] {x2_shot} - {probe}-g1 could not be detected using: Sigma = {sigma}, post_suppression_threshold = {post_sup_thresh}") + raise ValueError(f"{probe}-g1 not detected") - shock_point = np.where(scope_time >= first_value)[0][0] # [BUG] Seems to give n+1 + shock_point = np.where(scope_time >= first_value)[0][0] # [BUG] Seems to give n+1 - data[x2_shot]["shock-point"][f"{probe}-g1"] = shock_point, first_value + data[x2_shot]["shock-point"][f"{probe}-g1"] = shock_point, first_value - # Do the same for G2 - if i > 0: - time_offset = data[x2_shot]["shock-point"][f"{privPoint}-g2"][1] + CANNY_TIME_OFFSET + if 2 in dataInfo["probe-info"]["gauges"]: + # Do the same for G2 + if i > 0: + time_offset = data[x2_shot]["shock-point"][f"{privPoint}-g2"][1] + CANNY_TIME_OFFSET - # Find G2 Shock Time - first_value, first_value_uncertainty, _, _ = canny_shock_finder(scope_time, probeCh2, sigma=sigma, post_suppression_threshold=post_sup_thresh, plot=doCannyPlot, start_time=time_offset, print_func=None) - if first_value is None: - print(f"[ERROR] {x2_shot} - {probe}-g2 could not be detected using: Sigma = {sigma}, post_suppression_threshold = {post_sup_thresh}") - raise ValueError(f"{probe}-g2 not detected") + # Find G2 Shock Time + first_value, first_value_uncertainty, _, _ = canny_shock_finder(scope_time, probeCh2, sigma=sigma, post_suppression_threshold=post_sup_thresh, plot=doCannyPlot, start_time=time_offset, print_func=None) + if first_value is None: + print(f"[ERROR] {x2_shot} - {probe}-g2 could not be detected using: Sigma = {sigma}, post_suppression_threshold = {post_sup_thresh}") + raise ValueError(f"{probe}-g2 not detected") - shock_point = np.where(scope_time >= first_value)[0][0] # [BUG] Seems to give n+1 - data[x2_shot]["shock-point"][f"{probe}-g2"] = shock_point, first_value + shock_point = np.where(scope_time >= first_value)[0][0] # [BUG] Seems to give n+1 + data[x2_shot]["shock-point"][f"{probe}-g2"] = shock_point, first_value # Calculate Shock Speeds print("="*30, x2_shot, "="*30) @@ -268,34 +282,38 @@ def load_data(data_path: str, data={}) -> dict: print() for probe in dataInfo["probe-info"]["locations"]: - g1_time = data[x2_shot]["shock-point"][f"{probe}-g1"][1] / 1e6 # Convert to seconds - g2_time = data[x2_shot]["shock-point"][f"{probe}-g2"][1] / 1e6 # Convert to seconds - c2c_dist = dataInfo["probe-info"]["c2c"] / 1000 # convert to m + if f"{probe}-g1" in data[x2_shot]["shock-point"] and f"{probe}-g2" in data[x2_shot]["shock-point"]: + g1_time = data[x2_shot]["shock-point"][f"{probe}-g1"][1] / 1e6 # Convert to seconds + g2_time = data[x2_shot]["shock-point"][f"{probe}-g2"][1] / 1e6 # Convert to seconds + c2c_dist = dataInfo["probe-info"]["c2c"] / 1000 # convert to m - probe_velocity = c2c_dist / abs(g2_time - g1_time) # m/s + probe_velocity = c2c_dist / abs(g2_time - g1_time) # m/s - print(f"{probe} Measured a shock speed of {probe_velocity:.2f} m/s ({probe_velocity/1000:.2f} km/s)") - data[x2_shot]["shock-speed"][probe] = probe_velocity # m/s + print(f"{probe} Measured a shock speed of {probe_velocity:.2f} m/s ({probe_velocity/1000:.2f} km/s)") + data[x2_shot]["shock-speed"][probe] = probe_velocity # m/s + else: + print(f"Unable to calculate probe velocity, only have one probe: {f"{probe}-g2" if f"{probe}-g2" in data[x2_shot]["shock-point"] else f"{probe}-g1"}") if len(dataInfo["probe-info"]["locations"]) > 1: for i in range(len(dataInfo["probe-info"]["locations"]) - 1): probe_locs = dataInfo["probe-info"]["locations"] - p1_g1_time = data[x2_shot]["shock-point"][f"{probe_locs[i]}-g1"][1] / 1e6 # Convert to seconds - p1_g2_time = data[x2_shot]["shock-point"][f"{probe_locs[i]}-g2"][1] / 1e6 # Convert to seconds - - p2_g1_time = data[x2_shot]["shock-point"][f"{probe_locs[i+1]}-g1"][1] / 1e6 # Convert to seconds - p2_g2_time = data[x2_shot]["shock-point"][f"{probe_locs[i+1]}-g2"][1] / 1e6 # Convert to seconds - + p2p = (TUNNEL_INFO["distance"][probe_locs[1]] - TUNNEL_INFO["distance"][probe_locs[0]]) / 1000 # convert to m - p2p_1 = p2p / abs(p2_g1_time - p1_g1_time) # m/s - p2p_2 = p2p / abs(p2_g2_time - p1_g2_time) # m/s - - print(f"{probe_locs[i]}-{probe_locs[i + 1]} - G1 - Measured a shock speed of {p2p_1:.2f} m/s ({p2p_1/1000:.2f} km/s)") - print(f"{probe_locs[i]}-{probe_locs[i + 1]} - G2 - Measured a shock speed of {p2p_2:.2f} m/s ({p2p_2/1000:.2f} km/s)") - data[x2_shot]["shock-speed"][f"{probe_locs[i]}-{probe_locs[i + 1]}-g1"] = p2p_1 - data[x2_shot]["shock-speed"][f"{probe_locs[i]}-{probe_locs[i + 1]}-g2"] = p2p_2 - + if f"{probe_locs[i]}-g1" in data[x2_shot]["shock-point"] and f"{probe_locs[i+1]}-g1" in data[x2_shot]["shock-point"]: + p1_g1_time = data[x2_shot]["shock-point"][f"{probe_locs[i]}-g1"][1] / 1e6 # Convert to seconds + p2_g1_time = data[x2_shot]["shock-point"][f"{probe_locs[i+1]}-g1"][1] / 1e6 # Convert to seconds + p2p_1 = p2p / abs(p2_g1_time - p1_g1_time) # m/s + print(f"{probe_locs[i]}-{probe_locs[i + 1]} - G1 - Measured a shock speed of {p2p_1:.2f} m/s ({p2p_1/1000:.2f} km/s)") + data[x2_shot]["shock-speed"][f"{probe_locs[i]}-{probe_locs[i + 1]}-g2"] = p2p_2 + + if f"{probe_locs[i]}-g2" in data[x2_shot]["shock-point"] and f"{probe_locs[i+1]}-g2" in data[x2_shot]["shock-point"]: + p1_g2_time = data[x2_shot]["shock-point"][f"{probe_locs[i]}-g2"][1] / 1e6 # Convert to seconds + p2_g2_time = data[x2_shot]["shock-point"][f"{probe_locs[i+1]}-g2"][1] / 1e6 # Convert to seconds + p2p_2 = p2p / abs(p2_g2_time - p1_g2_time) # m/s + print(f"{probe_locs[i]}-{probe_locs[i + 1]} - G2 - Measured a shock speed of {p2p_2:.2f} m/s ({p2p_2/1000:.2f} km/s)") + data[x2_shot]["shock-speed"][f"{probe_locs[i]}-{probe_locs[i + 1]}-g1"] = p2p_1 + print() # Return the data & the successfully loaded data keys