feat(V&V): Updated to FEA CSV format + real M2 mesh injection

- Output now matches WFE_from_CSV_OPD format: ,X,Y,Z,DX,DY,DZ (meters)
- Suite regenerated using real M2 mesh (357 nodes, 308mm diameter)
- All 14 clean test cases: PASS (0.000 nm error)
- 3 noisy cases: expected FAIL due to low node count amplifying noise
- Added --inject mode to use real FEA mesh geometry
- Added lateral displacement test case
This commit is contained in:
2026-03-09 15:56:23 +00:00
parent f9373bee99
commit 4146e9d8f1
40 changed files with 6865 additions and 2142012 deletions

View File

@@ -1,10 +1,9 @@
{
"suite": "Zernike Pipeline Validation",
"generated": "2026-03-09",
"mirror_diameter_mm": 1200.0,
"inner_radius_mm": 135.75,
"n_zernike_modes": 50,
"n_points_radial": 200,
"mesh_source": "real FEA mesh (/home/papa/.openclaw/media/inbound/3e253684-cb78-4688-b55f-83fc68b85099.csv)",
"diameter_mm": 308.4492626330409,
"n_modes": 50,
"cases": {
"Z05_astig_0deg": {
"input_coefficients": {
@@ -13,12 +12,18 @@
"coefficient_names": {
"5": "Astigmatism 45\u00b0"
},
"n_points": 118572,
"diameter_mm": 1200.0,
"rms_nm_clean": 41.90787728635817,
"rms_nm_with_noise": 41.90787728635817,
"n_points": 357,
"diameter_mm": 308.4492626330409,
"rms_nm_clean": 42.12315417582499,
"rms_nm_with_noise": 42.12315417582499,
"noise_rms_nm": 0.0,
"seed": 42
"include_lateral": false,
"seed": 42,
"units": {
"positions": "meters",
"displacements": "meters",
"coefficients": "nanometers"
}
},
"Z06_astig_45deg": {
"input_coefficients": {
@@ -27,12 +32,18 @@
"coefficient_names": {
"6": "Astigmatism 0\u00b0"
},
"n_points": 118572,
"diameter_mm": 1200.0,
"rms_nm_clean": 41.87578387312423,
"rms_nm_with_noise": 41.87578387312423,
"n_points": 357,
"diameter_mm": 308.4492626330409,
"rms_nm_clean": 42.12517074515991,
"rms_nm_with_noise": 42.12517074515991,
"noise_rms_nm": 0.0,
"seed": 42
"include_lateral": false,
"seed": 42,
"units": {
"positions": "meters",
"displacements": "meters",
"coefficients": "nanometers"
}
},
"Z07_coma_x": {
"input_coefficients": {
@@ -41,12 +52,18 @@
"coefficient_names": {
"7": "Coma X"
},
"n_points": 118572,
"diameter_mm": 1200.0,
"rms_nm_clean": 35.928378983095506,
"rms_nm_with_noise": 35.928378983095506,
"n_points": 357,
"diameter_mm": 308.4492626330409,
"rms_nm_clean": 36.296215855347604,
"rms_nm_with_noise": 36.296215855347604,
"noise_rms_nm": 0.0,
"seed": 42
"include_lateral": false,
"seed": 42,
"units": {
"positions": "meters",
"displacements": "meters",
"coefficients": "nanometers"
}
},
"Z08_coma_y": {
"input_coefficients": {
@@ -55,12 +72,18 @@
"coefficient_names": {
"8": "Coma Y"
},
"n_points": 118572,
"diameter_mm": 1200.0,
"rms_nm_clean": 35.928378983095506,
"rms_nm_with_noise": 35.928378983095506,
"n_points": 357,
"diameter_mm": 308.4492626330409,
"rms_nm_clean": 33.6178747432943,
"rms_nm_with_noise": 33.6178747432943,
"noise_rms_nm": 0.0,
"seed": 42
"include_lateral": false,
"seed": 42,
"units": {
"positions": "meters",
"displacements": "meters",
"coefficients": "nanometers"
}
},
"Z09_trefoil_x": {
"input_coefficients": {
@@ -69,12 +92,18 @@
"coefficient_names": {
"9": "Trefoil X"
},
"n_points": 118572,
"diameter_mm": 1200.0,
"rms_nm_clean": 36.27358028530051,
"rms_nm_with_noise": 36.27358028530051,
"n_points": 357,
"diameter_mm": 308.4492626330409,
"rms_nm_clean": 36.78252785961855,
"rms_nm_with_noise": 36.78252785961855,
"noise_rms_nm": 0.0,
"seed": 42
"include_lateral": false,
"seed": 42,
"units": {
"positions": "meters",
"displacements": "meters",
"coefficients": "nanometers"
}
},
"Z10_trefoil_y": {
"input_coefficients": {
@@ -83,12 +112,18 @@
"coefficient_names": {
"10": "Trefoil Y"
},
"n_points": 118572,
"diameter_mm": 1200.0,
"rms_nm_clean": 36.27358028530051,
"rms_nm_with_noise": 36.27358028530051,
"n_points": 357,
"diameter_mm": 308.4492626330409,
"rms_nm_clean": 36.78306790995374,
"rms_nm_with_noise": 36.78306790995374,
"noise_rms_nm": 0.0,
"seed": 42
"include_lateral": false,
"seed": 42,
"units": {
"positions": "meters",
"displacements": "meters",
"coefficients": "nanometers"
}
},
"Z11_spherical": {
"input_coefficients": {
@@ -97,12 +132,18 @@
"coefficient_names": {
"11": "Primary Spherical"
},
"n_points": 118572,
"diameter_mm": 1200.0,
"rms_nm_clean": 41.33581266115739,
"rms_nm_with_noise": 41.33581266115739,
"n_points": 357,
"diameter_mm": 308.4492626330409,
"rms_nm_clean": 45.12884267711414,
"rms_nm_with_noise": 45.12884267711414,
"noise_rms_nm": 0.0,
"seed": 42
"include_lateral": false,
"seed": 42,
"units": {
"positions": "meters",
"displacements": "meters",
"coefficients": "nanometers"
}
},
"Z22_2nd_spherical": {
"input_coefficients": {
@@ -111,12 +152,18 @@
"coefficient_names": {
"22": "2nd Spherical"
},
"n_points": 118572,
"diameter_mm": 1200.0,
"rms_nm_clean": 17.392678653363138,
"rms_nm_with_noise": 17.392678653363138,
"n_points": 357,
"diameter_mm": 308.4492626330409,
"rms_nm_clean": 19.830797790000034,
"rms_nm_with_noise": 19.830797790000034,
"noise_rms_nm": 0.0,
"seed": 42
"include_lateral": false,
"seed": 42,
"units": {
"positions": "meters",
"displacements": "meters",
"coefficients": "nanometers"
}
},
"Z37_high_order": {
"input_coefficients": {
@@ -125,12 +172,18 @@
"coefficient_names": {
"37": "Z(8,+0)"
},
"n_points": 118572,
"diameter_mm": 1200.0,
"rms_nm_clean": 9.330123545845794,
"rms_nm_with_noise": 9.330123545845794,
"n_points": 357,
"diameter_mm": 308.4492626330409,
"rms_nm_clean": 10.645079894279842,
"rms_nm_with_noise": 10.645079894279842,
"noise_rms_nm": 0.0,
"seed": 42
"include_lateral": false,
"seed": 42,
"units": {
"positions": "meters",
"displacements": "meters",
"coefficients": "nanometers"
}
},
"realistic_gravity": {
"input_coefficients": {
@@ -155,12 +208,18 @@
"16": "2nd Coma X",
"22": "2nd Spherical"
},
"n_points": 118572,
"diameter_mm": 1200.0,
"rms_nm_clean": 41.22340829508179,
"rms_nm_with_noise": 41.22340829508179,
"n_points": 357,
"diameter_mm": 308.4492626330409,
"rms_nm_clean": 42.14873971447113,
"rms_nm_with_noise": 42.14873971447113,
"noise_rms_nm": 0.0,
"seed": 42
"include_lateral": false,
"seed": 42,
"units": {
"positions": "meters",
"displacements": "meters",
"coefficients": "nanometers"
}
},
"realistic_noise_1nm": {
"input_coefficients": {
@@ -185,12 +244,18 @@
"16": "2nd Coma X",
"22": "2nd Spherical"
},
"n_points": 118572,
"diameter_mm": 1200.0,
"rms_nm_clean": 41.22340829508179,
"rms_nm_with_noise": 41.23235114137111,
"n_points": 357,
"diameter_mm": 308.4492626330409,
"rms_nm_clean": 42.14873971447113,
"rms_nm_with_noise": 42.210200631608785,
"noise_rms_nm": 1.0,
"seed": 42
"include_lateral": false,
"seed": 42,
"units": {
"positions": "meters",
"displacements": "meters",
"coefficients": "nanometers"
}
},
"realistic_noise_5nm": {
"input_coefficients": {
@@ -215,12 +280,18 @@
"16": "2nd Coma X",
"22": "2nd Spherical"
},
"n_points": 118572,
"diameter_mm": 1200.0,
"rms_nm_clean": 41.22340829508179,
"rms_nm_with_noise": 41.511570286278975,
"n_points": 357,
"diameter_mm": 308.4492626330409,
"rms_nm_clean": 42.14873971447113,
"rms_nm_with_noise": 42.66543622974069,
"noise_rms_nm": 5.0,
"seed": 42
"include_lateral": false,
"seed": 42,
"units": {
"positions": "meters",
"displacements": "meters",
"coefficients": "nanometers"
}
},
"realistic_noise_10nm": {
"input_coefficients": {
@@ -245,12 +316,18 @@
"16": "2nd Coma X",
"22": "2nd Spherical"
},
"n_points": 118572,
"diameter_mm": 1200.0,
"rms_nm_clean": 41.22340829508179,
"rms_nm_with_noise": 42.39618932696218,
"n_points": 357,
"diameter_mm": 308.4492626330409,
"rms_nm_clean": 42.14873971447113,
"rms_nm_with_noise": 43.691084762101006,
"noise_rms_nm": 10.0,
"seed": 42
"include_lateral": false,
"seed": 42,
"units": {
"positions": "meters",
"displacements": "meters",
"coefficients": "nanometers"
}
},
"near_zero": {
"input_coefficients": {
@@ -263,12 +340,18 @@
"7": "Coma X",
"11": "Primary Spherical"
},
"n_points": 118572,
"diameter_mm": 1200.0,
"rms_nm_clean": 0.04578284369521264,
"rms_nm_with_noise": 0.04578284369521264,
"n_points": 357,
"diameter_mm": 308.4492626330409,
"rms_nm_clean": 0.046725164260732095,
"rms_nm_with_noise": 0.046725164260732095,
"noise_rms_nm": 0.0,
"seed": 42
"include_lateral": false,
"seed": 42,
"units": {
"positions": "meters",
"displacements": "meters",
"coefficients": "nanometers"
}
},
"large_amplitude": {
"input_coefficients": {
@@ -279,12 +362,18 @@
"5": "Astigmatism 45\u00b0",
"7": "Coma X"
},
"n_points": 118572,
"diameter_mm": 1200.0,
"rms_nm_clean": 235.6361394467916,
"rms_nm_with_noise": 235.6361394467916,
"n_points": 357,
"diameter_mm": 308.4492626330409,
"rms_nm_clean": 237.09820412706273,
"rms_nm_with_noise": 237.09820412706273,
"noise_rms_nm": 0.0,
"seed": 42
"include_lateral": false,
"seed": 42,
"units": {
"positions": "meters",
"displacements": "meters",
"coefficients": "nanometers"
}
},
"many_modes": {
"input_coefficients": {
@@ -383,14 +472,20 @@
"49": "Z(9,+3)",
"50": "Z(9,-5)"
},
"n_points": 118572,
"diameter_mm": 1200.0,
"rms_nm_clean": 16.40426082558852,
"rms_nm_with_noise": 16.40426082558852,
"n_points": 357,
"diameter_mm": 308.4492626330409,
"rms_nm_clean": 14.718241472214698,
"rms_nm_with_noise": 14.718241472214698,
"noise_rms_nm": 0.0,
"seed": 42
"include_lateral": false,
"seed": 42,
"units": {
"positions": "meters",
"displacements": "meters",
"coefficients": "nanometers"
}
},
"realistic_full_disk": {
"realistic_with_lateral": {
"input_coefficients": {
"5": 80.0,
"6": 45.0,
@@ -413,44 +508,18 @@
"16": "2nd Coma X",
"22": "2nd Spherical"
},
"n_points": 124980,
"diameter_mm": 1200.0,
"rms_nm_clean": 40.21839241800354,
"rms_nm_with_noise": 40.21839241800354,
"n_points": 357,
"diameter_mm": 308.4492626330409,
"rms_nm_clean": 42.14873971447113,
"rms_nm_with_noise": 42.14873971447113,
"noise_rms_nm": 0.0,
"include_lateral": true,
"seed": 42,
"inner_radius_mm": 0.0
},
"realistic_scattered": {
"input_coefficients": {
"5": 80.0,
"6": 45.0,
"7": 30.0,
"8": 20.0,
"9": 15.0,
"11": 10.0,
"13": 5.0,
"16": 3.0,
"22": 2.0
},
"coefficient_names": {
"5": "Astigmatism 45\u00b0",
"6": "Astigmatism 0\u00b0",
"7": "Coma X",
"8": "Coma Y",
"9": "Trefoil X",
"11": "Primary Spherical",
"13": "2nd Astig Y",
"16": "2nd Coma X",
"22": "2nd Spherical"
},
"n_points": 119376,
"diameter_mm": 1200.0,
"rms_nm_clean": 41.32177716032332,
"rms_nm_with_noise": 41.32177716032332,
"noise_rms_nm": 0.0,
"seed": 42,
"grid_type": "scattered"
"units": {
"positions": "meters",
"displacements": "meters",
"coefficients": "nanometers"
}
}
}
}