背景回顾
在上一篇文章《CryoSparc转Relion进阶流程2》中,我们强调了Movie文件的格式为tif。如果是mrc或eer格式,则CryoSparc和Relion的颗粒文件中,颗粒坐标可能存在翻转的情况。如果Movie文件是tif格式(已做过gain),则不存在翻转的情况。但是,如果Movie文件是tif(未做过gain),在做完gain correction后,会存在x和y坐标互换的情况。本文将重点演示在转换CryoSparc和Relion的颗粒文件时,如何保证颗粒坐标和Micrograph坐标能够正确对应。并且,我们会简单讲解一下文章中所用到的sed命令,方便用户理解。
具体操作
在操作之前,我们强烈建议:对于一套新的数据,请按照本篇文章里的方法先进行测试,然后再批量转换。
Part 1
此处我们用mrc格式做一个演示,解决如下两个问题:
问题一、 如何通过一张图像判断CryoSparc和Relion中颗粒坐标的翻转方式
问题二、如何在转换时,处理这种翻转
- 对于问题一,我们可以采用如下方法:
1. 在CryoSparc中导入一张mrc格式的Movie,这个Movie需要有比较好的衬度。在CryoSparc的任务界面上,我们可以清晰的看到图像中的特征
2. 在Relion中,对这个Movie做Motion Correction和CTF Estimation。并且提交一个Manual Pick任务,这样我们可以查看这张图像。
3. 对比CryoSparc中Import任务的图像,和Relion中Manual Pick任务的图像,我们可以直观地观察到两个软件在处理mrc格式的Movie时,存在上下翻转。(如下图)
- 对于问题二,我们可以采用如下方法:
可以在用csparc2star.py脚本转换颗粒时,加上–inverty参数。如果是左右翻转,则加上–invertx参数。如果是x和y坐标交换,需要加上–swapxy参数。注意,某些情况下,pyem会默认施加–swapxy参数,此时如果不希望交换xy坐标,需要加上–noswapxy参数。
由于CryoSparc和pyem一直处于更新之中,有可能在某次更新之后,–invertx、–inverty和–swapxy参数并没有按照我们的期望去进行转换。为了确认我们使用的参数可以得到正确的转换结果,我们可以通过以下步骤来验证转换之后的颗粒坐标是否正确。
1. 假设CryoSparc项目目录为/ssd/CS-convert,Relion启动目录为/ssd/relion-convert。
2. 我们分别在CryoSparc和Relion中,导入一张mrc格式的Movie,假设文件路径为/ssd/relion-convert/apo.mrc。
3. 我们在CryoSparc中对之前导入的那一张Movie做Patch Motion Correction和Path CTF Estimation。并且提交一个Manual Picker任务(假设任务为J4),在这个任务中,按照类似于下图的方式选取5个颗粒(L型,5个点,如下图)。注意,在选取点的时候,不要太靠近边缘,box size也尽量设置的小一些,否则CryoSparc会自动丢弃靠近边缘的颗粒
4. 进入J4目录,加载pyem环境。对于某些老机器,需要执行最后一步。新机器无需执行最后一步。
cd /ssd/CS-convert/J4
module load conda
module load pyem
conda activate pyem
5. 将cs文件转换为star文件,并查看这个star文件的内容。可以从最后5行内容中找到刚刚选取的5个颗粒的坐标(下图红线标注)。
csparc2star.py extracted_particles.cs from_csparc_J4.star --inverty
cat from_csparc_J4.star
6. 在Relion中,对这个Movie做Motion Correction和CTF Estimation。并且提交一个Manual Pick任务(假设为job004),然后随便选5个点,并且保存颗粒坐标。此步的目的是为了在Relion启动目录内生成ManualPick/job004/apo_manualpick.star文件。使用vim编辑器打开这个文件,并且上一步获取的颗粒坐标替换掉star文件里原来的坐标(下图红线标注)。
7. 此时,在Relion界面选中ManualPick/job004,并点击Continue按钮,在弹出的窗口点击Pick按钮,就可以再次查看颗粒挑选位置,此时的颗粒位置就是CryoSparc转换之后得到的颗粒位置(如下图,为了方便对比,已将Relion的图像进行上下翻转)。
Part 2: sed命令介绍
由于我们在前面的两篇文章中多处使用到sed命令,这里我们对sed命令做一个简单的介绍。
sed命令的功能非常强大,我们这里仅仅使用了它的替换功能来批量替换文件中匹配的字段。使用如下的命令格式,可以将file中符合OriginalPattern规则的字段替换成TargetPattern字段。这个命令中,-i参数代表直接在原文件进行替换,单引号中的s,g和斜杠是固定搭配,不能改动。
sed -i 's/OriginalPattern/TargetPattern/g' file
由于我们要匹配的字段不是完全一样的字段,而是符合某种规则的字段,因此我们需要在OriginalPattern用到通配符。这里我们用上一篇文章(链接)中修改Micrograph路径信息的sed命令举例。
sed -i 's/J5\/motioncorrected\/.\{21\}_/MotionCorr\/job002\/Movies\//g' from_csparc_J11.star
这个命令的目的是把形如J5/motioncorrected/000760776739431268277_的字段替换成MotionCorr/job002/Movies/。首先,我们会发现,OriginalPattern中的J5后面不是直接跟着/,而是\/。这是因为/是特殊字符,如果需要OriginalPattern里面有/,必须先用转义字符\进行转义。如果不加转义字符\,则/会被解释为别的意思。所以,在OriginalPattern和TargetPattern的/前面我们都会看到\。
其次,每个Micrograph文件名中都会有一串独特的数字(例如000760776739431268277),我们需要用通配符.\{21\}去匹配。.\{21\}中的.代表任意一个字符,\{21\}是对.的修饰,代表.重复了21次,也就是有21个任意字符。通过这样的OriginalPattern,我们就可以匹配任意一个Micrograph路径了。
最后,相信这套更加完善的CryoSparc与Relion数据转换流程系列文章,能够给广大的Cryo-EM科研人员带来双软件耦合的全新体验,极大地简化数据处理工作,起到事半功倍的作用。