雅典人和西哥特人

这篇文章是有感于尼尔-波兹曼在纽约大学的毕业演讲而作,尼尔-波兹曼最为人熟知的作品是《娱乐至死》,前段时间我也刚刚阅读完,今天恰巧在图书馆还书时看到一本《世界名校开学毕业典礼演讲精选》,遂借回来当作闲暇时间放松阅读。刚刚随机翻开一篇,正是这篇《雅典人和西哥特人》,完整读完这篇讲稿,似曾相识,这样的思想在我的认知系统里出现过,但记忆是会错乱的,依稀记得在不知第几期的《锵锵行天下》里,貌似是在希腊,窦文涛、周轶君有谈到说其实每个人在某种程度上都是希腊人,大概是这个意思。波兹曼的这篇讲稿无论在何时何地仍具启发意义。

先把波兹曼的全文放上:

致纽约大学毕业生的演讲,该演讲稿似未曾公开发布,仅为波兹曼的创作

尼尔·波兹曼(Neil Postman,1931~2003年):美国著名作家、文化批评家,1953年毕业于纽约州立大学,1958年毕业于哥伦比亚大学师范学院,获教育学博士学位,1959年起长期任教于纽约大学,曾任纽约大学教育学院文化与传播系主任,曾于1987年获奥威尔奖(George Orwell Award),主编普通语义学杂志《Et Cetera》达十年,其作品众多,译成中文的有《童年的消失》、《娱乐至死》等。

各位老师、父母、来宾、毕业生,不用担心。我很明白,在今天这样一个如此令人兴奋的日子,你们对于演讲者的要求,首先就是言简意赅,这点我不会让你们失望的。我的演讲总共有85个句子,你们听到我刚才已经说了4句。我将花大概12分钟来说完。我必须告诉你们,对于我来说,要做到如此简练可不容易,因为我已经选择了你们的祖先这样一个复杂的主题作为我的话题。当然,说的不是你们生物学上的祖先,对此我一无所知,而是你们精神上的祖先,对此我略知一二。准确地说,我是想告诉你们,很多年前曾经有过两群人,他们的影响仍旧存在于我们中间。他们彼此判然有别,代表着相反的价值标准和传统。我想,今天让你们回想他们是合适之举,因为要不了多久,你们就必须选择站在哪群人的精神行列之中。

第一群人生活在大约两千五百年前,我们今天称作希腊的地方,住在我们今天称作雅典的城市。对他们的起源,我们所知道的远远不如我们想知道的,不过对他们的成就我们知之甚多。比如说,他们是第一个发展出完整的字母表的民族,因此他们也成为地球上第一个真正有文化的民族。他们发明了政治民主的观念并欣然实践之,所表现出的活力令我们汗颜。他们发明了我们称为哲学的东西。他们还发明了我们称作逻辑和修辞的东西。他们非常接近于发明我们称为科学的东西,他们中的一个人,名字叫做德谟克里特,在两千三百年前,在任何现代科学家能想到之前,就构想出了物质的原子理论,他们写作并演唱具有无法超越之优美和洞见的史诗。他们写作并上演戏剧,这些戏剧在三千年之后仍旧具有激发观众之笑和泪的力量。他们甚至还发明了今天我们称为奥林匹克的东西,在他们的价值标准中,享有最高地位的是人们应该在所有事物中追求卓越。他们信仰理性,他们信仰美,他们信仰适度,他们发明了我们今天作为生态学来了解的词语和观念。

大约两千年前,他们的文化的活力衰退,这些人开始消失,但他们所创造的没有消失。他们的想象、艺术、政治、文学和语言遍布全世界,以至于我们今天在就任何话题发言的时候,很难不重复某个雅典人在二千五百三十三年前有关这个问题的言论。

第二群人生活在我们今天称作德国的地方,大概在一千七百年前兴盛起来。我们将他们称为西哥特人,你也许记得,你们六年级或七年级的老师曾经提到过他们。他们是非常棒的骑士,这大概是他们在历史上唯一让人愉快的事情。他们是掠夺者,残酷无情。他们的语言粗俗而肤浅。他们的艺术拙劣甚至可以说是古怪。他们横扫欧洲,沿路摧毁一切,他们侵占了罗马帝国。比起焚书、玷污建筑、毁坏艺术品,他们没有更喜欢做的事情了。从他们那里我们找不到诗歌、戏剧、逻辑、科学以及人文主义政治学。

  和雅典人一样,西哥特人也消失了,不过在他们带来的所谓的黑暗时代之后。欧洲花了差不多一千年的时间才从西哥特人带来的浩劫中恢复过来。

现在,我想说的是,雅典人和西哥特人仍然存在,这是通过我们以及我们的生活方式而实现的。在我们周围,在这座大厅,在这个社区,在我们的国家,有一些人看待这个世界的方式反映着雅典人的方式,而有些人则是以西哥特人的方式看待世界。当然,我的意思不是说现代的雅典人在街上若有所思地闲逛,还朗诵着诗歌和哲学,也不是说西哥特人是杀手。我想说的是,成为雅典人或西哥特人就是围绕着一套价值标准来组织你们的生活。雅典人是一种观念,西哥特人也是一种观念。我给你们简单说一下这些观念包括哪些内容。

成为一个雅典人就是要拥有知识,尤其是要拥有神圣的求知欲。沉思、推理、实验、怀疑,所有这些,对于雅典人来说,就是一个人所能完成的最高尚的行为。对于西哥特人来说,求知欲是无用的,除非它能帮助你挣钱或是获得凌驾他人之上的权力

  成为雅典人就是要珍视语言,因为你们相信它是人类最宝贵的天赋。在雅典人使用语言的时候,他们努力做到优雅、准确和丰富,他们钦佩那些能获得这些技能的人。对于西哥特人来说,这个词和另外一个词一样好,一个句子和另一个句子没有区别。除了陈词滥调,西哥特人的语言没有更高的追求。

  成为雅典人就是要明白维系文明社会之完整的纽带是细小而脆弱的,因此,雅典人极为重视传统、社会制约和连续性。对一个雅典人来说,不讲礼貌是违反社会秩序的行为。现代的西哥特人对这些毫不在意。西哥特人认为自己是宇宙的中心,传统是为了他们自己的便利才存在的,彬彬有礼是虚伪和负担,历史不过是昨天报纸上的东西

  成为雅典人就是要关注公共事务,关注公众行为的进步。当然,古代的雅典人也有一个词来指那些不这么做的人,这个词就是“蠢人”,由此我们有了“白痴”这个词。现代的西哥特人只对自己的事情感兴趣,丝毫感觉不到团体的意义。

  最后,成为一个雅典人就是要尊重纪律、技能和品味,这些是产生持久艺术所必需的。因此,在接近一件艺术品的时候,雅典人通过学习和体验来完备他们的想象力。对一个西哥特人来说,除了流行的程度,没有其他衡量艺术之卓越的标准。让大多数人喜欢的就是好的。西哥特人不尊重,甚至也不承认其他的标准。

现在,所有这一切和你们的关系是明显的。最终,像我们其他人那样,你们必须站在这边或是那一边。你们必须做雅典人或西哥特人。当然,成为雅典人要难一些,因为你们必须学会如何成为雅典人,你们必须为此付出努力,而我们所有人,在某种程度上都是天生的西哥特人。这就是为什么西哥特人要比雅典人多的原因。我必须告诉你们,你们不能仅仅靠上学或是不断获取学位就能变成雅典人。我的岳父是我认识的人当中最虔诚的雅典人之一,他的整个成年生活都是作为纽约市第七大道上的裁缝度过的;另一方面,我认识的许多医生、律师和工程师,他们都是实实在在的西哥特人。我也必须告诉你们,说到这我既悲伤又羞愧,在我们的一些著名大学中,甚至就在我们的纽约大学,有这样一些教授,我们完全可以说他们就是隐秘的西哥特人。不过,你们一定要相信,毕竟学校从本质上来说还是一个雅典人的观念。雅典的文化成就和这所大学的教员的行为之间有着直接联系。我很容易就可以想象得到,柏拉图、亚里士多德、德谟克里特在我们的课堂上也会感到舒服自在,而西哥特人只会在墙上涂鸦。

因此,无论你们是否意识到,你们上大学的目的是要看到雅典人的方式,并对其产生兴趣。今天我们还无法了解你们中的多少人将会选择这种方式,多少人将不会。你们年轻,我们还没法看到你们的将来。不过我要告诉你们,这也是我的结束语:我希望将来流传的消息是,你们这届毕业班中的雅典人在人数上要大大超过西哥特人,我想不到比这更好的祝愿之词了。谢谢,祝贺你们!

(陈 越 译)

链接:http://data.book.hexun.com/chapter-1904-1-40.shtml

看毕,一定会想,为什么把雅典人和西哥特人放在一起?二者在历史的长河中都曾灿若繁星,也都消失了,但二者对于后世的影响以及后人对他们的看法则截然不同。雅典人消失了,但他们的创造没有消失,他们的想象、艺术、政治、文学和语言遍布全世界,以至于我们今天在就任何话题发言的时候,很难不重复某个雅典人在二千五百三十三年前有关这个问题的言论,再看看西哥特人呢,西哥特人也消失了,不过在他们带来的所谓的黑暗时代之后。欧洲花了差不多一千年的时间才从西哥特人带来的浩劫中恢复过来。

这种差异类似于鲁迅笔下的“有的人活着,他已经死了;有的人死了,他还活着”,雅典人对后世的影响有多大呢?从我们目前生活空间的活动来看,似乎雅典人的影子无处不在,哲学、逻辑和修辞、戏剧、理性、奥林匹克,这些从不会消失,并将继续影响后世。

波兹曼对于毕业生的祝愿是成为一个雅典人,其实不仅仅是毕业生,这样的祝愿对大学里的每个学子都适用。

我们现今在探究哲学时常常要回归到古希腊时代的哲学去,柏拉图、亚里士多德、德谟克里特的智慧源远流长,回归到哲学本身的定义,哲学的英文是philosophy,前缀 phi 表示“爱”的意思,哲学就是“爱智慧”的意思,我们对智慧的爱从不会减少。

如果跨越中西,我想从另一个层面理解的话,雅典人的一部分是我们所说的君子,给我的印象是雅典人对自身的要求更加全面,尤其是民主和参与公共事务上,但这方面与我们的思想又有异曲同工之妙,比如“居庙堂之高则忧其民,处江湖之远则忧其君”,比如“先天下之忧而忧,后天下之乐而乐”,但整体而言民众关注公共事务的这种意识并不是很强。往更远的地方去想,如果一个社会里雅典人远远多于西哥特人的话,这个社会将具有无限的发展潜力和空间。

最终还是要回归到如何做一个雅典人的问题上。雅典人拥有神圣的求知欲;雅典人追求语言的优雅、准确和丰富;雅典人重视传统、社会制约和连续性;雅典人关注公共事务、关注公共行为的进步;雅典人尊重纪律、技能和品味,这些是产生持久艺术所必需的;雅典人在接近一件艺术品的时候会通过学习和体验来完备他们的想象力,这些都是雅典人的特点。

反观西哥特人的表现,或许会给你更大的冲击,求知欲是无用的,除非它能帮助你挣钱或是获得凌驾他人之上的权力;这个词和另外一个词一样好,一个句子和另一个句子没有区别,除了陈词滥调,西哥特人的语言没有更高的追求;西哥特人认为自己是宇宙的中心,传统是为了他们自己的便利才存在的,彬彬有礼是虚伪和负担,历史不过是昨天报纸上的东西;现代的西哥特人只对自己的事情感兴趣,丝毫感觉不到团体的意义;对一个西哥特人来说,除了流行的程度,没有其他衡量艺术之卓越的标准。让大多数人喜欢的就是好的。西哥特人不尊重,甚至也不承认其他的标准。

会发现西哥特人远比雅典人多,为何?当然是因为成为一个雅典人更难,所以尼尔-波兹曼也说,“我们所有人,在某种程度上都是天生的西哥特人”,so,man,what’s your choice?

成为一个雅典人,必须要付出努力。

20190104 Finished in 京师大厦

 

统计图表描述之箱式图

了解箱式图之前首先对一个基本概念要有所了解。那就是四分位数。

四分位差(quartile deviation),通常用符号Q来表示,指在一个次数分配中,中间50%的次数的距离的一半。在一组数据中,它的值等于P25到P75距离的二分之一。这个差异量数能够反映出数据分布中中间50%数据的散布情况。

由于P25之下占有总次数的四分之一,故P25称为第一四分位Q1,中数或P50称为第二四分位(Q2),P75称为第三四分位(Q3).四分位差就是第三四分位与第一四分位之差的一半。


箱式图(Boxplot),包含多个基本统计量,以集中展现成组数据分布的形状、中心和分散特征的一类统计图。较适合于多组数据之间的对比,同时也是分析离群值(outliers)的有效工具。(发明人John Tukey,1977)

  • 简单箱式图:

分别以四分位数(Q3,Q1)为箱型方框的上、下边,以最大值(max)、最小值(min)为线的上、下端,同时标出中位数(median)的位置。如下图:

123

其中(2)呈对称分布特点;(1)分布呈左偏;(3)分布呈右偏。通过箱式图中数据点的位置关系可以反映数据分布的对称性。

此外,还有考虑离群值的箱式图,如下图:

456

20181203

磁共振扫描序列及应用场景

Sequence Name Synopsis Application
AAL_Scout 3D Scout Scout/Localizer
CV, CV_NAV True FISP with navigator option Cardiac Imaging
CISS Constructive Interference in Steady-State. A gradient echo stimulated T2 echo using TrueFISP High resolution T2 weighted MRI
CSI_SE, CSI_ST,

CSI_FID

Chemical shift imaging (CSI) with spin echo,

stimulated echo and FID options

Spectroscopic imaging
DESS Double echo steady state Joint & prostate imaging
EP_SEG_FID

EP_SEG_SE

Gradient echo and spin echo segmented EPI Fast structural imaging
EP2D_BOLD Gradient echo EPI fMRI
EP2D_DIFF Fast (EPI-based) diffusion-weighted or tensor

imaging

Tractography, molecular

self-diffusion

EP2D_FID, EP2D_PACE,

EP2D_SE

2D EPI. PACE includes 2D motion correction Fast imaging
EP2D_PASL Pulsed ASL (PASL) Perfusion
EP2D_pCASL Pseudo continuous ASL (pCASL) Perfusion
FID Simple FID acquisition Spectroscopy
FL_FQ Flow quantification of vasculature Velocimetry
FL_PC Phase contrast GRE Angiography
FL_PERI_TOF, FL_TOF GRE Time of flight imaging Angiography
FL3D_CE, FL3D_CE_NAV,

FL3D_RD,

3D FLASH for exogenous (Gd) perfusion imaging DCE Perfusion, Angiography
FL3D_VIBE Volumetric Interpolated Breath-hold Structurals
GRE Conventional GE imaging Structurals, field mapping,

T2* imaging

HASTE Single shot fast spin echo imaging Breathheld T2 weighted

Structurals

MEDIC Multi-echo data image combination Structurals
PSIF Steady-state GRE/SE sequence T2* or T2 weighted imaging
SE, SE_15B130,

SE_20RB130HF, SE_MC

Spin Echo imaging Structurals
SVS_SE, SVS_ST Single voxel spectroscopy with spin or stimulated

echoes similar to PRESS.

Spectroscopy
TFL, TFL_CB Turbo FLASH including MPRAGE Structurals, Angiography,

T2* mapping

TPI Twisted Projection Imaging (by special request

only)

Multinuclear imaging
TRUFI True FISP Steady-state free precession. Angiography, Cardiac
TSE, TSE_NAV,

TSE_VFL

Turbo spin-echo (TSE) Structurals

 

CE: Contrast Enhanced, CISS: Constructive Interference in Steady-State, CSI: Chemical-Shift Imaging, DWI: Diffusion-Weighted Imaging, DTI: Diffusion tensor imaging, EPI: Echo Planar Imaging, FID: Free Induction Decay, FISP: Fast-Imaging in Steady-state Precession, FLASH: Fast Low-Angle SHot, GRE: Gradient-Recalled

以上内容转自:https://upci.upmc.edu/imaging/pdf/Sequences.pdf,仅供学习使用

20181128

心存念想

情不知所起,想谈谈念想。


工作很疲惫,但再疲惫晚上都可以回到自己的床,舒展他垂丧身心;生活不如意,幸得佳人伴(如果有佳人),佳人一笑抿哀愁,佳人一抱乐开怀;朝九晚五的生活平淡无奇,于是谋划着下个假期赏他壮美山河。床是你的念想,佳人是你的念想,假期是你的念想。

学生时期其实是最幸福的,作业繁重,但是心知肚明一定会有一个期限,那个期限是考试,是回家,是放假,是见到想见的人,是获得心仪的礼物,那一天虽未到来,但明知它一定会到来。学生时期的幸福,很多是确定的,是可以预见的。在准确衡量自己实力的基础上,踏踏实实努力是可以获得十足的进步;在你付出很多心血之后是真的可以得到你想要的东西。那时心存念想是一件很幸福的事,绝大多数情况下,只要这个念想不离谱,不异想天开,终有实现的那一天。

至今仍记得初中班主任在说中考成绩出来时感叹道的“几家欢乐几家愁”,那个时候,中考是那个阶段最重要的事,多数学子拥有着同一个梦想,便是笑傲考场。考生们披晨光而出,再荷月而归,追逐着自己的小小梦想。但并非每个人都可以稳定发挥或超常发挥,塞翁失马也是常有之事,纵是如此,每个人都可以确定地努力,他们心存念想,一个对于成绩的纯粹的念想。十多年后,再看那段时光,感觉并没那么重要,就像在历史长河中每段历史都显得十分渺小,但在当时,就是再真实不过、再重要无比的生活了。

毕业之后的生活,面对的多是不确定。或许某个阶段好运和好事都围着你转,或许有时又如置身无人问津的驿站。生活如波浪 ,起起伏伏,若随波逐流,心情也是阴晴不定;若乘风破浪,心情自然收放自如。

霍金说,“活着就有希望”,希望就是念想,是内心的期望,生活若无念想,便丧失了对生活的激情,很容易陷入一种很丧的状态。很多人说自己的生活毫无波澜,或者说生活如一潭死水,很大程度上与心无念想有关。心存念想,简单点来说,它可以是和煦的阳光,可以是舒畅的清风,可以是晃动的枝丫,也可以是踏青出游,是走访山川大地,是升职加薪,它可以是一切让你对明天心存期待的事。

按我的理解,生活的仪式感其实也是对生活心存念想,仪式感不一定非要像祈祷或做礼拜那样模式化,生活的仪式感更多的像是享受当下的愉悦,不一定要多庄重,只要让自己处于一个很舒服的状态,很享受现在,于是会在心里默默播种下这种快乐,告诉自己下一次也会像现在这般幸福,内心预见到下一次也会得到这种快乐,于是生活的仪式感无形之中是为内心存了一个念想。

念想是微光,这微光足以让你迈出一小步。

20180819

生活小恬淡

坐在球场边,夕阳染红了天空,运动场上满是燃烧着的汗水和激情,一瞬之间,那个想法涌入我心头,你所看到的不是我看到的,你所听到的不是我听到的。片刻之间好像突然间洞悉了之前的好多事。

我在沙漠中为大漠孤烟直心生震撼,拍了照发给你,你在你所在之地方也许百无聊赖;我在山谷间为鸟鸣山更幽流连忘返,录了视频给你,你在你所在之地可能心绪惆怅。我把盛满爱的礼物送给你,自觉一片赤诚之心不可能打动不了你,而我不知道你想要的仅仅是一种在意和关心,是关心你说过的每一个细节。依我目前拙见,爱情之中矛盾源头无非尊重、平等与关心。

联想到现在的朋友圈,朋友圈是什么呢?是记录、是炫耀还是分享美好?那为什么很多人的朋友圈会很不招人喜欢呢?因为那多的是炫耀,是一种高高在上的优越感,而在一个人人平等的社会里,每个人的生活都值得记录,这也是快手短视频等平台火爆的原因之一。每个人在看待事物时都带有自己的阅历,所看所听很少是纯粹只看只听而不联想,于是内心便有了一种对比,幸福感不在对比中产生。那为何很多人的朋友圈看起来很舒服呢?两个关键词,真诚、尊重。

“泻水置平地,各自东西南北流;人生亦有命,安能行叹复坐愁”,而水能载舟,亦能覆舟,你是水或是舟无关紧要,重要的是你找准自己的定位。水,可行使善利万物而不争的权利;舟,必须知道水的不可或缺性并对水报之以尊重。你渴了,想喝水,拿了一个水杯请求帮助,如果你的水杯摆得太高,比水壶都高,你是不可能喝得着水,水杯请求水壶的帮助,一定是比水壶的姿态要低,当水杯请求水壶帮助时,水壶的势能自然是比水杯大的,像极了生活中的很多场合。

如果生活只有一味,我愿给她真。

20180818

优美的忧伤穿越而来

今夜月色很美,清爽的小风慢慢袭来,繁星密密麻麻,弯弯的月亮彷佛悬在云层之上,沿着安静的路漫步,月光渐渐拉长身影,一个如痴如醉的夜晚,不诉凄凉,不诉离别,夜色和着微风弥散了衷肠,我觉得这样的夜再美不过。


而如今当我翻起数年前高中语文课本上阮籍的一首古诗,只想感叹一句,这才真叫优美。

夜中不能寐,起坐弹鸣琴。
薄帷鉴明月,清风吹我襟。
孤鸿号外野,翔鸟鸣北林。
徘徊将何见,忧思独伤心。

这首诗是阮籍咏怀八十二首中的一首,深深为之动容,潸然泪下也不为过。
从文字中想象当时阮籍的场景,躺在床上好久却怎么也睡不着,索性坐起来弹琴,不想诉说自己的忧伤。月光透过帘子,若隐若现;清风吹着衣服,忽起忽落。孤鸿在野外哀号,鸟儿在北林惊鸣。此刻徘徊能看到什么呢,无非是独自伤心、黯然神伤。
我把自己想象成阮籍,此情此景,我有多忧伤,却把忧伤抒发得这么优美。

是的,总有些优美会穿越时光而来,比如这种优美的情感,比如蕴藏于文字背后的情境。


这是一个理想主义的夜晚,我在这样一个“遥遥万里辉,荡荡空中景”的夜晚写下这些,轻飘飘。
20180815

SPM12–batch批量预处理数据

实现的代码如下:
code.m
% By - Galory  Email - 996377370a@gmail.com

% List of open inputs

global sub type
% My files are named as 1 2 3 4 5 6 7 8 9 10
type={'1' '2' '3' '4' '5' '6' '7' '8' '9' '10'};

for i=1:length(type)
    sub = i;


nrun = 1; % enter the number of runs here
jobfile = {'C:\Users\xuwhe\Desktop\pre_fmri\files\batch\code_job.m'};
jobs = repmat(jobfile, 1, nrun);
inputs = cell(0, nrun);
for crun = 1:nrun
end
spm('defaults','fmri');
spm_jobman('run',jobs,inputs{:});
end
code_job.m
%-----------------------------------------------------------------------
% Job saved on 31-Jul-2018 16:26:14 by cfg_util (rev $Rev: 6460 $)
% spm SPM - SPM12 (6906)
% cfg_basicio BasicIO - Unknown
%-----------------------------------------------------------------------

global type sub

inputpath=['C:\Users\xuwhe\Desktop\pre_fmri\data_batch\1dicom\' num2str(sub)];
outputpath =['C:\Users\xuwhe\Desktop\pre_fmri\data_batch\1dicom\' num2str(sub) '\output'];

%选取raw data
pathname1=[inputpath '\0002\'];
sdir1=dir([pathname1,'*.IMA']);%选取IMA
for i=1:length(sdir1)
    imgfile1{i,1}=[pathname1 sdir1(i).name];
end

%选取raw data
pathname2=[inputpath '\0003\'];
sdir2=dir([pathname2,'*.IMA']);%选取IMA
for i=1:length(sdir2)
    imgfile2{i,1}=[pathname2 sdir2(i).name];
end

%选取raw data
pathname3=[inputpath '\0004\'];
sdir3=dir([pathname3,'*.IMA']);%选取IMA
for i=1:length(sdir3)
    imgfile3{i,1}=[pathname3 sdir3(i).name];
end

%选取raw data
pathnameT1=[inputpath '\0005\'];
sdirT1=dir([pathnameT1,'*.IMA']);%选取IMA
for i=1:length(sdirT1)
    imgfileT1{i,1}=[pathnameT1 sdirT1(i).name];
end


%%
matlabbatch{1}.spm.util.import.dicom.data = imgfile1
%%
matlabbatch{1}.spm.util.import.dicom.root = 'flat';
matlabbatch{1}.spm.util.import.dicom.outdir = {[outputpath '\RUN1\']};
matlabbatch{1}.spm.util.import.dicom.protfilter = '.*';
matlabbatch{1}.spm.util.import.dicom.convopts.format = 'nii';
matlabbatch{1}.spm.util.import.dicom.convopts.icedims = 0;
%%
matlabbatch{2}.spm.util.import.dicom.data = imgfile2
%%
matlabbatch{2}.spm.util.import.dicom.root = 'flat';
matlabbatch{2}.spm.util.import.dicom.outdir = {[outputpath '\RUN2\']};
matlabbatch{2}.spm.util.import.dicom.protfilter = '.*';
matlabbatch{2}.spm.util.import.dicom.convopts.format = 'nii';
matlabbatch{2}.spm.util.import.dicom.convopts.icedims = 0;
%%
matlabbatch{3}.spm.util.import.dicom.data = imgfile3
%%
matlabbatch{3}.spm.util.import.dicom.root = 'flat';
matlabbatch{3}.spm.util.import.dicom.outdir = {[outputpath '\RUN3\']};
matlabbatch{3}.spm.util.import.dicom.protfilter = '.*';
matlabbatch{3}.spm.util.import.dicom.convopts.format = 'nii';
matlabbatch{3}.spm.util.import.dicom.convopts.icedims = 0;
%%
matlabbatch{4}.spm.util.import.dicom.data = imgfileT1
%%
matlabbatch{4}.spm.util.import.dicom.root = 'flat';
matlabbatch{4}.spm.util.import.dicom.outdir = {[outputpath '\T1\']};
matlabbatch{4}.spm.util.import.dicom.protfilter = '.*';
matlabbatch{4}.spm.util.import.dicom.convopts.format = 'nii';
matlabbatch{4}.spm.util.import.dicom.convopts.icedims = 0;
matlabbatch{5}.spm.temporal.st.scans{1}(1) = cfg_dep('DICOM Import: Converted Images', substruct('.','val', '{}',{1}, '.','val', '{}',{1}, '.','val', '{}',{1}, '.','val', '{}',{1}), substruct('.','files'));
matlabbatch{5}.spm.temporal.st.scans{2}(1) = cfg_dep('DICOM Import: Converted Images', substruct('.','val', '{}',{2}, '.','val', '{}',{1}, '.','val', '{}',{1}, '.','val', '{}',{1}), substruct('.','files'));
matlabbatch{5}.spm.temporal.st.scans{3}(1) = cfg_dep('DICOM Import: Converted Images', substruct('.','val', '{}',{3}, '.','val', '{}',{1}, '.','val', '{}',{1}, '.','val', '{}',{1}), substruct('.','files'));
matlabbatch{5}.spm.temporal.st.nslices = 33;
matlabbatch{5}.spm.temporal.st.tr = 2;
matlabbatch{5}.spm.temporal.st.ta = 1.93939393939394;
matlabbatch{5}.spm.temporal.st.so = [1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32];
matlabbatch{5}.spm.temporal.st.refslice = 33;
matlabbatch{5}.spm.temporal.st.prefix = 'a';
matlabbatch{6}.spm.spatial.realign.estwrite.data{1}(1) = cfg_dep('Slice Timing: Slice Timing Corr. Images (Sess 1)', substruct('.','val', '{}',{5}, '.','val', '{}',{1}, '.','val', '{}',{1}), substruct('()',{1}, '.','files'));
matlabbatch{6}.spm.spatial.realign.estwrite.data{2}(1) = cfg_dep('Slice Timing: Slice Timing Corr. Images (Sess 2)', substruct('.','val', '{}',{5}, '.','val', '{}',{1}, '.','val', '{}',{1}), substruct('()',{2}, '.','files'));
matlabbatch{6}.spm.spatial.realign.estwrite.data{3}(1) = cfg_dep('Slice Timing: Slice Timing Corr. Images (Sess 3)', substruct('.','val', '{}',{5}, '.','val', '{}',{1}, '.','val', '{}',{1}), substruct('()',{3}, '.','files'));
matlabbatch{6}.spm.spatial.realign.estwrite.eoptions.quality = 0.9;
matlabbatch{6}.spm.spatial.realign.estwrite.eoptions.sep = 4;
matlabbatch{6}.spm.spatial.realign.estwrite.eoptions.fwhm = 5;
matlabbatch{6}.spm.spatial.realign.estwrite.eoptions.rtm = 1;
matlabbatch{6}.spm.spatial.realign.estwrite.eoptions.interp = 2;
matlabbatch{6}.spm.spatial.realign.estwrite.eoptions.wrap = [0 0 0];
matlabbatch{6}.spm.spatial.realign.estwrite.eoptions.weight = '';
matlabbatch{6}.spm.spatial.realign.estwrite.roptions.which = [2 1];
matlabbatch{6}.spm.spatial.realign.estwrite.roptions.interp = 4;
matlabbatch{6}.spm.spatial.realign.estwrite.roptions.wrap = [0 0 0];
matlabbatch{6}.spm.spatial.realign.estwrite.roptions.mask = 1;
matlabbatch{6}.spm.spatial.realign.estwrite.roptions.prefix = 'r';
matlabbatch{7}.spm.spatial.coreg.estimate.ref(1) = cfg_dep('DICOM Import: Converted Images', substruct('.','val', '{}',{4}, '.','val', '{}',{1}, '.','val', '{}',{1}, '.','val', '{}',{1}), substruct('.','files'));
matlabbatch{7}.spm.spatial.coreg.estimate.source(1) = cfg_dep('Realign: Estimate & Reslice: Mean Image', substruct('.','val', '{}',{6}, '.','val', '{}',{1}, '.','val', '{}',{1}, '.','val', '{}',{1}), substruct('.','rmean'));
matlabbatch{7}.spm.spatial.coreg.estimate.other(1) = cfg_dep('Realign: Estimate & Reslice: Resliced Images (Sess 1)', substruct('.','val', '{}',{6}, '.','val', '{}',{1}, '.','val', '{}',{1}, '.','val', '{}',{1}), substruct('.','sess', '()',{1}, '.','rfiles'));
matlabbatch{7}.spm.spatial.coreg.estimate.other(2) = cfg_dep('Realign: Estimate & Reslice: Resliced Images (Sess 2)', substruct('.','val', '{}',{6}, '.','val', '{}',{1}, '.','val', '{}',{1}, '.','val', '{}',{1}), substruct('.','sess', '()',{2}, '.','rfiles'));
matlabbatch{7}.spm.spatial.coreg.estimate.other(3) = cfg_dep('Realign: Estimate & Reslice: Resliced Images (Sess 3)', substruct('.','val', '{}',{6}, '.','val', '{}',{1}, '.','val', '{}',{1}, '.','val', '{}',{1}), substruct('.','sess', '()',{3}, '.','rfiles'));
matlabbatch{7}.spm.spatial.coreg.estimate.eoptions.cost_fun = 'nmi';
matlabbatch{7}.spm.spatial.coreg.estimate.eoptions.sep = [4 2];
matlabbatch{7}.spm.spatial.coreg.estimate.eoptions.tol = [0.02 0.02 0.02 0.001 0.001 0.001 0.01 0.01 0.01 0.001 0.001 0.001];
matlabbatch{7}.spm.spatial.coreg.estimate.eoptions.fwhm = [7 7];
matlabbatch{8}.spm.tools.oldnorm.estwrite.subj.source(1) = cfg_dep('DICOM Import: Converted Images', substruct('.','val', '{}',{4}, '.','val', '{}',{1}, '.','val', '{}',{1}, '.','val', '{}',{1}), substruct('.','files'));
matlabbatch{8}.spm.tools.oldnorm.estwrite.subj.wtsrc = '';
matlabbatch{8}.spm.tools.oldnorm.estwrite.subj.resample(1) = cfg_dep('Coregister: Estimate: Coregistered Images', substruct('.','val', '{}',{7}, '.','val', '{}',{1}, '.','val', '{}',{1}, '.','val', '{}',{1}), substruct('.','cfiles'));
matlabbatch{8}.spm.tools.oldnorm.estwrite.eoptions.template = {'D:\software\neuroscience\Matlab2016b\toolbox\spm12\toolbox\OldNorm\T1.nii,1'};
matlabbatch{8}.spm.tools.oldnorm.estwrite.eoptions.weight = '';
matlabbatch{8}.spm.tools.oldnorm.estwrite.eoptions.smosrc = 8;
matlabbatch{8}.spm.tools.oldnorm.estwrite.eoptions.smoref = 0;
matlabbatch{8}.spm.tools.oldnorm.estwrite.eoptions.regtype = 'mni';
matlabbatch{8}.spm.tools.oldnorm.estwrite.eoptions.cutoff = 25;
matlabbatch{8}.spm.tools.oldnorm.estwrite.eoptions.nits = 16;
matlabbatch{8}.spm.tools.oldnorm.estwrite.eoptions.reg = 1;
matlabbatch{8}.spm.tools.oldnorm.estwrite.roptions.preserve = 0;
matlabbatch{8}.spm.tools.oldnorm.estwrite.roptions.bb = [-78 -112 -70
                                                         78 76 85];
matlabbatch{8}.spm.tools.oldnorm.estwrite.roptions.vox = [2 2 2];
matlabbatch{8}.spm.tools.oldnorm.estwrite.roptions.interp = 1;
matlabbatch{8}.spm.tools.oldnorm.estwrite.roptions.wrap = [0 0 0];
matlabbatch{8}.spm.tools.oldnorm.estwrite.roptions.prefix = 'w';
matlabbatch{9}.spm.spatial.smooth.data(1) = cfg_dep('Old Normalise: Estimate & Write: Normalised Images (Subj 1)', substruct('.','val', '{}',{8}, '.','val', '{}',{1}, '.','val', '{}',{1}, '.','val', '{}',{1}), substruct('()',{1}, '.','files'));
matlabbatch{9}.spm.spatial.smooth.fwhm = [8 8 8];
matlabbatch{9}.spm.spatial.smooth.dtype = 0;
matlabbatch{9}.spm.spatial.smooth.im = 0;
matlabbatch{9}.spm.spatial.smooth.prefix = 's';
注意事项:以上代码是基于我的文件结构,因为这批数据有三个session,所以有三个RUN文件夹。具体的用SPM12生成batch会在另一篇博文继续更新。
image.png
image.png
image.png
参考网址:

20180731

Python在linux下批量执行指令

今天在分析大鼠的DTI数据,其中有一步在linux下的指令时这样的,

flirt -in RAT5_b0 -ref RAT4_b0 -dof 12 -out RAT5to4 -omat RAT5to4.mat

在这个命令里,RAT5_b0是输入文件,每次都要变化;RAT4_b0是参考文件,在我的需要里这个是保持不变的;RAT5to4是输出文件,每次都要变化;RAT5to4.mat是生成的mat文件,也是每次都要重命名。

如果每次执行一次的话,就需要在电脑前等待,每次还要修改参数。

于是python就可以发挥了。

最开始想着是用linux下的shell脚本编写,但看了看shell的命令,与我而言还不如python方便,于是开始用python编写。

涉及到的知识点:

  1. 文件路径的读取
  • 在windows下,我们复制路径的话一般是这样的,C:\Windows\System32,但是在python编写时我们要转换成python可以读取的名字,转换过来就是C:/Windows/System32,可以注意到就是把反斜杠符号转换为斜杠,这只是一种方式,还有好几种:
  • - path = r"C:\Windows\temp\readme.txt"
    
    - path1 = r"c:\windows\temp\readme.txt"
    
    - path2 = "c:\\windows\\temp\\readme.txt"
    
    - path3 = "c:/windows/temp/readme.txt"
    

 

2.字符串的转换
3.python调用linux系统指令

  • google了一下,python是可以调用linux系统指令的,只需要最开始import os,之后再用os.system(“cmd”)就可以,这里
  1. python调用linux系统指令时参数的传递
#单参数
param = 'a single param'
os.system("This is a %s" % (param))
#多参数
param1 = 'parameter1'
param2 = 'parameter2'
param3 ='parameter3'
#假设xxx.py运行需要三个参数
os.system("python xxx.py %s %s %s" %(param1,param2,param3))

最终的代码:

# 20180717 By galory  Mail 996377370a@gmail.com
#This code is processing rat's DTI data 
import os
#设置待处理数据的路径
path = "/brain/zhanjunzhang/Desktop/galory/processing/"
#读取path路径下的全部文件名
files = os.listdir(path)
# s= []
#cmd = os.system("flirt -in 101b0.gz -ref 104b0.gz -dof 12 -out 101to104 -omat 101to104.mat")
for file in files:
    file1 = str(file)
    #取文件名的前三个字符用于重命名
    three_str = str(file1[0]+file1[1]+file1[2])
    if file != '104b0.nii.gz':
        # cmd
        print (file)
        #这里os.system()括号内的语句即最开始要在linux命令行输入的语句
        os.system("flirt -in %s -ref 104b0.nii.gz -dof 12 -out %s/%sto104 -omat %s/%sto104.mat" %(file,path,three_str,path,three_str))
#     os.system('ls')
# cmd = os.system("flirt -in 101b0.gz -ref 104b0.gz -dof 12 -out 101to104 -omat 101to104.mat")
# cmd = flirt -in 101b0.gz -ref 104b0.gz -dof 12 -out 101to104 -omat 101to104.mat

第一次认认真真写一个小的脚本简化任务,感觉很满足。先有一个需求,根据需求来想策略,最后一步一步有逻辑地写出来,遇到小问题一个一个解决,最终都会解决。

Practice makes perfect. 熟能生巧

Genuine knowledge comes from practice.

On the way.