def cubetodx(infname, outfname, valperl = 3, scientfn=False): # need a local edit of OpenDx OpenDX.global_values_per_line = valperl if scientfn: OpenDX.global_float_format.append("e") OpenDX.global_float_precision.append(8) conv = 0.529177 fp = open(infname) cubef = read_cube(fp) fp.close() origin = cubef['origin'] grid_shape = cubef['data'].shape data = cubef['data'] with open(infname) as fp: next(fp) next(fp) array = [] for i in range(4): head = next(fp) array.append([float(x) for x in head.split()]) header = np.array(array) delta = [float(header[m,m])*conv for m in range(1,4)] delta = np.diagflat(delta) fp.close() new = OpenDX.field('density') new.add('positions', OpenDX.gridpositions(1, grid_shape, origin, delta)) new.add('connections', OpenDX.gridconnections(2, grid_shape)) new.add('data',OpenDX.array(3, data, type='double')) new.write(outfname)
def grd2dx(grid, origin): """Comments origin represents the cartesian coordinates of the center of the grid cell """ # nxn array with the length # of a grid cell along each axis delta = np.zeros([3, 3]) np.fill_diagonal(delta, 1) # build an opendx grid dx = OpenDX.field('density') dx.add('positions', OpenDX.gridpositions(1, grid.shape, origin, delta)) dx.add('connections', OpenDX.gridconnections(2, grid.shape)) dx.add('data', OpenDX.array(3, grid)) return dx
def writedx(sfed_o, ho, fname): sfed = OpenDX.field('SFED') sfed.add('positions', OpenDX.gridpositions(1, sfed_o.shape, ho.origin, ho.delta)) sfed.add('connections', OpenDX.gridconnections(2, sfed_o.shape)) sfed.add('data', OpenDX.array(3, sfed_o)) sfed.write(fname + ".dx")
def main(argv): grid_fn = '' basename = '' grid_type = '' th_value = -1.0 do_thresholding = False try: opts, args = getopt.getopt( argv, "hg:b:t:v:", ["grid=", "basename=", "type=", "threshold="]) except getopt.GetoptError: print(usage) sys.exit(2) for opt, arg in opts: if opt == '-h': print(usage) sys.exit() elif opt in ("-g", "--grid"): grid_fn = arg # print "Input grid file: %s" % grid_fn elif opt in ("-b", "--basename"): basename = arg # print "basename for output: %s" % basename elif opt in ("-t", "--type"): grid_type = arg # print "Grid type requested: %d" % grid_type elif opt in ("-v", "--threshold"): th_value = float(arg) do_thresholding = True if (grid_fn == '' or basename == ''): print('Missing inputs.') sys.exit(2) if grid_type not in ['coulomb', 'vanderwaals', 'desolvation']: print('The specified grid type ' + grid_type + ' is not recognized.') sys.exit(2) elif grid_type in ['coulomb', 'vanderwaals']: # Reading main info with open(grid_fn, 'r') as f: line = f.readline() grid_shape = tuple([int(x) for x in line.split()]) line = f.readline() grid_origin = np.array(line.split(), dtype=np.float64) line = f.readline() grid_spacing = np.array(line.split(), dtype=np.float64) grid_delta = np.diag(grid_spacing) n_skiprows = 3 # number of rows to be skipped to read the grid data elif grid_type == 'desolvation': # raise NotImplementedError("type " + grid_type + " is not yet implemented.") # Reading main info desolvation grid with open(grid_fn, 'r') as f: line = f.readline() grid_spacing = float(line.split()[2]) grid_delta = np.diag(np.repeat(grid_spacing, 3)) line = f.readline() line = f.readline() grid_origin = np.array(line.split(), dtype=np.float64) line = f.readline() line_split = np.array(line.split(), dtype=np.int32) grid_shape = tuple(line_split[3:6] - line_split[0:3] + 1) n_skiprows = 4 # number of rows to be skipped to read the grid data # Reading grid into ndarray: npoint = np.prod(grid_shape) grid_vals = np.loadtxt(grid_fn, dtype=np.float64, skiprows=n_skiprows) # print(grid_vals.shape) if grid_type in ['coulomb', 'desolvation']: grid_vals = grid_vals.reshape(grid_shape) # Now saving to dx file: dx = OpenDX.field(grid_type) dx.add('positions', OpenDX.gridpositions(1, grid_shape, grid_origin, grid_delta)) dx.add('connections', OpenDX.gridconnections(2, grid_shape)) dx.add('data', OpenDX.array(3, grid_vals)) out_fn = basename + '.dx' dx.write(out_fn) elif grid_type == 'vanderwaals': grid_rep = grid_vals[:, 1].reshape(grid_shape) grid_att = grid_vals[:, 0].reshape(grid_shape) if do_thresholding: grid_rep[grid_rep > th_value] = th_value grid_att[grid_att < (-1.0 * th_value)] = -1.0 * th_value dx = OpenDX.field('vdw_rep', components=dict(positions=OpenDX.gridpositions( 1, grid_shape, grid_origin, grid_delta), connections=OpenDX.gridconnections( 2, grid_shape), data=OpenDX.array(3, grid_rep))) out_fn = basename + '_rep.dx' dx.write(out_fn) dx = OpenDX.field('vdw_att', components=dict(positions=OpenDX.gridpositions( 1, grid_shape, grid_origin, grid_delta), connections=OpenDX.gridconnections( 2, grid_shape), data=OpenDX.array(3, grid_att))) out_fn = basename + '_att.dx' dx.write(out_fn)