Commit 3ef727a9 authored by Nicolas Nunez Barreto's avatar Nicolas Nunez Barreto
parents a0718351 86aaf205
......@@ -259,7 +259,7 @@ freqslong = np.arange(min(FreqsChosen)-10, max(FreqsChosen)+10, (FreqsChosen[1]-
#plt.figure()
plt.plot(FreqsChosen, CountsChosen, 'o', label='dcB=-1.16 V')
#plt.plot(freqslong, Lorentzian(freqslong, *popt))
plt.plot(freqslong, Lorentzian(freqslong, *popt))
#plt.axvline(popt[2]-22.1, linestyle='--', linewidth=1)
#plt.axvline(popt[2]+22.1, linestyle='--', linewidth=1)
#plt.axvline(2*UV_cooling, linestyle='--', linewidth=1)
......@@ -287,7 +287,7 @@ freqslong = np.arange(min(FreqsChosen)-10, max(FreqsChosen)+10, (FreqsChosen[1]-
#plt.figure()
plt.plot(FreqsChosen, CountsChosen, 'o', label='dcB=-1.20 V')
#plt.plot(freqslong, Lorentzian(freqslong, *popt))
plt.plot(freqslong, Lorentzian(freqslong, *popt))
#plt.axvline(popt[2]-22.1, linestyle='--', linewidth=1)
#plt.axvline(popt[2]+22.1, linestyle='--', linewidth=1)
#plt.axvline(2*UV_cooling, linestyle='--', linewidth=1)
......@@ -347,7 +347,7 @@ freqslong = np.arange(min(FreqsChosen)-10, max(FreqsChosen)+10, (FreqsChosen[1]-
#plt.figure()
plt.plot(FreqsChosen, CountsChosen, 'o', label='dcB=-1.24 V')
#plt.plot(freqslong, Lorentzian(freqslong, *popt))
plt.plot(freqslong, Lorentzian(freqslong, *popt))
#plt.axvline(popt[2]-22.1, linestyle='--', linewidth=1)
#plt.axvline(popt[2]+22.1, linestyle='--', linewidth=1)
#plt.axvline(2*UV_cooling, linestyle='--', linewidth=1)
......@@ -376,7 +376,7 @@ freqslong = np.arange(min(FreqsChosen)-10, max(FreqsChosen)+10, (FreqsChosen[1]-
#plt.figure()
plt.plot(FreqsChosen, CountsChosen, 'o', label='dcB=-1.26 V')
#plt.plot(freqslong, Lorentzian(freqslong, *popt))
plt.plot(freqslong, Lorentzian(freqslong, *popt))
#plt.axvline(popt[2]-22.1, linestyle='--', linewidth=1)
#plt.axvline(popt[2]+22.1, linestyle='--', linewidth=1)
#plt.axvline(2*UV_cooling, linestyle='--', linewidth=1)
......
import h5py
import matplotlib.pyplot as plt
import numpy as np
import sys
import re
import ast
from scipy.optimize import curve_fit
import os
from scipy import interpolate
# Solo levanto algunos experimentos
Calib_Files = """000004263-UV_Scan_withcalib_Haeffner
000004265-UV_Scan_withcalib_Haeffner
000004270-UV_Scan_withcalib_Haeffner
000004273-UV_Scan_withcalib_Haeffner
000004275-UV_Scan_withcalib_Haeffner
000004282-UV_Scan_withcalib_Haeffner
000004301-UV_Scan_withcalib_Haeffner
000004303-UV_Scan_withcalib_Haeffner"""
#carpeta pc nico labo escritorio:
#C:\Users\Usuario\Documents\artiq\artiq_experiments\analisis\plots\20211013_EspectrosUV\Data
def SeeKeys(files):
for i, fname in enumerate(files.split()):
data = h5py.File(fname+'.h5', 'r') # Leo el h5: Recordar que nuestros datos estan en 'datasets'
print(fname)
print(list(data['datasets'].keys()))
#%%
Amps = []
Freqs = []
Counts = []
for i, fname in enumerate(Calib_Files.split()):
print(SeeKeys(Calib_Files))
print(i)
print(fname)
data = h5py.File(fname+'.h5', 'r') # Leo el h5: Recordar que nuestros datos estan en 'datasets'
print(list(data['datasets'].keys()))
Amps.append(np.array(data['datasets']['UV_Amplitudes']))
Freqs.append(np.array(data['datasets']['UV_Frequencies']))
Counts.append(np.array(data['datasets']['counts_spectrum']))
#def GetBackground(countsper100ms, )
#%%
def Lorentzian(f, A, gamma, x0):
return (A/np.pi)*0.5*gamma/(((f-x0)**2)+((0.5*gamma)**2)) + 10 #40 es el piso de ruido estimado
j = 1 #UV_cooling en 90 MHz
UV_cooling = 90
FreqsChosen = [2*f*1e-6 for f in Freqs[j]]
CountsChosen = Counts[j]
portion = 0.05
popt, pcov = curve_fit(Lorentzian, FreqsChosen[int(portion*len(FreqsChosen)):], CountsChosen[int(portion*len(FreqsChosen)):])
freqslong = np.arange(min(FreqsChosen)-10, max(FreqsChosen)+10, (FreqsChosen[1]-FreqsChosen[0])*0.01)
plt.figure()
plt.plot(FreqsChosen, CountsChosen, 'o', label='4 uW')
plt.plot(freqslong, Lorentzian(freqslong, *popt), label=f'FWHM {round(popt[1])} MHz')
#plt.axvline(popt[2]-22.1, linestyle='--', linewidth=1)
#plt.axvline(popt[2]+22.1, linestyle='--', linewidth=1)
#plt.axvline(2*UV_cooling, linestyle='--', linewidth=1)
plt.xlabel('Frecuencia (MHz)')
plt.ylabel('Cuentas')
plt.legend()
print(f'Ancho medido: {round(popt[1])} MHz')
#%%
def Lorentzian(f, A, gamma, x0, C):
return (A/np.pi)*0.5*gamma/(((f-x0)**2)+((0.5*gamma)**2)) + C #40 es el piso de ruido estimado
j = 4 #UV_cooling en 90 MHz
UV_cooling = 90
FreqsChosen = [2*f*1e-6 for f in Freqs[j]]
CountsChosen = Counts[j]
portion = 0.05
popt, pcov = curve_fit(Lorentzian, FreqsChosen[int(portion*len(FreqsChosen)):], CountsChosen[int(portion*len(FreqsChosen)):], p0=[1e3, 40, 210, 100])
freqslong = np.arange(min(FreqsChosen)-100, max(FreqsChosen)+100, (FreqsChosen[1]-FreqsChosen[0])*0.01)
plt.figure()
plt.plot(FreqsChosen, CountsChosen, 'o', label='1 uW')
plt.plot(freqslong, Lorentzian(freqslong, *popt), label=f'FWHM {round(popt[1])} MHz')
#plt.axvline(popt[2]-22.1, linestyle='--', linewidth=1)
#plt.axvline(popt[2]+22.1, linestyle='--', linewidth=1)
#plt.axvline(2*UV_cooling, linestyle='--', linewidth=1)
plt.xlabel('Frecuencia (MHz)')
plt.ylabel('Cuentas')
plt.axhline(popt[-1])
plt.ylim(50, 1100)
plt.legend()
#%% COMPARATIVA DE AMBOS DONDE SE VE QUE UNO ES MAS FINO
def Lorentzian(f, A, gamma, x0):
return (A/np.pi)*0.5*gamma/(((f-x0)**2)+((0.5*gamma)**2)) + 10 #40 es el piso de ruido estimado
j = 1 #UV_cooling en 90 MHz
UV_cooling = 90
FreqsChosen = [2*f*1e-6 for f in Freqs[j]]
CountsChosen = Counts[j]
plt.figure()
plt.plot(FreqsChosen, [c/max(CountsChosen) for c in CountsChosen], 'o', label='4 uW')
#plt.plot(freqslong, Lorentzian(freqslong, *popt), label=f'FWHM {round(popt[1])} MHz')
#plt.axvline(popt[2]-22.1, linestyle='--', linewidth=1)
#plt.axvline(popt[2]+22.1, linestyle='--', linewidth=1)
#plt.axvline(2*UV_cooling, linestyle='--', linewidth=1)
plt.xlabel('Frecuencia (MHz)')
plt.ylabel('Cuentas')
plt.legend()
print(f'Ancho medido: {round(popt[1])} MHz')
j = 4 #UV_cooling en 90 MHz
FreqsChosen = [2*f*1e-6 for f in Freqs[j]]
CountsChosen = Counts[j]
#popt, pcov = curve_fit(Lorentzian, FreqsChosen[int(portion*len(FreqsChosen)):], CountsChosen[int(portion*len(FreqsChosen)):])
freqslong = np.arange(min(FreqsChosen)-10, max(FreqsChosen)+10, (FreqsChosen[1]-FreqsChosen[0])*0.01)
#plt.figure()
plt.plot(FreqsChosen, [c/max(CountsChosen) for c in CountsChosen], 'o', label='1 uW')
#plt.plot(freqslong, Lorentzian(freqslong, *popt), label=f'FWHM {round(popt[1])} MHz')
#plt.axvline(popt[2]-22.1, linestyle='--', linewidth=1)
#plt.axvline(popt[2]+22.1, linestyle='--', linewidth=1)
#plt.axvline(2*UV_cooling, linestyle='--', linewidth=1)
plt.xlabel('Frecuencia (MHz)')
plt.ylabel('Cuentas')
plt.legend()
#%%
def Lorentzian(f, A, gamma, x0, C):
return (A/np.pi)*0.5*gamma/(((f-x0)**2)+((0.5*gamma)**2)) + C #40 es el piso de ruido estimado
j = 5 #UV_cooling en 90 MHz
UV_cooling = 90
FreqsChosen = [2*f*1e-6 for f in Freqs[j]]
CountsChosen = Counts[j]
portion = 0.6
#popt, pcov = curve_fit(Lorentzian, FreqsChosen[int(portion*len(FreqsChosen)):], CountsChosen[int(portion*len(FreqsChosen)):], p0=[1e3, 40, 210, 100])
popt, pcov = curve_fit(Lorentzian, FreqsChosen[:int(portion*len(FreqsChosen))], CountsChosen[:int(portion*len(FreqsChosen))], p0=[1e3, 40, 210, 100])
freqslong = np.arange(min(FreqsChosen)-10, max(FreqsChosen)+10, (FreqsChosen[1]-FreqsChosen[0])*0.01)
plt.figure()
plt.plot([f-popt[2] for f in FreqsChosen], CountsChosen, 'o', label='1 uW')
plt.plot([f-popt[2] for f in freqslong], Lorentzian(freqslong, *popt), label=f'FWHM {round(popt[1])} MHz')
#plt.axvline(popt[2]-22.1, linestyle='--', linewidth=1)
#plt.axvline(popt[2]+22.1, linestyle='--', linewidth=1)
#plt.axvline(2*UV_cooling, linestyle='--', linewidth=1)
plt.xlabel('Frecuencia (MHz)')
plt.ylabel('Cuentas')
plt.axhline(popt[-1])
plt.legend()
print(f'Ancho medido: {round(popt[1])} MHz')
#%%
def Lorentzian(f, A, gamma, x0, C):
return (A/np.pi)*0.5*gamma/(((f-x0)**2)+((0.5*gamma)**2)) + C #40 es el piso de ruido estimado
j = 6 #UV_cooling en 90 MHz
UV_cooling = 90
FreqsChosen = [2*f*1e-6 for f in Freqs[j]]
CountsChosen = Counts[j]
portion = 1
#popt, pcov = curve_fit(Lorentzian, FreqsChosen[int(portion*len(FreqsChosen)):], CountsChosen[int(portion*len(FreqsChosen)):], p0=[1e3, 40, 210, 100])
popt, pcov = curve_fit(Lorentzian, FreqsChosen[:int(portion*len(FreqsChosen))], CountsChosen[:int(portion*len(FreqsChosen))], p0=[1e3, 40, 210, 100])
freqslong = np.arange(min(FreqsChosen)-10, max(FreqsChosen)+10, (FreqsChosen[1]-FreqsChosen[0])*0.01)
plt.figure()
plt.plot([f-popt[2] for f in FreqsChosen], CountsChosen/max(CountsChosen), 'o', label='2.5 uW')
plt.plot([f-popt[2] for f in freqslong], Lorentzian(freqslong, *popt)/max(CountsChosen), label=f'FWHM {round(popt[1])} MHz')
#plt.axvline(popt[2]-22.1, linestyle='--', linewidth=1)
#plt.axvline(popt[2]+22.1, linestyle='--', linewidth=1)
#plt.axvline(2*UV_cooling, linestyle='--', linewidth=1)
plt.xlabel('Frecuencia (MHz)')
plt.ylabel('Cuentas')
#plt.axhline(popt[-1])
plt.legend()
print(f'Ancho medido: {round(popt[1])} MHz')
def Lorentzian(f, A, gamma, x0):
return (A/np.pi)*0.5*gamma/(((f-x0)**2)+((0.5*gamma)**2)) + 30 #40 es el piso de ruido estimado
j = 7 #UV_cooling en 90 MHz
UV_cooling = 90
FreqsChosen = [2*f*1e-6 for f in Freqs[j]]
CountsChosen = Counts[j]
portion = 1
#popt, pcov = curve_fit(Lorentzian, FreqsChosen[int(portion*len(FreqsChosen)):], CountsChosen[int(portion*len(FreqsChosen)):], p0=[1e3, 40, 210, 100])
popt, pcov = curve_fit(Lorentzian, FreqsChosen[:int(portion*len(FreqsChosen))], CountsChosen[:int(portion*len(FreqsChosen))], p0=[1e3, 40, 210])
freqslong = np.arange(min(FreqsChosen)-10, max(FreqsChosen)+10, (FreqsChosen[1]-FreqsChosen[0])*0.01)
#plt.figure()
plt.plot([f-popt[2] for f in FreqsChosen], CountsChosen/max(CountsChosen), 'o', label='2.5 uW')
plt.plot([f-popt[2] for f in freqslong], Lorentzian(freqslong, *popt)/max(CountsChosen), label=f'FWHM {round(popt[1])} MHz')
#plt.axvline(popt[2]-22.1, linestyle='--', linewidth=1)
#plt.axvline(popt[2]+22.1, linestyle='--', linewidth=1)
#plt.axvline(2*UV_cooling, linestyle='--', linewidth=1)
plt.xlabel('Frecuencia (MHz)')
plt.ylabel('Cuentas')
#plt.axhline(popt[-1])
plt.legend()
print(f'Ancho medido: {round(popt[1])} MHz')
import h5py
import matplotlib.pyplot as plt
import numpy as np
import sys
import re
import ast
from scipy.optimize import curve_fit
import os
from scipy import interpolate
#C:\Users\Usuario\Documents\artiq\artiq_experiments\analisis\plots\20211019_CPT_primeras4DR\Data
# Solo levanto algunos experimentos
ALL_FILES = """000004475-IR_Scan_withcal_optimized
000004476-IR_Scan_withcal_optimized
000004477-IR_Scan_withcal_optimized
000004478-IR_Scan_withcal_optimized
000004479-IR_Scan_withcal_optimized
000004480-IR_Scan_withcal_optimized
000004481-IR_Scan_withcal_optimized
000004482-IR_Scan_withcal_optimized
000004483-IR_Scan_withcal_optimized
000004484-IR_Scan_withcal_optimized
000004485-IR_Scan_withcal_optimized"""
def SeeKeys(files):
for i, fname in enumerate(files.split()):
data = h5py.File(fname+'.h5', 'r') # Leo el h5: Recordar que nuestros datos estan en 'datasets'
print(fname)
print(list(data['datasets'].keys()))
print(SeeKeys(ALL_FILES))
#carpeta pc nico labo escritorio:
#C:\Users\Usuario\Documents\artiq\artiq_experiments\artiq_master\results\2021-07-14\16
Counts = []
Freqs = []
for i, fname in enumerate(ALL_FILES.split()):
print(i)
print(fname)
data = h5py.File(fname+'.h5', 'r') # Leo el h5: Recordar que nuestros datos estan en 'datasets'
# Aca hago algo repugnante para poder levantar los strings que dejamos
# que además tenian un error de tipeo al final. Esto no deberá ser necesario
# cuando se solucione el error este del guardado.
Freqs.append(np.array(data['datasets']['IR_Frequencies']))
Counts.append(np.array(data['datasets']['counts_spectrum']))
#%%
j = 10
plt.figure()
plt.plot([2*f*1e-6 for f in Freqs[j]], Counts[j], 'o-')
plt.xlabel('Frecuencia MHz)')
plt.ylabel('counts')
plt.grid()
......@@ -395,11 +395,26 @@ popt, pcov = curve_fit(FitEITpi, FreqsDRpi, CountsDRpi, sigma=np.sqrt(CountsDRpi
print(popt)
DetRepumpFit = popt[-1]
SatParRepumpFit = popt[2]
SatParDopFit = popt[0]
SatParDopFit = popt[1]
FittedEITpi = FitEITpi(freqslongpi, *popt)
#%%
plt.figure()
plt.errorbar(FreqsDRpi, CountsDRpi, yerr=1*np.sqrt(CountsDRpi), fmt='o', capsize=2, markersize=2)
plt.plot(freqslongpi, FittedEITpi)
ms = 20
cs = 10
lwidth = 10
fs = 30
plt.figure(figsize=(15,15))
plt.errorbar(FreqsDRpi, [(c-9.05e2)*100/7e4 for c in CountsDRpi], yerr=[1*np.sqrt(c)*100/7e4 for c in CountsDRpi], fmt='o', capsize=cs, markersize=ms, color='rebeccapurple')
plt.plot(freqslongpi, [(c-9.05e2)*100/7e4 for c in FittedEITpi], linewidth=lwidth, color='purple', alpha=0.7)
plt.xlabel('Detuning (MHz)', fontsize=fs)
plt.ylabel('Fluorescence (a.u.)', fontsize=fs)
plt.yticks([7, 8, 9, 10], fontsize=fs)
plt.xticks([-80, -60, -40, -20, 0], fontsize=fs)
#plt.title(f'Sdop: {round(popt[0], 2)}, Spr: {round(popt[1], 2)}, T: {round(popt[2]*1e3, 2)} mK, detDop: {DetDoppler} MHz')
#%%
......@@ -572,7 +587,7 @@ plt.title(f'Sdop: {round(popt[0], 2)}, Spr: {round(popt[1], 2)}, T: {round(popt[
#%%
import matplotlib
matplotlib.rcParams.update({'font.size': 18})
matplotlib.rcParams.update({'font.size': 10})
fig, ax = plt.subplots(1,2, figsize=(14,6))
......
......@@ -22,9 +22,6 @@ ALL_FILES = """000005717-IR_Scan_withcal_optimized
000005724-IR_Scan_withcal_optimized
000005725-IR_Scan_withcal_optimized
000005726-IR_Scan_withcal_optimized
000005728-IR_Scan_withcal_optimized
000005729-IR_Scan_withcal_optimized
000005730-IR_Scan_withcal_optimized
000005910-IR_Scan_withcal_optimized
000005911-IR_Scan_withcal_optimized
000005912-IR_Scan_withcal_optimized
......@@ -249,6 +246,10 @@ plt.grid()
#%%
"""
FIGURA PARA EL PAPER CPT 2 LASERES, 1 REPUMP
"""
#FITEOSSSSS
......@@ -287,24 +288,56 @@ CountsDRpi_1 = Counts[12]
freqslongpi_1 = np.arange(min(FreqsDRpi_1), max(FreqsDRpi_1)+FreqsDRpi_1[1]-FreqsDRpi_1[0], 0.1*(FreqsDRpi_1[1]-FreqsDRpi_1[0]))
def FitEITpi(freqs, SG, SP, scale, offset):
temp = 2e-3
MeasuredFreq, MeasuredFluo = GenerateNoisyCPT_fit(SG, sr, SP, gPS, gPD, DetDoppler, DetRepump, u, DopplerLaserLinewidth, RepumpLaserLinewidth, ProbeLaserLinewidth, temp, alpha, phidoppler, titadoppler, phiprobe, [titaprobe], phirepump, titarepump, freqs, plot=False, solvemode=1, detpvec=None, noiseamplitude=noiseamplitude)
FinalFluo = [f*scale + offset for f in MeasuredFluo]
def FitEITpi(freqs, SG, SP, T):
#temp = 4.7e-3
MeasuredFreq, MeasuredFluo = GenerateNoisyCPT_fit(SG, sr, SP, gPS, gPD, DetDoppler, DetRepump, u, DopplerLaserLinewidth, RepumpLaserLinewidth, ProbeLaserLinewidth, T, alpha, phidoppler, titadoppler, phiprobe, [titaprobe], phirepump, titarepump, freqs, plot=False, solvemode=1, detpvec=None, noiseamplitude=noiseamplitude)
FinalFluo = [f*5.986e4 + 2.0905e3 for f in MeasuredFluo]
return FinalFluo
popt, pcov = curve_fit(FitEITpi, FreqsDRpi_1, CountsDRpi_1, p0=[1, 10, 1e4, 1e4], bounds=(0, [2, 30, 1e6, 1e6]))
popt, pcov = curve_fit(FitEITpi, FreqsDRpi_1, CountsDRpi_1, p0=[1, 10, 4e-3], bounds=(0, [2, 30, 1e-2]))
print(popt)
#scale = popt[2]
#offset = popt[3]
scale = 5.986e4
offset = 2.0905e3
FittedEITpi_1 = FitEITpi(freqslongpi_1, *popt)
plt.figure()
plt.errorbar(FreqsDRpi_1, CountsDRpi_1, yerr=2*np.sqrt(CountsDRpi_1), fmt='o', capsize=2, markersize=2)
plt.plot(freqslongpi_1, FittedEITpi_1)
#plt.title(f'Sdop: {round(popt[0], 2)}, Spr: {round(popt[1], 2)}, T: {round(popt[2]*1e3, 2)} mK, detDop: {DetDoppler} MHz')
from scipy.signal import savgol_filter as sf
import seaborn as sns
colors=sns.color_palette("rocket", 3)
colorscomp = sns.color_palette("viridis", 10)
plt.style.use('seaborn-ticks')
winl = 9
po = 3
FiltCounts = np.array([(c-offset)*100/scale for c in sf(CountsDRpi_1, winl, po)])
ErrorCounts = np.array([1*np.sqrt(c/scale) for c in CountsDRpi_1])
plt.figure()
plt.plot(FreqsDRpi_1, FiltCounts, 'o', markersize=3, color='navy')
plt.fill_between(FreqsDRpi_1, FiltCounts+ErrorCounts, FiltCounts-ErrorCounts, color='lightblue')
plt.plot(freqslongpi_1, [(c-offset)*100/scale for c in FittedEITpi_1], label='Fitted spectrum', color='darkviolet')
plt.legend()
plt.xlim(-54, 28)
plt.xlabel('Detuning probe (MHz)')
plt.ylabel('Fluorescence (a.u.)')
plt.grid()
#%%
#Esto es un ajuste de lorenziana por las afueras de la curva y la resta con el ajuste CPT para ver la profundidad de los picos
......@@ -457,16 +490,28 @@ plt.plot(freqslongpi_3, FittedEITpi_3)
#%%
import seaborn as sns
sns.set_theme(style="whitegrid")
#sns.set_theme(style="whitegrid")
sns.set_palette("rocket")
NormCountsDRpi_2 = [(c-popt[3])/popt[2] for c in CountsDRpi_2]
NormCountsDRpi_3 = [(c-popt[3])/popt[2] for c in CountsDRpi_3]
NormCountsDRpi_1 = [(c-popt[3])/popt[2] for c in CountsDRpi_1]
#NormCountsDRpi_2 = [(c-popt[3])/popt[2] for c in CountsDRpi_2]
#NormCountsDRpi_3 = [(c-popt[3])/popt[2] for c in CountsDRpi_3]
#NormCountsDRpi_1 = [(c-popt[3])/popt[2] for c in CountsDRpi_1]
#NormFittedEITpi_2 = [(c-popt[3])/popt[2] for c in FittedEITpi_2]
#NormFittedEITpi_3 = [(c-popt[3])/popt[2] for c in FittedEITpi_3]
#NormFittedEITpi_1 = [(c-popt[3])/popt[2] for c in FittedEITpi_1]
NormCountsDRpi_2 = [(c-0)/popt[2] for c in CountsDRpi_2]
NormCountsDRpi_3 = [(c-0)/popt[2] for c in CountsDRpi_3]
NormCountsDRpi_1 = [(c-0)/popt[2] for c in CountsDRpi_1]
NormFittedEITpi_2 = [(c-0)/popt[2] for c in FittedEITpi_2]
NormFittedEITpi_3 = [(c-0)/popt[2] for c in FittedEITpi_3]
NormFittedEITpi_1 = [(c-0)/popt[2] for c in FittedEITpi_1]
NormFittedEITpi_2 = [(c-popt[3])/popt[2] for c in FittedEITpi_2]
NormFittedEITpi_3 = [(c-popt[3])/popt[2] for c in FittedEITpi_3]
NormFittedEITpi_1 = [(c-popt[3])/popt[2] for c in FittedEITpi_1]
plt.figure()
......@@ -477,7 +522,7 @@ plt.errorbar(FreqsDRpi_3, NormCountsDRpi_3, yerr=(np.sqrt(CountsDRpi_3))/popt[2]
plt.plot(freqslongpi_2, NormFittedEITpi_1, zorder=2)
plt.errorbar(FreqsDRpi_2, NormCountsDRpi_1, yerr=(np.sqrt(CountsDRpi_1))/popt[2], fmt='o', capsize=2, markersize=2, label=f'Sat Rep: 0', zorder=1)
plt.legend(markerscale=3, loc='lower right')
plt.ylim(0.018, 0.14)
#plt.ylim(0.018, 0.14)
plt.xlim(-55, 35)
plt.xlabel('Repump Detuning [MHz]')
plt.ylabel('Norm. Fluorescence [a.u.]')
......
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -189,6 +189,85 @@ plt.ylabel('counts')
plt.grid()
#plt.legend()
#%%
#Variando potencia UV
jvec = [16]
plt.figure()
i = 0
for j in jvec:
plt.errorbar([2*f*1e-6 for f in Freqs[j]], Counts[j], yerr=np.sqrt(Counts[j]), fmt='o', label=f'Amp Tisa: {AmpTisa[i]}', capsize=2, markersize=2)
i = i + 1
plt.xlabel('Frecuencia (MHz)')
plt.ylabel('counts')
plt.grid()
#plt.legend(
#%%
#FITEOSSSSS
#Variando la polarizacion del UV
phidoppler, titadoppler = 0, 90
phirepump, titarepump = 0, 0
phiprobe = 0
titaprobe = 90
T = 0.6e-3
sg = 0.49
sp = 4
sr = 0
DetRepump = 0
lw = 0.1
DopplerLaserLinewidth, RepumpLaserLinewidth, ProbeLaserLinewidth = lw, lw, lw #ancho de linea de los laseres
u = 33.5e6
B = (u/(2*np.pi))/c
correccion = 8 #con 8 fitea bien
offsetxpi = 440+1+correccion
DetDoppler = -14-correccion
FreqsDRpi_1 = [2*f*1e-6-offsetxpi+14 for f in Freqs[16]]
CountsDRpi_1 = Counts[16]
freqslongpi_1 = np.arange(min(FreqsDRpi_1), max(FreqsDRpi_1)+FreqsDRpi_1[1]-FreqsDRpi_1[0], 0.1*(FreqsDRpi_1[1]-FreqsDRpi_1[0]))
def FitEITpi(freqs, SG, SP):
temp = 2e-3
MeasuredFreq, MeasuredFluo = GenerateNoisyCPT_fit(SG, sr, SP, gPS, gPD, DetDoppler, DetRepump, u, DopplerLaserLinewidth, RepumpLaserLinewidth, ProbeLaserLinewidth, temp, alpha, phidoppler, titadoppler, phiprobe, [titaprobe], phirepump, titarepump, freqs, plot=False, solvemode=1, detpvec=None, noiseamplitude=noiseamplitude)
FinalFluo = [f*5.95591183e4 + 8.6e2 for f in MeasuredFluo]
return FinalFluo
popt, pcov = curve_fit(FitEITpi, FreqsDRpi_1, CountsDRpi_1, p0=[0.7, 4], bounds=(0, [2, 30]))
print(popt)
FittedEITpi_1 = FitEITpi(freqslongpi_1, *popt)
plt.figure()
plt.errorbar(FreqsDRpi_1, CountsDRpi_1, yerr=2*np.sqrt(CountsDRpi_1), fmt='o', capsize=2, markersize=2)
plt.plot(freqslongpi_1, FittedEITpi_1)
#plt.title(f'Sdop: {round(popt[0], 2)}, Spr: {round(popt[1], 2)}, T: {round(popt[2]*1e3, 2)} mK, detDop: {DetDoppler} MHz')
#%%
#AHORA SI: VARIANDO POTENCIA TISA, CON DOS IR EN SIGMAM M SIGMAM
......
......@@ -55,6 +55,21 @@ for i, fname in enumerate(ALL_FILES.split()):
UVCPTAmp.append(np.array(data['datasets']['UV_CPT_amp']))
No_measures.append(np.array(data['datasets']['no_measures']))
Counts_B = []
Freqs_B = []
for i, fname in enumerate(ALL_FILES.split()):
print(str(i) + ' - ' + fname)
#print(fname)
data = h5py.File(fname+'.h5', 'r') # Leo el h5: Recordar que nuestros datos estan en 'datasets'
# Aca hago algo repugnante para poder levantar los strings que dejamos
# que además tenian un error de tipeo al final. Esto no deberá ser necesario
# cuando se solucione el error este del guardado.
Freqs_B.append(np.array(data['datasets']['IR_Frequencies']))
Counts_B.append(np.array(data['datasets']['counts_spectrum']))
#%%
......@@ -127,6 +142,126 @@ plt.legend()
#%%
"""
Bloque para calibrar eje x en figura
"""
#Ajuste con el Tisa apagado primero para calibrar el eje X en el plot que voy a mostrar
phidoppler, titadoppler = 0, 90
phirepump, titarepump = 0, 0
phiprobe = 0
titaprobe = 90
T = 0.6e-3
sg = 0.544
sp = 4.5
sr = 0
DetRepump = 0
lw = 0.1
DopplerLaserLinewidth, RepumpLaserLinewidth, ProbeLaserLinewidth = lw, lw, lw #ancho de linea de los laseres
u = 32.5e6
B = (u/(2*np.pi))/c
correccion = 8 #con 8 fitea bien
offsetxpi = 440+1+correccion
DetDoppler = -5.0-correccion
FreqsDRpi_3 = [2*f*1e-6-offsetxpi+14 for f in Freqs_B[5]]
CountsDRpi_3 = Counts_B[5]
freqslongpi_3 = np.arange(min(FreqsDRpi_3), max(FreqsDRpi_3)+FreqsDRpi_3[1]-FreqsDRpi_3[0], 0.1*(FreqsDRpi_3[1]-FreqsDRpi_3[0]))
#[1.71811842e+04 3.34325038e-17]
def FitEITpi(freqs, SG, SP):
temp = 2e-3
MeasuredFreq, MeasuredFluo = GenerateNoisyCPT_fit(SG, sr, SP, gPS, gPD, DetDoppler, DetRepump, u, DopplerLaserLinewidth, RepumpLaserLinewidth, ProbeLaserLinewidth, temp, alpha, phidoppler, titadoppler, phiprobe, [titaprobe], phirepump, titarepump, freqs, plot=False, solvemode=1, detpvec=None, noiseamplitude=noiseamplitude)
FinalFluo = [f*6.554e4 + 1.863e3 for f in MeasuredFluo]
return FinalFluo
popt_tisaoff, pcov_tisaoff = curve_fit(FitEITpi, FreqsDRpi_3, CountsDRpi_3, p0=[0.5, 4.5], bounds=((0, 0), (2, 10)))
print(popt_tisaoff)
Sat_3 = popt_tisaoff[0]
Det_3 = popt_tisaoff[1]
FittedEITpi_3 = FitEITpi(freqslongpi_3, *popt_tisaoff)
plt.figure()
plt.errorbar(FreqsDRpi_3, CountsDRpi_3, yerr=2*np.sqrt(CountsDRpi_3), fmt='o', capsize=2, markersize=2)
plt.plot(freqslongpi_3, FittedEITpi_3)
#plt.title(f'Sdop: {round(popt[0], 2)}, Spr: {round(popt[1], 2)}, T: {round(popt[2]*1e3, 2)} mK, detDop: {DetDoppler} MHz')
FreqsCalibradas_B = FreqsDRpi_3
Scale_B = 6.554e4
Offset_B = 1.863e3
#%%
#Aca pongo solo 3 que son los mismos angulos de las curvas barriendo angulo TISA (para mostrar)
jselected_B = [3, 2, 4, 1, 5, 0]
Angsselected_B = ['Off', 0, 'Off', 15, 'Off', 90]
#jselected = [2, 6, 7, 4]
#Angsselected = ['Off', 0, 15, 90]
fig, ax = plt.subplots(1, 3, figsize=(20, 6))
cs = 1
ms = 4
fs = 25
ax[0].errorbar(FreqsCalibradas_B, Counts_B[jselected_B[1]], yerr=np.sqrt(Counts_B[jselected_B[1]]), fmt='o', label='TISA ON', capsize=cs, markersize=ms)
ax[0].errorbar(FreqsCalibradas_B, Counts_B[jselected_B[0]], yerr=np.sqrt(Counts_B[jselected_B[0]]), fmt='o', label='TISA OFF', capsize=cs, markersize=ms)
#ax[0].set_ylim(0, 2100)
ax[0].set_title(f'TISA ang: {Angsselected_B[1]}º', fontsize=fs)
ax[0].set_xlabel('Detuning (MHz)', fontsize=fs)
ax[0].set_ylabel('Counts', fontsize=fs)
#ax[0].set_yticks(np.arange(0, 2500, 500))
#ax[0].set_yticklabels(np.arange(0, 2500, 500), fontsize=fs)
#ax[0].set_xticks(np.arange(-50, 50, 25))
#ax[0].set_xticklabels(np.arange(-50, 50, 25), fontsize=fs)
ax[0].grid()
ax[1].errorbar(FreqsCalibradas_B, Counts_B[jselected_B[3]], yerr=np.sqrt(Counts_B[jselected_B[2]]), fmt='o', label='TISA ON', capsize=cs, markersize=ms)
ax[1].errorbar(FreqsCalibradas_B, Counts_B[jselected_B[2]], yerr=np.sqrt(Counts_B[jselected_B[0]]), fmt='o', label='TISA OFF', capsize=cs, markersize=ms)
#ax[1].set_ylim(0, 2100)
ax[1].set_title(f'TISA ang: {Angsselected_B[3]}º', fontsize=fs)
ax[1].set_xlabel('Detuning (MHz)', fontsize=fs)
ax[1].set_ylabel('Counts', fontsize=fs)
#ax[1].set_yticks(np.arange(0, 2500, 500))
#ax[1].set_yticklabels(np.arange(0, 2500, 500), fontsize=fs)
#ax[1].set_xticks(np.arange(-50, 50, 25))
#ax[1].set_xticklabels(np.arange(-50, 50, 25), fontsize=fs)
ax[1].grid()
ax[2].errorbar(FreqsCalibradas_B, Counts_B[jselected_B[5]], yerr=np.sqrt(Counts_B[jselected_B[4]]), fmt='o', label='TISA ON', capsize=cs, markersize=ms)
ax[2].errorbar(FreqsCalibradas_B, Counts_B[jselected_B[4]], yerr=np.sqrt(Counts_B[jselected_B[0]]), fmt='o', label='TISA OFF', capsize=cs, markersize=ms)
#ax[2].set_ylim(0, 2100)
ax[2].set_title(f'TISA ang: {Angsselected_B[5]}º', fontsize=fs)
ax[2].set_xlabel('Detuning (MHz)', fontsize=fs)
ax[2].set_ylabel('Counts', fontsize=fs)
#ax[2].set_yticks(np.arange(0, 2500, 500))
#ax[2].set_yticklabels(np.arange(0, 2500, 500), fontsize=fs)
#ax[2].set_xticks(np.arange(-50, 50, 25))
#ax[2].set_xticklabels(np.arange(-50, 50, 25), fontsize=fs)
ax[2].grid()
fig.tight_layout()
#%%
#Aca veo como poniendo tisa en sigma se rompen las 4 resonancias oscuras
......
......@@ -8,7 +8,7 @@ from scipy.optimize import curve_fit
import os
from scipy import interpolate
#BUENAS MEDICIONES VARIANDO PARAMETROS
#Mediciones barriendo angulo del TISA y viendo kicking de resonancias oscuras
#C:\Users\Usuario\Documents\artiq\artiq_experiments\analisis\plots\20220106_CPT_DosLaseres_v08_TISA_DR\Data
......@@ -58,10 +58,23 @@ for i, fname in enumerate(ALL_FILES.split()):
No_measures.append(np.array(data['datasets']['no_measures']))
Counts_A = []
Freqs_A = []
for i, fname in enumerate(ALL_FILES.split()):
print(str(i) + ' - ' + fname)
#print(fname)
data = h5py.File(fname+'.h5', 'r') # Leo el h5: Recordar que nuestros datos estan en 'datasets'
# Aca hago algo repugnante para poder levantar los strings que dejamos
# que además tenian un error de tipeo al final. Esto no deberá ser necesario
# cuando se solucione el error este del guardado.
Freqs_A.append(np.array(data['datasets']['IR_Frequencies']))
Counts_A.append(np.array(data['datasets']['counts_spectrum']))
#%%
#Barriendo angulo del IR con tisa apagado
#Barriendo angulo del IR con tisa apagado y prendido
jvec = [2, 6, 7, 5, 8, 3, 9, 4]
Angs = ['Off', 0, 15, 30, 45, 60, 75, 90]
......@@ -82,8 +95,12 @@ plt.grid()
plt.legend()
#%%
jselected = [2, 6, 5, 3, 4]
Angsselected = ['Off', 0, 30, 60, 90]
#jselected = [2, 6, 5, 3, 4]
#Angsselected = ['Off', 0, 30, 60, 90]
jselected = [2, 6, 7, 3, 4]
Angsselected = ['Off', 0, 15, 60, 90]
fig, ax = plt.subplots(2, 2)
......@@ -130,9 +147,1034 @@ fig.subplots_adjust(top=0.9, left=0.1, right=0.9, bottom=0.01) # create some sp
ax.flatten()[-2].legend(loc='upper center', bbox_to_anchor=(1.1, -0.4), ncol=3)
#%%
#from EITfit.threeLevel_2repumps_AnalysisFunctions import CalculoTeoricoDarkResonances_8levels, GetMinimaInfo, GetPlotsofFluovsAngle_8levels, PerformExperiment_8levels, FindDRFrequencies, FindRelativeFluorescencesOfDR, GenerateNoisyCPT, SmoothNoisyCPT, GetFinalMaps, GenerateNoisyCPT_fixedRabi, GenerateNoisyCPT_fit
#from EITfit.threeLevel_2repumps_AnalysisFunctions import MeasureRelativeFluorescenceFromCPT, IdentifyPolarizationCoincidences, RetrieveAbsoluteCoincidencesBetweenMaps, GetClosestIndex
#from scipy.optimize import curve_fit
#Ajuste con el Tisa apagado primero para calibrar el eje X en el plot que voy a mostrar
phidoppler, titadoppler = 0, 90
phirepump, titarepump = 0, 0
phiprobe = 0
titaprobe = 90
T = 0.6e-3
sg = 0.544
sp = 4.5
sr = 0
DetRepump = 0
lw = 0.1
DopplerLaserLinewidth, RepumpLaserLinewidth, ProbeLaserLinewidth = lw, lw, lw #ancho de linea de los laseres
u = 33.5e6
c=3e8
B = (u/(2*np.pi))/c
correccion = 4 #con 8 fitea bien
offsetxpi = 440+1+correccion
DetDoppler = -5.5-correccion
FreqsDRpi_3 = [2*f*1e-6-offsetxpi+14 for f in Freqs_A[2]]
CountsDRpi_3 = Counts_A[2]
freqslongpi_3 = np.arange(min(FreqsDRpi_3), max(FreqsDRpi_3)+FreqsDRpi_3[1]-FreqsDRpi_3[0], 0.1*(FreqsDRpi_3[1]-FreqsDRpi_3[0]))
#[1.71811842e+04 3.34325038e-17]
def FitEITpi(freqs, SG, SP, scale, offset):
temp = 2e-3
MeasuredFreq, MeasuredFluo = GenerateNoisyCPT_fit(SG, sr, SP, gPS, gPD, DetDoppler, DetRepump, u, DopplerLaserLinewidth, RepumpLaserLinewidth, ProbeLaserLinewidth, temp, alpha, phidoppler, titadoppler, phiprobe, [titaprobe], phirepump, titarepump, freqs, plot=False, solvemode=1, detpvec=None, noiseamplitude=noiseamplitude)
FinalFluo = [f*scale + offset for f in MeasuredFluo]
return FinalFluo
popt_tisaoff, pcov_tisaoff = curve_fit(FitEITpi, FreqsDRpi_3, CountsDRpi_3, p0=[0.5, 4.5, 1e4, 1e5], bounds=((0, 0, 0, 0), (2, 10, 1e6, 1e6)))
print(popt_tisaoff)
Sat_3 = popt_tisaoff[0]
Det_3 = popt_tisaoff[1]
FittedEITpi_3 = FitEITpi(freqslongpi_3, *popt_tisaoff)
plt.figure()
plt.errorbar(FreqsDRpi_3, CountsDRpi_3, yerr=2*np.sqrt(CountsDRpi_3), fmt='o', capsize=2, markersize=2)
plt.plot(freqslongpi_3, FittedEITpi_3)
#plt.title(f'Sdop: {round(popt[0], 2)}, Spr: {round(popt[1], 2)}, T: {round(popt[2]*1e3, 2)} mK, detDop: {DetDoppler} MHz')
FreqsCalibradas_A = FreqsDRpi_3
Scale_A = popt_tisaoff[2]
Offset_A = popt_tisaoff[3]
#%%
"""
FIGURA PARA EL PAPER
Esto plotea, arriba, 3 plots para 3 angulos distintos de la polarizacion del TISA (el que no scaneo), al prenderlo y al apagarlo.
Esto muestra esquematicamente la DR kicking segun la polarización del láser.
Abajo, 3 plots para 3 angulos distintos de la polarizacion del laser IR (el que scaneo), al prender y apagar
el TISA (el que no scaneo). Esto muestra como aparecen las DR pi, que no se ven bien en caso contrario.
Para correr esto, hay que correr:
El bloque anterior para calibrar el eje X de frecuencia de los plots superiores
El bloque para calibrar figura del 20211223
"""
#Aca pongo solo 3 que son los mismos angulos de las curvas barriendo angulo IR
jselected_A = [2, 6, 7, 3, 4]
Angsselected_A = ['Off', 0, 15, 60, 90]
#jselected = [2, 6, 7, 4]
#Angsselected = ['Off', 0, 15, 90]
fig, ax = plt.subplots(2, 3, figsize=(20, 12))
cs = 1
ms = 4
fs = 25
xscale = np.arange(-40, 10, 20)
ax[1,0].errorbar(FreqsCalibradas_A, [(c-Offset_A)*100/Scale_A for c in Counts_A[jselected_A[0]]], yerr=[np.sqrt(c)*100/Scale_A for c in Counts_A[jselected_A[0]]], fmt='o', label='TISA OFF', capsize=cs, markersize=ms)
ax[1,0].errorbar(FreqsCalibradas_A, [(c-Offset_A)*100/Scale_A for c in Counts_A[jselected_A[1]]], yerr=[np.sqrt(c)*100/Scale_A for c in Counts_A[jselected_A[1]]], fmt='o', label='TISA ON', capsize=cs, markersize=ms)
ax[1,0].set_xlim(-51, 15)
ax[1,0].set_ylim(0, 14)
ax[1,0].set_title(f'TISA angle: {Angsselected_A[1]}º', fontsize=fs)
ax[1,0].set_xlabel('Detuning (MHz)', fontsize=fs)
ax[1,0].set_ylabel('Fluorescence (a.u.)', fontsize=fs)
ax[1,0].set_yticks(np.arange(0, 15, 5))
ax[1,0].set_yticklabels(np.arange(0, 15, 5), fontsize=fs)
ax[1,0].set_xticks(xscale)
ax[1,0].set_xticklabels(xscale, fontsize=fs)
ax[1,0].grid()
ax[1,1].errorbar(FreqsCalibradas_A, [(c-Offset_A)*100/Scale_A for c in Counts_A[jselected_A[0]]], yerr=[np.sqrt(c)*100/Scale_A for c in Counts_A[jselected_A[0]]], fmt='o', label='TISA OFF', capsize=cs, markersize=ms)
ax[1,1].errorbar(FreqsCalibradas_A, [(c-Offset_A)*100/Scale_A for c in Counts_A[jselected_A[2]]], yerr=[np.sqrt(c)*100/Scale_A for c in Counts_A[jselected_A[2]]], fmt='o', label='TISA ON', capsize=cs, markersize=ms)
ax[1,1].set_xlim(-51, 15)
ax[1,1].set_ylim(0, 14)
ax[1,1].set_title(f'TISA angle: {Angsselected_A[2]}º', fontsize=fs)
ax[1,1].set_xlabel('Detuning (MHz)', fontsize=fs)
#ax[1,1].set_ylabel('Fluorescence (a.u.)', fontsize=fs)
ax[1,1].set_yticks(np.arange(0, 15, 5))
ax[1,1].set_yticklabels(np.arange(0, 15, 5), fontsize=fs)
ax[1,1].set_xticks(xscale)
ax[1,1].set_xticklabels(xscale, fontsize=fs)
ax[1,1].grid()
ax[1,2].errorbar(FreqsCalibradas_A, [(c-Offset_A)*100/Scale_A for c in Counts_A[jselected_A[0]]], yerr=[np.sqrt(c)*100/Scale_A for c in Counts_A[jselected_A[0]]], fmt='o', label='TISA OFF', capsize=cs, markersize=ms)
ax[1,2].errorbar(FreqsCalibradas_A, [(c-Offset_A)*100/Scale_A for c in Counts_A[jselected_A[4]]], yerr=[np.sqrt(c)*100/Scale_A for c in Counts_A[jselected_A[4]]], fmt='o', label='TISA ON', capsize=cs, markersize=ms)
ax[1,2].set_xlim(-51, 15)
ax[1,2].set_ylim(0, 14)
ax[1,2].set_title(f'TISA angle: {Angsselected_A[4]}º', fontsize=fs)
ax[1,2].set_xlabel('Detuning (MHz)', fontsize=fs)
#ax[1,2].set_ylabel('Fluorescence (a.u.)', fontsize=fs)
ax[1,2].set_yticks(np.arange(0, 15, 5))
ax[1,2].set_yticklabels(np.arange(0, 15, 5), fontsize=fs)
ax[1,2].set_xticks(xscale)
ax[1,2].set_xticklabels(xscale, fontsize=fs)
ax[1,2].grid()
jselected_B = [3, 2, 4, 1, 5, 0]
Angsselected_B = ['Off', 0, 'Off', 15, 'Off', 90]
#jselected = [2, 6, 7, 4]
#Angsselected = ['Off', 0, 15, 90]
cs = 1
ms = 4
fs = 25
Offset_B=0 #agrego ad hoc porque el offset del ajuste no da bien
ax[0,0].errorbar(FreqsCalibradas_B, [(c-Offset_B)*100/Scale_B for c in Counts_B[jselected_B[1]]], yerr=[2*np.sqrt(c)*100/Scale_B for c in Counts_B[jselected_B[1]]], fmt='o', label='TISA ON', capsize=cs, markersize=ms)
ax[0,0].errorbar(FreqsCalibradas_B, [(c-Offset_B)*100/Scale_B for c in Counts_B[jselected_B[0]]], yerr=[2*np.sqrt(c)*100/Scale_B for c in Counts_B[jselected_B[0]]], fmt='o', label='TISA OFF', capsize=cs, markersize=ms)
ax[0,0].set_xlim(-51, 15)
ax[0,0].set_ylim(0, 16.5)
ax[0,0].set_title(f'IR angle: {Angsselected_B[1]}º', fontsize=fs)
ax[0,0].set_xlabel('Detuning (MHz)', fontsize=fs)
ax[0,0].set_ylabel('Fluorescence (a.u.)', fontsize=fs)
ax[0,0].set_yticks(np.arange(0, 20, 5))
ax[0,0].set_yticklabels(np.arange(0, 20, 5), fontsize=fs)
ax[0,0].set_xticks(xscale)
ax[0,0].set_xticklabels(xscale, fontsize=fs)
ax[0,0].grid()
ax[0,1].errorbar(FreqsCalibradas_B, [(c-Offset_B)*100/Scale_B for c in Counts_B[jselected_B[3]]], yerr=[2*np.sqrt(c)*100/Scale_B for c in Counts_B[jselected_B[3]]], fmt='o', label='TISA ON', capsize=cs, markersize=ms)
ax[0,1].errorbar(FreqsCalibradas_B, [(c-Offset_B)*100/Scale_B for c in Counts_B[jselected_B[2]]], yerr=[2*np.sqrt(c)*100/Scale_B for c in Counts_B[jselected_B[2]]], fmt='o', label='TISA OFF', capsize=cs, markersize=ms)
ax[0,1].set_xlim(-51, 15)
ax[0,1].set_ylim(0, 16.5)
ax[0,1].set_title(f'IR angle: {Angsselected_B[3]}º', fontsize=fs)
ax[0,1].set_xlabel('Detuning (MHz)', fontsize=fs)
#ax[0,1].set_ylabel('Fluorescence (a.u.)', fontsize=fs)
ax[0,1].set_yticks(np.arange(0, 20, 5))
ax[0,1].set_yticklabels(np.arange(0, 20, 5), fontsize=fs)
ax[0,1].set_xticks(xscale)
ax[0,1].set_xticklabels(xscale, fontsize=fs)
ax[0,1].grid()
ax[0,2].errorbar(FreqsCalibradas_B, [(c-Offset_B)*100/Scale_B for c in Counts_B[jselected_B[5]]], yerr=[2*np.sqrt(c)*100/Scale_B for c in Counts_B[jselected_B[5]]], fmt='o', label='TISA ON', capsize=cs, markersize=ms)
ax[0,2].errorbar(FreqsCalibradas_B, [(c-Offset_B)*100/Scale_B for c in Counts_B[jselected_B[4]]], yerr=[2*np.sqrt(c)*100/Scale_B for c in Counts_B[jselected_B[4]]], fmt='o', label='TISA OFF', capsize=cs, markersize=ms)
ax[0,2].set_xlim(-51, 15)
ax[0,2].set_ylim(0, 16.5)
ax[0,2].set_title(f'IR angle: {Angsselected_B[5]}º', fontsize=fs)
ax[0,2].set_xlabel('Detuning (MHz)', fontsize=fs)
#ax[0,2].set_ylabel('Fluorescence (a.u.)', fontsize=fs)
ax[0,2].set_yticks(np.arange(0, 20, 5))
ax[0,2].set_yticklabels(np.arange(0, 20, 5), fontsize=fs)
ax[0,2].set_xticks(xscale)
ax[0,2].set_xticklabels(xscale, fontsize=fs)
ax[0,2].grid()
fig.tight_layout()
#fig.subplots_adjust(top=0.9, left=0.1, right=0.9, bottom=0.01) # create some space below the plots by increasing the bottom-value
#ax.flatten()[-2].legend(loc='upper center', bbox_to_anchor=(1.1, -0.4), ncol=3)
#%%
"""
FIGURA PARA EL PAPER VERSION 2
Esto plotea, arriba, 3 plots para 3 angulos distintos de la polarizacion del TISA (el que no scaneo), al prenderlo y al apagarlo.
Esto muestra esquematicamente la DR kicking segun la polarización del láser.
Abajo, 3 plots para 3 angulos distintos de la polarizacion del laser IR (el que scaneo), al prender y apagar
el TISA (el que no scaneo). Esto muestra como aparecen las DR pi, que no se ven bien en caso contrario.
Para correr esto, hay que correr:
El bloque anterior para calibrar el eje X de frecuencia de los plots superiores
El bloque para calibrar figura del 20211223
"""
from scipy.signal import savgol_filter as sf
import seaborn as sns
sns.set_theme(style='white')
#Aca pongo solo 3 que son los mismos angulos de las curvas barriendo angulo IR
jselected_A = [2, 6, 7, 3, 4]
Angsselected_A = ['Off', 0, 15, 60, 90]
#jselected = [2, 6, 7, 4]
#Angsselected = ['Off', 0, 15, 90]
fig, ax = plt.subplots(1, 2, figsize=(24, 12))
cs = 1
ms = 8
fs = 40
xscale = np.arange(-40, 10, 20)
winl = 13
po = 3
Counts_A_corr = Counts_A[jselected_A[1]]
Counts_A_corr[82] = 1620
Counts_A_corr[83] = 1625
Counts_A_corr[84] = 1631
#ax[1].errorbar(FreqsCalibradas_A, [(c-Offset_A)*100/Scale_A for c in Counts_A[jselected_A[0]]], yerr=[np.sqrt(c)*100/Scale_A for c in Counts_A[jselected_A[0]]], fmt='o', label='TISA OFF', capsize=cs, markersize=ms)
#ax[1].errorbar(FreqsCalibradas_A, [(c-Offset_A)*100/Scale_A for c in Counts_A[jselected_A[1]]], yerr=[np.sqrt(c)*100/Scale_A for c in Counts_A[jselected_A[1]]], fmt='o', label='TISA ON', capsize=cs, markersize=ms)
#ax[1].errorbar(FreqsCalibradas_A, [(c-Offset_A)*100/Scale_A for c in Counts_A[jselected_A[0]]], yerr=[np.sqrt(c)*100/Scale_A for c in Counts_A[jselected_A[0]]], fmt='o', label='TISA OFF', capsize=cs, markersize=ms)
#ax[1].errorbar(FreqsCalibradas_A, [(c-Offset_A)*100/Scale_A for c in Counts_A[jselected_A[4]]], yerr=[np.sqrt(c)*100/Scale_A for c in Counts_A[jselected_A[4]]], fmt='o', label='TISA ON', capsize=cs, markersize=ms)
ax[1].plot(FreqsCalibradas_A, sf([(c-Offset_A)*100/Scale_A for c in Counts_A_corr], winl, po), '-o', label=r'$\alpha_{rep}=0$º', markersize=ms, color='darkgreen')
ax[1].plot(FreqsCalibradas_A, sf([(c-Offset_A)*100/Scale_A for c in Counts_A[jselected_A[4]]], winl, po), '-o', label=r'$\alpha_{rep}=90º$', markersize=ms, color='maroon')
ax[1].plot(FreqsCalibradas_A, sf([(c-Offset_A)*100/Scale_A for c in Counts_A[jselected_A[0]]], winl, po), '-o', label='Repumper off', markersize=ms, color='red')
#ax[1].plot(FreqsCalibradas_A, sf([(c-Offset_A)*100/Scale_A for c in Counts_A[jselected_A[0]]], winl, po), '-o', label='TISA OFF', markersize=ms)
ax[1].fill_between(FreqsCalibradas_A, sf([(c-Offset_A)*100/Scale_A for c in Counts_A[jselected_A[0]]], winl, po)+sf([np.sqrt(c)*100/Scale_A for c in Counts_A[jselected_A[0]]], winl, po), sf([(c-Offset_A)*100/Scale_A for c in Counts_A[jselected_A[0]]], winl, po)-sf([np.sqrt(c)*100/Scale_A for c in Counts_A[jselected_A[0]]], winl, po), color='lightsalmon')
ax[1].fill_between(FreqsCalibradas_A, sf([(c-Offset_A)*100/Scale_A for c in Counts_A_corr], winl, po)+sf([np.sqrt(c)*100/Scale_A for c in Counts_A_corr], winl, po), sf([(c-Offset_A)*100/Scale_A for c in Counts_A_corr], winl, po)-sf([np.sqrt(c)*100/Scale_A for c in Counts_A_corr], winl, po), color='paleturquoise')
ax[1].fill_between(FreqsCalibradas_A, sf([(c-Offset_A)*100/Scale_A for c in Counts_A[jselected_A[4]]], winl, po)+sf([np.sqrt(c)*100/Scale_A for c in Counts_A[jselected_A[4]]], winl, po), sf([(c-Offset_A)*100/Scale_A for c in Counts_A[jselected_A[4]]], winl, po)-sf([np.sqrt(c)*100/Scale_A for c in Counts_A[jselected_A[4]]], winl, po), color='thistle')
ax[1].set_xlim(-51, 15)
ax[1].set_ylim(0, 14)
ax[1].set_title(r'$\alpha_{pr}=90º$', fontsize=fs)
ax[1].set_xlabel('Probe detuning (MHz)', fontsize=fs)
ax[1].set_ylabel('Fluorescence (a.u.)', fontsize=fs)
ax[1].set_yticks(np.arange(0, 15, 5))
ax[1].set_yticklabels(np.arange(0, 15, 5), fontsize=fs)
ax[1].set_xticks(xscale)
ax[1].set_xticklabels(xscale, fontsize=fs)
ax[1].grid()
lgnd = ax[1].legend(loc='upper left', prop={'size': 26}, markerscale=2)
jselected_B = [3, 2, 4, 1, 5, 0]
Angsselected_B = ['Off', 0, 'Off', 15, 'Off', 90]
#jselected = [2, 6, 7, 4]
#Angsselected = ['Off', 0, 15, 90]
cs = 1
ms = 8
fs = 40
Offset_B=0 #agrego ad hoc porque el offset del ajuste no da bien
Counts_B_corr1 = Counts_B[jselected_B[0]]
Counts_B_corr1[44] = 5536
Counts_B_corr2 = Counts_B[jselected_B[4]]
Counts_B_corr2[47] = 6115
#ax[0].errorbar(FreqsCalibradas_B, [(c-Offset_B)*100/Scale_B for c in Counts_B[jselected_B[1]]], yerr=[2*np.sqrt(c)*100/Scale_B for c in Counts_B[jselected_B[1]]], fmt='o', label='TISA ON', capsize=cs, markersize=ms)
#ax[0].errorbar(FreqsCalibradas_B, [(c-Offset_B)*100/Scale_B for c in Counts_B[jselected_B[0]]], yerr=[2*np.sqrt(c)*100/Scale_B for c in Counts_B[jselected_B[0]]], fmt='o', label='TISA OFF', capsize=cs, markersize=ms)
#ax[0].errorbar(FreqsCalibradas_B, [(c-Offset_B-1000)*100/Scale_B for c in Counts_B[jselected_B[5]]], yerr=[2*np.sqrt(c)*100/Scale_B for c in Counts_B[jselected_B[5]]], fmt='o', label='TISA ON', capsize=cs, markersize=ms)
#ax[0].errorbar(FreqsCalibradas_B, [(c-Offset_B)*100/Scale_B for c in Counts_B[jselected_B[4]]], yerr=[2*np.sqrt(c)*100/Scale_B for c in Counts_B[jselected_B[4]]], fmt='o', label='TISA OFF', capsize=cs, markersize=ms)
ax[0].plot(FreqsCalibradas_B, sf([(c-Offset_B)*100/Scale_B for c in Counts_B_corr2], winl, po), '-o', label=r'$\alpha_{pr}=90º$, repumper ON', markersize=ms, color='maroon')
ax[0].plot(FreqsCalibradas_B, sf([(c-Offset_B)*100/Scale_B for c in Counts_B_corr1], winl, po), '-o', label=r'$\alpha_{pr}=5º$, repumper ON', markersize=ms, color='midnightblue')
ax[0].plot(FreqsCalibradas_B, sf([(c-Offset_B-1000)*100/Scale_B for c in Counts_B[jselected_B[5]]], winl, po), '-o', label=r'$\alpha_{pr}=90º$, repumper OFF', markersize=ms, color='red')
ax[0].plot(FreqsCalibradas_B, sf([(c-Offset_B)*100/Scale_B for c in Counts_B[jselected_B[1]]], winl, po), '-o', label=r'$\alpha_{pr}=5º$, rep OFF', markersize=ms, color='royalblue')
sqrtfactor = 2
ax[0].fill_between(FreqsCalibradas_B, sf([(c-Offset_B)*100/Scale_B for c in Counts_B[jselected_B[1]]], winl, po)+sf([sqrtfactor*np.sqrt(c)*100/Scale_B for c in Counts_B[jselected_B[1]]], winl, po), sf([(c-Offset_B)*100/Scale_B for c in Counts_B[jselected_B[1]]], winl, po)-sf([sqrtfactor*np.sqrt(c)*100/Scale_B for c in Counts_B[jselected_B[1]]], winl, po), color='lightsalmon')
ax[0].fill_between(FreqsCalibradas_B, sf([(c-Offset_B)*100/Scale_B for c in Counts_B_corr1], winl, po)+sf([sqrtfactor*np.sqrt(c)*100/Scale_B for c in Counts_B_corr1], winl, po), sf([(c-Offset_B)*100/Scale_B for c in Counts_B_corr1], winl, po)-sf([sqrtfactor*np.sqrt(c)*100/Scale_B for c in Counts_B_corr1], winl, po), color='plum')
ax[0].fill_between(FreqsCalibradas_B, sf([(c-Offset_B-1000)*100/Scale_B for c in Counts_B[jselected_B[5]]], winl, po)+sf([sqrtfactor*np.sqrt(c)*100/Scale_B for c in Counts_B[jselected_B[5]]], winl, po), sf([(c-Offset_B-1000)*100/Scale_B for c in Counts_B[jselected_B[5]]], winl, po)-sf([sqrtfactor*np.sqrt(c)*100/Scale_B for c in Counts_B[jselected_B[5]]], winl, po), color='lightsalmon')
ax[0].fill_between(FreqsCalibradas_B, sf([(c-Offset_B)*100/Scale_B for c in Counts_B_corr2], winl, po)+sf([sqrtfactor*np.sqrt(c)*100/Scale_B for c in Counts_B_corr2], winl, po), sf([(c-Offset_B)*100/Scale_B for c in Counts_B_corr2], winl, po)-sf([sqrtfactor*np.sqrt(c)*100/Scale_B for c in Counts_B_corr2], winl, po), color='thistle')
ax[0].set_xlim(-51, 15)
ax[0].set_ylim(0, 16.5)
ax[0].set_title(r'$\alpha_{rep}=90º$', fontsize=fs)
ax[0].set_xlabel('Probe detuning (MHz)', fontsize=fs)
ax[0].set_ylabel('Fluorescence (a.u.)', fontsize=fs)
ax[0].set_yticks(np.arange(0, 20, 5))
ax[0].set_yticklabels(np.arange(0, 20, 5), fontsize=fs)
ax[0].set_xticks(xscale)
ax[0].set_xticklabels(xscale, fontsize=fs)
ax[0].grid()
lgnd = ax[0].legend(loc='upper left', prop={'size': 26}, markerscale=2)
#fig.tight_layout()
#fig.subplots_adjust(top=0.9, left=0.1, right=0.9, bottom=0.01) # create some space below the plots by increasing the bottom-value
#ax.flatten()[-2].legend(loc='upper center', bbox_to_anchor=(1.1, -0.4), ncol=3)
#%%
plt.figure()
plt.errorbar([2*f*1e-6 for f in Freqs[jselected[0]]], Counts[jselected[0]], yerr=np.sqrt(Counts[jselected[0]]), fmt='o', label='TISA OFF', capsize=cs, markersize=ms)
#%%
"""
Este bloque agarra las 7 mediciones con el tisa prendido barriendo angulo, entre 0º y 90º,
y les hace un fiteo para buscar parametro de saturacion y detuning. a ese fiteo le busca los minimos locales
que son las 4 resonancias oscuras (DR), y en las ubicaciones de esos minimos calcula la fluorescencia medida.
ese valor de fluorescencia es el que, en otro codigo, se usa para comparar con el valor teorico con su error.
si encuentra solo 3, calcula el 4to a ojo poniendo un indice de donde deberia estar ese minimo, porque
puede haber solo 3 porque al prender el tisa hay un kickeo de resonancias oscuras.
"""
from scipy.signal import argrelextrema
SatsTisa = []
DetsTisa = []
AngsTisa = []
FluosMinis = []
FluosMinisError = []
#Ajuste con el Tisa prendido en 0º
phidoppler, titadoppler = 0, 90
phirepump, titarepump = 0, 0
phiprobe = 0
titaprobe = 90
T = 0.6e-3
sg = popt_tisaoff[0]
sp = popt_tisaoff[1]
sr = 0
DetRepump = 0
lw = 0.1
DopplerLaserLinewidth, RepumpLaserLinewidth, ProbeLaserLinewidth = lw, lw, lw #ancho de linea de los laseres
u = 31.9e6
B = (u/(2*np.pi))/c
correccion = 4 #con 8 fitea bien
offsetxpi = 440+1+correccion
DetDoppler = -5.1-correccion
FreqsDRpi_3 = [2*f*1e-6-offsetxpi+14 for f in Freqs[6]]
CountsDRpi_3 = Counts[6]
freqslongpi_3 = np.arange(min(FreqsDRpi_3), max(FreqsDRpi_3)+FreqsDRpi_3[1]-FreqsDRpi_3[0], 0.1*(FreqsDRpi_3[1]-FreqsDRpi_3[0]))
#[1.71811842e+04 3.34325038e-17]
def FitEITpi(freqs, SR, DETREPUMP):
temp = 2e-3
MeasuredFreq, MeasuredFluo = GenerateNoisyCPT_fit(sg, SR, sp, gPS, gPD, DetDoppler, DETREPUMP, u, DopplerLaserLinewidth, RepumpLaserLinewidth, ProbeLaserLinewidth, temp, alpha, phidoppler, titadoppler, phiprobe, [titaprobe], phirepump, titarepump, freqs, plot=False, solvemode=1, detpvec=None, noiseamplitude=noiseamplitude)
FinalFluo = [f*popt_tisaoff[2] + popt_tisaoff[3] for f in MeasuredFluo]
return FinalFluo
popt, pcov = curve_fit(FitEITpi, FreqsDRpi_3, CountsDRpi_3, p0=[10, 100], bounds=((0, 0), (50, 300)))
print(popt)
Sat_3 = popt[0]
Det_3 = popt[1]
FittedEITpi_3 = FitEITpi(freqslongpi_3, *popt)
plt.figure()
plt.errorbar(FreqsDRpi_3, CountsDRpi_3, yerr=2*np.sqrt(CountsDRpi_3), fmt='o', capsize=2, markersize=2)
plt.plot(freqslongpi_3, FittedEITpi_3)
#plt.title(f'Sdop: {round(popt[0], 2)}, Spr: {round(popt[1], 2)}, T: {round(popt[2]*1e3, 2)} mK, detDop: {DetDoppler} MHz')
SatsTisa.append(popt[0])
DetsTisa.append(popt[1])
AngsTisa.append(titarepump)
vector = [((c- popt_tisaoff[3])/ popt_tisaoff[2])*100 for c in CountsDRpi_3]
minsss = argrelextrema(np.array(FittedEITpi_3), np.less)
minsssmeas = [int(m*len(vector)/len(FittedEITpi_3)) for m in minsss[0]]
Fluosminis = [[((c- popt_tisaoff[3])/ popt_tisaoff[2])*100 for c in CountsDRpi_3][m] for m in minsssmeas]
FluosminisError = [[((np.sqrt(c))/ popt_tisaoff[2])*100 for c in CountsDRpi_3][m] for m in minsssmeas]
if len(Fluosminis) == 4:
print('hay 4')
FluosMinis.append(Fluosminis)
FluosMinisError.append(FluosminisError)
elif len(Fluosminis) == 3:
print('hay 3')
FluosMinis.append([Fluosminis[0], (CountsDRpi_3[69]-popt_tisaoff[3])*100/popt_tisaoff[2], Fluosminis[1], Fluosminis[2]])
FluosMinisError.append([FluosminisError[0], (np.sqrt(CountsDRpi_3[69]))*100/popt_tisaoff[2], FluosminisError[1], FluosminisError[2]])
else:
print('paso algo che')
print('fin 0º')
#SIGUIENTE ANGULO
#Ajuste con el Tisa en 30º
phidoppler, titadoppler = 0, 90
phirepump, titarepump = 0, 30
phiprobe = 0
titaprobe = 90
T = 0.6e-3
sg = popt_tisaoff[0]
sp = popt_tisaoff[1]
sr = 0
DetRepump = 0
lw = 0.1
DopplerLaserLinewidth, RepumpLaserLinewidth, ProbeLaserLinewidth = lw, lw, lw #ancho de linea de los laseres
u = 31.9e6
B = (u/(2*np.pi))/c
correccion = 4 #con 8 fitea bien
offsetxpi = 440+1+correccion
DetDoppler = -5.1-correccion
FreqsDRpi_3 = [2*f*1e-6-offsetxpi+14 for f in Freqs[5]]
CountsDRpi_3 = Counts[5]
freqslongpi_3 = np.arange(min(FreqsDRpi_3), max(FreqsDRpi_3)+FreqsDRpi_3[1]-FreqsDRpi_3[0], 0.1*(FreqsDRpi_3[1]-FreqsDRpi_3[0]))
#[1.71811842e+04 3.34325038e-17]
def FitEITpi(freqs, SR, DETREPUMP):
temp = 1e-3
MeasuredFreq, MeasuredFluo = GenerateNoisyCPT_fit(sg, SR, sp, gPS, gPD, DetDoppler, DETREPUMP, u, DopplerLaserLinewidth, RepumpLaserLinewidth, ProbeLaserLinewidth, temp, alpha, phidoppler, titadoppler, phiprobe, [titaprobe], phirepump, titarepump, freqs, plot=False, solvemode=1, detpvec=None, noiseamplitude=noiseamplitude)
FinalFluo = [f*popt_tisaoff[2] + popt_tisaoff[3] for f in MeasuredFluo]
return FinalFluo
popt, pcov = curve_fit(FitEITpi, FreqsDRpi_3, CountsDRpi_3, p0=[10, 100], bounds=((0, 0), (50, 300)))
print(popt)
Sat_3 = popt[0]
Det_3 = popt[1]
FittedEITpi_3 = FitEITpi(freqslongpi_3, *popt)
plt.figure()
plt.errorbar(FreqsDRpi_3, CountsDRpi_3, yerr=2*np.sqrt(CountsDRpi_3), fmt='o', capsize=2, markersize=2)
plt.plot(freqslongpi_3, FittedEITpi_3)
#plt.title(f'Sdop: {round(popt[0], 2)}, Spr: {round(popt[1], 2)}, T: {round(popt[2]*1e3, 2)} mK, detDop: {DetDoppler} MHz')
SatsTisa.append(popt[0])
DetsTisa.append(popt[1])
AngsTisa.append(titarepump)
vector = [((c- popt_tisaoff[3])/ popt_tisaoff[2])*100 for c in CountsDRpi_3]
minsss = argrelextrema(np.array(FittedEITpi_3), np.less)
minsssmeas = [int(m*len(vector)/len(FittedEITpi_3)) for m in minsss[0]]
Fluosminis = [[((c- popt_tisaoff[3])/ popt_tisaoff[2])*100 for c in CountsDRpi_3][m] for m in minsssmeas]
FluosminisError = [[((np.sqrt(c))/ popt_tisaoff[2])*100 for c in CountsDRpi_3][m] for m in minsssmeas]
if len(Fluosminis) == 4:
print('hay 4')
FluosMinis.append(Fluosminis)
FluosMinisError.append(FluosminisError)
elif len(Fluosminis) == 3:
print('hay 3')
FluosMinis.append([Fluosminis[0], (CountsDRpi_3[73]-popt_tisaoff[3])*100/popt_tisaoff[2], Fluosminis[1], Fluosminis[2]])
FluosMinisError.append([FluosminisError[0], (np.sqrt(CountsDRpi_3[73]))*100/popt_tisaoff[2], FluosminisError[1], FluosminisError[2]])
else:
print('paso algo che')
print('fin 30º')
#SIGUIENTE ANGULO
#Ajuste con el Tisa en 60º
phidoppler, titadoppler = 0, 90
phirepump, titarepump = 0, 60
phiprobe = 0
titaprobe = 90
T = 0.6e-3
sg = popt_tisaoff[0]
sp = popt_tisaoff[1]
sr = 0
DetRepump = 0
lw = 0.1
DopplerLaserLinewidth, RepumpLaserLinewidth, ProbeLaserLinewidth = lw, lw, lw #ancho de linea de los laseres
u = 31.9e6
B = (u/(2*np.pi))/c
correccion = 4
offsetxpi = 440+1+correccion
DetDoppler = -5.1-correccion
FreqsDRpi_3 = [2*f*1e-6-offsetxpi+14 for f in Freqs[3]]
CountsDRpi_3 = Counts[3]
freqslongpi_3 = np.arange(min(FreqsDRpi_3), max(FreqsDRpi_3)+FreqsDRpi_3[1]-FreqsDRpi_3[0], 0.1*(FreqsDRpi_3[1]-FreqsDRpi_3[0]))
#[1.71811842e+04 3.34325038e-17]
def FitEITpi(freqs, SR, DETREPUMP):
temp = 2e-3
MeasuredFreq, MeasuredFluo = GenerateNoisyCPT_fit(sg, SR, sp, gPS, gPD, DetDoppler, DETREPUMP, u, DopplerLaserLinewidth, RepumpLaserLinewidth, ProbeLaserLinewidth, temp, alpha, phidoppler, titadoppler, phiprobe, [titaprobe], phirepump, titarepump, freqs, plot=False, solvemode=1, detpvec=None, noiseamplitude=noiseamplitude)
FinalFluo = [f*popt_tisaoff[2] + popt_tisaoff[3] for f in MeasuredFluo]
return FinalFluo
popt, pcov = curve_fit(FitEITpi, FreqsDRpi_3, CountsDRpi_3, p0=[10, 100], bounds=((0, 0), (50, 300)))
print(popt)
Sat_3 = popt[0]
Det_3 = popt[1]
FittedEITpi_3 = FitEITpi(freqslongpi_3, *popt)
plt.figure()
plt.errorbar(FreqsDRpi_3, CountsDRpi_3, yerr=2*np.sqrt(CountsDRpi_3), fmt='o', capsize=2, markersize=2)
plt.plot(freqslongpi_3, FittedEITpi_3)
plt.title('60º')
#plt.title(f'Sdop: {round(popt[0], 2)}, Spr: {round(popt[1], 2)}, T: {round(popt[2]*1e3, 2)} mK, detDop: {DetDoppler} MHz')
SatsTisa.append(popt[0])
DetsTisa.append(popt[1])
AngsTisa.append(titarepump)
vector = [((c- popt_tisaoff[3])/ popt_tisaoff[2])*100 for c in CountsDRpi_3]
minsss = argrelextrema(np.array(FittedEITpi_3), np.less)
minsssmeas = [int(m*len(vector)/len(FittedEITpi_3)) for m in minsss[0]]
Fluosminis = [[((c- popt_tisaoff[3])/ popt_tisaoff[2])*100 for c in CountsDRpi_3][m] for m in minsssmeas]
FluosminisError = [[((np.sqrt(c))/ popt_tisaoff[2])*100 for c in CountsDRpi_3][m] for m in minsssmeas]
print(Fluosminis)
if len(Fluosminis) == 4:
print('hay 4')
FluosMinis.append(Fluosminis)
FluosMinisError.append(FluosminisError)
elif len(Fluosminis) == 3:
print('hay 3')
FluosMinis.append([Fluosminis[0], (CountsDRpi_3[73]-popt_tisaoff[3])*100/popt_tisaoff[2], Fluosminis[1], Fluosminis[2]])
FluosMinisError.append([FluosminisError[0], (np.sqrt(CountsDRpi_3[73]))*100/popt_tisaoff[2], FluosminisError[1], FluosminisError[2]])
else:
print('paso algo che')
print('fin 60º')
#SIGUIENTE ANGULO
#Ajuste con el Tisa prendido a 90º
phidoppler, titadoppler = 0, 90
phirepump, titarepump = 0, 90
phiprobe = 0
titaprobe = 90
T = 0.6e-3
sg = popt_tisaoff[0]
sp = popt_tisaoff[1]
sr = 0
DetRepump = 0
lw = 0.1
DopplerLaserLinewidth, RepumpLaserLinewidth, ProbeLaserLinewidth = lw, lw, lw #ancho de linea de los laseres
u = 31.9e6
B = (u/(2*np.pi))/c
correccion = 4 #con 8 fitea bien
offsetxpi = 440+1+correccion
DetDoppler = -5.1-correccion
FreqsDRpi_3 = [2*f*1e-6-offsetxpi+14 for f in Freqs[4]]
CountsDRpi_3 = Counts[4]
freqslongpi_3 = np.arange(min(FreqsDRpi_3), max(FreqsDRpi_3)+FreqsDRpi_3[1]-FreqsDRpi_3[0], 0.1*(FreqsDRpi_3[1]-FreqsDRpi_3[0]))
#[1.71811842e+04 3.34325038e-17]
def FitEITpi(freqs, SR, DETREPUMP):
temp = 2e-3
MeasuredFreq, MeasuredFluo = GenerateNoisyCPT_fit(sg, SR, sp, gPS, gPD, DetDoppler, DETREPUMP, u, DopplerLaserLinewidth, RepumpLaserLinewidth, ProbeLaserLinewidth, temp, alpha, phidoppler, titadoppler, phiprobe, [titaprobe], phirepump, titarepump, freqs, plot=False, solvemode=1, detpvec=None, noiseamplitude=noiseamplitude)
FinalFluo = [f*popt_tisaoff[2] + popt_tisaoff[3] for f in MeasuredFluo]
return FinalFluo
popt, pcov = curve_fit(FitEITpi, FreqsDRpi_3, CountsDRpi_3, p0=[10, 100], bounds=((0, 0), (50, 300)))
print(popt)
Sat_3 = popt[0]
Det_3 = popt[1]
FittedEITpi_3 = FitEITpi(freqslongpi_3, *popt)
plt.figure()
plt.errorbar(FreqsDRpi_3, CountsDRpi_3, yerr=2*np.sqrt(CountsDRpi_3), fmt='o', capsize=2, markersize=2)
plt.plot(freqslongpi_3, FittedEITpi_3)
#plt.title(f'Sdop: {round(popt[0], 2)}, Spr: {round(popt[1], 2)}, T: {round(popt[2]*1e3, 2)} mK, detDop: {DetDoppler} MHz')
SatsTisa.append(popt[0])
DetsTisa.append(popt[1])
AngsTisa.append(titarepump)
def FitEITpi_withoutscale(freqs, SR, DETREPUMP):
temp = 2e-3
MeasuredFreq, MeasuredFluo = GenerateNoisyCPT_fit(sg, SR, sp, gPS, gPD, DetDoppler, DETREPUMP, u, DopplerLaserLinewidth, RepumpLaserLinewidth, ProbeLaserLinewidth, temp, alpha, phidoppler, titadoppler, phiprobe, [titaprobe], phirepump, titarepump, freqs, plot=False, solvemode=1, detpvec=None, noiseamplitude=noiseamplitude)
FinalFluo = [f*100 + 0 for f in MeasuredFluo]
return FinalFluo
FittedEITpi_3 = FitEITpi_withoutscale(freqslongpi_3, *popt)
plt.figure()
plt.errorbar(FreqsDRpi_3, [100*(c- popt_tisaoff[3])/ popt_tisaoff[2] for c in CountsDRpi_3], yerr=(100/popt_tisaoff[2])*2*np.sqrt(CountsDRpi_3), fmt='o', capsize=2, markersize=2)
#plt.plot(FreqsDRpi_3, [((c- popt_tisaoff[3])/ popt_tisaoff[2])*100 for c in CountsDRpi_3])
plt.plot(freqslongpi_3, FittedEITpi_3)
#plt.title(f'Sdop: {round(popt[0], 2)}, Spr: {round(popt[1], 2)}, T: {round(popt[2]*1e3, 2)} mK, detDop: {DetDoppler} MHz')
vector = [((c- popt_tisaoff[3])/ popt_tisaoff[2])*100 for c in CountsDRpi_3]
minsss = argrelextrema(np.array(FittedEITpi_3), np.less)
minsssmeas = [int(m*len(vector)/len(FittedEITpi_3)) for m in minsss[0]]
Fluosminis = [[((c- popt_tisaoff[3])/ popt_tisaoff[2])*100 for c in CountsDRpi_3][m] for m in minsssmeas]
FluosminisError = [[((np.sqrt(c))/ popt_tisaoff[2])*100 for c in CountsDRpi_3][m] for m in minsssmeas]
if len(Fluosminis) == 4:
print('hay 4')
FluosMinis.append(Fluosminis)
FluosMinisError.append(FluosminisError)
elif len(Fluosminis) == 3:
print('hay 3')
FluosMinis.append([Fluosminis[0], (CountsDRpi_3[73]-popt_tisaoff[3])*100/popt_tisaoff[2], Fluosminis[1], Fluosminis[2]])
FluosMinisError.append([FluosminisError[0], (np.sqrt(CountsDRpi_3[73]))*100/popt_tisaoff[2], FluosminisError[1], FluosminisError[2]])
else:
print('paso algo che')
print('fin 90º')
#SIGUIENTE ANGULO
#Ajuste con el Tisa prendido a 15º
phidoppler, titadoppler = 0, 90
phirepump, titarepump = 0, 15
phiprobe = 0
titaprobe = 90
T = 0.6e-3
sg = popt_tisaoff[0]
sp = popt_tisaoff[1]
sr = 0
DetRepump = 0
lw = 0.1
DopplerLaserLinewidth, RepumpLaserLinewidth, ProbeLaserLinewidth = lw, lw, lw #ancho de linea de los laseres
u = 31.9e6
B = (u/(2*np.pi))/c
correccion = 4 #con 8 fitea bien
offsetxpi = 440+1+correccion
DetDoppler = -5.1-correccion
FreqsDRpi_3 = [2*f*1e-6-offsetxpi+14 for f in Freqs[7]]
CountsDRpi_3 = Counts[7]
freqslongpi_3 = np.arange(min(FreqsDRpi_3), max(FreqsDRpi_3)+FreqsDRpi_3[1]-FreqsDRpi_3[0], 0.1*(FreqsDRpi_3[1]-FreqsDRpi_3[0]))
#[1.71811842e+04 3.34325038e-17]
def FitEITpi(freqs, SR, DETREPUMP):
temp = 2e-3
MeasuredFreq, MeasuredFluo = GenerateNoisyCPT_fit(sg, SR, sp, gPS, gPD, DetDoppler, DETREPUMP, u, DopplerLaserLinewidth, RepumpLaserLinewidth, ProbeLaserLinewidth, temp, alpha, phidoppler, titadoppler, phiprobe, [titaprobe], phirepump, titarepump, freqs, plot=False, solvemode=1, detpvec=None, noiseamplitude=noiseamplitude)
FinalFluo = [f*popt_tisaoff[2] + popt_tisaoff[3] for f in MeasuredFluo]
return FinalFluo
popt, pcov = curve_fit(FitEITpi, FreqsDRpi_3, CountsDRpi_3, p0=[10, 100], bounds=((0, 0), (50, 300)))
print(popt)
Sat_3 = popt[0]
Det_3 = popt[1]
FittedEITpi_3 = FitEITpi(freqslongpi_3, *popt)
plt.figure()
plt.errorbar(FreqsDRpi_3, CountsDRpi_3, yerr=2*np.sqrt(CountsDRpi_3), fmt='o', capsize=2, markersize=2)
plt.plot(freqslongpi_3, FittedEITpi_3)
#plt.title(f'Sdop: {round(popt[0], 2)}, Spr: {round(popt[1], 2)}, T: {round(popt[2]*1e3, 2)} mK, detDop: {DetDoppler} MHz')
SatsTisa.append(popt[0])
DetsTisa.append(popt[1])
AngsTisa.append(titarepump)
def FitEITpi_withoutscale(freqs, SR, DETREPUMP):
temp = 2e-3
MeasuredFreq, MeasuredFluo = GenerateNoisyCPT_fit(sg, SR, sp, gPS, gPD, DetDoppler, DETREPUMP, u, DopplerLaserLinewidth, RepumpLaserLinewidth, ProbeLaserLinewidth, temp, alpha, phidoppler, titadoppler, phiprobe, [titaprobe], phirepump, titarepump, freqs, plot=False, solvemode=1, detpvec=None, noiseamplitude=noiseamplitude)
FinalFluo = [f*100 + 0 for f in MeasuredFluo]
return FinalFluo
FittedEITpi_3 = FitEITpi_withoutscale(freqslongpi_3, *popt)
plt.figure()
plt.errorbar(FreqsDRpi_3, [100*(c- popt_tisaoff[3])/ popt_tisaoff[2] for c in CountsDRpi_3], yerr=(100/popt_tisaoff[2])*2*np.sqrt(CountsDRpi_3), fmt='o', capsize=2, markersize=2)
#plt.plot(FreqsDRpi_3, [((c- popt_tisaoff[3])/ popt_tisaoff[2])*100 for c in CountsDRpi_3])
plt.plot(freqslongpi_3, FittedEITpi_3)
#plt.title(f'Sdop: {round(popt[0], 2)}, Spr: {round(popt[1], 2)}, T: {round(popt[2]*1e3, 2)} mK, detDop: {DetDoppler} MHz')
vector = [((c- popt_tisaoff[3])/ popt_tisaoff[2])*100 for c in CountsDRpi_3]
minsss = argrelextrema(np.array(FittedEITpi_3), np.less)
minsssmeas = [int(m*len(vector)/len(FittedEITpi_3)) for m in minsss[0]]
Fluosminis = [[((c- popt_tisaoff[3])/ popt_tisaoff[2])*100 for c in CountsDRpi_3][m] for m in minsssmeas]
FluosminisError = [[((np.sqrt(c))/ popt_tisaoff[2])*100 for c in CountsDRpi_3][m] for m in minsssmeas]
if len(Fluosminis) == 4:
print('hay 4')
FluosMinis.append(Fluosminis)
FluosMinisError.append(FluosminisError)
elif len(Fluosminis) == 3:
print('hay 3')
FluosMinis.append([Fluosminis[0], (CountsDRpi_3[69]-popt_tisaoff[3])*100/popt_tisaoff[2], Fluosminis[1], Fluosminis[2]])
FluosMinisError.append([FluosminisError[0], (np.sqrt(CountsDRpi_3[69]))*100/popt_tisaoff[2], FluosminisError[1], FluosminisError[2]])
else:
print('paso algo che')
print('fin 90º')
#SIGUIENTE ANGULO
#Ajuste con el Tisa prendido a 45º
phidoppler, titadoppler = 0, 90
phirepump, titarepump = 0, 45
phiprobe = 0
titaprobe = 90
T = 0.6e-3
sg = popt_tisaoff[0]
sp = popt_tisaoff[1]
sr = 0
DetRepump = 0
lw = 0.1
DopplerLaserLinewidth, RepumpLaserLinewidth, ProbeLaserLinewidth = lw, lw, lw #ancho de linea de los laseres
u = 31.9e6
B = (u/(2*np.pi))/c
correccion = 4 #con 8 fitea bien
offsetxpi = 440+1+correccion
DetDoppler = -3.5-correccion
FreqsDRpi_3 = [2*f*1e-6-offsetxpi+14 for f in Freqs[8]]
CountsDRpi_3 = Counts[8]
freqslongpi_3 = np.arange(min(FreqsDRpi_3), max(FreqsDRpi_3)+FreqsDRpi_3[1]-FreqsDRpi_3[0], 0.1*(FreqsDRpi_3[1]-FreqsDRpi_3[0]))
#[1.71811842e+04 3.34325038e-17]
def FitEITpi(freqs, SR, DETREPUMP):
temp = 2e-3
MeasuredFreq, MeasuredFluo = GenerateNoisyCPT_fit(sg, SR, sp, gPS, gPD, DetDoppler, DETREPUMP, u, DopplerLaserLinewidth, RepumpLaserLinewidth, ProbeLaserLinewidth, temp, alpha, phidoppler, titadoppler, phiprobe, [titaprobe], phirepump, titarepump, freqs, plot=False, solvemode=1, detpvec=None, noiseamplitude=noiseamplitude)
FinalFluo = [f*popt_tisaoff[2] + popt_tisaoff[3] for f in MeasuredFluo]
return FinalFluo
popt, pcov = curve_fit(FitEITpi, FreqsDRpi_3, CountsDRpi_3, p0=[10, 100], bounds=((0, 0), (50, 300)))
print(popt)
Sat_3 = popt[0]
Det_3 = popt[1]
FittedEITpi_3 = FitEITpi(freqslongpi_3, *popt)
plt.figure()
plt.errorbar(FreqsDRpi_3, CountsDRpi_3, yerr=2*np.sqrt(CountsDRpi_3), fmt='o', capsize=2, markersize=2)
plt.plot(freqslongpi_3, FittedEITpi_3)
#plt.title(f'Sdop: {round(popt[0], 2)}, Spr: {round(popt[1], 2)}, T: {round(popt[2]*1e3, 2)} mK, detDop: {DetDoppler} MHz')
SatsTisa.append(popt[0])
DetsTisa.append(popt[1])
AngsTisa.append(titarepump)
def FitEITpi_withoutscale(freqs, SR, DETREPUMP):
temp = 2e-3
MeasuredFreq, MeasuredFluo = GenerateNoisyCPT_fit(sg, SR, sp, gPS, gPD, DetDoppler, DETREPUMP, u, DopplerLaserLinewidth, RepumpLaserLinewidth, ProbeLaserLinewidth, temp, alpha, phidoppler, titadoppler, phiprobe, [titaprobe], phirepump, titarepump, freqs, plot=False, solvemode=1, detpvec=None, noiseamplitude=noiseamplitude)
FinalFluo = [f*100 + 0 for f in MeasuredFluo]
return FinalFluo
FittedEITpi_3 = FitEITpi_withoutscale(freqslongpi_3, *popt)
plt.figure()
plt.errorbar(FreqsDRpi_3, [100*(c- popt_tisaoff[3])/ popt_tisaoff[2] for c in CountsDRpi_3], yerr=(100/popt_tisaoff[2])*2*np.sqrt(CountsDRpi_3), fmt='o', capsize=2, markersize=2)
#plt.plot(FreqsDRpi_3, [((c- popt_tisaoff[3])/ popt_tisaoff[2])*100 for c in CountsDRpi_3])
plt.plot(freqslongpi_3, FittedEITpi_3)
#plt.title(f'Sdop: {round(popt[0], 2)}, Spr: {round(popt[1], 2)}, T: {round(popt[2]*1e3, 2)} mK, detDop: {DetDoppler} MHz')
vector = [((c- popt_tisaoff[3])/ popt_tisaoff[2])*100 for c in CountsDRpi_3]
minsss = argrelextrema(np.array(FittedEITpi_3), np.less)
print(minsss)
minsssmeas = [int(m*len(vector)/len(FittedEITpi_3)) for m in minsss[0]]
Fluosminis = [[((c- popt_tisaoff[3])/ popt_tisaoff[2])*100 for c in CountsDRpi_3][m] for m in minsssmeas]
FluosminisError = [[((np.sqrt(c))/ popt_tisaoff[2])*100 for c in CountsDRpi_3][m] for m in minsssmeas]
if len(Fluosminis) == 4:
print('hay 4')
FluosMinis.append(Fluosminis)
FluosMinisError.append(FluosminisError)
elif len(Fluosminis) == 3:
print('hay 3')
FluosMinis.append([Fluosminis[0], (CountsDRpi_3[73]-popt_tisaoff[3])*100/popt_tisaoff[2], Fluosminis[1], Fluosminis[2]])
FluosMinisError.append([FluosminisError[0], (np.sqrt(CountsDRpi_3[73]))*100/popt_tisaoff[2], FluosminisError[1], FluosminisError[2]])
else:
print('paso algo che')
print('fin 45º')
#SIGUIENTE ANGULO
#Ajuste con el Tisa prendido a 75º
phidoppler, titadoppler = 0, 90
phirepump, titarepump = 0, 75
phiprobe = 0
titaprobe = 90
T = 0.6e-3
sg = popt_tisaoff[0]
sp = popt_tisaoff[1]
sr = 0
DetRepump = 0
lw = 0.1
DopplerLaserLinewidth, RepumpLaserLinewidth, ProbeLaserLinewidth = lw, lw, lw #ancho de linea de los laseres
u = 31.9e6
B = (u/(2*np.pi))/c
correccion = 4 #con 8 fitea bien
offsetxpi = 440+1+correccion
DetDoppler = -3-correccion
FreqsDRpi_3 = [2*f*1e-6-offsetxpi+14 for f in Freqs[9]]
CountsDRpi_3 = Counts[9]
freqslongpi_3 = np.arange(min(FreqsDRpi_3), max(FreqsDRpi_3)+FreqsDRpi_3[1]-FreqsDRpi_3[0], 0.1*(FreqsDRpi_3[1]-FreqsDRpi_3[0]))
#[1.71811842e+04 3.34325038e-17]
def FitEITpi(freqs, SR, DETREPUMP):
temp = 2e-3
MeasuredFreq, MeasuredFluo = GenerateNoisyCPT_fit(sg, SR, sp, gPS, gPD, DetDoppler, DETREPUMP, u, DopplerLaserLinewidth, RepumpLaserLinewidth, ProbeLaserLinewidth, temp, alpha, phidoppler, titadoppler, phiprobe, [titaprobe], phirepump, titarepump, freqs, plot=False, solvemode=1, detpvec=None, noiseamplitude=noiseamplitude)
FinalFluo = [f*popt_tisaoff[2] + popt_tisaoff[3] for f in MeasuredFluo]
return FinalFluo
popt, pcov = curve_fit(FitEITpi, FreqsDRpi_3, CountsDRpi_3, p0=[10, 100], bounds=((0, 0), (50, 300)))
print(popt)
Sat_3 = popt[0]
Det_3 = popt[1]
FittedEITpi_3 = FitEITpi(freqslongpi_3, *popt)
plt.figure()
plt.errorbar(FreqsDRpi_3, CountsDRpi_3, yerr=2*np.sqrt(CountsDRpi_3), fmt='o', capsize=2, markersize=2)
plt.plot(freqslongpi_3, FittedEITpi_3)
#plt.title(f'Sdop: {round(popt[0], 2)}, Spr: {round(popt[1], 2)}, T: {round(popt[2]*1e3, 2)} mK, detDop: {DetDoppler} MHz')
SatsTisa.append(popt[0])
DetsTisa.append(popt[1])
AngsTisa.append(titarepump)
def FitEITpi_withoutscale(freqs, SR, DETREPUMP):
temp = 2e-3
MeasuredFreq, MeasuredFluo = GenerateNoisyCPT_fit(sg, SR, sp, gPS, gPD, DetDoppler, DETREPUMP, u, DopplerLaserLinewidth, RepumpLaserLinewidth, ProbeLaserLinewidth, temp, alpha, phidoppler, titadoppler, phiprobe, [titaprobe], phirepump, titarepump, freqs, plot=False, solvemode=1, detpvec=None, noiseamplitude=noiseamplitude)
FinalFluo = [f*100 + 0 for f in MeasuredFluo]
return FinalFluo
FittedEITpi_3 = FitEITpi_withoutscale(freqslongpi_3, *popt)
plt.figure()
plt.errorbar(FreqsDRpi_3, [100*(c- popt_tisaoff[3])/ popt_tisaoff[2] for c in CountsDRpi_3], yerr=(100/popt_tisaoff[2])*2*np.sqrt(CountsDRpi_3), fmt='o', capsize=2, markersize=2)
#plt.plot(FreqsDRpi_3, [((c- popt_tisaoff[3])/ popt_tisaoff[2])*100 for c in CountsDRpi_3])
plt.plot(freqslongpi_3, FittedEITpi_3)
#plt.title(f'Sdop: {round(popt[0], 2)}, Spr: {round(popt[1], 2)}, T: {round(popt[2]*1e3, 2)} mK, detDop: {DetDoppler} MHz')
vector = [((c- popt_tisaoff[3])/ popt_tisaoff[2])*100 for c in CountsDRpi_3]
minsss = argrelextrema(np.array(FittedEITpi_3), np.less)
minsssmeas = [int(m*len(vector)/len(FittedEITpi_3)) for m in minsss[0]]
Fluosminis = [[((c- popt_tisaoff[3])/ popt_tisaoff[2])*100 for c in CountsDRpi_3][m] for m in minsssmeas]
FluosminisError = [[((np.sqrt(c))/ popt_tisaoff[2])*100 for c in CountsDRpi_3][m] for m in minsssmeas]
if len(Fluosminis) == 4:
print('hay 4')
FluosMinis.append(Fluosminis)
FluosMinisError.append(FluosminisError)
elif len(Fluosminis) == 3:
print('hay 3')
FluosMinis.append([Fluosminis[0], (CountsDRpi_3[73]-popt_tisaoff[3])*100/popt_tisaoff[2], Fluosminis[1], Fluosminis[2]])
FluosMinisError.append([FluosminisError[0], (np.sqrt(CountsDRpi_3[73]))*100/popt_tisaoff[2], FluosminisError[1], FluosminisError[2]])
else:
print('paso algo che')
print('fin 75º')
0.000000000000000000e+00 3.000000000000000000e+01 6.000000000000000000e+01 9.000000000000000000e+01 1.500000000000000000e+01 4.500000000000000000e+01 7.500000000000000000e+01
1.784693448063240095e-01 2.108427153120442377e-01 2.091073548113952796e-01 2.187264577655991249e-01 1.895357908431558047e-01 2.191180900537179066e-01 2.304649447016792752e-01
0.000000000000000000e+00 3.000000000000000000e+01 6.000000000000000000e+01 9.000000000000000000e+01 1.500000000000000000e+01 4.500000000000000000e+01 7.500000000000000000e+01
2.379691345730698959e-01 2.488013995521680122e-01 2.395849375251260516e-01 2.243382206115963617e-01 2.468988235645363516e-01 2.585188884870380233e-01 2.491457615156644767e-01
0.000000000000000000e+00 3.000000000000000000e+01 6.000000000000000000e+01 9.000000000000000000e+01 1.500000000000000000e+01 4.500000000000000000e+01 7.500000000000000000e+01
2.634466295782048606e-01 2.601718393967488718e-01 2.325020388682937644e-01 2.179410819521661047e-01 2.628764862581587924e-01 2.650688532186117885e-01 2.313931198017891155e-01
0.000000000000000000e+00 3.000000000000000000e+01 6.000000000000000000e+01 9.000000000000000000e+01 1.500000000000000000e+01 4.500000000000000000e+01 7.500000000000000000e+01
1.745838324094645955e-01 2.015920452755217973e-01 2.122611830210968942e-01 2.318558139647002025e-01 1.911124674842025473e-01 2.083885942837055416e-01 2.287847404371309845e-01
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Tue Sep 1 17:58:39 2020
@author: oem
"""
import os
import numpy as np
#os.chdir('/home/oem/Nextcloud/G_liaf/liaf-TrampaAnular/Código General/EIT-CPT/Buenos Aires/Experiment Simulations/CPT scripts/Eight Level 2 repumps')
from threeLevel_2repumps_AnalysisFunctions import CalculoTeoricoDarkResonances_8levels, GetMinimaInfo, GetPlotsofFluovsAngle_8levels, PerformExperiment_8levels, FindDRFrequencies, FindRelativeFluorescencesOfDR, GenerateNoisyCPT, SmoothNoisyCPT, GetFinalMaps, GenerateNoisyCPT_fixedRabi, GenerateNoisyCPT_fit
import matplotlib.pyplot as plt
import time
#from threeLevel_2repumps_AnalysisFunctions import MeasureRelativeFluorescenceFromCPT, IdentifyPolarizationCoincidences, RetrieveAbsoluteCoincidencesBetweenMaps, GetClosestIndex
#C:\Users\Usuario\Nextcloud\G_liaf\liaf-TrampaAnular\Código General\EIT-CPT\Buenos Aires\Experiment Simulations\CPT scripts\Eight Level 2 repumps
ub = 9.27e-24
h = 6.63e-34
c = (ub/h)*1e-4 #en unidades de MHz/G
#u = 1e6
u = 32.5e6
#u = 10e2
B = (u/(2*np.pi))/c
#sg, sp = 0.6, 5 #parámetros de control, saturación del doppler y repump
#rabG, rabP = sg*gPS, sp*gPD #frecuencias de rabi
gPS, gPD, = 2*np.pi*21.58e6, 2*np.pi*1.35e6 #anchos de linea de las transiciones
lw = 0.1
DopplerLaserLinewidth, RepumpLaserLinewidth, ProbeLaserLinewidth = lw, lw, lw #ancho de linea de los laseres
DetDoppler = -8 #42
DetRepumpVec = [170]
Tvec = [2] #temperatura en mK
alpha = 0*(np.pi/180) #angulo entre los láseres
phidoppler, titadoppler = 0, 90
phirepump = 0
TitaRepumpVec = np.concatenate((np.array([0.1]), np.arange(1, 91, 1)))
#TitaRepumpVec = [90]
phiprobe = 0
TitaProbeVec = [90]
#titaprobe = 0.1
CircRep = 1 #este es el desfasaje exp(i.phi) de la componente de la polarizacion y respecto a la x
CircPr = 1
#Calculo las resonancias oscuras teóricas
#ResonanciasTeoricas, DRPositivas = CalculoTeoricoDarkResonances_8levels(u/(2*np.pi*1e6), titadoppler, DetDoppler, DetRepump)
#Parametros de la simulacion cpt
center = -10
span = 60
freqMin = center-span*0.5
freqMax = center+span*0.5
""" parametros para tener espectros coherentes
freqMin = -56
freqMax = 14
"""
freqStep = 1e-1
noiseamplitude = 0
RelMinMedido0Vector = []
RelMinMedido1Vector = []
RelMinMedido2Vector = []
RelMinMedido3Vector = []
RelMinMedido4Vector = []
#Sr = np.arange(0, 10, 0.2)
#Sg = np.arange(0.01, 1, 0.05)
#Sp = np.arange(0.1, 6.1, 1)
#Sg = [0.6**2]
#Sp = [2.3**2]
Sg = [0.61]
Sp = [4.83]
Sr = [40]
sr_refe = 10
#Sr = [10]
i = 0
save = False
showFigures = True
if not showFigures:
plt.ioff()
else:
plt.ion()
fig1, ax1 = plt.subplots()
offsetx = 464
#ax1.plot([f-offsetx for f in FreqsDR], CountsDR, 'o')
run = True
Scale = 730
Offset = 600 #600 para 20k cuentas aprox
MaxCoherenceValue = []
CircRepVec = [1]
MeasuredFreqsVec = []
MeasuredFluosVec = []
MeasuredFreqsVec_refe = []
MeasuredFluosVec_refe = []
for sr in Sr:
#fig1, ax1 = plt.subplots()
for CircRep in CircRepVec:
for titaprobe in TitaProbeVec:
#titarepump = titaprobe+90
for titarepump in TitaRepumpVec:
for sp in Sp:
for Ti in Tvec:
T = Ti*1e-3
for DetRepump in DetRepumpVec:
print(T)
for sg in Sg:
rabG, rabP, rabR = sg*gPS, sp*gPD, sr*gPD
if run:
#MeasuredFreq6, MeasuredFluo6 = GenerateNoisyCPT_fixedRabi(sg, sr, sp, gPS, gPD, DetDoppler, DetRepump, u, DopplerLaserLinewidth, RepumpLaserLinewidth, ProbeLaserLinewidth, T, alpha, phidoppler, titadoppler, phiprobe, [titaprobe], phirepump, titarepump, freqMin, freqMax, freqStep, circularityprobe=CircPr, circularityrepump=CircRep, plot=False, solvemode=1, detpvec=None, noiseamplitude=noiseamplitude)
#MeasuredFreq6_refe, MeasuredFluo6_refe = GenerateNoisyCPT_fixedRabi(sg, sr_refe, sp, gPS, gPD, DetDoppler, DetRepump, u, DopplerLaserLinewidth, RepumpLaserLinewidth, ProbeLaserLinewidth, T, alpha, phidoppler, titadoppler, phiprobe, [titaprobe], phirepump, titarepump, freqMin, freqMax, freqStep, circularityprobe=CircPr, circularityrepump=CircRep, plot=False, solvemode=1, detpvec=None, noiseamplitude=noiseamplitude)
MeasuredFreq6, MeasuredFluo6 = GenerateNoisyCPT_fixedRabi(sg, sr, sp, gPS, gPD, DetDoppler, DetRepump, u, DopplerLaserLinewidth, RepumpLaserLinewidth, ProbeLaserLinewidth, T, alpha, phidoppler, titadoppler, phiprobe, [titaprobe], phirepump, titarepump, freqMin, freqMax, freqStep, plot=False, solvemode=1, detpvec=None, noiseamplitude=noiseamplitude)
MeasuredFreq6_refe, MeasuredFluo6_refe = GenerateNoisyCPT_fixedRabi(sg, sr_refe, sp, gPS, gPD, DetDoppler, DetRepump, u, DopplerLaserLinewidth, RepumpLaserLinewidth, ProbeLaserLinewidth, T, alpha, phidoppler, titadoppler, phiprobe, [titaprobe], phirepump, titarepump, freqMin, freqMax, freqStep, plot=False, solvemode=1, detpvec=None, noiseamplitude=noiseamplitude)
SmoothFluo6 = MeasuredFluo6
MeasuredFreqsVec.append(MeasuredFreq6)
MeasuredFluosVec.append([100*f for f in MeasuredFluo6])
MeasuredFreqsVec_refe.append(MeasuredFreq6_refe)
MeasuredFluosVec_refe.append([100*f for f in MeasuredFluo6_refe])
ax1.plot(MeasuredFreq6, [1*100*f + 0 for f in SmoothFluo6], label=fr'$\theta_R$ = {titarepump}')
ax1.axvline(DetDoppler, linestyle='--', linewidth=1)
ax1.set_xlabel('Detuning Rebombeo (MHz)')
ax1.set_ylabel('Fluorescencia (AU)')
ax1.set_title(f'Sat TISA: {sr}')
ax1.grid()
print (f'{i+1}/{len(Sg)*len(Sp)}')
i = i + 1
if save:
plt.savefig(f'Mapa_plots_100k_1mk/CPT_SMSM_sdop{round(sg, 2)}_sp{round(sp, 2)}_sr{round(sr, 2)}.jpg')
#%%
from scipy.optimize import curve_fit
from scipy.signal import argrelextrema
import seaborn as sns
sns.set_theme(style="whitegrid")
sns.set_palette("rocket")
sns.color_palette()
def Lineal(x, a, b):
return a*x + b
#j = 0
FreqsMinsVec = []
FluosMinsVec = []
RefTomada = False
init1_DR1 = 0
init2_DR1 = 0.01
end1_DR1 = 0.9
end2_DR1 = 1
MinimumPlaces = []
for j in range(len(TitaRepumpVec)):
lens = len(MeasuredFreqsVec[j])
popt_DR1, pcov_DR1 = curve_fit(Lineal, np.concatenate((MeasuredFreqsVec[j][int(init1_DR1*lens):int(init2_DR1*lens)],MeasuredFreqsVec[j][int(end1_DR1*lens):int(end2_DR1*lens)])), np.concatenate((MeasuredFluosVec[j][int(init1_DR1*lens):int(init2_DR1*lens)],MeasuredFluosVec[j][int(end1_DR1*lens):int(end2_DR1*lens)])))
FluoResta_DR1 = MeasuredFluosVec[j]-Lineal(MeasuredFreqsVec[j], *popt_DR1)
Minimums_DR1 = argrelextrema(FluoResta_DR1, np.less)
MinimumPlaces.append(Minimums_DR1)
FrecuenciasMinimos_DR1 = [MeasuredFreqsVec[j][m] for m in Minimums_DR1[0]]
FluorescenciasMinimos_DR1 = [MeasuredFluosVec[j][m] for m in Minimums_DR1[0]]
LocDR2 = 240
LocDR3 = 310
#print(len(FrecuenciasMinimos))
if not RefTomada:
if len(FrecuenciasMinimos_DR1)==4:
FrecuenciasReferencia = FrecuenciasMinimos_DR1
RefTomada=True
if not len(FrecuenciasMinimos_DR1)==4:
print('no hay 4 minimos')
if len(FrecuenciasMinimos_DR1)==2:
print(TitaRepumpVec[j])
print('aca 2')
FreqsMinsVec.append(FrecuenciasMinimos_DR1)
FluosMinsVec.append([FluorescenciasMinimos_DR1[0], MeasuredFluosVec[j][LocDR2], MeasuredFluosVec[j][LocDR3], FluorescenciasMinimos_DR1[-1]])
elif len(FrecuenciasMinimos_DR1)==3:
print(TitaRepumpVec[j])
print('aca 3')
FreqsMinsVec.append(FrecuenciasMinimos_DR1)
FluosMinsVec.append([FluorescenciasMinimos_DR1[0], MeasuredFluosVec[j][LocDR2], FluorescenciasMinimos_DR1[1], FluorescenciasMinimos_DR1[-1]])
elif len(FrecuenciasMinimos_DR1)==5:
print(TitaRepumpVec[j])
print('aca 3')
FreqsMinsVec.append(FrecuenciasMinimos_DR1)
FluosMinsVec.append([FluorescenciasMinimos_DR1[0], FluorescenciasMinimos_DR1[2], FluorescenciasMinimos_DR1[3], FluorescenciasMinimos_DR1[-1]])
else:
FreqsMinsVec.append(FrecuenciasMinimos_DR1)
FluosMinsVec.append([FluorescenciasMinimos_DR1[0], FluorescenciasMinimos_DR1[1], FluorescenciasMinimos_DR1[2], FluorescenciasMinimos_DR1[-1]])
FluosMinsOrdered = np.transpose(np.matrix(FluosMinsVec))
#GRAFICO DE LAS 4 DR TEORICAS CON LOS VALORES MEDIDOS
FluosMinisTransp = np.transpose(np.matrix(FluosMinis))
FluosMinisErrorTransp = np.transpose(np.matrix(FluosMinisError))
MinsDR1meas = np.array(FluosMinisTransp[0])[0]
MinsDR2meas = np.array(FluosMinisTransp[1])[0]
MinsDR3meas = np.array(FluosMinisTransp[2])[0]
MinsDR4meas = np.array(FluosMinisTransp[3])[0]
MinsDR1measErr = np.array(FluosMinisErrorTransp[0])[0]
MinsDR2measErr = np.array(FluosMinisErrorTransp[1])[0]
MinsDR3measErr = np.array(FluosMinisErrorTransp[2])[0]
MinsDR4measErr = np.array(FluosMinisErrorTransp[3])[0]
#DR3modif = np.array([10.59468801, 10.61 , 10.64259369, 10.41702358, 9.95931813,
# 9.35045187, 8.66008569, 7.97373986, 7.38747924, 7.10423391])
#%%
"""
FIGURA PARA EL PAPER
Esto plotea la resolución del polarímetro viendo cómo se depletan las resonancias oscuras
al prender el TISA variando el ángulo del mismo TISA
"""
import seaborn as sns
colors=sns.color_palette("rocket", 3)
colorscomp = sns.color_palette("viridis", 10)
#plt.style.use('seaborn-ticks')
#sns.set()
#plt.style.use('seaborn-bright')
fig, ax = plt.subplots(2,2, figsize=(6.5, 4.8))
fs = 11
ms = 6
cs = 2
lwid = 2
ax[0,0].plot(TitaRepumpVec, np.array(FluosMinsOrdered[0])[0], 'r', linewidth=lwid, markersize=ms, alpha=0.7)
ax[0,0].errorbar(AngsTisa, MinsDR1meas, yerr=2*MinsDR1measErr, color='r', fmt='o', capsize=cs, markersize=ms, elinewidth=2, markeredgewidth=1, markeredgecolor='r')
ax[0,0].set_title('DR 1', fontsize=fs+3)
ax[0,0].set_xlabel('Repumper polarization angle (º)', fontsize=fs)
ax[0,0].set_ylabel('Fluorescence (a.u.)', fontsize=fs)
ax[0,0].set_yticks([6, 8])
ax[0,0].set_yticklabels([6, 8], fontsize=fs)
ax[0,0].set_xticks([0, 30, 60, 90])
ax[0,0].set_xticklabels([0, 30, 60, 90], fontsize=fs)
ax[0,0].set_xlim(-5, 95)
ax[0,0].set_ylim(4, 8.8)
ax[0,0].grid()
ax[0,0].tick_params(axis='x', which='major', pad=1)
ax[0,0].tick_params(axis='y', which='major', pad=1)
ax[0,1].plot(TitaRepumpVec, np.array(FluosMinsOrdered[1])[0], 'b', linewidth=lwid, markersize=ms, alpha=0.7)
ax[0,1].errorbar(AngsTisa, MinsDR2meas, yerr=2*MinsDR2measErr, color='b', fmt='o', capsize=cs, markersize=ms, elinewidth=2, markeredgewidth=1, markeredgecolor='b')
ax[0,1].set_title('DR 2', fontsize=fs+3)
ax[0,1].set_xlabel('Repumper polarization angle (º)', fontsize=fs)
ax[0,1].set_ylabel('Fluorescence (a.u.)', fontsize=fs)
ax[0,1].set_yticks([8, 10])
ax[0,1].set_yticklabels([8, 10], fontsize=fs)
ax[0,1].set_xticks([0, 30, 60, 90])
ax[0,1].set_xticklabels([0, 30, 60, 90], fontsize=fs)
ax[0,1].grid()
ax[0,1].set_xlim(-5, 95)
ax[0,1].set_ylim(6.2, 11)
ax[0,1].tick_params(axis='x', which='major', pad=1)
ax[0,1].tick_params(axis='y', which='major', pad=1)
ax[1,0].plot(TitaRepumpVec, np.array(FluosMinsOrdered[2])[0], 'g', linewidth=lwid, markersize=ms, alpha=0.7)
ax[1,0].errorbar(AngsTisa, MinsDR3meas, yerr=2*MinsDR3measErr, color='g', fmt='o', capsize=cs, markersize=ms, elinewidth=2, markeredgewidth=1, markeredgecolor='g')
ax[1,0].set_title('DR 3', fontsize=fs+3)
ax[1,0].set_xlabel('Repumper polarization angle (º)', fontsize=fs)
ax[1,0].set_ylabel('Fluorescence (a.u.)', fontsize=fs)
ax[1,0].set_yticks([8, 10])
ax[1,0].set_yticklabels([8, 10], fontsize=fs)
ax[1,0].set_xticks([0, 30, 60, 90])
ax[1,0].set_xticklabels([0, 30, 60, 90], fontsize=fs)
ax[1,0].grid()
ax[1,0].set_xlim(-5, 95)
ax[1,0].set_ylim(6.4, 11.8)
ax[1,0].tick_params(axis='x', which='major', pad=1)
ax[1,0].tick_params(axis='y', which='major', pad=1)
ax[1,1].plot(TitaRepumpVec, np.array(FluosMinsOrdered[3])[0], color='m', linewidth=lwid, markersize=ms, alpha=0.7)
ax[1,1].errorbar(AngsTisa, MinsDR4meas, yerr=2*MinsDR4measErr, color='m', fmt='o', capsize=cs, markersize=ms, elinewidth=2, markeredgewidth=1, markeredgecolor='m')
ax[1,1].set_title('DR 4', fontsize=fs+3)
ax[1,1].set_xlabel('Repumper polarization angle (º)', fontsize=fs)
ax[1,1].set_ylabel('Fluorescence (a.u.)', fontsize=fs)
ax[1,1].set_yticks([6, 8])
ax[1,1].set_yticklabels([6, 8], fontsize=fs)
ax[1,1].set_xticks([0, 30, 60, 90])
ax[1,1].set_xticklabels([0, 30, 60, 90], fontsize=fs)
ax[1,1].grid()
ax[1,1].set_xlim(-5, 95)
ax[1,1].set_ylim(4, 9)
ax[1,1].tick_params(axis='x', which='major', pad=1)
ax[1,1].tick_params(axis='y', which='major', pad=1)
plt.tight_layout()
plt.savefig('07_polarimetrysensibility.pdf')
plt.savefig('C:\\Users\\Usuario\\Nextcloud\\G_liaf\\Publicaciones\\Papers\\2022 CPT 3 lasers\\Figuras\\hola.pdf')
#%%
plt.figure()
plt.plot(MeasuredFreqsVec[0], MeasuredFluosVec[0])
plt.plot(MeasuredFreqsVec[1], MeasuredFluosVec[1])
#plt.plot(MeasuredFreqsVec[14], MeasuredFluosVec[14])
#%%
plt.figure()
plt.plot(MeasuredFreqsVec[j], MeasuredFluosVec[j])
plt.plot(MeasuredFreqsVec[j], Lineal(MeasuredFreqsVec[j], *popt))
plt.figure()
plt.plot(MeasuredFreqsVec[j], MeasuredFluosVec[j])
plt.plot(FrecuenciasMinimos, FluorescenciasMinimos, 'o')
#%%
jsel = 3
plt.figure()
plt.plot(MeasuredFreqsVec[j], MeasuredFluosVec[jsel]-Lineal(MeasuredFreqsVec[j], *popt))
#%%
plt.figure()
plt.plot(MeasuredFreq1, [1*100*f + 0 for f in SmoothFluo1], label=r'Rep off')
#plt.plot(MeasuredFreq2, [1*100*f + 0 for f in SmoothFluo2], label=r'Rep $\pi$')
#plt.plot(MeasuredFreq3, [1*100*f + 0 for f in SmoothFluo3], label=r'Rep $\sigma_+$')
plt.plot(MeasuredFreq4, [1*100*f + 0 for f in SmoothFluo4], label=r'Rep $\sigma_-$')
plt.plot(MeasuredFreq5, [1*100*f + 0 for f in SmoothFluo5], label=r'Rep $\sigma_+ + \sigma_-$')
plt.legend()
plt.ylim(0.5, 7.5)
#%%
from scipy.optimize import curve_fit
T = 0.5e-3
sg = 0.7
sp = 6
sr = 0
DetDoppler = -14
DetRepump = 0
FitsSp = []
FitsOffset = []
Sg = [0.87]
def FitEIT(freqs, SP, offset):
MeasuredFreq, MeasuredFluo = GenerateNoisyCPT_fit(0.87, sr, SP, gPS, gPD, DetDoppler, DetRepump, u, DopplerLaserLinewidth, RepumpLaserLinewidth, ProbeLaserLinewidth, T, alpha, phidoppler, titadoppler, phiprobe, [titaprobe], phirepump, titarepump, freqs, plot=False, solvemode=1, detpvec=None, noiseamplitude=noiseamplitude)
FinalFluo = [f*43000 + 2685 for f in MeasuredFluo]
return FinalFluo
freqs = [f-offsetx+32 for f in FreqsDR]
freqslong = np.arange(min(freqs), max(freqs)+freqs[1]-freqs[0], 0.1*(freqs[1]-freqs[0]))
popt, pcov = curve_fit(FitEIT, freqs, CountsDR, p0=[5, 700], bounds=(0, [10, 1e6]))
FitsSp.append(popt[0])
FitsOffset.append(popt[1])
print(popt)
FittedEIT = FitEIT(freqslong, *popt)
plt.figure()
plt.errorbar(freqs, CountsDR, yerr=2*np.sqrt(CountsDR), fmt='o', capsize=2, markersize=2)
plt.plot(freqslong, FitEIT(freqslong, *popt))
plt.title(f'Sdop: {round(popt[0], 2)}, Spr: {round(popt[1], 2)}, T: {T*1e3} mK, detDop: {DetDoppler} MHz')
np.savetxt('CPT_measured.txt', np.transpose([freqs, CountsDR]))
np.savetxt('CPT_fitted.txt', np.transpose([freqslong, FittedEIT]))
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Thu Jul 2 16:30:09 2020
@author: oem
"""
import os
import numpy as np
import time
import matplotlib.pyplot as plt
from scipy.signal import argrelextrema
from threeLevel_2repumps_linealpol_python_scripts import CPTspectrum8levels, CPTspectrum8levels_fixedRabi
import random
from scipy.signal import savgol_filter as sf
def CalculoTeoricoDarkResonances_8levels(u, titadoppler, detuningdoppler, detuningrepump):
if titadoppler==0:
NegativeDR = [(-7/5)*u, (-3/5)*u, (-1/5)*u, (1/5)*u, (3/5)*u, (7/5)*u]
elif titadoppler==90:
NegativeDR = [(-11/5)*u, (-7/5)*u, (-3/5)*u, (3/5)*u, (7/5)*u, (11/5)*u]
else:
NegativeDR = [(-11/5)*u, (-7/5)*u, (-3/5)*u, (-1/5)*u, (1/5)*u, (3/5)*u, (7/5)*u, (11/5)*u]
PositiveDR = [(-8/5)*u, (-4/5)*u, 0, (4/5)*u, (8/5)*u]
return [detuningdoppler + dr for dr in NegativeDR], [detuningrepump + dr for dr in PositiveDR]
def GetClosestIndex(Vector, value, tolerance=1e-3):
i = 0
while i<len(Vector):
if abs(Vector[i] - value) < tolerance:
return i
else:
i = i + 1
return GetClosestIndex(Vector, value, tolerance=2*tolerance)
def FindDRFrequencies(Freq, Fluo, TeoDR, entorno=3):
"""
Busca los indices y la frecuencia de los minimos en un entorno cercano al de la DR.
Si no encuentra, devuelve el valor teórico.
"""
IndiceDRteo1, IndiceEntornoinicialDRteo1, IndiceEntornofinalDRteo1 = GetClosestIndex(Freq, TeoDR[0]), GetClosestIndex(Freq, TeoDR[0]-entorno), GetClosestIndex(Freq, TeoDR[0]+entorno)
IndiceDRteo2, IndiceEntornoinicialDRteo2, IndiceEntornofinalDRteo2 = GetClosestIndex(Freq, TeoDR[1]), GetClosestIndex(Freq, TeoDR[1]-entorno), GetClosestIndex(Freq, TeoDR[1]+entorno)
IndiceDRteo3, IndiceEntornoinicialDRteo3, IndiceEntornofinalDRteo3 = GetClosestIndex(Freq, TeoDR[2]), GetClosestIndex(Freq, TeoDR[2]-entorno), GetClosestIndex(Freq, TeoDR[2]+entorno)
IndiceDRteo4, IndiceEntornoinicialDRteo4, IndiceEntornofinalDRteo4 = GetClosestIndex(Freq, TeoDR[3]), GetClosestIndex(Freq, TeoDR[3]-entorno), GetClosestIndex(Freq, TeoDR[3]+entorno)
IndiceDRteo5, IndiceEntornoinicialDRteo5, IndiceEntornofinalDRteo5 = GetClosestIndex(Freq, TeoDR[4]), GetClosestIndex(Freq, TeoDR[4]-entorno), GetClosestIndex(Freq, TeoDR[4]+entorno)
IndiceDRteo6, IndiceEntornoinicialDRteo6, IndiceEntornofinalDRteo6 = GetClosestIndex(Freq, TeoDR[5]), GetClosestIndex(Freq, TeoDR[5]-entorno), GetClosestIndex(Freq, TeoDR[5]+entorno)
EntornoFreqDR1, EntornoFreqDR2 = Freq[IndiceEntornoinicialDRteo1:IndiceEntornofinalDRteo1], Freq[IndiceEntornoinicialDRteo2:IndiceEntornofinalDRteo2]
EntornoFreqDR3, EntornoFreqDR4 = Freq[IndiceEntornoinicialDRteo3:IndiceEntornofinalDRteo3], Freq[IndiceEntornoinicialDRteo4:IndiceEntornofinalDRteo4]
EntornoFreqDR5, EntornoFreqDR6 = Freq[IndiceEntornoinicialDRteo5:IndiceEntornofinalDRteo5], Freq[IndiceEntornoinicialDRteo6:IndiceEntornofinalDRteo6]
EntornoFluoDR1, EntornoFluoDR2 = Fluo[IndiceEntornoinicialDRteo1:IndiceEntornofinalDRteo1], Fluo[IndiceEntornoinicialDRteo2:IndiceEntornofinalDRteo2]
EntornoFluoDR3, EntornoFluoDR4 = Fluo[IndiceEntornoinicialDRteo3:IndiceEntornofinalDRteo3], Fluo[IndiceEntornoinicialDRteo4:IndiceEntornofinalDRteo4]
EntornoFluoDR5, EntornoFluoDR6 = Fluo[IndiceEntornoinicialDRteo5:IndiceEntornofinalDRteo5], Fluo[IndiceEntornoinicialDRteo6:IndiceEntornofinalDRteo6]
IndiceFluoMinimaEntorno1, IndiceFluoMinimaEntorno2 = argrelextrema(np.array(EntornoFluoDR1), np.less)[0], argrelextrema(np.array(EntornoFluoDR2), np.less)[0]
IndiceFluoMinimaEntorno3, IndiceFluoMinimaEntorno4 = argrelextrema(np.array(EntornoFluoDR3), np.less)[0], argrelextrema(np.array(EntornoFluoDR4), np.less)[0]
IndiceFluoMinimaEntorno5, IndiceFluoMinimaEntorno6 = argrelextrema(np.array(EntornoFluoDR5), np.less)[0], argrelextrema(np.array(EntornoFluoDR6), np.less)[0]
try:
FreqDR1 = EntornoFreqDR1[int(IndiceFluoMinimaEntorno1)]
IndiceDR1 = GetClosestIndex(Freq, FreqDR1)
except:
FreqDR1 = TeoDR[0]
IndiceDR1 = IndiceDRteo1
try:
FreqDR2 = EntornoFreqDR2[int(IndiceFluoMinimaEntorno2)]
IndiceDR2 = GetClosestIndex(Freq, FreqDR2)
except:
FreqDR2 = TeoDR[1]
IndiceDR2 = IndiceDRteo2
try:
FreqDR3 = EntornoFreqDR3[int(IndiceFluoMinimaEntorno3)]
IndiceDR3 = GetClosestIndex(Freq, FreqDR3)
except:
FreqDR3 = TeoDR[2]
IndiceDR3 = IndiceDRteo3
try:
FreqDR4 = EntornoFreqDR4[int(IndiceFluoMinimaEntorno4)]
IndiceDR4 = GetClosestIndex(Freq, FreqDR4)
except:
FreqDR4 = TeoDR[3]
IndiceDR4 = IndiceDRteo4
try:
FreqDR5 = EntornoFreqDR5[int(IndiceFluoMinimaEntorno5)]
IndiceDR5 = GetClosestIndex(Freq, FreqDR5)
except:
FreqDR5 = TeoDR[4]
IndiceDR5 = IndiceDRteo5
try:
FreqDR6 = EntornoFreqDR6[int(IndiceFluoMinimaEntorno6)]
IndiceDR6 = GetClosestIndex(Freq, FreqDR6)
except:
FreqDR6 = TeoDR[5]
IndiceDR6 = IndiceDRteo6
return [IndiceDR1, IndiceDR2, IndiceDR3, IndiceDR4, IndiceDR5, IndiceDR6], [FreqDR1, FreqDR2, FreqDR3, FreqDR4, FreqDR5, FreqDR6]
def FindRelativeFluorescencesOfDR(Freq, Fluo, IndicesDR, detuningdoppler, NormalizationCriterium=1, frecuenciareferenciacriterioasintotico=-100, getindices=False):
"""
Toma los indices donde estan las DR y evalua su fluorescencia. Esos indices son minimos locales en un entorno
cercano a las DR teoricas y, si no hay ningun minimo, toma la teorica.
Luego, hace el cociente de esa fluorescencia y un factor de normalización segun NormalizationCriterium:
1: Devuelve la fluorescencia absoluta de los minimos
2: Devuelve el cociente entre la fluorescencia del minimo y un valor medio entre dos puntos lejanos, como si no
hubiera una resonancia oscura y hubiera una recta. Ese valor esta a DistanciaFrecuenciaCociente del detuning del azul (el punto medio entre las dos DR en este caso)
3: Devuelve el cociente entre la fluorescencia del minimo y el valor a -100 MHz (si se hizo de -100 a 100),
o el valor limite por izquierda de la curva
4: Deuelve el cociente entre la fluorescencia del minimo y el valor de fluorescencia a detuning 0 MHz
"""
IndiceDR1, IndiceDR2, IndiceDR3, IndiceDR4, IndiceDR5, IndiceDR6 = IndicesDR[0], IndicesDR[1], IndicesDR[2], IndicesDR[3], IndicesDR[4], IndicesDR[5]
FluorescenceOfMinimums = [Fluo[IndiceDR1], Fluo[IndiceDR2], Fluo[IndiceDR3], Fluo[IndiceDR4], Fluo[IndiceDR5], Fluo[IndiceDR6]]
FrequencyOfMinimums = [Freq[IndiceDR1], Freq[IndiceDR2], Freq[IndiceDR3], Freq[IndiceDR4], Freq[IndiceDR5], Freq[IndiceDR6]]
DistanciaFrecuenciaCociente = 25
if NormalizationCriterium==0:
print('che')
return FrequencyOfMinimums, FluorescenceOfMinimums
if NormalizationCriterium==1:
Fluorescenciacerodetuning = Fluo[GetClosestIndex(Freq, 0)]
Fluorescenciaasintotica = Fluo[GetClosestIndex(Freq, frecuenciareferenciacriterioasintotico)]
return FrequencyOfMinimums, np.array([Fluorescenciacerodetuning/Fluorescenciaasintotica, Fluorescenciacerodetuning/Fluorescenciaasintotica, Fluorescenciacerodetuning/Fluorescenciaasintotica, Fluorescenciacerodetuning/Fluorescenciaasintotica, Fluorescenciacerodetuning/Fluorescenciaasintotica, Fluorescenciacerodetuning/Fluorescenciaasintotica])
if NormalizationCriterium==2:
k = 0
while k < len(Freq):
if Freq[k] < detuningdoppler-DistanciaFrecuenciaCociente + 2 and Freq[k] > detuningdoppler-DistanciaFrecuenciaCociente - 2:
FluoIzquierda = Fluo[k]
indiceizquierda = k
print('Izq:', Freq[k])
break
else:
k = k + 1
l = 0
while l < len(Freq):
if Freq[l] < detuningdoppler+DistanciaFrecuenciaCociente + 2 and Freq[l] > detuningdoppler+DistanciaFrecuenciaCociente - 2:
FluoDerecha = Fluo[l]
indicederecha = l
print('Der: ', Freq[l])
break
else:
l = l + 1
FluoNormDivisor = 0.5*(FluoDerecha+FluoIzquierda)
print(FluoNormDivisor)
if NormalizationCriterium==3:
#asintotico
FluoNormDivisor = Fluo[GetClosestIndex(Freq, frecuenciareferenciacriterioasintotico)]
if NormalizationCriterium==4:
#este te tira la fluorescencia de detuning 0
FluoNormDivisor = Fluo[GetClosestIndex(Freq, 0)]
RelativeFluorescenceOfMinimums = np.array([Fluore/FluoNormDivisor for Fluore in FluorescenceOfMinimums])
print('Esto: ', RelativeFluorescenceOfMinimums)
if NormalizationCriterium==2 and getindices==True:
return FrequencyOfMinimums, RelativeFluorescenceOfMinimums, indiceizquierda, indicederecha
return FrequencyOfMinimums, RelativeFluorescenceOfMinimums
def GetFinalMaps(MapasDR1, MapasDR2, MapasDR3, MapasDR4, MapasDR5, MapasDR6):
"""
Nota: esto vale para polarizacion del 397 sigma+ + sigma-. Sino hay que cambiar los coeficientes.
La estructura es:
MapasDRi = [MapaMedido_criterio1_DRi, MapaMedido_criterio2_DRi, MapaMedido_criterio3_DRi, MapaMedido_criterio4_DRi]
"""
Mapa1 = MapasDR1[0]
Mapa2pi = np.sqrt(3)*(MapasDR2[1] + MapasDR5[1])
Mapa2smas = np.sqrt(12/2)*MapasDR3[1] + (2/np.sqrt(2))*MapasDR6[1]
Mapa2smenos = (2/np.sqrt(2))*MapasDR1[1] + np.sqrt(12/2)*MapasDR4[1]
Mapa3pi = np.sqrt(3)*(MapasDR2[2] + MapasDR5[2])
Mapa3smas = np.sqrt(12/2)*MapasDR3[2] + (2/np.sqrt(2))*MapasDR6[2]
Mapa3smenos = (2/np.sqrt(2))*MapasDR1[2] + np.sqrt(12/2)*MapasDR4[2]
return Mapa1, [Mapa2pi, Mapa2smas, Mapa2smenos], [Mapa3pi, Mapa3smas, Mapa3smenos]
def CombinateDRwithCG(RelMinMedido1, RelMinMedido2, RelMinMedido3, RelMinMedido4):
Fluo1 = RelMinMedido1[0]
Fluo2pi = np.sqrt(3)*(RelMinMedido2[1] + RelMinMedido2[4])
Fluo2smas = np.sqrt(12/2)*RelMinMedido2[2] + (2/np.sqrt(2))*RelMinMedido2[5]
Fluo2smenos = (2/np.sqrt(2))*RelMinMedido2[0] + np.sqrt(12/2)*RelMinMedido2[3]
Fluo3pi = np.sqrt(3)*(RelMinMedido3[1] + RelMinMedido3[4])
Fluo3smas = np.sqrt(12/2)*RelMinMedido3[2] + (2/np.sqrt(2))*RelMinMedido3[5]
Fluo3smenos = (2/np.sqrt(2))*RelMinMedido3[0] + np.sqrt(12/2)*RelMinMedido3[3]
return Fluo1, [Fluo2pi, Fluo2smas, Fluo2smenos], [Fluo3pi, Fluo3smas, Fluo3smenos]
def IdentifyPolarizationCoincidences(theoricalmap, target, tolerance=1e-1):
"""
Busca en un mapa 2D la presencia de un valor target (medido) con tolerancia tolerance.
Si lo encuentra, pone un 1. Sino, un 0. Al plotear con pcolor se verá
en blanco la zona donde el valor medido se puede hallar.
"""
CoincidenceMatrix = np.zeros((len(theoricalmap), len(theoricalmap[0])))
i = 0
while i<len(theoricalmap):
j = 0
while j<len(theoricalmap[0]):
if abs(theoricalmap[i][j]-target) < tolerance:
CoincidenceMatrix[i][j] = 1
j=j+1
i=i+1
return CoincidenceMatrix
def RetrieveAbsoluteCoincidencesBetweenMaps(MapsVectors):
MatrixSum = np.zeros((len(MapsVectors[0]), len(MapsVectors[0][0])))
AbsoluteCoincidencesMatrix = np.zeros((len(MapsVectors[0]), len(MapsVectors[0][0])))
MatrixMapsVectors = []
for i in range(len(MapsVectors)):
MatrixMapsVectors.append(np.matrix(MapsVectors[i]))
for i in range(len(MatrixMapsVectors)):
MatrixSum = MatrixSum + MatrixMapsVectors[i]
MaxNumberOfCoincidences = np.max(MatrixSum)
ListMatrixSum = [list(i) for i in list(np.array(MatrixSum))]
for i in range(len(ListMatrixSum)):
for j in range(len(ListMatrixSum[0])):
if ListMatrixSum[i][j] == MaxNumberOfCoincidences:
AbsoluteCoincidencesMatrix[i][j] = 1
return AbsoluteCoincidencesMatrix, MaxNumberOfCoincidences
def MeasureMeanValueOfEstimatedArea(AbsoluteCoincidencesMap, X, Y):
NonZeroIndices = np.nonzero(AbsoluteCoincidencesMap)
Xsum = 0
Xvec = []
Ysum = 0
Yvec = []
N = len(NonZeroIndices[0])
for i in range(N):
Xsum = Xsum + X[NonZeroIndices[1][i]]
Xvec.append(X[NonZeroIndices[1][i]])
Ysum = Ysum + Y[NonZeroIndices[0][i]]
Yvec.append(Y[NonZeroIndices[0][i]])
Xaverage = Xsum/N
Yaverage = Ysum/N
Xspread = np.std(Xvec)
Yspread = np.std(Yvec)
return Xaverage, Yaverage, N, Xspread, Yspread
def MeasureRelativeFluorescenceFromCPT(Freq, Fluo, u, titadoppler, detuningrepump, detuningdoppler, frefasint=-100, entorno=3):
ResonanciasTeoricas, ResonanciasPositivas = CalculoTeoricoDarkResonances_8levels(u, titadoppler, detuningdoppler, detuningrepump)
IndicesDR, FreqsDR = FindDRFrequencies(Freq, Fluo, ResonanciasTeoricas, entorno=entorno)
FrequencyOfMinimums, RelativeFluorescenceOfMinimums0 = FindRelativeFluorescencesOfDR(Freq, Fluo, IndicesDR, detuningdoppler, NormalizationCriterium=0, frecuenciareferenciacriterioasintotico=frefasint)
FrequencyOfMinimums, RelativeFluorescenceOfMinimums1 = FindRelativeFluorescencesOfDR(Freq, Fluo, IndicesDR, detuningdoppler, NormalizationCriterium=1, frecuenciareferenciacriterioasintotico=frefasint)
FrequencyOfMinimums, RelativeFluorescenceOfMinimums2, indiceizquierda, indicederecha = FindRelativeFluorescencesOfDR(Freq, Fluo, IndicesDR, detuningdoppler, NormalizationCriterium=2, frecuenciareferenciacriterioasintotico=frefasint, getindices=True)
FrequencyOfMinimums, RelativeFluorescenceOfMinimums3 = FindRelativeFluorescencesOfDR(Freq, Fluo, IndicesDR, detuningdoppler, NormalizationCriterium=3, frecuenciareferenciacriterioasintotico=frefasint)
FrequencyOfMinimums, RelativeFluorescenceOfMinimums4 = FindRelativeFluorescencesOfDR(Freq, Fluo, IndicesDR, detuningdoppler, NormalizationCriterium=4, frecuenciareferenciacriterioasintotico=frefasint)
print(RelativeFluorescenceOfMinimums0)
return RelativeFluorescenceOfMinimums0, RelativeFluorescenceOfMinimums1, RelativeFluorescenceOfMinimums2, RelativeFluorescenceOfMinimums3, RelativeFluorescenceOfMinimums4, IndicesDR, [indiceizquierda, indicederecha]
def GenerateNoisyCPT(rabG, rabR, rabP, gPS, gPD, DetDoppler, DetRepump, u, DopplerLaserLinewidth, RepumpLaserLinewidth, ProbeLaserLinewidth, T, alpha, phidoppler, titadoppler, phiprobe, titaprobeVec, phirepump, titarepump, freqMin, freqMax, freqStep, circularityprobe=1, circularityrepump=1, plot=False, solvemode=1, detpvec=None, noiseamplitude=0.001):
Frequencyvector, Fluovector = PerformExperiment_8levels(rabG, rabR, rabP, gPS, gPD, DetDoppler, DetRepump, u, DopplerLaserLinewidth, RepumpLaserLinewidth, ProbeLaserLinewidth, T, alpha, phidoppler, titadoppler, phiprobe, titaprobeVec, phirepump, titarepump, freqMin, freqMax, freqStep, circularityprobe=1, circularityrepump=1, plot=False, solvemode=1, detpvec=None)
NoisyFluovector = [fluo+noiseamplitude*(2*random.random()-1) for fluo in Fluovector]
return Frequencyvector, NoisyFluovector
def GenerateNoisyCPT_fixedRabi(sg, sr, sp, gPS, gPD, DetDoppler, DetRepump, u, DopplerLaserLinewidth, RepumpLaserLinewidth, ProbeLaserLinewidth, T, alpha, phidoppler, titadoppler, phiprobe, titaprobeVec, phirepump, titarepump, freqMin, freqMax, freqStep, circularityprobe=1, circularityrepump=1, plot=False, solvemode=1, detpvec=None, noiseamplitude=0.001):
Frequencyvector, Fluovector = PerformExperiment_8levels_fixedRabi(sg, sr, sp, gPS, gPD, DetDoppler, DetRepump, u, DopplerLaserLinewidth, RepumpLaserLinewidth, ProbeLaserLinewidth, T, alpha, phidoppler, titadoppler, phiprobe, titaprobeVec, phirepump, titarepump, freqMin, freqMax, freqStep, circularityprobe, circularityrepump, plot=False, solvemode=1, detpvec=None)
NoisyFluovector = [fluo+noiseamplitude*(2*random.random()-1) for fluo in Fluovector]
return Frequencyvector, NoisyFluovector
def GenerateNoisyCPT_fit(sg, sr, sp, gPS, gPD, DetDoppler, DetRepump, u, DopplerLaserLinewidth, RepumpLaserLinewidth, ProbeLaserLinewidth, T, alpha, phidoppler, titadoppler, phiprobe, titaprobeVec, phirepump, titarepump, freqs, circularityprobe=1, circularityrepump=1, plot=False, solvemode=1, detpvec=None, noiseamplitude=0.001):
Frequencyvector, Fluovector = PerformExperiment_8levels_fixedRabi(sg, sr, sp, gPS, gPD, DetDoppler, DetRepump, u, DopplerLaserLinewidth, RepumpLaserLinewidth, ProbeLaserLinewidth, T, alpha, phidoppler, titadoppler, phiprobe, titaprobeVec, phirepump, titarepump, min(freqs), max(freqs) + freqs[1]-freqs[0], freqs[1]-freqs[0], circularityprobe=1, circularityrepump=1, plot=False, solvemode=1, detpvec=None)
NoisyFluovector = [fluo+noiseamplitude*(2*random.random()-1) for fluo in Fluovector]
return Frequencyvector, NoisyFluovector
def AddNoiseToCPT(Fluo, noisefactor):
return [f+noisefactor*(2*random.random()-1) for f in Fluo]
def SmoothNoisyCPT(Fluo, window=11, poly=3):
SmoothenFluo = sf(Fluo, window, poly)
return SmoothenFluo
def GetMinimaInfo(Freq, Fluo, u, titadoppler, detuningdoppler, detuningrepump, MinimumCriterium=2, NormalizationCriterium=1):
"""
FUNCION VIEJA
Esta funcion devuelve valores de frecuencias y fluorescencia relativa de los minimos.
Minimumcriterion:
1: Saca los minimos con funcion argelextrema
2: Directamente con las frecuencias teoricas busca las fluorescencias
Normalizationcriterium:
1: Devuelve la fluorescencia absoluta de los minimos
2: Devuelve el cociente entre la fluorescencia del minimo y un valor medio entre dos puntos lejanos, como si no
hubiera una resonancia oscura y hubiera una recta. Ese valor esta a DistanciaFrecuenciaCociente del detuning del azul (el punto medio entre las dos DR en este caso)
3: Devuelve el cociente entre la fluorescencia del minimo y el valor a -100 MHz (si se hizo de -100 a 100),
o el valor limite por izquierda de la curva
"""
FluorescenceOfMaximum = max(Fluo)
FrequencyOfMaximum = Freq[Fluo.index(FluorescenceOfMaximum)]
#criterio para encontrar los minimos
#criterio usando minimos de la fluorescencia calculados con la curva
if MinimumCriterium == 1:
LocationOfMinimums = argrelextrema(np.array(Fluo), np.less)[0]
FluorescenceOfMinimums = np.array([Fluo[i] for i in LocationOfMinimums])
FrequencyOfMinimums = np.array([Freq[j] for j in LocationOfMinimums])
#criterio con las DR teoricas
if MinimumCriterium == 2:
FrecuenciasDRTeoricas, FrecuenciasDRTeoricasPositivas = [darkresonance for darkresonance in CalculoTeoricoDarkResonances_8levels(u, titadoppler, detuningdoppler, detuningrepump)[0]]
FrequencyOfMinimums = []
FluorescenceOfMinimums =[]
print(FrecuenciasDRTeoricas)
k=0
ventanita = 0.001
while k < len(Freq):
if Freq[k] < FrecuenciasDRTeoricas[0] + ventanita and Freq[k] > FrecuenciasDRTeoricas[0] - ventanita:
FrequencyOfMinimums.append(Freq[k])
FluorescenceOfMinimums.append(Fluo[k])
elif Freq[k] < FrecuenciasDRTeoricas[1] + ventanita and Freq[k] > FrecuenciasDRTeoricas[1] - ventanita:
FrequencyOfMinimums.append(Freq[k])
FluorescenceOfMinimums.append(Fluo[k])
elif Freq[k] < FrecuenciasDRTeoricas[2] + ventanita and Freq[k] > FrecuenciasDRTeoricas[2] - ventanita:
FrequencyOfMinimums.append(Freq[k])
FluorescenceOfMinimums.append(Fluo[k])
elif Freq[k] < FrecuenciasDRTeoricas[3] + ventanita and Freq[k] > FrecuenciasDRTeoricas[3] - ventanita:
FrequencyOfMinimums.append(Freq[k])
FluorescenceOfMinimums.append(Fluo[k])
elif Freq[k] < FrecuenciasDRTeoricas[4] + ventanita and Freq[k] > FrecuenciasDRTeoricas[4] - ventanita:
FrequencyOfMinimums.append(Freq[k])
FluorescenceOfMinimums.append(Fluo[k])
elif Freq[k] < FrecuenciasDRTeoricas[5] + ventanita and Freq[k] > FrecuenciasDRTeoricas[5] - ventanita:
FrequencyOfMinimums.append(Freq[k])
FluorescenceOfMinimums.append(Fluo[k])
k = k + 1
print(FrequencyOfMinimums)
if len(FrequencyOfMinimums) != len(FrecuenciasDRTeoricas):
print('NO ANDA BIEN ESTO PAPI, revisalo')
#esto es para establecer un criterio para la fluorescencia relativa
DistanciaFrecuenciaCociente = 15
if NormalizationCriterium==1:
FluoNormDivisor = 1
if NormalizationCriterium==2:
k = 0
while k < len(Freq):
if Freq[k] < detuningdoppler-DistanciaFrecuenciaCociente + 2 and Freq[k] > detuningdoppler-DistanciaFrecuenciaCociente - 2:
FluoIzquierda = Fluo[k]
print('Izq:', Freq[k])
break
else:
k = k + 1
l = 0
while l < len(Freq):
if Freq[l] < detuningdoppler+DistanciaFrecuenciaCociente + 2 and Freq[l] > detuningdoppler+DistanciaFrecuenciaCociente - 2:
FluoDerecha = Fluo[l]
print('Der: ', Freq[l])
break
else:
l = l + 1
FluoNormDivisor = 0.5*(FluoDerecha+FluoIzquierda)
print(FluoNormDivisor)
if NormalizationCriterium==3:
FluoNormDivisor = Fluo[0]
RelativeFluorescenceOfMinimums = np.array([Fluore/FluoNormDivisor for Fluore in FluorescenceOfMinimums])
return FrequencyOfMinimums, RelativeFluorescenceOfMinimums
def GetPlotsofFluovsAngle_8levels(FrequencyOfMinimumsVector, RelativeFluorescenceOfMinimumsVector, u, titadoppler, detuningdoppler, detuningrepump, ventana=0.25, taketheoricalDR=False):
#primero buscamos las frecuencias referencia que se parezcan a las 6:
i = 0
FrecuenciasReferenciaBase = FrequencyOfMinimumsVector[0]
FrecuenciasDRTeoricas = [darkresonance for darkresonance in CalculoTeoricoDarkResonances_8levels(u, titadoppler, detuningdoppler, detuningrepump)[0]]
while i < len(FrequencyOfMinimumsVector):
if len(FrequencyOfMinimumsVector[i])==len(FrecuenciasDRTeoricas):
FrecuenciasReferenciaBase = FrequencyOfMinimumsVector[i]
print('Cool! Taking the DR identified with any curve')
break
else:
i = i + 1
if i==len(FrequencyOfMinimumsVector):
print('No hay ningun plot con 5 resonancias oscuras. Tomo las teóricas')
FrecuenciasReferenciaBase = FrecuenciasDRTeoricas
if taketheoricalDR:
FrecuenciasReferenciaBase = FrecuenciasDRTeoricas
Ventana = abs(ventana*(FrecuenciasReferenciaBase[1] - FrecuenciasReferenciaBase[0])) #ventana separadora de resonancias
print('Ventana = ', Ventana)
DarkResonance1Frequency = []
DarkResonance1Fluorescence = []
DarkResonance2Frequency = []
DarkResonance2Fluorescence = []
DarkResonance3Frequency = []
DarkResonance3Fluorescence = []
DarkResonance4Frequency = []
DarkResonance4Fluorescence = []
DarkResonance5Frequency = []
DarkResonance5Fluorescence = []
DarkResonance6Frequency = []
DarkResonance6Fluorescence = []
i = 0
while i < len(FrequencyOfMinimumsVector):
j = 0
FrecuenciasReferencia = [i for i in FrecuenciasReferenciaBase]
while j < len(FrequencyOfMinimumsVector[i]):
if abs(FrequencyOfMinimumsVector[i][j]) < (abs(FrecuenciasReferencia[0])+Ventana) and abs(FrequencyOfMinimumsVector[i][j]) >= (abs(FrecuenciasReferencia[0])-Ventana):
DarkResonance1Frequency.append(FrequencyOfMinimumsVector[i][j])
DarkResonance1Fluorescence.append(RelativeFluorescenceOfMinimumsVector[i][j])
FrecuenciasReferencia[0] = 0
elif abs(FrequencyOfMinimumsVector[i][j]) < (abs(FrecuenciasReferencia[1])+Ventana) and abs(FrequencyOfMinimumsVector[i][j]) >= (abs(FrecuenciasReferencia[1])-Ventana):
DarkResonance2Frequency.append(FrequencyOfMinimumsVector[i][j])
DarkResonance2Fluorescence.append(RelativeFluorescenceOfMinimumsVector[i][j])
FrecuenciasReferencia[1] = 0
elif abs(FrequencyOfMinimumsVector[i][j]) < (abs(FrecuenciasReferencia[2])+Ventana) and abs(FrequencyOfMinimumsVector[i][j]) >= (abs(FrecuenciasReferencia[2])-Ventana):
DarkResonance3Frequency.append(FrequencyOfMinimumsVector[i][j])
DarkResonance3Fluorescence.append(RelativeFluorescenceOfMinimumsVector[i][j])
FrecuenciasReferencia[2] = 0
elif abs(FrequencyOfMinimumsVector[i][j]) < (abs(FrecuenciasReferencia[3])+Ventana) and abs(FrequencyOfMinimumsVector[i][j]) >= (abs(FrecuenciasReferencia[3])-Ventana):
DarkResonance4Frequency.append(FrequencyOfMinimumsVector[i][j])
DarkResonance4Fluorescence.append(RelativeFluorescenceOfMinimumsVector[i][j])
FrecuenciasReferencia[3] = 0
elif abs(FrequencyOfMinimumsVector[i][j]) < (abs(FrecuenciasReferencia[4])+Ventana) and abs(FrequencyOfMinimumsVector[i][j]) >= (abs(FrecuenciasReferencia[4])-Ventana):
DarkResonance5Frequency.append(FrequencyOfMinimumsVector[i][j])
DarkResonance5Fluorescence.append(RelativeFluorescenceOfMinimumsVector[i][j])
FrecuenciasReferencia[4] = 0
elif abs(FrequencyOfMinimumsVector[i][j]) < (abs(FrecuenciasReferencia[5])+Ventana) and abs(FrequencyOfMinimumsVector[i][j]) >= (abs(FrecuenciasReferencia[5])-Ventana):
DarkResonance6Frequency.append(FrequencyOfMinimumsVector[i][j])
DarkResonance6Fluorescence.append(RelativeFluorescenceOfMinimumsVector[i][j])
FrecuenciasReferencia[5] = 0
else:
#print('Algo anduvo mal, por ahi tenes que cambiar la ventana che')
pass
j = j + 1
if np.count_nonzero(FrecuenciasReferencia) > 0:
if FrecuenciasReferencia[0] != 0:
DarkResonance1Frequency.append(FrecuenciasReferencia[0])
DarkResonance1Fluorescence.append()
if FrecuenciasReferencia[1] != 0:
DarkResonance2Frequency.append(FrecuenciasReferencia[1])
DarkResonance2Fluorescence.append(0)
if FrecuenciasReferencia[2] != 0:
DarkResonance3Frequency.append(FrecuenciasReferencia[2])
DarkResonance3Fluorescence.append(0)
if FrecuenciasReferencia[3] != 0:
DarkResonance4Frequency.append(FrecuenciasReferencia[3])
DarkResonance4Fluorescence.append(0)
if FrecuenciasReferencia[4] != 0:
DarkResonance5Frequency.append(FrecuenciasReferencia[4])
DarkResonance5Fluorescence.append(0)
if FrecuenciasReferencia[5] != 0:
DarkResonance6Frequency.append(FrecuenciasReferencia[5])
DarkResonance6Fluorescence.append(0)
i = i + 1
return DarkResonance1Frequency, DarkResonance1Fluorescence, DarkResonance2Frequency, DarkResonance2Fluorescence, DarkResonance3Frequency, DarkResonance3Fluorescence, DarkResonance4Frequency, DarkResonance4Fluorescence, DarkResonance5Frequency, DarkResonance5Fluorescence, DarkResonance6Frequency, DarkResonance6Fluorescence, FrecuenciasReferenciaBase
def PerformExperiment_8levels(rabG, rabR, rabP, gPS, gPD, DetDoppler, DetRepump, u, DopplerLaserLinewidth, RepumpLaserLinewidth, ProbeLaserLinewidth, T, alpha, phidoppler, titadoppler, phiprobe, titaprobeVec, phirepump, titarepump, freqMin, freqMax, freqStep, circularityprobe=1, circularityrepump=1, plot=False, solvemode=1, detpvec=None):
"""
Hace un experimento barriendo ángulos de repump con el angulo de doppler fijo.
solvemode=1: resuelve con np.linalg.solve
solvemode=2: resuelve invirtiendo L con la funcion np.linalg.inv
"""
Fluovectors = []
for titaprobe in titaprobeVec:
tinicial = time.time()
ProbeDetuningVectorL, Fluovector = CPTspectrum8levels(rabG, rabR, rabP, gPS, gPD, DetDoppler, DetRepump, u, DopplerLaserLinewidth, RepumpLaserLinewidth, ProbeLaserLinewidth, T, alpha, phidoppler, titadoppler, phiprobe, titaprobe, phirepump, titarepump, circularityprobe=1, circularityrepump=1, freqMin=freqMin, freqMax=freqMax, freqStep=freqStep, plot=False, solvemode=1)
tfinal = time.time()
print('Done angle ', titarepump, ' Total time: ', round((tfinal-tinicial), 2), "s")
if plot:
plt.figure()
plt.xlabel('Repump detuning (MHz')
plt.ylabel('Fluorescence (A.U.)')
plt.plot(ProbeDetuningVectorL, Fluovector, label=str(titarepump)+'º tita repump, T: ' + str(T*1e3) + ' mK')
plt.legend()
Fluovectors.append(Fluovector)
if len(titaprobeVec) == 1: #esto es para que no devuelva un vector de vectores si solo fijamos un angulo
Fluovectors = Fluovector
return ProbeDetuningVectorL, Fluovectors
def PerformExperiment_8levels_fixedRabi(sg, sr, sp, gPS, gPD, DetDoppler, DetRepump, u, DopplerLaserLinewidth, RepumpLaserLinewidth, ProbeLaserLinewidth, T, alpha, phidoppler, titadoppler, phiprobe, titaprobeVec, phirepump, titarepump, freqMin, freqMax, freqStep, circularityprobe=1, circularityrepump=1, plot=False, solvemode=1, detpvec=None):
"""
Hace un experimento barriendo ángulos de repump con el angulo de doppler fijo.
solvemode=1: resuelve con np.linalg.solve
solvemode=2: resuelve invirtiendo L con la funcion np.linalg.inv
"""
Fluovectors = []
for titaprobe in titaprobeVec:
tinicial = time.time()
ProbeDetuningVectorL, Fluovector = CPTspectrum8levels_fixedRabi(sg, sr, sp, gPS, gPD, DetDoppler, DetRepump, u, DopplerLaserLinewidth, RepumpLaserLinewidth, ProbeLaserLinewidth, T, alpha, phidoppler, titadoppler, phiprobe, titaprobe, phirepump, titarepump, circularityprobe, circularityrepump, freqMin=freqMin, freqMax=freqMax, freqStep=freqStep, plot=False, solvemode=1)
tfinal = time.time()
print('Done angle ', titarepump, ' Total time: ', round((tfinal-tinicial), 2), "s")
if plot:
plt.figure()
plt.xlabel('Repump detuning (MHz')
plt.ylabel('Fluorescence (A.U.)')
plt.plot(ProbeDetuningVectorL, Fluovector, label=str(titarepump)+'º tita repump, T: ' + str(T*1e3) + ' mK')
plt.legend()
Fluovectors.append(Fluovector)
if len(titaprobeVec) == 1: #esto es para que no devuelva un vector de vectores si solo fijamos un angulo
Fluovectors = Fluovector
return ProbeDetuningVectorL, Fluovectors
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment