Skip to content
This repository has been archived by the owner on May 18, 2021. It is now read-only.

Première version corrigé SWFM - fonctionnel #171

Open
wants to merge 10 commits into
base: master
Choose a base branch
from

Conversation

alexandrebiomed
Copy link

J'ai terminé, relu et corrigé ma première écriture de l'algorithme SWFM mais les résultats obtenus sont toujours faux et donc il doit y avoir une erreur dans le code ( erreur de débuggage ou erreur de compréhension ).
Je vais faire une description claire de mon algorithme et souligner les parties que je pense être la raison des mauvais résultats.

( lignes 24 à 35 )
Tout d'abord je commence par initialiser les paramètres et créer mes données Xt (correspondant au t-ième temps d'echo) à partir du volume complexe.

( lignes 45 à 73)
Ensuite je commence le calcul du facteur de décroissance de la qualité du signal SDQWF à partir de la formule (6) de l'article ( sur le document de l'article, c'est le facteur psi_j). De la même manière, je pense que mes calculs sont globalement justes, cependant, j'ai un léger doute quant à l'utilisation de la bonne fonction pour calculer sigma_j : j'utilise la fonction stdfilt.

image

( lignes76 à 79 )
Le produit X1Xj est utilisé dans l'équation (5) de l'article donc je le calcul.

( lignes 82 à 111 )
Maintenant je peux calculer le terme à l'intérieur de la fonction arctan dans l'équation (5) que j'appelle «somme». Les éléments sommés selon l'indice j sont appelés «sommable». Pour faire la distinction entre somme et sommable voici une image :

Sommable vs Somme

( lignes 82 à 111 )
Cependant, sommable est exprimé différement sous certaines conditions comme le montre l'image précédente. Donc je créer sommable1,sommable2 et somme1,somme2 pour les deux premières équations de l'image précédente, et correspondant au condition cond1 et cond2 respectivement ( voire paragraphe suivant pour cond1 et cond2).

Sommable et somme sont calculés différemment selon différentes conditions comme présenté à l'équation (5). Pour faire le lien entre les variables cond1,cond2,cond3,cond4,cond5 et les conditions données voici une image :

Condition

(lignes 161 à 227)
La fonction atan2() prend deux arguments en entrée. Or, avec somme, je n'ai qu'un seul argument. Je procède donc à la création d'un set de deux variables Xco et Yco associés à somme. La méthode que j'ai employé pour faire ça est la suivante : je pose tan(somme)=Yco/Xco et j'impose une norme égale à 1 sqrt(Xco^2+Yco^2))=1.
Avant de procéder à la création de ce set de coordonnées, je peux faire en sorte que somme soit compris entre 180 et -180 car la fonction tan est pi-périodique (180 degré périodique).

Pour plus de clareté sur les calculs voici la démarche détaillée.

CALCULS

C'est à partir de là que je suppose qu'il y a une erreur, j'explique ma pensée au prochain paragraphe.

(lignes 229 à 247)
Enfin, avec ce set de coordonnées, je veux calculer le champ magnétique b0. Et c'est cette étape qui me pousse à postuler qu'il y a une erreur dans l'écriture de l'équation (5) de l'article. En effet, l'expression de b0 n'est pas supposée dépendre de j (correspondant au "j-ième temps d'echo"), alors que selon leur expression c'est bien le cas.
De plus, il y a une confusion possible avec l'indice de sommation aussi appelé j.

On voit bien dans les lignes 229 à 245 que l'indice t présent dans les conditions est de trop, mais on ne peut pas le retirer.

.ssh Outdated
@@ -0,0 +1,49 @@
-----BEGIN OPENSSH PRIVATE KEY-----
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@jcohenadad security alert, might want to reset the ssh key this is for.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@mathieuboudreau Why the security alert?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This appears to be a private SSH key for something. They aren't supposed to be shared online, because then anyone that downloads that key might be able to access whatever service or computer this is for. It's akin to accidentally uploading a password, basically.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's likely @alexandrebiomed's private key, so if they don't have it secured with a passphrase, anyone can use this key to SSH into a server that @alexandrebiomed was given SSH access to, signing in with their account.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure if it's the private SSH key for Alexandre's computer (if someone found his IP address, they could then access his computer), or one of the lab computers? @alexandrebiomed do you know?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link

@jidicula jidicula Nov 14, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are definitely bots that crawl GitHub looking for this kind of stuff, so any servers that private key's public counterpart has been added to needs to revoke @alexandrebiomed's access ASAP if they're connected to the Internet (vs an intranet), especially if those accounts have sudo access to those servers

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@alexandrebiomed indeed you should remove these ssh keys. also remove other files that should not have been pushed such as the pathdef and the nii files. then squash those commits so they don’t end up in the git history

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm really sorry for this inconvenience. I just want to make sure that I've understood what I have to do before doing anything.

What I did wrong was that I created a SSH key without choosing any password while I should have chosen one ?

I simply have to delete the SSH key I created with all the files related to it ? Then create a new SSH key, but this time with a password ?

@jcohenadad Should I use git revert to squash the commits ?

Thank you for your help.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What I did wrong was that I created a SSH key without choosing any password while I should have chosen one ?

no. what you did wrong was pushing your SSH key to git. You probably misread the instructions and created the .ssh folder inside your git repos, instead of in your home: ~/.ssh.

before using git, please do a few tutorials.

@jcohenadad Should I use git revert to squash the commits ?

remove the file, then do interactive rebase and squash to remove the problematic file(s) from the history. How to do it

@evaalonsoortiz
Copy link
Member

( lignes 45 à 73)
Ensuite je commence le calcul du facteur de décroissance de la qualité du signal SDQWF à partir de la formule (6) de l'article ( sur le document de l'article, c'est le facteur psi_j). De la même manière, je pense que mes calculs sont globalement justes, cependant, j'ai un léger doute quant à l'utilisation de la bonne fonction pour calculer sigma_j : j'utilise la fonction stdfilt.

image

I suggest using the same approach as what is used in bkgrnd_noise.m. To understand why, I suggest reading up this paper. bkgrnd_noise.m will return the average standard deviation across all echoes, which you do not want, so you can implement your own version in your code.

@alexandrebiomed
Copy link
Author

alexandrebiomed commented Nov 17, 2020 via email

@alexandrebiomed
Copy link
Author

J'ai écrit de nouveau mon algorithme en considérant cette fois la somme à l'extérieur de l'accolade., comme discuté avec @evaalonsoortiz.
J'obtiens toujours des résultats qui sont très différents de ceux obtenus avec la méthode dual-echo, je pense donc que les résultats sont toujours faux.

J'ai donc essayé de retravailler sur le calcul du facteur FB correspondant au facteur de bruit dans le SDQWF « Signal Decay Quality Weight Factor», en me basant sur l'algorithme background_noise que j'ai réécrit et adapté sous le nom de Csigma pour «calcul sigma» ( Voir mon dernier push).

Je ne suis pas sûr de mon algorithme Csigma, mais ce qui est sûr c'est que les résultats obtenus sont toujours faux. Pourrais-tu regarder l'algorithme Csigma et me dire ce que tu en penses ?

Je suis pas non plus certain de la taille de sigma, est-ce un vecteur sigma(echo) ?

@evaalonsoortiz
Copy link
Member

J'ai écrit de nouveau mon algorithme en considérant cette fois la somme à l'extérieur de l'accolade., comme discuté avec @evaalonsoortiz.
J'obtiens toujours des résultats qui sont très différents de ceux obtenus avec la méthode dual-echo, je pense donc que les résultats sont toujours faux.

J'ai donc essayé de retravailler sur le calcul du facteur FB correspondant au facteur de bruit dans le SDQWF « Signal Decay Quality Weight Factor», en me basant sur l'algorithme background_noise que j'ai réécrit et adapté sous le nom de Csigma pour «calcul sigma» ( Voir mon dernier push).

Je ne suis pas sûr de mon algorithme Csigma, mais ce qui est sûr c'est que les résultats obtenus sont toujours faux. Pourrais-tu regarder l'algorithme Csigma et me dire ce que tu en penses ?

Je suis pas non plus certain de la taille de sigma, est-ce un vecteur sigma(echo) ?

@evaalonsoortiz
Copy link
Member

I had a quick look at the output of your Csigma.m, and the first thing I noticed is that the output is an array that is TE x TE, whereas it should be 1 x TE. That may or may not be introducing some error further down. To debug Csigma, I suggest you verify that the noise it outputs gives you the SNR you initially used to generate your simulated data.

As for the algorithm itself and the arctangent operation: To debug this step you could make sure you are able to replicate the conventional atan2 operation and get a field map that makes sense with only 2 echoes. Then, then next step could be to add the "modified" atan2 but still with only 2 echoes, so you are not dealing with a sum at all.

@alexandrebiomed alexandrebiomed changed the title Première version corrigé SWFM - non fonctionnel Première version corrigé SWFM - fonctionnel Nov 24, 2020
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants