code: def callaghan_perpendicular(q, radius):
      r"""Calculates the perpendicular diffusion signal E(q) in a cylinder of
      radius R using the Soderman model [1]_. Assumes that the pulse length
      is infinitely short and the diffusion time is infinitely long.
  
      Parameters
      ----------
      q : array, shape (N,)
          q-space value in 1/mm
      radius : float
          cylinder radius in mm
  
      Returns
      -------
      E : array, shape (N,)
          signal attenuation
  
      References
      ----------
      .. [1] Söderman, Olle, and Bengt Jönsson. "Restricted diffusion in
             cylindrical geometry." Journal of Magnetic Resonance, Series A
             117.1 (1995): 94-97.
  
      """
      # Eq. [6] in the paper
      numerator = (2 * jn(1, 2 * np.pi * q * radius)) ** 2
      denom = (2 * np.pi * q * radius) ** 2
  
      E = np.divide(
          numerator, denom, out=np.zeros_like(q), where=denom != 0
      )
      return E
  
imports: import numpy
  from numpy import dot
  from dipy.core.geometry import sphere2cart
  from dipy.core.geometry import vec2vec_rotmat
  from dipy.core.gradients import GradientTable
  from dipy.reconst.utils import dki_design_matrix
  from scipy.special import jn
label_desc: Use image node_id 7 for calling a global function with example usage: callaghan_perpendicular(q, radius) and returns: E