docs: def trunk_origin_elevations(nrn, neurite_type=NeuriteType.all):
      '''Get a list of all the trunk origin elevations of a neuron or population
  
      The elevation is defined as the angle between x-axis and the
      vector defined by (initial tree point - soma center)
      on the x-y half-plane.
  
      The range of the elevation angle [-pi/2, pi/2] radians
      '''
      neurite_filter = is_type(neurite_type)
      nrns = neuron_population(nrn)
  
      def _elevation(section, soma):
          '''Elevation of a section'''
          vector = morphmath.vector(section[0], soma.center)
          norm_vector = np.linalg.norm(vector)
  
          if norm_vector >= np.finfo(type(norm_vector)).eps:
              return np.arcsin(vector[COLS.Y] / norm_vector)
          raise ValueError("Norm of vector between soma center and section is almost zero.")
  
      return [_elevation(s.root_node.points, n.soma)
              for n in nrns
              for s in n.neurites if neurite_filter(s)]