Skip to content
Snippets Groups Projects
Plot-1-ParameterFamily.py 7.38 KiB
Newer Older
  • Learn to ignore specific revisions
  • import numpy as np
    import matplotlib.pyplot as plt
    import sympy as sym
    import math
    import os
    import subprocess
    import fileinput
    import re
    import matlab.engine
    import sys
    from ClassifyMin import *
    from HelperFunctions import *
    # from CellScript import *
    from mpl_toolkits.mplot3d import Axes3D
    import matplotlib.cm as cm
    from vtk.util import numpy_support
    from pyevtk.hl import gridToVTK
    import time
    import matplotlib.ticker as ticker
    
    import matplotlib as mpl
    from matplotlib.ticker import MultipleLocator,FormatStrFormatter,MaxNLocator
    import pandas as pd
    
    # from matplotlib import rc
    # rc('text', usetex=True) # Use LaTeX font
    #
    # import seaborn as sns
    # sns.set(color_codes=True)
    
    
    def format_func(value, tick_number):
        # find number of multiples of pi/2
        # N = int(np.round(2 * value / np.pi))
        # if N == 0:
        #     return "0"
        # elif N == 1:
        #     return r"$\pi/2$"
        # elif N == -1:
        #     return r"$-\pi/2$"
        # elif N == 2:
        #     return r"$\pi$"
        # elif N % 2 > 0:
        #     return r"${0}\pi/2$".format(N)
        # else:
        #     return r"${0}\pi$".format(N // 2)
        ##find number of multiples of pi/2
        N = int(np.round(4 * value / np.pi))
        if N == 0:
            return "0"
        elif N == 1:
            return r"$\pi/4$"
        elif N == -1:
            return r"$-\pi/4$"
        elif N == 2:
            return r"$\pi/2$"
        elif N == -2:
            return r"$-\pi/2$"
        elif N % 2 > 0:
            return r"${0}\pi/2$".format(N)
        else:
            return r"${0}\pi$".format(N // 2)
    
    
    
    def find_nearest(array, value):
        array = np.asarray(array)
        idx = (np.abs(array - value)).argmin()
        return array[idx]
    
    
    def find_nearestIdx(array, value):
        array = np.asarray(array)
        idx = (np.abs(array - value)).argmin()
        return idx
    
    
    InputFile  = "/inputs/computeMuGamma.parset"
    OutputFile = "/outputs/outputMuGamma.txt"
    # --------- Run  from src folder:
    path_parent = os.path.dirname(os.getcwd())
    os.chdir(path_parent)
    path = os.getcwd()
    print(path)
    InputFilePath = os.getcwd()+InputFile
    OutputFilePath = os.getcwd()+OutputFile
    print("InputFilepath: ", InputFilePath)
    print("OutputFilepath: ", OutputFilePath)
    print("Path: ", path)
    
    print('---- Input parameters: -----')
    
    q1=1;
    q2=2;
    q12=1/2;
    q3=((4*q1*q2)**0.5-q12)/2;
    # H=[2*q1,q12+2*q3;q12+2*q3,2*q2];
    
    H = np.array([[2*q1, q12+2*q3], [q12+2*q3,2*q2] ])
    A = np.array([[q1,1/2*q12], [1/2*q12,q2] ])
    abar = np.array([q12+2*q3, 2*q2])
    abar = (1.0/math.sqrt((q12+2*q3)**2+(2*q2)**2))*abar
    
    print('abar:',abar)
    
    b = np.linalg.lstsq(A, abar)[0]
    print('b',b)
    
    
    # print('abar:',np.shape(abar))
    # print('np.transpose(abar):',np.shape(np.transpose(abar)))
    sstar = (1/(q1+q2))*abar.dot(A.dot(b))
    # sstar = (1/(q1+q2))*abar.dot(tmp)
    print('sstar', sstar)
    abarperp= np.array([abar[1],-abar[0]])
    print('abarperp:',abarperp)
    
    print('----------------------------')
    
    # ----------------------------------------------------------------
    
    N=1000;
    T = np.linspace(-sstar*(q12+2*q3)/(2*q2), sstar*(2*q2)/(q12+2*q3), num=N)
    print('T:', T)
    
    kappas = []
    alphas = []
    # G.append(float(s[0]))
    
    
    Klaus Böhnlein's avatar
    Klaus Böhnlein committed
    G_container = []
    abar_container = []
    
    
    
    for t in T :
    
        abar_current = sstar*abar+t*abarperp;
        # print('abar_current', abar_current)
        abar_current[abar_current < 1e-10] = 0
        # print('abar_current', abar_current)
        # G = np.array([[2*q1, q12+2*q3], [q12+2*q3,2*q2] ])
        G = [abar_current[0], abar_current[1] , (2*abar_current[0]*abar_current[1])**0.5 ]
    
    Klaus Böhnlein's avatar
    Klaus Böhnlein committed
        G_container.append(G)
        abar_container.append(abar_current)
    
        e = [(abar_current[0]/(abar_current[0]+abar_current[1]))**0.5, (abar_current[1]/(abar_current[0]+abar_current[1]))**0.5]
        kappa = abar_current[0]+abar_current[1]
        alpha = math.atan2(e[1], e[0])
        print('angle current:', alpha)
        kappas.append(kappa)
        alphas.append(alpha)
    
    
    
    
    Klaus Böhnlein's avatar
    Klaus Böhnlein committed
    
    # idx_1 = np.where(alphas == np.pi/4)
    idx_1 = np.where(np.round(alphas,3) == round(np.pi/3,3))
    idx_2 = np.where(np.round(alphas,3) == 0.0)
    idx_3 = np.where(np.round(alphas,3) == round(np.pi/4,3))
    
    # idx_3 = np.where(alphas == 0)
    
    print('Index idx_1:', idx_1)
    print('Index idx_2:', idx_2)
    print('Index idx_3:', idx_3)
    print('Index idx_1[0][0]:', idx_1[0][0])
    print('Index idx_2[0][0]:', idx_2[0][0])
    print('Index idx_3[0][0]:', idx_3[0][0])
    
    
    alphas = np.array(alphas)
    kappas = np.array(kappas)
    
    
    Klaus Böhnlein's avatar
    Klaus Böhnlein committed
    print('alphas[idx_1[0][0]]', alphas[idx_1[0][0]])
    print('kappas[idx_1[0][0]]', kappas[idx_1[0][0]])
    print('alphas[idx_2[0][0]]', alphas[idx_2[0][0]])
    print('kappas[idx_2[0][0]]', kappas[idx_2[0][0]])
    print('alphas[idx_3[0][0]]', alphas[idx_3[0][0]])
    print('kappas[idx_3[0][0]]', kappas[idx_3[0][0]])
    
    
    Klaus Böhnlein's avatar
    Klaus Böhnlein committed
    
    # print('kappas:',kappas)
    # print('alphas:',alphas)
    
    print('min alpha:', min(alphas))
    print('min kappa:', min(kappas))
    
    
    # mpl.rcParams['text.usetex'] = True
    # mpl.rcParams["font.family"] = "serif"
    # mpl.rcParams["font.size"] = "9"
    #
    # # plt.style.use("seaborn-darkgrid")
    # plt.style.use("seaborn-whitegrid")
    plt.style.use("seaborn")
    # plt.style.use("seaborn-paper")
    # plt.style.use('ggplot')
    # plt.rcParams["font.family"] = "Avenir"
    # plt.rcParams["font.size"] = 16
    
    # plt.style.use("seaborn-darkgrid")
    
    mpl.rcParams['text.usetex'] = True
    mpl.rcParams["font.family"] = "serif"
    
    mpl.rcParams["font.size"] = "10"
    # mpl.rcParams['xtick.labelsize'] = 16mpl.rcParams['xtick.major.size'] = 2.5
    # mpl.rcParams['xtick.bottom'] = True
    # mpl.rcParams['ticks'] = True
    mpl.rcParams['xtick.bottom'] = True
    mpl.rcParams['xtick.major.size'] = 3
    mpl.rcParams['xtick.minor.size'] = 1.5
    mpl.rcParams['xtick.major.width'] = 0.75
    mpl.rcParams['ytick.left'] = True
    mpl.rcParams['ytick.major.size'] = 3
    mpl.rcParams['ytick.minor.size'] = 1.5
    mpl.rcParams['ytick.major.width'] = 0.75
    
    mpl.rcParams.update({'font.size': 10})
    mpl.rcParams['axes.labelpad'] = 2.0
    
    
    
    width = 6.28 *0.5
    height = width / 1.618
    fig = plt.figure()
    # ax = plt.axes((0.15,0.21 ,0.75,0.75))
    ax = plt.axes((0.15,0.21 ,0.8,0.75))
    ax.tick_params(axis='x',which='major', direction='out',pad=5)
    ax.tick_params(axis='y',which='major', length=3, width=1, direction='out',pad=3)
    # ax.xaxis.set_major_locator(MultipleLocator(0.1))
    # ax.xaxis.set_minor_locator(MultipleLocator(0.05))
    # ax.xaxis.set_major_locator(plt.MultipleLocator(np.pi / 8))
    # ax.xaxis.set_minor_locator(plt.MultipleLocator(np.pi / 16))
    ax.xaxis.set_major_locator(plt.MultipleLocator(np.pi / 2))
    ax.xaxis.set_minor_locator(plt.MultipleLocator(np.pi / 4))
    ax.xaxis.set_major_formatter(plt.FuncFormatter(format_func))
    ax.grid(True,which='major',axis='both',alpha=0.3)
    
    
    
    
    ax.plot(alphas, kappas, 'royalblue', zorder=3, )
    ax.plot(-1.0*alphas, kappas, 'red', zorder=3, )
    
    
    
    Klaus Böhnlein's avatar
    Klaus Böhnlein committed
    ax.scatter(-1*alphas[idx_1[0][0]],kappas[idx_1[0][0]], marker='x', color='black',zorder=5, s=40)
    ax.scatter(alphas[idx_2[0][0]],kappas[idx_2[0][0]], marker='x', color='black' ,zorder=5, s=40)
    ax.scatter(alphas[idx_3[0][0]],kappas[idx_3[0][0]], marker='x', color='black', zorder=5, s=40)
    
    label = [r'$\mathcal S^+_{Q,B}$', '$T\mathcal S^+_{Q,B}$']
    
    
    # ax.annotate(label, xy=np.array([[np.pi/4,0.55],[np.pi/4,0.55]]))
    
    
    
    ax.annotate(r'$\mathcal S^+_{Q,B}$', np.array([np.pi/4,0.55]), color= 'royalblue', size=12)
    ax.annotate(r'$T\mathcal S^+_{Q,B}$', np.array([-np.pi/4-0.55,0.55]), color= 'red', size=12)
    
    #
    
    ax.set_xlabel(r"angle $\alpha$" ,fontsize=10, labelpad=2)
    ax.set_ylabel(r"curvature  $\kappa$", fontsize=10, labelpad=2)
    
    
    
    
    ax.set_xticks([-np.pi/2, -np.pi/4  ,0,  np.pi/4,  np.pi/2 ])
    # labels = ['$0$',r'$\pi/8$', r'$\pi/4$' ,r'$3\pi/8$' , r'$\pi/2$']
    # ax.set_yticklabels(labels)
    
    
    
    
    
    
    Klaus Böhnlein's avatar
    Klaus Böhnlein committed
    # ax.legend(loc='upper right')
    
    
    
    
    fig.set_size_inches(width, height)
    
    Klaus Böhnlein's avatar
    Klaus Böhnlein committed
    fig.savefig('Plot-1-ParameterFamily2.pdf')