PageRenderTime 74ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/staggbin/getsplitresmask.py

https://bitbucket.org/sstaggal/staggware
Python | 122 lines | 94 code | 22 blank | 6 comment | 8 complexity | 37037622bed2931cd24c55668c22770a MD5 | raw file
  1. #!/usr/bin/env python
  2. import glob
  3. import os
  4. #from matplotlib import pyplot
  5. import numpy
  6. import frealignlib
  7. import sys
  8. import subprocess
  9. def getnptcls(paramfilename):
  10. f=open(paramfilename,'r')
  11. lines=f.readlines()
  12. f.close()
  13. nptcls=int(lines[-1].split()[-1])
  14. return nptcls
  15. def getrange(paramfilename):
  16. f=open(paramfilename,'r')
  17. f.readline()
  18. datarange=f.readline()
  19. f.close()
  20. words=datarange.split()
  21. if len(words) >= 3:
  22. start=words[1]
  23. end=words[2]
  24. elif len(words) == 2:
  25. start=words[1]
  26. end=None
  27. return start,end
  28. def sortf(x,y):
  29. xa=int(x.split('_')[-1])
  30. ya=int(y.split('_')[-1])
  31. return xa-ya
  32. paramfilename=sys.argv[1]
  33. ###change this in the future, make as an option
  34. innerdiam=0
  35. outerdiam=0
  36. apix=float(sys.argv[2])
  37. sets=glob.glob('set_*')
  38. basedir=os.getcwd()
  39. fscdict={}
  40. nptcls=[]
  41. respoint5=[]
  42. respoint143=[]
  43. rmeaspoint5=[]
  44. rmeaspoint143=[]
  45. resout=open('p_vs_res.m.txt','w')
  46. resout.write('Start\tStop\tNPtcls\tFSC_0.5\tFSC_0.143\t1/FSC_0.5\t1/FSC_0.143\n')
  47. sets.sort(cmp=sortf)
  48. for set in sets:
  49. os.chdir(set)
  50. print set
  51. ns, res, fsc = frealignlib.parseCombine('frealign.combine.out')
  52. nptcls.append(getnptcls(paramfilename))
  53. start,end=getrange(paramfilename)
  54. fscdict[nptcls[-1]]=(ns,res,fsc)
  55. e='even'
  56. eroot=e.split('.')[0]
  57. eout=eroot+'.m.mrc'
  58. o='odd'
  59. oroot=o.split('.')[0]
  60. oout=oroot+'.m.mrc'
  61. ecommand='e2proc3d.py --process=mask.auto3d:radius=90:nshells=7:threshold=0.002:nshellsgauss=3 %s %s' % (e,eout)
  62. ocommand='e2proc3d.py --process=mask.auto3d:radius=90:nshells=7:threshold=0.002:nshellsgauss=3 %s %s' % (o,oout)
  63. print ecommand
  64. os.system(ecommand)
  65. print ocommand
  66. os.system(ocommand)
  67. fsc='%s_%s.eotest' % (eout, oout)
  68. fsccommand='proc3d %s %s fsc=%s' % (eout, oout, fsc)
  69. print fsccommand
  70. os.system(fsccommand)
  71. f=open(fsc)
  72. lines=f.readlines()
  73. f.close()
  74. freq=[]
  75. corr=[]
  76. for line in lines:
  77. words=line.split()
  78. freq.append(int(words[0]))
  79. corr.append(float(words[1]))
  80. for n in range(len(freq)):
  81. if corr[n] < 0.5:
  82. freq0_5=(freq[n]+freq[n-1])/2.0
  83. res0_5=len(freq)*2*apix/freq0_5
  84. respoint5.append(res0_5)
  85. break
  86. for n in range(len(freq)):
  87. if corr[n] < 0.143:
  88. freq0_143=(freq[n]+freq[n-1])/2.0
  89. res0_143=len(freq)*2*apix/freq0_143
  90. respoint143.append(res0_143)
  91. break
  92. resout.write('%s\t%s\t%d\t%f\t%f\t%f\t%f\n'% (start,end,nptcls[-1],respoint5[-1],respoint143[-1],1/respoint5[-1],1/respoint143[-1]))
  93. #os.system('rm working.mrc')
  94. #os.system('rm even')
  95. os.system('rm even.m.mrc')
  96. #os.system('rm odd')
  97. os.system('rm odd.m.mrc')
  98. os.system('rm weights')
  99. os.chdir(basedir)
  100. resout.close()