2013-04-04 13 views
7

Bu kodu çalıştırma konusunda yardıma ihtiyacım var. Bu kodu (http://easybioinfo.free.fr/?q=content/amber-trajectory-gromacs-xtc-conversion) adresinden aldım. Kehribar yörüngesini gromacs yörüngesine dönüştürmeye çalışıyorum.sh: Sözdizimi hatası: Hatalı fd sayısı

Bu kodu çalıştırdığımda bazı hatalar alıyorum. Bu kod Aşağıdaki hataları yapıştırın: Ben Ubuntu 11.10 (64 bit) kullanıyorum, bilgi için

[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$ 

:

#!/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") 

hata olarak altındadır.

Bu hata nasıl düzeltilebilir? Herhangi bir yardım için teşekkür ederiz. Teşekkür ederiz.

+0

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

cevap

26

sorun olabileceğini Ubuntu 11.x/bin/sh/bin/dash ile bağlanır ve bin bash'a değil.

onay linki:

/bin/sh/bin/dash bağlantısıdır
ls -l /bin/sh 

Eğer/bin/bash olarak değiştirin.

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

Yardımlarınız için çok teşekkür ederim. – Vijay

+9

Muhtemelen 'dpkg-reconfigure dash'ünü kullanmalısınız ve varsayılan sistem kabuğunuz olarak tire isteyip istemediğiniz sorulduğunda' no' seçeneğini seçin. – Jan

2

Sistem komutu "ptraj" bu ".pdb" dosyasını/dosyalarını oluşturulamıyor gibi görünüyor.

Mümkün hatalarını bastırmak değil amacıyla aşağıdaki satırı değiştirmek öneririm:

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

repace ile:

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

yazık ki. Yanlışlıkla gönderildi. PTRAJ çalışıyor ama hata mesajı alıyorum (sh: Syntax error: Bad fd number). Bunu nasıl düzeltebilirim? Lütfen teşekkür ederim. – Vijay