Beispiel #1
0
def crystal_parameters():
    from dxtbx.model.experiment.experiment_list import ExperimentListFactory
    from dials.array_family import flex
    from scitbx import matrix

    experiments = ExperimentListFactory.from_json_file("experiments.json")
    reflections = flex.reflection_table.from_pickle("reflections.pickle")

    beam = experiments[0].beam
    detector = experiments[0].detector
    goniometer = experiments[0].goniometer
    scan = experiments[0].scan
    crystal = experiments[0].crystal

    from dials.algorithms.refinement.parameterisation.crystal_parameters import (
        CrystalUnitCellParameterisation, )

    parameters = CrystalUnitCellParameterisation(crystal)

    print("")
    print("Parameters")
    for param in parameters.get_params():
        print(param.name, param.value)

    print("")
    print("db/dp")
    for db_dp in parameters.get_ds_dp():
        print(db_dp.round(5))

    print("")
    print("B matrix")
    B = crystal.get_B().round(7)
    print(B)

    print(B.transpose() * B)

    # from rstbx.symmetry.constraints.parameter_reduction import symmetrize_reduce_enlarge

    # temp = symmetrize_reduce_enlarge(crystal.get_space_group())
    # temp.set_orientation(crystal.get_B())
    # independent = temp.forward_independent_parameters()
    # print independent

    # new_mm = temp.enlarge(independent)
    # temp.Bconverter.validate_and_setG(new_mm)
    # B = temp.Bconverter.back_as_orientation()
    # print matrix.sqr(B.reciprocal_matrix()).round(5)

    # from cctbx import sgtbx
    # from rstbx.symmetry.constraints import AGconvert

    # constraints = sgtbx.tensor_rank_2_constraints(space_group=crystal.get_space_group(), reciprocal_space=True)

    # params = constraints.all_params(independent_params=tuple(p.value for p in
    #                                                       parameters.get_params()))

    # from cctbx.crystal_orientation import crystal_orientation

    # converter = AGconvert()
    # converter.forward(crystal_orientation(crystal.get_B(), False))
    # converter.validate_and_setG(params)
    # orientation = converter.back_as_orientation()

    # print orientation
    # print ""
    print("SUM(p * dp/dp)")
    MAT = [
        p.value * db_dp
        for p, db_dp in zip(parameters.get_params(), parameters.get_ds_dp())
    ]
    COV = sum(MAT[1:], MAT[0])
    print(2 * COV.round(7))
    print((2 * COV - crystal.get_B()).round(7))