准备开启一个《我的第X篇论文》系列,目的是自己写得开心,可能含有大量专业词汇。按照只看一作的评价标准,以及发文章的速度,不会频繁更新。


时至2018年3月,那时我刚刚结束了一个失败的课题,对molecular dynamics (MD)有了初步了解。大三下学期是一个“无课学期”,我的课表上只有4学分的课,有大量富余时间。开学后,导师告诉我暂缓force matching的project,先开始基于hidden Markov Model (HMM)分析MD轨迹的课题。这个project来自前一年申请的国自基金项目,然而当时我尚未入组,这个课题迟迟未能完成。

老师给了我Liping Wang的两篇文章用作参考,很快,我google到一个名叫hmmlearn的library。基于上一个课题的部分代码,很快,我便有了思路。解决了几个关键问题后,3月11日,第一版Python程序出炉,能够分析LAMMPS的bond文件,并生成每个原子的路径,计算出轨迹的所有反应,生成一个reaction matrix。

但是,由于这一版程序是串行的,分析10GB的MD轨迹文件有点力不从心。我尝试用multiprocessing实现并行,速度的确大大提升了,但是出现了超算上64GB内存全部用光,子进程全部挂掉的情况。无数次debug+Stackoverflow后,我终于确认原因:I/O比程序运行得慢,导致进程全堵塞在内存里。解决方法是用Semaphore。解决了这个问题后,我的程序终于可以正常分析轨迹了。测试了甲烷和RP-3的表现后,4月6日,我把程序传到了GitHub上。

程序仍有待进一步完善。一方面,reaction matrix仍然不够直观。关于这一点,我找到了networkx这个package,可以用力引导的方式生成reaction network的图像。另一方面,目前的程序不能识别同分异构体。我发现OpenBabel和RDKit可以生成SMILES,不过痛苦的是,他们的安装过程的极其繁琐。在尝试安装的过程中,我发现了Anaconda这个宝藏,可以跳过C++程序的编译过程。之后,我用RDKit实现了这一功能。到了4月底,这一课题算是基本成功了,我把主要精力转移到了深度学习的课题中。

剩下的精力用于画图,同时我对程序进行了各种优化。借助OpenBabel的力量,我实现了读取坐标,并转化为化学键的信息。此外,我也深入理解了HMM的原理。端午节回家的时候,我用这三天假期写出了文章,并把程序命名为ReacNetGenerator,同时创建了相应的setup.py。不过,因为种种原因,进一步修改文章的工作被搁置下来。

9月至11月的专业实习虽然极其可恶,但是我因此拥有了大量空闲时间,又对程序进行了完善:首先,实现了conda编译和安装,大大简化了安装步骤。其次,读取坐标时实现了周期性边界条件。虽然OpenBabel本身不支持周期性边界条件,但是可以用奇技淫巧实现。第三,实现了命令行和GUI运行程序。最后,利用我的一点前端的知识,以及OpenBabel生成的图像,将结果展示到了网页上。

12月,为了申请学校,初步修改后的论文被传到了preprint网站ChemRxiv上。这篇论文成为我申请时提供的论文之一。

到了2019年的寒假,除了修bug外,我又做了几个方面的优化。第一,大大增快了计算速度。我发现,计算时的主要瓶颈是中间缓存文件的I/O。于是,我先用lz4+base64压缩数据后,再存入临时文件。另一方面,我用Cython重写了部分函数。第二,了解了前端的最新动向后,我将前端用到的library全部调用nodejs和yarn安装,可以很方便地更新library。之后,我还用前端实现了绘制network的功能,以及筛选物种的功能。另外,我还做了一个可视化的进度条,并且完善了软件的官网。

7月底,那时已经毕业了,我借着这个软件获得了中国大学生计算机设计大赛一等奖。不过这篇文章因为种种原因仍然难产,直到9月中旬,来到Rutgers开始rotation后,这篇文章被投到PCCP。之后的事情平淡无奇:10月上旬审稿意见出来,大修,修回后,11月下旬被接受。

最后,我的第一篇文章终于在新年第二天见刊了。虽然档次不算高,花费的时间和精力也不是很多,但作为第一篇文章,具有很大的纪念意义,我也因此大大提升了技术,为之后的课题奠定了基础。


Zeng, J; Cao, L; Chin, CH*; Ren, H*; Zhang, J ZH; Zhu, T*, ReacNetGenerator: an automatic reaction network generator for reactive molecular dynamics simulations, Phys. Chem. Chem. Phys., 2020, 22 (2), 683–691, DOI: 10.1039/C9CP05091D

编译原理论文_我的第一篇论文相关推荐

  1. 【论文写作】-我的第一篇论文形成记(投稿过程、课题来源、python与数学学习、实验设计、论文思路建立与写作、回复审稿人)

    我的第一篇论文形成记 投稿过程 背景记录 课题来源-本科毕业设计 python及数学学习 实验设计 调参阶段 实验阶段 论文思路建立 论文写作 回复审稿人 总结 投稿过程 2022年12月28日 投A ...

  2. 第一篇论文:改进TCP及UDP的性能分析及比较

    开始读第一篇论文:改进TCP及UDP的性能分析及比较.欢迎大家来评论噢!或者加我的qq:63245576 这篇论文在Throughput,stability,intra-protocol fairne ...

  3. 全面介绍数砖开发 Delta Lake 的第一篇论文

    今年八月,Delta Lake 的第一篇论文发布了,我当时写了个总体介绍:Delta Lake 第一篇论文发布了,感兴趣的朋友可以先看总体介绍,再来详细了解一下本篇论文.因为篇幅较长,全文超3万字,建 ...

  4. 史上最全AI论文集结:近千篇论文分门别类整理好

    搞AI,在不断精进自己代码的同时,更应该提升自己的阅读能力.需要不断地阅读大量的最新.最前沿的论文,也要深扎经典论文根基.因为阅读论文可以帮助你深入原理,理解AI更前沿的发展状态,掌握更前沿的技术热点 ...

  5. ECCV 2020 语义分割论文大盘点(38篇论文)

    作者:CV Daily | 编辑:Amusi Date:2020-09-25 来源:计算机视觉Daily微信公众号(系投稿) 原文:ECCV 2020 语义分割论文大盘点(38篇论文) 前言 距离EC ...

  6. 最新!CVPR 2021 医学图像分割论文大盘点(5篇论文)

    点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 作者:Amusi  |  来源:CVer 前言 昨天分享了MICCAI 2021上Transformer+医 ...

  7. 现有论文和作者两个实体,论文实体的属性包括题目、期刊名称、年份、期刊号;作者实体的属性包括姓名、单位、地址;一篇论文可以有多个作者,且每一位作者写过多篇论文,在每一篇论文中有作者的顺序号。请完成以下操

    题目要求   现有论文和作者两个实体,论文实体的属性包括题目.期刊名称.年份.期刊号:作者实体的属性包括姓名.单位.地址:一篇论文可以有多个作者,且每一位作者写过多篇论文,在每一篇论文中有作者的顺序号 ...

  8. ECCV 2020 实例分割+全景分割论文大盘点(14篇论文)

    前言 计算机视觉Daily 正式系列整理 ECCV 2020的大盘点工作,本文为第三篇:实例分割和全景分割方向. 前两篇详见: ECCV 2020 目标检测论文大盘点(49篇论文) ECCV 2020 ...

  9. 编译原理语义分析_编译原理 第一章 绪论

    编译原理系列,是在学习本校 "编译技术" 这门课程时,所作记录,参考教材为 <编译技术基础教程>清华大学出版社和<程序设计语言编译原理>国防工业出版社(陈火 ...

最新文章

  1. parcel react_如何使用Parcel捆绑React.js应用程序
  2. 什么是动态DNS 动态DNS有什么用
  3. 邬贺铨院士:十问边缘计算!
  4. 【微信开发】微信开发 之 开启开发模式
  5. linux 文件服务,Linux操作系统之文件服务(ftp、nfs)
  6. linux8重启服务代码,linux(centos8):安装分布式事务服务seata(seata 1.3.0/centos 8.2)
  7. 爹地,我找到了!15个极好的Linux find命令示例
  8. iOS Coding Style Guide 代码规范
  9. Python 对文件进行编码转换
  10. Java 和C# 最大的不同是对底层的控制能力不同
  11. 数据结构笔记(十八)-- 树的定义和基本术语
  12. linux 建立ftp用户
  13. 记一次服务器故障及解决办法
  14. JAVAweb之SSH框架
  15. Photoshop - 新建纯色图层
  16. Arduino驱动315MHZ无线模块
  17. 成都车展:百度车联网的“阅兵”表演
  18. python编写网络防火墙怎么设置_防火墙怎么设置?网络防火墙设置方法介绍
  19. 【CLAA系列】CLAA协议学习(CS方向)
  20. 找不到tinyos的官方下载资源看这篇---TinyOS 资源下载地址

热门文章

  1. java图片色阶调整、亮度调整
  2. jquery文本和值text、html、attr、val
  3. 贺利坚老师汇编课程47笔记:转移地址在寄存器或内存里
  4. html状态码206,HTTP状态码206
  5. python - super 寻找继承关系
  6. (1)封装 (2)static关键字 (3)继承
  7. python 简介+安装(搬运廖雪峰网站)
  8. 关于linux开机自启
  9. Dapper入门学习
  10. 缓存jQuery对象来提高性能