发明内容
本发明的目的在于提供一种高效便捷的基于Python对ReaxFF力场计算结果数据处理的方法。
基于上述目的,本发明采用如下技术方案:
一种基于Python对ReaxFF力场计算结果数据处理的方法,其特征在于,包括以下步骤:
步骤一、读取和整合分子类型信息species文件(分子类型信息源原件)的数据:
1.1、采用基于ReaxFF力场得到包含每个时刻下的分子种类和分子数量的species文件,并搭建Python环境;
1.2、然后使用Python导入linecache、datatime、csv等标准模块,并从copy模块中导入deepcopy进行分子类型信息源文件的保护,防止分子类型文件被误改;并使用def函数定义整个读取和整合功能,以此进行反复调用;
1.3、去掉species文件中多余的空格和‘#’号建立分子类型中间文件(middle),并使species文件以Python中序列的内置类型--列表的形式写入分子类型中间文件;
1.4、并创建两个新的列表变量,分别存储分子类型中间文件中的标题行(分子类型)与数据行(分子数量);利用配对函数对存储的两个列表变量的字符串进行批量处理,然后对标题行之间与数据行之间的空格进行删减和切片,实现标题行和数据行的格式处理;
1.5、对标题行利用循环进行整合,整合成一个涵盖各个Timestep(时间段)下的不重复的分子类型的总标题,并对分子类型进行排序;并创建一个字典格式(这是Python自带的字典函数:key与value配对,一个key对应一个value)以供写入,默认key的value为0;
1.6、创建文件名称为整合分子信息output.txt的新文件,将标题行写入,随后进行循环遍历分子类型和分子数量,将其存储在配对字典函数的k-v值中,将分子数量的value值赋值给总标题中的各分子类型key并写入output.txt文件。
步骤二、对整合分子信息output.txt文件进行分子分类:
2.1、以整合分子信息output.txt文件为基础,搭建Python环境,使用Python导入pandas库,pandas是基于Numpy的一种工具,该工具是为了解决数据分析任务而创建,pandas纳入了大量库和一些标准的数据类型,提供了高效地操作大型数据库所需工具和快速便捷地处理数据的函数和方法。并导入Python内建的集合模块collections;使用pandas.read_csv()读取分子信息整合文件output.txt;使用engine为Python,相比C,Python的engine功能较为完备;
2.2、然后定义计算标题的分子量函数calculate molecular mass与识别分子式中原子下标函数count ofatoms,并对output.txt和筛分产物中间文件进行分类得到相应分子的.csv文件,从而得到产物产量随时间变化的文件。
步骤三、对各产物进行分子量计算,得到各产物的分子质量百分比:
3.1、使用pandas.read_csv()读取分子名称.csv文件并用','分隔;使用pandas.set_index()设定Timestep为索引,将inplace设置为True,不创建新对象,直接在output.txt中修改;
3.2、使用DataFrame内置版本.columns.values.tolist快速得到所有列名;定义空白字典weight_dict来存储由calculate molecular mass函数计算的总标题行的各分子质量;
3.2、使用pandas.apply()内置函数调用求和公式计算各Timestep下的分子数总量,将其赋值给df1['mole_count'];
3.4、使用自定义函数mass()实现用各Timestep下的分子数量相乘总标题的各分子质量,然后进行累加实现计算分子质量的功能,最后使用pandas.apply()内置函数调用自定义函数mass()计算分子数量将其赋值给df1['weight'];从而得到各Timestep下的相应产物的分子质量;
3.5、将各产物下的分子质量运用pandas数据库下灵活的包装器.add()和.div()进行百分比的计算;
3.6、最终运用.columns()填充各产物计算百分比,最终得到.to_csv()命名下的weight_percentage.csv各产物百分比结果文件。
优选地,步骤2.2中,对output.txt和筛分产物中间文件进行分类的具体过程为:使用变量i遍历output.txt和筛分产物中间文件的总标题中的分子式,并用双重判定,其中,先使用判定条件1:使用函数i.startswith()判别前缀,区分原子类别;再使用判定条件2:对自定义函数count ofatoms判别原子数目从而分类,
优选地,所述分子量函数(calculate molecular mass)是用来计算标题中单个分子的分子量,具体为:首先将元素周期性列表中的元素-分子量使用字典k-v(key-value)对应,再对分子进行字符串识别,根据output.txt文件中的分子式性质例如分子式(CO3Ca),单元素例如C大写.isupper(),双元素例如Ca,C大写a小写.islower(),进行条件判断筛分,将元素初始值设置为0,读取字符串中元素下标数字使用.isdigit(),并进行字典函数下标数字前的元素查询,进行相乘相加,得到单个分子的分子量。
优选地,所述原子下标函数(count ofatoms)用来识别原子的数量,以便对产物进行分类,遍历分子式中的原子,条件判断是否为相应原子,并写入字典,使用collections.defaultdict(int)计算相应原子出现的个数,.isdigit()函数识别相应原子的下标数字,得出相应原子的个数。
本发明具有如下优点:
1、由于ReaxFF力场的分子动力学模拟处理数据量大,处理元素对象缺乏多样性,处理步骤繁琐,本发明提供的处理方法能够高效便捷的读取模拟产生的多样的数据文件类型,减少数据文件在转存格式花费的时间和步骤。其中,Python自身的linecache模块能够得到文件的全部内容,输出列表格式,列表可以完成大多数集合类的数据结构实现,它支持字符、数字、字符串甚至可以包含列表(即嵌套),是Python最通用的符合数据类型。在后续处理中能对冗杂的数据进行统计和整合,适应多种类型元素对象,使分析数据更加方便和清晰。
2、本发明提供的方法可以归纳具有多样性的模拟产物的分子类型,可以得到多种产物随时间的变化,为反应分子动力学模拟探索各种工况下的热解燃烧微观机理,明确产物变化的规律提供便利,克服了现有技术VARMD与lammps自带的分析软件中分析元素单一,不适用含有各种各样的元素体系的缺点。尤其是对于煤热解过程,能够建立一套较为完整的对煤热解模拟结果产物进行分子分类的系统方法,可以得到含有焦油、煤炭、气体的以及其他无机产物在煤热解中随时间的变化,可以为反应分子动力学模拟探索各种工况下的含有不同煤种热解燃烧微观机理,明确产物变化的规律。
具体实施方式
以下结合附图和具体实施案例作进一步详细说明。
本发明将基于Python对ReaxFF力场计算结果数据处理的方法应用于煤热解过程,可以得到含有焦油、煤炭、气体以及其他无机产物在煤热解中随时间的变化,可以为反应分子动力学模拟探索各种工况下的含有不同煤种热解燃烧微观机理,明确产物变化的规律提供便利。
基于Python对ReaxFF力场对煤热解计算结果数据处理的方法的流程如图1所示,具体包括以下步骤:
步骤一、读取和整合分子类型信息species文件的数据
1.1、以搭建的含有C/HO/Ca的煤模型为基础,对其进行基于ReaxFF力场的反应分子动力学模拟,模拟后得到的包含每个时刻下的分子种类和分子数量的species文件如图2所示,并搭建Python环境。
1.2、然后使用Python导入linecache、datatime、csv等标准模块,并从copy模块中导入deepcopy进行species文件的保护,防止分子类型文件被误改;并使用def函数定义整个读取和整合功能,以此进行反复调用。
1.3、建立分子类型中间文件以便能够在不更改分子类型信息源文件的前提下进行处理,即去掉分子类型信息源文件中多余的空格和‘#’号,并能够使分子类型信息源文件以Python中序列的内置类型--列表的形式写入分子类型中间文件,以此得到分子类型中间文件以便进行索引和切片。
1.4、创建两个新的列表变量,将分子类型中间文件中的标题行(分子类型)与数据行(分子数量)进行分别存储。对存储的两个列表变量的字符串利用配对函数进行批量处理,对标题行之间与数据行之间的空格进行删减和切片,实现标题行和数据行的格式处理。
1.5、对标题行利用循环进行整合,整合成一个涵盖各个Timestep下的不重复的分子类型的总标题,并对分子类型进行排序。并创建一个字典格式以供写入,默认key的value为0。
1.6、创建整合分子信息文件,文件名称为output.txt,(如图3),将标题行写入,随后进行循环遍历以分子类型和分子数量,将其存储在配对字典函数的k-v值中,将分子数量(value)值赋值给总标题中的各分子类型(key)并写入output.txt文件。
步骤二、对整合分子信息output.txt文件进行分子分类
2.1、使用Python导入pandas库,并导入Python内建的集合模块collections;使用pandas.read_csv()读取整合分子信息output.txt文件。
2.2、首先,定义两个函数,即计算标题的分子量函数calculate molecular mass与识别分子式中碳原子下标函数count ofatoms。
其次对output.txt进行分类,其流程如图4所示。在煤热解过程中将煤热解产物划分为小分子气体、轻质焦油、重质焦油和焦炭。根据前人CPD模型采用的焦油质量分布,将ReaxFF MD煤热解产物进行如下定义:含碳原子数目大于40的产物为焦炭;含碳原子数目在14-40之间的为重质焦油;含碳原子数目在5-13之间的为轻质焦油;其他产物为小分子气体。
然后使用变量i遍历output.txt的总标题中的分子式,并用双重判定,即判定条件1:先使用函数i.startswith()判别前缀,区分C原子与Ca原子,以及使用条件'Ca'not ini,判断分子式中不含Ca原子,再使用自定义函数count ofatoms即判定条件2:判别碳原子数目从而分类,具体步骤如下:
先进行焦炭C40+产物的筛分,即满足ifcount ofatoms(i)>40+为true,使用C40+.append(i)储存C40+分子的类型和数量,最终得到名为C40+的焦炭产物文件分子种类随时间变化统计结果如图5所示。
随后为了加速筛分效率,建立筛分产物中间文件,将去除C40+分子的余下分子种类存储在筛分产物中间文件中,再对余下的分子种类进行遍历和双重判定,得到筛选成功的C14-40.csv重质焦油产物文件。
C5-13.csv轻质焦油产物文件和C1-4.csv轻质气体产物文件也可以以上述方法得到。
其次对设定判定条件1中'Ca'in i,得到热解结果中粘连在有机物上的钙的分子式,使用上述分类方法,可以研究钙分布在各热解产物的分布,以及钙在热解中的迁移转化规律。
研究无机钙的组成,对探究钙对煤热解的影响也起到至关重要的作用。设定判定条件1为If'Ca'in i and not i.startswith('C'),得到所有无机钙的种类,再设定判定条件2,可以得到各无机钙的种类分布:
设定判定条件2:Ifi=='Ca',得到Ca.csv文件,从而得到钙原子的产量随时间变化的文件;
设定判定条件2:If'Ca'in i and'O'in i and'H'not in i,得到CaO.csv文件,从而得到氧化钙的产量随时间变化;
设定判定条件3:If'Ca'in i and'O'in i and'H'in i,得到Ca(OH)2.csv文件,从而得到氢氧化钙的产量随时间的变化。
研究重要的无机气体随时间的变化,对探究煤热解和煤结构也有参考意义。设定判定条件1:If'Ca'not in i and not i.startswitsh('C'),得到所有无机气体的种类:
设定判定条件2:Ifi=='H2',得到H2.csv文件,从而得到氢气产量随时间变化;
设定判定条件2:Ifi=='H2O',得到H2O.csv文件,从而得到水产量随时间变化;
设定判定条件2:Ifi=='O2',得到O2.csv文件,从而得到氧气产量随时间变化;
设定判定条件2:Ifi=='CO',得到CO.csv文件,从而得到一氧化碳产量随时间变化;
设定判定条件2:Ifi=='CO2',得到CO2.csv文件,从而得到二氧化碳产量随时间变化。
通过上述过程对output.txt和筛分产物中间文件进行分类得到相应分子的.csv文件,从而得到产物产量随时间变化的文件。
步骤三、对各产物进行分子量计算,得到各产物的分子质量百分比
以计算焦炭产物C40+分子数量为例,
首先计算焦炭产物C40+分子数量,分子质量计算步骤如下:
3.1、使用pandas.read_csv()读取C40+.csv文件并用','分隔;使用pandas.set_index()设定Timestep为索引,将inplace设置为True,即不创建新对象,直接对output.txt进行修改。
3.2、使用DataFrame内置版本.columns.values.tolist快速得到所有列名。定义空白字典weight_dict来存储由calculate molecular mass函数计算的总标题行的各分子质量。
3.3、使用pandas.apply()内置函数调用求和公式计算各Timestep下的分子数总量,将其赋值给df1['mole_count']。
3.4、使用自定义函数mass()实现用各Timestep下的分子数量相乘总标题的各分子量,然后进行累加实现计算分子质量的功能。最后使用pandas.apply()内置函数调用自定义函数mass()计算分子数量将其赋值给df1['weight']。从而得到各Timestep下的C40+的分子质量。
其他产物分子数量和分子质量计算方法如上述所述。
3.5、将各产物下的分子质量运用pandas数据库下灵活的包装器.add()和.div()进行百分比的计算。
3.6、最终运用.columns()填充各产物计算百分比,最终得到.to_csv()命名下的weight_percentage.csv结果文件,如图6所示。标题栏为Timestep,percent_C1-C4,percent_C5-C14,percent_C14-C40,percent_C40+,percent_C1-C4_Ca,percent_C5-C14_Ca,percent_C14-C40_Ca,percent_C40+_Ca,percent_Ca,percent_CaO,percent_Ca(OH)2,percent_H2,percent_O2,percent_H2O,percent_CO,percent_CO2,各自重量百分比随时间变化统计结果如图6所示。
根据结果显示,焦油、焦炭和气体产物随时间变化量和二次热解变化规律分类清晰,对现在仍认识不清的煤的二次反应机理的研究具有推动作用。