Source code for sirepo.sim_data.elegant
# -*- coding: utf-8 -*-
"""elegant simulation data functions
:copyright: Copyright (c) 2019 RadiaSoft LLC. All Rights Reserved.
:license: http://www.apache.org/licenses/LICENSE-2.0.html
"""
from pykern.pkcollections import PKDict
from pykern.pkdebug import pkdc, pkdlog, pkdp
from sirepo.template.lattice import LatticeUtil
import sirepo.sim_data.lattice
[docs]
class SimData(sirepo.sim_data.lattice.LatticeSimData):
_BUNCH_REPORT_DEPENDENCIES = ["bunch", "bunchSource", "bunchFile", "rpnVariables"]
[docs]
@classmethod
def fixup_old_data(cls, data, qcall, **kwargs):
super().fixup_old_data(data, qcall, **kwargs)
dm = data.models
cls._init_models(
dm, ("bunch", "bunchFile", "bunchSource", "simulation", "twissReport")
)
for m in dm.elements:
if m.type == "WATCH":
m.filename = "1"
if m.mode == "coordinates" or m.mode == "coord":
m.mode = "coordinate"
cls._organize_example(data)
from sirepo.template.elegant import OutputFileIterator
LatticeUtil.fixup_output_files(data, cls.schema(), OutputFileIterator(True))
@classmethod
def _compute_job_fields(cls, data, report, compute_model):
res = super()._compute_job_fields(data, report, compute_model)
if compute_model == "twissReport":
res += cls._BUNCH_REPORT_DEPENDENCIES + [
"elements",
"beamlines",
"commands",
"simulation.activeBeamlineId",
]
return res
@classmethod
def _lib_file_basenames(cls, data):
res = super()._lib_file_basenames(data)
if data.models.bunchFile.sourceFile:
res.append(
cls.lib_file_name_with_model_field(
"bunchFile", "sourceFile", data.models.bunchFile.sourceFile
)
)
return res