示例#1
0
文件: Scan.py 项目: mgdp/ParFit
 def run_dih_elem(self,m):
         fnameb=m.name
         coengine_name="coengine_"+fnameb
         f=open("../Data/Engine/"+coengine_name,'w')
         if self._styp=="DihA":
            print >>f,"mode opt"
         else:
            print >>f,"mode single"
         print >>f,"infile  "+fnameb+"_inp.pcm"
         print >>f,"outfile "+fnameb+"_out.pcm"
         print >>f,"print 3"
         if self._mm=="mm3":
            print >>f,"forcefield mm3"
            print >>f,"addpar add_MM3.prm"
         elif self._mm=="mmff94":
            print >>f,"forcefield mmff94"
            print >>f,"addpar add_MMFF94.prm"
         else:
            print "Scan.run_scan: Wrong MM-name!"
         f.close()
         #
         timeout=1
         while True:
             status=run_engine_timeout(self.engine_path,coengine_name,timeout)
             if status:
                 break
             else:
                 p,c,ol_templ,lines=read_add(self._mm,self._opt_lin,self._np,self._nc,1,self._styp)
                 p[0]+=0.001
                 #pert_add_param("add_MM3.prm")
                 write_add(self.sdir,p,c,self._mm,ol_templ,lines,1,None,None)
         #
         comm="rm ../Data/Engine/"+coengine_name
         system(comm)
示例#2
0
文件: Scan.py 项目: mgdp/ParFit
 def engine_rmse(p):
    print p
    step=1
    step_int=10
    write_add(p,c,mm,ol_templ,lines,1,step,step_int)
    ds.run_scan(p,c,mm,ol_templ,lines)
    rmse=ds.calc_rmse(csv,step,step_int)
    print rmse
    return rmse
示例#3
0
文件: ParFit.py 项目: mgdp/ParFit
   def engine_rmse2(p):

      n=len(ds)
      rmse=0.
      for i in range(n):
         write_add(sdir,p,c,mm,ol_templ,lines,1,engine_rmse2.step,step_int)
         ds[i].run_scan(p,c,mm,ol_templ)
         rmse+=ds[i].calc_rmse(csv,i,engine_rmse2.step,step_int)

      engine_rmse2.step+=1

      return (round(rmse/n,4),)
示例#4
0
文件: ParFit.py 项目: mgdp/ParFit
def pf_run(PF_if):

   scan_type,gopt_type,gopt_s_fnameb,tup,bes,engine_path,mm,mode,alg,opt_lin,np,nc,step_int,csv=par_fit_inp(PF_if)
   #scan_type=scan_type.strip()   

   if engine_path=="":
      engine_path="../Engine"

   sdir=[]
   pref="../Data/ParFit/"+PF_if
   sdir.append(pref)
   if os.path.exists(pref):
      print
      print 'Warning: The directory',pref,'exists!'
      print
      sys.exit()
   os.mkdir(pref)   
   for gsf in gopt_s_fnameb:
      sd_gsf=pref+"/"+gsf
      sdir.append(sd_gsf)
      os.mkdir(sd_gsf)

   n=len(gopt_type)
   ds=[]
   if scan_type=="diha":
      for i in range(n):
         if not bes[i]==():
            bes[i]=map(int,bes[i])
         sds=DihAScan(sdir,gopt_s_fnameb[i],engine_path,mm,opt_lin,np,nc,bes[i],tup[i])
         ds.append(sds)
   elif scan_type=="bond":
      for i in range(n):
         if not bes[i]==():
            bes[i]=map(lambda x:10.*x,bes[i])
            bes[i]=map(int,bes[i])
         sds=BondScan(sdir,gopt_s_fnameb[i],engine_path,mm,opt_lin,np,nc,bes[i],tup[i])
         ds.append(sds)
   elif scan_type=="angl":
      for i in range(n):
         if not bes[i]==():
            bes[i]=map(lambda x:10.*x,bes[i])
            bes[i]=map(int,bes[i])
         sds=AnglScan(sdir,gopt_s_fnameb[i],engine_path,mm,opt_lin,np,nc,bes[i],tup[i])
         ds.append(sds)

   if not gopt_type[0]=="ginp":
      os.environ["ENGINE_DIR"]=engine_path+"/engine_dir"
      p,c,ol_templ,lines=read_add(mm,opt_lin,np,nc,1,scan_type)

   for i in  range(n):
      if gopt_type[i]=="full":
         ds[i].read_gamess_outputs()
      elif gopt_type[i]=="comp":
         ds[i].read_gouts_data()
      elif gopt_type[i]=="ginp":
         ds[i].write_gamess_inputs()
         quit()
      else:
         "Par_Fit: Wrong gopt_type!"

      ds[i].write_engine_inputs()

   def engine_rmse(p):

      n=len(ds)
      rmse=0.
      for i in range(n):
         write_add(sdir,p,c,mm,ol_templ,lines,1,engine_rmse.step,step_int)
         ds[i].run_scan(p,c,mm,ol_templ)
         rmse+=ds[i].calc_rmse(csv,i,engine_rmse.step,step_int)
      print engine_rmse.step,round(rmse/n,4),p

      engine_rmse.step+=1

      return round(rmse/n,4)
  
   engine_rmse.step=1

   def engine_rmse2(p):

      n=len(ds)
      rmse=0.
      for i in range(n):
         write_add(sdir,p,c,mm,ol_templ,lines,1,engine_rmse2.step,step_int)
         ds[i].run_scan(p,c,mm,ol_templ)
         rmse+=ds[i].calc_rmse(csv,i,engine_rmse2.step,step_int)

      engine_rmse2.step+=1

      return (round(rmse/n,4),)

   engine_rmse2.step=1

   if mode=="sense":
      eps=0.01
      np=len(p)
      ppM=numpy.zeros(np)
      ppP=numpy.zeros(np)
      p0=engine_rmse(p)
      for i in range(np): 
         for j in range(np):
            ppM[j]=p[j]
            ppP[j]=p[j]
         ppM[i]=ppM[i]-eps
         ppP[i]=ppP[i]+eps
         pM=engine_rmse(ppM)
         pP=engine_rmse(ppP)
         print i+1,(pM-p0)/eps,(pP-p0)/eps
   else:
      np=len(p)
      if alg=="ga":
         print "Warning: The genetic algorithm printout will not start immediately!"
         hof=run_ga(engine_rmse2,np,40)
         hof0=numpy.array(hof[0])
         write_add(sdir,hof0,c,mm,ol_templ,lines,1,"ga",None)
      elif alg=="fmin":
         #print fmin_powell(engine_rmse,p)
         print fmin(engine_rmse,p,ftol=0.2)
      elif alg=="hybr":
         print "Warning: The genetic algorithm printout will not start immediately!"
         hof=run_ga(engine_rmse2,np,40)
         hof0=numpy.array(hof[0])
         write_add(sdir,hof0,c,mm,ol_templ,lines,1,"ga",None)
         fmin(engine_rmse,hof0,ftol=0.2)
      else: 
         "'alg' is not a known algorithm!"