24小时热门版块排行榜    

查看: 435  |  回复: 0

fwang2011

金虫 (小有名气)


[资源] cclib 处理大于100个原子的系统 (GAMESS, parser)

前段时间自己遇到的问题,cclib处理大于100个原子的系统出错。

下面是俺的处理方法,共享:
Here is the root problem: cclib (the current released version) cannot parse the log file of system with natom >= 100.

In the log file for the Eigenvalues/MOs:
518  H 98  S   -0.000000   0.000000  -0.000000  -0.000000  -0.000000
  519  C 99  S   -0.000000   0.000000  -0.000000  -0.000000  -0.000000
  520  C 99  S   -0.000000   0.000000  -0.000000  -0.000000  -0.000000
  521  C 99  X   -0.000000   0.000000  -0.000000  -0.000000  -0.000000
  522  C 99  Y   -0.000000   0.000000  -0.000000  -0.000000  -0.000000
  523  C 99  Z   -0.000000   0.000000  -0.000000  -0.000000  -0.000000
  524  H  0  S   -0.000000   0.000000  -0.000000  -0.000000  -0.000000
  525  H  1  S   -0.000000   0.000000  -0.000000  -0.000000  -0.000000
  526  C  2  S   -0.000000   0.000000  -0.000000  -0.000000  -0.000000

The number of atoms are recorded as 0, 1, ...,  instead of 100/200/..., 101/201/..., which is however problematic in calculating CSPA.

My resolution is: introducing a switch to monitor this change. The corresponding code, in gamessparser.py is partially copied in the following:

LINE 714:
               p = re.compile("(\d+)\s*([A-Z][A-Z]?)\s*(\d+)\s*([A-Z]+)"
                oldatom ='0'
                i_atom = 0      #couter to translate to 0s to some hundreds, by C.W.
                flag_w = True   #Flag to whether
                for i in range(self.nbasis):
                    line = inputfile.next()

                    # If line is empty, break (ex. for FMO in exam37).
                    if not line.strip(): break

                    # Fill atombasis and aonames only first time around
                    if readatombasis and base == 0:
                        aonames = []
                        start = line[:17].strip()
                        m = p.search(start)
                        if m:
                            g = m.groups()
                            g2 = int(g[2])  #atom index from GAMESS's log file
                            if g2 == 0 and flag_w:                      #c.w.
                                i_atom = i_atom + 100           #c.w
                                flag_w = False
                            if g2 != 0:
                                flag_w = True
                            g2 = g2 + i_atom            #c.w.
                            aoname = "%s%s_%s" % (g[1].capitalize(), str(g2), g[3])     #c.w.
                          #  aoname = "%s%s_%s" % (g[1].capitalize(), g[2], g[3])
                            oldatom = str(g2)   #c.w.
                            atomno = g2 - 1     #c.w.
                         #   oldatom = g[2]
                         #  atomno = int(g[2])-1
                            orbno = int(g[0])-1

                        else: # For F orbitals, as shown above
                            g = [x.strip() for x in line.split()]
                            g2 = int(g[2])  #atom index from GAMESS's log file
                            if g2 == 0 and flag_w:                      #c.w.
                                i_atom = i_atom + 100           #c.w.
                                flag_w = False                  #c.w.
                            if g2 != 0: #c.w.
                                flag_w = True           #c.w.
                            g2 = g2 + i_atom            #c.w.
                           # aoname = "%s%s_%s" % (g[1].capitalize(), oldatom, g[2])
                            aoname = "%s%s_%s" % (g[1].capitalize(), oldatom, str(g2))
                            atomno = int(oldatom)-1
                            orbno = int(g[0])-1
                        self.atombasis[atomno].append(orbno)
                        self.aonames.append(aoname)
                    coeffs = line[15:] # Strip off the crud at the start.
                    j = 0
                    while j*11+4 < len(coeffs):
                        self.mocoeffs[0][base+j, i] = float(coeffs[j * 11j + 1) * 11])
                        j += 1

            line = inputfile.next()

Enjoy!
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

智能机器人

Robot (super robot)

我们都爱小木虫

相关版块跳转 我要订阅楼主 fwang2011 的主题更新
☆ 无星级 ★ 一星级 ★★★ 三星级 ★★★★★ 五星级
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 一志愿中南化学(0703)总分337求调剂 +9 niko- 2026-03-19 10/500 2026-03-22 16:08 by ColorlessPI
[考研] 275求调剂 +6 shansx 2026-03-22 8/400 2026-03-22 15:27 by barlinike
[考研] 求调剂院校信息 +6 CX 330 2026-03-21 6/300 2026-03-22 15:25 by 无懈可击111
[考研] 269专硕求调剂 +6 金恩贝 2026-03-21 6/300 2026-03-22 14:31 by ColorlessPI
[考研] 303求调剂 +5 安忆灵 2026-03-22 6/300 2026-03-22 12:46 by 素颜倾城1988
[考研] 考研调剂 +4 来好运来来来 2026-03-21 4/200 2026-03-22 12:15 by 星空星月
[基金申请] 山东省面上项目限额评审 +4 石瑞0426 2026-03-19 4/200 2026-03-22 08:50 by Wei_ren
[考研] 求助 +5 梦里的无言 2026-03-21 6/300 2026-03-21 17:51 by 学员8dgXkO
[考研] 材料与化工(0856)304求 B区 调剂 +3 邱gl 2026-03-21 3/150 2026-03-21 13:47 by lature00
[考研] 332求调剂 +4 ydfyh 2026-03-17 4/200 2026-03-21 02:20 by JourneyLucky
[考研] 085700资源与环境308求调剂 +12 墨墨漠 2026-03-18 13/650 2026-03-21 01:42 by JourneyLucky
[考研] 329求调剂 +9 想上学吖吖 2026-03-19 9/450 2026-03-20 22:01 by luoyongfeng
[考研] 材料学硕297已过四六级求调剂推荐 +11 adaie 2026-03-19 11/550 2026-03-20 21:30 by laoshidan
[考研] 353求调剂 +3 拉钩不许变 2026-03-20 3/150 2026-03-20 19:56 by JourneyLucky
[考研] 求调剂 +3 @taotao 2026-03-20 3/150 2026-03-20 19:35 by JourneyLucky
[考研] 材料与化工专硕调剂 +7 heming3743 2026-03-16 7/350 2026-03-20 19:31 by zhukairuo
[考研] 广西大学家禽遗传育种课题组2026年硕士招生(接收计算机专业调剂) +3 123阿标 2026-03-17 3/150 2026-03-20 15:58 by 飞行琦
[考研] 求调剂 +3 暗涌afhb 2026-03-16 3/150 2026-03-20 00:28 by 河南大学校友
[考研] 286求调剂 +6 lemonzzn 2026-03-16 10/500 2026-03-19 14:31 by lemonzzn
[考研] 本科郑州大学物理学院,一志愿华科070200学硕,346求调剂 +4 我不是一根葱 2026-03-18 4/200 2026-03-19 09:11 by 浮云166
信息提示
请填处理意见