'''
Created on 15 Jul 2015

@author: rstones
'''
import numpy as np
import counting_statistics.counting_statistics as cs
import quant_mech.utils as utils
import matplotlib.pyplot as plt
from vibration_counting_statistics.dimer_vib_model import DimerVibModel

freq_range = np.linspace(0, 2.5, 100)

model = DimerVibModel()
model.J = 0.2

F2 = np.zeros((3, freq_range.size))

model.mode_coupling = 0
L = model.liouvillian
L_dim = L().shape[0]
L_jump = model.jump_liouvillian
dm_pops = np.eye(np.sqrt(L_dim)).flatten()
ss = utils.stationary_state(L(), populations=dm_pops)
F2[0] = cs.second_order_fano_factor(L, L_jump, ss, freq_range, dm_pops)

model.mode_coupling = 0.3
mode_freq_vals = np.array([1., 2.])
for i,freq in enumerate(mode_freq_vals):
    model.omega = freq
    L = model.liouvillian
'''

@author Richard Stones
'''
import numpy as np
import quant_mech.utils as utils
import easygui
from vibration_counting_statistics.dimer_vib_model import DimerVibModel
import counting_statistics.counting_statistics as cs
import matplotlib.pyplot as plt

print '[Executing script...]'

# set up data
model = DimerVibModel() # model should be a subclass of DataModel

num_data_pts = 200
energy_gap_range = np.linspace(-3, 3, num_data_pts)
current = np.zeros((3, num_data_pts))
#current_cs = np.zeros((3, num_data_pts))

#mode_couplings = [0, 0.1, 0.5]
#thermal_occupations = [0.01, 1.]; model.mode_coupling = 0.3;
mode_dampings = [0.0025, 0.005]; model.mode_coupling = 0.3;


for i,v in enumerate(mode_dampings):
    print 'Calculations for v = ' + str(v)
    #model.mode_coupling = v
    #model.N = v
    model.vib_damping_rate = v
'''

@author Richard Stones
'''
import numpy as np
import quant_mech.utils as utils
import easygui
from vibration_counting_statistics.dimer_vib_model import DimerVibModel
import counting_statistics.counting_statistics as cs
import matplotlib.pyplot as plt

print '[Executing script...]'

# set up data
model = DimerVibModel() # model should be a subclass of DataModel

# first compare analytic and numerical zero-freq noise calculations
num_data_pts = 180
energy_gap_range = np.linspace(-2,3,num_data_pts)
F2 = np.zeros(num_data_pts)
#current = np.zeros(num_data_pts)

for i,E in enumerate(energy_gap_range):
    print 'calculating for energy gap ' + str(E)
    model.energy_gap = E
    L = model.liouvillian
    L_jump = model.jump_liouvillian
    dv_pops = np.eye(3*model.vib_basis_size).flatten()
    #dv_pops = np.delete(dv_pops, model.element_indices_to_remove, 0)
    
    dv = utils.stationary_state(L(0), dv_pops)
'''
Created on 23 Jul 2015

@author: rstones
'''
import numpy as np
import quant_mech.utils as utils
import easygui
from vibration_counting_statistics.dimer_vib_model import DimerVibModel
import counting_statistics.counting_statistics as cs
import matplotlib.pyplot as plt

print '[Executing script...]'

# set up data
model = DimerVibModel() # model should be a subclass of DataModel

num_data_pts = 100
energy_gap_range = np.linspace(-3, 3, num_data_pts)
current = np.zeros((3, num_data_pts))
current_cs = np.zeros((3, num_data_pts))

mode_couplings = [0, 0.1, 0.5]

def current_calculation(energy_gap):
#     model.energy_gap = energy_gap
#     L = model.liouvillian()
#     dm_pops = np.eye(3*model.vib_basis_size).flatten()
#     ss_vec = utils.stationary_state(L, dm_pops)
#     ss_mat = ss_vec.copy()
#     ss_mat.shape = np.sqrt(ss_mat.shape[0]), np.sqrt(ss_mat.shape[0])