import os
import numpy as np
import matplotlib.pyplot as plt

# ! check riccardo
def add_noise_X(input):
    
    w = 3.66                                    # eV/e-
    fano_factor = 0.125                         # for semiconductor detectors
    sigma_fano = np.sqrt(fano_factor*input/w)   # keV*(e-)/eV -> e-rms
    sigma_el = 30.0                             # e-rms in termini di devizaioni standard
    
    variance = sigma_fano**2 + sigma_el**2      # Varianza della gaussiana
    std_row = np.sqrt(variance)
    std = (std_row*3.66)/1000                   # (e-rms)*eV/(e-rms) --> keV

    # Estrai un valore campionato dalla distribuzione gaussiana
    output = np.random.normal(loc=input, scale=std)
    
    return output

def add_noise_S(input):
    
    light_efficiency = 25                       # e-/keV
    sigma_stat = input*light_efficiency
    sigma_el = 30.0                             # conto due volte perche ho due sdd
    
    variance = sigma_stat**2 + 2*sigma_el**2
    std = np.sqrt(variance)/1000
    
    # Estrai un valore campionato dalla distribuzione gaussiana
    output = np.random.normal(loc=input, scale=std)
    
    return output
    


    # # PLOT
    # # Genera i valori per la curva gaussiana
    # x = np.linspace(input - 4*std, input + 4*std, 1000)
    # y = (1 / (std * np.sqrt(2 * np.pi))) * np.exp(-0.5 * ((x - input) / std)**2)
    # # Plot della distribuzione gaussiana
    # plt.plot(x, y, label="Distribuzione Gaussiana", color="blue")
    # plt.axvline(output, color="red", linestyle="--", label=f"Valore campionato: {output:.2f}")
    # # Aggiungi etichette e titolo
    # plt.xlabel("Valori")
    # plt.ylabel("Densità di probabilità")
    # plt.title("Distribuzione Gaussiana con valore campionato evidenziato")
    # plt.legend()
    # plt.grid()
    # # Mostra il grafico
    # plt.show()
