diff --git a/data/x2s5823/_info.yaml b/data/x2s5823/_info.yaml index f17a315..2be6022 100644 --- a/data/x2s5823/_info.yaml +++ b/data/x2s5823/_info.yaml @@ -23,22 +23,22 @@ canny-args: no-graph: - "None" - # - "at1" - # - "at2" - # - "at3" + - "at1" + - "at2" + - "at3" - # - "at4" - # - "at5" - # - "at6" + - "at4" + - "at5" + - "at6" pcb-refs: - #- "at1" - #- "at2" - #- "at3" - # - #- "at4" - #- "at5" - #- "at6" + - "at1" + - "at2" + - "at3" + + - "at4" + - "at5" + - "at6" - "st1" - "st3" @@ -49,7 +49,7 @@ probe-info: c2c: 5.6 # mm gauge-diam: 3.05 # mm gauge-c2c: 4 #mm - dist-uncert: 2 #mm + dist-uncert: 3.05 #mm gauges: - 1 @@ -61,7 +61,7 @@ probe-info: - type: "scope" config: "eProbe-Scope.txt" data: "eProbe-Scope.csv" - time-uncert: 0 # s + time-uncert: 0.00000001428571428571 # s trigger: # Redundant? type: "channel" diff --git a/data/x2s5824/_info.yaml b/data/x2s5824/_info.yaml index c4da523..bed30b7 100644 --- a/data/x2s5824/_info.yaml +++ b/data/x2s5824/_info.yaml @@ -49,7 +49,7 @@ probe-info: c2c: 5.6 # mm gauge-diam: 0.8 # mm gauge-c2c: 1.8 #mm - dist-uncert: 0.025 #mm + dist-uncert: 0.8 #mm gauges: - 1 @@ -62,7 +62,7 @@ probe-info: - type: "scope" config: "eProbe-Scope.txt" data: "eProbe-Scope.csv" - time-uncert: 0 # s + time-uncert: 0.00000001428571428571 # s trigger: # Redundant? type: "channel" diff --git a/data/x2s5827/_info.yaml b/data/x2s5827/_info.yaml index 8895a08..1826328 100644 --- a/data/x2s5827/_info.yaml +++ b/data/x2s5827/_info.yaml @@ -52,7 +52,7 @@ probe-info: c2c: 5.6 # mm gauge-diam: 0.8 # mm gauge-c2c: 1.8 #mm - dist-uncert: 0.025 #mm + dist-uncert: 0.8 #mm gauges: - 1 @@ -65,7 +65,7 @@ probe-info: - type: "scope" config: "eProbe-Scope.txt" data: "eProbe-Scope.csv" - time-uncert: 0 # s + time-uncert: 0.00000001428571428571 # s trigger: # Redundant? type: "channel" diff --git a/data/x2s5829/_info.yaml b/data/x2s5829/_info.yaml index 7a530a2..8da2d56 100644 --- a/data/x2s5829/_info.yaml +++ b/data/x2s5829/_info.yaml @@ -54,7 +54,7 @@ probe-info: c2c: 5.6 # mm gauge-diam: 0.8 # mm gauge-c2c: 1.8 #mm - dist-uncert: 0.025 #mm + dist-uncert: 0.8 #mm gauges: - 1 @@ -67,7 +67,7 @@ probe-info: - type: "scope" config: "eProbe-Scope.txt" data: "eProbe-Scope.csv" - time-uncert: 0 # s + time-uncert: 0.00000001428571428571 # s trigger: # Redundant? type: "channel" diff --git a/data/x2s5830/_info.yaml b/data/x2s5830/_info.yaml index 6d33d80..366b1f8 100644 --- a/data/x2s5830/_info.yaml +++ b/data/x2s5830/_info.yaml @@ -52,7 +52,7 @@ probe-info: c2c: 5.6 # mm gauge-diam: 0.8 # mm gauge-c2c: 1.8 #mm - dist-uncert: 0.025 #mm + dist-uncert: 0.8 #mm gauges: - 1 @@ -65,7 +65,7 @@ probe-info: - type: "scope" config: "eProbe-Scope.txt" data: "eProbe-Scope.csv" - time-uncert: 0 # s + time-uncert: 0.00000001428571428571 # s trigger: # Redundant? type: "channel" diff --git a/data/x2s5831/_info.yaml b/data/x2s5831/_info.yaml index 9536d70..0c4ebe3 100644 --- a/data/x2s5831/_info.yaml +++ b/data/x2s5831/_info.yaml @@ -55,13 +55,13 @@ probe-info: c2c: 5.6 # mm gauge-diam: 0.8 # mm gauge-c2c: 1.8 #mm - dist-uncert: 0.025 #mm + dist-uncert: 0.8 #mm data-records: - type: "scope" config: "eProbe-Scope.txt" data: "eProbe-Scope.csv" - time-uncert: 0 # s + time-uncert: 0.00000001428571428571 # s trigger: # Redundant? type: "channel" diff --git a/data/x2s5832/_info.yaml b/data/x2s5832/_info.yaml index 0b5bbed..50a231a 100644 --- a/data/x2s5832/_info.yaml +++ b/data/x2s5832/_info.yaml @@ -58,13 +58,13 @@ probe-info: c2c: 5.6 # mm gauge-diam: 0.8 # mm gauge-c2c: 1.8 #mm - dist-uncert: 0.025 #mm + dist-uncert: 0.8 #mm data-records: - type: "scope" config: "eProbe-Scope.txt" data: "eProbe-Scope.csv" - time-uncert: 0 # s + time-uncert: 0.00000001428571428571 # s trigger: # Redundant? type: "channel" diff --git a/main.py b/main.py index 61dcbd6..034b1fb 100644 --- a/main.py +++ b/main.py @@ -294,18 +294,18 @@ def load_data(data_path: str, data={}) -> dict: 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 = abs(TUNNEL_INFO["distance"][refProbe] - TUNNEL_INFO["distance"][dataInfo["pcb-refs"][i-1]]) / 1000 # convert to m p2p_time = abs(p2_time - p1_time) probe_velocity = p2p_dist / p2p_time # m/s - p1_time_uncert = data[x2_shot]["shock-point"][refProbe][2] / 1e6 # Convert to seconds - p2_time_uncert = data[x2_shot]["shock-point"][dataInfo["pcb-refs"][i-1]][2] / 1e6 # Convert to seconds + p1_time_uncert = data[x2_shot]["shock-point"][dataInfo["pcb-refs"][i-1]][2] / 1e6 # Convert to seconds + p2_time_uncert = data[x2_shot]["shock-point"][refProbe][2] / 1e6 # Convert to seconds uncert = deltaVs(probe_velocity, p2p_dist, p2p_time, (UNCERTS["probe-dist"][refProbe], UNCERTS["probe-dist"][dataInfo["pcb-refs"][i-1]]), (p1_time_uncert, p2_time_uncert, UNCERTS["time"]["x2-daq"])) - print(f"{refProbe}-{dataInfo["pcb-refs"][i-1]} Measured a shock speed of {probe_velocity:.2f} +/- {uncert:.2f} m/s ({probe_velocity/1000:.2f} +/- {uncert/1000:.2f} km/s [{uncert/probe_velocity * 100 :.2f}%])") - data[x2_shot]["shock-speed"][f"{refProbe}-{dataInfo["pcb-refs"][i-1]}"] = probe_velocity, uncert, True # Speed, Ref + print(f"{dataInfo["pcb-refs"][i-1]}-{refProbe} Measured a shock speed of {probe_velocity:.2f} +/- {uncert:.2f} m/s ({probe_velocity/1000:.2f} +/- {uncert/1000:.2f} km/s [{uncert/probe_velocity * 100 :.2f}%])") + data[x2_shot]["shock-speed"][f"{dataInfo["pcb-refs"][i-1]}-{refProbe}"] = probe_velocity, uncert, True # Speed, Ref print() for probe in dataInfo["probe-info"]["locations"]: @@ -325,7 +325,7 @@ def load_data(data_path: str, data={}) -> dict: print(f"{probe} Measured a shock speed of {probe_velocity:.2f} +/- {uncert:.2f} m/s ({probe_velocity/1000:.2f} +/- {uncert/1000:.2f} km/s)") data[x2_shot]["shock-speed"][probe] = probe_velocity, uncert, False # Speed, Ref # 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"}") + print(f"Unable to calculate probe velocity, only have one gauge: {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): @@ -378,7 +378,7 @@ print("Loaded Data") #[TODO] Refactor -def genGraph(gData: dict, showPlot: bool = True, doLimits: bool = True, forcePlots: bool = False): +def genGraph(gData: dict, showPlot: bool = True, doLimits: bool = True, forcePlots: bool = False, addShockInfo: bool = True): graphData = { "title": f"Shock response Time\nFor {gData['info']['long_name']}", "xLabel": "Time ($\\mu$s)", @@ -410,12 +410,12 @@ def genGraph(gData: dict, showPlot: bool = True, doLimits: bool = True, forcePlo "x": gData["shock-point"][label][1], "label": f"{label} - Shock Point {gData["shock-point"][label][1]:.2f}$\\mu$s", "colour": "gray", - "args":{"zorder":2, "linestyle":"--"} + "args":{"zorder":2, "linestyle":"--", "alpha":0.5} }) lims.append(gData["shock-point"][label][1]) # [TODO this but better] - for label, d in [("1 [V]", "G1"),("2 [V]", "G2")]: #, ("4 [V]", "Gauge Trigger")]: + for label, d in [("1 [V]", "Gauge 1"),("2 [V]", "Gauge 2")]: #, ("4 [V]", "Gauge Trigger")]: graphData["plots"].append({ "x": gData["time"]["scope"], "y": gData["data"]["scope"][label], @@ -427,9 +427,9 @@ def genGraph(gData: dict, showPlot: bool = True, doLimits: bool = True, forcePlo graphData["plots"].append({ "type": "axvLine", "x": gData["shock-point"][f"{probe}-g1"][1],#[i], - "label": f"{probe}-G1 - Shock Point {gData["shock-point"][f"{probe}-g1"][1]:.2f}$\\mu$s", - #"colour": "gray", - "args":{"zorder":2, "linestyle":"--"} + "label": f"{probe}-Gauge 1 - Shock Point {gData["shock-point"][f"{probe}-g1"][1]:.2f}$\\mu$s", + "colour": UQC["purple"].lighten(0.5), + "args":{"zorder":2, "linestyle":"--", "alpha":0.5} }) lims.append(gData["shock-point"][f"{probe}-g1"][1]) @@ -437,41 +437,50 @@ def genGraph(gData: dict, showPlot: bool = True, doLimits: bool = True, forcePlo graphData["plots"].append({ "type": "axvLine", "x": gData["shock-point"][f"{probe}-g2"][1],#[i], - "label": f"{probe}-G2 - Shock Point {gData["shock-point"][f"{probe}-g2"][1]:.2f}$\\mu$s", - #"colour": "gray", - "args":{"zorder":2, "linestyle":"--"} + "label": f"{probe}-Gauge 2 - Shock Point {gData["shock-point"][f"{probe}-g2"][1]:.2f}$\\mu$s", + "colour": UQC["purple"].lighten(0.5), + "args":{"zorder":2, "linestyle":"--", "alpha":0.5} }) lims.append(gData["shock-point"][f"{probe}-g2"][1]) - probeText = "" - for shock_speed_loc in gData["shock-speed"]: - probeText += "\n" - #probeText += "(Reference) " if gData["shock-speed"][shock_speed_loc][1] else "" - probeText += f"{shock_speed_loc} - {gData["shock-speed"][shock_speed_loc][0]/1000:.2f} $\\pm${gData["shock-speed"][shock_speed_loc][1]/1000:.2f} [{gData["shock-speed"][shock_speed_loc][1]/gData["shock-speed"][shock_speed_loc][0]*100:.2f}%] km/s" - graphData["plots"].append({ - "type": "text", - "text": f"Measured Shock Speeds{probeText}", - "align": ("top", "right"), - "x": 0.94 if len(gData["info"]["probe-info"]["locations"]) < 3 else 0.90, - "y": 0.94 - }) + if addShockInfo: + probeText = "" + flag = False + for shock_speed_loc in gData["shock-speed"]: + if not flag and not gData["shock-speed"][shock_speed_loc][2]: + flag = True + probeText += "\n" + "-"*50 + + probeText += "\n" + #probeText += "\\definecolor{my_gray}{rbg}{0.6, 0.5803921568627451, 0.5647058823529412}\\textcolor{my_gray}{" if gData["shock-speed"][shock_speed_loc][1] else "" + probeText += f"{shock_speed_loc} - {gData['shock-speed'][shock_speed_loc][0]/1000:.2f} $\\pm${gData['shock-speed'][shock_speed_loc][1]/1000:.2f} [{gData['shock-speed'][shock_speed_loc][1]/gData['shock-speed'][shock_speed_loc][0]*100:.2f}%] km/s" + #probeText += "}" if gData["shock-speed"][shock_speed_loc][1] else "" + + graphData["plots"].append({ + "type": "text", + "text": f"Measured Shock Speeds {probeText}", + "align": ("top", "right"), + "alpha": 0.75, + "x": 0.94 if len(gData["info"]["probe-info"]["locations"]) < 3 else 0.885, + "y": 0.94 + }) if doLimits and len(lims) > 1: - OFFSET = 10 + OFFSET = 10 #if not forcePlots else 50 graphData["xLim"] = (float(min(lims) - OFFSET), float(max(lims) + OFFSET)) - makeGraph(graphData, doProgramBlock=False, showPlot=showPlot, figSavePath=f"./images/{{0}}{"-noLims" if not doLimits else ""}.png") + makeGraph(graphData, doProgramBlock=False, showPlot=showPlot, figSavePath=f"./images/{gData['info']['shot-info']['name']}{'-all' if forcePlots else ''}{'-clipped' if doLimits else ''}.png") #figSavePath=f"./images/{{0}}{"-noLims" if not doLimits else ""}.png") print("Graphing Data") for shot in loaded_data: #if shot != loaded_data[-2]: continue - genGraph(data[shot], showPlot=False) - #genGraph(data[shot], showPlot=False, doLimits=False, forcePlots=True) + genGraph(data[shot], showPlot=False, addShockInfo=False) + genGraph(data[shot], showPlot=False, forcePlots=True) # This forces matplotlib to hang until I tell it to close all windows pltKeyClose() diff --git a/tunnel-info.yaml b/tunnel-info.yaml index 2994ad7..75ab277 100644 --- a/tunnel-info.yaml +++ b/tunnel-info.yaml @@ -67,5 +67,5 @@ uncertainties: time: - x2-daq: 0 + x2-daq: 0.00000039999999999996 # 30MHz ?