Esempio n. 1
0
def run(xds_inp):
    xp = XPARM()
    xp.set_info_from_xdsinp_or_inpstr(xdsinp=xds_inp)
    xp.update_cell_based_on_axes()
    print xp.xparm_str().rstrip()
Esempio n. 2
0
def run(xds_inp):
    xp = XPARM()
    xp.set_info_from_xdsinp_or_inpstr(xdsinp=xds_inp)

    d_map = numpy.zeros((xp.ny, xp.nx))  # resolution mapping

    ed = numpy.zeros((3, 3))
    ed[:, 0] = xp.X_axis
    ed[:, 1] = xp.Y_axis
    ed[:, 2] = numpy.cross(xp.X_axis, xp.Y_axis)
    ed /= numpy.linalg.norm(ed, axis=0)

    orgx, orgy = xp.origin
    fs = xp.distance
    qx, qy = xp.qx, xp.qy
    org = -orgx * qx * ed[:, 0] - orgy * qy * ed[:, 1] + fs * ed[:, 2]
    wavelen = xp.wavelength
    s0 = xp.incident_beam / numpy.linalg.norm(xp.incident_beam) / wavelen

    print "qx,qy=", qx, qy
    print "s0=", s0
    print "lambda=", wavelen
    print "ORG=", org
    print "ED="
    print ed

    ofs_pdb = open("detector_pos.pdb", "w")
    ofs_pml = open("for_pymol.pml", "w")

    for iseg, seg in enumerate(xp.segments):
        print("Segment %d" % (iseg + 1))
        eds = numpy.zeros((3, 3))
        eds[:, 0] = seg.eds_x
        eds[:, 1] = seg.eds_y
        eds[:, 2] = numpy.cross(seg.eds_x, seg.eds_y)
        eds /= numpy.linalg.norm(eds, axis=0)
        edsl = numpy.dot(ed, eds)

        ix, iy = numpy.meshgrid(range(seg.x1 - 1, seg.x2),
                                range(seg.y1 - 1, seg.y2))
        tmp = numpy.zeros((ix.shape[0], ix.shape[1], 3))
        for i in range(3):
            tmp[:, :, i] = qx * (ix - seg.orgxs) * edsl[i, 0] + qy * (
                iy - seg.orgys) * edsl[i, 1] + seg.fs * edsl[i, 2] + org[i]

        write_atom(ofs_pdb, tmp, iseg)
        ofs_pml.write("bond resi %d and name C1, resi %d and name C2\n" %
                      (iseg, iseg))
        ofs_pml.write("bond resi %d and name C2, resi %d and name C4\n" %
                      (iseg, iseg))
        ofs_pml.write("bond resi %d and name C3, resi %d and name C4\n" %
                      (iseg, iseg))
        ofs_pml.write("bond resi %d and name C3, resi %d and name C1\n" %
                      (iseg, iseg))

        tmpdenom = numpy.linalg.norm(tmp, axis=2) * wavelen
        for i in range(3):
            tmp[:, :, i] /= tmpdenom

        s1 = tmp
        s = s1 - s0
        d_map[iy, ix] = 1. / numpy.linalg.norm(s, axis=2)
        """
        for ix in range(seg.x1-1, seg.x2):
            for iy in range(seg.y1-1, seg.y2):
                tmp = (qx*(ix-seg.orgxs)*edsl[0,0]+qy*(iy-seg.orgys)*edsl[0,1]+seg.fs*edsl[0,2]+orgx,
                       qx*(ix-seg.orgxs)*edsl[1,0]+qy*(iy-seg.orgys)*edsl[1,1]+seg.fs*edsl[1,2]+orgy,
                       qx*(ix-seg.orgxs)*edsl[2,0]+qy*(iy-seg.orgys)*edsl[2,1]+seg.fs*edsl[2,2]+fs)
                s1 = tmp/numpy.linalg.norm(tmp)/wavelen
                s = s1-s0
                d_map[iy,ix] = numpy.linalg.norm(s)
        """

    ofs_pml.write("pseudoatom org, pos=(0,0,0)\n")
    ofs_pml.write("pseudoatom s0, pos=(%f,%f,%f)\n" % tuple(s0 * 100))
    ofs_pml.write("as spheres, org s0\n")
    ofs_pml.write("color red, s0\n")
    ofs_pml.write("distance selection1=org, selection2=s0\n")
    ofs_pml.write("set sphere_scale, 10\n")

    data = (d_map * 1000).astype(numpy.int32)
    cbf.save_numpy_data_as_cbf(data.flatten(), data.shape[1], data.shape[0],
                               "d_map", "d_map_x1000.cbf")