From c5f24cb0bf794b48cc637d9bcb90d4926e592aeb Mon Sep 17 00:00:00 2001 From: Cal Wing <20716204+calw20@users.noreply.github.com> Date: Fri, 18 Oct 2024 21:08:55 +1000 Subject: [PATCH] debug shit --- data/x2s5829/_info.yaml | 3 ++ data/x2s5831/_info.yaml | 2 +- data/x2s5832/_info.yaml | 18 ++++++---- main.py | 74 +++++++++++++++++++++-------------------- 4 files changed, 53 insertions(+), 44 deletions(-) diff --git a/data/x2s5829/_info.yaml b/data/x2s5829/_info.yaml index af6c4f4..ad98c18 100644 --- a/data/x2s5829/_info.yaml +++ b/data/x2s5829/_info.yaml @@ -25,6 +25,9 @@ canny-args: pcb-refs: - "st1" +no-graph: + - "None" + probe-info: type: "Thin" locations: # In order of pulse diff --git a/data/x2s5831/_info.yaml b/data/x2s5831/_info.yaml index 05fbdf5..9faf8bd 100644 --- a/data/x2s5831/_info.yaml +++ b/data/x2s5831/_info.yaml @@ -18,7 +18,7 @@ canny-args: post_pres: 0.03 - sigma: 1 - post_pres: 0.2 + post_pres: 0.05 no-graph: - "at1" diff --git a/data/x2s5832/_info.yaml b/data/x2s5832/_info.yaml index 67404f6..9276faa 100644 --- a/data/x2s5832/_info.yaml +++ b/data/x2s5832/_info.yaml @@ -1,7 +1,7 @@ # Data Info File # Cal Wing - Oct 24 -long_name: "Shot 7 (x2s5829) - Thin Probe Set (ST1, ST2 & ST3) - 2024-10-18 - Flush ST3 - - Low Pressure, 'Pure' Air" +long_name: "Shot 7 (x2s5829) - Thin Probe Set (ST1, ST2 & ST3) - 2024-10-18\nFlush ST3 - Low Pressure, 'Pure' Air" name: "Shot 6" date: "2024-10-18" time: "15:58" @@ -19,15 +19,19 @@ canny-args: - sigma: 1 post_pres: 0.2 + + - sigma: 1 + post_pres: 0.05 no-graph: - - "at1" - - "at2" - - "at3" + - "None" + # - "at1" + # - "at2" + # - "at3" - - "at4" - - "at5" - - "at6" + # - "at4" + # - "at5" + # - "at6" pcb-refs: - "at1" diff --git a/main.py b/main.py index da2a6cf..444e1e5 100644 --- a/main.py +++ b/main.py @@ -33,8 +33,10 @@ data_to_load = [ #"x2s5823", #"x2s5824", #"x2s5827", - #"x2s5829", - "x2s5830", + "x2s5829", + #"x2s5830", + "x2s5831", + "x2s5832" ] # ==== Data Loading & Processing ==== @@ -44,11 +46,11 @@ def load_data(data_path: str, data={}) -> dict: print(f"[ERR] Could not find data info file: '{data_info_path}'") print(f"[WARN] Not Loading Data '{data_path}'") return None - + # Load Shot Data Info YAML File (Cal) with open(data_info_path, 'r') as file: dataInfo = yaml.safe_load(file) - + # Grab the shot name x2_shot = dataInfo["shot-info"]["name"] @@ -56,13 +58,13 @@ def load_data(data_path: str, data={}) -> dict: dataInfo["shot-info"]["tdms"] = dataInfo["shot-info"]["tdms"].format(x2_shot) dataInfo["shot-info"]["config"] = dataInfo["shot-info"]["config"].format(x2_shot) dataInfo["shot-info"]["info"] = dataInfo["shot-info"]["info"].format(x2_shot) - + # Load Raw Data # TDMS File (X2 DAQ Data) x2_tdms_data = TdmsFile.read(data_path + dataInfo["shot-info"]['tdms'], raw_timestamps=True) x2_channels = x2_tdms_data.groups()[0].channels() x2_channel_names = tuple(c.name for c in x2_channels) - + data_locs = [dr["type"] for dr in dataInfo["probe-info"]["data-records"]] # Scope info _if it exists_ @@ -80,16 +82,16 @@ def load_data(data_path: str, data={}) -> dict: for i, line in enumerate(dfile): if i > 1: break header_lines.append(line.strip().split(",")) - + for i, name in enumerate(header_lines[0]): if name == "x-axis": name = "Time" - + if header_lines[1][i] in ["second", "Volt"]: outStr = f"{name} [{header_lines[1][i][0]}]" else: outStr = f"{name} [{header_lines[1][i]}]" - + scope_header.append(outStr) # Load the Scope CSV Data @@ -117,14 +119,14 @@ def load_data(data_path: str, data={}) -> dict: "x2": {}, # Only pop channels with a voltage scale in ./tunnel-info.yaml "probes": [[None], [None]] # Save probe data in volts - [G1, G2] }, - "shock-speed": {} # Note all in us + "shock-speed": {} # Note all in us } # === Process the data === # Generate X2 time arrays time_data = x2_channels[0] - - ns_time = time_data[:].as_datetime64('ns') + + ns_time = time_data[:].as_datetime64('ns') x2_time_seconds = (ns_time - ns_time[0]) # timedelta64[ns] x2_time_us = x2_time_seconds.astype("float64") / 1000 # Scale to us @@ -203,20 +205,20 @@ def load_data(data_path: str, data={}) -> dict: refData = data[x2_shot]["data"]["x2"][ref] first_value, first_value_uncertainty, _, _ = canny_shock_finder(x2_time_us, refData, 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 - + for i, probe in enumerate(dataInfo["probe-info"]["locations"]): probeCh1 = data[x2_shot]["data"]["probes"][0] probeCh2 = data[x2_shot]["data"]["probes"][1] - + # Get the canny-args cArgs = dataInfo["canny-args"] doCannyPlot = False if i in range(len(cArgs)): sigma = cArgs[i]["sigma"] post_sup_thresh = cArgs[i]["post_pres"] - else: + else: sigma = cArgs[-1]["sigma"] post_sup_thresh = cArgs[-1]["post_pres"] @@ -234,22 +236,22 @@ def load_data(data_path: str, data={}) -> dict: raise ValueError(f"{probe}-g1 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}-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 - + # 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 - + # Calculate Shock Speeds print("="*30, x2_shot, "="*30) print("--", dataInfo["long_name"], "--") @@ -258,8 +260,8 @@ def load_data(data_path: str, data={}) -> dict: if i == 0: continue p1_time = data[x2_shot]["shock-point"][refProbe][1] / 1e6 # Convert to seconds p2_time = data[x2_shot]["shock-point"][dataInfo["pcb-refs"][i-1]][1] / 1e6 # Convert to seconds - p2p_dist = (TUNNEL_INFO["distance"][refProbe] - TUNNEL_INFO["distance"][dataInfo["pcb-refs"][i-1]]) / 1000 # convert to m - + p2p_dist = (TUNNEL_INFO["distance"][refProbe] - TUNNEL_INFO["distance"][dataInfo["pcb-refs"][i-1]]) / 1000 # convert to m + probe_velocity = p2p_dist / abs(p2_time - p1_time) # m/s print(f"{refProbe}-{dataInfo["pcb-refs"][i-1]} Measured a shock speed of {probe_velocity:.2f} m/s ({probe_velocity/1000:.2f} km/s)") @@ -268,8 +270,8 @@ def load_data(data_path: str, data={}) -> dict: 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 - + c2c_dist = dataInfo["probe-info"]["c2c"] / 1000 # convert to m + 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)") @@ -280,12 +282,12 @@ def load_data(data_path: str, data={}) -> dict: 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 = (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 @@ -295,8 +297,8 @@ def load_data(data_path: str, data={}) -> dict: data[x2_shot]["shock-speed"][f"{probe_locs[i]}-{probe_locs[i + 1]}-g2"] = p2p_2 print() - - # Return the data & the successfully loaded data keys + + # Return the data & the successfully loaded data keys return data #, tuple(data.keys()) data = {} @@ -320,7 +322,7 @@ def genGraph(gData: dict, showPlot: bool = True): "ledgLoc": 'upper left', "plots": [] } - + lims = [] for label in gData["info"]["pcb-refs"]: # + ["trigbox"]: @@ -379,11 +381,11 @@ def genGraph(gData: dict, showPlot: bool = True): "x": 0.94, "y": 0.94 }) - if len(lims) > 1: - OFFSET = 10 - graphData["xLim"] = (float(min(lims) - OFFSET), float(max(lims) + OFFSET)) - - + #if len(lims) > 1: + # OFFSET = 10 + # graphData["xLim"] = (float(min(lims) - OFFSET), float(max(lims) + OFFSET)) + + makeGraph(graphData, doProgramBlock=False, showPlot=showPlot, figSavePath="./images/{0}.png")