---
# System prepended metadata

title: Aud2Sem_MEG.md

---

# Aud2Sem_MEG: guidelines and recipes

## data/code recommendations and Niolon strategies/recipes 

- **data** on niolon data is stored in /envau/work/brainets/data/Aud2Sem_MEG/ 
  - If work locally, you can place the data folder wherever you want, provided that:
    - you keep the same structure in your local repo;
    - are able to update the main data repo on niolon;
    - you are responsible for updating the data paths in the ini files (strategy pending).

- **code** on niolon for the moment I would suggest storing code in /envau/work/brainets/username/code/ .
  - if you work locally, you can place the code folder wherever you want, provided that:
    - you are responsible for updating the code paths in the ini files (strategy pending).

- **environments** on niolon I would create environments in /envau/work/brainets/username/envs/ . The environments you create here need to be activated either from this directory, or specifying the path (see below for examples). To keep things tidy, I am placing also other stuff such as vscode portable there.


## installation/code versioning recipes

- install spyder:
    ```
    cd /envau/work/brainets/giordano.b/envs
    conda create --prefix ./spyder_env
    conda activate ./spyder_env
    conda install -c conda-forge libstdcxx-ng=12
    conda install spyder
    ```

- install portable vscode:
  - ref documentation is here, but needs a couple of extra steps borrowed from migration approach: https://code.visualstudio.com/docs/editor/portable
  ```
  cd /envau/work/brainets/username/envs/ 
  # Download and extract portable vscode; get link 
  # from https://code.visualstudio.com/download
  # and download the x64 .tar.gz
  wget https://az764295.vo.msecnd.net/stable/1a5daa3a0231a0fbba4f14db7ec463cf99d7768e/code-stable-x64-1699527057.tar.gz
  gzip -d code-stable-x64-1699527057.tar.gz
  tar -xf  code-stable-x64-1699527057.tar
  
  #create required dirs to enable portability
  cd VSCode-linux-x64
  mkdir data
  mkdir ./data/user-data
  mkdir ./data/extensions

  #launch vscode
  ./code
  ```
    - useful vscode extensions:
        - Jupyter
    - note that your environment needs ipykernel to be used with vscode
    
  
- import the Aud2Sem_MEG GitHub repo
    ```
    cd ~
    ssh-keygen -t rsa -b 4096 -C "user@email.com"
    # Enter file in which to save the key (/home/username/.ssh/id_rsa): ~/githubkey
    cat ~/githubkey.pub 
    # copy key and place on Github-->settings-->SSH and GPG keys --> new SSH key
    eval "$(ssh-agent -s)"
    ssh-add ~/githubkey
    cd /envau/work/brainets/username/code/
    git clone git@github.com:githubuser/Aud2Sem_MEG.git
    ```
    - The following code needs to be added to ~/.bashrc (preferrably at the end of the file; open with e.g. Pluma):
        ```
        eval "$(ssh-agent -s)"
        ssh-add ~/githubkey
        ```
    
- setup mne environment
    ```
    cd /envau/work/brainets/username/envs/
    conda create --override-channels --channel=conda-forge --prefix ./mne mne-base
    

- vscode might freeze your x2go session. To force restart your x2go session you need to find the process ID (PID) for your x2go session and kill it:
   ```
   ps aux | grep x2goagent | grep [username]
   kill -9 [PID]
   ```
   example input/output:
   ```
   ps aux | grep x2goagent | grep giordano.b
   giordan+ 3273931  0.6  0.0 124524 47780 ?        S    09:14   0:01 x2goagent -nolisten tcp -nolisten tcp -dpi 108 -D -auth /home/giordano.b/.Xauthority -geometry 800x600 -name X2GO-giordano.b-71-1700900089_stDMATE_dp24 :u7121: 
   ```
   in this case PID is 327931. So the following command restarts the x2go session:
   ```
   kill -9 327931
   ```
   
- INT VPN: how to on a ubuntu 22.04 VM:
    - open terminal
    - type ```sudo apt install vpnc network-manager-vpnc-gnome```
    - type ```sudo nm-connection-editor```
    - click on +
    - select Cisco Compatible VPN (vpnc)
    - first window:
        - Connection name = INT
        - Gateway = vpn.int.univ-amu.fr
        - User name = same as INT
        - User password = click on ?, select "store the password for all users" (if you want) then input password for INT
        - Group name = INT
        - Group password = click on ?, select "store the password for all users" then input TNeurosc!ences
    - Click on Advanced
        - tunnel interface name = eth0
        - click on Apply
        - The connection can't be saved yet
    - Click again on Advanced
        - click on Apply
        - Now the terminal window will show the message "Connection validates and can be saved"
    - Click on Save
    - Click on top-right corner, click on VPN Off, Activate the INT VPN connection
    - Enjoy

- Workaround for creating a conda environment in a non-default directory, while still being able to call it with a name
    ```
    conda create -p /envau/work/group.name/user.name/envs/my_new_env python=3.10
    ```
    The environment now lacks a name:
    ```
    conda env list
    ```
    returns:
    ```
                  /envau/work/group.name/user.name/envs/my_new_env
    oldenv        /home/user.name/.conda/envs/oldenv
    base          /hpc/shared/apps/x86_64/softs/Anaconda/3
    ```
    where oldenv is an old environment created in the default directory for conda environments (not recommended), and my_new_env is the new custom environment that now lacks a name. To remedy to this, we simply add a symbolic link to our custom environment in the default directory for conda environments:
    ```
    ln -s /envau/work/group.name/user.name/envs/my_new_env ~/.conda/envs/my_new_env
    ```
    Now ```conda env list``` returns
    ```
                  /envau/work/group.name/user.name/envs/my_new_env
    my_new_env    /home/user.name/.conda/envs/my_new_env
    oldenv        /home/user.name/.conda/envs/oldenv
    base          /hpc/shared/apps/x86_64/softs/Anaconda/3
    ```
    **Important note** now there won't be issues connected to the absence of a name for the environment. However, the environment should still be initialized with the path, to avoid messy issues related to the path for the ipython and python binaries.

- managing freezes of vscode when using matplotlib:
  - ```pip install PyQt5 PySide2 #some errors but perhaps works```
    - include ```%matplotlib qt``` in python code
- managing "ModuleNotFoundError: No module named 'picard'"
  - ```pip install python-picard``` from https://github.com/mne-tools/mne-python/issues/7152
- changing the file permissions of a cloned github repo (e.g., chmod 750 to allow group reading but not writing) is seen by git as a change in the repo files. These changes should not be versioned. To avoid this each of us has to run this command:
  - ```git config core.fileMode false```
