Source code for orbit.py_linac.overlapping_fields.jparc_enge_func_factory

#!/usr/bin/env python

# --------------------------------------------------------------
# This is a Enge Function Factory specific for the J-PARC. Some
# Enge's function parameters are defined by the aperture and length,
# and others are defined by the field distribution formula from Trace3D
# documentation.
# --------------------------------------------------------------

import math
import sys
import os

from orbit.py_linac.overlapping_fields.overlapping_quad_fields_lib import PMQ_Trace3D_Function
from orbit.py_linac.overlapping_fields.overlapping_quad_fields_lib import EngeFunction
from orbit.py_linac.overlapping_fields.overlapping_quad_fields_lib import SimpleQuadFieldFunc


[docs]def JPARC_EngeFunctionFactory(quad): """ It generates the Enge's Function for J-PARC quads. """ name = quad.getName() length_param = quad.getLength() # ---- general PMQ function described in Trace3D documentation if quad.hasParam("radIn") and quad.hasParam("radOut"): radIn = quad.getParam("radIn") radOut = quad.getParam("radOut") cutoff_level = 0.01 if name == "LI_DTL1:DTQ01": cutoff_level = 0.02 func = PMQ_Trace3D_Function(length_param, radIn, radOut, cutoff_level) return func # ----- general Enge's Function if quad.hasParam("aperture"): acceptance_diameter_param = quad.getParam("aperture") cutoff_level = 0.01 func = EngeFunction(length_param, acceptance_diameter_param, cutoff_level) return func else: msg = "SNS_EngeFunctionFactory Python function. " msg += os.linesep msg += "Cannot create the EngeFunction for the quad!" msg += os.linesep msg = msg + "quad name = " + quad.getName() msg = msg + os.linesep msg = msg + "It does not have the aperture parameter!" msg = msg + os.linesep orbitFinalize(msg) return None