Beispiel #1
0
    def to_elegant(self, filepath):
        """Generate an Elegant particle file."""
        from sdds import SDDS

        sd = SDDS(0)
        sd.mode = sd.SDDS_BINARY

        sd.description[0] = ""
        sd.description[1] = ""

        sd.parameterName = ["Charge"]
        sd.parameterData = [[self._q]]
        sd.parameterDefinition = [["", "", "", "", sd.SDDS_DOUBLE, ""]]

        xp = self._data[:, 1] / self._data[:, 5]  # px / pz
        yp = self._data[:, 3] / self._data[:, 5]  # py / pz

        z = self._data[:, 4] - self._data[:, 4].mean()
        x = self._data[:, 0] - z * xp
        y = self._data[:, 2] - z * yp

        p = np.sqrt(self._data[:, 1] ** 2
                    + self._data[:, 3] ** 2
                    + self._data[:, 5] ** 2)

        sd.columnName = ["x", "xp", "y", "yp", "p", "t"]
        sd.columnData = [[x.tolist()], [xp.tolist()],
                         [y.tolist()], [yp.tolist()],
                         [p.tolist()], [self._data[:, 6].tolist()]]
        sd.columnDefinition = [["", "m", "", "", sd.SDDS_DOUBLE, 0],
                               ["x'", "", "", "", sd.SDDS_DOUBLE, 0],
                               ["", "m", "", "", sd.SDDS_DOUBLE, 0],
                               ["y'", "", "", "", sd.SDDS_DOUBLE, 0],
                               ["", "m$be$nc", "", "", sd.SDDS_DOUBLE, 0],
                               ["", "s", "", "", sd.SDDS_DOUBLE, 0]]
        sd.save(filepath)
        del sd