# -*- coding: utf-8 -*-
"""
SOLEIL synchrotron parameters script.

@author: Alexis Gamelin
@date: 14/01/2020
"""

import numpy as np
from tracking.synchrotron import Synchrotron
from tracking.optics import Optics
from tracking.particles import Electron, Beam

def soleil(mode = 'Uniform'):
    """
    
    """
    
    h = 416
    L = 3.540969742590899e+02
    E0 = 2.75e9
    particle = Electron()
    ac = 1.47e-4
    U0 = 0.310e6
    tau = np.array([6.56e-3, 6.56e-3, 3.27e-3])
    tune = np.array([18.15687, 10.22824, 0.00502])
    emit = np.array([4.5e-9, 4.5e-9*0.01])
    sigma_0 = 8e-12
    sigma_delta = 8.6e-4
    chro = [2,3]
    
    # mean values
    beta = np.array([3, 1.3])
    alpha = np.array([0, 0])
    disp = np.array([0, 0])
    dispp = np.array([0, 0])
    mean_val = Optics(beta, alpha, disp, dispp)
    
    ring = Synchrotron(h, L, E0, particle, ac=ac, U0=U0, tau=tau,
                       mean_optics=mean_val, emit=emit, tune=tune,
                       sigma_delta=sigma_delta, sigma_0=sigma_0,
                       chro=chro)
    
    if mode == 'Uniform':
        beam = Beam(ring, )
    elif mode == 'Hybrid':
        pass
    elif mode == 'Low alpha/25':
        pass
    elif mode == 'Low alpha/25':
        pass
    elif mode == '8 bunches':
        pass
    elif mode == 'Single':
        pass
    else:
        raise ValueError("{} is not a correct operation mode.".format(mode))
    
    
    return ring