#! python
# -*- coding: utf-8 -*-
"""Create the Pyramid-Logo."""


import pdb
import traceback
import sys
import numpy as np
from numpy import pi

import pyramid.magcreator as mc
import pyramid.projector as pj
import pyramid.phasemapper as pm
import pyramid.holoimage as hi
from pyramid.magdata import MagData
from pyramid.phasemap import PhaseMap


def create_logo():
    '''Calculate and display the Pyramid-Logo.
    Arguments:
        None
    Returns:
        None

    '''
    # Input parameters:
    res = 10.0  # in nm
    phi = -pi/2  # in rad
    density = 10
    dim = (1, 128, 128)
    # Create magnetic shape:
    mag_shape = np.zeros(dim)
    x = range(dim[2])
    y = range(dim[1])
    xx, yy = np.meshgrid(x, y)
    bottom = (yy >= 0.25*dim[1])
    left = (yy <= 0.75/0.5 * dim[1]/dim[2] * xx)
    right = np.fliplr(left)
    mag_shape[0, ...] = np.logical_and(np.logical_and(left, right), bottom)
    # Create magnetic data, project it, get the phase map and display the holography image:
    mag_data = MagData(res, mc.create_mag_dist(mag_shape, phi))
    projection = pj.simple_axis_projection(mag_data)
    phase_map = PhaseMap(res, pm.phase_mag_real(res, projection, 'slab'))
    hi.display(hi.holo_image(phase_map, density), 'PYRAMID - LOGO')


if __name__ == "__main__":
    try:
        create_logo()
    except:
        type, value, tb = sys.exc_info()
        traceback.print_exc()
        pdb.post_mortem(tb)