├── 00-introduction
└── 00-fMRIDA_slides.pdf
├── 01-reproducible_neuroimaging
├── 01-fMRIDA_slides.pdf
└── Git_Jupyter-cheetsheet.pdf
├── 02-fmri_data_manipulation_in_python
├── 00-structural_mri_manipulation_template.ipynb
├── 01-functional_mri_manipulation_template.ipynb
├── 02-data_frames_manipulation_template.ipynb
├── 02-fMRIDA_slides.pdf
├── bonus-data_structures_and_oop.ipynb
├── data
│ ├── CSSE_confirmed_2020-03-26.csv
│ ├── covid-ecdpc.csv
│ ├── sub-01_T1w_space-MNI152NLin2009cAsym_preproc.nii.gz
│ ├── sub-01_ses-1_task-rest_bold_confounds.tsv
│ └── sub-01_ses-1_task-rest_bold_space-MNI152NLin2009cAsym_preproc.nii.gz
└── images
│ ├── brain_images.png
│ ├── fmri.png
│ ├── mri.png
│ └── random_picture.jpg
├── 03-fmri_data_preprocessing
├── 03-fMRIDA_slides.pdf
├── data
│ ├── harry_potter_400x400_array.npy
│ └── sub-01_T1w_space-MNI152NLin2009cAsym_preproc.nii.gz
├── fmri_preprocessing_nipype.ipynb
├── images
│ ├── harry_potter_400x400.jpg
│ └── screenshot_solution.png
├── linear_transformations.ipynb
└── pyscript_realign.m
├── 04-general_linear_model
├── 04-fMRIDA_slides.pdf
├── 05-fMRIDA_slides.pdf
├── glm_on_fMRI_data_template.ipynb
├── multiple_linear_regression_template.ipynb
└── simple_linear_regression_template.ipynb
├── 05-functional_connectivity
├── 06-fMRIDA_slides.pdf
├── brain_parcellations_template.ipynb
├── seed-seed_connectivity_template.ipynb
└── seed-voxel_connectivity_template.ipynb
├── 06-machine_learning
├── 07-fMRIDA_slides.pdf
└── machine_learning_fMRI_template.ipynb
├── LICENSE
├── README.md
├── data
├── CSSE_confirmed_2020-03-26.csv
├── harry.npy
├── james.npy
├── lilly.npy
├── sub-01_T1w_space-MNI152NLin2009cAsym_preproc.nii.gz
├── sub-01_ses-1_task-rest_bold_confounds.tsv
├── sub-01_ses-1_task-rest_bold_space-MNI152NLin2009cAsym_preproc.nii.gz
├── sub-01_task-rhymejudgment_desc-confounds_regressors.tsv
├── syrius.npy
└── voldemort.npy
├── images
└── fMRIDA_study_plan.png
└── solutions
├── 00-structural_mri_manipulation_solution.ipynb
├── 01-functional_mri_manipulation_solution.ipynb
├── 02-data_frames_manipulation_solution.ipynb
├── brain_parcellations_solution.ipynb
├── glm_on_fMRI_data_solution.ipynb
├── multiple_linear_regression_solution.ipynb
├── seed-seed_connectivity_solution.ipynb
├── seed-voxel_connectivity_solution.ipynb
└── simple_linear_regression_solution.ipynb
/00-introduction/00-fMRIDA_slides.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fMRIAnalysisCourse/fmri-analysis-course/5495887620b54bc3f6b5c83ed9fa35df149414c7/00-introduction/00-fMRIDA_slides.pdf
--------------------------------------------------------------------------------
/01-reproducible_neuroimaging/01-fMRIDA_slides.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fMRIAnalysisCourse/fmri-analysis-course/5495887620b54bc3f6b5c83ed9fa35df149414c7/01-reproducible_neuroimaging/01-fMRIDA_slides.pdf
--------------------------------------------------------------------------------
/01-reproducible_neuroimaging/Git_Jupyter-cheetsheet.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fMRIAnalysisCourse/fmri-analysis-course/5495887620b54bc3f6b5c83ed9fa35df149414c7/01-reproducible_neuroimaging/Git_Jupyter-cheetsheet.pdf
--------------------------------------------------------------------------------
/02-fmri_data_manipulation_in_python/00-structural_mri_manipulation_template.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "# Plotting structural MRI data in Python\n",
8 | "
\n"
9 | ]
10 | },
11 | {
12 | "cell_type": "markdown",
13 | "metadata": {},
14 | "source": [
15 | "- Loading structural MRI data\n",
16 | "- Sliceing structural MRI data\n",
17 | "- Plotting structural MRI data\n",
18 | "- Interactive plotting\n",
19 | "-----------------------------------\n",
20 | "\n",
21 | "__Packages__:\n",
22 | "- [Matplotlib](https://matplotlib.org/) - a comprehensive library for creating static, animated, and interactive visualizations in Python\n",
23 | "- [Nilearn](https://nilearn.github.io/) - a library for fast and easy statistical learning on neuroimaging data.\n",
24 | "- [Nibabel](https://nipy.org/nibabel/) - a library providing read and write access to some common medical and neuroimaging file formats, including (e.g. NIfTI1)\n",
25 | "- [Numpy](https://numpy.org/) - The fundamental package for scientific computing with Python "
26 | ]
27 | },
28 | {
29 | "cell_type": "markdown",
30 | "metadata": {},
31 | "source": [
32 | "## 1. Let's load and plot a random picture "
33 | ]
34 | },
35 | {
36 | "cell_type": "code",
37 | "execution_count": 2,
38 | "metadata": {},
39 | "outputs": [],
40 | "source": [
41 | "# Load libraries\n",
42 | "\n",
43 | "import matplotlib.pyplot as plt # General plotting\n",
44 | "import matplotlib.image as mpimg # Loading img files"
45 | ]
46 | },
47 | {
48 | "cell_type": "code",
49 | "execution_count": 6,
50 | "metadata": {},
51 | "outputs": [],
52 | "source": [
53 | "# Loading random picture \n",
54 | "\n",
55 | "image = mpimg.imread('images/random_picture.png')\n",
56 | "\n",
57 | "# Plot image using matplotlib\n"
58 | ]
59 | },
60 | {
61 | "cell_type": "code",
62 | "execution_count": 7,
63 | "metadata": {},
64 | "outputs": [],
65 | "source": [
66 | "# Print dimensions of the image\n"
67 | ]
68 | },
69 | {
70 | "cell_type": "code",
71 | "execution_count": 8,
72 | "metadata": {},
73 | "outputs": [],
74 | "source": [
75 | "# Check type of the image\n"
76 | ]
77 | },
78 | {
79 | "cell_type": "markdown",
80 | "metadata": {},
81 | "source": [
82 | "**NOTE**: RGB - three channels (R - red, G - green, B - blue). Each channel includes the grayscale image of the same size as a color image, made of just one of these primary colors."
83 | ]
84 | },
85 | {
86 | "cell_type": "code",
87 | "execution_count": 23,
88 | "metadata": {},
89 | "outputs": [],
90 | "source": [
91 | "# Create a new variable consinting only one channel\n",
92 | "\n",
93 | "\n",
94 | "\n",
95 | "# Change colormap of the image\n",
96 | "\n",
97 | "\n",
98 | "\n",
99 | "# Add colorbar to the image\n",
100 | "\n",
101 | "\n"
102 | ]
103 | },
104 | {
105 | "cell_type": "markdown",
106 | "metadata": {},
107 | "source": [
108 | "## 2. Let's load and plot structural MRI data"
109 | ]
110 | },
111 | {
112 | "cell_type": "markdown",
113 | "metadata": {},
114 | "source": [
115 | "Must have packages:\n",
116 | "\n",
117 | "- [Nibabel](https://nipy.org/nibabel/)\n",
118 | "- [Nilearn](https://nilearn.github.io/) "
119 | ]
120 | },
121 | {
122 | "cell_type": "code",
123 | "execution_count": 2,
124 | "metadata": {},
125 | "outputs": [],
126 | "source": [
127 | "# Load libraries\n",
128 | "\n",
129 | "import nibabel as nib\n",
130 | "from nilearn import plotting, image\n",
131 | "import numpy as np"
132 | ]
133 | },
134 | {
135 | "cell_type": "code",
136 | "execution_count": 39,
137 | "metadata": {},
138 | "outputs": [],
139 | "source": [
140 | "# Loading MRI image\n",
141 | "\n",
142 | "mri_path = 'data/sub-01_T1w_space-MNI152NLin2009cAsym_preproc.nii.gz'\n",
143 | "mri = image.load_img(mri_path)"
144 | ]
145 | },
146 | {
147 | "cell_type": "code",
148 | "execution_count": 76,
149 | "metadata": {},
150 | "outputs": [],
151 | "source": [
152 | "# Print dimensions of MRI image\n",
153 | "\n",
154 | "\n",
155 | "# Print type of MRI image"
156 | ]
157 | },
158 | {
159 | "cell_type": "code",
160 | "execution_count": 86,
161 | "metadata": {},
162 | "outputs": [],
163 | "source": [
164 | "# Print MRI image in Nilearn (use plotting.plot_anat)\n",
165 | "# Display plotting.plot_anat documentation (Shift + Tab)\n",
166 | "\n"
167 | ]
168 | },
169 | {
170 | "cell_type": "code",
171 | "execution_count": 80,
172 | "metadata": {},
173 | "outputs": [],
174 | "source": [
175 | "# Make an interactive plotting (use plotting.view; bg_img=None)\n",
176 | "# plotting.view_img(mri, bg_img=None)\n"
177 | ]
178 | },
179 | {
180 | "cell_type": "code",
181 | "execution_count": 50,
182 | "metadata": {},
183 | "outputs": [],
184 | "source": [
185 | "# Convert nibabel file to numpy array\n",
186 | "mri_array = mri.get_data()\n",
187 | "\n",
188 | "\n",
189 | "# Check and print type and dimensions\n"
190 | ]
191 | },
192 | {
193 | "cell_type": "code",
194 | "execution_count": 67,
195 | "metadata": {},
196 | "outputs": [],
197 | "source": [
198 | "# Plot one one slice of the image (HINT: try to use np.rot90())\n",
199 | "\n",
200 | "\n"
201 | ]
202 | },
203 | {
204 | "cell_type": "code",
205 | "execution_count": 16,
206 | "metadata": {},
207 | "outputs": [],
208 | "source": [
209 | "# Using subplots # fig, (ax1, ax2) = plt.subplots(1,2, figsize=(10, 10))\n",
210 | "\n"
211 | ]
212 | },
213 | {
214 | "cell_type": "code",
215 | "execution_count": 14,
216 | "metadata": {},
217 | "outputs": [],
218 | "source": [
219 | "# Save figure with savefig\n",
220 | "\n"
221 | ]
222 | },
223 | {
224 | "cell_type": "code",
225 | "execution_count": 11,
226 | "metadata": {},
227 | "outputs": [],
228 | "source": [
229 | "# Generate random data with np.random.rand()\n",
230 | "\n"
231 | ]
232 | }
233 | ],
234 | "metadata": {
235 | "kernelspec": {
236 | "display_name": "Python 3",
237 | "language": "python",
238 | "name": "python3"
239 | },
240 | "language_info": {
241 | "codemirror_mode": {
242 | "name": "ipython",
243 | "version": 3
244 | },
245 | "file_extension": ".py",
246 | "mimetype": "text/x-python",
247 | "name": "python",
248 | "nbconvert_exporter": "python",
249 | "pygments_lexer": "ipython3",
250 | "version": "3.8.3"
251 | }
252 | },
253 | "nbformat": 4,
254 | "nbformat_minor": 4
255 | }
256 |
--------------------------------------------------------------------------------
/02-fmri_data_manipulation_in_python/01-functional_mri_manipulation_template.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "# Plotting functional MRI data in Python\n",
8 | "
\n",
9 | "\n"
10 | ]
11 | },
12 | {
13 | "cell_type": "markdown",
14 | "metadata": {},
15 | "source": [
16 | "- Loading functional MRI data\n",
17 | "- Sliceing functional MRI data\n",
18 | "- Plotting functional MRI data\n",
19 | "- Plotting timeseries\n",
20 | "-----------------------------------\n",
21 | "\n",
22 | "__Packages__:\n",
23 | "- [Matplotlib](https://matplotlib.org/) - a comprehensive library for creating static, animated, and interactive visualizations in Python\n",
24 | "- [Nilearn](https://matplotlib.org/) - a library for fast and easy statistical learning on neuroimaging data.\n",
25 | "- [Nibabel](https://nipy.org/nibabel/) - a library providing read and write access to some common medical and neuroimaging file formats, including (e.g. NIfTI1)\n",
26 | "- [Numpy](https://numpy.org/) - The fundamental package for scientific computing with Python "
27 | ]
28 | },
29 | {
30 | "cell_type": "code",
31 | "execution_count": 1,
32 | "metadata": {},
33 | "outputs": [],
34 | "source": [
35 | "# Load libraries\n",
36 | "\n",
37 | "import nibabel as nib\n",
38 | "from nilearn import plotting, image\n",
39 | "import matplotlib.pyplot as plt\n",
40 | "import numpy as np"
41 | ]
42 | },
43 | {
44 | "cell_type": "code",
45 | "execution_count": 5,
46 | "metadata": {},
47 | "outputs": [],
48 | "source": [
49 | "# Load data\n",
50 | "\n",
51 | "fmri_path = 'data/sub-01_ses-1_task-rest_bold_space-MNI152NLin2009cAsym_preproc.nii.gz'\n",
52 | "fmri = image.load_img(fmri_path)"
53 | ]
54 | },
55 | {
56 | "cell_type": "code",
57 | "execution_count": null,
58 | "metadata": {},
59 | "outputs": [],
60 | "source": [
61 | "# Print dimensions and type of data\n",
62 | "\n"
63 | ]
64 | },
65 | {
66 | "cell_type": "code",
67 | "execution_count": 10,
68 | "metadata": {},
69 | "outputs": [],
70 | "source": [
71 | "# Select one volume (image.index_img) \n",
72 | "\n"
73 | ]
74 | },
75 | {
76 | "cell_type": "code",
77 | "execution_count": 12,
78 | "metadata": {},
79 | "outputs": [],
80 | "source": [
81 | "# Make a plot (plotting.plot_epi)\n",
82 | "\n"
83 | ]
84 | },
85 | {
86 | "cell_type": "code",
87 | "execution_count": null,
88 | "metadata": {},
89 | "outputs": [],
90 | "source": [
91 | "# Convert nibabel file to numpy array (get_data)\n",
92 | "\n",
93 | "\n",
94 | "# Check type and dimensions\n",
95 | "\n"
96 | ]
97 | },
98 | {
99 | "cell_type": "code",
100 | "execution_count": 13,
101 | "metadata": {},
102 | "outputs": [],
103 | "source": [
104 | "# Plot timeseries of selected voxels\n",
105 | "\n"
106 | ]
107 | },
108 | {
109 | "cell_type": "code",
110 | "execution_count": 24,
111 | "metadata": {},
112 | "outputs": [],
113 | "source": [
114 | "# Generate random timeseries with the length of fMRI data (np.random.uniform (low, high, size=(,))\n",
115 | "\n"
116 | ]
117 | },
118 | {
119 | "cell_type": "code",
120 | "execution_count": null,
121 | "metadata": {},
122 | "outputs": [],
123 | "source": [
124 | "# Plot random timeseries with selected voxel timeseries\n",
125 | "\n"
126 | ]
127 | }
128 | ],
129 | "metadata": {
130 | "kernelspec": {
131 | "display_name": "Python 3",
132 | "language": "python",
133 | "name": "python3"
134 | },
135 | "language_info": {
136 | "codemirror_mode": {
137 | "name": "ipython",
138 | "version": 3
139 | },
140 | "file_extension": ".py",
141 | "mimetype": "text/x-python",
142 | "name": "python",
143 | "nbconvert_exporter": "python",
144 | "pygments_lexer": "ipython3",
145 | "version": "3.8.3"
146 | }
147 | },
148 | "nbformat": 4,
149 | "nbformat_minor": 4
150 | }
151 |
--------------------------------------------------------------------------------
/02-fmri_data_manipulation_in_python/02-data_frames_manipulation_template.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "# Data frames manipulation with pandas"
8 | ]
9 | },
10 | {
11 | "cell_type": "markdown",
12 | "metadata": {},
13 | "source": [
14 | "[pandas](https://pandas.pydata.org/) - fast, powerful, flexible and easy to use open source data analysis and manipulation tool,\n",
15 | "built on top of the Python programming language.\n",
16 | "\n",
17 | "----------------\n"
18 | ]
19 | },
20 | {
21 | "cell_type": "code",
22 | "execution_count": 32,
23 | "metadata": {},
24 | "outputs": [],
25 | "source": [
26 | "## Load libraries\n",
27 | "import pandas as pd\n",
28 | "import matplotlib.pyplot as plt"
29 | ]
30 | },
31 | {
32 | "cell_type": "markdown",
33 | "metadata": {},
34 | "source": [
35 | "## 1. Load & plot confounds variables \n",
36 | "\n",
37 | "**Confounds** (or *nuisance regressors*) are variables representing fluctuations with a potential non-neuronal origin. \n",
38 | "\n",
39 | "Confounding variables calculated by [fMRIPrep](https://fmriprep.readthedocs.io/en/stable/outputs.html#confounds) are stored separately for each subject, session and run in TSV files - one column for each confound variable. "
40 | ]
41 | },
42 | {
43 | "cell_type": "code",
44 | "execution_count": 57,
45 | "metadata": {},
46 | "outputs": [],
47 | "source": [
48 | "# Load data\n",
49 | "\n",
50 | "confounds_path = \"data/sub-01_ses-1_task-rest_bold_confounds.tsv\"\n",
51 | "\n",
52 | "\n",
53 | "# Print first 5 rows of data\n"
54 | ]
55 | },
56 | {
57 | "cell_type": "code",
58 | "execution_count": 61,
59 | "metadata": {},
60 | "outputs": [],
61 | "source": [
62 | "# Print column names\n",
63 | "\n"
64 | ]
65 | },
66 | {
67 | "cell_type": "code",
68 | "execution_count": 62,
69 | "metadata": {},
70 | "outputs": [],
71 | "source": [
72 | "# Plot mean timeseries from cerebrospinal fluid (CSF) and white matter \n",
73 | "\n"
74 | ]
75 | },
76 | {
77 | "cell_type": "code",
78 | "execution_count": 69,
79 | "metadata": {},
80 | "outputs": [],
81 | "source": [
82 | "# Plot cerebrospinal fluid (CSF) and white matter timeseries on a scatterplot\n",
83 | "\n"
84 | ]
85 | },
86 | {
87 | "cell_type": "code",
88 | "execution_count": 68,
89 | "metadata": {},
90 | "outputs": [],
91 | "source": [
92 | "# Plot cerebrospinal fluid (CSF) and white matter timeseries on a scatterplot (use seaborn joint plot)\n",
93 | "import seaborn as sns\n",
94 | "\n"
95 | ]
96 | },
97 | {
98 | "cell_type": "markdown",
99 | "metadata": {},
100 | "source": [
101 | "## 2. Load and plot COVID-19 data\n",
102 | "\n",
103 | "Download data:\n",
104 | "[COVID-19](http://shinyapps.org/apps/corona/) (check out their GH)"
105 | ]
106 | },
107 | {
108 | "cell_type": "code",
109 | "execution_count": 50,
110 | "metadata": {},
111 | "outputs": [],
112 | "source": [
113 | "# Load some COVID-19 data\n",
114 | "\n",
115 | "# covid_path = \n",
116 | "\n",
117 | "\n",
118 | "# Print first 5 rows of data\n",
119 | "\n"
120 | ]
121 | },
122 | {
123 | "cell_type": "code",
124 | "execution_count": 22,
125 | "metadata": {},
126 | "outputs": [],
127 | "source": [
128 | "# Group by country & sum cases\n",
129 | "\n"
130 | ]
131 | },
132 | {
133 | "cell_type": "code",
134 | "execution_count": 40,
135 | "metadata": {},
136 | "outputs": [],
137 | "source": [
138 | "# Filter dataframe by cases in Poland\n",
139 | "\n"
140 | ]
141 | },
142 | {
143 | "cell_type": "code",
144 | "execution_count": null,
145 | "metadata": {},
146 | "outputs": [],
147 | "source": [
148 | "# Plot cases in Poland\n",
149 | "\n"
150 | ]
151 | },
152 | {
153 | "cell_type": "code",
154 | "execution_count": null,
155 | "metadata": {},
156 | "outputs": [],
157 | "source": [
158 | "# Plot cases in other country\n",
159 | "\n"
160 | ]
161 | },
162 | {
163 | "cell_type": "code",
164 | "execution_count": null,
165 | "metadata": {},
166 | "outputs": [],
167 | "source": [
168 | "# Plot cases of multiple countries on a one plot\n",
169 | "\n"
170 | ]
171 | }
172 | ],
173 | "metadata": {
174 | "kernelspec": {
175 | "display_name": "Python 3",
176 | "language": "python",
177 | "name": "python3"
178 | },
179 | "language_info": {
180 | "codemirror_mode": {
181 | "name": "ipython",
182 | "version": 3
183 | },
184 | "file_extension": ".py",
185 | "mimetype": "text/x-python",
186 | "name": "python",
187 | "nbconvert_exporter": "python",
188 | "pygments_lexer": "ipython3",
189 | "version": "3.8.3"
190 | }
191 | },
192 | "nbformat": 4,
193 | "nbformat_minor": 4
194 | }
195 |
--------------------------------------------------------------------------------
/02-fmri_data_manipulation_in_python/02-fMRIDA_slides.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fMRIAnalysisCourse/fmri-analysis-course/5495887620b54bc3f6b5c83ed9fa35df149414c7/02-fmri_data_manipulation_in_python/02-fMRIDA_slides.pdf
--------------------------------------------------------------------------------
/02-fmri_data_manipulation_in_python/bonus-data_structures_and_oop.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "# Data structures"
8 | ]
9 | },
10 | {
11 | "cell_type": "markdown",
12 | "metadata": {},
13 | "source": [
14 | "**Classes** are a way of grouping together related data and functions which act upon that data.\n",
15 | "\n",
16 | "A **class** is a kind of data type, just like a string, integer or list. When we create an object of that data type, we call it an instance of a class. \n",
17 | "\n",
18 | "In Python, everything is an object – everything is an instance of some class. Read [more](https://python-textbok.readthedocs.io/en/1.0/Classes.html)."
19 | ]
20 | },
21 | {
22 | "cell_type": "code",
23 | "execution_count": 123,
24 | "metadata": {},
25 | "outputs": [],
26 | "source": [
27 | "import numpy as np\n",
28 | "import pandas as pd"
29 | ]
30 | },
31 | {
32 | "cell_type": "markdown",
33 | "metadata": {},
34 | "source": [
35 | "**List** is a data structure that's built into Python and holds a collection of items. Lists cannot directly handle math operations"
36 | ]
37 | },
38 | {
39 | "cell_type": "code",
40 | "execution_count": 122,
41 | "metadata": {},
42 | "outputs": [],
43 | "source": [
44 | "# Lists\n",
45 | "\n",
46 | "lista = [12, 13, 11]\n",
47 | "lista2d = [[1, 2, 3], [4, 5, 6]]"
48 | ]
49 | },
50 | {
51 | "cell_type": "markdown",
52 | "metadata": {},
53 | "source": [
54 | "**Array** is a grid of values, all of the same type. Can store data very compactly and are more efficient for storing large amounts of data. Arrays are great for numerical operations."
55 | ]
56 | },
57 | {
58 | "cell_type": "code",
59 | "execution_count": 153,
60 | "metadata": {},
61 | "outputs": [
62 | {
63 | "data": {
64 | "text/plain": [
65 | "(2, 3)"
66 | ]
67 | },
68 | "execution_count": 153,
69 | "metadata": {},
70 | "output_type": "execute_result"
71 | }
72 | ],
73 | "source": [
74 | "# Numpy array\n",
75 | "lista_array = np.asarray(lista)\n",
76 | "lista2d_array = np.asarray(lista2d)\n",
77 | "lista2d_array.shape"
78 | ]
79 | },
80 | {
81 | "cell_type": "code",
82 | "execution_count": 155,
83 | "metadata": {},
84 | "outputs": [
85 | {
86 | "data": {
87 | "text/plain": [
88 | "numpy.ndarray"
89 | ]
90 | },
91 | "execution_count": 155,
92 | "metadata": {},
93 | "output_type": "execute_result"
94 | }
95 | ],
96 | "source": [
97 | "type(lista2d_array)"
98 | ]
99 | },
100 | {
101 | "cell_type": "markdown",
102 | "metadata": {},
103 | "source": [
104 | "**Dictionary** consists of a collection of key-value pairs. Each key-value pair maps the key to its associated value."
105 | ]
106 | },
107 | {
108 | "cell_type": "code",
109 | "execution_count": 154,
110 | "metadata": {},
111 | "outputs": [
112 | {
113 | "data": {
114 | "text/plain": [
115 | "dict_keys(['wzrost', 'wiek'])"
116 | ]
117 | },
118 | "execution_count": 154,
119 | "metadata": {},
120 | "output_type": "execute_result"
121 | }
122 | ],
123 | "source": [
124 | "# Dictionary\n",
125 | "slownik = {'wzrost': [134, 157, 180], 'wiek': [12, 24, 25]}\n",
126 | "slownik.keys()"
127 | ]
128 | },
129 | {
130 | "cell_type": "markdown",
131 | "metadata": {},
132 | "source": [
133 | "**DataFrame** is a 2-dimensional labeled data structure with columns of potentially different types."
134 | ]
135 | },
136 | {
137 | "cell_type": "code",
138 | "execution_count": 147,
139 | "metadata": {},
140 | "outputs": [
141 | {
142 | "data": {
143 | "text/html": [
144 | "
\n",
145 | "\n",
158 | "
\n",
159 | " \n",
160 | " \n",
161 | " | \n",
162 | " wzrost | \n",
163 | " wiek | \n",
164 | "
\n",
165 | " \n",
166 | " \n",
167 | " \n",
168 | " 0 | \n",
169 | " 134 | \n",
170 | " 12 | \n",
171 | "
\n",
172 | " \n",
173 | " 1 | \n",
174 | " 157 | \n",
175 | " 24 | \n",
176 | "
\n",
177 | " \n",
178 | " 2 | \n",
179 | " 180 | \n",
180 | " 25 | \n",
181 | "
\n",
182 | " \n",
183 | "
\n",
184 | "
"
185 | ],
186 | "text/plain": [
187 | " wzrost wiek\n",
188 | "0 134 12\n",
189 | "1 157 24\n",
190 | "2 180 25"
191 | ]
192 | },
193 | "execution_count": 147,
194 | "metadata": {},
195 | "output_type": "execute_result"
196 | }
197 | ],
198 | "source": [
199 | "# Dataframe\n",
200 | "df = pd.DataFrame(slownik)\n",
201 | "df"
202 | ]
203 | },
204 | {
205 | "cell_type": "markdown",
206 | "metadata": {},
207 | "source": [
208 | "**Tuple** is a data structure that is an immutable, or unchangeable, ordered sequence of elements. Because tuples are immutable, their values cannot be modified."
209 | ]
210 | },
211 | {
212 | "cell_type": "code",
213 | "execution_count": 152,
214 | "metadata": {},
215 | "outputs": [],
216 | "source": [
217 | "# Tuple\n",
218 | "tupla = (1,2)"
219 | ]
220 | },
221 | {
222 | "cell_type": "markdown",
223 | "metadata": {},
224 | "source": [
225 | "# Functions, methods, and attributes"
226 | ]
227 | },
228 | {
229 | "cell_type": "markdown",
230 | "metadata": {},
231 | "source": [
232 | "**Function** - a block of code to carry out a specific task, will contain its own scope and is called by name. A function performs an action using some set of input parameters. Not all functions are applicable to all kinds of data."
233 | ]
234 | },
235 | {
236 | "cell_type": "code",
237 | "execution_count": 157,
238 | "metadata": {},
239 | "outputs": [
240 | {
241 | "data": {
242 | "text/plain": [
243 | "7"
244 | ]
245 | },
246 | "execution_count": 157,
247 | "metadata": {},
248 | "output_type": "execute_result"
249 | }
250 | ],
251 | "source": [
252 | "def suma(x, y):\n",
253 | " \"\"\"kkklklk\"\"\"\n",
254 | " return x + y\n",
255 | "\n",
256 | "suma(2, 5)"
257 | ]
258 | },
259 | {
260 | "cell_type": "markdown",
261 | "metadata": {},
262 | "source": [
263 | "**Attribute** - a variable stored in a class. E.g. shape. Use `dir` to see all attributes and methods associated with a class."
264 | ]
265 | },
266 | {
267 | "cell_type": "code",
268 | "execution_count": 165,
269 | "metadata": {},
270 | "outputs": [
271 | {
272 | "data": {
273 | "text/plain": [
274 | "(2, 3)"
275 | ]
276 | },
277 | "execution_count": 165,
278 | "metadata": {},
279 | "output_type": "execute_result"
280 | }
281 | ],
282 | "source": [
283 | "lista2d_array.shape"
284 | ]
285 | },
286 | {
287 | "cell_type": "markdown",
288 | "metadata": {},
289 | "source": [
290 | "**Method** - is similar to a function, except it is associated with object/classes. E.c., .max(), .min(), upper()"
291 | ]
292 | },
293 | {
294 | "cell_type": "code",
295 | "execution_count": 171,
296 | "metadata": {},
297 | "outputs": [
298 | {
299 | "data": {
300 | "text/plain": [
301 | "6"
302 | ]
303 | },
304 | "execution_count": 171,
305 | "metadata": {},
306 | "output_type": "execute_result"
307 | }
308 | ],
309 | "source": [
310 | "lista2d_array.max()"
311 | ]
312 | },
313 | {
314 | "cell_type": "code",
315 | "execution_count": 175,
316 | "metadata": {},
317 | "outputs": [
318 | {
319 | "data": {
320 | "text/plain": [
321 | "'COS'"
322 | ]
323 | },
324 | "execution_count": 175,
325 | "metadata": {},
326 | "output_type": "execute_result"
327 | }
328 | ],
329 | "source": [
330 | "slowo = 'cos'\n",
331 | "slowo.upper()"
332 | ]
333 | },
334 | {
335 | "cell_type": "markdown",
336 | "metadata": {},
337 | "source": [
338 | "Attribute = characteristics; method = action"
339 | ]
340 | },
341 | {
342 | "cell_type": "markdown",
343 | "metadata": {},
344 | "source": [
345 | "## Building a class with attributes and methods\n",
346 | "\n",
347 | "All classes have a function called `__init__()`, which is always executed when the class is being initiated.\n",
348 | "Use the `__init__()` function to assign values to object properties, or other operations that are necessary to do when the object is being created:"
349 | ]
350 | },
351 | {
352 | "cell_type": "code",
353 | "execution_count": 188,
354 | "metadata": {},
355 | "outputs": [],
356 | "source": [
357 | "class Person: \n",
358 | " def __init__(self, name):\n",
359 | " self.name = name\n",
360 | " def hello(self):\n",
361 | " print(f'Hello {self.name}!')\n",
362 | " def goodbye(self):\n",
363 | " print(f'Goodbye {self.name}!')"
364 | ]
365 | },
366 | {
367 | "cell_type": "code",
368 | "execution_count": 187,
369 | "metadata": {},
370 | "outputs": [
371 | {
372 | "name": "stdout",
373 | "output_type": "stream",
374 | "text": [
375 | "Goodbye Jarek!\n"
376 | ]
377 | }
378 | ],
379 | "source": [
380 | "p = Person('Jarek')\n",
381 | "p.goodbye()"
382 | ]
383 | },
384 | {
385 | "cell_type": "markdown",
386 | "metadata": {},
387 | "source": [
388 | "## Libraries and modules"
389 | ]
390 | },
391 | {
392 | "cell_type": "markdown",
393 | "metadata": {},
394 | "source": [
395 | "**Module** is a piece of software that has a specific functionality (contained in separate `.py` file). For example `plotting` module from `nilearn`.\n",
396 | "\n",
397 | "**Library** is a collection of modules, e.g., `nilearn`, `nibabel`, `numpy` etc."
398 | ]
399 | }
400 | ],
401 | "metadata": {
402 | "kernelspec": {
403 | "display_name": "Python 3",
404 | "language": "python",
405 | "name": "python3"
406 | },
407 | "language_info": {
408 | "codemirror_mode": {
409 | "name": "ipython",
410 | "version": 3
411 | },
412 | "file_extension": ".py",
413 | "mimetype": "text/x-python",
414 | "name": "python",
415 | "nbconvert_exporter": "python",
416 | "pygments_lexer": "ipython3",
417 | "version": "3.8.3"
418 | }
419 | },
420 | "nbformat": 4,
421 | "nbformat_minor": 4
422 | }
423 |
--------------------------------------------------------------------------------
/02-fmri_data_manipulation_in_python/data/sub-01_T1w_space-MNI152NLin2009cAsym_preproc.nii.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fMRIAnalysisCourse/fmri-analysis-course/5495887620b54bc3f6b5c83ed9fa35df149414c7/02-fmri_data_manipulation_in_python/data/sub-01_T1w_space-MNI152NLin2009cAsym_preproc.nii.gz
--------------------------------------------------------------------------------
/02-fmri_data_manipulation_in_python/data/sub-01_ses-1_task-rest_bold_space-MNI152NLin2009cAsym_preproc.nii.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fMRIAnalysisCourse/fmri-analysis-course/5495887620b54bc3f6b5c83ed9fa35df149414c7/02-fmri_data_manipulation_in_python/data/sub-01_ses-1_task-rest_bold_space-MNI152NLin2009cAsym_preproc.nii.gz
--------------------------------------------------------------------------------
/02-fmri_data_manipulation_in_python/images/brain_images.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fMRIAnalysisCourse/fmri-analysis-course/5495887620b54bc3f6b5c83ed9fa35df149414c7/02-fmri_data_manipulation_in_python/images/brain_images.png
--------------------------------------------------------------------------------
/02-fmri_data_manipulation_in_python/images/fmri.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fMRIAnalysisCourse/fmri-analysis-course/5495887620b54bc3f6b5c83ed9fa35df149414c7/02-fmri_data_manipulation_in_python/images/fmri.png
--------------------------------------------------------------------------------
/02-fmri_data_manipulation_in_python/images/mri.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fMRIAnalysisCourse/fmri-analysis-course/5495887620b54bc3f6b5c83ed9fa35df149414c7/02-fmri_data_manipulation_in_python/images/mri.png
--------------------------------------------------------------------------------
/02-fmri_data_manipulation_in_python/images/random_picture.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fMRIAnalysisCourse/fmri-analysis-course/5495887620b54bc3f6b5c83ed9fa35df149414c7/02-fmri_data_manipulation_in_python/images/random_picture.jpg
--------------------------------------------------------------------------------
/03-fmri_data_preprocessing/03-fMRIDA_slides.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fMRIAnalysisCourse/fmri-analysis-course/5495887620b54bc3f6b5c83ed9fa35df149414c7/03-fmri_data_preprocessing/03-fMRIDA_slides.pdf
--------------------------------------------------------------------------------
/03-fmri_data_preprocessing/data/harry_potter_400x400_array.npy:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fMRIAnalysisCourse/fmri-analysis-course/5495887620b54bc3f6b5c83ed9fa35df149414c7/03-fmri_data_preprocessing/data/harry_potter_400x400_array.npy
--------------------------------------------------------------------------------
/03-fmri_data_preprocessing/data/sub-01_T1w_space-MNI152NLin2009cAsym_preproc.nii.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fMRIAnalysisCourse/fmri-analysis-course/5495887620b54bc3f6b5c83ed9fa35df149414c7/03-fmri_data_preprocessing/data/sub-01_T1w_space-MNI152NLin2009cAsym_preproc.nii.gz
--------------------------------------------------------------------------------
/03-fmri_data_preprocessing/fmri_preprocessing_nipype.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "# fMRI preprocessing exercises in Nipype\n"
8 | ]
9 | },
10 | {
11 | "cell_type": "markdown",
12 | "metadata": {},
13 | "source": [
14 | "All interfaces: https://nipype.readthedocs.io/en/latest/interfaces.html"
15 | ]
16 | },
17 | {
18 | "cell_type": "code",
19 | "execution_count": 2,
20 | "metadata": {},
21 | "outputs": [],
22 | "source": [
23 | "import nipype.interfaces.fsl as fsl\n",
24 | "import nipype.interfaces.spm as spm\n",
25 | "import numpy as np\n",
26 | "import pandas as pd\n",
27 | "import matplotlib.pyplot as plt\n",
28 | "\n",
29 | "fmri = '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii'"
30 | ]
31 | },
32 | {
33 | "cell_type": "markdown",
34 | "metadata": {},
35 | "source": [
36 | "## Realign"
37 | ]
38 | },
39 | {
40 | "cell_type": "code",
41 | "execution_count": 3,
42 | "metadata": {},
43 | "outputs": [
44 | {
45 | "data": {
46 | "text/plain": [
47 | ""
48 | ]
49 | },
50 | "execution_count": 3,
51 | "metadata": {},
52 | "output_type": "execute_result"
53 | }
54 | ],
55 | "source": [
56 | "realign = spm.Realign()\n",
57 | "realign.inputs.in_files = fmri \n",
58 | "realign.inputs.register_to_mean = True\n",
59 | "realign.run() "
60 | ]
61 | },
62 | {
63 | "cell_type": "code",
64 | "execution_count": 7,
65 | "metadata": {},
66 | "outputs": [
67 | {
68 | "name": "stdout",
69 | "output_type": "stream",
70 | "text": [
71 | " 0 1 2 3 4 5\n",
72 | "0 0.000000 0.000000 0.000000 0.000000 0.000000 -1.880791e-37\n",
73 | "1 0.001749 0.031678 0.074810 -0.000678 -0.000291 -5.601287e-04\n",
74 | "2 0.028545 0.036790 0.152968 -0.001052 -0.000100 -8.803674e-04\n",
75 | "3 0.042482 0.029570 0.139154 -0.001528 0.000115 -1.009601e-03\n",
76 | "4 0.058426 -0.010219 0.159596 -0.002196 0.000515 -1.418501e-03\n"
77 | ]
78 | },
79 | {
80 | "name": "stderr",
81 | "output_type": "stream",
82 | "text": [
83 | "/home/finc/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:3: ParserWarning: Falling back to the 'python' engine because the 'c' engine does not support regex separators (separators > 1 char and different from '\\s+' are interpreted as regex); you can avoid this warning by specifying engine='python'.\n",
84 | " This is separate from the ipykernel package so we can avoid doing imports until\n"
85 | ]
86 | }
87 | ],
88 | "source": [
89 | "# Load motion parameters\n",
90 | "motion_path = '/media/finc/Elements/ds000003-00001/sub-01/func/rp_sub-01_task-rhymejudgment_bold.txt'\n",
91 | "motion = pd.read_csv(motion_path, delimiter = ' ', header=None)\n",
92 | "parameter_names = [\"x\", \"y\", \"z\", \"pitch\", \"roll\", \"yaw\"]\n",
93 | "\n",
94 | "# Print firt 5 rows of motion parameters\n",
95 | "print(motion.head())\n",
96 | "\n",
97 | "# Add column names\n",
98 | "motion.columns = parameter_names\n"
99 | ]
100 | },
101 | {
102 | "cell_type": "code",
103 | "execution_count": 10,
104 | "metadata": {},
105 | "outputs": [
106 | {
107 | "data": {
108 | "text/plain": [
109 | ""
110 | ]
111 | },
112 | "execution_count": 10,
113 | "metadata": {},
114 | "output_type": "execute_result"
115 | },
116 | {
117 | "data": {
118 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAD8CAYAAACMwORRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzsnXd4VGX2xz93kknvvZICAUIJAULvICAqKMrasGBd3HVX3aa7rvpT1967IgIiKoqioCCgSIdAQicJgfTee59yf3/czCQhCQwhyaS8n+fhmZl733vvmcnwnXPPe855JVmWEQgEAkHfQmVuAwQCgUDQ+QhxFwgEgj6IEHeBQCDogwhxFwgEgj6IEHeBQCDogwhxFwgEgj6IEHeBQCDogwhxFwgEgj6IEHeBQCDog1ia68IeHh5ycHCwuS4vEAgEvZKjR48WybLsealxZhP34OBgYmNjzXV5gUAg6JVIkpRuyjgRlhEIBII+iBB3gUAg6IMIcRcIBII+iNli7m2h0WjIysqirq7O3KZ0CzY2NgQEBKBWq81tikAg6GP0KHHPysrC0dGR4OBgJEkytzldiizLFBcXk5WVRUhIiLnNEQgEfYweFZapq6vD3d29zws7gCRJuLu795u7FIFA0L30KHEH+oWwG+hP71UgEHQvPU7cBQKBoLs4k13OgaQic5vRJQhxFwgE/ZaXfknggbWxFFfVm9uUTkeIu0Ag6Lecy6+ipkHHp/tSzW1KpyPEvRkxMTFERERQV1dHdXU1w4cP58yZM+Y2SyAQdAFlNQ0UVtZjo1ax9lBan/Pee1QqZHOe/SmO+JyKTj3nMD8nnlk4vN3948aNY9GiRfz3v/+ltraWO+64gxEjRnSqDQKBoGdwvqAKgH/MG8ILWxP4ZG8K/7km3MxWdR49VtzNxdNPP824ceOwsbHh3XffNbc5AoGgizifr4j71SN8SMitZNX+VG4c489QHyczW9Y59Fhxv5iH3ZWUlJRQVVWFRqOhrq4Oe3t7s9ghEAi6lvMFldhZWeDnbMuT14azK7GAx78/zcaHJmOh6v1pyiLmfgEPPvggzz//PEuXLuXxxx83tzkCgaCLOJ9fxSAvB1QqCTd7K55ZOIyTmWWsPZRmbtM6BSHuzVi7di2WlpbcfvvtPPHEE8TExPD777+b2yyBQNAFnC+oZJCXg/H1olF+jA9xY9WBVPR62YyWdQ5C3Jtx1113sXHjRgAsLCw4fPgws2fPNrNVAoGgsymv1ZBfUc9gb0fjNkmSuG18IJkltcSklZjRus5BiLtAIOh3JBVUAhDWzHMHmD/cBwdrS747mmUOszoVIe4CgaDfYciUCfNybLHdzsqSa0f6suV0LtX12jaP/flUDrPf2E1KYVWX23klCHEXCAT9jiNpJdioVQS42rbad9PYAGoadGw9ndtq36YT2fz16+OkFFbz2f6eXdUqxF0gEPQrfjqZw8Zj2dw+PghVGymP44JdGeztwNu/naemocl7P51VzmPfnGBcsBsLR/mx8Vg25bWa7jT9shDiLhAI+g3n8yt5/PtTRAW58sSCoW2OkSSJ/90wkuyyWt769Zxx+9u/ncPRRs2nd0fxx+mh1Gp0bIjN7C7TL5seW8QkEAgEnc0X0ekAfLh0DFaW7fu240PcuG18IJ/tT2XuMB/srCzYebaAv88djJONmhH+zkQFubJqfyqFVfV4Olhz39QQJElCr5eRweyFUMJzFwgE/YaTWeVEBDjj5WRzybFPXB2On4stt38azcNfHcPJxpK7pwQb9y+fMZD8ynpW7kvlf1sSiGvshfXcz/Hc8MGBrnoLJiPEXSAQ9AsatHoSciqICHAxabyznZotf5nG1SN8SCuu4f5poTjZNC1mf9Uwb87/bwFH/3sVliqJn07lUNOgZUNsJqezy8ksqemqt2ISQtyb8dRTT/HOO+8YXz/55JOieZhA0EdIzKukQacnIsDZ5GOc7dS8d9totj06jT/PGtRqv0ol4WJnxdQwD7acyuWX03lUN+gA2G/mFZ56bsz9lycg73TnntNnJCx4ud3d9913HzfeeCOPPPIIer2e9evXc+TIkc61QSAQmIVT2WUAjDLRczcgSdIlO0VeF+HHPzac5I0diQS62aLRyuw/X8Rt4wd02N4rpeeKuxkIDg7G3d2d48ePk5+fz+jRo3F3dze3WQKBoBM4lVmOq526zdz2K2XecG+sNqrIKa/jkTlhZJfV8ltCPjq9bLaJ1Z4r7hfxsLuS+++/nzVr1pCXl8e9995rFhsEAkHnczKrjJEBLkhS54utk42a6YM9+S0hn5vGBHA8s5TvjmYRl1Nucoy/sxEx9wtYvHgx27ZtIyYmhvnz55vbHIFA0AnUNug4X1DFqMuIt18uTywYwut/GMUAdzumDPIAYN9588Xde67nbiasrKyYNWsWLi4uWFhYmNscgUDQCcTnlqPTy4z07zpxH+TlyKDGXjUeDtaE+zqxan8qlXVa7pkSjLcJ6ZediRD3C9Dr9URHR7NhwwZzmyIQCJqx51whKgmmhXmaNP5kZhlxORWcyCxle1w+liqJyMDuC5G8uHgEb/12nk/3pRCXU84X903otmuDEPcWxMfHc91117F48WLCwsLMbY5A0K+prNOQW17HYG9HzmSX88DaWDwdrNn/+KxLxs1XH0jl2Z/iAXCwtmTuMG9uGRdoUvFSZzF6gCtr7x3Psz/F8fWRDDQ6PWqL7ouEC3FvxrBhw0hJSTG3GQJBryYht4L//HCa2gYdt40fwB+iArCzunyp+dd3p/jlTB53TBzAvvNFaHR6sstqSSuuIcTDnte3JzLC35mrR/i0OO5oeikvbEngqnAvnlk4HH8X2zYbhHUX44LdWH0gjbicim69cxATqgKBoNP4/mgW179/gMySWtQWKp7ZHMcfvziKLF/esnXJhVVsi8sj3NeJddEZZJXW8vqSUQDsPVdIalE17+9K4u/fniCjuKkStLCynoe/Ooafiy1v3BxJoJudWYUdICrIFYDYbl7dSYi7QCDoFOq1Ol7YmsDIAGd2PDadn/4ylaeuG8a+80VsOpFzWedasScFKwsVX9w3nu8fmsTqZeO4aWwAA9zs2He+kI3HslBJSoHRPzacRKeXqW3Qcf/nMZTVaPhw6RicbdWXvlA34OVkQ5C7HUdSu1fcTbpXkiTpauAdwAJYKctyqyR0SZJmAm8DaqBIluUZnWinQCDo4WyPy6ekuoG3bonEzd4KgGWTg/npZA7P/xyPl5M1NfU6vJ1sCPN2wEbdMhstpbCKj3YnM9jbkY3Hs7ht/AA8HKzxcLA2jpkW5sGPx7NJyK1kapgni0YplaHXvbcfK0sVp7LLWXFnFCO6MCumI0QFubErsQBZlrskz74tLinukiRZAB8Ac4EsIEaSpM2yLMc3G+MCfAhcLctyhiRJXl1lsEAg6BxWH0hFJUncPTn4so4rq2nA2VbdSqS+PpxBoJst0xpzvEFpe/vSjSNZ+N5+bv/0sHG7laWKT++KYsbgpsyXt387z+aTiodvqZJ4YFpoq2tPC/Pky8MZVDfU8q+rh7BolB/ltRp+jc8jubCa564fwdxh3pf1frqDccGufH8si5SiagZ6Olz6gE7AFM99PJAky3IKgCRJ64HrgfhmY24HNsqynAEgy3JBZxsqEAg6jwatnjd3nKNOq2PWEC8GuNuZdNwHu5J4bXsiPk42zBvuzTMLh2OhkkgprOJQSjH/nD+kVYw73NeJ7x+aTFmtBhdbNTlltby87Swv/3KWaYM8UKkk8ivq2Ho6l3unhHDv1GBqGnQEurW2afIgdyxUEnZqC+YP90GSJO6bGsJ9U0M65XPpKqKC3QAl7t5d4m5KzN0faL7cSFbjtuYMBlwlSdotSdJRSZLu6iwDBQJB53MktYTKei0ancwbvyaadMyuxAJe35HItDAPRgY4s/ZQOptPZgPw+cE0LFUSf4gKaPPYUYEuzBjsyahAFxaM9OWROWEk5FawIz4fgC8PZ6CTZe6aFESAqx2DvR3bPI+TjZqbxvhz37SQVmGdnsxAT3s8HKz58nAGtY1dI7saU8S9rQDRhVPflsBY4FpgPvCUJEmDW51Ikh6UJClWkqTYwsLCyza2O/j444+JjIwkMjKSkJAQZs2aZW6TBIJO57eEfKwtVdwzJZhNJ3I4k13e5riymgYeXBvLHSsP89evjjPUx4kVd0bxyR1jGerjyLs7kzieUcoX0encPC4QL0fT8sgXjfIj2N2Od3eeJyG3gq8OpzNriBfBHvaXPPbVJaN49KpW8tKjkSSJFxaP4HR2OX/5+jhanb7Lr2lKWCYLCGz2OgC4cOo7C2UStRqoliRpLzAKONd8kCzLK4AVAFFRURfNjXrlyCucLTlrgnmmM9RtKI+Pf/yiY5YvX87y5cvRaDTMnj2bv/3tb51qg0BgbmRZ5tf4fKaFefDoVYP54Xg2j31zgi/vn9CqyGdddDo74vMZPcCFMUGu/O+GEdhaKR7zo1cNZvm6o9y16ggeDtY8fnXba5K2haWFiodnh/GPDSdZ8M4+AO5ptspRX2T+cB+eXTScpzfF8er2RP5zTXiXXs8UcY8BwiRJCgGygVtRYuzN2QS8L0mSJWAFTADe6kxDu5tHHnmE2bNns3DhQnObIhB0Kgm5lWSX1fKX2YNwtlXz4dIx3P95LDd/coh1908gwFWJdTdo9aw9lM60MI82S+fnD/dmuJ8TcTkVvHpTxGWnHt442h9HG0t0ehl3eysmhPb99tp3TQqmTqNj9tCun/S9pLjLsqyVJOlhYDtKKuQqWZbjJEla3rj/Y1mWEyRJ2gacAvQo6ZJnrsSwS3nYXcmaNWtIT0/n/fffN5sNAkFn8/GeZH44lo2lhYQkwZxwRWAmD1TEe9nqIyx8bz/v3Dqa6YM92Xo6l4LKel5dEtHm+SRJ4u1bIjmSVtKqStQUVCqJ+cMv/7jezoPTB3bLdUzKc5dleSuw9YJtH1/w+jXgtc4zzTwcPXqU119/nX379qFSiRovQd/gUHIxr2w7y0BPB0orG7gq3BtPx6b88bFBrmz68xQeWneMu1cfYXqYJxklNQz0tGf6RRp1hXk7EtbO5KfAvIjeMhfw/vvvU1JSYpxIjYqKYuXKlWa2SiDoOKXVDTz2zQlC3O3Z9Ocp2Fu3/d8+1NOBH/88hXd2nmdHfB6pRdW8elOE2cv3BR1DiPsFrF692twmCASdyrM/xVFcXc/Ku9sXdgO2VhY8sWAoTywYSnmtBicbIRG9FRF3EAj6MAeSivjxRA4PzRh42SX5bVWhCnoPQtwFgl6KTi/zwa4kskpr2txfr9Xx1I9nCHK340+zBnWzdQJzI8RdIOil7E4s4LXtiXy0O7nN/WsPppNSpPRb6U3VnILOQYi7QNBLWXsoHYAtp3Np0LaseKzX6vh0XwqTB7q3aM4l6D8IcRcIeiFpRdXsOVfI6AEulNVo2J/Usp3HxmPZFFTW86eZIhzTXxHiLhD0QtZFp2OpknjvttG42KlbLIah08t8sieZiABnpgzq+1WfgrYR4m4i999/P/HxSpfjF1988ZLjly1bxnfffdfVZgn6IVqdng1Hs5g/3IcAVzuuGenLjrh8zudXEptWwj1rYkgrruGhGQNFtks/Roi7iaxcuZJhw4YBpom7QNBVnM2rpLxWw/zGkv8bIv2p1eiY+9Zelnx8iFNZZfx7wdAOtQQQ9B2EuF9AWloaQ4cO5e677yYiIoIlS5ZQU1PDzJkziY2N5YknnqC2tpbIyEiWLl0KwNq1a4mIiGDUqFHceeedxnPt3buXyZMnExoaKrz4LqKqXstLvyRQWt1gblO6jZjGhZbHBSsLL48PcWPtveN565ZRvH1LJPv+NYs/Cq+939Njy8/yXnyR+oTObflrHT4Un//855LjEhMT+eyzz5gyZQr33nsvH374oXHfyy+/zPvvv8+JEycAiIuL44UXXuDAgQN4eHhQUtK0CG5ubi779+/n7NmzLFq0iCVLlnTq+xEoPVM+2ZNCQUU9b90SaW5zuoXYtFL8XWzxdbY1bpsuMmIEFyA89zYIDAxkypQpANxxxx3s37+/3bG///47S5YswcNDWTfSzc3NuO+GG25ApVIxbNgw8vPzu9bofkpueS0APxzPZndi31/dUZZlYtJKjF67QNAePdZzN8XD7iouvJ292O3txVYzt7a2bjFO0Plkl9WitpAY4GbHkz+cYesj0y67r3hvIrOkloLKeuOanAJBewjPvQ0yMjI4dOgQAF9//TVTp05tsV+tVqPRaACYM2cO3377LcXFxQAtwjKCrie3rA5fZ1teXTKKgso6HlgbS52me9aoNAdN8XYh7oKLI8S9DcLDw/n888+JiIigpKSEhx56qMX+Bx98kIiICJYuXcrw4cN58sknmTFjBqNGjRLL8nUzueW1+DrbMDbIlTdujuRIagmPfXOiz94pxaaX4GRjSZiXg7lNEfRwemxYxpyoVCo+/rjFWiTs3r3b+PyVV17hlVdeMb6+++67ufvuu1uMX7NmTYvXVVVVnW6nAHLK6pgQonixi0b5kV5UzRu/nuN0djkRAS5mtu7ySC2q5otD6STmVzDAzQ5btSW55bXklNWSXVaHVq+npl7H1DAP0WNdcEmEuAt6LTq9TF5FHb4uTYs6L50YxFu/nePX+PxeJe4f7Erite2JWKokwn2d2B6XT51Gh5+LLX4utoT7OmFlqaKqXsstUYGXPqGg3yPE/QKCg4M5c+aKln8VdBMFlXXo9DJ+Lk0pgW72VkQFu/FrfD5/nzfEjNaZzvojGby2PZGFo/x46rpwvBxtLn2QQHAJRMxd0GvJKasDwK9ZvjfAvGHenM2rJKO47T7nl0NVvfayjzmeUUpmyaWvLcsy38Rk8OSPZ5gx2JM3bx4lhF3QaQhxF/RacsqUHPfmYRmAecOUsvsd8XlXdP7diQWMenYH+88XmXxMZZ2GpSsP8/j3p9odU1hZz95zhTyy/gSPf3+aiaFufLh0DGoL8d9R0HmIb5Og12IoYGoelgEY4G7HUB9HdsRfWeHYB7uS0Ollnt58plW/9Pb48UQONQ06DiYXt7lC0pnscqa+8jt3rTrCltO5/GPeYNbeO+GSa5sKBJeLEHdBryWnrA4Ha0ucbFoXLV070pcjqSWs2KusUpRUUElaUbXJ5z6aXkJMWilXhXuTUljN6gOplzxGlmW+OpxBoJvyY/P90exWY9bHZCBJ8NX9E4h98ioenh2Ghch8EXQBQtw7SHBwMEVFyu26g4PIOTYHOWW1+Lm0HaNePnMg10b48uLWs1z99l6uenMv934eY/K5P9mTgoudmndvi+SqcC/e2Xmeb2Iy0Onbz58/kVlGQm4Fy2cMZPJAd747lom+2fh6rY6fTuYyf7gPkwd54GpvZfqbFQguEyHuF0GWZfR6027HBd1Pbnldi+ZZzVFbqHj31tHcPmEA9Vo9Uwa5k1JYTXFVfeOxtazcl8Ifv4hl5b4Uo2jr9DKr9qfya0I+d04Mws7KkudvGMFQH0ce//40t644hFbX9nfiq8MZ2FtZcH2kP3+ICiCzpJa3fzvHmgOp5JXXsetsAeW1Gm4cE9A1H4hA0AwR6LuAtLQ0FixYwKxZszh06BCPPvoor7/+OrIsc+2117YoXhKYl5yyWkb4O7e730Il8eLikQAcSS3hQNIhTmSWMXuoF7etiCatuAZvJ2u2x+Wz5XQuI/ycOZpeSnxuBTMGe/LA9FAAfJ1t+f6hyXy0J5lXtyVyOruc0QNaNu4qqqpn08kclowNwMHakquH+/K8fQLv/p4EwPu7kvB1tsXL0ZopA8XqSIKup8eK+75vz1GU2blVnR6BDky7efAlxyUmJrJ69Wr++9//MnHiRI4ePYqrqyvz5s3jxx9/5IYbbuhUuwSXT51GR3F1A37OpqUOjvR3xkIlcSyjFH9XW9KKa3j+hhHcMWEAm0/m8OxP8SQXVBHkbs+bN49i8Wj/Fg3hJEni5qhAXt2WyKGU4lbi/mV0Bg1aPfdOCQHA1sqCXf+YSU2DluKqBh7+6hins8t5cHooliIrRtAN9FhxNydBQUFMnDiRTZs2MXPmTDw9lV7ZS5cuZe/evULczUx6cTUf7VYmSv1d2w7LXIitlQXhvo4czyjDsXECdm64N5IkcX2kP4tG+V1ycQsPB2uGeDtyKLm4xcLTdRodX0SnMWuIJ4Oa9XxxtlXjbKvG19mWTX+eypqDaSydOOBy365A0CF6rLib4mF3Ffb29oBo09sTqazTsPC9/dRp9Nw6LpBrRvqafOzoQFc2HstCo9MT7uuETzOv39RViyYNdOebmEwatHqsLBUPfPPJHIqqGrhvami7xznbqXnkqjCTbRUIrhRxf3gRJkyYwJ49eygqKkKn0/H1118zY8YMc5vVr0kvrqGiTsubt4zi5ZsisFFbmHzsmCAXqht0xKSVMmtIx1YumhjqTq1Gx8msMgB+OZ3L/22OY5ivE1MGiVi6oOfQYz33noCvry8vvfQSs2bNQpZlrrnmGq6//npzm9WvMRQGhXjYX/axowOb4uSzhnp16PoTQ92QJDiQVMTuxAI+2JVMZKALH98xVqxZKuhRCHG/gAsbh91+++3cfvvtrcalpaUZn4t2vt1HZolSlRrganfZxwa52+Fqp0anlxkd2LGOkS52VoT7OPHe70r16q3jAnn2+uFYW5p+ByEQdAciLCNoQWZJDXetOkJRYz54TyOrtAZHG8sOLaUnSRJ3Tgrm/mlXlrEye6gXKgleWDyCl24cKYRd0CMRnrugBeui09l7rpDfEwq4eVzP6xueVVpLYAe8dgN/m3vlE/V/nRPGsinBeDhYX3qwQGAmhOcuMKLV6fnhuNIP5Uhaz1wLNrO0hgAT0x+7CitLlRB2QY/HJHGXJOlqSZISJUlKkiTpiYuMGydJkk6SpCWdZ6KguziQXExBZT3OtmrjQsxdSXpxNV8cSjN5vCzLZJXWdijeLhD0Ny4p7pIkWQAfAAuAYcBtkiQNa2fcK8D2zjZS0D18fzQLZ1s1D04PJb24hoKKui693js7z/PUpjiTF9UordFQ06Azdl0UCATtY4rnPh5IkmU5RZblBmA90FY+4F+A74GCTrRP0E1U1mnYHpfHwlG+TBnkAXR+aKZOo+P7o1lodXrqtTp+bey3fiDZtMUwDKsbCc9dILg0poi7P5DZ7HVW4zYjkiT5A4uBjzvPNEF38t3RLOq1em6OCmS4nxO2agtiUjtX3DefzOHvG07yTWwmB5OKqazTGnPGTSGr1JAGKTx3geBSmJIt01ZlxoV1+W8Dj8uyrLtYIYckSQ8CDwIMGCB6bPQUdHqZ1QfSGBvkSkSAkv89JsiFI2mlnXqdo43ne29nEuNC3HC0tmTGEE8OJRej18uoLrFohaGASYi7QHBpTPHcs4DmOXEBQM4FY6KA9ZIkpQFLgA8lSWrVXUuW5RWyLEfJshxlaMbVk3jqqad45513jK+ffPJJ3n33XebMmcOYMWMYOXIkmzZtAuDVV1/l3XffBeCxxx5j9uzZAOzcuZM77rij+42/AnYm5JNRUmPsaAgQFeTG2bwKtsfldVqPndj0EvycbcirqOOnkznMHebNzCFeFFc3kJhfecnjs0prcbFTGxt/CQSC9jHFc48BwiRJCgGygVuBFiWbsiwbVUGSpDXAz7Is/3glhu1as4KC9JQrOUUrvIJCmbXswXb333fffdx444088sgj6PV61q9fz8GDB1m2bBlOTk4UFRUxceJEFi1axPTp03njjTf461//SmxsLPX19Wg0Gvbv38+0adM61e6uZtWBVPxdbJk/3Nu4bcnYADafzOGPXxxlfIgba+8df1l9XC6ktLqB5MJq/jl/CAeTiziQVMyCkb6M8HcClNBMZkkNSYVVLBjh22Z7gZ6QBikQ9BYuKe6yLGslSXoYJQvGAlgly3KcJEnLG/f3mTh7cHAw7u7uHD9+nPz8fEaPHo2bmxuPPfYYe/fuRaVSkZ2dTX5+PmPHjuXo0aNUVlZibW3NmDFjiI2NZd++fUaPvjeQX1FHdEoJ/5w/pEXVZqCbHb8+Np21h9J57ud4vj6SwT3NPPvL5ViGEpIZG+TK3GHerNqfyvTBHlhbWhDqYc9bv56jukEHwKvbElk2OZj/WzS8xTmySmsJ8xJLGgoEpmBShaosy1uBrRdsa1PUZVleduVmcVEPuyu5//77WbNmDXl5edx77718+eWXFBYWcvToUdRqNcHBwdTV1Rmfr169msmTJxMREcGuXbtITk4mPDzcLLZ3BMMk5TBfp1b7LC1U3DMlmB3xeXywK4lbxgViZ9WxoubY9FIsVRKjAlywtbLg5ZsijPvmhHux5mAa/5w/hOsj/XhhSwJfHcng7/MG42ij5tVtZ9kRn09yYVWHuzkKBP0NUaF6AYsXL2bbtm3ExMQwf/58ysvL8fLyQq1Ws2vXLtLT041jp0+fzuuvv8706dOZNm0aH3/8MZGRkb2qO2B+Yy67t1PbKxpJksQ/5w+hqKqBNQfTjNtf3JrAn788ZnI8/mh6qZKFY9U6tPOP+UOI/vcc/jxrEAGudtw3NYQGrZ7fzxaQkFvBh7uTcbVTc/ekYJZOCLr8NykQ9ENEb5kLsLKyYtasWbi4uGBhYcHSpUtZuHAhUVFRREZGMnToUOPYadOm8cILLzBp0iTs7e2xsbHpdfH23HJF3H0vslzd2CA3Zg/14pM9KdwzOQS9LPPFoXRqNTpmH/PiprEXX/C5QavnZGZZu8JsbWmBtUOT6I8Z4IqXozXbzuQRm1aKlaWKT++KwsXOqgPvUCDonwhxvwC9Xk90dDQbNmwAwMPDg0OHDrU5ds6cOWg0GuPrc+fOdYuNnUl+RR1Wlipc7C6egfLH6aHcsiKan07mYK1WUavR4etsw/+2xBPsYc/+80WMC3Fl8kClAOpMdjnBHvY4WFuy5XQO9Vo944JdL3oNAyqVxPzhPmw4momlSsV1Eb5C2AWCy0SIezPi4+O57rrrWLx4MWFh/WNJtNzyOnydbS4ZShof4sZgbwfWRqfh5WiDr7MNq+8Zx3Xv7uemjw4C4Ghtyea/TOVEZimPfXMV8dp7AAAgAElEQVSSgZ72/G3uEP698TRRQa7MCfe+6DWas2CkD19EpwN6EYoRCDqAEPdmDBs2jJSUzk2/7Onkl9e1G29vjiRJ3DkxiKc2xSFJFTw4LZShPk68fWskeeV1RAW7sWz1Ee5ZfYTsslpGBTiTWVrLn786hp+zDR/dMda45qgpjA92w93eCk9Ha8YM6NjCGgJBf6bHibssy71qQvJK6AkLcOdW1DJmgGnhksVjAnj5l7NUN+hYFOkHwHURfsb9b90SyT2rYxjoac/aeydQUafh7d/Oc9/UEDwdL69FrqWFipV3R+FoY9lvvg8CQWfSo8TdxsaG4uJi3N3d+/x/aFmWKS4uxsbm0l5zV9qQX16PjwmeO4CDtSX3TAkhJq2kzdTJWUO82LB8EsHu9jjbqXG2U/PGzaM6bN9oE390BAJBa3qUuAcEBJCVlUVhYaG5TekWbGxsCAi4eKZJV1JS3UCDTo/PRTJlLuQf84dcdP+4YLcrNUsgEHQCPUrc1Wo1ISEdr4IUXB55jTnupnruAoGg9yCKmPoxeY057pfjuQsEgt6BEPd+jNFzF+IuEPQ5hLj3Y/LK61BJ4CkWexYI+hxC3PsxeeV1eDpat+gGKRAI+gbif3U/Jq+iDh9n0R9dIOiLCHHvx+SV1+HjJEIyAkFfRIh7PyavvA5f4bkLBH0SIe79lOKqeirrtfi7CHEXCPoiQtz7KScyywCICHA2syXmoayujBpNjbnNEAi6DCHu/ZQTmWVYqCRG9lNxX/7bcl6NedXcZggEXUaPaj8g6D5OZJYx2Nuxw2ui9nYyKzNRScK3EfRdxLe7H6LXy5zILCMysH/2SdfpdVQ2VJJVmWVuUwSCLkOIez8kpaiayjoto/upuFc0VCAjU1pfSlVDlbnNEQi6BCHu/RDDZGpkP13hqKy+zPg8uyrbjJYIBF2HEPd+yInMUhysLRno6WBuU8xCeX258bkIzQj6KkLc+yEnMsuICHDGQtW3V7tqj+aee1aVEHdB30SIez8jq7SGuJwKJoS4m9sUs9FC3IXnLuhqGqpBU9vtlxXi3s/4JiYTgJvG+pvZEvNhCMsEOgYKz13Q9Xx9G2z6c7dftn8mOfdTNDo938RkMnOwJwGuduY2x2yU1ZdhKVky1G0o50vPm9scQV8n7zSoLEGWQZKgtgxsuz6ZQXju/YidCQUUVNZz+4SgFtv3Ze3rV6X4ZfVlOFk7EeAQQHZVNnpZb26TBH2V+kqoLYHqAqjIBr0e3h0Nvz7d5ZcW4t6P+PpIBj5ONswa4mncllmRyZ92/omfU342o2XdS3l9OS7WLgQ4BqDRayioKTDuK6gpQJZlM1on6FOUpjc9zzkOeScVsfce0eWXFuLehyiraeBAUlGb+yrrNBxIKuL60X4tVl46V3YOUMrx+wtl9WWKuDsEAE2TqjlVOcz/bj4fn/zYnOYJejsH34P1S5XnZRlN27OPQcpu5XnIjC43Q4h7L0KWZX6Lz6deq2tz/783nmbpysPsiMtrte9AUhFavcysIV4ttieXJQOKsF0J7x9/nx1pO67oHN1FWX0ZztbOBDg2invjpOqerD1oZS0rTq0gsSTRnCYKejNJOyHxF9DUQVmj5+4UoHjuKbvBaxg4ene5GULcexEHkoq5f20sq/antdqXXFjFtrg81BYS//r+FLnlLVOvdicW4mhtydgg15bHNYp7bnXuFdm2LmEdPyb9aHydVp6GRq+5onN2FeV1SljG194XlaQio0LxrvZm7cXX3hcnayee3P8k/3fw/7h9y+0U1bZ9NyQQtElpGsg6KEpUwjJqexg0W/HcM6IhdFa3mCHEvRex8ZjiYa6LTkenl9HrZRLzKpFlmRV7UrCyUPHVAxNp0Op5+KvjVNVrAcXj351YyNQwD9QXLIbdGZ57ZUMl1ZpqMioVkaxoqODGzTfy4YkPO3zOrkKWZWNYRm2hZpTnKLambqWqoYqYvBjmDJjDkxOeJLE0kc3JmzlddJozRWfMbbagt6DTQnljiDM/XgnLuAaB3xioLwdtHYTO7BZThLj3ELKrssmsaD/uXdOgZVtcHgPc7Mguq2XX2QJe2XaW+W/vZcE7+9h4PIubowIZF+zGa0tGcSKzjFtXHKKwsp7E/EryKuqY2TiReiz/GAU1Bej0OlLLU7GULCmuK6ZeV98h2w1ef3ZlNlq9lpSyFDR6Dd+c/YZqTXWHztlV1GpradA34Gyt9LFfNnwZ2VXZPB/9PPW6eqYFTGNe8Dw237CZLYu3AKL/jOAyqMgGveJUURCnhGVcBoD/GGWbyhKCJneLKULcewjPHHiGv+35W7v7t8flUdOg4+UbR+LtZM0zm+P4ZG8KM4c6o9XLWKgkFo614auEr7hquBuf3jWWpIIqFryzl2e2HABVDTOHeFHZUMn9O+7nlSOvkFWVRYO+gTHeyhcvt6pjoZm8aiXGr5W15FTlGO8GKjWV/HD+hw6ds7PRy3o0eo2xgMnFWskznhk4k1DnULambsXW0pYo7ygAQpxD8LH3wdrCusOfi6AfYoixSyrIj1M8d5cgJc5uYQ0B48G6e3o6mSTukiRdLUlSoiRJSZIkPdHG/qWSJJ1q/HdQkqRRnW9q3ya1IpWzJWcpqSsBlMwXja4p/3rjsWz8XWyZGOrO7eODyC6rJSwkhVMWf+Wz+0I4/J+r2JL5BS8deYlbf76VavURbp4bh8r/XeIt/4X7wC/wdrJhX9Y+NHoNe7L2cKrwFABT/acCkFPdsdCMQdwB0ivSSS5PxsbChkjPSNYlrENr8GTMyIuHX+SPv/7R2HrAIO4qScWy4csAmOQ7CSsLK+MxkiTha+/b4c+lX1FdBEWiIIzSNOVxwCTIjIH6CiUsY6GG+S/AzMe7zZRLirskSRbAB8ACYBhwmyRJwy4YlgrMkGU5AngeWNHZhvZl6rR1xlzrmLwYKuo0zH5vHTd8/AuVdRp2JuRzIKmIxaP9Uakklk0O5sFpITh470Gj17A/Zx/OtmqO5B4hzDWMsvoy/rP/P2xK+4KBng6M9ZhGg2UqCcUJ/JbxG2qVmnpdPavOrAJgiv8UQPHcqzXVfHTyIzQ60ydDm4t7RmUGKWUphDiHGEMee7P2duKn1THOl54nNi/WOC9gCMsAXBd6HTMDZ3LLkFtaHefn4HfFmUT9gq3/gLU3mNsK81OaBpIFhM2Fhkplm8sA5XH8A90WbwfT2g+MB5JkWU4BkCRpPXA9EG8YIMvywWbjo4GAzjSyr9NcPPZnRXMs0YMGr/dJqRzBzZ84kVxQxQh/Zx6cEQqAs52auWOr+Xp7IhISh3IOMTtwNllVWTwx/gkWDlxIZkUmoS6h2FraUtFQwexvZ/Nlwpfsz97PDYNuYH/2fpLKkvC19yXEOQSVpCKnOoctKVv48MSHjPUay3jf8SbZn1edh4+9D1UNVaRXpJNSnsIY7zHMCJyBvdqeA9kHmD1gNrIsk1edh6+Db5d8jhejqLYIGZmdGTuBJs8dQG2h5r3Z77V5nK+9L2dLznaLjb0WvQ6Sd0FdGdSUgJ2buS3qHmQZGqrA2rFpW2k6uASCT0TTNpeg1sd2A6aEZfyB5jN9WY3b2uM+4Je2dkiS9KAkSbGSJMUWFhaabmUfx1BApNc6sC15P+viNiCpNHh65pCYV8FgHwc+uXMEDtYWxmM+j/scNxs3Fg1cRExeDAdzlN/XcT7jcLJyYrjHcGwtbQFwsnJifvB8NiVvolZby9yguVwdfDUAoS6hqFVqvOy8yK3KNZ6nuK7YZPvzavLwtfcl0DGQsyVnya3OZaDzQCxVlkR5R3E47zAAOzN2Mu/7eRwvOH7lH9plYng/hrsIFxvTenv4O/hTUldCrbb7u/r1GvJOKcIOUGjGH8LSdKW8v6uQZTi7BQx3tee2wWuDoCS1mQ1p4BoM3sObthk8927GFHFvq+l3m/XZkiTNQhH3NgNLsiyvkGU5SpblKE9Pz7aG9EsSipQvh33DBOrIQ3LegwoVpQ35rH8onI/uGsz1P8/jps03seHcBl46/BJ7svZwy5BbmBk4kxptDWvi1uBi7cIgl0FtXuMPg/8AKEIf5RPF1SGKuA90HgiAn70fmZWZHM5VhNgQ+zeFvOo8fOx8CHIK4mThSUD50QCY4DuB9Ip08qrz2JS8CYCvEr5q8zy/pP7CRyc/Mvm6plKnrTNm7Rgena2cL3aIEcNdhphUvQgpe5qeF8S3P64rqSqA98ZC9Addd43zO2D97ZDwk/I6I1pJbTzzfdOY0jTFU3fwBls3sHHuliZhbWGKuGcBgc1eBwCtgpCSJEUAK4HrZVk23e0TEFeQiqy34pGJigBLllXcNfwuAMrlZGIKDlCrraVWW8tzh57ju3PfMS9oHncMu4PxvuNRSSrSKtIY5zMOldT2n3SU5ygiPCNYOHAhapWacLdw/j7270bR93Xw5VTRKao0ypqixbWm/Qn1sp786nx87H0Y4DTA2IQr1LlJ3AF+Tf+V/dn7sbW05bf039osDNp4fiOfnvq0wymZ7WHw2v0dlBtOe7U9agu1Scf62fsBlzfZ/MzBZ/jm7DeXaWUvJnUPeAwBaycoMJPnnhUDeg0cXaN42F1BXGPmV95p5bGwsYr5zEblsb4KaooUz12SwC8S3MO6xhYTMEXcY4AwSZJCJEmyAm4FNjcfIEnSAGAjcKcsy+c638y+TXpFJvoGN+aHjcHRyhEfex/+FPknrFRWnCw4ya6MXfjZ+7Fl8RbWX7uevbfu5Y2Zb+Bk5YSTlRMj3JUmRON8xrV7DUmSWLdgHU+Mf8L4etmIZQQ7BwOKiOllPSpJhYPawWTPvaSuhAZ9Az72iucOYKmyJNBR8QfCXMJws3Hjo5MfodVreWbSM2hlLd+d+67VubIqs9DoNcQXd673Z/ihMoSimsfbL4WfQ6O4mzipqtFr2Jy0mW/PfXuZVvYyChJgy9+hMg/SD8HAWeA5xHxhmexjymNxEmQe6fzza+vh7FblueHupDABLKyUfPaCs01pkK7ByuOi9+GmlZ1vi4lcUtxlWdYCDwPbgQTgW1mW4yRJWi5J0vLGYU8D7sCHkiSdkCQptsss7oMU1OZgJXvi4WDL05Oe5tnJz2Jractwj+FE50ZzKPcQMwNnYqGyYLjHcOzV9i2On+g3EYDxPhefAJWk9pfVM4QfRniMwN/B32TPPb86H0Dx3B2V2GKwUzCWKkvjNSf4TKCyoZJAx0CuCbmGyX6T+frs1/wv+n+si18HgFavNRZDHcs/ZtK1TcVwlzAzcCY2FjYtMmUuhaetJ5aSpcninlmRiVbWcq70nMmfYYcoTTfL6j5GYldBzEr4aDJoa5VGWJ5DFdE3BznHwH2QUup//IvOP3/KbqXC1MFbyV9vqFH+BqPvVHLa4zY2pUEaxN3ZH9xCOt8WEzEpz12W5a2yLA+WZXmgLMsvNG77WJbljxuf3y/Lsqssy5GN/6K60ui+hCzL1OgLcLNWxPXq4KuZ7KdUsEV6RpJYmki9rp5ZA9rvR3HXsLt4bfprDHQZ2GE7DOGHyX6TcbNxM9lzN6RBNvfcDSEZA4bQzNXBVyNJEveNuA9rC2t+TvmZV2Jeoai2iLzqPHSy0hCtsydcDWEZH3sfrgq6ipEeI00+1kJlgbe9t8lhmZTyFOPzI3ld4EGC0pDqo8kQ3cnzE4c+aO311pbCt3fB9w/ArpcUDxYgKxbcQpVMGckCgqeAV7gSlqjupl481UXKZyHLiuceNAWGL1bCJw2dXBkd9yNYO0PUvUp7gexYQIbQGRA8FY6vg2NrlbEGcTczokLVTPx8KosnN8WQW1WALGkIcmqdPTrKU6kFc1Q7MtZ7bLvncrZ2Nk6QdpQRHiMY6z2Wa0Ouxd3W/ZLZMq8ceYU//vpHY2m+j70PLtYujPcZz4zAlu1MZw+YzczAmcb4/njf8exYsoO3Zr4FKP1tDJ0ZAx0DOV5wvFMX0DB40G42brw07SX+O/G/l3W8v4O/yROqhupce7W9cXK60ymIV1LwipM775zaBtjxX4i+oB9Q7GqI3wTpB2HPy03dDvNOQ/gieHA33PWjMnHoObTRvg5677IMdRWmj/90Fvz8KJSkKNk6/mNgzJ3KZ/PNHcoka2egqYPELTD0GvAbrWwzxNk9h8K4+5XVlc5tU4Td1rXdU3UnfX6ZvTdj38TfwZ9bhrYuUDEXCbkV/Gvna0hOh6nc9ScAhnoEtxo3yksR96kBU1GrTJsA7CjO1s6suXoNgEme+56sPWRWZpJUloS1hTWu1q5IksRn8z9rNdbVxrXNPPIwV2WyyXAOgIUDF/LhiQ9JLks27j9TdAZvO2887TqWYVVcW4yTlVOL6tPLwdfel0M5h0wam1Kegq+9L0PdhhKdG02ttpaPTnzE4rDFhDi3cYtekgKHPoSrX1KqGI+vU8T09m+VSbm2MEzoVXRiz5vyTJD1kHuqaZtOq4ReQmbAHRvhtVBI+hWc/JXJy4AoJexgCD14hSuPhWchZNrl25CwGX5YDo/FXTpXvqZEKe0vzwaPxklL/7HgMxKuewu2/Rs+GA+e4Ure+cJ3QG17+TYB7HsD6sph9B1NXnn8JlCplbsXzyEw7HrlR0Bl0f7frZvpc577wZyDbE1RJj5qtbV8kfAF7xx7x+wNrAoq61i5L4XNJ3N4+KtjqO3TUVlWs7NQubUe49c6hdHD1oOnJj7F8lHLW+3rStxt3anV1ra79F5VQxWZlZmoVWoKagrwsfe5aDy/3evYuONi7UJSWRJZlVlYSpYsCF4ANIVmThee5s6td/Lu8Xc7/H6K64pxt3Xv8PF+Dn4U1ha2W7W7O3M3W1KUJmOp5amEuoQywXcC2VXZPLDjAVbHrWbl6XYm1uI3QcynkN/YefLsFji/gzPJv3Ag+0DTuNjVkNC4WpZR3K+wcvbQB3DkU+W5IVe7JLnJez77s/IDMmE5WFgqrWqTdiqZKQD+F0RfHX2V0EVHPffMI6CpUX7wLkVxkvIo62D3K2Bpqwg5KKGTB3bBwNmga4BT3zQtknG5FCTA/rcg4hYl/OLkr7zH2hIlxt8860pt0/K1men14q6X9Ubh1uq1PH3gaZ6Lfg6NTsOpwlNo9VqzN7Aqr9Ww9LNdvLzvK/769TFSi6qwtsvDxsIOlWUVsiwxcUDb+ek3D7m5VQy7q3GzUbym9kIz50qVhKh/jfsXtpa2+Np3rOJUkiQGugwkqTSJrKos/Bz8CHIKwsPWg+1p28moyOCfe/+JVtZeUZVocW0x7jYdF/dAx0BkZKJzo9vc/1rMa/wv+n/UamsVcXcOZaKvMsl9svAkAQ4BykIgjT12UspSmpbyMyzDZkghLEjgsI019xx8kv/s/0/TuF0vwM5nleedJe4xK+FIY6eQ0maFOIYfmsOfKDnbg+crr8PmQmWuMmHp5A9OF/zdJQm8hkLuyY7ZY+hNU27CqmBFjUl5AyaBrh58I5QfIAPew2DJKli2BSxtILUDLTBkGX5+TKlAnf+isk2SmgqUvIZe/jm7kV4v7uvi1zF3w1xyqnLYnbmb/Jp8qjXVHC84Tmx+LCpJRbhbOOsS1hFXHMfDOx8mJi+m2+wrrW7g/rUxZKtXY+v/DR/d68Nn9w2kVlfNI2P+gq3khRVuOFp38JaxCzCKezvZHgahnT1gNivmruAfUf/o8LUGuQwiqSyJzMpMAhwDkCSJm4fczJG8I1z7w7XkVecxwWcCyWXJHV7840o993nB8whxDuH56Odb3QGmlaeRUZlBlaaKDYkbqNPVMdB5IKHOocwPns8T45/g71F/p7y+nKP5R/k1/Veu33R902SrIX2uMAEaajhZk8PD3p7oZB0ldSVKz6HqYqguVAStJEURX5Va6V1yOTHq5ug0SlijOFkJJ5SkKhOjoIRmChMh46DSD0XVuH3QVcpjQbwSAmmLwVcrk415HeiBbxDsMlPE/bzyGVzzuvL6wrsIA2obCJzQVGh1fB2svMq0XPjaUsg4BJP+DPYeTdu9G1trGe4Ueii9XtyTypKo1FTy4uEX+ersV3jbeaNWqdmbtZfYvFiGug3ljxHKxN+tP9/Knqw9rD+7vsvtqtPoePKH00x8aScnSn7HwkG5VS3QxKFTK7HSUZ6j+HbRKlYteKfL7bkcDELYXtw9sTQRNxs3PG09ifSKZIjbkA5fK8wljCpNFedKzhnXNH1o1ENsumETtw+9nWcnP8sNYTeg0WtIL09vdXx+dT7Lf1t+0dWSrtRzt7aw5rnJz5FXncdbR99qsc/QzsBebc9nZ5T5hlCXUCRJ4vUZr7M0fCmT/SZjbWHNr+m/8t4xZe4hsShOOUFzz734PN862mONxGtFSjl/QklCy9zxI58qE4bBSidPo/deVXh5xTtlGUrfcVnX9KPhOQTsvZR2Aqe/U1L8Rt7cdIyjT1PPlIB2xHTsMiVEctiEdWjLMuGtEUroo/mSdOVZlz62OEmJd/uMUOYDpj7a/tiQ6UouelUB7H1dCStVm9D+pLKxIZ7bBXfOBs/ds+Pf++6g14t7XnUeKknFnqw9xOTFcNvQ24jyjuL3zN85VXiKKO8oZgbOZJLvJBYNXMRVA64iOjcanb7tdUg7i/VHMvjycAbTR1bhEbSVSM9Igp2COZx7mISSBCwkC8Jcwwh2CSLSu2d1SDYIYXvifrbkLENch3Qozn4hg1yVcJRW1hrXNAUlnfLfE/7N9YOuZ7DrYED5UQFaxL43JW/iQPYBjuS2nXZYr6unSlN1RZ47QKRXJEvDl/JN4jfG3H6Avdl7Geg8kOtCrzN+XheG0ezUdkzym8SGcxtIrVDCH2kZ+5Q0QkMIoiABCs6SplYz1N6fSVUVSEhKQVdhYwzb1lWJvYPiIYMSEy9JgTeGQPLvpr+h5v1QChKUsIxriBLeyD0JZ76D4Gmt1/oMm6s8tucp27nBqFvg9AbljuNiZB1R3n/iVuU9GDKk2hP3qsKmDJiic00TqYPmgINX28dAUyfGnc82hZ8MOekXo7IxQ8rxgvDToKuUz8bwA9tD6f3iXpPHjIAZDHEdgrWFNTeF3cS0gGlkVmbSoG8gyjsKC5UFK+at4IWpLzA3aC4VDRUklCRQo6nhzdg3L6uPiino9DKfHUzAa/Aaouuew8pCzXNTnmOC7wSO5h8lriiOEOcQbCxtOvW6ncXFwjIavYak0iSGunVOvLF5L5zm4t6cEKcQLFWWnCs9R1FtEdO/mW6scP01/VcAo2ieKTrDo7seNf4AGN5DK8+98FyTZ9YWtWWtNt0wSGlpa2iuVq2p5mj+UaYHTDdWv7rbuLdZJDVnwBz0sp4R1p5E1NWTVpmuiIeuQVk8uTwDOSuWVCs1wX4TsFOpCbGwJ6E4QQmRWDspXrS2VlnNZ9Ac5cQVOZB1VPHADbF4UzBOWkpKmKc0Tcl68YlQXpekwMglrY+LuhcmPQwB7VdDM2G50nMldpVpNmREN4VkHP2gPKPt8T8+BF8uUbJ4SlKbxP1S+EaClaMSkjFkTBnEvaqg6e7pQgzfD0eflttdBsCyn1uGanogvVrcDS1k/R38eX/O+6yctxIXGxemB0wHQEIyrjJkwFBQczDnIF8mfMnquNX8lPxTp9q1Iy6PPF00tRZneWzsY/xy4y+EOIcwwXcCNdoaDuUeuqJQRldjZWGFo9qRkroSksuSeevoW8aJvbTyNBr0DZ1mv7O1M162itdlCMtciNpCTahzKOdKz7EtdRtVmipWnFpBSnmKMf6fWq6I+/a07ezM2Mm5MkUsDOLuYXvBf8T1t8P2/7RtVN5peDVUyQxpxmDXwXjYehjTIqNzotHqtUwLmMYY7zF42XkZ70QuZFbgLCI9I3lc7UeIRkNqfWmTqAxRfhiKE3+iUqUixH0IBE0mvK6W+JJ4KEjgE29/Nrs05k97Dm1qI1uRA/mNom6KN2qgJBmsHJQVgpJ3KWLsFgK+jXeRKjWEL2x9nHOAsuiE5UXSSr3CYfAC2Pd6y9TKCyk2iPvhptBT6Mz2Pffi88pdxfntSiqmqX1bLCyVIitQctKh6bP66VFYfY1yF3UhRs/dp/W+XkCvFveKhgpqtbX42PvgY+9DpFckAEFOQQQ5BTHYdXArL8rd1p1wt3B+z/idz+M/B2B/9n5A8fru3HonlYYm+yby/vH3+fe+f/Pm0TcprCnk030pOLjFEeQUxD3D78FObQfAOG/F29HLesLdevZkjKGQadWZVaw6s8rYGsAgpp3luQPGytr2PHeAIa5DOFd6ji0pW3BQO5Bbncu/9/0bUETXUBlqsO9ciSLuhlh8i7CMXq/Ed9trcnXqW8UTbt7tDyW7Z7LfZA7lHkKn17E9bTuOakcivSJRSSo+nPMh/53QdoGUs7UzX1zzBZGleQRrtBShpar4HOmWlvzPshoNkNqg3EGGOIXAkGsIryiioKaA2LJzfGBRzaf5BxRB9o1UxNXeSwnL5DfG78va8UDboiRFiSV7D2v6cTCEZUAJPVxJMc6i95SuiN/coUxMtmcDklLWH78JnAPBc7Ayvr6q5Vi9vml+YfdLyqPHYNPtCZunLHM3Yblyd2AQ99wTUJGl/MBdSGUe2Lh0PD/ezPRqcW9e+n4hr01/jRemvtDmcRP9JhJXHEd5fTkDHUdxNP8oNZoaPo/7nBOFJy5Z/i7LstGTLa8v55NTn7Anaw9r49Zy2w9/53h2FjrrJOYFzWsRl3axcTGKYk/23EEJzeRX57MrQ/nSp1cowpFYkoi1hbWx1UBnMNZ7LEFOQThaObY7ZrDrYApqCjhTfIblo5YzyGUQ8cXxjPQYyWS/yaSXp6PT60gsUeLyhnRNQzpni7BMTbESDilJad3/W5Yh/kfleeIvSgigGZP9JlNWX8bPKT+zLW0bSwYvMRaYDamvI7iu7doA47kLEwnRKtdMy47mWydHvsk7wAl7R1LVynlCnEMgfCHDGhoAeNpBheN5/UsAACAASURBVAykVaSTe8vnMOdp5XxOvorgGTJT2gsvtEVxsiLuXs2cDLcQReCj7oNp7a/naxIOnnDz54p9v/1f22NKUpTyfVAycDwGKwIPrb33miLlbwZN4SePtu+S2mTsMnjsjLLknWuwIu61pU2FYG31o6nMbR1v70X0anHPr2lqWnUh4e7h7QqooXeLrXYYp89EodFr2Jmxk98zlAkpw9qibSHLMreuiOav608ATSLyyrRX8dQuIl97nIiI/cjomRc8r9XxE3wmICEx1LVn58i627pzsvAklRrlLiajQomDni87T6hzqLExWGdw/8j72bho40XHGCZVVZKKBSELuHfEvQDMDZpLiHMIDfoGThSeoLRe8RINk6/G1gO2zSoeKxs9QG1t0623gZzjSiZJ2DylUCWzZW77JL9JSEg8H/089mp7ox3IMqy/Q0mzyzqqpBqe/g5S9zVlsVRkQ30FIX5Kg7fUrIMctFcWSz7i6kOa2hIbSY23vTc4+TGksQdOplrNRGfl/R/SVzRNcjr5K0JXlac0zCrPvPhiFSe+hs1/UX6wytLBfSB4NWZ+qCzBeYCSx33dmxBo2ipcFyVwPIz8g1Kqr6lTtpWmK59NXQVUFyjVr06Na/9cKO56XdNxBrEfrBS5YedxeXcWKoumSVeDuOc3dnf0HKoUj104AVyZ12tDMtDLxd3ouduZ/gfILqtl53F7qJhITe412OkHocKK12Nfp0HfgJOVE6eL2p+Y2h6Xx+HUEn46mUNyYZUxDFBb5c3586Oxs3AhpW43AxwHMMS19Y/LAxEPsGLeCpNXAjIXbjZuyMjYWdphY2FDeqXiFSaVJhnbAnQWFiqLS7YGGOymiNsEnwl42XlxTcg1PDv5WW4ZcouxrP+XVGUBsIHOA0ksSUSWZfJr8nFUO2KNRZMX3rz4x1DpaCD+R0Xorn1TuY0/u6XFbjcbN8Ldw6nX1XPX8Lua/o7FycpEoK5emfT7eCp8fx98fh18NEXJSGmMKweOuBULWSZGX0WSpXJnd8TGmlS1mmAHf2NPfqdhiwnUaLCUZZ6d8B+8bL2Mk7nKAD9F2AHCrlI82wt/rAzoNEq2yLG1SgdDvbal5+4c2LIIqLOI+IOySPT57cpn8N4YpeGZIWvFfSAMUAq+/r+9946vo7zy/9/PzC3qvdiSi2S5yBVbGFzAJhgMNsVsIIABEwIkQNgvaXyTwJJsfqRCym5IsiRfliTLhhZaEjBtafYabJqNG+5FlmVZ3VaXbpnn98eZuVfdcpFVmPfLet17Z+beOZ5758yZ85znc8iYIDl9kGP51v3wsL3OibDn3iHjAceTkulMap78Bsps9dGLfiI5/C3PdtyuodyN3AeK8qZyPMrTdbCsB0pqmrno31bzxzUlzE+5nX/cfhUXFOaiW8ZT21rLpNRJXJR3EVuqt3QrXBUKW/zi9Z2MTY/D5zF4dM1+dtTuICM2gzU72ojxxHDnzNsBmfjSXalgsj85MntxMOOkMc4bdR6jk0ZzoP4A9YF6KlsqT0p9slcayqWKpQd7vjT1S9w5U7R4TMPkyglXEueNkxw10cqZywouoz5QT3lTOWsOrWFW9ix4/hb4i93Aub0mS+1eiXafuxWevRk2/VWiyZTRolG+Y2U08m6uhe0vcdHYi8iOy+bGyTdGP8cpQ7z+Gbk4BFvg2sdF07u+FN7+cSTH7x1/AblhzSvxMhZzTs45bLYa2emPIb/93ebky1lR18Bd9S3kjChibs7cjmW8STnRbQsvk8ee8u7bXxLHrwx44weyLG2cOHVfQv9J0+YtlLGBLc/Cm/fLRWXnK1HRs7QCmWUK4twTR8jxq9krF6Ij+0X9sc7+zrKmwuIfwpzbT9ym1DxAw87XJKc+/gLIKYL1f45+15YlF84hHLkPaeGw8qZyMuMyMZ0ZdL2gteaeFzajlOLNb53HuEy5HT5nfAYvvzWemNhtUupm+WkIPMfaAzsww9lsPVTHG9sqqGlqIycllr1VTfxhxZms3lXFCxtKKZy9nUmphbz6wWEuKMzm+skX0hSqjyggDlWccsgLx15IcH+QPUf3RBQPe2rld9xs+qtMq79rvWhy/M/3RLr1a1313JVS3D377m4/JiUmhVR/KrWttYxJHENRllRIPbvrWcqbyvna2GWw5nvgjbMH5g7LbEzTK06kYqvUdcekiLrgxfZYTeGlovRXsVUEqdb8Ctb9jlvu3sVNU2/qmJra947kq8dfAF/7BDz+qM5IzR5Y+1tx+HEZEJ9BnieeElrIMGO4YfINvFf2HlWmIr/9hTN1LNcnFcpnKcW8nHm8uPdFttZsxaM8jEvIIhYkusyxq8KOFMPY+V0P0oePSIXNpKXRCUZpBWAYcN53u07UOVWYHph2lexfh2Uw8+CH0UlQaflyIW09Kk7eMOWitfHJ6EBs1Q65QJp+KT+cd+fJ2ZRqjxeVrIUx8yUVdfZt8Pc75HssWCTjMlbIjdwHivLm8m7z7d3x7MelrN1bwz1LCyOOHeDcCRkE62YyM+lygkdn84NnJcf8paee47r/fJ+fvLKd+tYgY9Pj2Vxax9xxabxV8yuak56gLRxgf90+Eo0xVDcGuGzGSLymlztn3nnCCoaDhQWjFnDNxGtYOGohY5LGUNpQGhmsPGWRe/EaiTSdVELtfonUehDo6g0nNTMpbVIkP//49sfxGT7O32GXNAabJd9eXyYRWVqBOPfiNbL+q2vhX8rEGYGd31XR1Mzu/wFA1e4Vx/7xn0XrPNAsufUCW3Pfn9BRQGr2zTJBZ+9bkTRIXpw4jflJEzgz+0w8Si4UTmesCMufFI0UiNzx3fTqTSx/eTmP1dk54+yp4iBR3Q+qHt4s0+jP/ood8SqJ1p0c9Dlfg8mX9e1Anwgzro469n96WJ5/8oQ4Tl+8yAUv/Hb0mCWPlvEOf5K8rtohkXtSzqlRXHSUHbUVnW067Uq5w3jfvvAN8TJIGAaRu9Niridag2EeXrWXP6zey9l5aVx/dsdO5COTYylIz6S6ZCk/31BM0ahJ7DNimT2thVsL55CfGU9uipRCOVUy5/71bpqCTVxYNIkPmsO8tclDnM/kc5N6mSU3xMhJyOH7874PSGlpSIdYc2jNSQmFEWiGTU/CmTdLhObku+sOycSQ+jI54eoOHnckmZ+cz4bKDRSmFZLgSyA3IZdDjYe4ILOIhA//DuMXi1xt9W5JyyTlyInr9MFMGyedc9qTkCn54B0rRRXQmWhTs1ei463Py4WhqUZ0XgoWdW9cap6UFu55IzJlPS91AjTvY96Is4nzxjEtYxobqzZ2lQVuN0M0IzaDL075InVtdawtW8uuNnsAMHsaAaXwJY7smpZprYN//LM481krZBByyhUSmZ4Gadq6tjr8WVOImXUjFF7Kp4lpFMQkE9NSK801usPJu8++RcTNqnbJbyO551LZ4yIhW8TEQq1RnRiPX/a3+gGo3tNuApMbuZ92tNaRxsy98cU/fchv3trN0mkjeHhFEYbR9Qe9YEIm2w/X4zEVv1lexMys6TSrfZw7ISPi2EFSA1UtVTQEGrC0xUElGjVHjmZyweRsYn3HTg8NRZz2ee+Xvc/4lPE9NuGOEGqDf58u3Wvas/V56btZLPMKIiqA9YdksNMZHDyeyTg2jlN0Sk2d6H1J3VGpt176YHSfDYfFuaePl7uFA2tlOnl3TLpEKlI+ciR7leTpQS4M3jg48K7ksnv6DIhOnrEbWiyc/c9cljSRz824GYBzcs8hxoyJHOue+PZZ3+bH5/6YqRlT2d9SCdO+wOGChcx7ch7vpmZ3jNzbGuGp66TM8Or/ilaXXPWo6LGcBla8soKffPhTuOJ3lOWewfWvfZH7R9kXsJ7y/M4ErZk3yMBp1Q77gpzb/fbHi1LR6D27XXA4+xaZwfrhI8Mich+yzt1pzJwdn93jNnurGvlwfy3fWTKJh5bPIiPB3+12n5skKZR/vWwKI5NjmZE5g121u6hrq+uy7Z6jEm2OjB9JWVMZsZ5YHll+Md+/bHBPSjoZnFRBwAr0LSXTcFiqHUo6SeQeslvrlm+WfGqzLfZVVyrvcQaxT8C5L8hdwJnZZ0Ymss3Onk2aP5WFxR9LpJo2Tqag1+yWO4XEHEnLWEGZRJO/sPsPLrxUHj/4g2yfMUHuOJprpZRv4bdh7LkyCBvbSwXUhIvgn/4AZywHIDsln599/nkSYmSS3S3TbuH5Zc9HJrwdi/ykfA40lBC+8hE2qSABK8CLfiWRe6AJ3voR/PtUuXB9/v9FNWFA0h8eH499+hhPbn+yT/s7EeoD9RTXF/PGgTdoC7fxVslbWNpiZbiWtbExcjy746wvSzoqc6Ldl3Wb/D4631mdDI5zz2xXkpyYLbNytzwTvQNK6Nm/DHaGrHMvb+55ApPDyk2HUQquKur9du68iZm8ffd5XD1bamyX5i8lrMM89uljXbZ1nPt3z/ouIDMnF08ZSVbi4NSJORWkx6QT5xGn06fB1EZbca+zky5dL4/lWzq2iKs/1LE88QSc+7iUcfzXkv8iySd52hVTVvDqjLuJa2uUE1YpmfRyaAMEm6KRu0NPIlDpBSLtaoXEQacVyLR5pyHFiBlw04uw4vnu3+9gGDDzOtEG7waf6WNMUu9Re3vykvMIWkHKGssi5birw0dpbTgMT1wjg79558Ktb0Q0Yp7Z+Qx3vX0XAGErzCObH+GpHU/1eZ/Hy76jMmu4KdjEurJ1vHngTQqSC8hLHM0Ps7JpGdND1VhidvSimjlRFByt0KmL3EG+y8mXy/hIe2ZeL4HHJ0/I4HdvMguDnKHr3I9R46615qXNZZydl0Z2Uu+OVynVYZB1YupEluQt4fHtj3cRFdt9ZDcZsRksGrOIhaMWcuHYC0/yfzL4UUpFZqT2KXJvspX72ud/A00iuwoywOekZLxxEknX25NUDM8JOffOGMogbtfrMljnpEvSJ0Rrm5NyxHGD3Pr3dvvtOJqJF8l7avdKNAmSQzfMqOb5acJJQ+2v38+OIzvwGl6adYi1sX448B5c+QgsfwJGRwW+3i55m1UHV7G/bj/barZRH6inpKGEllBLv9joBEIew8PTO57mk8pPuDj/Yn4w/4ccMjT37nsm0sCkR9pH1qcq5w5w1q1SqtqZcedLnr1xaNe4wzBw7j2lZXZWNLCnspHLzsjpdv2x+OrMr9IWbuM/N/9ntBsO0gB5fMp4lFL8xwX/wU1Tbzqhzx9qOFFl3yJ327kfKY7WDZdtlLTLiOkyMFm+RRz5qLPEsTuRe05RV+d+YN3xTa0HqbjZ+YrkzJ3oK2NiNPWTlAPxmZAwItqEoifm3A7nf09qttMLZCBu7zuS5jmVDuc4yEvKA0TIbVftLhaPXUyyN4E3EhKkX+iMa7q8x9HfWX1wNesOi/iZpa1IhH2q2Xt0L7GeWJbmLeW9svfQaC4ccyGzR8zmnrPv4a2St7h/3f2R88vSFgcbOjXqaK+Zfioj954wzEjqbCjn22EIO/eKpgq8hjdSj92ZlZsOYyhYOu3EvqD85HyWFSzj8e2P84WXvsBrxa9haYu9dXtPXZ33EOLsEWczIXUC2XE95CBfuxc22U1QnEYIwebo80N2SubMm6UUbvtLkvdMzZPIve6QTKEfOaOjc7csePIa+PPS6ESW3tj2IvwkBx5bJrfX7ZUN22uROGV1t6+OarX0REIWnPdtqdl28sR73xbHM0DNkFNjUkn2J7O+Yj1VLVVMTZ/KorGLWZWSQWDmdV22bw42R8Tf3jn4DuvK1pHqlwFWR0LjVLPn6B7yk/O5OE/a9I1NGhs5d26YfAO3z7idv+/5O28flAlgT+94mmV/WybdpxxSxkp9O5zanHtvnHG9PLrOfWAobyonOy6728qNLaV1/Om9/Zw3MbPHQdS+cN+c+/jenO9haYt7//feSDf7Uz39fihwzaRreGHZCz036NjwF/jU7lPb2O7kdBz1oY/lRHXKBetKJE2SPEoGVmv3ycmbmi/le84Elpo9Mn29/hA8cbVU4Kx/rFu9dUDKFkFSJ3EZHcsT20vEOrfciSOOT/XPydOHWjqmDAaA/KT8iKJpYVohF469kEZbY74zxfXFgNx5bazayMaqjSwrWEasJ7bfnLtzlzsvZx6ZsZlcNu6yDr+fO864g7SYNFbule/sH3v/QUiHRMPewTDljssbL5PMTgeZE2UWbNHQvisfus69hwlMJTXN3PxfH5Ia5+PBq2ac1D5iPDFcW3gtjyx+BI/h4QdrZdr2ZzFy75VAk9R5O70vmyq7NkUoXS+zElPGRienpBdEb7VLP5Jo2qlicN5XZit0XvxTqN4Jz94EL31Nmjd3R8k6GL8IvrUdvrGlo+NOLwCUPVB2ghf9xJHSRg4GvEFyXnIeAUuUEielTYpUCnWnjeSkZG6edjOWtghZIebnzmdCyoR+ce51bXVUtVRRkFKAz/Tx8pUvc9uM2zps4zE8LM1fyurS1Wyu2ixdp4iKvkUYfba00zudd0nnfL3DeMVQZOg696auzl1rzdf/+gnBsOaxW84i6xgDqX0lMy6T6yZfF8nz95u2ylDFmfDhKPc1VkV7bR45IOvrS6U1m2FI3h1soSjbubfUSkeizs798EZxpmffLtP673gXsqfD/tVd7ag7JIqOY+ZLxOfrVFbojZWZnEknNg4DiP3OQOwAN0h2BlVHxo8k2Z9Mki+JvKS87p370X2YymRJ3hKyYrPwGT6KsoqYkCrOXR9P/9VuONJ6hA8Pf0hFUwVa6y5SFbGe2G7vsi/Nv5SgFeS+d+9DoUj1p0YuNo2BRlEjXfogfPHFk7Lvs8iQnKEatsJUNVd1ce6vbS3nk5KjPHjVdMZn9awNfiLcMvUWnt35LEm+JOK98af0s4c8jXZP0bY6Sak0VYoDrysVJ71vlawfI12wGDFdKjrSJ3SsI07Kiep+RCL3jbK96ZFZrCDT/N//vdwxHD0ITy2Xygenm8/YeT3besb1J1/eljZO9GYGuEGyM6jaXn10esZ01patRWvdIQWyv24/oxNH4zN9fGXGV6hsriTGE8PE1Ik8v/t5qlqqyIo78RnW33/v+6wulQtuUVYRF4yRNoDHCoSmZUxjTOIYiuuLmTNyDvGe+IjMxa/W/4p3St5h1bWrOso5uPSJIenca1prCOlQhzLIoK3YOCEr4Zh17SdCSkwKPz73x7SGWk/5Zw95GqMNo6krlZx7fFZUN7v1qEwaGjlLtilYBJuekqnfZrv0SHKu1IHHZcj7rLC0VZu1ouP+8s+Dtb+RSVI7XhY9mtUPyD59CRLZ98T59578/3fMXLFrgCplHJzJZe37FkzLmMZL+16iornj7O19dfsikf7ywuWR5c5M3l1Hdh2Xcz/ceJhVpatYPmk5Fc0VrDm0hmUFy8hLyuN3G3/HluotfZKqUEpx6bhL+f2m33Np/qWUNZWxqnQVzcFmVh1cRU1rDS2hFmI9Q7Mb0kAyJJ17dx2Ynv7oIPuqm3j0i7PxmP2TbXKiEQJNiPhS32YTDnsa2jn36t0yAJqQKc5971syDX7WCklpAEy8GO5p1wQ5Ns1Oy9gpmtQ8KZWs3i0TjnJmdtzf2Hmi6b3rNZGS9SVI9U18puRn+0OXvD1z75R2bQNUKeOQl5THbTNuizTuBpiRKemwLdVbIudH0ApS0lDC+aPP7/IZTnHAriO7ODe3h4lc3fDMrmd4dMujJHgTONR4CEtb3HHGHYxOHE2CL4GffvBTJqVOOrZUBXDtpGtpCbWwJH8J7x16T2ax7lsZaZFY3VzN6KTRvHngTYJWkKX50rCjuqWaeG+86/h7YOg796qd1B/YxC9fS2buuDQumHwaxLueug7i0uHqP/f/voYCjiYMRCcJxWeJXoxTCtmb6mBybkfnPuMaePU78NYP5fXITs7dFy/18R//SWYuXvsEvHCb7GtMN3K3pxqlRDJ4gDGUwV2z7uqwbGLqRLyGly3VW1g8djFBK0hpQykhK8S4lK5ibMn+ZHITcnmj+A1unHwj3j6mP7bXSkXLLz/+JT7Tx5yRcxidKDO8ryu8Dq11n+8E0mPTI3LOTorpz1uj51ZlSyWjk0bz6JZHKW0s5cKxF6K15qoXr2Lx2MV8b273fWs/6wzJAdWIc//gUfj9fJJWfoUfWg/xk8sm9Fyqd0oN2CyaHS5CQ4WkXUyfTO8HqQ13BkdjU3tWAIRoazVnoPOsL8PIM2DnyzKDtbuuO/kLxbGnj5cZpGfZ7e56y7d/BvCZPgrTCtlctZkHPnyAuU/M5Rcf/QKAccndK21+48xvsLVmKw98+ECXdWErzDM7n+mSjtxZu5Np6dM42naU8qZyvjDhCx3WXz/5+hOavZ2bmEucJ47SxtKIlERViwQIh5sOU9dWx/tl77O6dDW1rbWsLl3d62Bwa6iVlftWRrY5UH+AF3afHtG0gWZoOvfmcmKVh6QPHqFi3JU8FLqSK4z3KHj7JLqz9BWnBruxvGM992eNDX+BdQ/Lc6djTfIoGQCFaM4dRBe9t4gwvUDuhGwRLQwTLvs1oKKDqZ1xtNNn3SiR9MLvwOW/OT2R+yBnWsY01les54ntTzAhdQJrDolefRc5YZsleUu4edrNPLPrGV7Z90qHdesr1vOj938UaWEIkg6pbqnm0nGXctOUmxgRP4JFY3qQOz5ODGVEUkWXjZO7vermagLhQEQK5LXi13hxj1TPlDeVs79+f4+f9/zu57l3zb1sq5Uyyye3P8kP1v6AxkDjKbF3MDM0nXtTOdkWqOxp3K/u4C8x1xOa/y3Y82Z08kt/0X4a/OGeG2kPa7SGVQ/Aew/J64aKqHMPSLMTErJkwDRrqnSe742F3xaBq/Z3XblFcMXv4LzvdP+e0XNg+VMw96vyOiYJzrwpmtf/DDM7W7ocfWX6V3jq0qd4bMljPLjgwV6rvL4+6+uMjB8ZmS3qsPuoaABtqtoUWeYIlU1Km8Q3z/wmr1756jF74B4PziDv5QWX4zE8VLVUUdEk4zrx3njeKnmLdw+9G5n5uq5MpBQ2Vm7scofhrNtfJxcAZzKX0xN4ODMkz4SKxjJGtDYRzPsc7+yo4uKpI/CM/5ysPNR1dl4EreH1+6ITY06E9lPjy4eYc9+/JqpmeDJU7ZS69cZy6W/ZWC4ljcntVA3jMyUSv3NttASyJ2KSo7Xj7Zm1omfdF6Wg8JITn4w0jFk8djEv/tOL3DXrLpRSFGUXccm4S3p9j2mYTEqdFKlPd9h9pGfnXphWiFKqY7vBU8DlBZdz5YQrmZI+hYzYDKpbqiMqsFdPvJqmYBMhHeL2GbeTl5TH2rK1vHvoXW589UYe3x4VAwtaQT4q/who59zrijs8DmeGpHMvrz/IiFCQjb4iWoJhlk4bKZEeCko/7vmNDYdh3e9g60nk3BznHpc+9Jz787fKxe1k2fNm9HnZRunq40TuAP5k8A5fCeTBjlKK/OT84x5/Gp86nuK6YoLt2hw6zn3v0b002HdlO2p3kJuQS6Lv1M4lcZiVNYv759+PoQwyYzOpaq6KjLNdUXAFKf4UJqdNZkLqBOblzOOj8o/4yfvS99aRYwDYXLWZ5lAzIM68NdQa0ddxIvjhTJ8uuUqpJcBDgAk8qrV+oNN6Za+/BGgGvqS17trl+BQQtIJUBesZYSmerRxFSlwdc8algWlA1hSZxt4TTku1+j4IUPXEkWIZIBwzL5qWCTTJLMrBnBJoqpZ69HBQ7mBOZuB5z5syDb/hsAhogUTuTl49YWj3jx0uaK3RVtfBRq0BDRodfa41+bEFGEEPeyr2k5+cj2VZHKw8zKS4KZTUH2TDvs3MHjGb4rJSpiXNpKG2VQYqtXym89zZd4f9Ed2n87zjet1lW4BRreMprymnzDhCZuNofLXJ/HTivxPnjaN8fx0z9TzeOrKWIIrzUpewe88e9u4oI84Tx7pdG8lpGM/4lAKOFreyMXE3I+rGoTCo2N7IPqqwwppwyCIcErVQ02PIn9fA9ChMj4HWYIUswmFNOGhhhS0sS2N6DAxTEQ5ZaAt8sR68PoN2/x2UIZ/h8RoYHoXHa+DxmrKtv38rrtSxph0rpUxgF7AYKAU+Aq7TWm9rt80lwF2Ic58DPKS17vVefPbs2frjj3uJsnugrLGMi5+/mB+Qyf37v8vFU0fwy6vPkJUv3iWqgN8t7t55ffAIvPptGD0Xbn39uPcNwF+ulLK9iUth1c/grvXwx4ukI/uCu0/sM08H+1bDfy+T51/fhE4eSzAQJtgWJhQIE2yz5HlbmGAgTKA1RDgYxhvjwev3oMPyO/GaQdQzNxAcvwyreB3KF4+uK4UF3wLDi171M8iYiF70L2jLQmsL7N6zGgttWSit0dqK/KGJbKu1JQ7Afh0Khgm2hQi2BuWxLUSoLYRWGqU0gaYgrS0BUY9UAJZUKhoGhmliek0Mw8CyFMow8Pm9KEMTDgUIBwOEQwGwNFoZKAzQCo0CFGgFhoHp8eDxmijDRBkGKANDGfJcg2WFscJhLCuMDoewLAssjaWtqNOzos+1Zbs4S2PJwk5O2HGBWmzDdp62WrH08oVgWyuhthaU4cH0xoDWWJZGW+KA5DPbe8t2f7rjMh15ruQ4YPQQAOhuXnbcj+6wz3aPurM99j50G1rL3YJyjj1KWhdG3mdF3qs729Db6279m+7meXfL2qPEXuxjogzbWucY2etUO/s7/7VbN3HOLC6589Ju9nNslFLrtdazj7VdXyL3s4E9Wut99gc/DVwBbGu3zRXAf2u5UryvlEpRSo3UWh8+Adt7ZePrL7Ps/UKqzAzmt25nTlaATS8HUB4/HDkLXVWCfvEDdFwmaIUVVoQCAQKtzYT3tqCP3IDVmIL+88eEwxosUKaB6THtK7F8SVrLHzgnlZKT8tM5WDGpqJaxcPR2jF88iWpdhvWmSWjXesKBEOGg/RcOoy37ZNdhOel0rgMHeQAAGrJJREFUGKyQODErjLaX68iyUCTqifzENGCFsCywwiHbXvvHpJXtNDr+jqO35BoIEm6pJ9x6B2Gtsb7xBywrBDoEuhWtW9FWC+hW2p9EHWn/406G3avs7ZoBPxT/h71dLBw4COu/eiq+bpchjbL/iWNzfpPKdtpyMdd4fDF4/DGodsucx0A4QJsO4DE8WGiS/En25zm7UFhWGMNullLTWkuM6Sfel2BPcorDUCb1gQZivbG0hJqJ9cTREm4hJ2FkxC6l7M/UYnf76FsuvmF5qgDHRqubRyts2x9d3mF75zYnlNrvR78vzj0XaK+gX4pE58faJhfo4NyVUrcBtwGMGdP3lmLtKXtnA2m1LTRzkIkcpGT1m5R03ujJHx/jU0rg4CnOlx/eDTvePPZ2A4rCQGEYHjweP6bpwev14/Mn4fdn44+NxeP14PF6ML0S+Ya1ktvQtlasQADrSDG6vhKVOQ1VV4pqrpD4JacIrUzUwY9RcVmQOkbOPyXRjVJG9CQ32j1XhpxcqEhUrNpto8JBjJZGPITweRQej0TjyuPB8HhQHi+GxwRLo7SFEROLYRgEqqoINzVhpqSgPSah2lqssIWRmoyyNLqyCqO1DdOQE1tiSoVWYKHQSqJYud+w14G93lkHOhyGlhZUOIwyTEzDENsMA0wDZZhgGuJ8lCJcV0e4vg7DH4MRHwehMIRC6GAQtIXhl7EKq74ebVl4kpJRXg9WWxtWWxu6tQ18Xsz4eEzADITQpkHY55PlPj/K58PweNBtbei2VvvYANqK+sR2MWfU6So+KP+AeE88U7JnsK/pIAdq9jA/pYjD1ftobqojEOelwRPirIQpGE0thOsbIBjETE7GjPGjw2GUaWImJqE8HnGKYXF6yuvF8Megg0Gs1laMGB/KH0P46FHCNTV4UlIxkpKw6uuxAmHMpCQO6xr2Ve0lLmySQiyjvCF0SwsYBkZ8PDoYJFxfjzJNjNhYKlqraAu34TP9NIaaGJ00Ggs40HQQw+MlbCqyk3LY13iAotx0Yvzx6FAQq74B5fPhzc0FrQnV1KADAQiHCRw8SKhCqnWMhARQCh0KyfcWDstd43GSembTCZ3Bx0NfnHsf7s36tA1a60eAR0DSMn3YdxfO++pdfPo/fycnKQ+rpYVAYz2hlhZ0sA2CbVjF69D+FHR8NjoYwGo+iqkMvN4YjNo9dgSssGJHYrUFsAJtKI8XfD7noo2KjZXXIYmiVUwMmAa6tQV9tAQjZQRGfDqUbwNMlBmLbq5DJeSgwmEIhTHj4vDExaMbG7Hq6zE9HgzTgwoGIBBAtQVRwYCcZKEQRjCE0hpD6x4PpmGv1/Yh1wp0D7lz5+AqwLQsDEuf4tHzTqVkn7zc7kUZsNGeyam63lYcJ0ZSEso05ftw/oJBwr28R/l8GAkJBI8eBcsS52MYhI8cQRsG3hEjMBITI7apSM5XY0byINE/7aQyOi3H48FMSEB5vWirDcJyJ0Y4hA5b8jocFidnaXypqXhSU7Ba27AOlaM8HpTXi/L5wPBgNTWDpTHT0lHKIHT0CNSHULGxGAlJqHS/OMf6ejAMeV84jFnfYDvzNqxAgHAwiBEbixHjt9sAGvZZat+NRv46fi9ZjSaBUB3h1gPE1h1mlGHiiw8Tl5JOiXGElKDFLJ2L3/Rijs7ETEpCeb2E6+rQra3g9UAwRLixEau1RVJZpokyPei2AMG6OnHyMbFYzS1YtUcwU1LwZ4wjfOQIwUOHMBMTMRMTCdfVEddQR3ybps0XJpySiH/kBAy/X+6Cm5pQPh9mYqJE+s3NGHXx7K/ZhtLNTE6bTFLCKNpCrRw5WIoZDpHqTSLG8OMPalqrKzGNGLkYJSVitbbR9N57YJp40tNRMVKJFT93Dr6C8ehQkEBtNdtqtrO/sYTFBUuIj0mMXMCVYdjHWskyw0CZdsAS48dMSJDUWUsL/gn93xOiL869FBjd7vUo5Ow93m1OCROmTmHC1Ck9b/DYMmipgTv+IcJTP8+XWYw3/g0eGCOTXErWwpcfgVFn9m2noQAEGqHiU3jsMrjxAZlEc2i9lPwVvwt//yr8n6ei3X6OHoSX74ZLHxKZ2WOg/3w5OhDEuupxdNhCGbZjNAzY/Qbq77dL2d83NsOuV1ErvwGffximfj6as9W2M7FzvFiWOJ+4OPhFPsxcgQ60obe8gL5zg9wmBoPoQFAeQ0HY9ir6nQfRi/4/dNZ0dGszNFVj5k3FMMPoR5eizroV7+X3oOr3Yz28CGLTUd9Yj/L55M/seaBId3aOEedJ12WWxojxozzd/0x1OByJoPB6UUphtbSgQyHMlBSUYcg24TCGT+qwrUBAsp6+odv4uD95+ZPf8sctf+SDG57j7pXLyU3I5XcX/I6sYDMbtv2FJROuJDPu9A2Yb6vZxn0rrwXg60XXsWj6l3vd3t9Szb+9eScrpqxgboGMMWmtWfHUfBqDjVw76TKKZtzG9c9ewL/MuZHrCrt2reqJurY6bn7lBg7US2AzeuHsiM7NYKQvwdxHwASlVL5SygcsBzqLK78IfFEJc4G6/si394m8BVC+FZprRZa1tU6csFPV4cxsdBoyHwvLgieugt8Wwf7/lWXOzMvcM0WG1pkeX203PdAaVn4Tdr8OW5/v025U5VaMxmI8GRl4s7PwvHYbnt1/xZOWhoejmH6NabZiHtmCufM5DK/G2Pe6RGdxcZgJ8ZitZZg7/4onNRVPejqezEw8qamopkOoUBMqZxpG/lmYuh6POoo3OxvfiCz8+/9CTHYMsVOnEptYQ1xWgPixMSQsXEhi0n4St3yduPwMYnyVxKYFiFlwOWZKCkbOVDxxJp6sEZjJyRixsb06diCacjHNDlGr4fNh+P0YMTEd/k89OXZAbsX9foz4eAyfD+X1YiYl4UlLkyjK2aadIzfsC5BL94xPGU9Yh9lYuZHiuuKIHnucN47bz7j9tDp2oIM+TXfNeTqTEZvBM5c/wzLbsYP85hx55LykPDJjM4nzxB13rfu7h97lQP0BHljwAKYyIw3AByvHdO5a6xDwf4DXge3AM1rrT5VSdyil7rA3ewXYB+wB/hO4s5/sPTbjPgdoccTF0ZpX1vxKHiNt3vpYDvnRo/JZbY3wvz8XwajOUq9O67UaqQnm0xdgzxvSAHpvxxl/3dJULRU4DeVSqhgOiga6o4NeVyq6LaZfWswVrxElxN1vQLBd5/rVPxfBrc7/twp77DtrCuTYsrvORK4Nj8mxWf9Yx+VH9tvv3SoaLpufFg120y8XNRBd9BHTIS3v2P9HlyGB48xvf+N2LCzOye1FE+g0kOpPjShLtpf4Pl4ceeS85Dxx9sl5x13rvqFiA/HeeJbkLWF04uguE74GG32qc9dav4I48PbL/tDuuQb++dSadoLkzJI2bvtWSV132jgRnyrfIg5y5EypSe9LrXvtfnjzBzJLcvat8PR14tg766TEpoiWSvUuaGuAV+8RO8bMk4tDoLl3eWCn/h4ttePakr9auyt9/SFRTEwdC9vtm6YlP5PSz71vi3BWOCjOHsT5nxHV7KbSdu6ZheCJAV+iOPPxF8LqB+33vGvrp2+O/t8Bauwf8KanRWt91OyOE5SWP+k2UhhG5CXlkROfw+ik0XznrO9EpAAGCtMwSY9Jp6qla3Oe48HR1XEi+PzkfD44/AEhK9TnGbbrK9YzM2smpmEyPmV8JHK3tEVDoIFkf/IJ29cfDOJZNyeI6YG8c8XpHVgraoRTrpB1aQWyPjm3b8599c+lnvXyh2Sq+yW/jGqZdCZjouiPb31BOhEteUCcZzggEW9vVLfrGem0igPRsQmHJHJPHgUFtp583gI44zppGLz9JVl2YK10QoJo+gjkYrP/fyWV5E+Q//8lv4AD78LvzxGZ3PzzJHV1eJPopysjqqFTvVv2U7NHovqxnYS5kkZCfMYxD6XL0MBrenn9C6/z6EWPDrhjd8iIzUChyI7LPvbGPXDlhCv5/tzvk5sgstKLxyymuqWa14v7Nt/laOtR9tbt5cwsuWstSCmgpKGEtnAbT+14ioufv5imoFTAHGo8xJaqrq0OTzfDz7mDpGaOHpAOQHkLos490/6xJuUeOy3TWgef/g2mXx1Nw5z9lV6c+3hxhJ88LhHy6DniCD0xx07NVLVrUFxXGm00bQWh7qDYmpQrTS6UIUJcphcmXQI7X5EB352vyr4KLhANGYDNz8K/T5VIfvrV0X3MvA4u+jE0lMHky+Gcr8m+PnxE1uctkLRMyxForpb/t9MQobNzd3HpZzLjMkmPTe+z1nx3ZMRmcM2kayJln+ePOZ/xKeN5dMujWPrYpYwbKmXCfVF2ESDpK0tbFNcV88aBN2gKNkU0d3750S/52jtfO2FbTxXD17k75J0jvS6LboLp18iypB4i99r98OLXxKlteQ5CLVB0Y9/2mTFR8ualH4rglVLSkHnsfNjzlqQ3St7v/r3VO6N5+/rSaOQOEjE3HJYLTOYk+OY2mHaVrJtxtVyEXv4m7HpVIvCJF0Ndieiqv/wtuVv5ytuwqFNDg/l3wYrnYdlvZcauMqWrkTdOPiPQCCUfyLY5RdJsw/DCqLP7djxcXE4RNxTewD/PPLVZX0MZ3Dr9VvYc3cOqg6uOuf2Gig14DS/TMqYB0d6wn1R+wsZKkbl2nPvm6s1Ut1RT59xJDxDD07lnTBTtk9S8aNS97DfRbkDJuTJ42dYI7/5aHCSIc9vwGDxzkzxmTRXH1hfS7bpVwwMzro0uL1gkzvu3RfCni6M5bCeFAxK55xSJOqKTlvHYee0Da0GHxWaQNIhT216wSORyP3lcNG8mLZUmFgDP3SwpmX96ODoA2pnxF4pOjj9BhNeskAyQOheaPXYOP308XPwz+NJK2dbF5TQyP3c+X5j4hWNveJwsyVvCqIRR/Pe2/z7mthsqNzA9Yzp+u+dvXlIeHuXhie1PENZhDGWwrWYblc2VVDZLnwenZHKgGJ7OXSkZcFz8o+7XJ+WKw3zxLhkw3fRXWV6yTqpQ9q+W/HPRjX0X2MqwnfvEJaJl7jBjOZx5M5x3j70PO3p/56fw3C2Sx64vlZRR0ii5o6g7KJ2IPLGSUgFZ1x3n3wczV4A3Xpx7ZqHU3h8plrx81uS+2Z+3QB5zZkGq3dRh9xuSBkrNEzGwMXP79lkuLkMAj+Fh0ZhFbK3eSsgK9bhdc7CZ7TXbOTM7GiR5TS9jksZQXF9Mki+JuSPnsqN2B1urt0a2capx/rb7b7x54PTPXh+ezh1kcs+UZd2vc3p1fmpHzvvekUqRgx9J1L3gbkgY0TECPxYpY2HOV+G873ZcnpAJl/9alsckw8H3pQ6++F1Aw0tfl+0yJkl0Xlcq4wUpY6XSx2lb50TunVFKmlp8a5vI7iol0bvpg8/d03f789s595QxgIra4XHrwl2GJ4VphbSF2yJ6791R2lhKSIeYmNZxgNlJzZyTcw5T06ey9+he1lesx1QmpjIpritGa82vN/yahzY81K//j+4Yvs69NxxHmTwapn1BBiAPb5IuQmPmwgX/Ct/8FOLS+v6ZhgFLH4CRM3peP3oOHPxQSiabKuUCcthugpBZKBedoyWSmkkZDWn5cocB0QtSdygl5ZgOi38EX3pZSif7Sv7n4POPyEXRGxPtZ+qkaFxchiGT0+TO1smXd4eTZulcZ+/MCVgwagGT0ycT1mFW7lvJxNSJjEocRXF9MYcaD1HbWktxfTGHG0/vvM7PpnNPHy/pkysfkWqRQAO8b/cDHW1ronXXt/NkGX02VO2I1qp//veS9jA84siTc6XCR4clek6zGxr7EqL9RftCcq7s63gwDDjj2mhnIyc14zp3l2FMXnIeMWYM22t77lDmOPf2s2UBzs09l0mpk1g4aiGFaYUA1LbWMjVjKnlJeeyv28/mqqhA4fuHeyio6Cc+m87d44fr/yqVLPkLASXVMYkj7ZREP+FcON7/g+TQx50PM6+H3NlS2tg+r97euSflnlxzjRPBkVjIcJ27y/DFY3iYmDqx18jd6d+aGdtRemFG5gyeW/Ycyf5kRiWMItErnammZ0wnLymPkvoSNlVtIsaMIT0m/bQ7934IT4cYcWmSZy7bICmZ/nSiOUVScthcLQOtSsHlv4muby9rkDxGtoWe8+39iSMp4EbuLsOcwrRCXt3/qijAdnP+VzRXkB7Te529UorC9EI+Kv+IqelTsbRFwArw5oE3mZI+hZEJI1lXtg5LWxE5hf7msxm5d8YRExvdz9Ug/gQYIXWykQFMw5Q/6OjEk0dFI/fOWjangzHzpeome/rp37eLy2mkML2QhmADpY3diwlWNFd0Scl0x6ysWaT6UylIKYjIHFS2VDIjcwbzRs6jtrU20pP2dOA6d4DJy6Sp8/gL+39fzgUk79yu65xB04Rse1AzV9Izfa21P5XknQPf3gPx6ad/3y4up5FjDapWNleSHX9s6YPbZ9zOC1e8gMfwRITKQNI0c0ZKSnbNoTUnb3AfcdMyADkz4d4u/Zz6h3l3ykxTJ6fdHo9fomUn728Y8I2B16hwcRnOTEidgKlMttdsZ/HYxV3WVzRXMCtr1jE/x2f6yIgVnaX0mHQSvYk0BBuYkTmDEfEjKMoq4ref/JZgOMhtM27DNHqXxz5Z3Mj9dJOaB2fd2vP68RfKQKuLi8tpwW/6GZcyjm0127qsaw21UtdW16e0THscWeGs2KyImuXvL/w9l+ZfysObHubBjx48Jbb3hhu5DzY+/4djb+Pi4nJKKcoq4qW9LxG0gniN6MCpUwZ5IoqUd5xxB83B5sjrOG8cP13wU+bmzGVm5syTN/oYuJG7i4vLZ56zR5xNc6iZT6s/7bC8olnKII83cgdYOGohS/KXdFm+rGAZY5L6seTaxnXuLi4un3nOHnE2CtWlFv1kIveBxnXuLi4un3lSYlIoTCvkg8MfdFjuRO59qZYZbLjO3cXFxQWYM3IOm6o20RKK9iWubK4k3htPvDd+AC07MVzn7uLi4oI496AV5JPKTyLLKpoqhmRKBlzn7uLi4gJIxYxHeTqkZiqbK09oMHUw4Dp3FxcXF6RUcUbmDNaVrYssK28ud527i4uLy1Dn3Nxz2V67neqWagLhADUtNW5axsXFxWWoMz93PgDrytax6uAqwjrcob3eUMKdoeri4uJiMzltMmkxaawtWxuRHZg7cmj2Dnadu4uLi4uNoQzm5cxjdelqmoJN3DLtln4X+Oov3LSMi4uLSzvOyTmHhkADlra4ouCKgTbnhHGdu4uLi0s75uXMA6T5Rntd9qGGm5ZxcXFxaUdGbAZ3n3k3Z2SdMdCmnBSuc3dxcXHpxJemfWmgTThp3LSMi4uLyzDEde4uLi4uwxDXubu4uLgMQ1zn7uLi4jIMcZ27i4uLyzDEde4uLi4uwxDXubu4uLgMQ1zn7uLi4jIMUVrrgdmxUlXAgRN8ewZQfQrNOZUMVttcu46fwWqba9fxMVjtghOzbazWOvNYGw2Ycz8ZlFIfa61nD7Qd3TFYbXPtOn4Gq22uXcfHYLUL+tc2Ny3j4uLiMgxxnbuLi4vLMGSoOvdHBtqAXhistrl2HT+D1TbXruNjsNoF/WjbkMy5u7i4uLj0zlCN3F1cXFxcemHIOXel1BKl1E6l1B6l1D0DaMdopdQ7SqntSqlPlVJft5enKaXeUErtth9TB8g+Uyn1iVJq5SCzK0Up9ZxSaod97OYNBtuUUt+0v8etSqmnlFIxA2GXUupPSqlKpdTWdst6tEMpda99LuxUSl08ALb9wv4uNyul/qaUSjndtnVnV7t1/1cppZVSGYPFLqXUXfa+P1VK/bzf7NJaD5k/wAT2AuMAH7AJmDJAtowEiuznicAuYArwc+Aee/k9wIMDZN+3gCeBlfbrwWLXY8CX7ec+IGWgbQNygf1ArP36GeBLA2EXsBAoAra2W9atHfbvbRPgB/Ltc8M8zbZdBHjs5w8OhG3d2WUvHw28jsynyRgMdgHnA28Cfvt1Vn/ZdVpOnlN4sOYBr7d7fS9w70DbZdvyD2AxsBMYaS8bCewcAFtGAW8Bi9o598FgV5LtRFWn5QNqm+3cDwJpSHeylbbTGhC7gLxODqFbOzr//m1HNu902tZp3eeBJwbCtu7sAp4DzgCK2zn3AbULCRwu7Ga7U27XUEvLOCehQ6m9bEBRSuUBs4APgGyt9WEA+zFrAEz6NfAdwGq3bDDYNQ6oAv5sp4weVUrFD7RtWutDwC+BEuAwUKe1/p+BtqsdPdkx2M6HW4BX7ecDaptSahlwSGu9qdOqgT5mE4EFSqkPlFKrlVJn9ZddQ825q26WDWi5j1IqAXge+IbWun4gbbHtuQyo1FqvH2hbusGD3Kb+Xms9C2hC0gwDip3DvgK5Hc4B4pVSKwbWqj4xaM4HpdR9QAh4wlnUzWanxTalVBxwH/Cv3a3uZtnpPGYeIBWYC3wbeEYppfrDrqHm3EuRPJrDKKBsgGxBKeVFHPsTWusX7MUVSqmR9vqRQOVpNuscYJlSqhh4GliklHp8ENgF8v2Vaq0/sF8/hzj7gbbtQmC/1rpKax0EXgDmDwK7HHqyY1CcD0qpm4DLgBu0nVMYYNsKkAv1Jvs8GAVsUEqNGGC7sPf/ghY+RO6uM/rDrqHm3D8CJiil8pVSPmA58OJAGGJfbf8IbNda/1u7VS8CN9nPb0Jy8acNrfW9WutRWus85Pi8rbVeMdB22baVAweVUpPsRRcA2waBbSXAXKVUnP29XgBsHwR2OfRkx4vAcqWUXymVD0wAPjydhimllgDfBZZprZvbrRow27TWW7TWWVrrPPs8KEWKH8oH0i6bvyNjYSilJiJFBdX9Yld/DST04wDFJUhlyl7gvgG041zktmkzsNH+uwRIRwYzd9uPaQNo4+eIDqgOCruAmcDH9nH7O3KLOuC2AfcDO4CtwF+QqoXTbhfwFJL3DyJO6dbe7EDSD3uRQdelA2DbHiRX7JwDfzjdtnVnV6f1xdgDqgNtF+LMH7d/ZxuARf1llztD1cXFxWUYMtTSMi4uLi4ufcB17i4uLi7DENe5u7i4uAxDXOfu4uLiMgxxnbuLi4vLMMR17i4uLi7DENe5u7i4uAxDXOfu4uLiMgz5/wHQPdc0hxr72gAAAABJRU5ErkJggg==\n",
119 | "text/plain": [
120 | ""
121 | ]
122 | },
123 | "metadata": {
124 | "needs_background": "light"
125 | },
126 | "output_type": "display_data"
127 | }
128 | ],
129 | "source": [
130 | "# Make a plot of motion parameters \n",
131 | "plt.plot(motion)\n",
132 | "plt.legend(parameter_names)"
133 | ]
134 | },
135 | {
136 | "cell_type": "markdown",
137 | "metadata": {},
138 | "source": [
139 | "## Segment"
140 | ]
141 | },
142 | {
143 | "cell_type": "code",
144 | "execution_count": null,
145 | "metadata": {},
146 | "outputs": [],
147 | "source": [
148 | "# Segment data in SPM\n",
149 | "\n",
150 | "\n",
151 | "# Plot segmented gray matter, white matter, and CSF\n",
152 | "\n"
153 | ]
154 | }
155 | ],
156 | "metadata": {
157 | "kernelspec": {
158 | "display_name": "Python 3",
159 | "language": "python",
160 | "name": "python3"
161 | },
162 | "language_info": {
163 | "codemirror_mode": {
164 | "name": "ipython",
165 | "version": 3
166 | },
167 | "file_extension": ".py",
168 | "mimetype": "text/x-python",
169 | "name": "python",
170 | "nbconvert_exporter": "python",
171 | "pygments_lexer": "ipython3",
172 | "version": "3.7.3"
173 | }
174 | },
175 | "nbformat": 4,
176 | "nbformat_minor": 2
177 | }
178 |
--------------------------------------------------------------------------------
/03-fmri_data_preprocessing/images/harry_potter_400x400.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fMRIAnalysisCourse/fmri-analysis-course/5495887620b54bc3f6b5c83ed9fa35df149414c7/03-fmri_data_preprocessing/images/harry_potter_400x400.jpg
--------------------------------------------------------------------------------
/03-fmri_data_preprocessing/images/screenshot_solution.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fMRIAnalysisCourse/fmri-analysis-course/5495887620b54bc3f6b5c83ed9fa35df149414c7/03-fmri_data_preprocessing/images/screenshot_solution.png
--------------------------------------------------------------------------------
/03-fmri_data_preprocessing/pyscript_realign.m:
--------------------------------------------------------------------------------
1 | fprintf(1,'Executing %s at %s:\n',mfilename(),datestr(now));
2 | ver,
3 | try,
4 | %% Generated by nipype.interfaces.spm
5 | if isempty(which('spm')),
6 | throw(MException('SPMCheck:NotFound', 'SPM not in matlab path'));
7 | end
8 | [name, version] = spm('ver');
9 | fprintf('SPM version: %s Release: %s\n',name, version);
10 | fprintf('SPM path: %s\n', which('spm'));
11 | spm('Defaults','fMRI');
12 |
13 | if strcmp(name, 'SPM8') || strcmp(name(1:5), 'SPM12'),
14 | spm_jobman('initcfg');
15 | spm_get_defaults('cmdline', 1);
16 | end
17 |
18 | jobs{1}.spm.spatial.realign.estwrite.data = {...
19 | {...
20 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,1';...
21 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,2';...
22 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,3';...
23 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,4';...
24 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,5';...
25 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,6';...
26 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,7';...
27 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,8';...
28 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,9';...
29 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,10';...
30 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,11';...
31 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,12';...
32 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,13';...
33 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,14';...
34 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,15';...
35 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,16';...
36 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,17';...
37 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,18';...
38 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,19';...
39 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,20';...
40 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,21';...
41 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,22';...
42 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,23';...
43 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,24';...
44 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,25';...
45 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,26';...
46 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,27';...
47 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,28';...
48 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,29';...
49 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,30';...
50 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,31';...
51 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,32';...
52 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,33';...
53 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,34';...
54 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,35';...
55 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,36';...
56 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,37';...
57 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,38';...
58 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,39';...
59 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,40';...
60 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,41';...
61 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,42';...
62 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,43';...
63 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,44';...
64 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,45';...
65 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,46';...
66 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,47';...
67 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,48';...
68 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,49';...
69 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,50';...
70 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,51';...
71 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,52';...
72 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,53';...
73 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,54';...
74 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,55';...
75 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,56';...
76 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,57';...
77 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,58';...
78 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,59';...
79 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,60';...
80 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,61';...
81 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,62';...
82 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,63';...
83 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,64';...
84 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,65';...
85 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,66';...
86 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,67';...
87 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,68';...
88 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,69';...
89 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,70';...
90 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,71';...
91 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,72';...
92 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,73';...
93 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,74';...
94 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,75';...
95 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,76';...
96 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,77';...
97 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,78';...
98 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,79';...
99 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,80';...
100 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,81';...
101 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,82';...
102 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,83';...
103 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,84';...
104 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,85';...
105 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,86';...
106 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,87';...
107 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,88';...
108 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,89';...
109 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,90';...
110 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,91';...
111 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,92';...
112 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,93';...
113 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,94';...
114 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,95';...
115 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,96';...
116 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,97';...
117 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,98';...
118 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,99';...
119 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,100';...
120 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,101';...
121 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,102';...
122 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,103';...
123 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,104';...
124 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,105';...
125 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,106';...
126 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,107';...
127 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,108';...
128 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,109';...
129 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,110';...
130 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,111';...
131 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,112';...
132 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,113';...
133 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,114';...
134 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,115';...
135 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,116';...
136 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,117';...
137 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,118';...
138 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,119';...
139 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,120';...
140 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,121';...
141 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,122';...
142 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,123';...
143 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,124';...
144 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,125';...
145 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,126';...
146 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,127';...
147 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,128';...
148 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,129';...
149 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,130';...
150 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,131';...
151 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,132';...
152 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,133';...
153 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,134';...
154 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,135';...
155 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,136';...
156 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,137';...
157 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,138';...
158 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,139';...
159 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,140';...
160 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,141';...
161 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,142';...
162 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,143';...
163 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,144';...
164 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,145';...
165 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,146';...
166 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,147';...
167 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,148';...
168 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,149';...
169 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,150';...
170 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,151';...
171 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,152';...
172 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,153';...
173 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,154';...
174 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,155';...
175 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,156';...
176 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,157';...
177 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,158';...
178 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,159';...
179 | '/media/finc/Elements/ds000003-00001/sub-01/func/sub-01_task-rhymejudgment_bold.nii,160';...
180 | };
181 | };
182 | jobs{1}.spm.spatial.realign.estwrite.eoptions.rtm = 1;
183 | jobs{1}.spm.spatial.realign.estwrite.roptions.which(1) = 2;
184 | jobs{1}.spm.spatial.realign.estwrite.roptions.which(2) = 1;
185 | jobs{1}.spm.spatial.realign.estwrite.roptions.prefix = 'r';
186 |
187 | spm_jobman('run', jobs);
188 |
189 |
190 | ,catch ME,
191 | fprintf(2,'MATLAB code threw an exception:\n');
192 | fprintf(2,'%s\n',ME.message);
193 | if length(ME.stack) ~= 0, fprintf(2,'File:%s\nName:%s\nLine:%d\n',ME.stack.file,ME.stack.name,ME.stack.line);, end;
194 | end;
--------------------------------------------------------------------------------
/04-general_linear_model/04-fMRIDA_slides.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fMRIAnalysisCourse/fmri-analysis-course/5495887620b54bc3f6b5c83ed9fa35df149414c7/04-general_linear_model/04-fMRIDA_slides.pdf
--------------------------------------------------------------------------------
/04-general_linear_model/05-fMRIDA_slides.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fMRIAnalysisCourse/fmri-analysis-course/5495887620b54bc3f6b5c83ed9fa35df149414c7/04-general_linear_model/05-fMRIDA_slides.pdf
--------------------------------------------------------------------------------
/04-general_linear_model/glm_on_fMRI_data_template.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "# General linear model on fMRI data\n",
8 | "\n"
9 | ]
10 | },
11 | {
12 | "cell_type": "markdown",
13 | "metadata": {},
14 | "source": [
15 | "## First level analysis\n",
16 | "\n",
17 | "Analysis performed on a level of single subject (individual)."
18 | ]
19 | },
20 | {
21 | "cell_type": "code",
22 | "execution_count": 24,
23 | "metadata": {},
24 | "outputs": [],
25 | "source": [
26 | "# Import libraries\n",
27 | "import pandas as pd\n",
28 | "import numpy as np\n",
29 | "import matplotlib.pyplot as plt\n",
30 | "%matplotlib inline\n",
31 | "from nilearn.glm.first_level import FirstLevelModel\n",
32 | "from nilearn.plotting import plot_stat_map, plot_img, show, plot_design_matrix, plot_contrast_matrix\n",
33 | "from nilearn.glm.first_level import make_first_level_design_matrix\n",
34 | "from nilearn.glm.first_level import FirstLevelModel\n",
35 | "from nilearn.reporting import get_clusters_table"
36 | ]
37 | },
38 | {
39 | "cell_type": "markdown",
40 | "metadata": {},
41 | "source": [
42 | "## Load data"
43 | ]
44 | },
45 | {
46 | "cell_type": "code",
47 | "execution_count": 16,
48 | "metadata": {},
49 | "outputs": [],
50 | "source": [
51 | "# Load a table with events \n",
52 | "events_path = \"../fMRI_BIDS_rhymejudgment/sub-01/func/sub-01_task-rhymejudgment_events.tsv\"\n",
53 | "# events = pd.read_csv(events_path, sep=\"\\t\")"
54 | ]
55 | },
56 | {
57 | "cell_type": "code",
58 | "execution_count": 11,
59 | "metadata": {},
60 | "outputs": [],
61 | "source": [
62 | "# Load preprocessed fMRI images\n",
63 | "fmri_img = \"../fMRI_BIDS_rhymejudgment/derivatives/fmriprep/sub-01/func/sub-01_task-rhymejudgment_space-MNI152NLin2009cAsym_desc-preproc_bold.nii.gz\""
64 | ]
65 | },
66 | {
67 | "cell_type": "code",
68 | "execution_count": 12,
69 | "metadata": {},
70 | "outputs": [],
71 | "source": [
72 | "# Load confounds and select six motion parameters\n",
73 | "confounds_path = \"../fMRI_BIDS_rhymejudgment/derivatives/fmriprep/sub-01/func/sub-01_task-rhymejudgment_desc-confounds_regressors.tsv\"\n"
74 | ]
75 | },
76 | {
77 | "cell_type": "markdown",
78 | "metadata": {},
79 | "source": [
80 | "## Run first level GLM"
81 | ]
82 | },
83 | {
84 | "cell_type": "code",
85 | "execution_count": 18,
86 | "metadata": {},
87 | "outputs": [],
88 | "source": [
89 | "# Create design matrix\n",
90 | "\n",
91 | "t_r = 2 # repetition time (TR)\n",
92 | "from nilearn.glm.first_level import make_first_level_design_matrix\n",
93 | "#design_matrix = make_first_level_design_matrix(t_r, events,\n",
94 | "# drift_model='polynomial', drift_order=3)\n",
95 | "\n",
96 | "\n",
97 | "# plot_design_matrix"
98 | ]
99 | },
100 | {
101 | "cell_type": "code",
102 | "execution_count": 13,
103 | "metadata": {},
104 | "outputs": [],
105 | "source": [
106 | "# Define model\n",
107 | "first_level_model = FirstLevelModel(t_r, \n",
108 | " hrf_model='spm', \n",
109 | " high_pass=.01,\n",
110 | " smoothing_fwhm=6)\n",
111 | "# Fit model to data (fit(fmri_img, design_matrices=design_matrix))\n"
112 | ]
113 | },
114 | {
115 | "cell_type": "code",
116 | "execution_count": 33,
117 | "metadata": {},
118 | "outputs": [],
119 | "source": [
120 | "# Print timeseries of task-HRF data using plt.plot\n"
121 | ]
122 | },
123 | {
124 | "cell_type": "markdown",
125 | "metadata": {},
126 | "source": [
127 | "## Create contrasts"
128 | ]
129 | },
130 | {
131 | "cell_type": "code",
132 | "execution_count": 34,
133 | "metadata": {},
134 | "outputs": [],
135 | "source": [
136 | "# Create conditions\n",
137 | "conditions = {'pseudoword': np.array([1, 0, 0, 0, 0, 0, 0, 0, 0]), \n",
138 | " 'word': np.array([0, 1, 0, 0, 0, 0, 0, 0, 0])}"
139 | ]
140 | },
141 | {
142 | "cell_type": "code",
143 | "execution_count": 43,
144 | "metadata": {},
145 | "outputs": [],
146 | "source": [
147 | "# Create contrasts (word > pseudoword, main word effect)\n",
148 | "\n",
149 | "# Plot contrast matrix with plot_contrast_matrix\n"
150 | ]
151 | },
152 | {
153 | "cell_type": "code",
154 | "execution_count": 21,
155 | "metadata": {},
156 | "outputs": [],
157 | "source": [
158 | "# Calculate statistic test for selected contrast (brain activity for word processing), use compute_contrasts\n",
159 | "z_map = first_level_model.compute_contrast(word_effect,\n",
160 | " output_type='z_score')\n",
161 | "\n",
162 | "# Plot results using plot_stat_map\n"
163 | ]
164 | },
165 | {
166 | "cell_type": "code",
167 | "execution_count": null,
168 | "metadata": {},
169 | "outputs": [],
170 | "source": [
171 | "# Plot results on a glass brain\n"
172 | ]
173 | },
174 | {
175 | "cell_type": "code",
176 | "execution_count": 46,
177 | "metadata": {},
178 | "outputs": [],
179 | "source": [
180 | "# Plot results on interactive plot\n",
181 | "\n"
182 | ]
183 | },
184 | {
185 | "cell_type": "markdown",
186 | "metadata": {},
187 | "source": [
188 | "## Thresholding"
189 | ]
190 | },
191 | {
192 | "cell_type": "code",
193 | "execution_count": 47,
194 | "metadata": {},
195 | "outputs": [
196 | {
197 | "name": "stdout",
198 | "output_type": "stream",
199 | "text": [
200 | "Corrected p<0.05 threshold: 5.179\n"
201 | ]
202 | }
203 | ],
204 | "source": [
205 | "# Calculate threshold to correct for multiple comparisons\n",
206 | "_, threshold = map_threshold(z_map, alpha=.05, height_control='bonferroni')\n",
207 | "print('Corrected p<0.05 threshold: %.3f' % threshold)\n",
208 | "\n",
209 | "\n",
210 | "# Threshold images with calculated threshold\n"
211 | ]
212 | },
213 | {
214 | "cell_type": "code",
215 | "execution_count": 48,
216 | "metadata": {},
217 | "outputs": [],
218 | "source": [
219 | "# Get cluster table using get_clusters_table\n"
220 | ]
221 | },
222 | {
223 | "cell_type": "markdown",
224 | "metadata": {},
225 | "source": [
226 | "# Repeat GLM analysis with design matrix extended by 6 motion parameters"
227 | ]
228 | },
229 | {
230 | "cell_type": "code",
231 | "execution_count": 49,
232 | "metadata": {},
233 | "outputs": [],
234 | "source": [
235 | "# Repeat everything with motion as nuisance regressors.\n",
236 | "\n",
237 | "# Print head of the dataframe\n"
238 | ]
239 | },
240 | {
241 | "cell_type": "code",
242 | "execution_count": 37,
243 | "metadata": {},
244 | "outputs": [],
245 | "source": [
246 | "# Create conditions \n"
247 | ]
248 | },
249 | {
250 | "cell_type": "code",
251 | "execution_count": 50,
252 | "metadata": {},
253 | "outputs": [],
254 | "source": [
255 | "# Create contrasts\n",
256 | "\n",
257 | "# Plot contrast matrix\n"
258 | ]
259 | },
260 | {
261 | "cell_type": "code",
262 | "execution_count": 51,
263 | "metadata": {},
264 | "outputs": [],
265 | "source": [
266 | "# Calculate statistic test for selected contrast (brain activity for word processing)\n"
267 | ]
268 | },
269 | {
270 | "cell_type": "code",
271 | "execution_count": 22,
272 | "metadata": {},
273 | "outputs": [],
274 | "source": [
275 | "# Threshold z-maps to correct for multiple comparisons\n"
276 | ]
277 | },
278 | {
279 | "cell_type": "code",
280 | "execution_count": 23,
281 | "metadata": {},
282 | "outputs": [],
283 | "source": [
284 | "# Run contrast for motion effect (which voxels are associated with motion (translation in Y direction)?)\n"
285 | ]
286 | }
287 | ],
288 | "metadata": {
289 | "kernelspec": {
290 | "display_name": "Python 3",
291 | "language": "python",
292 | "name": "python3"
293 | },
294 | "language_info": {
295 | "codemirror_mode": {
296 | "name": "ipython",
297 | "version": 3
298 | },
299 | "file_extension": ".py",
300 | "mimetype": "text/x-python",
301 | "name": "python",
302 | "nbconvert_exporter": "python",
303 | "pygments_lexer": "ipython3",
304 | "version": "3.8.3"
305 | },
306 | "widgets": {
307 | "application/vnd.jupyter.widget-state+json": {
308 | "state": {},
309 | "version_major": 2,
310 | "version_minor": 0
311 | }
312 | }
313 | },
314 | "nbformat": 4,
315 | "nbformat_minor": 4
316 | }
317 |
--------------------------------------------------------------------------------
/05-functional_connectivity/06-fMRIDA_slides.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fMRIAnalysisCourse/fmri-analysis-course/5495887620b54bc3f6b5c83ed9fa35df149414c7/05-functional_connectivity/06-fMRIDA_slides.pdf
--------------------------------------------------------------------------------
/05-functional_connectivity/brain_parcellations_template.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "# Plotting brain parcellations"
8 | ]
9 | },
10 | {
11 | "cell_type": "markdown",
12 | "metadata": {},
13 | "source": [
14 | "## Load libraries"
15 | ]
16 | },
17 | {
18 | "cell_type": "code",
19 | "execution_count": 2,
20 | "metadata": {},
21 | "outputs": [],
22 | "source": [
23 | "from nilearn import datasets\n",
24 | "from nilearn import plotting\n",
25 | "import numpy as np"
26 | ]
27 | },
28 | {
29 | "cell_type": "markdown",
30 | "metadata": {},
31 | "source": [
32 | "## Plot brain atlas from Nifti file"
33 | ]
34 | },
35 | {
36 | "cell_type": "code",
37 | "execution_count": 3,
38 | "metadata": {},
39 | "outputs": [],
40 | "source": [
41 | "# Load atlas\n",
42 | "ho_atlas = datasets.fetch_atlas_harvard_oxford('cort-maxprob-thr25-2mm')\n",
43 | "ho_maps = ho_atlas.maps\n",
44 | "\n",
45 | "# Plot atlas using plot_ROI funtion\n"
46 | ]
47 | },
48 | {
49 | "cell_type": "markdown",
50 | "metadata": {},
51 | "source": [
52 | "### Excercise"
53 | ]
54 | },
55 | {
56 | "cell_type": "markdown",
57 | "metadata": {},
58 | "source": [
59 | "Select one of atlases from [Nilearn database](https://nilearn.github.io/modules/reference.html#module-nilearn.datasets), and plot it on the brain."
60 | ]
61 | },
62 | {
63 | "cell_type": "code",
64 | "execution_count": null,
65 | "metadata": {},
66 | "outputs": [],
67 | "source": []
68 | },
69 | {
70 | "cell_type": "markdown",
71 | "metadata": {},
72 | "source": [
73 | "## Plot brain atlas created based on MNI coordinates"
74 | ]
75 | },
76 | {
77 | "cell_type": "code",
78 | "execution_count": 4,
79 | "metadata": {},
80 | "outputs": [
81 | {
82 | "name": "stdout",
83 | "output_type": "stream",
84 | "text": [
85 | "[[-25 -98 -12]\n",
86 | " [ 27 -97 -13]\n",
87 | " [ 24 32 -18]\n",
88 | " [-56 -45 -24]\n",
89 | " [ 8 41 -24]]\n"
90 | ]
91 | }
92 | ],
93 | "source": [
94 | "# Load atlas\n",
95 | "power = datasets.fetch_coords_power_2011()\n",
96 | "\n",
97 | "# Select coordinates\n",
98 | "coords = np.vstack((power.rois['x'], power.rois['y'], power.rois['z'])).T\n",
99 | "\n",
100 | "# Print coordinates\n",
101 | "print(coords[:5])"
102 | ]
103 | },
104 | {
105 | "cell_type": "code",
106 | "execution_count": 7,
107 | "metadata": {},
108 | "outputs": [
109 | {
110 | "data": {
111 | "image/png": "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73lPyw1mzZo1WrNmjd5+++2WetM333xTb775ppYvX67ly5drxowZ2RM6kUi0oZFJT5o0SZ///Od1/fXXa/r06Vq6dKk22mgj7brrrtp11101b968jr+3T79sV/bBD35woLRlvGKXXXYZ6yGMO0yfPl233nqrPv3pT2vChAkD8bd58+a9a9dRPyLX9tjjl7/8paSqtE9qz0Q2oiYvUbIi5T2bYtzM6qa4CQVCzEqZIV1ui0yZrSkNs3az9KaWlRQLoryq3/cckTl7rCtXrpQkHXbYYRprdBWTPuqoozR//nxNnz5dixcv1pFHHtn1DuxiefnllwcWxcsvvzygbTxe0a2rP9GK6dOn64ADDtCCBQta1JSa0O/riG66puSZ1atXS+qPmwCRazuR6B909ZA+6KCDNGPGDP3sZz/TbbfdNlCG8rWvfU2LFy+u/c3kyZP16KOPaoMNNtCkSZP0yCOP6Atf+IIk6ZFHHtGOO+44QoeQGC949dVXNWvWLB133HGaM2eOpk6dqg033DDXUSIBuKWqZWklaYcddmj5jpMUyZjNeKM4bclspXbpWhqYzMQmk+b+Gesum1P4u/4OjVp/zn2ZEUdZ32T/bEEZeRP8vmPjK1askDT67ScHg65kQdddd1393d/9nQ4//HDttttu2mqrrSRJF110kV599dXaf2WscNq0aTrrrLP00ksv6Re/+IUuueQSHX300aNyQIn+xcyZM7Xrrrtq4cKF2n///QdqgteGdeSYtDFhwgRNmDBhIEbtv9944w298cYbWrly5YBLLZFIJCJ0XYJ11FFHaeHChbrssssGvZNvf/vbmjFjhiZPnqz11ltPZ555Zmbkvstw8803a+nSpfrpT38qSZo7d6522WUX/eAHP9BXv/rVrraR6yjxbsMJJ5ww8H/nbXz84x+XJG2wwQaS2mPUbFLhV7NXM2PWN7OOOmLUZsasSWadNqVw6z7zmBgrZmtJj41hJWZpc+z+HeeG9dmW4+0nBm10/ZDeaquttN5662nq1KmD3sl73/teXXbZZUN6wCfWDhx44IE68MADB/6eOHFii0BAN+jndcSyGLoafTN56aWXJEnHHntsD0eXSCTGK7p6SK9Zs0Zz587VV77ylQFt2UQikUj0DieddFLL33fccYekqi2qDUWzzYhJMzbtv52cGTFqb4dZ5GbS/h21wkthH++TNd9kzt62/2ac28YwFcWcxe3Qk3/n91k/7ZDTUMhnr9D4kH7ttde06aabavLkyVq6dGkvxpRIjDv85V/+ZVff+8QnPjHKI0kkEmsTGh/S73//+wdqVBOJRCLRH/jiF78oSfrhD38oSdp8880laaAs0cyWOuAOvTgua9ZKbXCyUKpysXY50ggvmbRlcJml7e+YGZut+3seA79vBu1X1mH7d2b71lX4n//5H0nSwQcfrH5HV9ndiUQikUgkeo9sVZlIJBJjiLffflvf/OY3tXDhQknv6ER/97vfbez8ZHzpS1+SJF133XWSpClTpkhqj0k7jmtWaWZNlS/WQZsZO85LrW4ybap7lRnWZrzPPvuspCpDnepm3pfj5I5hmyHbC2DGHfW69ucvv/yypErJrR+zuCPkQzqRSCTGEAsWLNCSJUv0yCOPaMKECfrCF76gKVOmZG/xhKR8SCcSicSwcO2117Z0SXrrrbf0F3/xF7rvvvu6+v0VV1yh008/XVtssYUk6fTTT9cll1wy6If0IYccIkm69NJLJUnbb7+9JGnDDTeUVDFfqneZ6VLFiz2XzWYNqoSx5tmvpciPt2Fm6+9ssskmkiptfo/F3zdL9/fZCtZj9Vgce3b9s1UKd911V403ZEw6kUgkhoFDDz10QCFv1apVmjJlig477DD98z//c9jdbf311x/4/aOPPtq33d2GgylTpgy43hNDx4S3GYBIJBKJxKCxZs0aHXDAAdpyyy01f/78rn+3zjrr6NFHH9XHPvYxSdITTzyh7bbbTmvWrOk6Lt0JS5YskVRlf5tBs56aetqsTWbfasd7zV6N1157TZK0fPnytrE4m9od8JxZvvXWW0uqmDQz083mqTDmGLeZs1sqe99j2Qd6pJBMOpFIJEYA3/rWt/TKK6/oggsuGNTvJk6cOOD+ld5xBU+cOHFEHtCJ8Y+MSScSicQwcc011+jqq6/Wf//3fw+wvrPPPltnn312+BvrT+y444565JFHtNtuu0ka+e5uBx10kCQNGA/bbrutJGnTTTeV9I4WhtSuGGYw89rGg5m448POuLbB8eKLL0pq1R83DjjgAEnvaPpL1Vyw9Sx7UrMjl2POrns+/vjjo2kYt0gmnUgkEsPAQw89pFNOOUVLlizRxhtvPPD+3//934fd3UqBqGnTpmnu3LlauXKlVq1ape9973t9090tMfbImHQikUgMA3PmzNFZZ53VksX8uc99bkBbuwlvv/22zjzzzIE66eOPP35QddLDxU033SSpyrB2bbKPh1nc5biliuWuXr1akvT4449Lkk499dSux3D++edL0kAbZOuRe99WInPM+fnnn5dU9d1em5Hu7kQikRgG5syZozlz5gz59xMmTNA555yjc845Z+QGlVhrkEw6kUgkEm248sorJVXZ4GTUjgsfccQRYzC6dw8yJp1IJBKJRJ8imXQikUgkEn2KZNKJRCKRSPQp8iGdSCQSiUSfIh/SiUQikUj0KfIhnUgkEolEnyIf0olEIpFI9CnyIZ1IJBKJRJ8iH9KJRCKRSPQp8iGdSCQSiUSf4v8DNFjbytXlVkwAAAAASUVORK5CYII=\n",
112 | "text/plain": [
113 | ""
114 | ]
115 | },
116 | "metadata": {},
117 | "output_type": "display_data"
118 | }
119 | ],
120 | "source": [
121 | "# Plot coordinates on brain slices using plot_roi function & .add_markers method\n",
122 | "display = plotting.plot_roi(None)\n"
123 | ]
124 | },
125 | {
126 | "cell_type": "code",
127 | "execution_count": 10,
128 | "metadata": {},
129 | "outputs": [],
130 | "source": [
131 | "# Plot on glass brain using plot_connectome\n",
132 | "n_rois = len(coords)\n",
133 | "connectivity_matrix = np.zeros((n_rois, n_rois))\n",
134 | "\n",
135 | "# Plot using plot_connectome function\n"
136 | ]
137 | }
138 | ],
139 | "metadata": {
140 | "kernelspec": {
141 | "display_name": "Python 3",
142 | "language": "python",
143 | "name": "python3"
144 | },
145 | "language_info": {
146 | "codemirror_mode": {
147 | "name": "ipython",
148 | "version": 3
149 | },
150 | "file_extension": ".py",
151 | "mimetype": "text/x-python",
152 | "name": "python",
153 | "nbconvert_exporter": "python",
154 | "pygments_lexer": "ipython3",
155 | "version": "3.8.3"
156 | },
157 | "widgets": {
158 | "application/vnd.jupyter.widget-state+json": {
159 | "state": {},
160 | "version_major": 2,
161 | "version_minor": 0
162 | }
163 | }
164 | },
165 | "nbformat": 4,
166 | "nbformat_minor": 4
167 | }
168 |
--------------------------------------------------------------------------------
/05-functional_connectivity/seed-voxel_connectivity_template.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "# Seed-voxel functional connectivity"
8 | ]
9 | },
10 | {
11 | "cell_type": "markdown",
12 | "metadata": {},
13 | "source": [
14 | "## Load libraries"
15 | ]
16 | },
17 | {
18 | "cell_type": "code",
19 | "execution_count": 1,
20 | "metadata": {},
21 | "outputs": [],
22 | "source": [
23 | "import numpy as np\n",
24 | "from nilearn import datasets\n",
25 | "from nilearn import input_data\n",
26 | "from nilearn.connectome import ConnectivityMeasure\n",
27 | "from nilearn import plotting"
28 | ]
29 | },
30 | {
31 | "cell_type": "markdown",
32 | "metadata": {},
33 | "source": [
34 | "## Load data"
35 | ]
36 | },
37 | {
38 | "cell_type": "code",
39 | "execution_count": 2,
40 | "metadata": {},
41 | "outputs": [],
42 | "source": [
43 | "# Load fMRI data\n",
44 | "dataset = datasets.fetch_development_fmri(n_subjects=1)\n",
45 | "func_filename = dataset.func[0]\n",
46 | "confounds_filename = dataset.confounds[0]"
47 | ]
48 | },
49 | {
50 | "cell_type": "markdown",
51 | "metadata": {},
52 | "source": [
53 | "## Create a seed"
54 | ]
55 | },
56 | {
57 | "cell_type": "code",
58 | "execution_count": 3,
59 | "metadata": {},
60 | "outputs": [],
61 | "source": [
62 | "pcc_coords = [(0, -52, 18)]\n",
63 | "seed_masker = input_data.NiftiSpheresMasker(\n",
64 | " pcc_coords, radius=8,\n",
65 | " detrend=True, standardize=True)"
66 | ]
67 | },
68 | {
69 | "cell_type": "markdown",
70 | "metadata": {},
71 | "source": [
72 | "## Extract timeseries from a seed"
73 | ]
74 | },
75 | {
76 | "cell_type": "code",
77 | "execution_count": 4,
78 | "metadata": {},
79 | "outputs": [],
80 | "source": [
81 | "seed_timeseries = seed_masker.fit_transform(func_filename,\n",
82 | " confounds=confounds_filename)\n",
83 | "seed_timeseries = np.squeeze(seed_timeseries)"
84 | ]
85 | },
86 | {
87 | "cell_type": "markdown",
88 | "metadata": {},
89 | "source": [
90 | "## Estract timeseries from the whole brain"
91 | ]
92 | },
93 | {
94 | "cell_type": "code",
95 | "execution_count": 5,
96 | "metadata": {},
97 | "outputs": [],
98 | "source": [
99 | "brain_masker = input_data.NiftiMasker(\n",
100 | " smoothing_fwhm=8,\n",
101 | " detrend=True, standardize=True,\n",
102 | " memory='nilearn_cache', memory_level=1, verbose=0)\n",
103 | "\n",
104 | "brain_timeseries = brain_masker.fit_transform(func_filename,\n",
105 | " confounds=confounds_filename)"
106 | ]
107 | },
108 | {
109 | "cell_type": "code",
110 | "execution_count": 1,
111 | "metadata": {},
112 | "outputs": [],
113 | "source": [
114 | "# Print shape of seed time-series\n",
115 | "\n",
116 | "\n",
117 | "# Print shape of brain time-series\n"
118 | ]
119 | },
120 | {
121 | "cell_type": "markdown",
122 | "metadata": {},
123 | "source": [
124 | "## Calculate seed to voxel correlations"
125 | ]
126 | },
127 | {
128 | "cell_type": "code",
129 | "execution_count": 7,
130 | "metadata": {},
131 | "outputs": [],
132 | "source": [
133 | "# Calculate Pearson product-moment correlation coefficient between seed and all voxel trime-series\n",
134 | "from scipy import stats\n",
135 | "\n",
136 | "corr_map = np.zeros(brain_timeseries.shape[1])\n",
137 | "\n",
138 | "for i in range(brain_timeseries.shape[1]):\n",
139 | " corr_map[i] = stats.pearsonr(seed_timeseries, brain_timeseries[:,i])[0]"
140 | ]
141 | },
142 | {
143 | "cell_type": "markdown",
144 | "metadata": {},
145 | "source": [
146 | "## Plot correlation using statistical map plot"
147 | ]
148 | },
149 | {
150 | "cell_type": "code",
151 | "execution_count": 2,
152 | "metadata": {},
153 | "outputs": [],
154 | "source": [
155 | "seed_to_voxel_correlations_img = brain_masker.inverse_transform(corr_map.T)\n",
156 | "\n",
157 | "# Plot correlation map using plot_stat_map\n",
158 | "\n",
159 | "\n",
160 | "# Add seed ROI marker with display.add_markers()\n"
161 | ]
162 | }
163 | ],
164 | "metadata": {
165 | "kernelspec": {
166 | "display_name": "Python 3",
167 | "language": "python",
168 | "name": "python3"
169 | },
170 | "language_info": {
171 | "codemirror_mode": {
172 | "name": "ipython",
173 | "version": 3
174 | },
175 | "file_extension": ".py",
176 | "mimetype": "text/x-python",
177 | "name": "python",
178 | "nbconvert_exporter": "python",
179 | "pygments_lexer": "ipython3",
180 | "version": "3.8.3"
181 | },
182 | "widgets": {
183 | "application/vnd.jupyter.widget-state+json": {
184 | "state": {},
185 | "version_major": 2,
186 | "version_minor": 0
187 | }
188 | }
189 | },
190 | "nbformat": 4,
191 | "nbformat_minor": 4
192 | }
193 |
--------------------------------------------------------------------------------
/06-machine_learning/07-fMRIDA_slides.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fMRIAnalysisCourse/fmri-analysis-course/5495887620b54bc3f6b5c83ed9fa35df149414c7/06-machine_learning/07-fMRIDA_slides.pdf
--------------------------------------------------------------------------------
/06-machine_learning/machine_learning_fMRI_template.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "# Some machine learning examples"
8 | ]
9 | },
10 | {
11 | "cell_type": "markdown",
12 | "metadata": {},
13 | "source": [
14 | "## Load libraries"
15 | ]
16 | },
17 | {
18 | "cell_type": "code",
19 | "execution_count": 4,
20 | "metadata": {},
21 | "outputs": [],
22 | "source": [
23 | "import numpy as np\n",
24 | "from nilearn import datasets\n",
25 | "from nilearn import input_data\n",
26 | "from nilearn import plotting"
27 | ]
28 | },
29 | {
30 | "cell_type": "markdown",
31 | "metadata": {},
32 | "source": [
33 | "## Load datasets"
34 | ]
35 | },
36 | {
37 | "cell_type": "code",
38 | "execution_count": 5,
39 | "metadata": {},
40 | "outputs": [],
41 | "source": [
42 | "# Load fMRI data\n",
43 | "dataset = datasets.fetch_development_fmri(n_subjects=1)\n",
44 | "func_filename = dataset.func[0]\n",
45 | "confounds_filename = dataset.confounds[0]\n",
46 | "\n",
47 | "# Load atlas data\n",
48 | "power = datasets.fetch_coords_power_2011()"
49 | ]
50 | },
51 | {
52 | "cell_type": "markdown",
53 | "metadata": {},
54 | "source": [
55 | "## Extract signals from parcellation"
56 | ]
57 | },
58 | {
59 | "cell_type": "code",
60 | "execution_count": 6,
61 | "metadata": {},
62 | "outputs": [
63 | {
64 | "data": {
65 | "text/plain": [
66 | "(168, 264)"
67 | ]
68 | },
69 | "execution_count": 6,
70 | "metadata": {},
71 | "output_type": "execute_result"
72 | }
73 | ],
74 | "source": [
75 | "# Extract coordinates\n",
76 | "coords = np.vstack((power.rois['x'], power.rois['y'], power.rois['z'])).T\n",
77 | "\n",
78 | "# Create masker object (spheres with 5 radius)\n",
79 | "spheres_masker = input_data.NiftiSpheresMasker(\n",
80 | " seeds=coords, radius=5, detrend=True, standardize=True)\n",
81 | "\n",
82 | "\n",
83 | "# Extract timeseries from ROIs\n",
84 | "timeseries = spheres_masker.fit_transform(func_filename)\n",
85 | "\n",
86 | "# Plot shape of timeseries\n",
87 | "timeseries.shape"
88 | ]
89 | },
90 | {
91 | "cell_type": "markdown",
92 | "metadata": {},
93 | "source": [
94 | "## Run k-means clustering on timeseries\n",
95 | "\n",
96 | "The `KMeans` algorithm clusters data by trying to separate samples in $n$ groups of equal variance, minimizing a criterion known as the inertia or within-cluster sum-of-squares. This algorithm requires the number of clusters to be specified. It scales well to large number of samples and has been used across a large range of application areas in many different fields ([more](https://scikit-learn.org/stable/modules/clustering.html#k-means)).\n"
97 | ]
98 | },
99 | {
100 | "cell_type": "code",
101 | "execution_count": 7,
102 | "metadata": {},
103 | "outputs": [
104 | {
105 | "data": {
106 | "text/plain": [
107 | "KMeans(n_clusters=5)"
108 | ]
109 | },
110 | "execution_count": 7,
111 | "metadata": {},
112 | "output_type": "execute_result"
113 | }
114 | ],
115 | "source": [
116 | "from sklearn.cluster import KMeans\n",
117 | "\n",
118 | "# Creare KMeans object and specify n_cluster as 5\n",
119 | "clustering = KMeans(n_clusters=5)\n",
120 | "\n",
121 | "# Cluster timeseries using .fit method\n",
122 | "clustering.fit(timeseries)"
123 | ]
124 | },
125 | {
126 | "cell_type": "code",
127 | "execution_count": 10,
128 | "metadata": {},
129 | "outputs": [
130 | {
131 | "data": {
132 | "text/plain": [
133 | "array([3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 2, 2, 2, 2, 4, 2,\n",
134 | " 4, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 4, 2, 2, 4, 4, 4, 2, 2, 2, 2, 4,\n",
135 | " 4, 4, 2, 2, 0, 2, 4, 4, 4, 2, 0, 2, 0, 2, 0, 2, 0, 4, 4, 4, 4, 2,\n",
136 | " 1, 1, 1, 2, 0, 0, 0, 0, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 4, 4, 2, 2,\n",
137 | " 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 4, 4, 2, 0, 0, 0, 0, 0,\n",
138 | " 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 1, 1, 1, 2, 2, 2,\n",
139 | " 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 3, 3, 0, 2, 2, 2, 3, 2, 2, 2,\n",
140 | " 3, 2, 2, 2, 0, 0, 0, 2, 2, 1, 1, 1, 3, 3], dtype=int32)"
141 | ]
142 | },
143 | "execution_count": 10,
144 | "metadata": {},
145 | "output_type": "execute_result"
146 | }
147 | ],
148 | "source": [
149 | "# Print clustering labels & shape\n",
150 | "clustering.labels_"
151 | ]
152 | },
153 | {
154 | "cell_type": "code",
155 | "execution_count": 11,
156 | "metadata": {},
157 | "outputs": [
158 | {
159 | "data": {
160 | "text/plain": [
161 | "KMeans(n_clusters=5)"
162 | ]
163 | },
164 | "execution_count": 11,
165 | "metadata": {},
166 | "output_type": "execute_result"
167 | }
168 | ],
169 | "source": [
170 | "# Cluster brain regions\n",
171 | "clustering.fit(timeseries.T)"
172 | ]
173 | },
174 | {
175 | "cell_type": "code",
176 | "execution_count": 12,
177 | "metadata": {},
178 | "outputs": [
179 | {
180 | "data": {
181 | "text/plain": [
182 | "array([2, 2, 3, 0, 2, 3, 3, 1, 2, 2, 0, 4, 1, 3, 4, 4, 4, 2, 1, 2, 1, 4,\n",
183 | " 4, 4, 3, 1, 4, 4, 4, 1, 0, 1, 1, 0, 0, 4, 2, 0, 4, 0, 4, 3, 4, 4,\n",
184 | " 3, 3, 4, 3, 2, 4, 4, 3, 2, 3, 3, 3, 2, 3, 3, 3, 0, 3, 4, 2, 3, 2,\n",
185 | " 3, 3, 3, 4, 3, 1, 0, 1, 1, 0, 4, 2, 0, 0, 2, 2, 0, 0, 3, 0, 0, 0,\n",
186 | " 0, 1, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 2, 2, 0, 3, 3,\n",
187 | " 0, 0, 3, 0, 0, 0, 4, 0, 1, 2, 4, 3, 2, 4, 1, 2, 3, 2, 0, 0, 0, 2,\n",
188 | " 0, 0, 0, 0, 0, 2, 2, 1, 2, 2, 4, 1, 4, 4, 1, 4, 1, 1, 4, 4, 1, 1,\n",
189 | " 1, 3, 1, 1, 3, 4, 1, 1, 4, 1, 2, 4, 4, 1, 1, 4, 1, 1, 1, 0, 3, 3,\n",
190 | " 0, 0, 1, 3, 3, 2, 2, 3, 3, 1, 1, 3, 3, 4, 1, 0, 4, 0, 0, 0, 3, 0,\n",
191 | " 1, 3, 0, 0, 3, 3, 4, 3, 3, 3, 3, 3, 3, 4, 3, 3, 4, 3, 3, 3, 3, 0,\n",
192 | " 0, 2, 4, 1, 4, 2, 2, 2, 4, 3, 3, 4, 4, 3, 1, 1, 3, 1, 1, 3, 3, 2,\n",
193 | " 2, 2, 4, 2, 1, 2, 2, 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4],\n",
194 | " dtype=int32)"
195 | ]
196 | },
197 | "execution_count": 12,
198 | "metadata": {},
199 | "output_type": "execute_result"
200 | }
201 | ],
202 | "source": [
203 | "# Print clustering labels & shape\n",
204 | "clustering.labels_"
205 | ]
206 | },
207 | {
208 | "cell_type": "markdown",
209 | "metadata": {},
210 | "source": [
211 | "## Run PCA on timeseries\n",
212 | "\n",
213 | "PCA - linear dimensionality reduction using Singular Value Decomposition of the data to project it to a lower dimensional space."
214 | ]
215 | },
216 | {
217 | "cell_type": "code",
218 | "execution_count": 23,
219 | "metadata": {},
220 | "outputs": [
221 | {
222 | "data": {
223 | "text/plain": [
224 | "PCA(copy=True, iterated_power='auto', n_components=10, random_state=None,\n",
225 | " svd_solver='auto', tol=0.0, whiten=False)"
226 | ]
227 | },
228 | "execution_count": 23,
229 | "metadata": {},
230 | "output_type": "execute_result"
231 | }
232 | ],
233 | "source": [
234 | "from sklearn.decomposition import PCA \n",
235 | "\n",
236 | "decomposition = PCA(n_components=10)\n",
237 | "decomposition.fit(timeseries)\n",
238 | "\n",
239 | "# Print shape of components\n",
240 | "\n",
241 | "# Print variance eplained by each component"
242 | ]
243 | }
244 | ],
245 | "metadata": {
246 | "kernelspec": {
247 | "display_name": "Python 3",
248 | "language": "python",
249 | "name": "python3"
250 | },
251 | "language_info": {
252 | "codemirror_mode": {
253 | "name": "ipython",
254 | "version": 3
255 | },
256 | "file_extension": ".py",
257 | "mimetype": "text/x-python",
258 | "name": "python",
259 | "nbconvert_exporter": "python",
260 | "pygments_lexer": "ipython3",
261 | "version": "3.8.3"
262 | },
263 | "widgets": {
264 | "application/vnd.jupyter.widget-state+json": {
265 | "state": {},
266 | "version_major": 2,
267 | "version_minor": 0
268 | }
269 | }
270 | },
271 | "nbformat": 4,
272 | "nbformat_minor": 4
273 | }
274 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 fMRIAnalysisCource
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # fMRI data analysis course
2 |
3 | Materials for *fMRI data analysis* course taught at [Nicolaus Copernicus University](https://www.umk.pl/en/) in Toruń
4 | for cognitive science students (including first-year students). The course covers fundamental topics in fMRI
5 | data analysis (in Python).
6 |
7 | ### The Hogwarts way
8 | I called the way of teaching the course *the Hogwarts way*. It refers to the fact
9 | that for most participants, the fMRI data analysis, python programming, version control, etc. was like magic at the beginning of the course.
10 | The goal of the course was to introduce topics of fMRI data analysis, reproducibility,
11 | Python, and version control, giving students a lot of **FUN** and freedom.
12 |
13 |
14 | The most important goal of the course was to reduce the initial fear of trying something
15 | entirely new, which is, in fact, quite complex.
16 |
17 |
18 | :warning: **Content warning**:
19 | The course includes a lot of *Harry Potter* content not suitable for muggles
20 | and too serious people.
21 |
22 | ### How to become *neuroinfomagician*?
23 |
24 | 
25 |
26 |
27 | ## General information
28 |
29 | The course was supported by [DataCamp Classroom](datacamp.com/groups/education) and
30 | [GitHub Education](https://education.github.com/).
31 |
32 |
33 | #### Time
34 | - **Lectures and practice**: 30h (split into 3h sessions, every two weeks)
35 | - **Homework** (Jupyter Notebooks share via GitHub Classroom, DataCamp Python courses, poster preparation): ~50h (self work)
36 | - **Total time required to finish the course**: ~80h
37 |
38 | #### Grading
39 | Activity + Homework + Poster + Magic
40 |
41 |
42 |
43 | ## Content
44 |
45 | ### I. [Introduction to neuroimaging](https://github.com/fMRIAnalysisCourse/fmri-analysis-course/blob/master/00-introduction/00-fMRIDA_slides.pdf) & [open science](https://github.com/fMRIAnalysisCourse/fmri-analysis-course/blob/master/01-reproducible_neuroimaging/01-fMRIDA_slides.pdf) (3h)
46 |
47 | ##### Tools:
48 | [Jupyter lab](https://jupyterlab.readthedocs.io/en/stable/),
49 | [Markdown](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet),
50 | [GitHub](https://github.com/)
51 |
52 | ##### Homework:
53 | - GitHub Classroom: [fMRI Q&A in Markdown](https://github.com/fMRIAnalysisCourse/01-homework/blob/master/01-fMRIDA_homework.ipynb)
54 | - DataCamp Classroom: [Introduction to Python](https://learn.datacamp.com/courses/intro-to-python-for-data-science)
55 | - DataCamp Classroom: [Intermediate Python](https://learn.datacamp.com/courses/intermediate-python)
56 |
57 | ### II. [fMRI data manipulation in Python](https://github.com/fMRIAnalysisCourse/fmri-analysis-course/blob/master/02-fmri_data_manipulation_in_python/fMRIDA_27-03-2020.pdf) (3h)
58 |
59 | ##### Tools:
60 | [Matplotlib](https://matplotlib.org/),
61 | [Numpy](https://numpy.org/),
62 | [Nibabel](https://nipy.org/nibabel/),
63 | [Nilearn](https://nilearn.github.io/),
64 | [Pandas](https://pandas.pydata.org/)
65 |
66 | ##### Practice:
67 | - [Structural MRI manipulation](https://github.com/fMRIAnalysisCourse/fmri-analysis-course/blob/master/02-fmri_data_manipulation_in_python/00-structural_mri_manipulation_solution.ipynb)
68 | - [Functional MRI manipulation](https://github.com/fMRIAnalysisCourse/fmri-analysis-course/blob/master/02-fmri_data_manipulation_in_python/01-functional_mri_manipulation_solution.ipynb)
69 | - [Dataframes manipulation in Pandas](https://github.com/fMRIAnalysisCourse/fmri-analysis-course/blob/master/02-fmri_data_manipulation_in_python/02-data_frames_manipulation_solution.ipynb)
70 |
71 | ##### Homework:
72 | - GitHub Classroom: [fMRI data manipulation in Python](https://github.com/fMRIAnalysisCourse/02-homework)
73 | - DataCamp Classroom: [Introduction to Data Visualization with Matplotlib](https://learn.datacamp.com/courses/introduction-to-data-visualization-with-matplotlib)
74 |
75 | ### III. [fMRI data preprocessing](https://github.com/fMRIAnalysisCourse/fmri-analysis-course/blob/master/03-fmri_data_preprocessing/fMRIDA_10-04-2020_%233.pdf) (3h)
76 | ##### Tools:
77 | [Nipype](https://nipype.readthedocs.io/en/latest/),
78 | [Porcupine](https://giraffe.tools/porcupine/TimVanMourik/SomeGiraffeExample),
79 | [fMRIPrep](https://fmriprep.readthedocs.io/en/stable/)
80 |
81 | ##### Practice:
82 | - [Linear transformations in Python](https://github.com/fMRIAnalysisCourse/fmri-analysis-course/blob/master/03-fmri_data_preprocessing/linear_transformations.ipynb)
83 | - [Preprocessing with Nipype](https://github.com/fMRIAnalysisCourse/fmri-analysis-course/blob/master/03-fmri_data_preprocessing/fmri_preprocessing_nipype.ipynb)
84 |
85 | ##### Homework:
86 | - YouTube: [3Blue1Brown: Essence of Linear Algebra](https://www.youtube.com/watch?v=fNk_zzaMoSs&list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab)
87 | - DataCamp Classroom: [Exploratory Data Analysis in Python](https://learn.datacamp.com/courses/exploratory-data-analysis-in-python)
88 |
89 | ### IV. General Linear Model [Part 1](https://github.com/fMRIAnalysisCourse/fmri-analysis-course/blob/master/04-general_linear_model/fMRIDA_24-04-2020_%234.pdf) & [Part 2](https://github.com/fMRIAnalysisCourse/fmri-analysis-course/blob/master/04-general_linear_model/fMRIDA_08-05-2020_%235.pdf) (3h + 3h)
90 |
91 | ##### Tools:
92 | [Nistats](https://nistats.github.io/),
93 | [Nilearn](https://nilearn.github.io/),
94 | [Sklearn](https://scikit-learn.org/stable/)
95 |
96 | ##### Practice:
97 | - [Simple linear regression](https://github.com/fMRIAnalysisCourse/fmri-analysis-course/blob/master/04-general_linear_model/simple_linear_regression.ipynb)
98 | - [Multiple linear regression](https://github.com/fMRIAnalysisCourse/fmri-analysis-course/blob/master/04-general_linear_model/multiple_linear_regression.ipynb)
99 | - [GLM on fMRI data](https://github.com/fMRIAnalysisCourse/fmri-analysis-course/blob/master/04-general_linear_model/glm_on_fMRI_data.ipynb)
100 |
101 | ##### Homework:
102 | - GitHub Classroom: [Linear & multiple linear regression](https://github.com/fMRIAnalysisCourse/03-homework)
103 | - GitHub Classroom: [GLM analysis & fMRI results plotting](https://github.com/fMRIAnalysisCourse/04-homework)
104 | - DataCamp Classroom: [Introduction to Linear Modeling in Python](https://learn.datacamp.com/courses/introduction-to-linear-modeling-in-python)
105 | - DataCamp Classroom: [Statistical Thinking in Python (Part 1)](https://learn.datacamp.com/courses/statistical-thinking-in-python-part-1)
106 |
107 | ### V. [Functional connectivity](https://github.com/fMRIAnalysisCourse/fmri-analysis-course/blob/master/05-functional_connectivity/fMRIDA_05-06-2020_%236.pdf) & [machine learning on fMRI data ](https://github.com/fMRIAnalysisCourse/fmri-analysis-course/blob/master/06-machine_learning/fMRIDA_05-06-2020_%237.pdf) (3h)
108 | ##### Tools:
109 | [Nilearn](https://nilearn.github.io/),
110 | [Scipy](https://www.scipy.org/)
111 |
112 | ##### Practice:
113 | - [Brain parcellations](https://github.com/fMRIAnalysisCourse/fmri-analysis-course/blob/master/05-functional_connectivity/brain_parcellations.ipynb)
114 | - [Seed-seed connectivity](https://github.com/fMRIAnalysisCourse/fmri-analysis-course/blob/master/05-functional_connectivity/seed-seed_connectivity.ipynb)
115 | - [Seed-voxel connectivity](https://github.com/fMRIAnalysisCourse/fmri-analysis-course/blob/master/05-functional_connectivity/seed-voxel_connectivity.ipynb)
116 | - [ML on fMRI data](https://github.com/fMRIAnalysisCourse/fmri-analysis-course/blob/master/06-machine_learning/machine_learning_fMRI.ipynb)
117 |
118 | ##### Homework:
119 | - GitHub Classroom: [Seed-based functional connectivity](https://github.com/fMRIAnalysisCourse/05-homework)
120 | - Poster assignment
121 |
--------------------------------------------------------------------------------
/data/harry.npy:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fMRIAnalysisCourse/fmri-analysis-course/5495887620b54bc3f6b5c83ed9fa35df149414c7/data/harry.npy
--------------------------------------------------------------------------------
/data/james.npy:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fMRIAnalysisCourse/fmri-analysis-course/5495887620b54bc3f6b5c83ed9fa35df149414c7/data/james.npy
--------------------------------------------------------------------------------
/data/lilly.npy:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fMRIAnalysisCourse/fmri-analysis-course/5495887620b54bc3f6b5c83ed9fa35df149414c7/data/lilly.npy
--------------------------------------------------------------------------------
/data/sub-01_T1w_space-MNI152NLin2009cAsym_preproc.nii.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fMRIAnalysisCourse/fmri-analysis-course/5495887620b54bc3f6b5c83ed9fa35df149414c7/data/sub-01_T1w_space-MNI152NLin2009cAsym_preproc.nii.gz
--------------------------------------------------------------------------------
/data/sub-01_ses-1_task-rest_bold_space-MNI152NLin2009cAsym_preproc.nii.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fMRIAnalysisCourse/fmri-analysis-course/5495887620b54bc3f6b5c83ed9fa35df149414c7/data/sub-01_ses-1_task-rest_bold_space-MNI152NLin2009cAsym_preproc.nii.gz
--------------------------------------------------------------------------------
/data/syrius.npy:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fMRIAnalysisCourse/fmri-analysis-course/5495887620b54bc3f6b5c83ed9fa35df149414c7/data/syrius.npy
--------------------------------------------------------------------------------
/data/voldemort.npy:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fMRIAnalysisCourse/fmri-analysis-course/5495887620b54bc3f6b5c83ed9fa35df149414c7/data/voldemort.npy
--------------------------------------------------------------------------------
/images/fMRIDA_study_plan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/fMRIAnalysisCourse/fmri-analysis-course/5495887620b54bc3f6b5c83ed9fa35df149414c7/images/fMRIDA_study_plan.png
--------------------------------------------------------------------------------
/solutions/seed-voxel_connectivity_solution.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "markdown",
5 | "metadata": {},
6 | "source": [
7 | "# Seed-voxel functional connectivity"
8 | ]
9 | },
10 | {
11 | "cell_type": "markdown",
12 | "metadata": {},
13 | "source": [
14 | "## Load libraries"
15 | ]
16 | },
17 | {
18 | "cell_type": "code",
19 | "execution_count": 1,
20 | "metadata": {},
21 | "outputs": [],
22 | "source": [
23 | "import numpy as np\n",
24 | "from nilearn import datasets\n",
25 | "from nilearn import input_data\n",
26 | "from nilearn.connectome import ConnectivityMeasure\n",
27 | "from nilearn import plotting"
28 | ]
29 | },
30 | {
31 | "cell_type": "markdown",
32 | "metadata": {},
33 | "source": [
34 | "## Load data"
35 | ]
36 | },
37 | {
38 | "cell_type": "code",
39 | "execution_count": 2,
40 | "metadata": {},
41 | "outputs": [],
42 | "source": [
43 | "# Load fMRI data\n",
44 | "dataset = datasets.fetch_development_fmri(n_subjects=1)\n",
45 | "func_filename = dataset.func[0]\n",
46 | "confounds_filename = dataset.confounds[0]"
47 | ]
48 | },
49 | {
50 | "cell_type": "markdown",
51 | "metadata": {},
52 | "source": [
53 | "## Create a seed"
54 | ]
55 | },
56 | {
57 | "cell_type": "code",
58 | "execution_count": 3,
59 | "metadata": {},
60 | "outputs": [],
61 | "source": [
62 | "pcc_coords = [(0, -52, 18)]\n",
63 | "seed_masker = input_data.NiftiSpheresMasker(\n",
64 | " pcc_coords, radius=8,\n",
65 | " detrend=True, standardize=True)"
66 | ]
67 | },
68 | {
69 | "cell_type": "markdown",
70 | "metadata": {},
71 | "source": [
72 | "## Extract timeseries from a seed"
73 | ]
74 | },
75 | {
76 | "cell_type": "code",
77 | "execution_count": 4,
78 | "metadata": {},
79 | "outputs": [],
80 | "source": [
81 | "seed_timeseries = seed_masker.fit_transform(func_filename,\n",
82 | " confounds=confounds_filename)\n",
83 | "seed_timeseries = np.squeeze(seed_timeseries)"
84 | ]
85 | },
86 | {
87 | "cell_type": "markdown",
88 | "metadata": {},
89 | "source": [
90 | "## Estract timeseries from the whole brain"
91 | ]
92 | },
93 | {
94 | "cell_type": "code",
95 | "execution_count": 5,
96 | "metadata": {},
97 | "outputs": [],
98 | "source": [
99 | "brain_masker = input_data.NiftiMasker(\n",
100 | " smoothing_fwhm=8,\n",
101 | " detrend=True, standardize=True,\n",
102 | " memory='nilearn_cache', memory_level=1, verbose=0)\n",
103 | "\n",
104 | "brain_timeseries = brain_masker.fit_transform(func_filename,\n",
105 | " confounds=confounds_filename)"
106 | ]
107 | },
108 | {
109 | "cell_type": "code",
110 | "execution_count": 6,
111 | "metadata": {},
112 | "outputs": [
113 | {
114 | "name": "stdout",
115 | "output_type": "stream",
116 | "text": [
117 | "(168,)\n",
118 | "(168, 32504)\n"
119 | ]
120 | }
121 | ],
122 | "source": [
123 | "# Print shape of seed time-series\n",
124 | "print(seed_timeseries.shape)\n",
125 | "\n",
126 | "# Print shape of brain time-series\n",
127 | "print(brain_timeseries.shape)"
128 | ]
129 | },
130 | {
131 | "cell_type": "markdown",
132 | "metadata": {},
133 | "source": [
134 | "## Calculate seed to voxel correlations"
135 | ]
136 | },
137 | {
138 | "cell_type": "code",
139 | "execution_count": 7,
140 | "metadata": {},
141 | "outputs": [],
142 | "source": [
143 | "# Calculate Pearson product-moment correlation coefficient between seed and all voxel trime-series\n",
144 | "from scipy import stats\n",
145 | "\n",
146 | "corr_map = np.zeros(brain_timeseries.shape[1])\n",
147 | "\n",
148 | "for i in range(brain_timeseries.shape[1]):\n",
149 | " corr_map[i] = stats.pearsonr(seed_timeseries, brain_timeseries[:,i])[0]"
150 | ]
151 | },
152 | {
153 | "cell_type": "markdown",
154 | "metadata": {},
155 | "source": [
156 | "## Plot correlation using statistical map plot"
157 | ]
158 | },
159 | {
160 | "cell_type": "code",
161 | "execution_count": 12,
162 | "metadata": {},
163 | "outputs": [
164 | {
165 | "data": {
166 | "image/png": "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wTjhhBPQtm1bNGjQIPB3J3OYO3cuFi5cGB3oPPjgg/joo4/K5c911113oWPHjmjbti3OOOMMjBs3rsaEwO+3334BP6+cnBzk5OSgTp06qFOnTvTz7t27sXv3bqxfvx7r16+vxhY7juOkDjNBW//SSU6pldaymvn6669x+OGH45tvvonWo3GcbOfdd98FECvbQv8FzWlCa/jTTz8FEBnkO05VwUCPZs2aAYhldtYpXKo0GnFFPxumb6DKoso8U1ssWbIEr776KoDYs8F0I/T50egwTWzLY2jqEAZAsC2cVq5tKURqCh179MDvPvzQ/Pv9PXrgwzL+Xh5q5BRYSUkJHnzwQQwYMMAHP44TB+V7K20/5XpGEPrAx3GcTCKrfYB27tyJFi1aoG3btli4cGF1N8dxHCejuf/++/Hcc89hzZo1aNasGW688UaMGzcu+vd27dph06ZNURXx5JNPjtYC21c00OOZZ54BEIsW00gsHpuKJlUX5v9hMtiyoOqp5Xu4TzUeqPTQaKDqxGMz4oy+PmPGjAltg1NxwjJBp5MaNwDaf//9Q6O4HCdbOfnkk1Na76ijjqrkljiZQmlpKaZNGf+j7gAABSlJREFUm4ZjjjkGK1euRO/evdG6detASYZ58+bVyNQfTvYRlgk63cdyHMdxaigvvvgirr322ujnwsJCnHTSSViyZElK28eXVOnSpQsuueQS/OUvf6nSmlTx7a8sBg8eHPg8adIkALGkplSbNPEs8/mwPJCnFIlQWlqK0aNH4/XXX0ejRo0wdepUHHfccQnrvf322xg7diz27t2L7t2745lnnkHdunVx//33R4NPioqK8Pnnn2Pz5s2hFRaqUgGqsVFgjuM4TmT6Z8eOHdixYwc2bNiADh06YODAgbj33ntx0EEHmf+SUVpaiqVLlybktbrqqqvQvHlz9O7dG5988klVnFZa6NatW5mZ0519Z8GCBVixYgVWrFiBSZMmJc0iX1JSgiFDhmDWrFn4xz/+gbZt2+K5554DAIwbNw7Lly/H8uXLcc899+CMM85IqbxUVUaBuQLkOI6TAZSUlODKK69Er169cMMNNwAAxo8fX6593HnnnSgpKcGwYcOi373wwgs47rjjUFpaikceeQR9+vTBF198YQ6iahJlZU2//vrrq7AltY+5c+di8ODByMnJwYknnoht27Zh48aN0VxPQCQyrkGDBtEqCueeey7uueeeBMVv5syZKSdjzfpM0I7jOE6QX/3qV9i+ffs+5yibOHEipk2bhqVLlwaSAJ5yyinR///yl7/Ec889h6VLl+Kiiy6qcJudzGX9+vXRUicAkJ+fj/Xr1wcGQM2aNUNhYSE+/PBD9OjRA7Nnz47WHSS7du3CwoULMXHixJSO26JZM5zTo4f5d6ZWSAc+AHIcx6nhzJo1CzNnzsQHH3wQzab8u9/9Dr/73e/MbeKDSZ599lnce++9ePfdd5Gfn1/msbRUkJOdJOsDmnYjJycHs2bNwq233oo9e/agd+/e0Wg7Mm/ePJxyyikpTX8BqNLob/cBchzHqcF8/PHHGDVqFObMmYPmzZtHv7/jjjuivkHJ/pEXXngBd9xxBxYtWoQOHToE9v3111/jL3/5C/bu3Yt///vfuP/++7Fly5aAKuRkD4899ljUryovLy+g5qxbtw55eXkJ25x00klYunQp3n//fZx++uno3Llz4O+zZs2qsbUIfQDkOI5Tg5k7dy62bt2KU089FY0bN0bjxo1x/vnnp7z9f/7nf+K7775Dz549o9uPGDECQCTnzciRI9GkSRO0atUKCxcuxIIFC3DwwQdX1uk4NZibbrop6rjcr18/TJs2DaWlpXjvvfdw4IEHBqa/CDNj79mzB/fdd1+0bwFAQUEB3nnnnUDtzZpEjS2F4TiO4zhO9VBaWoqbb74ZCxcuRKNGjTBlyhT0+NE3p2/fvpg8eTLy8vIwbtw4zJ8/HyUlJRg5cmQgYeTUqVOxcOFCzJo1q7pOo0x8AOQ4juM4TtbhU2CO4ziO42QdPgByHMdxHCfr8AGQ4ziO4zhZhw+AHMdxHMfJOnwA5DiO4zhO1uEDIMdxHMdxsg4fADmO4ziOk3X4AMhxHMdxnKzDB0CO4ziO42QdPgByHMdxHCfr8AGQ4ziO4zhZhw+AHMdxHMfJOnwA5DiO4zhO1uEDIMdxHMdxsg4fADmO4ziOk3X4AMhxHMdxnKzDB0CO4ziO42QdPgByHMdxHCfr8AGQ4ziO4zhZhw+AHMdxHMfJOnwA5DiO4zhO1uEDIMdxHMdxsg4fADmO4ziOk3X4AMhxHMdxnKzDB0CO4ziO42QdPgByHMdxHCfr8AGQ4ziO4zhZhw+AHMdxHMfJOv4/1zgWfYoi+aEAAAAASUVORK5CYII=\n",
167 | "text/plain": [
168 | ""
169 | ]
170 | },
171 | "metadata": {},
172 | "output_type": "display_data"
173 | }
174 | ],
175 | "source": [
176 | "seed_to_voxel_correlations_img = brain_masker.inverse_transform(corr_map.T)\n",
177 | "\n",
178 | "# Plot correlation map using plot_stat_map\n",
179 | "display = plotting.plot_stat_map(seed_to_voxel_correlations_img, threshold=0.4)\n",
180 | "\n",
181 | "# Add seed ROI marker with display.add_markers()\n",
182 | "display.add_markers(pcc_coords, marker_color='g', marker_size=100)"
183 | ]
184 | }
185 | ],
186 | "metadata": {
187 | "kernelspec": {
188 | "display_name": "Python 3",
189 | "language": "python",
190 | "name": "python3"
191 | },
192 | "language_info": {
193 | "codemirror_mode": {
194 | "name": "ipython",
195 | "version": 3
196 | },
197 | "file_extension": ".py",
198 | "mimetype": "text/x-python",
199 | "name": "python",
200 | "nbconvert_exporter": "python",
201 | "pygments_lexer": "ipython3",
202 | "version": "3.8.3"
203 | },
204 | "widgets": {
205 | "application/vnd.jupyter.widget-state+json": {
206 | "state": {},
207 | "version_major": 2,
208 | "version_minor": 0
209 | }
210 | }
211 | },
212 | "nbformat": 4,
213 | "nbformat_minor": 4
214 | }
215 |
--------------------------------------------------------------------------------