def average_upot( self, argv = None ): atomlist = argv['atomlist'] ref = argv['reference'] vacancy = argv['vacancy'] spec = {} avg_cl_shift = 0.000 # lattice vectors try: lat_vec = argv['lat_vec'] self.geom.lat_vec = numpy.reshape( lat_vec, ( 3, 3 ) ) if ref != None: ref.geom.lat_vec = numpy.reshape( lat_vec, ( 3, 3 ) ) # end if msg = PTD[PT.Cart] # cart origo? try: origo_vec = argv['origo_vec'] except: origo_vec = None # end try # end if except: lat_vec = None msg = PTD[PT.Direct] # end try if self.verbose: print " Coords:",msg # end if if lat_vec != None: avg_xyz = Geometry() avg_xyz.lat_vec = self.geom.lat_vec avg_xyz.pt = PT.Cart # end if if self.verbose: msg = "\n %5s %4s %12s %12s %12s %12s" % ("No","Sym","cl_shift","x","y","z") if origo_vec != None: msg += " %12s" % ("dr") if ref != None: msg += " %12s" % ("ref dr") print msg # end if # cross check if ref != None: lookup = l_vacancy( range( 0, ref.geom.ac ), vacancy ) ref_avg_cl_shift = 0.000 # end if for ai in atomlist: atom = self.geom.get( ai ) s = atom.symbol no = atom.no cls = atom.cl_shift pos = atom.position avg_cl_shift += cls # cross check if ref != None: ref_atom = ref.geom.get( lookup[ai] ) ref_s = ref_atom.symbol ref_pos = ref_atom.position ref_cls = ref_atom.cl_shift ref_avg_cl_shift += ref_cls # end if # cart position if lat_vec != None: # change to cart pos = self.geom.position( atom, PT.Cart ) if ref != None: ref_pos = ref.geom.position( ref_atom, PT.Cart ) avg_xyz.add( AtomPos( s, no, cls, pos ) ) # end if if self.verbose: msg = " %5d %4s" % (atom.no, s) msg += " %12.6f" % cls msg += " %12.6f %12.6f %12.6f" % (pos[0], pos[1], pos[2]) if origo_vec != None and lat_vec != None: msg += " %12.6f" % v_dr( origo_vec, pos ) # end if print msg if ref != None: msg = "R %5d %4s" % (ref_atom.no, ref_s) msg += " %12.6f" % ref_cls msg += " %12.6f %12.6f %12.6f" % (ref_pos[0], ref_pos[1], ref_pos[2]) if origo_vec != None and lat_vec != None: msg += " %12.6f" % v_dr( origo_vec, ref_pos ) msg += " %12.6f" % v_dr( ref_pos, pos ) # end if print msg # end if # end if try: spec[s] += 1 except: spec[s] = 1 # end try # end for ai if self.verbose: print "\n Atoms: ", len( atomlist ) print " Species: ", spec print "\n Orig. Average:", avg_cl_shift, "/", len( atomlist ), \ "=", avg_cl_shift / len( atomlist ) if ref != None: print " Ref. Average:", ref_avg_cl_shift, "/", len( atomlist ), \ "=", ref_avg_cl_shift / len( atomlist ) print "\n Shift:", avg_cl_shift - ref_avg_cl_shift # end if # end if # end if if lat_vec != None: avg_output = IO( 'atomlist.xyz', 'xyz', 'w+' ) avg_output.geom( avg_xyz ) avg_output.write() # end if avg_cl_shift /= len( atomlist ) return avg_cl_shift