Commit 7eee8e2c authored by Nicolas Nunez Barreto's avatar Nicolas Nunez Barreto
parents 6ccb96c3 cb3167f1
#!/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 = 33.5e6
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 = -36 #42
DetRepumpVec = [DetDoppler+29.6]
Tvec = [0.7] #temperatura en mK
alpha = 0*(np.pi/180) #angulo entre los láseres
phidoppler, titadoppler = 0, 90
phirepump, titarepump = 0, 0
phiprobe = 0
titaprobe = 90
#Calculo las resonancias oscuras teóricas
#ResonanciasTeoricas, DRPositivas = CalculoTeoricoDarkResonances_8levels(u/(2*np.pi*1e6), titadoppler, DetDoppler, DetRepump)
#Parametros de la simulacion cpt
center = -45
span = 80
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 = [1.4]
Sp = [6]
Sr = [11]
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 = []
for sg in Sg:
for sp in Sp:
rabG, rabP = sg*gPS, sp*gPD
for Ti in Tvec:
T = Ti*1e-3
for DetRepump in DetRepumpVec:
print(T)
for sr in Sr:
rabR = sr*gPD
#MeasuredFreq, MeasuredFluo = GenerateNoisyCPT(rabG, rabR, rabP, 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)
if run:
MeasuredFreq4, MeasuredFluo4 = 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)
#SmoothFluo = SmoothNoisyCPT(MeasuredFluo, window=9, poly=2)
SmoothFluo4 = MeasuredFluo4
#Scale = max(BestC)/max([100*s for s in SmoothFluo4])
ax1.plot(MeasuredFreq4, [Scale*100*f + Offset for f in SmoothFluo4], label=f'Sr = {sr}')
ax1.axvline(DetDoppler, linestyle='--', linewidth=1)
#if sr != 0:
#ax1.axvline(DetRepump, linestyle='--', linewidth=1)
MaxCoherenceValue.append(np.max(SmoothFluo4))
#print(titaprobe)
ax1.set_xlabel('Detuning Rebombeo (MHz)')
ax1.set_ylabel('Fluorescencia (AU)')
ax1.set_title(f'B: {round(B, 2)} G, Sdop: {round(sg, 2)}, Sp: {round(sp, 2)}, Sr: {round(sr, 2)}, lw: {lw} MHz, T: {Ti} mK')
#ax1.set_ylim(0, 8)
#ax1.axvline(DetDoppler, linestyle='dashed', color='red', linewidth=1)
#ax1.axvline(DetRepump, linestyle='dashed', color='black', linewidth=1)
#ax1.set_title('Pol Doppler y Repump: Sigma+ Sigma-, Pol Probe: PI')
#ax1.legend()
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')
ax1.legend()
"""
plt.figure()
plt.plot(Sr, MaxCoherenceValue, 'o')
plt.xlabel('Sr')
plt.ylabel('Coherence')
"""
"""
plt.figure()
plt.plot(MeasuredFreq, [100*f for f in SmoothFluo], color='darkred')
plt.xlabel('Desintonía 866 (MHz)')
plt.ylabel('Fluorescencia (A.U.)')
plt.axvline(-30, color='darkblue', linewidth=1.2, linestyle='--')
plt.yticks(np.arange(0.4, 1.8, 0.2))
plt.ylim(0.5, 1.6)
plt.grid()
plt.figure()
plt.plot(MeasuredFreq4, [100*f for f in SmoothFluo4], color='darkred')
plt.xlabel('Desintonía 866 (MHz)')
plt.ylabel('Fluorescencia (A.U.)')
plt.axvline(-30, color='darkblue', linewidth=1.2, linestyle='--')
plt.yticks(np.arange(0.8, 2.4, 0.4))
plt.grid()
"""
#%%
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]))
This source diff could not be displayed because it is too large. You can view the blob instead.
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
#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
os.chdir('/home/nico/Documents/artiq_experiments/analisis/plots/20230817_RotationalDopplerShift_v4/Data')
"""
en este codigo ploteo espectros CPT de resonancias D-D para configuracion +2/+2 y +2/-2 (usando pentaprisma)
"""
def find_nearest(array, value):
array = np.asarray(array)
idx = (np.abs(array - value)).argmin()
return idx
IRPOWER_FILES = """VaryingPower/000014529-IR_Scan_withcal_optimized
VaryingPower/000014530-IR_Scan_withcal_optimized
VaryingPower/000014523-IR_Scan_withcal_optimized
VaryingPower/000014528-IR_Scan_withcal_optimized
VaryingPower/000014522-IR_Scan_withcal_optimized
VaryingPower/000014526-IR_Scan_withcal_optimized
VaryingPower/000014524-IR_Scan_withcal_optimized
VaryingPower/000014527-IR_Scan_withcal_optimized
VaryingPower/000014525-IR_Scan_withcal_optimized
VaryingPower/000014531-IR_Scan_withcal_optimized
"""
UVPOWER_FILES = """VaryingUVPower/000014581-IR_Scan_withcal_optimized
VaryingUVPower/000014582-IR_Scan_withcal_optimized
VaryingUVPower/000014583-IR_Scan_withcal_optimized
VaryingUVPower/000014584-IR_Scan_withcal_optimized
VaryingUVPower/000014585-IR_Scan_withcal_optimized
VaryingUVPower/000014586-IR_Scan_withcal_optimized
VaryingUVPower/000014587-IR_Scan_withcal_optimized
VaryingUVPower/000014588-IR_Scan_withcal_optimized
VaryingUVPower/000014589-IR_Scan_withcal_optimized
"""
def Split(array,n):
length=len(array)/n
splitlist = []
jj = 0
while jj<length:
partial = []
ii = 0
while ii < n:
partial.append(array[jj*n+ii])
ii = ii + 1
splitlist.append(partial)
jj = jj + 1
return splitlist
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(IRPOWER_FILES))
print(SeeKeys(UVPOWER_FILES))
#carpeta pc nico labo escritorio:
#C:\Users\Usuario\Documents\artiq\artiq_experiments\analisis\plots\20211101_CPT_DosLaseres_v03\Data
IrPowerCounts = []
IrPowerFrequencies = []
for i, fname in enumerate(IRPOWER_FILES.split()):
print(str(i) + ' - ' + fname)
data = h5py.File(fname+'.h5', 'r')
#Amplitudes.append(np.array(data['datasets']['amplitudes']))
IrPowerCounts.append(np.array(data['datasets']['counts_spectrum']))
IrPowerFrequencies.append(np.array(data['datasets']['IR1_Frequencies']))
UvPowerCounts = []
UvPowerFrequencies = []
UvPowerAmps = []
for i, fname in enumerate(UVPOWER_FILES.split()):
print(str(i) + ' - ' + fname)
data = h5py.File(fname+'.h5', 'r')
#Amplitudes.append(np.array(data['datasets']['amplitudes']))
UvPowerCounts.append(np.array(data['datasets']['counts_spectrum']))
UvPowerFrequencies.append(np.array(data['datasets']['IR1_Frequencies']))
UvPowerAmps.append(np.array(data['datasets']['UV_CPT_amp']))
def ErrorDRdepth(p, f, b):
ep = np.sqrt(p)
ef = np.sqrt(f)
eb = np.sqrt(b)
derivadap = 1/((f-b)**2)
derivadaf = ((p-b)/((f-b)**2))**2
derivadab = ((p-f)/((f-b)**2))**2
return 2*np.sqrt(derivadap*ep*ep + derivadaf*ef*ef + derivadab*eb*eb)
#%%
import seaborn as sns
"""
Resonancias DD configuracion +2/-2 colineal variando la potencia del laser IR2
"""
palette = sns.color_palette("tab10")
# pmlocmedvec = [0, 4, 3, 5, 1, 7, 6, 2]
# idxvec = [95, 95, 95, 94, 93, 98, 97, 97]
irpowermedvec = [0,1,2,3,4,5,6,7,8,9]
idxvecdr1 = [159, 159, 159, 159, 159, 159, 159, 159, 160, 159]
idxvecdr2 = [394, 394, 394, 394, 394, 394, 394, 394, 394, 393]
#irpowermedvec = [0]
IrAmpVec = [0.03, 0.04, 0.06, 0.09, 0.12, 0.15, 0.18, 0.21, 0.24, 0.33]
PotIr2Vec = [0.05, 0.08, 0.48, 2.5, 7.5, 16.8, 31.2, 50.8, 73.6, 143]
PotIr1 = 3.6
plt.figure()
ftrap = 22.1
DR1 = 435.8
DR2 = 444.2
bkg = 130
powdepthsdr1=[]
errorpowdepthsdr1=[]
powdepthsdr2=[]
errorpowdepthsdr2=[]
idxtest = 393
jj=0
for med in irpowermedvec:
if med == 0:
powdepthsdr1.append(1-(IrPowerCounts[med][1:][idxvecdr1[jj]]-bkg)/(np.mean(IrPowerCounts[med][1:][50:150])-bkg))
powdepthsdr2.append(1-(IrPowerCounts[med][1:][idxvecdr2[jj]]-bkg)/(np.mean(IrPowerCounts[med][1:][-100:-1])-bkg))
errorpowdepthsdr1.append(ErrorDRdepth(IrPowerCounts[med][1:][idxvecdr1[jj]],np.mean(IrPowerCounts[med][1:][50:150]), bkg))
errorpowdepthsdr2.append(ErrorDRdepth(IrPowerCounts[med][1:][idxvecdr2[jj]],np.mean(IrPowerCounts[med][1:][-100:-1]), bkg))
else:
powdepthsdr1.append(1-(IrPowerCounts[med][1:][idxvecdr1[jj]]-bkg)/(np.mean(IrPowerCounts[med][1:][0:20])-bkg))
powdepthsdr2.append(1-(IrPowerCounts[med][1:][idxvecdr2[jj]]-bkg)/(np.mean(IrPowerCounts[med][1:][0:20])-bkg))
errorpowdepthsdr1.append(ErrorDRdepth(IrPowerCounts[med][1:][idxvecdr1[jj]],np.mean(IrPowerCounts[med][1:][0:20]), bkg))
errorpowdepthsdr2.append(ErrorDRdepth(IrPowerCounts[med][1:][idxvecdr2[jj]],np.mean(IrPowerCounts[med][1:][0:20]), bkg))
plt.plot([2*f*1e-6 for f in IrPowerFrequencies[med][1:]], [c for c in IrPowerCounts[med][1:]], '-o', color=palette[med],markersize=2, alpha=0.7, label=f'{IrAmpVec[jj]}')
plt.plot([2*f*1e-6 for f in IrPowerFrequencies[med][1:]][idxtest], [c for c in IrPowerCounts[med][1:]][idxtest], 'o', color=palette[med],markersize=14)
jj=jj+1
plt.xlabel('Frecuencia (MHz)')
plt.ylabel('Counts')
#plt.xlim(442,445)
plt.grid()
#plt.legend()
#plt.title('Espectros para distintas geometrías')
fig, ax = plt.subplots()
ax.errorbar(PotIr2Vec, powdepthsdr1, yerr=errorpowdepthsdr1, fmt='o',capsize=4, markersize=10, label='DR left')
ax.errorbar(PotIr2Vec, powdepthsdr2, yerr=errorpowdepthsdr2, fmt='o',capsize=4, markersize=10, label='DR right')
ax.set_xlabel('IR1 amp')
ax.set_ylabel('DR Relative depth')
ax.set_xlim(-5,80)
ax.set_xscale('linear')
ax.set_ylim(0,1)
ax.axvline(PotIr1, label='IR1 power', linestyle='--', color='firebrick', zorder=0, alpha=0.7)
plt.legend()
plt.grid()
#%%
import seaborn as sns
"""
Resonancias DD configuracion +2/-2 colineal variando la potencia del laser UV
"""
palette = sns.color_palette("tab10")
# pmlocmedvec = [0, 4, 3, 5, 1, 7, 6, 2]
# idxvec = [95, 95, 95, 94, 93, 98, 97, 97]
uvpowermedvec = [0,1,2,3,4,5,6,7,8]
idxvecdr1 = [95, 95, 95, 95, 95, 95,95,95,95]
idxvecdr2 = [236, 236, 236, 236, 236, 236, 236, 236, 236, 236]
#uvpowermedvec = [2]
PotUvVec = [4, 0.76, 11, 22.4, 36, 50, 61, 65, 1.5]
plt.figure()
ftrap = 22.1
DR1 = 435.8
DR2 = 444.2
bkg = 120
powdepthsdr1=[]
errorpowdepthsdr1=[]
powdepthsdr2=[]
errorpowdepthsdr2=[]
idxtest = 236
jj=0
for med in uvpowermedvec:
if med == 1:
powdepthsdr1.append(1-(UvPowerCounts[med][1:][idxvecdr1[jj]]-bkg)/(np.mean(UvPowerCounts[med][1:][6:26])-bkg))
powdepthsdr2.append(1-(UvPowerCounts[med][1:][idxvecdr2[jj]]-bkg)/(np.mean(UvPowerCounts[med][1:][6:26])-bkg))
powdepthsdr1.append(1-(UvPowerCounts[med][1:][idxvecdr1[jj]]-bkg)/(np.mean(UvPowerCounts[med][1:][2:20])-bkg))
powdepthsdr2.append(1-(UvPowerCounts[med][1:][idxvecdr2[jj]]-bkg)/(np.mean(UvPowerCounts[med][1:][2:20])-bkg))
errorpowdepthsdr1.append(ErrorDRdepth(UvPowerCounts[med][1:][idxvecdr1[jj]],np.mean(UvPowerCounts[med][1:][0:20]), bkg))
errorpowdepthsdr2.append(ErrorDRdepth(UvPowerCounts[med][1:][idxvecdr2[jj]],np.mean(UvPowerCounts[med][1:][0:20]), bkg))
plt.plot([2*f*1e-6 for f in UvPowerFrequencies[med][1:]], [c for c in UvPowerCounts[med][1:]], '-o', color=palette[med],markersize=2, alpha=0.7, label=f'{UvPowerAmps[jj]}')
#plt.plot([2*f*1e-6 for f in UvPowerFrequencies[med][1:]][idxtest], [c for c in UvPowerCounts[med][1:]][idxtest], 'o', color=palette[med],markersize=14)
jj=jj+1
plt.xlabel('Frecuencia (MHz)')
plt.ylabel('Counts')
#plt.xlim(442,445)
plt.grid()
#plt.legend()
#plt.title('Espectros para distintas geometrías')
fig, ax = plt.subplots()
ax.errorbar(PotUvVec, powdepthsdr1, yerr=errorpowdepthsdr1, fmt='o',capsize=4, markersize=10, label='DR left')
ax.errorbar(PotUvVec, powdepthsdr2, yerr=errorpowdepthsdr2, fmt='o',capsize=4, markersize=10, label='DR right')
ax.set_xlabel('Uv power (uW)')
ax.set_ylabel('DR Relative depth')
#ax.set_xlim(-5,80)
ax.set_xscale('linear')
ax.set_ylim(0,1)
plt.legend()
plt.grid()
#%%
"""
EXTRA: sensibilidad de CPT D-D con OAM +2/-2 a movimiento térmico del ion
comparado con CPT tradicional S-D
"""
import numpy as np
import matplotlib.pyplot as plt
def sens(r,l=2):
return 2*l/r
radius = np.arange(0.1e-6,10e-6,0.01e-6)
plt.figure()
plt.semilogy([r*1e6 for r in radius],sens(radius), linewidth=3, color='coral', label='D-D CPT +2/-2 OAM ')
plt.xlabel('OAM radius (um)')
plt.ylabel('Thermometry sensitivity')
plt.axhline(8.6e6, color='indigo', linestyle='--', label='S-P CPT gaussian sensitivity')
plt.grid()
plt.legend()
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