2013-04-04 31 views
7

Tôi cần trợ giúp khi chạy mã này. Tôi lấy mã này từ (http://easybioinfo.free.fr/?q=content/amber-trajectory-gromacs-xtc-conversion). Tôi đang cố gắng chuyển đổi quỹ đạo hổ phách thành quỹ đạo gromac.sh: Lỗi cú pháp: Số fd kém

Khi tôi thực thi mã này, tôi gặp một số lỗi. Tôi dán lỗi dưới đây mã này:

#!/usr/bin/python 

#Workflow based on Trajectory Converter - v1.5 by: Justin Lemkul 
#completely reimplemented and improved by Peter Schmidtke & Jesus Seco 

import sys,os,re,fnmatch 

if len(sys.argv)>4 : 
    f=sys.argv[1] 
    if not os.path.exists(f): 
     sys.exit(" ERROR : Something you provided does not exist. Breaking up.\n\nUSAGE : python trajconv_peter.py amberCrd amberTop trajDir trajPattern outPutPrefix\n\n \ 
Example : python amber2xtc.py mdcrd.crd mdcrd.top md *.x.gz md_gromacs\n") 
else : 
    sys.exit(" \n USAGE : python amber2xtc.py AMBERCRD AMBERTOP TRAJDIR TRAJPATTERN OUTPUTPREFIX\n\ 
    Example : python amber2xtc.py mdcrd.crd mdcrd.top md *.x.gz md_gromacs\n\ 
    Note that the AmberCrd can also be a PDB file.\n") 

crd=sys.argv[1] 
top=sys.argv[2] 
trajdir=sys.argv[3] 
pattern=sys.argv[4] 
outputPref=sys.argv[5] 

traj_files=fnmatch.filter(os.listdir(trajdir),pattern) #get the fpocket output folders 


RE_DIGIT = re.compile(r'(\d+)')  #set a pattern to find digits 
ALPHANUM_KEY = lambda s: [int(g) if g.isdigit() else g for g in RE_DIGIT.split(s)]  #create on the fly function (lambda) to return numbers in filename strings 
traj_files.sort(key=ALPHANUM_KEY)  #sort by these numbers in filenames 

print "Will convert the following files : " 
print traj_files 

csn=1 
for file in traj_files : 
    ptrajtmp=open("ptraj_tmp.ptr","w") 
    print "currently converting "+file 
    ptrajtmp.write("trajin "+trajdir+os.sep+file+"\n") 
    ptrajtmp.write("reference "+crd+"\n") 
    ptrajtmp.write("center ~:WAT,CIO mass origin\n") 
    ptrajtmp.write("image origin center :* byres familiar\n") 

    ptrajtmp.write("trajout pdb_tmp/mdcrd.pdb pdb") 
    ptrajtmp.close() 
    if not os.path.exists("pdb_tmp"): 
     os.mkdir("pdb_tmp") 

    os.system("ptraj "+top +" ptraj_tmp.ptr >/dev/null 2>&1") 
    if not os.path.exists("xtc_tmp"): 
     os.mkdir("xtc_tmp") 
    #move to *.pdb 
    os.system("cd pdb_tmp; ls *.pdb.* | cut -f3 -d\".\" | awk '{print \"mv mdcrd.pdb.\"$0\" mdcrd_\"$0\".pdb\" }' | sh ; cd ../") 
    pdb_files=fnmatch.filter(os.listdir("pdb_tmp"),"*.pdb") 
    pdb_files.sort(key=ALPHANUM_KEY)  #sort by these numbers in filenames 
    if csn==1: 
     os.system("editconf -f pdb_tmp/mdcrd_1.pdb -o "+outputPref+"_t1_top.gro >/dev/null 2>&1") 

    for pdb in pdb_files: 
     os.system("echo \"0\" | trjconv -s pdb_tmp/"+pdb+" -f pdb_tmp/"+pdb+" -o xtc_tmp/traj_"+str(csn)+".pdb.xtc -t0 "+str(csn)+" >/dev/null 2>&1") 
     csn+=1 
    if os.path.exists(outputPref+"_traj.xtc"): 
     os.system("trjcat -f "+outputPref+"_traj.xtc xtc_tmp/*.pdb.xtc -o "+outputPref+"_traj.xtc >& trajcat.log") 
    else : 
     os.system("trjcat -f xtc_tmp/*.pdb.xtc -o "+outputPref+"_traj.xtc >& trajcat.log") 
    os.system("rm -rf pdb_tmp/*.pdb") 

    os.system("rm -rf xtc_tmp/*.xtc") 


os.remove("ptraj_tmp.ptr") 
os.system("rmdir pdb_tmp") 
os.system("rmdir xtc_tmp") 

Các lỗi như sau:

[email protected]:~/Simulation-Folder-Feb2013/chapter5-thermo-paper2-Vj/analysis-malto-/28-difusion-coeff-malto-thermo/convert-gromacs-format$ python2.7 amber2xtc.py malto-THERMO.crd malto-THERMO.top TRAJDIR malto*.traj md_gromacss 
Will convert the following files : 
['malto-thermo.set11.traj', 'malto-thermo.set12.traj', 'malto-thermo.set13.traj', 'malto-thermo.set14.traj', 'malto-thermo.set15.traj'] 
currently converting malto-thermo.set11.traj 
ls: cannot access *.pdb.*: No such file or directory 
sh: Syntax error: Bad fd number 
currently converting malto-thermo.set12.traj 
ls: cannot access *.pdb.*: No such file or directory 
sh: Syntax error: Bad fd number 
currently converting malto-thermo.set13.traj 
ls: cannot access *.pdb.*: No such file or directory 
sh: Syntax error: Bad fd number 
currently converting malto-thermo.set14.traj 
ls: cannot access *.pdb.*: No such file or directory 
sh: Syntax error: Bad fd number 
currently converting malto-thermo.set15.traj 
ls: cannot access *.pdb.*: No such file or directory 
sh: Syntax error: Bad fd number 
[email protected]:~/Simulation-Folder-Feb2013/chapter5-thermo-paper2-Vj/analysis-malto-/28-difusion-coeff-malto-thermo/convert-gromacs-format$ 

Để biết thông tin, tôi đang sử dụng Ubuntu 11.10 (64 bit).

Lỗi này có thể được sửa chữa như thế nào? Đánh giá cao bất kỳ trợ giúp nào. Cảm ơn bạn.

+0

Theo dõi [PEP - 8] (http://www.python.org/dev/peps/pep-0008/) – pradyunsg

Trả lời

26

Vấn đề có thể, rằng trong Ubuntu 11.x/bin/sh được liên kết với/bin/dấu gạch ngang và không để bin bash.

kiểm tra liên kết:

ls -l /bin/sh 

Nếu/bin/sh là một liên kết đến/bin/dash, thay đổi nó để/bin/bash.

sudo mv /bin/sh /bin/sh.orig 
sudo ln -s /bin/bash /bin/sh 
+0

Cảm ơn bạn rất nhiều vì sự giúp đỡ của bạn. – Vijay

+9

Thay vào đó, bạn có thể sử dụng 'dpkg-reconfigure dash' và chọn' no' khi được hỏi nếu bạn muốn dấu gạch ngang làm hệ vỏ mặc định của mình. – Jan

2

Dường như lệnh hệ thống "ptraj" không thể tạo tệp/tệp ".pdb" đó.

Tôi sẽ đề nghị thay đổi dòng sau để không ngăn chặn lỗi có thể:

os.system("ptraj "+top +" ptraj_tmp.ptr >/dev/null 2>&1") 

repace với:

os.system("ptraj "+top +" ptraj_tmp.ptr") 
+0

Xin lỗi. Đã đăng sai. PTRAJ đang chạy nhưng tôi nhận được thông báo lỗi (sh: Lỗi cú pháp: Bad fd number). Làm thế nào để sửa lỗi này? Vui lòng cảm ơn bạn. – Vijay