-
Notifications
You must be signed in to change notification settings - Fork 4
/
analysis_ecosystem.html
2442 lines (2350 loc) · 164 KB
/
analysis_ecosystem.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE html>
<html class="no-js" lang="en">
<head>
<title>Brain Image Library: Computing and Visualization</title>
<meta http-equiv="x-ua-compatible" content="ie=edge"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-R1YK9CG4GL"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-R1YK9CG4GL');
</script>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Raleway:400,800"/>
<link rel='stylesheet' href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css"/>
<link rel="stylesheet" href="/css/bootstrap.css"/>
<link rel="stylesheet" href="/css/styles.css"/>
<link rel="stylesheet" href="/my.css"/>
<style>
@import url(https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,500,500i|Source+Code+Pro:300,400,500|Source+Sans+Pro:300,300i,400,400i,600,600i|Source+Serif+Pro&subset=latin-ext);.hljs{background:#fff;color:#333;display:block;overflow-x:auto;padding:.5em}.hljs-comment,.hljs-meta{color:#969896}.hljs-emphasis,.hljs-quote,.hljs-string,.hljs-strong,.hljs-template-variable,.hljs-variable{color:#df5000}.hljs-keyword,.hljs-selector-tag,.hljs-type{color:#a71d5d}.hljs-attribute,.hljs-bullet,.hljs-literal,.hljs-number,.hljs-symbol{color:#0086b3}.hljs-built_in,.hljs-builtin-name{color:#005cc5}.hljs-name,.hljs-section{color:#63a35c}.hljs-tag{color:#333}.hljs-attr,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-selector-pseudo,.hljs-title{color:#795da3}.hljs-addition{background-color:#eaffea;color:#55a532}.hljs-deletion{background-color:#ffecec;color:#bd2c00}.hljs-link{text-decoration:underline}.markdown-body{word-wrap:break-word;font-size:16px;line-height:1.5}.markdown-body:after,.markdown-body:before{content:"";display:table}.markdown-body:after{clear:both}.markdown-body>:first-child{margin-top:0!important}.markdown-body>:last-child{margin-bottom:0!important}.markdown-body a:not([href]){color:inherit;text-decoration:none}.markdown-body .absent{color:#c00}.markdown-body .anchor{float:left;line-height:1;margin-left:-20px;padding-right:4px}.markdown-body .anchor:focus{outline:none}.markdown-body blockquote,.markdown-body dl,.markdown-body ol,.markdown-body p,.markdown-body pre,.markdown-body table,.markdown-body ul{margin-bottom:16px;margin-top:0}.markdown-body hr{background-color:#e7e7e7;border:0;height:.25em;margin:24px 0;padding:0}.markdown-body blockquote{border-left:.25em solid #ddd;color:#777;font-size:16px;padding:0 1em}.markdown-body blockquote>:first-child{margin-top:0}.markdown-body blockquote>:last-child{margin-bottom:0}.markdown-body kbd,.popover kbd{background-color:#fcfcfc;border:1px solid;border-color:#ccc #ccc #bbb;border-radius:3px;box-shadow:inset 0 -1px 0 #bbb;color:#555;display:inline-block;font-size:11px;line-height:10px;padding:3px 5px;vertical-align:middle}.markdown-body .loweralpha{list-style-type:lower-alpha}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{font-weight:600;line-height:1.25;margin-bottom:16px;margin-top:24px}.markdown-body h1 .octicon-link,.markdown-body h2 .octicon-link,.markdown-body h3 .octicon-link,.markdown-body h4 .octicon-link,.markdown-body h5 .octicon-link,.markdown-body h6 .octicon-link{color:#000;vertical-align:middle;visibility:hidden}.markdown-body h1:hover .anchor,.markdown-body h2:hover .anchor,.markdown-body h3:hover .anchor,.markdown-body h4:hover .anchor,.markdown-body h5:hover .anchor,.markdown-body h6:hover .anchor{text-decoration:none}.markdown-body h1:hover .anchor .octicon-link,.markdown-body h2:hover .anchor .octicon-link,.markdown-body h3:hover .anchor .octicon-link,.markdown-body h4:hover .anchor .octicon-link,.markdown-body h5:hover .anchor .octicon-link,.markdown-body h6:hover .anchor .octicon-link{visibility:visible}.markdown-body h1 code,.markdown-body h1 tt,.markdown-body h2 code,.markdown-body h2 tt,.markdown-body h3 code,.markdown-body h3 tt,.markdown-body h4 code,.markdown-body h4 tt,.markdown-body h5 code,.markdown-body h5 tt,.markdown-body h6 code,.markdown-body h6 tt{font-size:inherit}.markdown-body h1{font-size:2em}.markdown-body h1,.markdown-body h2{border-bottom:1px solid #eee;padding-bottom:.3em}.markdown-body h2{font-size:1.5em}.markdown-body h3{font-size:1.25em}.markdown-body h4{font-size:1em}.markdown-body h5{font-size:.875em}.markdown-body h6{color:#777;font-size:.85em}.markdown-body ol,.markdown-body ul{padding-left:2em}.markdown-body ol.no-list,.markdown-body ul.no-list{list-style-type:none;padding:0}.markdown-body ol ol,.markdown-body ol ul,.markdown-body ul ol,.markdown-body ul ul{margin-bottom:0;margin-top:0}.markdown-body li>p{margin-top:16px}.markdown-body li+li{padding-top:.25em}.markdown-body dl{padding:0}.markdown-body dl dt{font-size:1em;font-style:italic;font-weight:700;margin-top:16px;padding:0}.markdown-body dl dd{margin-bottom:16px;padding:0 16px}.markdown-body table{display:block;overflow:auto;width:100%;word-break:normal;word-break:keep-all}.markdown-body table th{font-weight:700}.markdown-body table td,.markdown-body table th{border:1px solid #ddd;padding:6px 13px}.markdown-body table tr{background-color:#fff;border-top:1px solid #ccc}.markdown-body table tr:nth-child(2n){background-color:#f8f8f8}.markdown-body img{background-color:#fff;box-sizing:initial;max-width:100%}.markdown-body img[align=right]{padding-left:20px}.markdown-body img[align=left]{padding-right:20px}.markdown-body .emoji{background-color:initial;max-width:none;vertical-align:text-top}.markdown-body span.frame{display:block;overflow:hidden}.markdown-body span.frame>span{border:1px solid #ddd;display:block;float:left;margin:13px 0 0;overflow:hidden;padding:7px;width:auto}.markdown-body span.frame span img{display:block;float:left}.markdown-body span.frame span span{clear:both;color:#333;display:block;padding:5px 0 0}.markdown-body span.align-center{clear:both;display:block;overflow:hidden}.markdown-body span.align-center>span{display:block;margin:13px auto 0;overflow:hidden;text-align:center}.markdown-body span.align-center span img{margin:0 auto;text-align:center}.markdown-body span.align-right{clear:both;display:block;overflow:hidden}.markdown-body span.align-right>span{display:block;margin:13px 0 0;overflow:hidden;text-align:right}.markdown-body span.align-right span img{margin:0;text-align:right}.markdown-body span.float-left{display:block;float:left;margin-right:13px;overflow:hidden}.markdown-body span.float-left span{margin:13px 0 0}.markdown-body span.float-right{display:block;float:right;margin-left:13px;overflow:hidden}.markdown-body span.float-right>span{display:block;margin:13px auto 0;overflow:hidden;text-align:right}.markdown-body code,.markdown-body tt{background-color:#0000000a;border-radius:3px;font-size:85%;margin:0;padding:.2em 0}.markdown-body code:after,.markdown-body code:before,.markdown-body tt:after,.markdown-body tt:before{content:"\00a0";letter-spacing:-.2em}.markdown-body code br,.markdown-body tt br{display:none}.markdown-body del code{text-decoration:inherit}.markdown-body pre{word-wrap:normal}.markdown-body pre>code{background:#0000;border:0;font-size:100%;margin:0;padding:0;white-space:pre;word-break:normal}.markdown-body .highlight{margin-bottom:16px}.markdown-body .highlight pre{margin-bottom:0;word-break:normal}.markdown-body .highlight pre,.markdown-body pre{background-color:#f7f7f7;border-radius:3px;font-size:85%;line-height:1.45;overflow:auto;padding:16px}.markdown-body pre code,.markdown-body pre tt{word-wrap:normal;background-color:initial;border:0;display:inline;line-height:inherit;margin:0;max-width:auto;overflow:visible;padding:0}.markdown-body pre code:after,.markdown-body pre code:before,.markdown-body pre tt:after,.markdown-body pre tt:before{content:normal}.markdown-body .csv-data td,.markdown-body .csv-data th{font-size:12px;line-height:1;overflow:hidden;padding:5px;text-align:left;white-space:nowrap}.markdown-body .csv-data .blob-line-num{background:#fff;border:0;padding:10px 8px 9px;text-align:right}.markdown-body .csv-data tr{border-top:0}.markdown-body .csv-data th{background:#f8f8f8;border-top:0;font-weight:700}.news .alert .markdown-body blockquote{border:0;padding:0 0 0 40px}.activity-tab .news .alert .commits,.activity-tab .news .markdown-body blockquote{padding-left:0}.task-list-item{list-style-type:none}.task-list-item label{font-weight:400}.task-list-item.enabled label{cursor:pointer}.task-list-item+.task-list-item{margin-top:3px}.task-list-item-checkbox{cursor:default!important;float:left;margin:.31em 0 .2em -1.3em!important;vertical-align:middle}.markdown-body{max-width:758px;overflow:visible!important;padding-bottom:40px;padding-top:40px;position:relative}.markdown-body .emoji{vertical-align:top}.markdown-body pre{border:inherit!important}.markdown-body code{color:inherit!important}.markdown-body pre code .wrapper{display:-moz-inline-flex;display:-ms-inline-flex;display:-o-inline-flex;display:inline-flex}.markdown-body pre code .gutter{float:left;overflow:hidden;-webkit-user-select:none;user-select:none}.markdown-body pre code .gutter.linenumber{border-right:3px solid #6ce26c!important;box-sizing:initial;color:#afafaf!important;cursor:default;display:inline-block;min-width:20px;padding:0 8px 0 0;position:relative;text-align:right;z-index:4}.markdown-body pre code .gutter.linenumber>span:before{content:attr(data-linenumber)}.markdown-body pre code .code{float:left;margin:0 0 0 16px}.markdown-body .gist .line-numbers{border-bottom:none;border-left:none;border-top:none}.markdown-body .gist .line-data{border:none}.markdown-body .gist table{border-collapse:inherit!important;border-spacing:0}.markdown-body code[data-gist-id]{background:none;padding:0}.markdown-body code[data-gist-id]:after,.markdown-body code[data-gist-id]:before{content:""}.markdown-body code[data-gist-id] .blob-num{border:unset}.markdown-body code[data-gist-id] table{margin-bottom:unset;overflow:unset}.markdown-body code[data-gist-id] table tr{background:unset}.markdown-body[dir=rtl] pre{direction:ltr}.markdown-body[dir=rtl] code{direction:ltr;unicode-bidi:embed}.markdown-body .alert>p:last-child{margin-bottom:0}.markdown-body pre.abc,.markdown-body pre.flow-chart,.markdown-body pre.graphviz,.markdown-body pre.mermaid,.markdown-body pre.sequence-diagram,.markdown-body pre.vega{background-color:inherit;border-radius:0;overflow:visible;text-align:center;white-space:inherit}.markdown-body pre.abc>code,.markdown-body pre.flow-chart>code,.markdown-body pre.graphviz>code,.markdown-body pre.mermaid>code,.markdown-body pre.sequence-diagram>code,.markdown-body pre.vega>code{text-align:left}.markdown-body pre.abc>svg,.markdown-body pre.flow-chart>svg,.markdown-body pre.graphviz>svg,.markdown-body pre.mermaid>svg,.markdown-body pre.sequence-diagram>svg,.markdown-body pre.vega>svg{height:100%;max-width:100%}.markdown-body pre>code.wrap{word-wrap:break-word;white-space:pre-wrap;white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap}.markdown-body .alert>p:last-child,.markdown-body .alert>ul:last-child{margin-bottom:0}.markdown-body summary{display:list-item}.markdown-body summary:focus{outline:none}.markdown-body details summary{cursor:pointer}.markdown-body details:not([open])>:not(summary){display:none}.markdown-body figure{margin:1em 40px}.markdown-body .mark,.markdown-body mark{background-color:#fff1a7}.vimeo,.youtube{background-color:#000;background-position:50%;background-repeat:no-repeat;background-size:contain;cursor:pointer;display:table;overflow:hidden;text-align:center}.vimeo,.youtube{position:relative;width:100%}.youtube{padding-bottom:56.25%}.vimeo img{object-fit:contain;width:100%;z-index:0}.youtube img{object-fit:cover;z-index:0}.vimeo iframe,.youtube iframe,.youtube img{height:100%;left:0;position:absolute;top:0;width:100%}.vimeo iframe,.youtube iframe{vertical-align:middle;z-index:1}.vimeo .icon,.youtube .icon{color:#fff;height:auto;left:50%;opacity:.3;position:absolute;top:50%;transform:translate(-50%,-50%);transition:opacity .2s;width:auto;z-index:0}.vimeo:hover .icon,.youtube:hover .icon{opacity:.6;transition:opacity .2s}.slideshare .inner,.speakerdeck .inner{position:relative;width:100%}.slideshare .inner iframe,.speakerdeck .inner iframe{bottom:0;height:100%;left:0;position:absolute;right:0;top:0;width:100%}.figma{display:table;padding-bottom:56.25%;position:relative;width:100%}.figma iframe{border:1px solid #eee;bottom:0;height:100%;left:0;position:absolute;right:0;top:0;width:100%}.markmap-container{height:300px}.markmap-container>svg{height:100%;width:100%}.MJX_Assistive_MathML{display:none}#MathJax_Message{z-index:1000!important}.ui-infobar{color:#777;margin:25px auto -25px;max-width:760px;position:relative;z-index:2}.toc .invisable-node{list-style-type:none}.ui-toc{bottom:20px;position:fixed;z-index:998}.ui-toc.both-mode{margin-left:8px}.ui-toc.both-mode .ui-toc-label{border-bottom-left-radius:0;border-top-left-radius:0;height:40px;padding:10px 4px}.ui-toc-label{background-color:#e6e6e6;border:none;color:#868686;transition:opacity .2s}.ui-toc .open .ui-toc-label{color:#fff;opacity:1;transition:opacity .2s}.ui-toc-label:focus{background-color:#ccc;color:#000;opacity:.3}.ui-toc-label:hover{background-color:#ccc;opacity:1;transition:opacity .2s}.ui-toc-dropdown{margin-bottom:20px;margin-top:100px;max-height:70vh;max-width:45vw;overflow:auto;padding-left:10px;padding-right:40px;text-align:inherit;width:25vw}.ui-toc-dropdown>.toc{max-height:calc(70vh - 100px);overflow:auto}.ui-toc-dropdown[dir=rtl] .nav{letter-spacing:.0029em;padding-right:0}.ui-toc-dropdown a{overflow:hidden;text-overflow:ellipsis;white-space:pre}.ui-toc-dropdown .nav>li>a{color:#767676;display:block;font-size:13px;font-weight:500;padding:4px 20px}.ui-toc-dropdown .nav>li:first-child:last-child>ul,.ui-toc-dropdown .toc.expand ul{display:block}.ui-toc-dropdown .nav>li>a:focus,.ui-toc-dropdown .nav>li>a:hover{background-color:initial;border-left:1px solid #000;color:#000;padding-left:19px;text-decoration:none}.ui-toc-dropdown[dir=rtl] .nav>li>a:focus,.ui-toc-dropdown[dir=rtl] .nav>li>a:hover{border-left:none;border-right:1px solid #000;padding-right:19px}.ui-toc-dropdown .nav>.active:focus>a,.ui-toc-dropdown .nav>.active:hover>a,.ui-toc-dropdown .nav>.active>a{background-color:initial;border-left:2px solid #000;color:#000;font-weight:700;padding-left:18px}.ui-toc-dropdown[dir=rtl] .nav>.active:focus>a,.ui-toc-dropdown[dir=rtl] .nav>.active:hover>a,.ui-toc-dropdown[dir=rtl] .nav>.active>a{border-left:none;border-right:2px solid #000;padding-right:18px}.ui-toc-dropdown .nav .nav{display:none;padding-bottom:10px}.ui-toc-dropdown .nav>.active>ul{display:block}.ui-toc-dropdown .nav .nav>li>a{font-size:12px;font-weight:400;padding-bottom:1px;padding-left:30px;padding-top:1px}.ui-toc-dropdown[dir=rtl] .nav .nav>li>a{padding-right:30px}.ui-toc-dropdown .nav .nav>li>ul>li>a{font-size:12px;font-weight:400;padding-bottom:1px;padding-left:40px;padding-top:1px}.ui-toc-dropdown[dir=rtl] .nav .nav>li>ul>li>a{padding-right:40px}.ui-toc-dropdown .nav .nav>li>a:focus,.ui-toc-dropdown .nav .nav>li>a:hover{padding-left:29px}.ui-toc-dropdown[dir=rtl] .nav .nav>li>a:focus,.ui-toc-dropdown[dir=rtl] .nav .nav>li>a:hover{padding-right:29px}.ui-toc-dropdown .nav .nav>li>ul>li>a:focus,.ui-toc-dropdown .nav .nav>li>ul>li>a:hover{padding-left:39px}.ui-toc-dropdown[dir=rtl] .nav .nav>li>ul>li>a:focus,.ui-toc-dropdown[dir=rtl] .nav .nav>li>ul>li>a:hover{padding-right:39px}.ui-toc-dropdown .nav .nav>.active:focus>a,.ui-toc-dropdown .nav .nav>.active:hover>a,.ui-toc-dropdown .nav .nav>.active>a{font-weight:500;padding-left:28px}.ui-toc-dropdown[dir=rtl] .nav .nav>.active:focus>a,.ui-toc-dropdown[dir=rtl] .nav .nav>.active:hover>a,.ui-toc-dropdown[dir=rtl] .nav .nav>.active>a{padding-right:28px}.ui-toc-dropdown .nav .nav>.active>.nav>.active:focus>a,.ui-toc-dropdown .nav .nav>.active>.nav>.active:hover>a,.ui-toc-dropdown .nav .nav>.active>.nav>.active>a{font-weight:500;padding-left:38px}.ui-toc-dropdown[dir=rtl] .nav .nav>.active>.nav>.active:focus>a,.ui-toc-dropdown[dir=rtl] .nav .nav>.active>.nav>.active:hover>a,.ui-toc-dropdown[dir=rtl] .nav .nav>.active>.nav>.active>a{padding-right:38px}.markdown-body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol}html[lang^=ja] .markdown-body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica Neue,Helvetica,Roboto,Arial,Hiragino Kaku Gothic Pro,ヒラギノ角ゴ Pro W3,Osaka,Meiryo,メイリオ,MS Gothic,MS ゴシック,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol}html[lang=zh-tw] .markdown-body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica Neue,Helvetica,Roboto,Arial,PingFang TC,Microsoft JhengHei,微軟正黑,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol}html[lang=zh-cn] .markdown-body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica Neue,Helvetica,Roboto,Arial,PingFang SC,Microsoft YaHei,微软雅黑,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol}html .markdown-body[lang^=ja]{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica Neue,Helvetica,Roboto,Arial,Hiragino Kaku Gothic Pro,ヒラギノ角ゴ Pro W3,Osaka,Meiryo,メイリオ,MS Gothic,MS ゴシック,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol}html .markdown-body[lang=zh-tw]{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica Neue,Helvetica,Roboto,Arial,PingFang TC,Microsoft JhengHei,微軟正黑,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol}html .markdown-body[lang=zh-cn]{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica Neue,Helvetica,Roboto,Arial,PingFang SC,Microsoft YaHei,微软雅黑,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol}html[lang^=ja] .ui-toc-dropdown{font-family:Source Sans Pro,Helvetica,Arial,Meiryo UI,MS PGothic,MS Pゴシック,sans-serif}html[lang=zh-tw] .ui-toc-dropdown{font-family:Source Sans Pro,Helvetica,Arial,Microsoft JhengHei UI,微軟正黑UI,sans-serif}html[lang=zh-cn] .ui-toc-dropdown{font-family:Source Sans Pro,Helvetica,Arial,Microsoft YaHei UI,微软雅黑UI,sans-serif}html .ui-toc-dropdown[lang^=ja]{font-family:Source Sans Pro,Helvetica,Arial,Meiryo UI,MS PGothic,MS Pゴシック,sans-serif}html .ui-toc-dropdown[lang=zh-tw]{font-family:Source Sans Pro,Helvetica,Arial,Microsoft JhengHei UI,微軟正黑UI,sans-serif}html .ui-toc-dropdown[lang=zh-cn]{font-family:Source Sans Pro,Helvetica,Arial,Microsoft YaHei UI,微软雅黑UI,sans-serif}.ui-affix-toc{max-height:70vh;max-width:9vw;overflow:auto;position:fixed;top:0}.back-to-top,.expand-toggle,.go-to-bottom{color:#999;display:block;font-size:12px;font-weight:500;margin-left:10px;margin-top:10px;padding:4px 10px}.back-to-top:focus,.back-to-top:hover,.expand-toggle:focus,.expand-toggle:hover,.go-to-bottom:focus,.go-to-bottom:hover{color:#563d7c;text-decoration:none}.back-to-top,.go-to-bottom{margin-top:0}.ui-user-icon{background-position:50%;background-repeat:no-repeat;background-size:cover;border-radius:50%;display:block;height:20px;margin-bottom:2px;margin-right:5px;margin-top:2px;width:20px}.ui-user-icon.small{display:inline-block;height:18px;margin:0 0 .2em;vertical-align:middle;width:18px}.ui-infobar>small>span{line-height:22px}.ui-infobar>small .dropdown{display:inline-block}.ui-infobar>small .dropdown a:focus,.ui-infobar>small .dropdown a:hover{text-decoration:none}.ui-more-info{color:#888;cursor:pointer;vertical-align:middle}.ui-more-info .fa{font-size:16px}.ui-connectedGithub,.ui-published-note{color:#888}.ui-connectedGithub{line-height:23px;white-space:nowrap}.ui-connectedGithub a.file-path{color:#888;padding-left:22px;text-decoration:none}.ui-connectedGithub a.file-path:active,.ui-connectedGithub a.file-path:hover{color:#888;text-decoration:underline}.ui-connectedGithub .fa{font-size:20px}.ui-published-note .fa{font-size:20px;vertical-align:top}.unselectable{-webkit-user-select:none;-o-user-select:none;user-select:none}.selectable{-webkit-user-select:text;-o-user-select:text;user-select:text}.inline-spoiler-section{cursor:pointer}.inline-spoiler-section .spoiler-text{background-color:#333;border-radius:2px}.inline-spoiler-section .spoiler-text>*{opacity:0}.inline-spoiler-section .spoiler-img{filter:blur(10px)}.inline-spoiler-section.raw{background-color:#333;border-radius:2px}.inline-spoiler-section.raw>*{opacity:0}.inline-spoiler-section.unveil{cursor:auto}.inline-spoiler-section.unveil .spoiler-text{background-color:#3333331a}.inline-spoiler-section.unveil .spoiler-text>*{opacity:1}.inline-spoiler-section.unveil .spoiler-img{filter:none}@media print{blockquote,div,img,pre,table{page-break-inside:avoid!important}a[href]:after{font-size:12px!important}}.markdown-body.slides{color:#222;position:relative;z-index:1}.markdown-body.slides:before{background-color:currentColor;bottom:0;box-shadow:0 0 0 50vw;content:"";display:block;left:0;position:absolute;right:0;top:0;z-index:-1}.markdown-body.slides section[data-markdown]{background-color:#fff;margin-bottom:1.5em;position:relative;text-align:center}.markdown-body.slides section[data-markdown] code{text-align:left}.markdown-body.slides section[data-markdown]:before{content:"";display:block;padding-bottom:56.23%}.markdown-body.slides section[data-markdown]>div:first-child{left:1em;max-height:100%;overflow:hidden;position:absolute;right:1em;top:50%;transform:translateY(-50%)}.markdown-body.slides section[data-markdown]>ul{display:inline-block}.markdown-body.slides>section>section+section:after{border:3px solid #777;content:"";height:1.5em;position:absolute;right:1em;top:-1.5em}.site-ui-font{font-family:Source Sans Pro,Helvetica,Arial,sans-serif}html[lang^=ja] .site-ui-font{font-family:Source Sans Pro,Helvetica,Arial,Hiragino Kaku Gothic Pro,ヒラギノ角ゴ Pro W3,Osaka,Meiryo,メイリオ,MS Gothic,MS ゴシック,sans-serif}html[lang=zh-tw] .site-ui-font{font-family:Source Sans Pro,Helvetica,Arial,PingFang TC,Microsoft JhengHei,微軟正黑,sans-serif}html[lang=zh-cn] .site-ui-font{font-family:Source Sans Pro,Helvetica,Arial,PingFang SC,Microsoft YaHei,微软雅黑,sans-serif}body{font-smoothing:subpixel-antialiased!important;-webkit-font-smoothing:subpixel-antialiased!important;-moz-osx-font-smoothing:auto!important;-webkit-overflow-scrolling:touch;font-family:Source Sans Pro,Helvetica,Arial,sans-serif;letter-spacing:.025em}html[lang^=ja] body{font-family:Source Sans Pro,Helvetica,Arial,Hiragino Kaku Gothic Pro,ヒラギノ角ゴ Pro W3,Osaka,Meiryo,メイリオ,MS Gothic,MS ゴシック,sans-serif}html[lang=zh-tw] body{font-family:Source Sans Pro,Helvetica,Arial,PingFang TC,Microsoft JhengHei,微軟正黑,sans-serif}html[lang=zh-cn] body{font-family:Source Sans Pro,Helvetica,Arial,PingFang SC,Microsoft YaHei,微软雅黑,sans-serif}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}abbr[data-original-title],abbr[title]{cursor:help}body.modal-open{overflow-y:auto;padding-right:0!important}svg{text-shadow:none}
</style>
<script src="/js/jquery.min.js"></script>
</head>
<body class="bg">
<div class="container">
<p> </p>
</div>
<div class="container">
<!--Navigation bar-->
<div id="topmenu">
</div>
<script>
$(function(){
$("#topmenu").load("menu.html");
});
</script>
<!--end of Navigation bar-->
<div class="jumbotron">
<div id="doc" class="markdown-body container-fluid comment-enabled comment-inner" data-hard-breaks="true"
style="">
<h1 id="The-BIL-Analysis-Ecosystem" data-id="The-BIL-Analysis-Ecosystem" style="">
<a class="anchor hidden-xs" href="#The-BIL-Analysis-Ecosystem" title="The-BIL-Analysis-Ecosystem">
<span class="octicon octicon-link"></span>
</a>
<img src="https://i.imgur.com/GLp06Vi.png" width="70">
<span>The BIL Analysis Ecosystem</span>
</h1>
<h2 id="How-to-connect-to-the-BIL-Analysis-Ecosystem" data-id="How-to-connect-to-the-BIL-Analysis-Ecosystem"
style="">
<a class="anchor hidden-xs" href="#How-to-connect-to-the-BIL-Analysis-Ecosystem"
title="How-to-connect-to-the-BIL-Analysis-Ecosystem">
<span class="octicon octicon-link"></span>
</a>
<span>How to connect to the BIL Analysis Ecosystem</span>
</h2>
<h3 id="Connect-via-Terminal" data-id="Connect-via-Terminal" style="">
<a class="anchor hidden-xs" href="#Connect-via-Terminal" title="Connect-via-Terminal">
<span class="octicon octicon-link"></span>
</a>
<span>Connect via Terminal</span>
</h3>
<h3 id="SSH" data-id="SSH" style="">
<a class="anchor hidden-xs" href="#SSH" title="SSH">
<span class="octicon octicon-link"></span>
</a>
<span>SSH</span>
</h3>
<p><span>You can connect to BIL Analysis ecosystem resources with an ssh client from your local machine using your PSC credentials.</span>
</p>
<p><span>You must install SSH client software on your local machine, but free ssh clients for
Macs, Windows and Unix are available. Popular ssh clients (GUI) include PuTTY for Windows
and Cyberduck for Macs. A command line version of ssh is installed on Macs by default
and you can use the Terminal application if you prefer. You can also check with your university
to see if there is an ssh client that they recommend.
</span></p>
<p><span>To use ssh to connect to the BIL Analysis Ecosystem:</span></p>
<pre><code>ssh [email protected]</code></pre>
<p><span>Everyone who requests a BIL account has access to the login node using their BIL Username
and Password. The login node is not intended for heavy computation or visualization, but rather
to provide convenient shell access to BIL data and enable interactive and batch use of the BIL
Analysis Ecosystem. The BIL computational cluster provides a suitable resource for both
computation and visualization.
</span></p>
<h4 id="Workshop-VM" data-id="Workshop-VM">
<a class="anchor hidden-xs" href="#Workshop-VM" title="Workshop-VM">
<span class="octicon octicon-link"></span>
</a>
<h2 id="Interactive-Apps" data-id="Interactive-Apps" style=""><a class="anchor hidden-xs"
href="#Interactive-Apps"
title="Interactive-Apps"><span
class="octicon octicon-link"></span></a><span>Interactive Apps</span></h2>
<h3 id="OpenOnDemand" data-id="OpenOnDemand" style=""><a class="anchor hidden-xs" href="#OpenOnDemand"
title="OpenOnDemand"><span
class="octicon octicon-link"></span></a><span>OpenOnDemand</span></h3>
<p><span>The OpenOnDemand (OOD) interface allows you to connect to the BIL Analysis Ecosystem through the web browser. You can submit and manage jobs, move or create files, or use the apps such as Jupyter Notebook.</span>
</p>
<p><span>To connect to the BIL Analysis Ecosystem via Open OnDemand</span></p>
<ol>
<li>
<p><span>In your web broswer, go to </span><code>https://ondemand.bil.psc.edu</code></p>
</li>
<li>
<p><span>Enter your </span><a href="https://hackmd.io/lXd3fXcNSg-odAVC8APRuQ" target="_blank"
rel="noopener"><span>PSC username and password</span></a><br>
<img src="https://i.imgur.com/ARpR80E.png" alt="" loading="lazy"></p>
</li>
<li>
<p><span>From the OOD dashboard, pictured below, you will see the top menu bar where you can manage file, jobs, or select the apps to use.</span>
</p>
</li>
</ol>
<p><img src="https://i.imgur.com/ZKeTVXG.png" alt="" loading="lazy"></p><h4 id="Manage-files"
data-id="Manage-files"><a
class="anchor hidden-xs" href="#Manage-files" title="Manage-files"><span
class="octicon octicon-link"></span></a><span>Manage files</span></h4>
<p>
<span>From the OOD dashboard, you can create, edit, or move files. Select the </span><code>Files</code><span> option from the top menu bar, then the </span><code>Home</code><span> which will navigate to your home directory at </span><code>/bil/users/</code><span>. From here, you will have the following options:</span>
</p>
<ul>
<li><code>Go To…</code><span>: Navigate to a specified folder</span></li>
<li><code>Open in Terminal</code><span>: Opens the active folder in a terminal session (new tab)</span>
</li>
<li><code>New File</code><span>: Creates a new file in the active folder</span></li>
<li><code>New Dir</code><span>: Creates a new folder in the active folder</span></li>
<li>
<code>Upload</code><span>: Select files from your local machine to upload to the active folder</span>
</li>
<li><code>Show Dotfiles</code><span>: Reveals hidden files</span></li>
<li><code>Show Owner/Mode</code><span>: Shows ownership and permission information</span></li>
<li><code>View</code><span>: Shows file contents inside the current tab</span></li>
<li><code>Edit</code><span>: Opens a file editor in a new tab</span></li>
<li><code>Rename/Move</code><span>: Gives a file a new path and/or name</span></li>
<li><code>Download</code><span>: Downloads the file or folder to your local machine</span></li>
<li><code>Copy</code><span>: Copies selected files to the clipboard</span></li>
<li><code>Paste</code><span>: Pastes files from the clipboard</span></li>
<li><code>(Un)Select All</code><span>: Select or unselect all files/folders</span></li>
<li><code>Delete</code><span>: Deletes selected files/folders</span></li>
</ul>
<h4 id="Manage-Jobs" data-id="Manage-Jobs"><a class="anchor hidden-xs" href="#Manage-Jobs"
title="Manage-Jobs"><span class="octicon octicon-link"></span></a><span>Manage Jobs</span>
</h4>
<p>
<span>From the OOD dashboard, you can create, submit, and edit jobs. Select the </span><code>Jobs</code><span> option from the top menu bar, then </span><code>Job
composer</code><span> which will take you to the job composer dashboard. From here, you will have the following options:</span>
</p>
<ul>
<li><span>Create a new job script</span></li>
<li><span>Edit job scripts</span></li>
<li><span>Submit a job</span></li>
</ul>
<p><span>When you first visit to this page, you'll go through a helpful tutorial. The buttons do the following:</span>
</p>
<ul>
<li><code>New Job</code><span>: Create a new job</span>
<ul>
<li><code>From Default Template</code><span>: Uses system defaults to create a job that you can then edit.</span>
</li>
<li><code>From Specified Path</code><span>: Creates a job from a specific job script.</span>
</li>
<li><code>From Selected
Job</code><span>: Creates a new job that is a copy of the selected job.</span></li>
</ul>
</li>
<li><code>Edit Files</code><span>: Opens the project folder in a new File Explorer tab and allows you to edit the files within it.</span>
</li>
<li><code>Job Options</code><span>: Allows you to edit the Name, Cluster, Job Script, and Account of a job.</span>
</li>
<li><code>Open
Terminal</code><span>: Opens a terminal session in a new tab at the project folder.</span></li>
<li><code>Submit</code><span>: Submits the selected job.</span></li>
<li><code>Stop</code><span>: Stops the selected job if it was already submitted.</span></li>
<li><code>Delete</code><span>: Delete the selected job.</span></li>
</ul>
<h4 id="Jupyter-Notebook" data-id="Jupyter-Notebook"><a class="anchor hidden-xs" href="#Jupyter-Notebook"
title="Jupyter-Notebook"><span
class="octicon octicon-link"></span></a><span>Jupyter Notebook</span></h4>
<p><span>From the OOD dashboard you can launch a Jupyter Notebook server on one or more nodes.</span></p>
<ul>
<li><span>Select the </span><code>Apps</code><span> option from the top menu bar, then </span><code>Jupyter
Notebook</code><span> which will take you to the page to set up your Jupyer Notebook session.</span>
</li>
<li><span>From here, you will specify the timelimit, number of nodes to use. Use the Extra Slurm Args field to specify the number of cores or number of GPUs you want. Use the Extra Jupyter Args field to pass arguments to your Jupyter notebook.</span>
</li>
<li><span>Select </span><code>Launch</code><span> to begin your Jupyter Notebook session.</span></li>
<li><span>You will be taken to the dashboard for your interactive sessions. It may take some time for your resources to become available. When your session starts, select the blue "Connect to Jupyter"</span>
</li>
<li>
<span>A new window running Jupyter Hub will open where you can being your Jupyter Notebook session.</span>
</li>
<li><span>For instructions on using Jupyter Notebook, see the </span><a
href="https://jupyter-notebook.readthedocs.io/en/stable/notebook.html" target="_blank"
rel="noopener"><span>official documentation</span></a><span>.</span></li>
</ul>
<h2 id="Software-Modules" data-id="Software-Modules" style=""><a class="anchor hidden-xs"
href="#Software-Modules"
title="Software-Modules"><span
class="octicon octicon-link"></span></a><span>Software Modules</span></h2>
<h3 id="LMOD" data-id="LMOD" style=""><a class="anchor hidden-xs" href="#LMOD" title="LMOD"><span
class="octicon octicon-link"></span></a><span>LMOD</span></h3><img
src="https://i.imgur.com/TiNg8y8.png" width="25%">
<p><span>Lmod is a Lua based module system that easily handles the MODULEPATH Hierarchical problem. Environment Modules provide a convenient way to dynamically change the users' environment through modulefiles.</span>
</p>
<p><span>In a nutshell, we use LMOD to manage software that can be used in the VM as well as the large memory nodes. Software available as modules should be accessible on both resources.</span>
</p>
<p><span>This document only lists a few commands. For complete documentation click </span><a
href="https://lmod.readthedocs.io/en/latest/010_user.html" target="_blank"
rel="noopener"><span>here</span></a><span>.</span></p>
<div class="alert alert-info">
<p><img class="emoji" alt=":bulb:"
src="https://cdn.jsdelivr.net/npm/@hackmd/[email protected]/dist/images/basic/bulb.png"><span> If you want us to install a piece of software in our resources, then please remember to submit software installation requests to </span><code>[email protected]</code><span>.</span>
</p>
</div>
<h3 id="Available-software-modules" data-id="Available-software-modules" style=""><a
class="anchor hidden-xs" href="#Available-software-modules" title="Available-software-modules"><span
class="octicon octicon-link"></span></a><span>Available software modules</span></h3>
<p><span>To list all available software modules use the command</span></p>
<pre><code>module avail
</code></pre>
<p><span>For example</span></p>
<pre><code>module avail
-------------- /bil/modulefiles ---------------
anaconda/3.2019.7
anaconda3/4.10.1
aspera/3.9.6(default)
bcftools/1.9(default)
bioformats/6.0.1
bioformats/6.1.1
bioformats/6.4.0
bioformats/6.5.1
bioformats/6.6.1(default)
bioformats2raw/0.2.4(default)
c-blosc/1.19.0(default)
dust/0.5.4
ffmpeg/20210611
</code></pre>
<p><span>The command above will list all available software.</span></p>
<div class="alert alert-info">
<p><img class="emoji" alt=":envelope:"
src="https://cdn.jsdelivr.net/npm/@hackmd/[email protected]/dist/images/basic/envelope.png"><span> Cannot find the software you need to explore the collections? Please send a request to </span><code>[email protected]</code><span>.</span>
</p>
</div>
<h3 id="Software-versions" data-id="Software-versions" style=""><a class="anchor hidden-xs"
href="#Software-versions"
title="Software-versions"><span
class="octicon octicon-link"></span></a><span>Software versions</span></h3>
<p><span>To list information about specific modules use the command</span></p>
<pre><code>module avail <package-name>
</code></pre>
<p><span>For example, you can view the two versions of MatLab available</span></p>
<pre><code>module avail matlab
-------------- /bil/modulefiles ---------------
matlab/2019a matlab/2021a
</code></pre>
<h4 id="Listing-useful-information" data-id="Listing-useful-information"><a class="anchor hidden-xs"
href="#Listing-useful-information"
title="Listing-useful-information"><span
class="octicon octicon-link"></span></a><span>Listing useful information</span></h4>
<p><span>To list useful info about a module use the command</span></p>
<pre><code>module help <package-name>
</code></pre>
<p><span>For example,</span></p>
<pre><code>module help matlab
----------- Module Specific Help for 'matlab/2021a' ---------------
Matlab 2021a
------------
To enable, first load the following required modules (via module load command):
module load matlab/2021a
For a full list of binaries included in this module, type
module what-is matlab/2021a
</code></pre>
<h3 id="Loading-modules" data-id="Loading-modules" style=""><a class="anchor hidden-xs"
href="#Loading-modules"
title="Loading-modules"><span
class="octicon octicon-link"></span></a><span>Loading modules</span></h3>
<p><span>To load a module use the command</span></p>
<pre><code>module load <package-name>
</code></pre>
<p><span>For example,</span></p>
<pre><code>module load matlab/2021a
</code></pre>
<p><span>Running the command above will make the matlab binary available in the current session</span></p>
<pre><code>which matlab
/bil/packages/matlab/R2021a/bin/matlab
</code></pre>
<p>
<span>In this example, you can simply type </span><code>matlab</code><span> to start the Matlab engine</span>
</p>
<pre><code>matlab -nodesktop
MATLAB is selecting SOFTWARE OPENGL rendering.
< M A T L A B (R) >
Copyright 1984-2021 The MathWorks, Inc.
R2021a Update 5 (9.10.0.1739362) 64-bit (glnxa64)
August 9, 2021
To get started, type doc.
For product information, visit www.mathworks.com.
>>
</code></pre>
<h3 id="Loading-a-specific-version-of-a-module" data-id="Loading-a-specific-version-of-a-module" style=""><a
class="anchor hidden-xs" href="#Loading-a-specific-version-of-a-module"
title="Loading-a-specific-version-of-a-module"><span class="octicon octicon-link"></span></a><span>Loading a specific version of a module</span>
</h3>
<p><span>There are times when there are multiple versions of the same same software.</span></p>
<p><span>For example,</span></p>
<pre><code>module avail bioformats
---------------------- /bil/modulefiles ----------------------
bioformats/6.0.1 bioformats/6.7.0
bioformats/6.1.1 bioformats/6.8.0(default)
bioformats/6.4.0 bioformats2raw/0.2.4
bioformats/6.5.1 bioformats2raw/0.3.0(default)
bioformats/6.6.1
</code></pre>
<p><span>If you wish to load a specific version of a package use the command</span></p>
<pre><code>module load <package>/<version>
</code></pre>
<p><span>For example,</span></p>
<pre><code>module load bioformats/6.4.0
</code></pre>
<h3 id="Listing-loaded-modules" data-id="Listing-loaded-modules" style=""><a class="anchor hidden-xs"
href="#Listing-loaded-modules"
title="Listing-loaded-modules"><span
class="octicon octicon-link"></span></a><span>Listing loaded modules</span></h3>
<p><span>To list the loaded modules use the command</span></p>
<pre><code>module list
</code></pre>
<p><span>For example,</span></p>
<pre><code>module list
Currently Loaded Modulefiles:
1) matlab/2021a
</code></pre>
<h3 id="Unload-module" data-id="Unload-module" style=""><a class="anchor hidden-xs" href="#Unload-module"
title="Unload-module"><span
class="octicon octicon-link"></span></a><span>Unload module</span></h3>
<p><span>To load a module use the command</span></p>
<pre><code>module unload <package-name>
</code></pre>
<p><span>for example</span></p>
<pre><code>module unload matlab/2021a
</code></pre>
<h3 id="Using-modules-on-scripts" data-id="Using-modules-on-scripts" style=""><a class="anchor hidden-xs"
href="#Using-modules-on-scripts"
title="Using-modules-on-scripts"><span
class="octicon octicon-link"></span></a><span>Using modules on scripts</span></h3>
<p><span>When building scripts that are using more than one tool available as modules, simply type the module command for each tool</span>
</p>
<pre><code class="hljs"><div class="wrapper"><div class="gutter linenumber"><span></span>
<span></span>
<span></span>
<span></span></div><div class="code">#!/bin/bash
module load matlab/2021a
module load bioformats
</div></div></code></pre>
<h2 id="Job-management" data-id="Job-management" style=""><a class="anchor hidden-xs" href="#Job-management"
title="Job-management"><span
class="octicon octicon-link"></span></a><span>Job management</span></h2>
<h3 id="SLURM" data-id="SLURM" style=""><a class="anchor hidden-xs" href="#SLURM" title="SLURM"><span
class="octicon octicon-link"></span></a><span>SLURM</span></h3>
<p><img src="https://i.imgur.com/3gPmu1r.png" alt="" loading="lazy"></p>
<p><a href="https://slurm.schedmd.com/documentation.html" target="_blank" rel="noopener"><span>Slurm</span></a><span> is an open source, fault-tolerant, and highly scalable cluster management and job scheduling system for large and small Linux clusters.</span>
</p>
<p><span>This document only lists a few commands. For complete documentation click </span><a
href="https://slurm.schedmd.com/documentation.html" target="_blank" rel="noopener"><span>here</span></a><span>.</span>
</p>
<h3 id="sinfo" data-id="sinfo" style=""><a class="anchor hidden-xs" href="#sinfo" title="sinfo"><span
class="octicon octicon-link"></span></a><span>sinfo</span></h3>
<pre><code>sinfo - View information about Slurm nodes and partitions.
SYNOPSIS
sinfo [OPTIONS...]
</code></pre>
<p><span>For example</span></p>
<pre><code>sinfo -p compute
</code></pre>
<h3 id="squeue" data-id="squeue" style=""><a class="anchor hidden-xs" href="#squeue" title="squeue"><span
class="octicon octicon-link"></span></a><span>squeue</span></h3>
<pre><code>squeue - view information about jobs located in the Slurm scheduling queue.
SYNOPSIS
squeue [OPTIONS...]
</code></pre>
<p><span>For example</span></p>
<pre><code>squeue -u icaoberg
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
14243 compute script.s icaoberg R 15:34 1 l001
</code></pre>
<h3 id="scontrol" data-id="scontrol" style=""><a class="anchor hidden-xs" href="#scontrol" title="scontrol"><span
class="octicon octicon-link"></span></a><span>scontrol</span></h3>
<pre><code>scontrol - view or modify Slurm configuration and state.
SYNOPSIS
scontrol [OPTIONS...] [COMMAND...]
</code></pre>
<p><span>As a regular user you can view information about the nodes and jobs but won't be able to modify them.</span>
</p><h4 id="Check-available-memory" data-id="Check-available-memory"><a class="anchor hidden-xs"
href="#Check-available-memory"
title="Check-available-memory"><span
class="octicon octicon-link"></span></a><span>Check available memory</span></h4>
<p><span>The view information about the nodes, including information about memory, use the command</span>
</p>
<pre><code>scontrol show nodes
</code></pre>
<p>
<span>To view information about a specific node, use the node name to print this information. For example</span>
</p>
<pre><code>scontrol show nodes l002
NodeName=l002 Arch=x86_64 CoresPerSocket=20
CPUAlloc=0 CPUTot=80 CPULoad=0.03
AvailableFeatures=(null)
ActiveFeatures=(null)
Gres=(null)
NodeAddr=l002 NodeHostName=l002 Version=18.08
OS=Linux 4.18.0-305.7.1.el8_4.x86_64 #1 SMP Tue Jun 29 21:55:12 UTC 2021
RealMemory=3000000 AllocMem=0 FreeMem=3090695 Sockets=4 Boards=1
State=IDLE ThreadsPerCore=1 TmpDisk=0 Weight=1 Owner=N/A MCS_label=N/A
Partitions=compute
BootTime=2021-07-16T15:47:48 SlurmdStartTime=2021-08-03T20:58:25
CfgTRES=cpu=80,mem=3000000M,billing=80
AllocTRES=
CapWatts=n/a
CurrentWatts=0 LowestJoules=0 ConsumedJoules=0
ExtSensorsJoules=n/s ExtSensorsWatts=0 ExtSensorsTemp=n/s
</code></pre>
<p>
<span>Because there exists one partition, the you can run </span><code>sinfo</code><span> or </span><code>sinfo
-p compute</code><span> to gather basic information about this partition.</span></p>
<p><span>For example</span></p>
<pre><code>→ sinfo -p compute
PARTITION AVAIL TIMELIMIT NODES STATE NODELIST
compute* up infinite 8 idle l[001-008]
</code></pre>
<h4 id="sbatch" data-id="sbatch"><a class="anchor hidden-xs" href="#sbatch" title="sbatch"><span
class="octicon octicon-link"></span></a><span>sbatch</span></h4>
<pre><code>sbatch - Submit a batch script to Slurm.
SYNOPSIS
sbatch [OPTIONS(0)...] [ : [OPTIONS(N)...]] script(0) [args(0)...]
</code></pre>
<h4 id="interact" data-id="interact"><a class="anchor hidden-xs" href="#interact" title="interact"><span
class="octicon octicon-link"></span></a><span>interact</span></h4>
<p><span>The interact command is an in-house script for starting interactive sessions</span></p>
<pre><code>interact -h
Usage: interact [OPTIONS]
-d Turn on debugging information
--debug
--noconfig Do not process config files
-gpu Allocate 1 gpu in the GPU-shared partition
--gpu
--gres=<list> Specifies a comma delimited list of generic consumable
resources. e.g.: --gres=gpu:1
--mem=<MB> Real memory required per node in MegaBytes
-N Nodes Number of nodes
--nodes
-n NTasks Number of tasks (spread over all Nodes)
--ntasks-per-node=<ntasks> Number of tasks, 1 per core per node.
-p Partition Partition/queue you would like to run on
--partition
-R Reservation Reservation you would like to run on
--reservation
-t Time Set a limit on the total run time. Format include
mins, mins:secs, hours:mins:secs. e.g. 1:30:00
--time
-h Print this help message
-?
</code></pre>
<ul>
<li><span>At the moment, there only exists one partition named </span><code>compute</code><span>, so running</span>
</li>
</ul>
<pre><code>interact
</code></pre>
<p><span>or</span></p>
<pre><code>interact -p compute
</code></pre>
<ul>
<li><span>To specify the amount of memory use the option </span><code>--mem=<MB></code><span>. For example </span><code>interact
--mem=1Tb</code></li>
<li><span>This is a shared partition, if you wish to get all the resources in a compute node, use the option </span><code>--nodes</code><span>. For example </span><code>interact
-N
1</code><span>. Since this is a shared resource, please be considerate using this resource.</span>
</li>
</ul>
<h4 id="scancel" data-id="scancel"><a class="anchor hidden-xs" href="#scancel" title="scancel"><span
class="octicon octicon-link"></span></a><span>scancel</span></h4>
<pre><code>scancel - Used to signal jobs or job steps that are under the control of Slurm.
SYNOPSIS
scancel [OPTIONS...] [job_id[_array_id][.step_id]] [job_id[_array_id][.step_id]...]
</code></pre>
<p><span>There is no need to</span></p>
<ul>
<li><span>To cancel a specific job use the command </span><code>scancel <job_id></code><span>. For example </span><code>scancel
00001</code></li>
<li><span>To cancel all your running jobs use the command </span><code>scancel -u
<username></code><span>. For example </span><code>scancel -u icaoberg</code><span>.</span>
</li>
</ul>
<h3 id="Docker" data-id="Docker" style=""><a class="anchor hidden-xs" href="#Docker" title="Docker"><span
class="octicon octicon-link"></span></a><span>Docker</span></h3>
<p><span>Docker is not supported and it is not expected to be supported in the near future.</span></p><h4
id="uDocker" data-id="uDocker"><a class="anchor hidden-xs" href="#uDocker" title="uDocker"><span
class="octicon octicon-link"></span></a><span>uDocker</span></h4><img
src="https://github.com/indigo-dc/udocker/raw/master/docs/logo-small.png" width="25%">
<p><span>If you want to run a program/tool and not a service, then </span><a
href="https://github.com/indigo-dc/udocker" target="_blank"
rel="noopener"><span>uDocker</span></a><span> might be an option for you.</span></p>
<p><span>To install uDocker</span></p>
<pre><code>module load anaconda3/4.11.0
pip install --user udocker
</code></pre>
<p><span>or</span></p>
<pre><code>module load anaconda3/4.11.0
python -m venv .
source ./bin/activate
pip install udocker
</code></pre>
<p><span>For example,</span></p>
<pre><code>udocker pull jtduda/python-itk-sitk-ants:0.1.0
</code></pre>
<h3 id="Singularity" data-id="Singularity" style=""><a class="anchor hidden-xs" href="#Singularity"
title="Singularity"><span
class="octicon octicon-link"></span></a><span>Singularity</span></h3><h4 id="Building-containers"
data-id="Building-containers">
<a class="anchor hidden-xs" href="#Building-containers" title="Building-containers"><span
class="octicon octicon-link"></span></a><span>Building containers</span></h4>
<p><strong><span>If you have elevated privileges to run Singularity</span></strong><br>
<span>Make sure to run singularity builds as </span><code>sudo</code><span>, that's all that matters.</span>
</p>
<div class="alert alert-warning">
<p><img class="emoji" alt=":warning:"
src="https://cdn.jsdelivr.net/npm/@hackmd/[email protected]/dist/images/basic/warning.png"><span> If you are constantly building containers, then run</span>
</p>
<pre><code>singularity cache clean
</code></pre>
<p><span>often to clean cache.</span></p>
</div>
<p><strong><span>If you don't have elevated privileges</span></strong></p>
<p><span>This applies to all regular users including researchers. If you do not have elevated privileges, you can still build the images remotely.</span>
</p>
<p><span>Follow these steps to do so</span></p>
<ul>
<li><span>Create an account on </span><a href="http://SyLabs.io" target="_blank" rel="noopener"><span>SyLabs.io</span></a><span>.</span>
</li>
<li><span>Click </span><code>Access Tokens</code><span> on the top-right menu</span></li>
</ul>
<p><img src="https://i.imgur.com/ILAwB6T.png" alt="" loading="lazy"></p>
<ul>
<li><span>Click Create a </span><code>New Access Token</code></li>
</ul>
<p><img src="https://i.imgur.com/HlKCHjo.png" alt="" loading="lazy"></p>
<ul>
<li><span>Click </span><code>Copy token to Clipboard</code></li>
</ul>
<p><img src="https://i.imgur.com/ztbbC8B.png" alt="" loading="lazy"></p>
<ul>
<li><span>Login to the </span><code>workshop</code><span> VM and run the command</span></li>
</ul>
<pre><code>singularity remote login
</code></pre>
<ul>
<li><span>Paste the token and click </span><code>Enter</code><span>.</span></li>
</ul>
<p>
<span>Just make sure to use the </span><code>--remote</code><span> flag when running singularity build.</span>
</p>
<p><span>Check the </span><code>rbuild.sh</code><span> scripts in each repo for working examples.</span></p>
<div class="alert alert-warning">
<p><img class="emoji" alt=":warning:"
src="https://cdn.jsdelivr.net/npm/@hackmd/[email protected]/dist/images/basic/warning.png"><span> If you are constantly building containers remotely, make sure to erase them from your account to avoid running out of space.</span>
</p>
</div>
<p><span>To see a list of vetted containers built by PSC, click </span><a
href="https://github.com/pscedu/singularity" target="_blank"
rel="noopener"><span>here</span></a><span>.</span></p><h4 id="Example" data-id="Example"><a
class="anchor hidden-xs" href="#Example" title="Example"><span
class="octicon octicon-link"></span></a><span>Example</span></h4><img
src="https://camo.githubusercontent.com/d18f42e3f0fc2eb3d39084c23a19eaf5a65c25ed7d14fcef9c00c8176680fa95/68747470733a2f2f75706c6f61642e77696b696d656469612e6f72672f77696b6970656469612f636f6d6d6f6e732f382f38302f436f777361795f5479706963616c5f4f75747075742e706e67">
<p><span>You can find a Singularity definition file </span><a
href="https://github.com/pscedu/singularity-cowsay" target="_blank" rel="noopener"><span>here</span></a><span>. To build this image remotely run</span>
</p>
<pre><code>git clone https://github.com/pscedu/singularity-cowsay.git
cd 3.04
singularity build --remote cowsay.sif Singularity
</code></pre>
<p><span>after getting a token from </span><a href="http://SyLabs.io" target="_blank" rel="noopener"><span>SyLabs.io</span></a><span>.</span>
</p>
<h2 id="Other" data-id="Other" style=""><a class="anchor hidden-xs" href="#Other" title="Other"><span
class="octicon octicon-link"></span></a><span>Other</span></h2>
<h3 id="Installing-Miniconda" data-id="Installing-Miniconda" style=""><a class="anchor hidden-xs"
href="#Installing-Miniconda"
title="Installing-Miniconda"><span
class="octicon octicon-link"></span></a><span>Installing Miniconda</span></h3>
<p><img src="https://upload.wikimedia.org/wikipedia/commons/e/ea/Conda_logo.svg" width="50%"><br></p>
<p><span>There is nothing preventing you from installing a Conda distribution in your home directory, though this is not advised.</span>
</p>
<p><span>However if you need to, you might want to start with a Miniconda distribution</span></p>
<pre><code class="hljs"><div class="wrapper"><div class="gutter linenumber"><span></span>
<span></span></div><div class="code">wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash ./https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
</div></div></code></pre>
<p><span>and follow the instructions on screen.</span></p>
<div class="alert alert-info">
<p><img class="emoji" alt=":pencil:"
src="https://cdn.jsdelivr.net/npm/@hackmd/[email protected]/dist/images/basic/pencil.png"><span> If you use the default values in the Conda install, it will install in your home directory on </span><code>/bil/</code>
</p>
</div>
<h3 id="Using-Jupyter-Notebooks" data-id="Using-Jupyter-Notebooks" style=""><a class="anchor hidden-xs"
href="#Using-Jupyter-Notebooks"
title="Using-Jupyter-Notebooks"><span
class="octicon octicon-link"></span></a><span>Using Jupyter Notebooks</span></h3><h4
id="Loading-the-proper-module" data-id="Loading-the-proper-module"><a class="anchor hidden-xs"
href="#Loading-the-proper-module"
title="Loading-the-proper-module"><span
class="octicon octicon-link"></span></a><span>Loading the proper module</span></h4>
<p><span>Click the black terminal icon in the top left corner of your screen</span></p>
<p><img src="https://i.imgur.com/Um1L4Kj.png" alt="" loading="lazy"></p>
<p><span>When the terminal opens, type the following commands to load Fiji into your workspace.</span></p>
<pre><code>module load anaconda3
jupyter lab
</code></pre>
<p><span>Running the commands above will open a browser</span></p>
<p><img src="https://i.imgur.com/WJb8t6i.png" alt="" loading="lazy"></p>
<p><span>The Anaconda3 installation available in BIL infrastructure has access to commonly used packages used in data analytics but it also has a list of unique packages commonly used in neuroscience like</span>
</p>
<ul>
<li><span>allensdk</span></li>
<li><span>biopython</span></li>
<li><span>bokeh</span></li>
<li><span>Dask</span></li>
<li><span>napari</span></li>
<li><span>nilearni</span></li>
<li><span>neuron</span></li>
<li><span>pandas</span></li>
<li><span>pytorch</span></li>
<li><span>scikit-image</span></li>
<li><span>scikit-learn</span></li>
<li><span>starfish</span></li>
<li><span>Theano</span></li>
</ul>
<p><span>To see a full list of packages of packages, run the command in terminal</span></p>
<pre><code>pip list
</code></pre>
<div class="alert alert-info">
<p><img class="emoji" alt=":bulb:"
src="https://cdn.jsdelivr.net/npm/@hackmd/[email protected]/dist/images/basic/bulb.png"><span> Nothing prevents you from downloading and installing your own Anaconda/Miniconda distro in your home directory. However, user supported is limited if you choose to do so.</span>
</p>
<p><span>For more info, click </span><a href="https://docs.anaconda.com/anaconda/install/linux/"
target="_blank"
rel="noopener"><span>here</span></a><span>.</span></p>
</div>
<h4 id="Using-Jupyter-Notebooks-on-the-large-memory-nodes"
data-id="Using-Jupyter-Notebooks-on-the-large-memory-nodes"><a class="anchor hidden-xs"
href="#Using-Jupyter-Notebooks-on-the-large-memory-nodes"
title="Using-Jupyter-Notebooks-on-the-large-memory-nodes"><span
class="octicon octicon-link"></span></a><span>Using Jupyter Notebooks on the large memory nodes</span>
</h4>
<p><span>This document explains how to run a Jupyter notebook on BIL using a Jupyter client on the workshop VM.</span>
</p>
<p>
<span>Follow the steps below to run a Jupyter notebook on using a Jupyter client on your local machine.</span>
</p>
<ol>
<li><span>Login to the workshop VM using </span><code>x2go</code><span>.</span></li>
<li><span>Load an anaconda module to put the latest version of anaconda and Jupyter in your path.</span>
</li>
</ol>
<pre><code>module load anaconda3
</code></pre>
<ol start="3">
<li><span>Get a BIL compute node allocated for your use. Get a BIL compute node allocated for you by using the </span><code>interact</code><span> command. For example,</span>
</li>
</ol>
<pre><code>interact -n 10 --mem=64Gb
A command prompt will appear when your session begins
"Ctrl+d" or "exit" will end your session
</code></pre>
<ol start="5">
<li><span>Find the hostname of the node you are running on</span><br>
<span>You will need the hostname when you are mapping a port on your local machine to the port on BIL compute node. Find the hostname of the node you are on from the prompt, or type the hostname command.</span>
</li>
</ol>
<pre><code>04:37:12 icaoberg@l001 ~ → hostname
l001.pvt.bil.psc.edu
</code></pre>
<ol start="6">
<li><span>Start a Jupyter notebook and find the port number and token</span><br>
<span>Start a Jupyter notebook. From the output of that command, find the port that you are running on and your token. Pay attention to the port number you are given. You will need it to make the connection between the compute node and the workshop VM.</span>
</li>
</ol>
<p><span>The port number Jupyter uses on the compute node can be different each time a notebook is started. Jupyter will attempt first to use port 8888, but if it is taken - by a different Jupyter user for example - it increases the port number by one and tries again, and repeats this until it finds a free port. The one it settles on is the one it will report.</span>
</p>
<pre><code>jupyter notebook --no-browser --ip=0.0.0.0
[W 2022-03-22 16:45:13.993 LabApp] 'ip' has moved from NotebookApp to ServerApp. This config will be passed to ServerApp. Be sure to update your config before our next release.
[W 2022-03-22 16:45:13.994 LabApp] 'ip' has moved from NotebookApp to ServerApp. This config will be passed to ServerApp. Be sure to update your config before our next release.
[W 2022-03-22 16:45:13.994 LabApp] 'ip' has moved from NotebookApp to ServerApp. This config will be passed to ServerApp. Be sure to update your config before our next release.
[I 2022-03-22 16:45:14.013 LabApp] JupyterLab extension loaded from /bil/packages/anaconda3/4.11.0/lib/python3.9/site-packages/jupyterlab
[I 2022-03-22 16:45:14.013 LabApp] JupyterLab application directory is /bil/packages/anaconda3/4.11.0/share/jupyter/lab
[I 16:45:14.024 NotebookApp] Serving notebooks from local directory: /bil/users/icaoberg
[I 16:45:14.024 NotebookApp] Jupyter Notebook 6.4.5 is running at:
[I 16:45:14.025 NotebookApp] http://l001.pvt.bil.psc.edu:8888/?token=6dd14be951e5717631f9646d292a7dae06c8173c1d850c1b
[I 16:45:14.025 NotebookApp] or http://127.0.0.1:8888/?token=6dd14be951e5717631f9646d292a7dae06c8173c1d850c1b
[I 16:45:14.025 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
[C 16:45:14.039 NotebookApp]
To access the notebook, open this file in a browser:
file:///bil/users/icaoberg/.local/share/jupyter/runtime/nbserver-1022410-open.html
Or copy and paste one of these URLs:
http://l001.pvt.bil.psc.edu:8888/?token=6dd14be951e5717631f9646d292a7dae06c8173c1d850c1b
or http://127.0.0.1:8888/?token=6dd14be951e5717631f9646d292a7dae06c8173c1d850c1b
</code></pre>
<ol start="7">
<li><span>Map a port on your local machine to the port Jupyter is using on the BIL compute node. Open another terminal to map the port 8888 in the workshop VM machine to the port you are using (8888 in this example) on the compute node. This is a bit of the chicken-and-the-egg situation: if you knew what node and what port you would end up on, you could have done the mapping on the first connection. But there is no way to know that a-priori.</span>
</li>
</ol>
<p><span>In the new terminal type</span></p>
<pre><code>ssh -L <local-port>:<compute-host-name>:<compute-node-port> workshop.bil.psc.edu -l <username>
</code></pre>
<p><span>You must use the correct compute node name and port that you have been allocated. In this case, because you were connected to port 8888 on compute node r001, that command would look like</span>
</p>
<pre><code>ssh -L 8888:l001.pvt.bil.psc.edu:8888 workshop.bil.psc.edu -l icaoberg
</code></pre>
<p>
<span>Here the localhost port is </span><code>8888</code><span>. After the first </span><code>:</code><span> comes the long name of the compute node, a colon, and the port where Jupyter is running. Here, that string is </span><code>l001.pvt.bil.psc.edu:8888</code><span>.</span>
</p>
<ol start="8">
<li><span>Open a browser window to connect to the Jupyter server. On the workshop VM machine, open a browser and point it to </span><code>http://localhost:8888</code><span>.</span>
</li>
</ol>
<p><img src="https://i.imgur.com/TRFxBOz.png" alt="" loading="lazy"></p>
<p><span>You will be prompted to enter a token to make the connection. Use the token given to when you started the Jupyter server on the BIL compute node (step 6 above).</span>
</p>
<p><img src="https://i.imgur.com/FD6AdCo.png" alt="" loading="lazy"></p>
<ol start="9">
<li><span>When you are done, close your interactive session on BIL.</span></li>
</ol>
<h3 id="Using-Matlab" data-id="Using-Matlab" style=""><a class="anchor hidden-xs" href="#Using-Matlab"
title="Using-Matlab"><span
class="octicon octicon-link"></span></a><span>Using Matlab</span></h3>
<p><span>If you wish to use Matlab, then please request permission to use it first by filling this </span><a
href="https://www.psc.edu/resources/software/matlab/permission-form/" target="_blank"
rel="noopener"><span>form</span></a><span>.</span></p>
<p><span>After getting access you can use it with</span></p>
<pre><code>module load matlab/2021a
matlab -nosplash
</code></pre>
<p><img src="https://i.imgur.com/PYjCKva.png" alt="" loading="lazy"></p>
<h3 id="Using-ITK-SNAP" data-id="Using-ITK-SNAP" style=""><a class="anchor hidden-xs" href="#Using-ITK-SNAP"
title="Using-ITK-SNAP"><span
class="octicon octicon-link"></span></a><span>Using ITK-SNAP</span></h3>
<p><span>ITK-SNAP is a software application used to segment structures in 3D medical images.</span></p>
<pre><code>module load itksnap/3.8.0
itksnap
</code></pre>
<p><img src="https://i.imgur.com/WLRsLk4.png" alt="" loading="lazy"></p>
<h3 id="Installing-and-using-SimpleITK" data-id="Installing-and-using-SimpleITK" style=""><a
class="anchor hidden-xs" href="#Installing-and-using-SimpleITK"
title="Installing-and-using-SimpleITK"><span class="octicon octicon-link"></span></a><span>Installing and using SimpleITK</span>
</h3><img src="https://itk.org/Wiki/images/9/95/SimpleITK-SquareTransparentLogo.png" width="25%">
<pre><code>module load anaconda3/4.11.0
python -m venv .
source ./bin/activate
pip install numpy scipy SimpleITK
</code></pre>
<p><span>For example, to load an image as a numpy array</span></p>
<pre><code>import SimpleITK as sitk
import numpy as np
file = '/bil/data/hackathon/2022_GYBS/data/subject/201606_red_mm_RSA.nii.gz'
image = sitk.ReadImage(file)
arr = sitk.GetArrayFromImage(image)
</code></pre>
<p><span>If you are using iPython you can confirm this</span></p>
<pre><code>In [2]: whos
Variable Type Data/Info
-------------------------------
arr ndarray 1090x942x997: 1023699660 elems, type `uint8`, 1023699660 bytes (976.2760734558105 Mb)
file str /bil/data/hackathon/2022_<...>/201606_red_mm_RSA.nii.gz
image Image Image (0x55faa4652f50)\n <...> Capacity: 1023699660\n
np module <module 'numpy' from '/bi<...>kages/numpy/__init__.py'>
sitk module <module 'SimpleITK' from <...>s/SimpleITK/__init__.py'>
</code></pre>
<div class="alert alert-info">
<p><img class="emoji" alt=":bulb:"
src="https://cdn.jsdelivr.net/npm/@hackmd/[email protected]/dist/images/basic/bulb.png"><span> If you are working in virtual environment you might also want to install other useful libraries like</span>
</p>
<pre><code>pip install matplotlib scipy pandas
</code></pre>
</div>
<h3 id="Installing-ITK" data-id="Installing-ITK" style=""><a class="anchor hidden-xs" href="#Installing-ITK"
title="Installing-ITK"><span
class="octicon octicon-link"></span></a><span>Installing ITK</span></h3><img
src="https://itk.org/wp-content/uploads/2019/10/ITK_Logo_Large-300x143.png">
<pre><code>module load anaconda3/4.11.0
pip install --user itk
</code></pre>
<p><span>or</span></p>
<pre><code>module load anaconda3/4.11.0
python -m venv .
source ./bin/activate
pip install itk
</code></pre>
<p><span>For a quick guide to ITK please visit </span><a
href="https://itkpythonpackage.readthedocs.io/en/master/Quick_start_guide.html" target="_blank"
rel="noopener"><span>here</span></a><span>.</span></p>
<p><span>For example, to read an image</span></p>
<pre><code>import itk
import numpy as np
# Read input image
file = '/bil/data/hackathon/2022_GYBS/data/subject/201606_red_mm_RSA.nii.gz'
itk_image = itk.imread(file)
# View only of itk.Image, pixel data is not copied
np_view = itk.array_view_from_image(itk_image)
</code></pre>
<p><span>If you are using iPython you can confirm this</span></p>
<pre><code>Variable Type Data/Info
---------------------------------------
file str /bil/data/hackathon/2022_<...>/201606_red_mm_RSA.nii.gz
itk LazyITKModule <module 'itk' from '/bil/<...>ackages/itk/__init__.py'>
itk_image itkImageUC3 Image (0x5653b5da85f0)\n <...> Capacity: 1023699660\n
np module <module 'numpy' from '/bi<...>kages/numpy/__init__.py'>
np_view NDArrayITKBase [[[0 0 0 ... 0 0 0]\n [0<...>0]\n [0 0 0 ... 0 0 0]]]
</code></pre>
<div class="alert alert-info">
<p><img class="emoji" alt=":bulb:"
src="https://cdn.jsdelivr.net/npm/@hackmd/[email protected]/dist/images/basic/bulb.png"><span> If you are working in virtual environment you might also want to install other useful libraries like</span>
</p>
<pre><code>pip install matplotlib scipy pandas
</code></pre>
</div>
<h3 id="Installing-nibabel" data-id="Installing-nibabel" style=""><a class="anchor hidden-xs"
href="#Installing-nibabel"
title="Installing-nibabel"><span
class="octicon octicon-link"></span></a><span>Installing nibabel</span></h3>
<p><img src="https://nipy.org/nibabel/_static/nibabel-logo.svg"><br><br>
<span>Read/write access to some common neuroimaging file formats.</span></p>
<pre><code>module load anaconda3/4.11.0
pip install --user nibabel
</code></pre>
<p><span>or</span></p>
<pre><code>module load anaconda3/4.11.0
python -m venv .
source ./bin/activate
pip install nibabel
</code></pre>
<h3 id="Installing-cwltool" data-id="Installing-cwltool" style=""><a class="anchor hidden-xs"
href="#Installing-cwltool"
title="Installing-cwltool"><span
class="octicon octicon-link"></span></a><span>Installing cwltool</span></h3><img
src="https://repository-images.githubusercontent.com/43816051/ba006580-04d7-11eb-9bab-c6463ba5022b"
width="30%">
<pre><code>module load anaconda3/4.11.0
pip install --user cwltool cwlref-runner
</code></pre>
<p><span>or</span></p>
<pre><code>module load anaconda3/4.11.0
python -m venv .
source ./bin/activate
pip install cwltool cwlref-runner
</code></pre>
<h3 id="Installing-spyder" data-id="Installing-spyder" style=""><a class="anchor hidden-xs"
href="#Installing-spyder"
title="Installing-spyder"><span
class="octicon octicon-link"></span></a><span>Installing </span><code>spyder</code></h3>
<p><span>Spyder is a free and open source scientific environment written in Python, for Python, and designed by and for scientists, engineers and data analysts.</span>
</p>
<pre><code>export QT_XCB_GL_INTEGRATION=none
module load anaconda3/4.11.0
python3 -m venv .
source ./bin/activate
pip install spyder
spyder
</code></pre>
<p><img src="https://i.imgur.com/mc56akf.png" alt="" loading="lazy"></p>
<h2 id="Exercises" data-id="Exercises" style=""><a class="anchor hidden-xs" href="#Exercises"
title="Exercises"><span
class="octicon octicon-link"></span></a><span>Exercises</span></h2>
<h3 id="Exercise-0-Submit-a-job-using-OpenOnDemand" data-id="Exercise-0-Submit-a-job-using-OpenOnDemand"
style=""><a class="anchor hidden-xs" href="#Exercise-0-Submit-a-job-using-OpenOnDemand"
title="Exercise-0-Submit-a-job-using-OpenOnDemand"><span
class="octicon octicon-link"></span></a><span>Exercise 0. Submit a job using OpenOnDemand</span>
</h3>
<p><img src="https://i.imgur.com/2XE2OGe.png" alt="" loading="lazy"></p>
<p><img src="https://i.imgur.com/EdCHSoS.png" alt="" loading="lazy"></p>
<h3 id="Exercise-0-Hello-World-on-Jupyter-Lab" data-id="Exercise-0-Hello-World-on-Jupyter-Lab" style=""><a
class="anchor hidden-xs" href="#Exercise-0-Hello-World-on-Jupyter-Lab"
title="Exercise-0-Hello-World-on-Jupyter-Lab"><span class="octicon octicon-link"></span></a><span>Exercise 0. </span><code>Hello,
World!</code><span> on Jupyter Lab</span></h3>
<h3 id="Exercise-1-Load-and-combine-images-in-Fiji" data-id="Exercise-1-Load-and-combine-images-in-Fiji"
style=""><a class="anchor hidden-xs" href="#Exercise-1-Load-and-combine-images-in-Fiji"
title="Exercise-1-Load-and-combine-images-in-Fiji"><span
class="octicon octicon-link"></span></a><span>Exercise 1. Load and combine images in Fiji</span>
</h3><h4 id="Loading-the-proper-module1" data-id="Loading-the-proper-module"><a class="anchor hidden-xs"
href="#Loading-the-proper-module1"
title="Loading-the-proper-module1"><span
class="octicon octicon-link"></span></a><span>Loading the proper module</span></h4>
<p><span>Click the black terminal icon in the top left corner of your screen</span><br>
<img src="https://i.imgur.com/sIGIxvP.png" alt="" loading="lazy"></p>
<p><span>When the terminal opens, type the following commands to load Fiji into your workspace.</span></p>
<pre><code>module load fiji
fiji
</code></pre>
<p><span>The first time running these commands, the system will install Fiji in your home directory.</span>
</p>
<div class="alert alert-info">
<p><img class="emoji" alt=":bulb:"
src="https://cdn.jsdelivr.net/npm/@hackmd/[email protected]/dist/images/basic/bulb.png"><span> If the font size in your terminal is too small, you can press CTRL and + to increase the font size.</span>
</p>
<p><img src="https://i.imgur.com/Ch82FcC.png" alt="" loading="lazy"></p>
</div>
<p><span>After running the commands above, a toolbar should appear in your screen, similar to the picture below</span>
</p>
<p><img src="https://i.imgur.com/My93FBc.png" alt="" loading="lazy"></p><h4 id="Update-Fiji-optional"
data-id="Update-Fiji-optional">
<a class="anchor hidden-xs" href="#Update-Fiji-optional" title="Update-Fiji-optional"><span
class="octicon octicon-link"></span></a><span>Update Fiji (optional)</span></h4>
<p><img src="https://i.imgur.com/FAnec4v.png" alt="" loading="lazy"></p>
<p><span>and then update the plugins</span></p>
<p><img src="https://i.imgur.com/xgYtNKm.png" alt="" loading="lazy"></p><h4 id="Loading-the-first-channel"
data-id="Loading-the-first-channel">
<a class="anchor hidden-xs" href="#Loading-the-first-channel" title="Loading-the-first-channel"><span
class="octicon octicon-link"></span></a><span>Loading the first channel</span></h4>
<p><span>On the "(Fiji Is Just) ImageJ" window select menu</span></p>
<pre><code>[PLUGINS]->[BIOFORMATS][BIOFORMATS-IMPORTER]
</code></pre>
<p><img src="https://i.imgur.com/JjAc2xQ.png" alt="" loading="lazy"></p>
<p><span>Click on FILE SYSTEM in the PLACES sidebar and navigate to</span></p>
<pre><code>/bil/workshops/2021/data_submission/data/fiji/stitchedImage_ch1
</code></pre>
<p><img src="https://i.imgur.com/5VA6Yvh.png" alt="" loading="lazy"></p>
<p><span>then click on</span></p>
<pre><code>StitchedImage_Z001_L001.jp2
</code></pre>
<p><img src="https://i.imgur.com/QbkvvMg.png" alt="" loading="lazy"></p>
<p><span>On the "Bio-Formats Input Options" popup select</span></p>
<p><img src="https://i.imgur.com/5aHcipk.png" alt="" loading="lazy"></p>
<p><span>-View Stack with Hyperstack</span><br>
<span>-Group files with similar names</span><br>
<span>-Color mode: Custom</span><br>
<span>-Click [OK]</span></p>
<p><span>On the "Bio-Formats File Stitching" popup select</span></p>
<p><img src="https://i.imgur.com/JNNfG3e.png" alt="" loading="lazy"></p>
<p><span>-Axis 1 number of images enter 5</span><br>
<span>-Axis 1 axis first image enter 1</span><br>
<span>-Axis 1 axis increment enter 54</span><br>
<span>-Click [OK]</span></p>
<p><span>On the "Bio-Formats Series Options" popup select</span></p>
<p><img src="https://i.imgur.com/pVvsSnM.png" alt="" loading="lazy"></p>
<p><span>-Series 1 (8557x11377)</span><br>
<span>-Click [OK]</span></p>
<p><span>On the "Bio-Formats Custom Colorization" popup select</span></p>
<p><img src="https://i.imgur.com/2Z9qVJ3.png" alt="" loading="lazy"></p>
<p><span>-Series 0 channel 0 Red 255</span><br>
<span>-Click [OK]</span></p><h4 id="Loading-the-second-channel" data-id="Loading-the-second-channel"><a
class="anchor hidden-xs" href="#Loading-the-second-channel" title="Loading-the-second-channel"><span
class="octicon octicon-link"></span></a><span>Loading the second channel</span></h4>
<p><span>We will follow a similar procedure as the first channel</span></p>
<p><span>On the "(Fiji Is Just) ImageJ" window select</span></p>
<pre><code>[PLUGINS]->[BIOFORMATS][BIOFORMATS-IMPORTER]
</code></pre>
<p><img src="https://i.imgur.com/0SERFvc.png" alt="" loading="lazy"></p>
<p><span>Click on FILE SYSTEM in the PLACES sidebar and navigate to</span></p>
<pre><code>/bil/workshops/2021/data_submission/data/fiji/stitchedImage_ch2
</code></pre>
<p><span>then click on</span></p>
<pre><code>StitchedImage_Z001_L001.jp2