Commit 5d084bbb authored by Blais, Chris's avatar Blais, Chris
Browse files

adding remaining figures and notebooks

parent 5c3ab3f0
Loading
Loading
Loading
Loading
+0 −129
Original line number Diff line number Diff line
%% Cell type:code id:7c8b21a9 tags:

``` python
import math
import numpy as np
import os
import pickle
```

%% Cell type:code id:2487f03f tags:

``` python
def apply_rotation(xy, angle):
    theta = np.radians(angle)
    # Calculate cosine and sine of the angle
    cos_theta = np.cos(theta)
    sin_theta = np.sin(theta)
    x,y = xy

    # Apply the rotation matrix formula
    rx = np.round(x * cos_theta - y * sin_theta)
    ry = np.round(x * sin_theta + y * cos_theta)
    return np.array([rx,ry], dtype=int)
```

%% Cell type:code id:503b4eef tags:

``` python
results_filename = "minimal_bilinear_deficit_red_200_2026_02_10_19_12_08.pkl"
results_path = os.path.join("./test_results", results_filename)
with open(results_path, "rb") as f:
    results = pickle.load(f)
```

%% Cell type:code id:79e51e5c tags:

``` python
analyze_res = {}
for ilayout, res in results.items():
    if not res['rref']['match_obs']:
        analyze_res[ilayout] = res
print(len(analyze_res), len(results))

```

%% Output

    7 4096

%% Cell type:code id:c908c30a tags:

``` python
from PIL import Image
import copy

def plot_layout(result, img_name):
    nsens = 6
    mass_meas = result['soar']['layout'][0:nsens]
    conc_meas = result['soar']['layout'][nsens:]

    mass_soar_obs = result['soar']['obs'][0:nsens]
    conc_soar_obs = result['soar']['obs'][nsens:]

    mass_mrror_obs = result['rref']['obs'][0:nsens]
    conc_mrror_obs = result['rref']['obs'][nsens:]

    # set sensor rotation
    rot = [
        0,0,0,90,0,0,
    ]
    xy_mass = [
        (490,25),
        (1000,25),
        (2250,25),
        (1580,400),
        (2250,765),
        (1000,765),
    ]
    xy_offset = (130,0)

    # Open the main (background) image
    # layout_img_meas = Image.open("./diagrams/minimal_layout_nosensors.png").convert("RGBA")
    layout_img_sensors = Image.open("./diagrams/minimal_layout_nosensors.png").convert("RGBA")
    layout_img_soar = Image.open("./diagrams/minimal_layout_nosensors.png").convert("RGBA")
    layout_img_mrror = Image.open("./diagrams/minimal_layout_nosensors.png").convert("RGBA")

    # Open the images to overlay
    mass_hs = Image.open("./diagrams/massflow_sensor.png").convert("RGBA")
    conc_hs = Image.open("./diagrams/concentration_sensor.png").convert("RGBA")
    mass_ss = Image.open("./diagrams/massflow_sensor_soft.png").convert("RGBA")
    conc_ss = Image.open("./diagrams/concentration_sensor_soft.png").convert("RGBA")

    # Define the coordinates where each overlay will be pasted (top-left corner)
    # Coordinates are a tuple: (x, y)
    for sid, (xym, ro) in enumerate(zip(xy_mass, rot)):
        rot_offset = apply_rotation(xy_offset, ro)
        xyc = (xym[0] + rot_offset[0], xym[1] + rot_offset[1])

        if mass_meas[sid]:
            layout_img_sensors.paste(mass_hs.rotate(ro,expand=True), xym, mass_hs.rotate(ro,expand=True))
            layout_img_soar.paste(mass_hs.rotate(ro,expand=True), xym, mass_hs.rotate(ro,expand=True))
            layout_img_mrror.paste(mass_hs.rotate(ro,expand=True), xym, mass_hs.rotate(ro,expand=True))

        if conc_meas[sid]:
            layout_img_sensors.paste(conc_hs.rotate(ro,expand=True), xyc, conc_hs.rotate(ro,expand=True))
            layout_img_soar.paste(conc_hs.rotate(ro,expand=True), xyc, conc_hs.rotate(ro,expand=True))
            layout_img_mrror.paste(conc_hs.rotate(ro,expand=True), xyc, conc_hs.rotate(ro,expand=True))

        if mass_soar_obs[sid] and not mass_meas[sid]:
            layout_img_soar.paste(mass_ss.rotate(ro,expand=True), xym, mass_ss.rotate(ro,expand=True))

        if conc_soar_obs[sid] and not conc_meas[sid]:
            layout_img_soar.paste(conc_ss.rotate(ro,expand=True), xyc, conc_ss.rotate(ro,expand=True))

        if mass_mrror_obs[sid] and not mass_meas[sid]:
            layout_img_mrror.paste(mass_ss.rotate(ro,expand=True), xym, mass_ss.rotate(ro,expand=True))

        if conc_mrror_obs[sid] and not conc_meas[sid]:
            layout_img_mrror.paste(conc_ss.rotate(ro,expand=True), xyc, conc_ss.rotate(ro,expand=True))

    # Save the final image
    layout_img_sensors.save(f"./plots/layout_{img_name}.png", "PNG")
    layout_img_soar.save(f"./plots/SOAR_obs_{img_name}.png", "PNG")
    layout_img_mrror.save(f"./plots/MRROR_obs_{img_name}.png", "PNG")


for ires, res in analyze_res.items():
    plot_layout(result=res, img_name = f"{str(ires)}_paper")
```
+94.8 KiB
Loading image diff...
+94.8 KiB
Loading image diff...
+84 KiB
Loading image diff...
+94.8 KiB
Loading image diff...
Loading