print "calculating for beta = " + str(B)
    model_heom.beta = B
    model_pert.beta = B
    for i,E in enumerate(reorg_energy_values):
        print str(E) + ' at ' + str(tu.getTime())
        model_heom.environment = environment(E, B, K)
        try:
            solver = FCSSolver(model_heom.heom_matrix(), model_heom.jump_matrix(), model_heom.dv_pops)
            mean_heom[j,i] = solver.mean()
            F2_heom[j,i] = solver.second_order_fano_factor()
            coh_heom[j,i] = np.abs(model_heom.heom_solver.extract_system_density_matrix(solver.ss)[1,2])
        except ArpackNoConvergence:
            print "Convergence error!"
        model_pert.spectral_density = drude_spectral_density(E, cutoff)
        solver_pert = DenseFCSSolver(model_pert.liouvillian(), model_pert.jump_matrix(), np.array([1,1,1,0,0]))
        mean_pert[j,i] = solver_pert.mean()
        F2_pert[j,i] = solver_pert.second_order_fano_factor(0)
        coh_pert[j,i] = np.abs(solver_pert.ss[3] + solver_pert.ss[4])

# fname = '../../data/HEOM_weak_coupling_F2_reorg_energy_drude_T2.7_N6_K7.npz'
# data = np.load(fname)
# reorg_energy_values = np.append(data['reorg_energy_values'], reorg_energy_values)
# F2_heom = np.append(data['F2_heom'], F2_heom)
# F2_pert = np.append(data['F2_pert'], F2_pert)
# coh_heom = np.append(data['coh_heom'], coh_heom)
# coh_pert = np.append(data['coh_pert'], coh_pert)
# mean_heom = np.append(data['mean_heom'], mean_heom)
# mean_pert = np.append(data['mean_pert'], mean_pert)

np.savez('../../data/HEOM_weak_coupling_F2_reorg_energy_drude_T2.7_N6_K8_-6-0.npz', reorg_energy_values=reorg_energy_values, \
                    F2_heom=F2_heom.squeeze(), F2_pert=F2_pert.squeeze(), coh_heom=coh_heom.squeeze(), \
Gamma_L = 1.
Gamma_R = 0.025
bias = 2.
T_c = 1. 
beta = 0.4
cutoff = 50.

def drude_spectral_density(reorg_energy, cutoff):
    def J(delta):
        return (2. * reorg_energy * cutoff * delta) / (delta**2 + cutoff**2)
    return J

model_pert = DissipativeDQDModel(Gamma_L, Gamma_R, bias, T_c, drude_spectral_density(0,cutoff), beta)

reorg_energy_values = np.logspace(-3, 15, 320)
F2_pert = np.zeros(reorg_energy_values.size)
coh_pert = np.zeros(reorg_energy_values.size)
mean_pert = np.zeros(reorg_energy_values.size)

for i,E in enumerate(reorg_energy_values):
    model_pert.spectral_density = drude_spectral_density(E, cutoff)
    solver_pert = FCSSolver(model_pert.liouvillian(), model_pert.jump_matrix(), np.array([1,1,1,0,0]))
    mean_pert[i] = solver_pert.mean()
    F2_pert[i] = solver_pert.second_order_fano_factor(0)
    coh_pert[i] = np.abs(solver_pert.ss[3] + solver_pert.ss[4])
    
np.savez('../data/F2_reorg_energy_perturbative_data_large_reorg_energy.npz', reorg_energy_values=reorg_energy_values, F2=F2_pert, \
                    mean=mean_pert, coh=coh_pert)
    
@author: richard
'''
import numpy as np
from HEOM_counting_statistics.DQD_HEOM_model import DQDHEOMModel
from counting_statistics.fcs_solver import FCSSolver

model = DQDHEOMModel(0, 3., 1., 1.e-4)
 
bias_values = np.linspace(-10, 10, 100)
current = np.zeros(bias_values.size)
F2 = np.zeros(bias_values.size)
 
for i,E in enumerate(bias_values):
    model.bias = E
    solver = FCSSolver(model.heom_matrix(), model.jump_matrix(), model.dv_pops)
    current[i] = solver.mean()
    F2[i] = solver.second_order_fano_factor(0)
     
import matplotlib.pyplot as plt
plt.subplot(121)
plt.plot(bias_values, current, linewidth=3)
plt.xlim(-10,10)
plt.ylim(0,0.04)
plt.xlabel(r'energy bias $\epsilon$')
plt.ylabel(r'current')
 
plt.subplot(122)
plt.plot(bias_values, F2, linewidth=3)
plt.xlim(-10,10)
plt.xlabel(r'energy bias $\epsilon$')
plt.ylabel(r'F$^{(2)}$(0)')