Skip to content
This repository was archived by the owner on Dec 27, 2022. It is now read-only.

Commit 078f814

Browse files
authored
Merge pull request #37 from akeshavan/wip_many
enh: a variety of new features (oops)
2 parents d9e0b99 + 2bde713 commit 078f814

File tree

16 files changed

+765
-74
lines changed

16 files changed

+765
-74
lines changed

Dockerfile-dmriprep

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
FROM dmriprep:dev
2+
3+
ADD . /dmriprep
4+
WORKDIR /dmriprep
5+
RUN /neurodocker/startup.sh python setup.py install
6+
WORKDIR /

Makefile

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,3 +86,9 @@ dist: clean ## builds source and wheel package
8686

8787
install: clean ## install the package to the active Python's site-packages
8888
python setup.py install
89+
90+
docker-dev: ## build the development environment
91+
docker build -t dmriprep:dev -f docker/Dockerfile docker/.
92+
93+
docker: docker-dev
94+
docker build -t dmriprep:prod -f Dockerfile-dmriprep .

dmriprep/cli.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import click
66
from . import run
77
from . import io
8+
from .data import get_dataset
89
import os
910

1011

@@ -50,6 +51,13 @@ def main(participant_label, bids_dir, output_dir, analysis_level="participant"):
5051

5152
return 0
5253

54+
@click.command()
55+
@click.argument('output_dir',
56+
)
57+
def data(output_dir):
58+
get_dataset(os.path.abspath(output_dir))
59+
print('done')
60+
5361

5462
if __name__ == "__main__":
5563
sys.exit(main()) # pragma: no cover

dmriprep/qc.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,7 @@ def createB0_ColorFA_Mask_Sprites(b0_file, colorFA_file, mask_file):
212212

213213
def create_report_json(dwi_corrected_file, eddy_rms, eddy_report,
214214
color_fa_file, anat_mask_file,
215+
outlier_indices,
215216
outpath=op.abspath('./report.json')):
216217

217218
report = {}
@@ -223,6 +224,7 @@ def create_report_json(dwi_corrected_file, eddy_rms, eddy_report,
223224
report['b0'] = b0
224225
report['colorFA'] = colorFA
225226
report['anat_mask'] = mask
227+
report['outlier_volumes'] = outlier_indices.tolist()
226228

227229
with open(eddy_report, 'r') as f:
228230
report['eddy_report'] = f.readlines()

dmriprep/run.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,7 @@ def drop_outliers_fn(in_file, in_bval, in_bvec, drop_scans):
379379
import nibabel as nib
380380
import numpy as np
381381
import os.path as op
382+
from nipype.utils.filemanip import fname_presuffix
382383

383384
img = nib.load(op.abspath(in_file))
384385
img_data = img.get_fdata()
@@ -387,17 +388,17 @@ def drop_outliers_fn(in_file, in_bval, in_bvec, drop_scans):
387388

388389
root, ext1 = op.splitext(in_file)
389390
root, ext0 = op.splitext(root)
390-
out_file = ''.join([root + "_thinned", ext0, ext1])
391+
out_file = fname_presuffix(in_file, suffix="_thinned", newpath=op.abspath('.')) #''.join([root + "_thinned", ext0, ext1])
391392
nib.save(img_thinned, op.abspath(out_file))
392393

393394
bval = np.loadtxt(in_bval)
394395
bval_thinned = np.delete(bval, drop_scans, axis=0)
395-
out_bval = '_thinned'.join(op.splitext(in_bval))
396+
out_bval = fname_presuffix(in_bval, suffix="_thinned", newpath=op.abspath('.'))
396397
np.savetxt(out_bval, bval_thinned)
397398

398399
bvec = np.loadtxt(in_bvec)
399400
bvec_thinned = np.delete(bvec, drop_scans, axis=1)
400-
out_bvec = '_thinned'.join(op.splitext(in_bvec))
401+
out_bvec = fname_presuffix(in_bvec, suffix="_thinned", newpath=op.abspath('.'))
401402
np.savetxt(out_bvec, bvec_thinned)
402403

403404
return out_file, out_bval, out_bvec
@@ -546,24 +547,25 @@ def get_orig(subjects_dir, sub):
546547
wf.connect(convert1, "out_file", datasink, "dmriprep.anat.@anat")
547548

548549
def reportNodeFunc(dwi_corrected_file, eddy_rms, eddy_report,
549-
color_fa_file, anat_mask_file):
550+
color_fa_file, anat_mask_file, outlier_indices):
550551
from dmriprep.qc import create_report_json
551552

552553
report = create_report_json(dwi_corrected_file, eddy_rms, eddy_report,
553-
color_fa_file, anat_mask_file)
554+
color_fa_file, anat_mask_file, outlier_indices)
554555
return report
555556

556557
reportNode = pe.Node(niu.Function(
557558
input_names=['dwi_corrected_file', 'eddy_rms',
558559
'eddy_report', 'color_fa_file',
559-
'anat_mask_file'],
560+
'anat_mask_file', 'outlier_indices'],
560561
output_names=['report'],
561562
function=reportNodeFunc
562563
), name="reportJSON")
563564

564565
wf.connect(prep, "outputnode.out_file", reportNode, 'dwi_corrected_file')
565566
wf.connect(prep, "fsl_eddy.out_movement_rms", reportNode, 'eddy_rms')
566567
wf.connect(prep, "fsl_eddy.out_outlier_report", reportNode, 'eddy_report')
568+
wf.connect(id_outliers_node, 'drop_scans', reportNode, 'outlier_indices')
567569
wf.connect(threshold2, "binary_file", reportNode, 'anat_mask_file')
568570
wf.connect(get_tensor, "color_fa_file", reportNode, 'color_fa_file')
569571

@@ -574,5 +576,5 @@ def reportNodeFunc(dwi_corrected_file, eddy_rms, eddy_report,
574576
wf.run()
575577

576578
copyfile(bval_file, op.join(
577-
out_dir, "dmriprep", "dwi", op.split(bval_file)[1]
579+
op.abspath(out_dir), "dmriprep", "dwi", op.split(bval_file)[1]
578580
))

dmriprepViewer/package-lock.json

Lines changed: 4 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dmriprepViewer/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
"dependencies": {
1717
"axios": "^0.18.0",
1818
"bootstrap-vue": "^2.0.0-rc.11",
19+
"brainsprite.js": "git+https://[email protected]/SIMEXP/brainsprite.js.git",
1920
"d3": "^5.7.0",
2021
"vue": "^2.5.2",
2122
"vue-router": "^3.0.1",

dmriprepViewer/src/App.vue

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
<script>
88
import Vue from 'vue';
99
import BootstrapVue from 'bootstrap-vue';
10+
// eslint-disable-next-line
1011
import 'bootstrap/dist/css/bootstrap.css';
1112
import 'bootstrap-vue/dist/bootstrap-vue.css';
1213
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
<template>
2+
<div class="brainsprite">
3+
<div v-if="!done">Hold on...</div>
4+
<canvas :id="id"></canvas>
5+
<img :id="id+'_spriteImg'"
6+
class="hidden"
7+
:src="'data:image/png;base64,' + base"
8+
v-if="showOrig"
9+
/>
10+
<img :id="id+'_overlayImg'"
11+
class="hidden"
12+
v-if="overlay && showOrig"
13+
:src="'data:image/png;base64,' + overlay"
14+
/>
15+
</div>
16+
</template>
17+
18+
<style scoped>
19+
.hidden {
20+
visibility: hidden;
21+
/* display: none; */
22+
}
23+
canvas {
24+
width: 100%;
25+
}
26+
img {
27+
/* width: 10px;
28+
height: 10px; */
29+
}
30+
</style>
31+
32+
<script>
33+
import brainsprite from './brainsprite';
34+
35+
export default {
36+
name: 'brainsprite',
37+
props: ['base', 'overlay', 'id',
38+
'base_dim_x', 'base_dim_y',
39+
'overlay_dim_x', 'overlay_dim_y'],
40+
data() {
41+
return {
42+
brain: null,
43+
showOrig: true,
44+
done: false,
45+
};
46+
},
47+
methods: {
48+
initBrainSprite() {
49+
/* eslint-disable-next-line */
50+
const brain = new brainsprite({
51+
canvas: this.id,
52+
sprite: `${this.id}_spriteImg`,
53+
nbSlice: { Y: this.base_dim_x, Z: this.base_dim_y },
54+
overlay: {
55+
sprite: `${this.id}_overlayImg`,
56+
nbSlice: { Y: this.overlay_dim_x, Z: this.overlay_dim_y },
57+
opacity: 0.5,
58+
},
59+
});
60+
this.brain = brain;
61+
this.showOrig = false;
62+
this.done = true;
63+
},
64+
},
65+
mounted() {
66+
this.$nextTick(() => {
67+
setTimeout(() => { this.initBrainSprite(); }, 1);
68+
});
69+
},
70+
};
71+
</script>

dmriprepViewer/src/components/HelloWorld.vue

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
</b-input-group-append>
1818
</b-input-group>
1919

20-
<report v-if="report.b0" :report="report"></report>
20+
<report v-if="report.b0" :reportProp="report"></report>
2121
</b-container>
2222
</template>
2323

@@ -27,6 +27,7 @@ import sprite4d from './Sprite4D';
2727
import lineChart from './LineChart';
2828
import report from './Report';
2929
30+
3031
export default {
3132
name: 'HelloWorld',
3233
components: {

0 commit comments

Comments
 (0)