Find angle made by Dipole

Hi MNE users.

Can anybody tell me where the information regarding dipole orientation is stored when using dipole fitting function on MNE? I need to find the angle that dipole makes with lets say horizontal axis. How can I measure that?

Hello @Rekha,

if you have a dipole object dip, you can get the “orientation vectors” for all time points via:

dip.ori

In this array, each row is a “unit vector” (length 1) with 3 coordinates (x, y, z). Proof that they all have unit length:

# %%
# Create dipole fits
import os.path as op
import numpy as np
import mne

data_path = mne.datasets.sample.data_path()
subjects_dir = op.join(data_path, 'subjects')
fname_ave = op.join(data_path, 'MEG', 'sample', 'sample_audvis-ave.fif')
fname_cov = op.join(data_path, 'MEG', 'sample', 'sample_audvis-cov.fif')
fname_bem = op.join(subjects_dir, 'sample', 'bem', 'sample-5120-bem-sol.fif')
fname_trans = op.join(data_path, 'MEG', 'sample',
                      'sample_audvis_raw-trans.fif')

evoked = mne.read_evokeds(fname_ave, condition='Right Auditory',
                          baseline=(None, 0))
evoked.pick_types(meg=True)
evoked.crop(0.07, 0.08)

dip, _ = mne.fit_dipole(
    evoked, fname_cov, fname_bem, fname_trans, n_jobs=8
)

# calculate lengths of all "ori" vectors
print(np.linalg.norm(dip.ori, axis=1))

Returns:

array([1., 1., 1., 1., 1., 1., 1.])

i.e., the ori vector of each of the 7 dipoles fitted in this example has a length of 1.

Knowing that we’re dealing with unit vectors in 3D space, you can use trigonometric functions to retrieve the angles you’re interested in. For example, this website explains how to do it, but it’s also something you can find in basically any maths book on analytic geometry:

Best wishes,
Richard

2 Likes

Hi @richard, thank you for your reply.

Are these values in the Array equivalent to cosine alpha, cosine beta, cosine gamma of the directional cosines? or what exactly are they?

image

(I removed my previous answers as I figured I need to get some sleep before thinking about math :))

No these values are not equivalent.

Hello @Rekha, I will look into this again later today and try to provide an answer after I’ve freshened up my trigonometry knowledge :smiley:

is the moment in cartesian coordinates. You ask to get it in polar coordinate.

mne has a private function called _cart_to_sph for this.

Alex

@Rekha

I thought a bit about this and the approach I’d take is consider the 3 2D-planes xy, xz, yz separately and then use 2D trigonometry to solve the problem (calculating the one relevant angle of the right-angled triangle formed by vector and plane). ori then provides the lengths of the legs of the triangle.

But like @agramfort said, it’s not really clear why you’d even want to perform these calculations, as it’s usually a spherical coordinate system one would use to describe the angle(s) in 3D space.

Best wishes,
Richard

1 Like

Haha, Thank you so much for the effort Richard, I really appreciate it.

1 Like