import scipy
import pickle
sigma_theta = .36
EXTENTS = 30e-6
STEP = .05e-6
x = numpy.arange(-EXTENTS, EXTENTS, STEP)
y = numpy.arange(-EXTENTS, EXTENTS, STEP)
[XX, YY] = numpy.meshgrid(x, y)
theta_list = numpy.random.randn(20)
theta_vals = sigma_theta * theta_list
print len(theta_vals)
length = 10.0
step_length = 1.0
diameter = 10e-6
test_fiber = fiber.LargeCoreMMF(length=length,
                                step_length=step_length,
                                a=diameter)
admissible_modes = test_fiber.admissible_modes
M = len(admissible_modes)
w = test_fiber.w
print w
offset_x = .5e-6 * numpy.ones(20)
offset_y = .5e-6 * numpy.ones(20)
print len(offset_x)
for K in range(20):
    test_fiber = fiber.GHModes(w, XX, YY, theta=0.0)
    test_fiber1 = fiber.GHModes(w,
                                XX,
                                YY,
                                theta=theta_vals[K],
                                offset_x=offset_x[K],
import math, sys
from math import factorial,log10
from numpy import linalg as LA
from scipy.linalg import expm
length=100000
step_length=1
n_sections=int(length / step_length)
sigma_kappa = [1.0, 3.0, 7.0, 10.0]
sigma_theta = 0.36
radius = 5e-6
W = 1.55e-6
c=3e8
for j in range(10):
    Kappa_list = numpy.random.randn(n_sections)
    theta_list = numpy.random.randn(n_sections)
    test_fiber=fiber.LargeCoreMMF(length=length,step_length=step_length,a=radius,NA=.14) 
    M=len(test_fiber.admissible_modes)
    print M
    for l in range(4):        
        kappa_vals = numpy.abs(sigma_kappa[l]*Kappa_list)
        theta_vals = sigma_theta*theta_list
        t = numpy.arange(0, 1.01e11, 1e9)
        U01,U01_d = test_fiber.calculate_matrix(L=W, kappa_vals=kappa_vals, theta_vals=theta_vals)
        U01=numpy.mat(U01)
        U01_d = numpy.mat(U01_d)
        F1 = 1.0j*numpy.dot(U01.H,U01_d)
        F1 = 0.5 * (F1 + F1.H)
        G1,P1= LA.eig(F1)
        Q1 = numpy.dot(U01,P1[:,0])
        def calculate_mag_resp(Omega, U, P1, Q1):
            return numpy.abs(numpy.dot(Q1.H,numpy.dot(U, P1[:,0])))