def testPhosim2ZemaxCoorTrans(self): xInPhosim, yInPhosim, zInPhosim = 1, 2, 3 xInZemax, yInZemax, zInZemax = opt2ZemaxCoorTrans( xInPhosim, yInPhosim, zInPhosim) self.assertEqual((xInZemax, yInZemax, zInZemax), (-xInPhosim, yInPhosim, -zInPhosim))
def getMirrorResInMmInZemax(self, writeZcInMnToFilePath=None): """Get the residue of surface (mirror print along z-axis) in mm under the Zemax coordinate. This value is after the fitting with spherical Zernike polynomials (zk). Parameters ---------- writeZcInMnToFilePath : str, optional File path to write the fitted zk in mm. (the default is None.) Returns ------ numpy.ndarray Fitted residue in mm after removing the fitted zk terms in Zemax coordinate. numpy.ndarray X position in mm in Zemax coordinate. numpy.ndarray Y position in mm in Zemax coordinate. numpy.ndarray Fitted zk in mm in Zemax coordinate. """ # Get the bending mode information data = self.getMirrorData(self.gridFileName) # Get the x, y coordinate bx = data[:, 0] by = data[:, 1] # Transform the M2 coordinate to Zemax coordinate bxInZemax, byInZemax, surfInZemax = opt2ZemaxCoorTrans( bx, by, self.getSurfAlongZ()) # Get the mirror residue and zk in um RinM = self.getOuterRinM() resInUmInZemax, zcInUmInZemax = self._getMirrorResInNormalizedCoor( surfInZemax, bxInZemax / RinM, byInZemax / RinM) # Change the unit to mm resInMmInZemax = resInUmInZemax * 1e-3 bxInMmInZemax = bxInZemax * 1e3 byInMmInZemax = byInZemax * 1e3 zcInMmInZemax = zcInUmInZemax * 1e-3 # Save the file of fitted Zk if (writeZcInMnToFilePath is not None): np.savetxt(writeZcInMnToFilePath, zcInMmInZemax) return resInMmInZemax, bxInMmInZemax, byInMmInZemax, zcInMmInZemax