diff --git a/src/PhaseDiagram_Contour.py b/src/PhaseDiagram_Contour.py
new file mode 100644
index 0000000000000000000000000000000000000000..98138fc9fefe8f55ec3be1b808767a0e67cc54b6
--- /dev/null
+++ b/src/PhaseDiagram_Contour.py
@@ -0,0 +1,481 @@
+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
+from matplotlib.ticker import MultipleLocator,FormatStrFormatter,MaxNLocator
+
+import time
+# print(sys.executable)
+
+# --------------------------------------------------------------------
+# START :
+# INPUT (Parameters):   alpha, beta, theta, gamma, mu1, rho1
+#
+# -Option 1 : (Case lambda = 0 => q12 = 0)
+#   compute q1,q2,b1,b2 from Formula
+#       Option 1.1 :
+#           set mu_gamma = 'q1' or 'q2' (extreme regimes: gamma \in {0,\infty})
+#       Option 1.2 :
+#           compute mu_gamma with 'Compute_MuGamma' (2D problem much faster then Cell-Problem)
+# -Option 2 :
+#   compute Q_hom & B_eff by running 'Cell-Problem'
+#
+# -> CLASSIFY ...
+#
+# OUTPUT: Minimizer G, angle , type, curvature
+# -----------------------------------------------------------------------
+#
+#
+# def GetMuGamma(beta,theta,gamma,mu1,rho1, InputFilePath = os.path.dirname(os.getcwd()) +"/inputs/computeMuGamma.parset",
+#                 OutputFilePath = os.path.dirname(os.getcwd()) + "/outputs/outputMuGamma.txt" ):
+#     # ------------------------------------ get mu_gamma ------------------------------
+#     # ---Scenario 1.1: extreme regimes
+#     if gamma == '0':
+#         print('extreme regime: gamma = 0')
+#         mu_gamma = (1.0/6.0)*arithmeticMean(mu1, beta, theta) # = q2
+#         print("mu_gamma:", mu_gamma)
+#     elif gamma == 'infinity':
+#         print('extreme regime: gamma = infinity')
+#         mu_gamma = (1.0/6.0)*harmonicMean(mu1, beta, theta)   # = q1
+#         print("mu_gamma:", mu_gamma)
+#     else:
+#         # --- Scenario 1.2:  compute mu_gamma with 'Compute_MuGamma' (much faster than running full Cell-Problem)
+#         # print("Run computeMuGamma for Gamma = ", gamma)
+#         with open(InputFilePath, 'r') as file:
+#             filedata = file.read()
+#         filedata = re.sub('(?m)^gamma=.*','gamma='+str(gamma),filedata)
+#         # filedata = re.sub('(?m)^alpha=.*','alpha='+str(alpha),filedata)
+#         filedata = re.sub('(?m)^beta=.*','beta='+str(beta),filedata)
+#         filedata = re.sub('(?m)^theta=.*','theta='+str(theta),filedata)
+#         filedata = re.sub('(?m)^mu1=.*','mu1='+str(mu1),filedata)
+#         filedata = re.sub('(?m)^rho1=.*','rho1='+str(rho1),filedata)
+#         f = open(InputFilePath,'w')
+#         f.write(filedata)
+#         f.close()
+#         # --- Run Cell-Problem
+#
+#         # Check Time
+#         # t = time.time()
+#         # subprocess.run(['./build-cmake/src/Cell-Problem', './inputs/cellsolver.parset'],
+#         #                                      capture_output=True, text=True)
+#         # --- Run Cell-Problem_muGama   -> faster
+#         # subprocess.run(['./build-cmake/src/Cell-Problem_muGamma', './inputs/cellsolver.parset'],
+#         #                                              capture_output=True, text=True)
+#         # --- Run Compute_muGamma (2D Problem much much faster)
+#
+#         subprocess.run(['./build-cmake/src/Compute_MuGamma', './inputs/computeMuGamma.parset'],
+#                                                              capture_output=True, text=True)
+#         # print('elapsed time:', time.time() - t)
+#
+#         #Extract mu_gamma from Output-File                                           TODO: GENERALIZED THIS FOR QUANTITIES OF INTEREST
+#         with open(OutputFilePath, 'r') as file:
+#             output = file.read()
+#         tmp = re.search(r'(?m)^mu_gamma=.*',output).group()                           # Not necessary for Intention of Program t output Minimizer etc.....
+#         s = re.findall(r"[-+]?\d*\.\d+|\d+", tmp)
+#         mu_gamma = float(s[0])
+#         # print("mu_gamma:", mu_gammaValue)
+#     # --------------------------------------------------------------------------------------
+#     return mu_gamma
+#
+
+
+
+# ----------- SETUP PATHS
+# InputFile  = "/inputs/cellsolver.parset"
+# OutputFile = "/outputs/output.txt"
+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)
+
+
+# -------------------------- Input Parameters --------------------
+# mu1 = 10.0               # TODO : here must be the same values as in the Parset for computeMuGamma
+mu1 = 1.0
+rho1 = 1.0
+alpha = 2.0
+beta = 2.0
+# beta = 5.0
+theta = 1.0/4.0
+#set gamma either to 1. '0' 2. 'infinity' or 3. a numerical positive value
+gamma = '0'
+# gamma = 'infinity'
+# gamma = 0.5
+# gamma = 0.25
+# gamma = 1.0
+
+# gamma = 5.0
+
+#added
+# lambda1 = 10.0
+lambda1 = 0.0
+
+#Test:
+# rho1 = -1.0
+
+
+
+print('---- Input parameters: -----')
+print('mu1: ', mu1)
+print('rho1: ', rho1)
+print('alpha: ', alpha)
+print('beta: ', beta)
+print('theta: ', theta)
+print('gamma:', gamma)
+
+print('lambda1: ', lambda1)
+print('----------------------------')
+# ----------------------------------------------------------------
+
+#
+# gamma_min = 0.5
+# gamma_max = 1.0
+#
+# # gamma_min = 1
+# # gamma_max = 1
+# Gamma_Values = np.linspace(gamma_min, gamma_max, num=3)
+# # #
+# # # Gamma_Values = np.linspace(gamma_min, gamma_max, num=13)    # TODO variable Input Parameters...alpha,beta...
+# print('(Input) Gamma_Values:', Gamma_Values)
+
+print('type of gamma:', type(gamma))
+# # #
+# Gamma_Values = ['0', 'infinity']
+Gamma_Values = ['infinity']
+Gamma_Values = ['0']
+print('(Input) Gamma_Values:', Gamma_Values)
+
+for gamma in Gamma_Values:
+
+    print('Run for gamma = ', gamma)
+    print('type of gamma:', type(gamma))
+        # muGamma = GetMuGamma(beta,theta,gamma,mu1,rho1,InputFilePath)
+        # # muGamma = GetMuGamma(beta,theta,gamma,mu1,rho1)
+        # print('Test MuGamma:', muGamma)
+
+        # ------- Options --------
+        # print_Cases = True
+        # print_Output = True
+
+                            #TODO
+    # generalCase = True #Read Output from Cell-Problem instead of using Lemma1.4 (special case)
+    generalCase = False
+
+    # make_3D_plot = True
+    # make_3D_PhaseDiagram = True
+    make_2D_plot = False
+    make_2D_PhaseDiagram = False
+    make_3D_plot = False
+    make_3D_PhaseDiagram = False
+    make_2D_plot = True
+    make_2D_PhaseDiagram = True
+    #
+
+    # --- Define effective quantities: q1, q2 , q3 = mu_gamma, q12 ---
+    # q1 = harmonicMean(mu1, beta, theta)
+    # q2 = arithmeticMean(mu1, beta, theta)
+    # --- Set q12
+    # q12 = 0.0  # (analytical example)              # TEST / TODO read from Cell-Output
+
+
+
+
+
+    # b1 = prestrain_b1(rho1, beta, alpha, theta)
+    # b2 = prestrain_b2(rho1, beta, alpha, theta)
+    #
+    # print('---- Input parameters: -----')
+    # print('mu1: ', mu1)
+    # print('rho1: ', rho1)
+    # print('alpha: ', alpha)
+    # print('beta: ', beta)
+    # print('theta: ', theta)
+    # print("q1: ", q1)
+    # print("q2: ", q2)
+    # print("mu_gamma: ", mu_gamma)
+    # print("q12: ", q12)
+    # print("b1: ", b1)
+    # print("b2: ", b2)
+    # print('----------------------------')
+    # print("machine epsilon", sys.float_info.epsilon)
+
+    # G, angle, type, kappa = classifyMin(q1, q2, mu_gamma, q12,  b1, b2, print_Cases, print_Output)
+    # Test = f(1,2 ,q1,q2,mu_gamma,q12,b1,b2)
+    # print("Test", Test)
+
+    # ---------------------- MAKE PLOT / Write to VTK------------------------------------------------------------------------------
+
+    # SamplePoints_3D = 10 # Number of sample points in each direction
+    # SamplePoints_2D = 10 # Number of sample points in each direction
+    SamplePoints_3D = 300 # Number of sample points in each direction
+    # SamplePoints_3D = 150 # Number of sample points in each direction
+    # SamplePoints_3D = 100 # Number of sample points in each direction
+    # SamplePoints_3D = 200 # Number of sample points in each direction
+    # SamplePoints_3D = 400 # Number of sample points in each direction
+    # SamplePoints_2D = 7500 # Number of sample points in each direction
+    # SamplePoints_2D = 4000 # 4000 # Number of sample points in each direction
+    # SamplePoints_2D = 400 # 4000  # Number of sample points in each direction
+    # SamplePoints_2D = 500 # 4000    # Number of sample points in each direction
+    # SamplePoints_2D = 100 # 4000  # Number of sample points in each direction
+    # SamplePoints_2D = 2000 # 4000 # Number of sample points in each direction
+    SamplePoints_2D = 1000   # 4000 # Number of sample points in each direction
+
+    if make_3D_PhaseDiagram:
+        alphas_ = np.linspace(-20, 20, SamplePoints_3D)
+        # alphas_ = np.linspace(-10, 10, SamplePoints_3D)
+
+        # betas_  = np.linspace(0.01,40.01,SamplePoints_3D) # Full Range
+        # betas_  = np.linspace(0.01,20.01,SamplePoints_3D) # FULL Range
+
+
+
+        # betas_  = np.linspace(0.01,0.99,SamplePoints_3D)  # weird part
+        betas_  = np.linspace(1.01,40.01,SamplePoints_3D)     #TEST !!!!!  For Beta <1 weird tings happen...
+        thetas_ = np.linspace(0.01,0.99,SamplePoints_3D)
+
+
+        # TEST
+        # alphas_ = np.linspace(-2, 2, SamplePoints_3D)
+        # betas_  = np.linspace(1.01,10.01,SamplePoints_3D)
+        # print('betas:', betas_)
+
+        # TEST :
+        # alphas_ = np.linspace(-40, 40, SamplePoints_3D)
+        # betas_  = np.linspace(0.01,80.01,SamplePoints_3D) # Full Range
+
+        # print('type of alphas', type(alphas_))
+        # print('Test:', type(np.array([mu_gamma])) )
+        alphas, betas, thetas = np.meshgrid(alphas_, betas_, thetas_, indexing='ij')
+        classifyMin_anaVec = np.vectorize(classifyMin_ana)
+
+        # Get MuGamma values ...
+        GetMuGammaVec = np.vectorize(GetMuGamma)
+        muGammas = GetMuGammaVec(betas, thetas, gamma, mu1, rho1)
+        # Classify Minimizers....
+        G, angles, Types, curvature = classifyMin_anaVec(alphas, betas, thetas, muGammas,  mu1, rho1)   # Sets q12 to zero!!!
+
+        # G, angles, Types, curvature = classifyMin_anaVec(alphas, betas, thetas, muGammas,  mu1, rho1, True, True)
+        # print('size of G:', G.shape)
+        # print('G:', G)
+
+        # Option to print angles
+        # print('angles:', angles)
+
+
+        # Out = classifyMin_anaVec(alphas,betas,thetas)
+        # T = Out[2]
+        # --- Write to VTK
+
+        GammaString = str(gamma)
+        VTKOutputName = "outputs/PhaseDiagram3D" + "Gamma" + GammaString
+        gridToVTK(VTKOutputName , alphas, betas, thetas, pointData = {'Type': Types, 'angles': angles, 'curvature': curvature} )
+        print('Written to VTK-File:', VTKOutputName )
+
+    if make_2D_PhaseDiagram:
+        # alphas_ = np.linspace(-20, 20, SamplePoints_2D)
+        # alphas_ = np.linspace(0, 1, SamplePoints_2D)
+        thetas_ = np.linspace(0.01,0.99,SamplePoints_2D)
+        alphas_ = np.linspace(-5, 5, SamplePoints_2D)
+        # alphas_ = np.linspace(-5, 15, SamplePoints_2D)
+        # thetas_ = np.linspace(0.05,0.25,SamplePoints_2D)
+
+
+        # good range:
+        # alphas_ = np.linspace(9, 10, SamplePoints_2D)
+        # thetas_ = np.linspace(0.075,0.14,SamplePoints_2D)
+
+        # range used:
+        # alphas_ = np.linspace(8, 10, SamplePoints_2D)
+        # thetas_ = np.linspace(0.05,0.16,SamplePoints_2D)
+
+            # alphas_ = np.linspace(8, 12, SamplePoints_2D)
+            # thetas_ = np.linspace(0.05,0.2,SamplePoints_2D)
+        # betas_  = np.linspace(0.01,40.01,1)
+        #fix to one value:
+        betas_ = 2.0;
+        # betas_ = 10.0;
+        # betas_ = 5.0;
+        # betas_ = 0.5;
+
+
+        #intermediate Values
+        # alphas_ = np.linspace(-2, 1, SamplePoints_2D)
+        # thetas_ = np.linspace(0.4,0.6,SamplePoints_2D)
+        # betas_ = 10.0;
+
+        # TEST
+        # alphas_ = np.linspace(-8, 8, SamplePoints_2D)
+        # thetas_ = np.linspace(0.01,0.99,SamplePoints_2D)
+        # betas_ = 1.0; #TEST Problem: disvison by zero if alpha = 9, theta = 0.1 !
+        # betas_ = 0.9;
+        # betas_ = 0.5;  #TEST!!!
+        # alphas, betas, thetas = np.meshgrid(alphas_, betas_, thetas_, indexing='ij')
+        betas = betas_
+        alphas, thetas = np.meshgrid(alphas_, thetas_, indexing='ij')
+
+        if generalCase:
+            classifyMin_matVec = np.vectorize(classifyMin_mat)
+            GetCellOutputVec = np.vectorize(GetCellOutput, otypes=[np.ndarray, np.ndarray])
+            Q, B = GetCellOutputVec(alphas,betas,thetas,gamma,mu1,rho1,lambda1, InputFilePath ,OutputFilePath )
+
+
+            # print('type of Q:', type(Q))
+            # print('Q:', Q)
+            G, angles, Types, curvature = classifyMin_matVec(Q,B)
+
+        else:
+            classifyMin_anaVec = np.vectorize(classifyMin_ana)
+            GetMuGammaVec = np.vectorize(GetMuGamma)
+            # muGammas = GetMuGammaVec(betas,thetas,gamma,mu1,rho1,InputFilePath ,OutputFilePath )
+            # G, angles, Types, curvature = classifyMin_anaVec(alphas,betas,thetas, muGammas,  mu1, rho1)    # Sets q12 to zero!!!
+            muGammas = GetMuGammaVec(betas,thetas,gamma,mu1,rho1,InputFilePath ,OutputFilePath )
+            G, angles, Types, curvature = classifyMin_anaVec(alphas,betas,thetas, muGammas,  mu1, rho1)    # Sets q12 to zero!!!
+
+            # print('size of G:', G.shape)
+            # print('G:', G)
+            # print('Types:', Types)
+            # Out = classifyMin_anaVec(alphas,betas,thetas)
+            # T = Out[2]
+            # --- Write to VTK
+            # VTKOutputName = + path + "./PhaseDiagram2DNEW"
+
+        print('angles:',angles)
+        # GammaString = str(gamma)
+        # VTKOutputName = "outputs/PhaseDiagram2D" + "Gamma_" + GammaString
+        # gridToVTK(VTKOutputName , alphas, betas, thetas, pointData = {'Type': Types, 'angles': angles, 'curvature': curvature} )
+        # print('Written to VTK-File:', VTKOutputName )
+
+
+    # --- Make 3D Scatter plot
+    if(make_3D_plot or make_2D_plot):
+        # fig = plt.figure()
+        # ax = fig.add_subplot(111, projection='3d')
+        # colors = cm.plasma(Types)
+        colors = cm.coolwarm(angles)
+
+
+        width = 6.28
+        height = width / 1.618
+        # height = width / 2.5
+        fig, ax = plt.subplots()
+        # ax = plt.axes((0.15,0.21 ,0.8,0.75))
+
+
+
+
+        # if make_2D_plot: pnt3d=ax.scatter(alphas,thetas,c=Types.flat)
+        # if make_3D_plot: pnt3d=ax.scatter(alphas,betas,thetas,c=Types.flat)
+        #
+        # if make_2D_plot: pnt3d=ax.scatter(alphas,thetas,c=angles.flat)
+        # if make_3D_plot: pnt3d=ax.scatter(alphas,betas,thetas,c=angles.flat)
+
+
+        # pnt=ax.scatter(alphas,thetas,c=angles,cmap='coolwarm')
+        # # ax.colorbar()
+        # CS = ax.contourf(alphas, thetas, angles,6, cmap=plt.cm.coolwarm, linestyle=dashed)
+        # # CS = ax.contour(alphas, thetas, angles,6, colors='k')
+        # ax.clabel(CS, inline=True, fontsize=7.5)
+        # # ax.set_title('Simplest default with labels')
+
+        if gamma =='0':
+            CS = ax.contourf(alphas, thetas, angles, 10, cmap=plt.cm.coolwarm)
+            # CS = ax.contourf(alphas, thetas, angles, 10, cmap='RdBu')
+            CS2 = ax.contour(CS, levels=CS.levels[::2], colors='black',inline=True, linewidths=(0.5,))
+            # ax.clabel(CS2, inline=True, fontsize=9, colors='black')
+            # ax.clabel(CS2, inline=True, inline_spacing=3, rightside_up=True, colors='k', fontsize=8)
+            manual_locations = [
+                (-0.5, 0.3), (-0.7, 0.4), (-0.8, 0.5), (-0.9, 0.6), (-1,0.7)]
+            # ax.clabel(CS2, inline=True, fontsize=6, colors='black', manual=manual_locations)
+            # ax.clabel(CS2, inline=True, fontsize=6, colors='black')
+            # ax.clabel(CS2, CS2.levels, inline=True, fontsize=10)
+            # ax.clabel(CS,  fontsize=5, colors='black')
+            # cbar = fig.colorbar(CS,label=r'angle $\alpha$', ticks=[0, np.pi/8, np.pi/4, 3*np.pi/8 , np.pi/2 ])
+            cbar = fig.colorbar(CS, ticks=[0, np.pi/2 ])
+            cbar.ax.set_yticklabels(['$0$', r'$\pi/2$'])
+            cbar.ax.set_title(r'angle $\alpha$')
+
+        if gamma == 'infinity':
+            CS = ax.contourf(alphas, thetas, angles, 10, cmap=plt.cm.coolwarm)
+            # CS = ax.contourf(alphas, thetas, angles, 10, cmap='RdBu')
+            CS2 = ax.contour(CS, levels=CS.levels[::2], colors='black',inline=True, linewidths=(0.5,))
+            # ax.clabel(CS2, inline=True, fontsize=9, colors='black')
+            # ax.clabel(CS2, inline=True, inline_spacing=3, rightside_up=True, colors='k', fontsize=8)
+            manual_locations = [
+                (-0.5, 0.3), (-0.7, 0.4), (-0.8, 0.5), (-0.9, 0.6), (-1,0.7)]
+            ax.clabel(CS2, inline=True, fontsize=6, colors='black', manual=manual_locations)
+
+            # ax.clabel(CS2, CS2.levels, inline=True, fontsize=10)
+            # ax.clabel(CS,  fontsize=5, colors='black')
+            # cbar = fig.colorbar(CS,label=r'angle $\alpha$', ticks=[0, np.pi/8, np.pi/4, 3*np.pi/8 , np.pi/2 ])
+            cbar = fig.colorbar(CS, ticks=[0, np.pi/8, np.pi/4, 3*np.pi/8 , np.pi/2 ])
+            cbar.ax.set_yticklabels(['$0$',r'$\pi/8$', r'$\pi/4$' ,r'$3\pi/8$' , r'$\pi/2$'])
+            cbar.ax.set_title(r'angle $\alpha$')
+        # cbar=plt.colorbar(pnt3d)
+        # cbar.set_label("Values (units)")
+        # plt.axvline(x = 8, color = 'b', linestyle = ':', label='$q_1$')
+        # plt.axhline(y = 0.083333333, color = 'b', linestyle = ':', label='$q_1$')
+
+        ax.set_xlabel(r'$\theta_\rho$',fontsize=10)
+        # ax.xaxis.set_minor_locator(MultipleLocator(0.5))
+        ax.yaxis.set_major_locator(MultipleLocator(0.1))
+        ax.xaxis.set_major_locator(MultipleLocator(1))
+        # ax.set_ylabel('beta')
+        ax.set_ylabel(r'$\theta$   ',fontsize=10, rotation=0)
+        # if make_3D_plot: ax.set_zlabel('theta')
+        plt.subplots_adjust(bottom=0.2)
+        plt.grid( linestyle = '--', linewidth = 0.25)
+
+        fig.set_size_inches(width, height)
+        outputName = 'Plot-Contour_Gamma' +str(gamma) + '.pdf'
+        fig.savefig(outputName)
+        # fig.savefig('Plot-Contour.pdf')
+        plt.show()
+        # plt.savefig('common_labels.png', dpi=300)
+        # print('T:', T)
+        # print('Type 1 occured here:', np.where(T == 1))
+        # print('Type 2 occured here:', np.where(T == 2))
+
+
+        # print(alphas_)
+        # print(betas_)
+
+
+
+
+
+# ALTERNATIVE
+# colors = ("red", "green", "blue")
+# groups = ("Type 1", "Type2", "Type3")
+#
+# # Create plot
+# fig = plt.figure()
+# ax = fig.add_subplot(1, 1, 1)
+#
+# for data, color, group in zip(Types, colors, groups):
+#     # x, y = data
+#     ax.scatter(alphas, thetas, alpha=0.8, c=color, edgecolors='none', label=group)
+#
+# plt.title('Matplot scatter plot')
+# plt.legend(loc=2)
+# plt.show()
diff --git a/src/PhaseDiagram_ContourSubPlots.py b/src/PhaseDiagram_ContourSubPlots.py
new file mode 100644
index 0000000000000000000000000000000000000000..59a1a421f3788f05ee57bbd32e168c58866e4d3b
--- /dev/null
+++ b/src/PhaseDiagram_ContourSubPlots.py
@@ -0,0 +1,529 @@
+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
+from matplotlib.ticker import MultipleLocator,FormatStrFormatter,MaxNLocator
+
+from mpl_toolkits.axes_grid1.inset_locator import inset_axes
+
+import time
+# print(sys.executable)
+
+# --------------------------------------------------------------------
+# START :
+# INPUT (Parameters):   alpha, beta, theta, gamma, mu1, rho1
+#
+# -Option 1 : (Case lambda = 0 => q12 = 0)
+#   compute q1,q2,b1,b2 from Formula
+#       Option 1.1 :
+#           set mu_gamma = 'q1' or 'q2' (extreme regimes: gamma \in {0,\infty})
+#       Option 1.2 :
+#           compute mu_gamma with 'Compute_MuGamma' (2D problem much faster then Cell-Problem)
+# -Option 2 :
+#   compute Q_hom & B_eff by running 'Cell-Problem'
+#
+# -> CLASSIFY ...
+#
+# OUTPUT: Minimizer G, angle , type, curvature
+# -----------------------------------------------------------------------
+#
+#
+# def GetMuGamma(beta,theta,gamma,mu1,rho1, InputFilePath = os.path.dirname(os.getcwd()) +"/inputs/computeMuGamma.parset",
+#                 OutputFilePath = os.path.dirname(os.getcwd()) + "/outputs/outputMuGamma.txt" ):
+#     # ------------------------------------ get mu_gamma ------------------------------
+#     # ---Scenario 1.1: extreme regimes
+#     if gamma == '0':
+#         print('extreme regime: gamma = 0')
+#         mu_gamma = (1.0/6.0)*arithmeticMean(mu1, beta, theta) # = q2
+#         print("mu_gamma:", mu_gamma)
+#     elif gamma == 'infinity':
+#         print('extreme regime: gamma = infinity')
+#         mu_gamma = (1.0/6.0)*harmonicMean(mu1, beta, theta)   # = q1
+#         print("mu_gamma:", mu_gamma)
+#     else:
+#         # --- Scenario 1.2:  compute mu_gamma with 'Compute_MuGamma' (much faster than running full Cell-Problem)
+#         # print("Run computeMuGamma for Gamma = ", gamma)
+#         with open(InputFilePath, 'r') as file:
+#             filedata = file.read()
+#         filedata = re.sub('(?m)^gamma=.*','gamma='+str(gamma),filedata)
+#         # filedata = re.sub('(?m)^alpha=.*','alpha='+str(alpha),filedata)
+#         filedata = re.sub('(?m)^beta=.*','beta='+str(beta),filedata)
+#         filedata = re.sub('(?m)^theta=.*','theta='+str(theta),filedata)
+#         filedata = re.sub('(?m)^mu1=.*','mu1='+str(mu1),filedata)
+#         filedata = re.sub('(?m)^rho1=.*','rho1='+str(rho1),filedata)
+#         f = open(InputFilePath,'w')
+#         f.write(filedata)
+#         f.close()
+#         # --- Run Cell-Problem
+#
+#         # Check Time
+#         # t = time.time()
+#         # subprocess.run(['./build-cmake/src/Cell-Problem', './inputs/cellsolver.parset'],
+#         #                                      capture_output=True, text=True)
+#         # --- Run Cell-Problem_muGama   -> faster
+#         # subprocess.run(['./build-cmake/src/Cell-Problem_muGamma', './inputs/cellsolver.parset'],
+#         #                                              capture_output=True, text=True)
+#         # --- Run Compute_muGamma (2D Problem much much faster)
+#
+#         subprocess.run(['./build-cmake/src/Compute_MuGamma', './inputs/computeMuGamma.parset'],
+#                                                              capture_output=True, text=True)
+#         # print('elapsed time:', time.time() - t)
+#
+#         #Extract mu_gamma from Output-File                                           TODO: GENERALIZED THIS FOR QUANTITIES OF INTEREST
+#         with open(OutputFilePath, 'r') as file:
+#             output = file.read()
+#         tmp = re.search(r'(?m)^mu_gamma=.*',output).group()                           # Not necessary for Intention of Program t output Minimizer etc.....
+#         s = re.findall(r"[-+]?\d*\.\d+|\d+", tmp)
+#         mu_gamma = float(s[0])
+#         # print("mu_gamma:", mu_gammaValue)
+#     # --------------------------------------------------------------------------------------
+#     return mu_gamma
+#
+
+
+
+# ----------- SETUP PATHS
+# InputFile  = "/inputs/cellsolver.parset"
+# OutputFile = "/outputs/output.txt"
+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)
+
+
+# -------------------------- Input Parameters --------------------
+# mu1 = 10.0               # TODO : here must be the same values as in the Parset for computeMuGamma
+mu1 = 1.0
+rho1 = 1.0
+alpha = 2.0
+beta = 2.0
+# beta = 5.0
+theta = 1.0/4.0
+#set gamma either to 1. '0' 2. 'infinity' or 3. a numerical positive value
+gamma = '0'
+# gamma = 'infinity'
+# gamma = 0.5
+# gamma = 0.25
+# gamma = 1.0
+
+# gamma = 5.0
+
+#added
+# lambda1 = 10.0
+lambda1 = 0.0
+
+#Test:
+# rho1 = -1.0
+
+
+
+print('---- Input parameters: -----')
+print('mu1: ', mu1)
+print('rho1: ', rho1)
+print('alpha: ', alpha)
+print('beta: ', beta)
+print('theta: ', theta)
+print('gamma:', gamma)
+
+print('lambda1: ', lambda1)
+print('----------------------------')
+# ----------------------------------------------------------------
+
+#
+# gamma_min = 0.5
+# gamma_max = 1.0
+#
+# # gamma_min = 1
+# # gamma_max = 1
+# Gamma_Values = np.linspace(gamma_min, gamma_max, num=3)
+# # #
+# # # Gamma_Values = np.linspace(gamma_min, gamma_max, num=13)    # TODO variable Input Parameters...alpha,beta...
+# print('(Input) Gamma_Values:', Gamma_Values)
+
+print('type of gamma:', type(gamma))
+# # #
+Gamma_Values = ['0', 'infinity']
+# Gamma_Values = ['infinity']
+# Gamma_Values = ['0']
+print('(Input) Gamma_Values:', Gamma_Values)
+
+for gamma in Gamma_Values:
+
+    print('Run for gamma = ', gamma)
+    print('type of gamma:', type(gamma))
+        # muGamma = GetMuGamma(beta,theta,gamma,mu1,rho1,InputFilePath)
+        # # muGamma = GetMuGamma(beta,theta,gamma,mu1,rho1)
+        # print('Test MuGamma:', muGamma)
+
+        # ------- Options --------
+        # print_Cases = True
+        # print_Output = True
+
+                            #TODO
+    # generalCase = True #Read Output from Cell-Problem instead of using Lemma1.4 (special case)
+    generalCase = False
+
+    # make_3D_plot = True
+    # make_3D_PhaseDiagram = True
+    make_2D_plot = False
+    make_2D_PhaseDiagram = False
+    make_3D_plot = False
+    make_3D_PhaseDiagram = False
+    make_2D_plot = True
+    make_2D_PhaseDiagram = True
+    #
+
+    # --- Define effective quantities: q1, q2 , q3 = mu_gamma, q12 ---
+    # q1 = harmonicMean(mu1, beta, theta)
+    # q2 = arithmeticMean(mu1, beta, theta)
+    # --- Set q12
+    # q12 = 0.0  # (analytical example)              # TEST / TODO read from Cell-Output
+
+
+
+
+
+    # b1 = prestrain_b1(rho1, beta, alpha, theta)
+    # b2 = prestrain_b2(rho1, beta, alpha, theta)
+    #
+    # print('---- Input parameters: -----')
+    # print('mu1: ', mu1)
+    # print('rho1: ', rho1)
+    # print('alpha: ', alpha)
+    # print('beta: ', beta)
+    # print('theta: ', theta)
+    # print("q1: ", q1)
+    # print("q2: ", q2)
+    # print("mu_gamma: ", mu_gamma)
+    # print("q12: ", q12)
+    # print("b1: ", b1)
+    # print("b2: ", b2)
+    # print('----------------------------')
+    # print("machine epsilon", sys.float_info.epsilon)
+
+    # G, angle, type, kappa = classifyMin(q1, q2, mu_gamma, q12,  b1, b2, print_Cases, print_Output)
+    # Test = f(1,2 ,q1,q2,mu_gamma,q12,b1,b2)
+    # print("Test", Test)
+
+    # ---------------------- MAKE PLOT / Write to VTK------------------------------------------------------------------------------
+
+    # SamplePoints_3D = 10 # Number of sample points in each direction
+    # SamplePoints_2D = 10 # Number of sample points in each direction
+    SamplePoints_3D = 300 # Number of sample points in each direction
+    # SamplePoints_3D = 150 # Number of sample points in each direction
+    # SamplePoints_3D = 100 # Number of sample points in each direction
+    # SamplePoints_3D = 200 # Number of sample points in each direction
+    # SamplePoints_3D = 400 # Number of sample points in each direction
+    # SamplePoints_2D = 7500 # Number of sample points in each direction
+    # SamplePoints_2D = 4000 # 4000 # Number of sample points in each direction
+    # SamplePoints_2D = 400 # 4000  # Number of sample points in each direction
+    # SamplePoints_2D = 500 # 4000    # Number of sample points in each direction
+    # SamplePoints_2D = 100 # 4000  # Number of sample points in each direction
+    SamplePoints_2D = 2000 # 4000 # Number of sample points in each direction
+    # SamplePoints_2D = 1000   # 4000 # Number of sample points in each direction
+
+    if make_3D_PhaseDiagram:
+        alphas_ = np.linspace(-20, 20, SamplePoints_3D)
+        # alphas_ = np.linspace(-10, 10, SamplePoints_3D)
+
+        # betas_  = np.linspace(0.01,40.01,SamplePoints_3D) # Full Range
+        # betas_  = np.linspace(0.01,20.01,SamplePoints_3D) # FULL Range
+
+
+
+        # betas_  = np.linspace(0.01,0.99,SamplePoints_3D)  # weird part
+        betas_  = np.linspace(1.01,40.01,SamplePoints_3D)     #TEST !!!!!  For Beta <1 weird tings happen...
+        thetas_ = np.linspace(0.01,0.99,SamplePoints_3D)
+
+
+        # TEST
+        # alphas_ = np.linspace(-2, 2, SamplePoints_3D)
+        # betas_  = np.linspace(1.01,10.01,SamplePoints_3D)
+        # print('betas:', betas_)
+
+        # TEST :
+        # alphas_ = np.linspace(-40, 40, SamplePoints_3D)
+        # betas_  = np.linspace(0.01,80.01,SamplePoints_3D) # Full Range
+
+        # print('type of alphas', type(alphas_))
+        # print('Test:', type(np.array([mu_gamma])) )
+        alphas, betas, thetas = np.meshgrid(alphas_, betas_, thetas_, indexing='ij')
+        classifyMin_anaVec = np.vectorize(classifyMin_ana)
+
+        # Get MuGamma values ...
+        GetMuGammaVec = np.vectorize(GetMuGamma)
+        muGammas = GetMuGammaVec(betas, thetas, gamma, mu1, rho1)
+        # Classify Minimizers....
+        G, angles, Types, curvature = classifyMin_anaVec(alphas, betas, thetas, muGammas,  mu1, rho1)   # Sets q12 to zero!!!
+
+        # G, angles, Types, curvature = classifyMin_anaVec(alphas, betas, thetas, muGammas,  mu1, rho1, True, True)
+        # print('size of G:', G.shape)
+        # print('G:', G)
+
+        # Option to print angles
+        # print('angles:', angles)
+
+
+        # Out = classifyMin_anaVec(alphas,betas,thetas)
+        # T = Out[2]
+        # --- Write to VTK
+
+        GammaString = str(gamma)
+        VTKOutputName = "outputs/PhaseDiagram3D" + "Gamma" + GammaString
+        gridToVTK(VTKOutputName , alphas, betas, thetas, pointData = {'Type': Types, 'angles': angles, 'curvature': curvature} )
+        print('Written to VTK-File:', VTKOutputName )
+
+    if make_2D_PhaseDiagram:
+        # alphas_ = np.linspace(-20, 20, SamplePoints_2D)
+        # alphas_ = np.linspace(0, 1, SamplePoints_2D)
+        thetas_ = np.linspace(0.01,0.99,SamplePoints_2D)
+        alphas_ = np.linspace(-5, 5, SamplePoints_2D)
+        # alphas_ = np.linspace(-5, 15, SamplePoints_2D)
+        # thetas_ = np.linspace(0.05,0.25,SamplePoints_2D)
+
+
+        # good range:
+        # alphas_ = np.linspace(9, 10, SamplePoints_2D)
+        # thetas_ = np.linspace(0.075,0.14,SamplePoints_2D)
+
+        # range used:
+        # alphas_ = np.linspace(8, 10, SamplePoints_2D)
+        # thetas_ = np.linspace(0.05,0.16,SamplePoints_2D)
+
+            # alphas_ = np.linspace(8, 12, SamplePoints_2D)
+            # thetas_ = np.linspace(0.05,0.2,SamplePoints_2D)
+        # betas_  = np.linspace(0.01,40.01,1)
+        #fix to one value:
+        betas_ = 2.0;
+        # betas_ = 10.0;
+        # betas_ = 5.0;
+        # betas_ = 0.5;
+
+
+        #intermediate Values
+        alphas_ = np.linspace(-2, 1, SamplePoints_2D)
+        # thetas_ = np.linspace(0.4,0.6,SamplePoints_2D)
+        # betas_ = 10.0;
+
+        # TEST
+        # alphas_ = np.linspace(-8, 8, SamplePoints_2D)
+        # thetas_ = np.linspace(0.01,0.99,SamplePoints_2D)
+        # betas_ = 1.0; #TEST Problem: disvison by zero if alpha = 9, theta = 0.1 !
+        # betas_ = 0.9;
+        # betas_ = 0.5;  #TEST!!!
+        # alphas, betas, thetas = np.meshgrid(alphas_, betas_, thetas_, indexing='ij')
+        betas = betas_
+        alphas, thetas = np.meshgrid(alphas_, thetas_, indexing='ij')
+
+        if generalCase:
+            classifyMin_matVec = np.vectorize(classifyMin_mat)
+            GetCellOutputVec = np.vectorize(GetCellOutput, otypes=[np.ndarray, np.ndarray])
+            Q, B = GetCellOutputVec(alphas,betas,thetas,gamma,mu1,rho1,lambda1, InputFilePath ,OutputFilePath )
+
+
+            # print('type of Q:', type(Q))
+            # print('Q:', Q)
+            G, angles, Types, curvature = classifyMin_matVec(Q,B)
+
+        else:
+            classifyMin_anaVec = np.vectorize(classifyMin_ana)
+            GetMuGammaVec = np.vectorize(GetMuGamma)
+            # muGammas = GetMuGammaVec(betas,thetas,gamma,mu1,rho1,InputFilePath ,OutputFilePath )
+            # G, angles, Types, curvature = classifyMin_anaVec(alphas,betas,thetas, muGammas,  mu1, rho1)    # Sets q12 to zero!!!
+            muGammas = GetMuGammaVec(betas,thetas,gamma,mu1,rho1,InputFilePath ,OutputFilePath )
+
+            if gamma == '0':
+                G, angles_0, Types, curvature = classifyMin_anaVec(alphas,betas,thetas, muGammas,  mu1, rho1)    # Sets q12 to zero!!!
+            if gamma == 'infinity':
+                G, angles_inf, Types, curvature = classifyMin_anaVec(alphas,betas,thetas, muGammas,  mu1, rho1)    # Sets q12 to zero!!!
+
+            # print('size of G:', G.shape)
+            # print('G:', G)
+            # print('Types:', Types)
+            # Out = classifyMin_anaVec(alphas,betas,thetas)
+            # T = Out[2]
+            # --- Write to VTK
+            # VTKOutputName = + path + "./PhaseDiagram2DNEW"
+
+        # print('angles:',angles)
+        # GammaString = str(gamma)
+        # VTKOutputName = "outputs/PhaseDiagram2D" + "Gamma_" + GammaString
+        # gridToVTK(VTKOutputName , alphas, betas, thetas, pointData = {'Type': Types, 'angles': angles, 'curvature': curvature} )
+        # print('Written to VTK-File:', VTKOutputName )
+
+
+# --- Make 3D Scatter plot
+if(make_3D_plot or make_2D_plot):
+    # fig = plt.figure()
+    # ax = fig.add_subplot(111, projection='3d')
+    # colors = cm.plasma(Types)
+    colors = cm.coolwarm(angles_inf)
+
+
+    width = 6.28
+    height = width / 1.618
+    # height = width / 2.5
+    # fig, ax = plt.subplots()
+    fig,ax = plt.subplots(nrows=1,ncols=2,figsize=(width,height), sharey=True)
+    # ax = plt.axes((0.15,0.21 ,0.8,0.75))
+
+
+
+
+    # if make_2D_plot: pnt3d=ax.scatter(alphas,thetas,c=Types.flat)
+    # if make_3D_plot: pnt3d=ax.scatter(alphas,betas,thetas,c=Types.flat)
+    #
+    # if make_2D_plot: pnt3d=ax.scatter(alphas,thetas,c=angles.flat)
+    # if make_3D_plot: pnt3d=ax.scatter(alphas,betas,thetas,c=angles.flat)
+
+
+    # pnt=ax.scatter(alphas,thetas,c=angles,cmap='coolwarm')
+    # # ax.colorbar()
+    # CS = ax.contourf(alphas, thetas, angles,6, cmap=plt.cm.coolwarm, linestyle=dashed)
+    # # CS = ax.contour(alphas, thetas, angles,6, colors='k')
+    # ax.clabel(CS, inline=True, fontsize=7.5)
+    # # ax.set_title('Simplest default with labels')
+
+
+    CS_0 = ax[0].contourf(alphas, thetas, angles_0, 10, cmap=plt.cm.coolwarm)
+    # CS = ax.contourf(alphas, thetas, angles, 10, cmap='RdBu')
+    CS_02 = ax[0].contour(CS_0, levels=CS_0.levels[::2], colors='black',inline=True, linewidths=(0.5,))
+    # ax.clabel(CS2, inline=True, fontsize=9, colors='black')
+    # ax.clabel(CS2, inline=True, inline_spacing=3, rightside_up=True, colors='k', fontsize=8)
+    # manual_locations = [
+    #     (-0.5, 0.3), (-0.7, 0.4), (-0.8, 0.5), (-0.9, 0.6), (-1,0.7)]
+    manual_locations = [
+        (-0.4, 0.2),(-0.6, 0.3), (-0.7, 0.4), (-0.8, 0.5), (-0.9, 0.6), (-1,0.7)]
+    # ax.clabel(CS2, inline=True, fontsize=6, colors='black', manual=manual_locations)
+    # ax.clabel(CS2, inline=True, fontsize=6, colors='black')
+    # ax.clabel(CS2, CS2.levels, inline=True, fontsize=10)
+    # ax.clabel(CS,  fontsize=5, colors='black')
+    # cbar = fig.colorbar(CS,label=r'angle $\alpha$', ticks=[0, np.pi/8, np.pi/4, 3*np.pi/8 , np.pi/2 ])
+    # cbar = fig.colorbar(CS_0, ticks=[0, np.pi/2 ])
+    # cbar.ax.set_yticklabels(['$0$', r'$\pi/2$'])
+    # cbar.ax.set_title(r'angle $\alpha$')
+
+
+    CS_1 = ax[1].contourf(alphas, thetas, angles_inf, 10, cmap=plt.cm.coolwarm)
+    # CS = ax.contourf(alphas, thetas, angles, 10, cmap='RdBu')
+    CS_12 = ax[1].contour(CS_1, levels=CS_1.levels[::2], colors='black',inline=True, linewidths=(0.5,))
+    # ax.clabel(CS2, inline=True, fontsize=9, colors='black')
+    # ax.clabel(CS2, inline=True, inline_spacing=3, rightside_up=True, colors='k', fontsize=8)
+    manual_locations = [
+        (-0.5, 0.3), (-0.7, 0.4), (-0.8, 0.5), (-0.9, 0.6), (-1,0.7)]
+    ax[1].clabel(CS_12, inline=True, fontsize=10, colors='black', manual=manual_locations)
+    # ax[1].clabel(CS_12, inline=True, fontsize=8, colors='black')
+
+
+    axins1 = inset_axes(ax[1],
+                       width="5%",  # width = 5% of parent_bbox width
+                       height="100%",  # height : 50%
+                       loc='lower left',
+                       bbox_to_anchor=(1.05, 0., 1, 1),
+                       bbox_transform=ax[1].transAxes,
+                       borderpad=0,
+                       )
+
+    # ax.clabel(CS2, CS2.levels, inline=True, fontsize=10)
+    # ax.clabel(CS,  fontsize=5, colors='black')
+    # cbar = fig.colorbar(CS,label=r'angle $\alpha$', ticks=[0, np.pi/8, np.pi/4, 3*np.pi/8 , np.pi/2 ])
+    # cbar = fig.colorbar(CS_1, ticks=[0, np.pi/8, np.pi/4, 3*np.pi/8 , np.pi/2 ])
+
+    # cbar_ax = fig.add_axes([0.85, 0.15, 0.05, 0.7])
+    cbar = fig.colorbar(CS_1, cax=axins1, ticks=[0, np.pi/8, np.pi/4, 3*np.pi/8 , np.pi/2 ])
+    # cbar = fig.colorbar(CS_1, cax=cbar_ax, shrink=0.2, location='right', ticks=[0, np.pi/8, np.pi/4, 3*np.pi/8 , np.pi/2 ])
+    # cbar = fig.colorbar(CS_1,  ax=ax[:], shrink=0.8, location='right', ticks=[0, np.pi/8, np.pi/4, 3*np.pi/8 , np.pi/2 ])
+
+    cbar.ax.set_yticklabels(['$0$',r'$\pi/8$', r'$\pi/4$' ,r'$3\pi/8$' , r'$\pi/2$'])
+    cbar.ax.set_title(r'angle $\alpha$')
+    # cbar=plt.colorbar(pnt3d)
+    # cbar.set_label("Values (units)")
+    # plt.axvline(x = 8, color = 'b', linestyle = ':', label='$q_1$')
+    # plt.axhline(y = 0.083333333, color = 'b', linestyle = ':', label='$q_1$')
+
+    ax[0].set_xlabel(r'$\theta_\rho$',fontsize=10)
+    # ax[0].yaxis.set_major_locator(MultipleLocator(0.1))
+    # ax[0].xaxis.set_major_locator(MultipleLocator(1))
+    ax[0].yaxis.set_major_locator(MultipleLocator(0.1))
+    ax[0].xaxis.set_major_locator(MultipleLocator(0.5))
+    ax[0].set_ylabel(r'$\theta$   ',fontsize=10, rotation=0)
+    ax[0].tick_params(axis='x', labelsize=7 )
+    ax[0].tick_params(axis='y', labelsize=7 )
+
+    ax[1].set_xlabel(r'$\theta_\rho$',fontsize=10)
+    # ax.xaxis.set_minor_locator(MultipleLocator(0.5))
+    # ax[1].yaxis.set_major_locator(MultipleLocator(0.1))
+    # ax[1].xaxis.set_major_locator(MultipleLocator(1))
+    ax[1].yaxis.set_major_locator(MultipleLocator(0.1))
+    ax[1].xaxis.set_major_locator(MultipleLocator(0.5))
+    ax[1].tick_params(axis='x', labelsize=7 )
+    ax[1].tick_params(axis='y', labelsize=7 )
+    # ax.set_ylabel('beta')
+    # ax[1].set_ylabel(r'$\theta$   ',fontsize=10, rotation=0)
+    # if make_3D_plot: ax.set_zlabel('theta')
+    # plt.subplots_adjust(bottom=0.2)
+    # plt.subplots_adjust(wspace=0.22, hspace=0.1)
+    plt.subplots_adjust(hspace=0.15, wspace=0.1)
+
+    # fig.subplots_adjust(right=0.75)
+
+
+    ax[0].grid( linestyle = '--', linewidth = 0.25)
+    ax[1].grid( linestyle = '--', linewidth = 0.25)
+
+
+
+    fig.set_size_inches(width, height)
+    outputName = 'Plot-Contour_Gamma' +str(gamma) + '.pdf'
+    fig.savefig(outputName)
+    # fig.savefig('Plot-Contour.pdf')
+    plt.show()
+    # plt.savefig('common_labels.png', dpi=300)
+    # print('T:', T)
+    # print('Type 1 occured here:', np.where(T == 1))
+    # print('Type 2 occured here:', np.where(T == 2))
+
+
+    # print(alphas_)
+    # print(betas_)
+
+
+
+
+
+# ALTERNATIVE
+# colors = ("red", "green", "blue")
+# groups = ("Type 1", "Type2", "Type3")
+#
+# # Create plot
+# fig = plt.figure()
+# ax = fig.add_subplot(1, 1, 1)
+#
+# for data, color, group in zip(Types, colors, groups):
+#     # x, y = data
+#     ax.scatter(alphas, thetas, alpha=0.8, c=color, edgecolors='none', label=group)
+#
+# plt.title('Matplot scatter plot')
+# plt.legend(loc=2)
+# plt.show()