精华内容
下载资源
问答
  • 化学分子代码
    2021-04-30 05:06:38

    给定一个化学分子式的字符串,统计每一种元素原子的数量。

    例如:

    水分子'H2O',它的构成是2个氢原子,1个氧原子,用对象表示为{H:

    2, O: 1}。

    再如氢氧化镁'Mg(OH)2',用对象表示是{Mg: 1, O: 2, H: 2}。

    再来个复杂点的'K4[ON(SO3)2]2',表示为{K: 4, O: 14, N: 2, S: 4}。

    这些分子式中,有可能出现很多成双成对的括号,包括圆的,方的,卷曲的,括号后面如果跟随了数字,那就表明,括号里的原子数量要乘以多少倍。例如’Fe(NO3)2’,它由一个铁原子,两个氮原子,六个氧原子组成。

    这个题目的难点在于括号的处理上,有三种类型的括号,括号与括号之间有嵌套,有N对括号的情况。//利用进出栈括号相抵,求对应括号的位置

    function findBracket(str){

    var stack = ["("];

    for(var i=0;i

    var chr = str.charAt(i);

    if(chr === "("){

    stack.push(chr);

    }

    else if(chr === ")"){

    stack.pop();

    }

    if(!stack.length){

    return i;

    }

    }

    }

    function parseMolecule(formula) {

    //存放结果的hash

    var hash = {};

    //先将所有的括号统一为圆括号

    formula = formula.replace(/{/g ,"(")

    .replace(/}/g ,")")

    .replace(/\[/g ,"(")

    .replace(/\]/g ,")");

    //遍历方法

    var traverse = function(formula){

    var str = "";

    //存放数字之前的字符串

    var prev = "";

    for(var i=0;i

    var chr = formula.charAt(i);

    //如果当前字符是数字

    if(!isNaN(chr)){

    //如果右边的字符也是数字

    //如"O12",十二个氧原子

    if(!isNaN(formula.charAt(i+1))){

    //"1" + "2" = "12"

    chr += formula.charAt(i+1);

    i++;

    }

    //转化为数字

    //"12" => 12

    chr = chr - 0;

    //拼接"O"

    //=> "OOOOOOOOOOOO"

    while(chr--){

    str += prev;

    }

    }

    else if(chr === "("){

    //剪切两个括号之间的内容,递归

    //如"Mg(OH)2"

    //"OH"递归

    var temp = formula.slice(i+1);

    var pos = findBracket(temp);

    //=>"OH"

    prev = traverse(temp.slice(0,pos));

    //右括号位置")"

    i = pos + i + 1;

    //如果右括弧右边不是数字,直接拼接"OH",无须相乘

    if(isNaN(formula.charAt(i+1))){

    str += prev;

    }

    }//如果当前字符右边是数字

    else if(formula.charAt(i+1) && !isNaN(formula.charAt(i+1))){

    prev = chr;

    }//如果当前字符右边是小写字母,再右边是数字

    else if(formula.charCodeAt(i+1) >= 97 && formula.charCodeAt(i+1) <= 122 && formula.charAt(i+2) && !isNaN(formula.charAt(i+2))){

    prev = chr + formula.charAt(i+1);

    i++;

    }

    else{

    str += chr;

    }

    }

    //如"Mg(OH)2"

    //=> "MgOHOH"

    return str;

    };

    var result = traverse(formula);

    //将字符串遍历,在hash中存储

    for(var i=0;i

    var nextCode = result.charCodeAt(i+1);

    //例如"Mg","Fe","Cu"这样一个大写接一个小写的情况

    if(nextCode >= 97 && nextCode <= 122){

    var key = result.charAt(i) + result.charAt(i+1);

    i++;

    }

    else{

    var key = result.charAt(i);

    }

    if(hash[key]){

    hash[key] = hash[key] + 1;

    }

    else{

    hash[key] = 1;

    }

    }

    return hash;

    }

    更多相关内容
  • HTML5化学分子式结构图动画基于jquery.1.10.2.min.js和HTML5 canvas制作,化学分子式结构图漂浮动画。
  • HTML5化学分子结构动画特效是一款HTML55化学分子动画,Canvas分子结构背景。
  • HTML5化学分子结构网页背景动画特效是一款HTML5 Canvas绘制的化学分子动画,分子结构背景动画代码
  • Eurydice是一个Java代码库,试图使计算化学更易于使用,以便专业化学家可以花更少的时间担任软件工程师,并且对计算化学新手的了解也更浅。 Eurydice还设计用于处理无法同时容纳在机器RAM中的大型结构。 整个结构都...
  • HTML5化学分子结构网页背景动画特效是一款HTML5 Canvas绘制的化学分子动画,分子结构背景动画代码
  • HTML5化学分子结构动画特效是一款HTML55化学分子动画,Canvas分子结构背景。
  • HTML5化学分子式结构图动画基于jquery.1.10.2.min.js和HTML5 canvas制作,化学分子式结构图漂浮动画。
  • 国家自然科学基金申请代码 txt文本,2022年度版本数据,已排序,可直接入库 样例数据 A 数学物理科学部 A01 代数与几何 A0307 无穷维动力系统与色散理论 A0101 数学史、数理逻辑与公理集合论 A0308 可积系统及其...
  • 化学分子结构识别 首先推荐有兴趣和时间的小伙伴读一篇文章 https://jcheminf.biomedcentral.com/articles/10.1186/s13321-020-00465-0 这篇文章给出了众多在线和离线工具的介绍和评估。 易用的在线平台推荐 我个人...

    如有不懂,留言评论

    化学分子结构识别

    example1

    example2

    首先推荐有兴趣和时间的小伙伴读一篇文章
    https://jcheminf.biomedcentral.com/articles/10.1186/s13321-020-00465-0
    这篇文章给出了众多在线和离线工具的介绍和评估。

    易用的在线平台推荐

    我个人使用过两个在线平台

    1. https://cactus.nci.nih.gov/cgi-bin/osra/index.cgi(https://cactus.nci.nih.gov/osra/)
      这是流传甚广的一个在线api,支持将图片转换为sd文件和smiles式。给大家举个例子:在这里插入图片描述

    2. https://molvec.ncats.io/#
      这是mol2vec的作者做的一个前端,集成了mol2vec, osra以及imago。同样举个例子:
      在这里插入图片描述

    使用python从图片提取分子结构1

    go top

    osra本人没有找到提供的api,可以使用selnium来模拟浏览器点击进行提取。贴一下我本人写的代码

    import time
    import os
    import json
    
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
    def upload(img_path):
        select_xpath = '/html/body/center/form/table/tbody/tr[3]/td[1]/input[2]'
        submit_xpath = '//*[@id="b_upload"]'
        clear_xpath = '/html/body/center/form/table/tbody/tr[3]/td[1]/center/input[2]'
    
        firefox.find_element_by_xpath(clear_xpath).click()
        firefox.find_element_by_xpath(select_xpath).send_keys(img_path)
        submit_button = firefox.find_element_by_xpath(submit_xpath).click()
    
    def get_information():
        get_smiles_xpath = '//*[@id="b_getsmiles"]'
        smiles_xpath = '/html/body/center/form/table/tbody/tr[3]/td[2]/input[1]'
    
        firefox.find_element_by_xpath(get_smiles_xpath).click()
        text = firefox.find_element_by_xpath(smiles_xpath).get_attribute("value")
    
        return text
    
    def main():
        global firefox
        firefox = webdriver.Firefox()
        firefox.get('https://cactus.nci.nih.gov/cgi-bin/osra/index.cgi')
        wait = WebDriverWait(firefox, 20)
    
        img_folder = 'your_img_folder'
        imgs76 = os.listdir(img_folder)
        smiles_list = {}
        for img in imgs76:
            upload(img_folder.replace('/', '\\') + '\\' + img)
            time.sleep(7)
            try:
                tmp_text = get_information()
                firefox.save_screenshot('res/' + img.rstrip('.jpg') + '.png')
                smiles_list[img] = tmp_text
            except:
                smiles_list[img] = 'Sorry, no structures found'
            
            print(smiles_list)
        firefox.quit()
    
        with open('result.json', 'w') as fp:
            json.dump(smiles_list, fp)
    
    if __name__ == '__main__':
        main()
    

    上面的代码

    1. 打开你的目标文件夹(里面是一堆分子结构截图)
    2. 然后模拟浏览器行为进行批量处理。每个图片等待十秒并将结果截图。

    需要注意的是你得下载一个webdriver,firefox或者chrome driver都可以(代码中firefox = webdriver.Firefox()是用了Firefox的driver,driver百度即可下载)。

    如果你需要保存sd文件,那么模拟浏览器点击Get SD File即可。可以留言询问本人

    使用python从图片提取分子结构2

    go top

    import requests
    import os
    
    '''
    This script transfer molecule image to mol format (saved as sdf files).
    You should change the image folder (specified in line 11) ane the name of result file (specified in line 26).
    '''
    
    def get_sdf(name, img_folder):
    
        imgs76 = os.listdir(img_folder)
    
        url = 'https://molvec.ncats.io/molvec'
        headers = {'Content-Type' : 'image/jpg'}
    
        for imgs in imgs76:
            with open('{}/{}'.format(img_folder, img), 'rb') as fp:
                r = requests.post(url, data=fp, headers=headers)
    
            with open('{}.sdf'.format(patent), 'a') as fp:
                fp.write(r.json()['molvec']['molfile'])
                fp.write('\n$$$$\n')
    
    def main():
        name = 'abc'
        img_folder = "***"
        get_sdf(name, img_folder)
    
    if __name__ == '__main__':
        main()
    
    ```

    上面的代码将img_folder下的所有分子图片转换到名为name的sdf文件中(sdf是多个mol文件的合成,是化学结构的标准格式)

    展开全文
  • 化学分子式的辨别

    2020-03-04 21:45:46
    化学很神奇,以下是烷烃基。 假设如上图,这个烷烃基有6个原子和5个化学键,6个原子分别标号1~6,然后用一对数字 a,b 表示原子a和原子b间有一个化学键。这样通过5行a,b可以描述一个烷烃基 你的任务是甄别烷烃基的...

    问题:

    化学很神奇,以下是烷烃基。
    在这里插入图片描述
    假设如上图,这个烷烃基有6个原子和5个化学键,6个原子分别标号1~6,然后用一对数字 a,b 表示原子a和原子b间有一个化学键。这样通过5行a,b可以描述一个烷烃基

    你的任务是甄别烷烃基的类别。
    原子没有编号方法,比如
    1 2
    2 3
    3 4
    4 5
    5 6

    1 3
    2 3
    2 4
    4 5
    5 6
    是同一种,本质上就是一条链,编号其实是没有关系的,可以在纸上画画就懂了

    input:

    输入第一行为数据的组数T(1≤T≤200000)。每组数据有5行,每行是两个整数a, b(1≤a,b≤6,a ≤b)
    
    数据保证,输入的烷烃基是以上5种之一
    

    output:

    每组数据,输出一行,代表烷烃基的英文名

    sample input:

    2
    1 2
    2 3
    3 4
    4 5
    5 6
    1 4
    2 3
    3 4
    4 5
    5 6

    sample output:

    n-hexane
    3-methylpentane

    题解

    1. 判断方法:对于这五种分子,我是根据其原子的价位来进行判断的。我们观察这五种分子,第一个只有二价与一阶原子。第二种与第三种由一个三价原子,第四种有两个三价原子,第五种由四价原子,这样我们在每次输入的过程中将原子的价位的个数记录下来就可以分辨除二三之外的分子。第二三的区别在于两个三价原子是否相联,我们只需要将输入的五个化学键的两端记录下来,看看是否三价的两个是一次输入的。

    完整代码

    #include <iostream>
    using namespace std; 
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
    
    int main(int argc, char** argv) {
    	int n;
    	cin>>n;
    	for(int i=0;i<n;i++)
    	{
    		int v[7]={0,0,0,0,0,0,0};  //记录六个原子的价位
    		int a[5],b[5];
    		for(int j=0;j<5;j++)
    		{
    			cin>>a[j]>>b[j];
    			v[a[j]]++;        //将每个化学键的两端记录下来
    			v[b[j]]++;
    		}
    		int one,two,three,four;
    		one=0;
    		two=0;
    		three=0;
    		four=0;
    		for(int j=1;j<=6;j++)   //统计个数
    		{
    			if(v[j]==1) one++;
    			if(v[j]==2) two++;
    			if(v[j]==3) three++;
    			if(v[j]==4) four++;
    		}
    		if(four==1) cout<<"2,2-dimethylbutane"<<endl;
    		if(three==0&&four==0) cout<<"n-hexane"<<endl;
    		if(three==2) cout<<"2,3-dimethylbutane"<<endl;
    		if(three==1)
    		{
    			int san,er1,er2,count=0;
    			for(int j=1;j<=6;j++)
    			{
    				if(v[j]==3)
    				{
    					san=j;
    				}
    				if(v[j]==2)
    				{
    					if(count==0)
    					{
    						er1=j;
    						count++;
    					}
    					else{
    						er2=j;
    					}
    				}
    				
    			}       // 将两个三价元素找出来
    			bool is=0;
    			for(int k=0;k<5;k++)   //查看这两个三价元素是否为同一次输入
    			{
    				if((a[k]==er1&&b[k]==er2)||(a[k]==er2&&b[k]==er1))
    				{
    					is=1;
    				}
    			}
    			if(is)
    			{
    				cout<<"2-methylpentane"<<endl;
    			}
    			else
    			{
    				cout<<"3-methylpentane"<<endl;
    			}
    		}
    }
    	return 0;
    }
    
    展开全文
  • 分子式输入 用于化学式输入的jquery插件。 它将数字转换为输入字段中的下标,以使其更加用户友好 ##用法## 使用简单 < script src =" PATH_TO_JQUERY/jquery.min.js " type =" text/javascript " > <...
  • DFT的matlab源代码C9540:计算量子化学简介 课程目标: 本课程的目的是向本科生和研究生介绍计算量子化学领域。 在简要介绍了量子化学和计算化学的基本概念之后,学生将获得一些量子化学程序的动手经验,这些程序可...
  • 使用Deepchem构建化学分子的神经网络和图神经网络模型示例 by wufeil Deepchem包含了很多的化学分子的数据集, 同时也有将分子结构转换为机器学习能够识别的矩阵(序列)数据的方法, 下面就来简单举几个例子,...

    首先,关于分子指纹,分子指纹是一个二进制向量,其中每个位代表是否存在该分子的某个子结构 ,例如苯环。 它通常很长,可能无法合并一些结构信息,例如手性 。
    分子指纹

    
    
    '''
    
    使用Deepchem构建化学分子的神经网络和图神经网络模型示例
    
    by wufeil
    
        Deepchem包含了很多的化学分子的数据集,
        同时也有将分子结构转换为机器学习能够识别的矩阵(序列)数据的方法,
        下面就来简单举几个例子,以便快速入门
    
    '''
    
    import numpy as np
    import deepchem as dc
    import tensorflow as tf
    
    #设定随机数,可重复再现
    np.random.seed(88)
    tf.random.set_seed(88)
    
    '''
    Delaney(ESOL) 溶解度能数据集
        该数据集是Deepchem内置MoleculeNet数据集的一部分。
        
    首先,全连接神经网络多任务回归器
    '''
    #加载数据
    tasks, datasets, transformers = dc.molnet.load_delaney() #默认是下载分子指纹
    print(transformers)
    print(tasks) #任务  #print: ['measured log solubility in mols per litre']
    print(datasets[0])
    
    ''''
    划分数据集
    '''
    train_dataset, valid_dataset, test_dataset = datasets
    print(train_dataset) #迭代对象
    print(test_dataset)
    print(valid_dataset)
    
    
    #模型的评价指标
    avg_pearson_r2 = dc.metrics.Metric(dc.metrics.pearson_r2_score, np.mean)
    #回归任务模型
    '''
    dc.models.MultitaskRegressor: deepchem的多任务回归的全连接网络模型
    请参照:https://deepchem.readthedocs.io/en/latest/api_reference/models.html?highlight=MultitaskRegressor#deepchem.models.MultitaskRegressor.__init__
    
    '''
    model = dc.models.MultitaskRegressor(len(tasks), #任务数量,这里为1
                                         n_features=datasets[0].X.shape[1], #每个分子的特征数量
                                         layer_sizes=[500])  #500层
    
    model.fit(train_dataset)
    
    train_score = model.evaluate(train_dataset, [avg_pearson_r2], transformers)
    valid_score = model.evaluate(valid_dataset, [avg_pearson_r2], transformers)
    assert train_score['mean-pearson_r2_score']>0.7, train_score
    assert valid_score['mean-pearson_r2_score']>0.3, valid_score
    
    
    
    '''
    
    图卷积网络模型
        在全连接层神经网络模型中,输入的是ECFP的fingerprint
        在图神经网络中,这种ECFP的数据结构不适合,所以在导入数据的时候需要设置transformers=’GraphConv'
        dc.models.GraphConvModel有不同的参数需要设置,请见:https://deepchem.readthedocs.io/en/latest/api_reference/models.html#model
    '''
    
    tasks, datasets, transformers = dc.molnet.load_delaney(featurizer='GraphConv')
    train_dataset, valid_dataset, test_dataset = datasets
    model = dc.models.GraphConvModel(len(tasks), mode='regression', dropout=0.5)
    model.fit(train_dataset, nb_epoch=30)
    train_score = model.evaluate(train_dataset, [avg_pearson_r2], transformers)
    print(train_score)
    
    
    
    ''''
    这里要特别说明的是,数据结构的问题
    
    由于图神经网络的输入为特殊的链接矩阵和节点信息,因此,在这里的加载数据的时候使用了GraphConv的特征化方法
    
    生成的train_datset中, X保存的则是ConvMol的对象,专门用于图神经网络计算的计算。
    详见:https://deepchem.readthedocs.io/en/latest/api_reference/dataclasses.html?highlight=ConvMol#deepchem.feat.mol_graphs.ConvMol
    
    如下例,返回链接表
    '''
    print(train_dataset.X[0].get_adjacency_list())
    print(train_dataset.X[0].get_atom_features())
    
    
    
    
    

    如何将一个分子转化为机器学习可以识别的数据类型(例如这里提到的分子指纹)呢?有力再写

    展开全文
  • 本文针对计算机辅助药物设计 (CADD)中的分子生成方向进行一下总结,主要内容是根据模型生成的分子理化性质检验,包括多种性质的定义、计算公式、评价指标及实现代码。 计算机辅助药物设计 (CADD) 提高了药物发现的...
  • 受到邀请来帮同学计算其所采用的化学式的相对分子质量.本文详细介绍了如何识别化学式内元素,并对其化学式相对分子质量进行计算的过程. 输入化学式 在输入化学式的时候,需要将化学式中每个元素的个数进行表明.一个...
  • XLQC 我的实验量子化学代码。 通过Hartree-Fock SCF计算H2O进行说明。 现在使用GPU进行两电子积分计算。 参考资料:“化学中的C ++编程教程” 积分子程序来自:“ PyQuante:Python量子化学” 在GPU上进行量子化学的...
  • 用深度神经网络增强遗传算法以探索化学空间 这是分子进展的可视化: https://github.com/aspuru-guzik-group/GA/raw/master/readme_docs/mol_view.gif 如何运行代码?: 我们强烈建议使用以下版本来运行您的实验...
  • 分子动力学轨迹的 Matlab 脚本。 当前功能 使用 AIMD_Toolkit,您可以 从 VASP 输出 XDATCAR 读取轨迹 使用 VESTA 可读的 CHG 格式创建核密度 引用 AIMD_Toolkit 如果您使用此代码,请引用以下论文 陆子恒等物理化学...
  • 论文“用遗传算法进行第一原理分子结构搜索”现已发表在《化学信息与建模杂志》上; DOI:10.1021 / acs.jcim.5b00243 已经创建了一个新的分支机构,以实现进一步的自由度(“方向”)为目标 要求 工具的功能: ...
  • matlab函数求和代码量子化学 基于Hartree-Fock和耦合簇(CC)方法论的用于量子化学计算的代码集合。 这些都是我自己为学习和测试目的而开发的代码。 存储库内容: CC_matlab 用Matlab编写的自旋积分耦合群集代码,...
  • DFT的matlab源代码AQML:用于量子化学的基于Amons的量子机器学习 AQML是Python / Fortran / C ++混合软件包,旨在通过使用amons来模拟量子化学问题, amons是大型系统(例如蛋白质,固体)的基本组成部分。 作者: ...
  • Matlab代码可通过分子动力学模拟计算固液接触角 这些Matlab代码通过固体基质上液滴的分子动力学模拟来计算固液接触角。 所有代码都读取LAMMPS轨迹文件。 有关每种方法背后的理论以及适当引用代码的更多详细信息,请...
  • 如何清空matlab的代码MSQC(量子化学中的分子相似性) 待办事项:添加大图文档。 MEX C代码的编译 有一些用C编写的MEX例程必须在使用之前进行编译。 如果二进制文件不存在,将尝试自动进行编译。 另外,所有代码都...
  • 哥德堡大学化学分子生物学系研究人员 ##什么? 脚本包含或多或少的纯示例脚本,可用于各种操作 教程包含有关如何执行某些任务的说明 ##什么时候? 如果更有意义的是共享和共同编辑一条信息 ##为什么? ...
  • 关于映射材料和化学数据集的几个说明性示例,包括结晶和无定形材料,界面和有机分子。 这些示例的数据集在this中。 用于分析示例和制作图形的asap命令的代码段。 基本用法 键入asap并将子命令用于各种任务。 获取...
  • 在LaTeX 中,普通化学公式主要利用 mhchem 宏包来完成。而有机化学公式,则主要利用 chemfig ...【LaTeX代码】 \documentclass[UTF8]{article} \usepackage{ctex} \usepackage{mhchem} \begin{document} \ce{Ba^2+.
  • 想法是使用任何给定方法对实验性单分子FRET(smFRET,Wikipedia链接)数据进行一次拟合,在代码Ver 1.0和Ver 2.0中使用最简单的阈值化方法,即设置阈值(例如,在中间设置FRET值)。的两个州)以区分两个州。 分析...
  • DFT的matlab源代码预测化学React产率 使用Transformers从ReactSMILES预测化学React的产率 人工智能正在推动有机化学领域最重要的革命之一。 多种平台,包括用于基于机器学习进行React预测和合成计划的工具,已成功...
  • matlab二重积分代码MatPsi:基于PSI4的Matlab量子化学 ##汇编 在$ objdir / MatPsi中配置,制作,查找可用的东西 遇到麻烦时请参考PSI4编译 ##用法 用法(几乎)是所有Matlab约定。 >> [output1, output2, ...] ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,430
精华内容 1,772
热门标签
关键字:

化学分子代码