Ellipsoid.compute_limb_jacobian

giant.ray_tracer.shapes.ellipsoid:

Ellipsoid.compute_limb_jacobian(self, scan_center_dir, scan_dirs, limb_points, observer_position=None)

This method computes the linear change in the limb location given a change in the relative position between the ellipsoid and the observer.

The limb Jacobian is defined mathematically as the solution to the system of equations given by

\[\begin{split}\left[\begin{array}{c} 2\mathbf{p}_C^T\mathbf{A}_C \\ \mathbf{r}_C^T\mathbf{A}_C \\ \left(\mathbf{s}_c \times\mathbf{s}_d\right)^T\end{array}\right](\mathbf{J} - \mathbf{I}) = \left[\begin{array}{c} \mathbf{0}_{1x3}\\-\mathbf{p}_C^T\mathbf{A}_C\\-\left(\mathbf{s}_c \times\mathbf{s}_d\right)^T \end{array} \right]\end{split}\]

where \(\mathbf{p}_C\) is the vector from the center of the ellipsoid to the limb in current frame, \(\mathbf{r}_C\) is the vector from the observer to the center of the ellipsoid in the current frame, \(\mathbf{s}_c\) is the unit vector in the direction of the scan center in the current frame, and \(\mathbf{s}_d\) is the unit vectors in the direction of the scan lines that correspond to limb \(\mathbf{p}_C\). The Jacobian that is computed is \(\frac{\partial\mathbf{x}_C}{\partial\mathbf{r}_C}\) where \(\mathbf{x}_C\) is the vector from the observer to the limb in the current frame.

Parameters:
  • scan_center_dir (np.ndarray) – the unit vector which the scan is to begin at in the current frame as a length 3 array

  • scan_dirs (np.ndarray) – the unit vectors along with the scan is to proceed as a 3xn array in the current frame where each column represents a new limb point we wish to find (should be nearly orthogonal to the scan_center_dir in most cases).

  • limb_points (np.ndarray) – The vectors from the observer to the limb points in the current frame as a 3xn numpy array where each column corresponds to the same column in the scan_dirs attribute.

  • observer_position (Optional[np.ndarray]) – The location of the observer in the current frame. If None then it is assumed the observer is at the origin of the current frame

Returns:

The jacobian matrix as a nx3x3 array where each panel corresponds to the column in the limb_points input.