From 9efaae37a6bb7a9e5c38e4be8e5011c3e77efe00 Mon Sep 17 00:00:00 2001 From: Josh Meyers Date: Tue, 12 Mar 2024 16:12:24 -0700 Subject: [PATCH] Fix ComCam yaml and add tests --- batoid/data/LSST/ComCam_g.yaml | 47 ++++++++++---------- batoid/data/LSST/ComCam_i.yaml | 49 +++++++++++---------- batoid/data/LSST/ComCam_r.yaml | 47 ++++++++++---------- batoid/data/LSST/ComCam_u.yaml | 47 ++++++++++---------- batoid/data/LSST/ComCam_y.yaml | 54 ++++++++++++----------- batoid/data/LSST/ComCam_z.yaml | 49 +++++++++++---------- tests/test_zemax.py | 71 ++++++++++++++++++++++++++++++- tests/testdata/ComCam_SRT1_G.txt | Bin 0 -> 14346 bytes tests/testdata/ComCam_SRT1_I.txt | Bin 0 -> 14346 bytes tests/testdata/ComCam_SRT1_R.txt | Bin 0 -> 14346 bytes tests/testdata/ComCam_SRT1_U.txt | Bin 0 -> 14346 bytes tests/testdata/ComCam_SRT1_Y.txt | Bin 0 -> 14346 bytes tests/testdata/ComCam_SRT1_Z.txt | Bin 0 -> 14346 bytes tests/testdata/ComCam_SRT2_G.txt | Bin 0 -> 14346 bytes tests/testdata/ComCam_SRT2_I.txt | Bin 0 -> 14346 bytes tests/testdata/ComCam_SRT2_R.txt | Bin 0 -> 14346 bytes tests/testdata/ComCam_SRT2_U.txt | Bin 0 -> 14346 bytes tests/testdata/ComCam_SRT2_Y.txt | Bin 0 -> 14346 bytes tests/testdata/ComCam_SRT2_Z.txt | Bin 0 -> 14346 bytes 19 files changed, 225 insertions(+), 139 deletions(-) create mode 100644 tests/testdata/ComCam_SRT1_G.txt create mode 100644 tests/testdata/ComCam_SRT1_I.txt create mode 100644 tests/testdata/ComCam_SRT1_R.txt create mode 100644 tests/testdata/ComCam_SRT1_U.txt create mode 100644 tests/testdata/ComCam_SRT1_Y.txt create mode 100644 tests/testdata/ComCam_SRT1_Z.txt create mode 100644 tests/testdata/ComCam_SRT2_G.txt create mode 100644 tests/testdata/ComCam_SRT2_I.txt create mode 100644 tests/testdata/ComCam_SRT2_R.txt create mode 100644 tests/testdata/ComCam_SRT2_U.txt create mode 100644 tests/testdata/ComCam_SRT2_Y.txt create mode 100644 tests/testdata/ComCam_SRT2_Z.txt diff --git a/batoid/data/LSST/ComCam_g.yaml b/batoid/data/LSST/ComCam_g.yaml index d1f848b7..07d2e266 100644 --- a/batoid/data/LSST/ComCam_g.yaml +++ b/batoid/data/LSST/ComCam_g.yaml @@ -40,7 +40,7 @@ opticalSystem: outer: 1.71 inner: 0.9 coordSys: - z: 6.1559766921647 + z: 6.155977 - type: Mirror name: M3 @@ -59,19 +59,19 @@ opticalSystem: type: CompoundOptic name: ComCam coordSys: - z: 4.1097066396 + z: 4.109701294941687 items: - type: Lens name: L1 medium: &silica type: SellmeierMedium - B1: 0.696183020 - B2: 0.407925877 - B3: 0.897464057 - C1: 0.00467926519 - C2: 0.0135122244 - C3: 97.9323636 + B1: 0.696182877 + B2: 0.407926020 + B3: 0.897462254 + C1: 0.00467926421 + C2: 0.0135122230 + C3: 97.9321695 items: - type: RefractiveInterface @@ -81,16 +81,17 @@ opticalSystem: R: 0.744422 obscuration: type: ClearCircle - radius: 0.192 + # radius: 0.20004 + radius: 0.189 - type: RefractiveInterface name: L1_exit surface: type: Sphere - R: 4.18068 + R: 4.180678 obscuration: type: ClearCircle - radius: 0.192 + radius: 0.20004 coordSys: z: 0.032 - @@ -98,17 +99,18 @@ opticalSystem: name: L2 medium: *silica coordSys: - z: 0.08896479090387038 + z: 0.088965 items: - type: RefractiveInterface name: L2_entrance surface: type: Sphere - R: -5.99534 + R: -5.995343 obscuration: type: ClearCircle - radius: 0.166 + # radius: 0.175 + radius: 0.161 - type: RefractiveInterface name: L2_exit @@ -117,7 +119,8 @@ opticalSystem: R: 0.639028 obscuration: type: ClearCircle - radius: 0.155 + # radius: 0.175 + radius: 0.152 coordSys: z: 0.009 - @@ -125,7 +128,7 @@ opticalSystem: name: Filter medium: *silica coordSys: - z: 0.19626409289185995 + z: 0.196264 items: - type: RefractiveInterface @@ -150,26 +153,26 @@ opticalSystem: name: L3 medium: *silica coordSys: - z: 0.27026409289185995 + z: 0.270264 items: - type: RefractiveInterface name: L3_entrance surface: type: Sphere - R: 6.10983 + R: 6.109828 obscuration: type: ClearCircle - radius: 0.108 + radius: 0.108025 - type: RefractiveInterface name: L3_exit surface: type: Sphere - R: -1.52259 + R: -1.522589 obscuration: type: ClearCircle - radius: 0.108 + radius: 0.108025 coordSys: z: 0.0155 - @@ -181,4 +184,4 @@ opticalSystem: type: ClearCircle radius: 0.11 coordSys: - z: 0.30770909289185965 + z: 0.307709 diff --git a/batoid/data/LSST/ComCam_i.yaml b/batoid/data/LSST/ComCam_i.yaml index 0cbdbe58..8513012a 100644 --- a/batoid/data/LSST/ComCam_i.yaml +++ b/batoid/data/LSST/ComCam_i.yaml @@ -40,7 +40,7 @@ opticalSystem: outer: 1.71 inner: 0.9 coordSys: - z: 6.1559766921647 + z: 6.155977 - type: Mirror name: M3 @@ -59,19 +59,19 @@ opticalSystem: type: CompoundOptic name: ComCam coordSys: - z: 4.10903938251 + z: 4.1090347440789 items: - type: Lens name: L1 medium: &silica type: SellmeierMedium - B1: 0.696183020 - B2: 0.407925877 - B3: 0.897464057 - C1: 0.00467926519 - C2: 0.0135122244 - C3: 97.9323636 + B1: 0.696182877 + B2: 0.407926020 + B3: 0.897462254 + C1: 0.00467926421 + C2: 0.0135122230 + C3: 97.9321695 items: - type: RefractiveInterface @@ -81,16 +81,17 @@ opticalSystem: R: 0.744422 obscuration: type: ClearCircle - radius: 0.192 + # radius: 0.20004 + radius: 0.189 - type: RefractiveInterface name: L1_exit surface: type: Sphere - R: 4.18068 + R: 4.180678 obscuration: type: ClearCircle - radius: 0.192 + radius: 0.20004 coordSys: z: 0.032 - @@ -98,17 +99,18 @@ opticalSystem: name: L2 medium: *silica coordSys: - z: 0.08896479090387038 + z: 0.088965 items: - type: RefractiveInterface name: L2_entrance surface: type: Sphere - R: -5.99534 + R: -5.995343 obscuration: type: ClearCircle - radius: 0.166 + # radius: 0.175 + radius: 0.161 - type: RefractiveInterface name: L2_exit @@ -117,7 +119,8 @@ opticalSystem: R: 0.639028 obscuration: type: ClearCircle - radius: 0.155 + # radius: 0.175 + radius: 0.152 coordSys: z: 0.009 - @@ -125,7 +128,7 @@ opticalSystem: name: Filter medium: *silica coordSys: - z: 0.19626409289185995 + z: 0.196264 items: - type: RefractiveInterface @@ -144,32 +147,32 @@ opticalSystem: type: ClearCircle radius: 0.1325 coordSys: - z: 0.009 + z: 0.007 - type: Lens name: L3 medium: *silica coordSys: - z: 0.27026409289185995 + z: 0.270264 items: - type: RefractiveInterface name: L3_entrance surface: type: Sphere - R: 6.10983 + R: 6.109828 obscuration: type: ClearCircle - radius: 0.108 + radius: 0.108025 - type: RefractiveInterface name: L3_exit surface: type: Sphere - R: -1.52259 + R: -1.522589 obscuration: type: ClearCircle - radius: 0.108 + radius: 0.108025 coordSys: z: 0.0155 - @@ -181,4 +184,4 @@ opticalSystem: type: ClearCircle radius: 0.11 coordSys: - z: 0.30770909289185965 + z: 0.307709 diff --git a/batoid/data/LSST/ComCam_r.yaml b/batoid/data/LSST/ComCam_r.yaml index 01bd6b79..669fb554 100644 --- a/batoid/data/LSST/ComCam_r.yaml +++ b/batoid/data/LSST/ComCam_r.yaml @@ -40,7 +40,7 @@ opticalSystem: outer: 1.71 inner: 0.9 coordSys: - z: 6.1559766921647 + z: 6.155977 - type: Mirror name: M3 @@ -59,19 +59,19 @@ opticalSystem: type: CompoundOptic name: ComCam coordSys: - z: 4.109697 + z: 4.109690049447229 items: - type: Lens name: L1 medium: &silica type: SellmeierMedium - B1: 0.696183020 - B2: 0.407925877 - B3: 0.897464057 - C1: 0.00467926519 - C2: 0.0135122244 - C3: 97.9323636 + B1: 0.696182877 + B2: 0.407926020 + B3: 0.897462254 + C1: 0.00467926421 + C2: 0.0135122230 + C3: 97.9321695 items: - type: RefractiveInterface @@ -81,16 +81,17 @@ opticalSystem: R: 0.744422 obscuration: type: ClearCircle - radius: 0.192 + # radius: 0.20004 + radius: 0.189 - type: RefractiveInterface name: L1_exit surface: type: Sphere - R: 4.18068 + R: 4.180678 obscuration: type: ClearCircle - radius: 0.192 + radius: 0.20004 coordSys: z: 0.032 - @@ -98,17 +99,18 @@ opticalSystem: name: L2 medium: *silica coordSys: - z: 0.08896479090387038 + z: 0.088965 items: - type: RefractiveInterface name: L2_entrance surface: type: Sphere - R: -5.99534 + R: -5.995343 obscuration: type: ClearCircle - radius: 0.166 + # radius: 0.175 + radius: 0.161 - type: RefractiveInterface name: L2_exit @@ -117,7 +119,8 @@ opticalSystem: R: 0.639028 obscuration: type: ClearCircle - radius: 0.155 + # radius: 0.175 + radius: 0.152 coordSys: z: 0.009 - @@ -125,7 +128,7 @@ opticalSystem: name: Filter medium: *silica coordSys: - z: 0.19626409289185995 + z: 0.196264 items: - type: RefractiveInterface @@ -150,26 +153,26 @@ opticalSystem: name: L3 medium: *silica coordSys: - z: 0.27026409289185995 + z: 0.270264 items: - type: RefractiveInterface name: L3_entrance surface: type: Sphere - R: 6.10983 + R: 6.109828 obscuration: type: ClearCircle - radius: 0.108 + radius: 0.108025 - type: RefractiveInterface name: L3_exit surface: type: Sphere - R: -1.52259 + R: -1.522589 obscuration: type: ClearCircle - radius: 0.108 + radius: 0.108025 coordSys: z: 0.0155 - @@ -181,4 +184,4 @@ opticalSystem: type: ClearCircle radius: 0.11 coordSys: - z: 0.30770909289185965 + z: 0.307709 diff --git a/batoid/data/LSST/ComCam_u.yaml b/batoid/data/LSST/ComCam_u.yaml index fa149df9..f4b7d205 100644 --- a/batoid/data/LSST/ComCam_u.yaml +++ b/batoid/data/LSST/ComCam_u.yaml @@ -40,7 +40,7 @@ opticalSystem: outer: 1.71 inner: 0.9 coordSys: - z: 6.1559766921647 + z: 6.155977 - type: Mirror name: M3 @@ -59,19 +59,19 @@ opticalSystem: type: CompoundOptic name: ComCam coordSys: - z: 4.10971713635 + z: 4.10971405528362 items: - type: Lens name: L1 medium: &silica type: SellmeierMedium - B1: 0.696183020 - B2: 0.407925877 - B3: 0.897464057 - C1: 0.00467926519 - C2: 0.0135122244 - C3: 97.9323636 + B1: 0.696182877 + B2: 0.407926020 + B3: 0.897462254 + C1: 0.00467926421 + C2: 0.0135122230 + C3: 97.9321695 items: - type: RefractiveInterface @@ -81,16 +81,17 @@ opticalSystem: R: 0.744422 obscuration: type: ClearCircle - radius: 0.192 + # radius: 0.20004 + radius: 0.189 - type: RefractiveInterface name: L1_exit surface: type: Sphere - R: 4.18068 + R: 4.180678 obscuration: type: ClearCircle - radius: 0.192 + radius: 0.20004 coordSys: z: 0.032 - @@ -98,17 +99,18 @@ opticalSystem: name: L2 medium: *silica coordSys: - z: 0.08896479090387038 + z: 0.088965 items: - type: RefractiveInterface name: L2_entrance surface: type: Sphere - R: -5.99534 + R: -5.995343 obscuration: type: ClearCircle - radius: 0.166 + # radius: 0.175 + radius: 0.161 - type: RefractiveInterface name: L2_exit @@ -117,7 +119,8 @@ opticalSystem: R: 0.639028 obscuration: type: ClearCircle - radius: 0.155 + # radius: 0.175 + radius: 0.152 coordSys: z: 0.009 - @@ -125,7 +128,7 @@ opticalSystem: name: Filter medium: *silica coordSys: - z: 0.19626409289185995 + z: 0.196264 items: - type: RefractiveInterface @@ -150,26 +153,26 @@ opticalSystem: name: L3 medium: *silica coordSys: - z: 0.27026409289185995 + z: 0.270264 items: - type: RefractiveInterface name: L3_entrance surface: type: Sphere - R: 6.10983 + R: 6.109828 obscuration: type: ClearCircle - radius: 0.108 + radius: 0.108025 - type: RefractiveInterface name: L3_exit surface: type: Sphere - R: -1.52259 + R: -1.522589 obscuration: type: ClearCircle - radius: 0.108 + radius: 0.108025 coordSys: z: 0.0155 - @@ -181,4 +184,4 @@ opticalSystem: type: ClearCircle radius: 0.11 coordSys: - z: 0.30770909289185965 + z: 0.307709 diff --git a/batoid/data/LSST/ComCam_y.yaml b/batoid/data/LSST/ComCam_y.yaml index 75e99baf..42958d08 100644 --- a/batoid/data/LSST/ComCam_y.yaml +++ b/batoid/data/LSST/ComCam_y.yaml @@ -1,9 +1,8 @@ opticalSystem: type: CompoundOptic name: RubinComCam - inMedium: &air - type: Air - medium: *air + inMedium: &vacuum 1.0 + medium: *vacuum backDist: 15.0 # distance from global vertex to use to start tracing rays sphereRadius: 5.0 # reference sphere radius to use for wavefront calculation pupilSize: 8.36 # Pupil fits inside a square with this side length @@ -41,7 +40,7 @@ opticalSystem: outer: 1.71 inner: 0.9 coordSys: - z: 6.1559766921647 + z: 6.155977 - type: Mirror name: M3 @@ -60,19 +59,19 @@ opticalSystem: type: CompoundOptic name: ComCam coordSys: - z: 4.10903560817 + z: 4.109030025999346 items: - type: Lens name: L1 medium: &silica type: SellmeierMedium - B1: 0.696183020 - B2: 0.407925877 - B3: 0.897464057 - C1: 0.00467926519 - C2: 0.0135122244 - C3: 97.9323636 + B1: 0.696182877 + B2: 0.407926020 + B3: 0.897462254 + C1: 0.00467926421 + C2: 0.0135122230 + C3: 97.9321695 items: - type: RefractiveInterface @@ -82,16 +81,17 @@ opticalSystem: R: 0.744422 obscuration: type: ClearCircle - radius: 0.192 + # radius: 0.20004 + radius: 0.189 - type: RefractiveInterface name: L1_exit surface: type: Sphere - R: 4.18068 + R: 4.180678 obscuration: type: ClearCircle - radius: 0.192 + radius: 0.20004 coordSys: z: 0.032 - @@ -99,17 +99,18 @@ opticalSystem: name: L2 medium: *silica coordSys: - z: 0.08896479090387038 + z: 0.088965 items: - type: RefractiveInterface name: L2_entrance surface: type: Sphere - R: -5.99534 + R: -5.995343 obscuration: type: ClearCircle - radius: 0.166 + # radius: 0.175 + radius: 0.161 - type: RefractiveInterface name: L2_exit @@ -118,7 +119,8 @@ opticalSystem: R: 0.639028 obscuration: type: ClearCircle - radius: 0.155 + # radius: 0.175 + radius: 0.152 coordSys: z: 0.009 - @@ -126,7 +128,7 @@ opticalSystem: name: Filter medium: *silica coordSys: - z: 0.19626409289185995 + z: 0.196264 items: - type: RefractiveInterface @@ -145,32 +147,32 @@ opticalSystem: type: ClearCircle radius: 0.1325 coordSys: - z: 0.009 + z: 0.007 - type: Lens name: L3 medium: *silica coordSys: - z: 0.27026409289185995 + z: 0.270264 items: - type: RefractiveInterface name: L3_entrance surface: type: Sphere - R: 6.10983 + R: 6.109828 obscuration: type: ClearCircle - radius: 0.108 + radius: 0.108025 - type: RefractiveInterface name: L3_exit surface: type: Sphere - R: -1.52259 + R: -1.522589 obscuration: type: ClearCircle - radius: 0.108 + radius: 0.108025 coordSys: z: 0.0155 - @@ -182,4 +184,4 @@ opticalSystem: type: ClearCircle radius: 0.11 coordSys: - z: 0.30770909289185965 + z: 0.307709 diff --git a/batoid/data/LSST/ComCam_z.yaml b/batoid/data/LSST/ComCam_z.yaml index abb4c5c3..c2b019e0 100644 --- a/batoid/data/LSST/ComCam_z.yaml +++ b/batoid/data/LSST/ComCam_z.yaml @@ -40,7 +40,7 @@ opticalSystem: outer: 1.71 inner: 0.9 coordSys: - z: 6.1559766921647 + z: 6.155977 - type: Mirror name: M3 @@ -59,19 +59,19 @@ opticalSystem: type: CompoundOptic name: ComCam coordSys: - z: 4.1090370964 + z: 4.109031863823618 items: - type: Lens name: L1 medium: &silica type: SellmeierMedium - B1: 0.696183020 - B2: 0.407925877 - B3: 0.897464057 - C1: 0.00467926519 - C2: 0.0135122244 - C3: 97.9323636 + B1: 0.696182877 + B2: 0.407926020 + B3: 0.897462254 + C1: 0.00467926421 + C2: 0.0135122230 + C3: 97.9321695 items: - type: RefractiveInterface @@ -81,16 +81,17 @@ opticalSystem: R: 0.744422 obscuration: type: ClearCircle - radius: 0.192 + # radius: 0.20004 + radius: 0.189 - type: RefractiveInterface name: L1_exit surface: type: Sphere - R: 4.18068 + R: 4.180678 obscuration: type: ClearCircle - radius: 0.192 + radius: 0.20004 coordSys: z: 0.032 - @@ -98,17 +99,18 @@ opticalSystem: name: L2 medium: *silica coordSys: - z: 0.08896479090387038 + z: 0.088965 items: - type: RefractiveInterface name: L2_entrance surface: type: Sphere - R: -5.99534 + R: -5.995343 obscuration: type: ClearCircle - radius: 0.166 + # radius: 0.175 + radius: 0.161 - type: RefractiveInterface name: L2_exit @@ -117,7 +119,8 @@ opticalSystem: R: 0.639028 obscuration: type: ClearCircle - radius: 0.155 + # radius: 0.175 + radius: 0.152 coordSys: z: 0.009 - @@ -125,7 +128,7 @@ opticalSystem: name: Filter medium: *silica coordSys: - z: 0.19626409289185995 + z: 0.196264 items: - type: RefractiveInterface @@ -144,32 +147,32 @@ opticalSystem: type: ClearCircle radius: 0.1325 coordSys: - z: 0.009 + z: 0.007 - type: Lens name: L3 medium: *silica coordSys: - z: 0.27026409289185995 + z: 0.270264 items: - type: RefractiveInterface name: L3_entrance surface: type: Sphere - R: 6.10983 + R: 6.109828 obscuration: type: ClearCircle - radius: 0.108 + radius: 0.108025 - type: RefractiveInterface name: L3_exit surface: type: Sphere - R: -1.52259 + R: -1.522589 obscuration: type: ClearCircle - radius: 0.108 + radius: 0.108025 coordSys: z: 0.0155 - @@ -181,4 +184,4 @@ opticalSystem: type: ClearCircle radius: 0.11 coordSys: - z: 0.30770909289185965 + z: 0.307709 diff --git a/tests/test_zemax.py b/tests/test_zemax.py index 23e89099..ab1631e1 100644 --- a/tests/test_zemax.py +++ b/tests/test_zemax.py @@ -610,6 +610,74 @@ def test_CBP_trace(): ) +@timer +def test_ComCam_trace(): + surfaces = { + 5:'M1', + 6:'M2', + 8:'M3', + 10:'L1_entrance', + 11:'L1_exit', + 12:'L2_entrance', + 13:'L2_exit', + 14:'Filter_entrance', + 15:'Filter_exit', + 16:'L3_entrance', + 17:'L3_exit', + 18:'Detector', + } + indices = {v:k for k, v in surfaces.items()} + + for band in 'ugrizy': + optic = batoid.Optic.fromYaml(f"ComCam_{band}.yaml") + + for i in range(1, 3): + fn = os.path.join(directory, "testdata", f"ComCam_SRT{i}_{band.upper()}.txt") + with open(fn, encoding='utf-16-le') as f: + wavelength = np.genfromtxt(f, skip_header=8, max_rows=1, usecols=(2,)) + with open(fn, encoding='utf-16-le') as f: + Hx, Hy, Px, Py = np.genfromtxt(f, skip_header=13, max_rows=4, usecols=(6,)) + with open(fn, encoding='utf-16-le') as f: + idxs, x, y, z, xcos, ycos, zcos, nx, ny, nz, cos, path = np.genfromtxt( + f, skip_header=22, max_rows=18, usecols=list(range(0, 12)), unpack=True + ) + # Switch to batoid conventions. x, y, z -> -x, y, -z + Hx *= -1 + Px *= -1 + x *= -1 + z *= -1 + xcos *= -1 + zcos *= -1 + nx *= -1 + nz *= -1 + # Wavelength to meters + wavelength *= 1e-6 + # distances to meters + x *= 1e-3 + y *= 1e-3 + z *= 1e-3 + + # Initial ray conditions + r = np.r_[x[0], y[0], z[0]] + dr = np.r_[x[1]-x[0], y[1]-y[0], z[1]-z[0]] + v = dr/np.linalg.norm(dr) + ray = batoid.RayVector(*r, *v, t=0, wavelength=wavelength) + + tf = optic.traceFull(ray) + for k in tf: + idx = indices[k]-1 + np.testing.assert_allclose( + tf[k]['out'].toCoordSys(batoid.globalCoordSys).r[0], + np.array([x[idx], y[idx], z[idx]]), + rtol=0, atol=1e-9 + ) + sx, sy = batoid.spot( + optic, np.deg2rad(Hx), np.deg2rad(Hy), wavelength, nx=128 + ) + assert np.sqrt(np.nanvar(sx)+np.nanvar(sy)) < 10e-6 # Spot size smaller than 1 pixel + + + if __name__ == '__main__': from argparse import ArgumentParser parser = ArgumentParser() @@ -629,4 +697,5 @@ def test_CBP_trace(): test_LSST_trace(verbose=False) test_DECam_trace(verbose=False) test_DECam_exit_pupil_pos() - test_CBP_trace() \ No newline at end of file + test_CBP_trace() + test_ComCam_trace() diff --git a/tests/testdata/ComCam_SRT1_G.txt b/tests/testdata/ComCam_SRT1_G.txt new file mode 100644 index 0000000000000000000000000000000000000000..456dbc75ee952e7baf1368d89e77bcbdad9a6b52 GIT binary patch literal 14346 zcmeI2TW=dx6ot<#Nc;ysf>27FI8M?xpj_1g;v(9rFQp|=)Ho;&wBdj8_kjJKm6da5 z@QlYEhX+(yw#RdBd#|-`=ZydU>+AG5U8YI;Hl4@Slk{U;--)Y>c)yk2%X`{)9v&qeV1Ouo%8s7lzvI4aeaC9dq3{nNoVP0TEwWcnCEHk^Ae`W7oU4+H{P?{huIhD zB*y-fe#@FMOAF^Q{__?+jy%=ulku+EFPTfc6nH{$obXnP*7XIamSD?Q)HqrVS* zevdogvxwC$($9GYjob}gX6Yy-+|4g$`!i7K^SiYeDxs3&=hFk$u=Sqe$;IQN*u=#wnf zd5mYwNqjP6K@<7i1_pH-yL z<(Ae#pRa=3UqdJCqN&eUTh*s;on`t=dvSxKuY(8Kb6?!KeeIXuTv;*pTfgo{tXSp| z?S2mi_Io(6pVzgobgkFb?sdA_nSW8)@v`~*+L^zvz4+B6dwY9+Y>QYz467p={jjvt z903>6L%#53`XGItqf5F7hDuk@FbO=PYIvGHNFS9_1W3kI&=idvv}2G}gKmzh`+A(j8`5JYM#~ zZuKyF&hr|F@yX7YRq6L@>}=R)vgcu6ej2~dls`g`%Kj+K*; z10UYc8XzTort#~r)vtS9TamD4MKn8(Z{bn5kD7Z10#4K5snB{x8uFwK-8N>Yunt%iFEdGN$lid;`nHOUNwCnZkeQi!aO8Y6<%ypd|xIMSW}(i#^Kg)$QOU zf5xYY?ey|#)9;n(=oqNC@Z&qHKUo%1OfeW2h6Y-e`PCP%6k-ST# zp$v?Kwrusg8|{j2*u6DdmlMgL9EqIH^KI{uO$kXjGu~1Ed@Lkqwx@7jm_2V_y~+x zW2CCvYv1s7vz>@+Pa#8^Z~KUH2z3>i1dH%^?8Jz`2DXCrs9p6Leg{j)O{{>knvc8D zVor+W-Pp7_;oOUCNxoyp!YasEuR+ZWC&++)(nOY~er4r;8@7*VZ$xe-ir3!Fc;W(95pY(tq(UNQYp+$$Z$9vEaDp*xiOjbNANV@n!Ah!`3LfHvXhSsylFdCvKOfz8 zXg*g}$jbO+9z_f+13zevhc(`Cf>n7(A>KHhe;zrWoNsQ57k0}iEWMV_lF3q_0XJY? zs%6I&pGgp($8#gE!~@p#m2SO+-KzH0)fimJTk#W6A@3AlCA#6k+{4D;5`U|4H6QlS zb$kWe!D6vVtP`}U?3eor*+jOXXlff-FLpUE!alJ9&1*a*1KvcG;Fs;k`P*5feA|}o zOU#TOL?JA?ZdcUhlh{M#bUV8fs$(K1Qle#ZJlP)~!He-0>Mbhh8n2h(E9~|8Z-coh z`_XQjsX2v1xF@Q>jiM9Mc&&m7@eZ7{55wA#&pED%Z9%MD)z~wd=zvyK3|!akh>~gxoWp#XT%y+UPTYZNwK3dGa>BpSSgw+pMbq8a<$9Xv=@LyWyN+LHXq*4 z4)>LvV1c{^2f_$%!NRn2H4chh_!Qis0T#4rUimNhC`{?9#=KT6zRd3ORXzjY9}KVm39ty9j6HVC>-9eY_&?U= zzi=@=UH=$xo@m>*@mn$30%;<{e71DW2vg7-(SE+I`F7b?6~4aaj?S*f)`?nVH%>@-3Zh*Yr#wFOEpbq%omi&*Sl^p? zGc_V-cU1n`_xUtHcxwL(x7fH&|6zFB&x){Qoz%1EqSAN8>gc2>rn3@uO5>gtZL0T8 zK7$bgu)&E5w%%m4MgZ+Oz1w_`qdj<8jTqPTZB7|ELuBWt{TJ=qc(wtHXn-&4d8fU( z&9-)QV|CRYiSu8g2y^V*B;!|74PQMYrL+U6RDcvM1&R1 zlJhg3gdc%D8H9Fox_Q0Dy2M`b%I;f!+SGG12E{SO6e^E}c~ojXl>VI*;MDoSqH$SF$fL5e>$v{neruIQ^upyc? o{kCMOq1;M-?3cX~8Hcz>4$v8*qr3Vk<0y)ai^ZGix$JE2AF=Ug8~^|S literal 0 HcmV?d00001 diff --git a/tests/testdata/ComCam_SRT1_I.txt b/tests/testdata/ComCam_SRT1_I.txt new file mode 100644 index 0000000000000000000000000000000000000000..7c9682913dfdb77e1d327db0f9b0fbe68389814d GIT binary patch literal 14346 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 literal 0 HcmV?d00001 diff --git a/tests/testdata/ComCam_SRT1_U.txt b/tests/testdata/ComCam_SRT1_U.txt new file mode 100644 index 0000000000000000000000000000000000000000..f02f353fb6d1584c2a73a3fc235a8dbe6b317685 GIT binary patch literal 14346 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 literal 0 HcmV?d00001 diff --git a/tests/testdata/ComCam_SRT2_G.txt b/tests/testdata/ComCam_SRT2_G.txt new file mode 100644 index 0000000000000000000000000000000000000000..f7e16dc1a767ec64282c327936daa6614d977434 GIT binary patch literal 14346 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 sJ9_8*K)38n+a literal 0 HcmV?d00001 diff --git a/tests/testdata/ComCam_SRT2_I.txt b/tests/testdata/ComCam_SRT2_I.txt new file mode 100644 index 0000000000000000000000000000000000000000..bff8116b0705d0233afa2b43275e59f15e033bde GIT binary patch literal 14346 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 M_Pe+9vb(we0Q^CFTmS$7 literal 0 HcmV?d00001 diff --git a/tests/testdata/ComCam_SRT2_R.txt b/tests/testdata/ComCam_SRT2_R.txt new file mode 100644 index 0000000000000000000000000000000000000000..e66f5bf971bfa8cd2ed890c46fce572de68d64bf GIT binary patch literal 14346 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 BdWrx5 literal 0 HcmV?d00001 diff --git a/tests/testdata/ComCam_SRT2_Y.txt b/tests/testdata/ComCam_SRT2_Y.txt new file mode 100644 index 0000000000000000000000000000000000000000..c0c6e36652d32a9c1d374509ccd0fe336069f96c GIT binary patch literal 14346 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