ONV 0.0.1__py3-none-any.whl → 1.0.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ONV
3
- Version: 0.0.1
3
+ Version: 1.0.1
4
4
  Summary: Package for general NV based simulations
5
5
  Author: Oliver Whaites
6
6
  Author-email: o.whaites@btinternet.com
@@ -0,0 +1,14 @@
1
+ cce/CCE.py,sha256=uvlNS6bqT_FriDM_5nF0UJy146C3n9yK54ANf6Nnu50,10115
2
+ cce/PCE.py,sha256=tcWMbi_PwrEswr4WEmH-_ovrPpyEKEgb7M86zqbCNPY,30534
3
+ cce/__init__.py,sha256=hNgLJ1_jy6BdfAmU4kZ0y37FiDKP0Yps6OewEglGZAo,75
4
+ nv/__init__.py,sha256=n4FnUeWmUEWQoyf3oUfMDAIUpD0SU3bFJU64eFhXGkM,268
5
+ nv/nv.py,sha256=35lowRoUKsGZ14HAQ0f933cJizhWzGAQleCNyQBILTs,62333
6
+ nv/p1.py,sha256=ZOwEqfcdvO9XXZIfqXrx68mdTMF9PyRTvvJu2GvEhpI,6046
7
+ p1/__init__.py,sha256=3uzD4_ZDB0AbyBCkUfnpLyM-i7ut1i4-9YwY61NElJI,47
8
+ p1/p1.py,sha256=C5-jaNbjFeWKPUAHH44G0z1s36rOmJWuIl8A_mw89mg,7287
9
+ tools/__init__.py,sha256=cIGZJCLRoUxKs705DjaJKRcl-bJnOc0YGeTqo3iano8,69
10
+ tools/plot_tools.py,sha256=RE2hZDNiMVhrzS9suMVaKhV2nz9AUnKFmlje92rHpR8,4520
11
+ ONV-1.0.1.dist-info/METADATA,sha256=MF4BqdjgVwL8hq7YkNQqHqNSeMYGBGxRxeim9aIsSQQ,580
12
+ ONV-1.0.1.dist-info/WHEEL,sha256=R0nc6qTxuoLk7ShA2_Y-UWkN8ZdfDBG2B6Eqpz2WXbs,91
13
+ ONV-1.0.1.dist-info/top_level.txt,sha256=CjVyEG5qMKMI9ZnDsLCTBafQJncO5Tb0dBDiKf5W5yQ,16
14
+ ONV-1.0.1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.43.0)
2
+ Generator: setuptools (72.1.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,3 +1,4 @@
1
1
  cce
2
2
  nv
3
+ p1
3
4
  tools
cce/CCE.py CHANGED
@@ -13,7 +13,7 @@ from sys import path
13
13
 
14
14
  path.append('/Users/ollywhaites/Documents/Documents/PhD/Python/Libraries')
15
15
 
16
- import NV_Library as nv
16
+ import ONV.nv as nv
17
17
  import pandas as pd
18
18
  import numpy as np
19
19
  import math
@@ -75,7 +75,7 @@ def CCE0(spins,couplings,ts,params = nv.params(),pbar = True,NV_state = 'Xp',mea
75
75
 
76
76
 
77
77
 
78
- def CCE1(spins,couplings,ts,params = nv.params(),pbar = True,NV_state = 'Xp',measure = 'x',NV_sub = '-',cluster = 'test'):
78
+ def CCE1(spins,couplings,ts,params = nv.params(),pbar = True,NV_state = 'Xp',measure = 'x',NV_sub = '-',cluster = 'test',Dir = ''):
79
79
 
80
80
  """
81
81
  A program which finds PCE for a bath of spins and coupled to the NV.
@@ -96,10 +96,10 @@ def CCE1(spins,couplings,ts,params = nv.params(),pbar = True,NV_state = 'Xp',mea
96
96
  """
97
97
 
98
98
  params['N_nuc'] = 1
99
- operators, params = nv.generate_operators([0], [0], params, NV_state = NV_state,NV_sub = NV_sub)
99
+ operators, params = nv.generate_operators([0], [0],params = params, NV_state = NV_state,NV_sub = NV_sub)
100
100
 
101
101
 
102
- Dir = '/Users/ollywhaites/Documents/Documents/PhD/Python/Extend_coherence/CCE/{}/{}_data/1_spin/'.format(params['protocol'],cluster)
102
+ Dir += '{}_data/1_spin/'.format(cluster)
103
103
 
104
104
 
105
105
  # PCE4 = pd.DataFrame(columns = ['P3'], index = taus*1e6)
@@ -133,7 +133,7 @@ def CCE1(spins,couplings,ts,params = nv.params(),pbar = True,NV_state = 'Xp',mea
133
133
  params['tau'] = t
134
134
  params['t_ev'] = t
135
135
 
136
- Ltemp, rho = nv.pulse_NV(operators,params,measure=measure)
136
+ Ltemp, rho, _ = nv.pulse_NV(operators,params = params,measure=measure)
137
137
  L1.append(Ltemp.real)
138
138
 
139
139
 
@@ -169,7 +169,7 @@ def CCE1(spins,couplings,ts,params = nv.params(),pbar = True,NV_state = 'Xp',mea
169
169
  params['tau'] = t
170
170
  params['t_ev'] = t
171
171
 
172
- Ltemp, rho = nv.pulse_NV(operators,params,measure = measure)
172
+ Ltemp, rho,_ = nv.pulse_NV(operators,params = params,measure = measure)
173
173
  L1.append(Ltemp)
174
174
 
175
175
 
cce/PCE.py CHANGED
@@ -10,7 +10,7 @@ sys.path.insert(1,'/Users/ollywhaites/Documents/Documents/PhD/Python/Libraries')
10
10
 
11
11
  import numpy as np
12
12
  import pandas as pd
13
- import NV_Library as nv
13
+ import ONV.nv as nv
14
14
  from tqdm import tqdm
15
15
 
16
16
  from os import path
cce/__init__.py CHANGED
@@ -1,3 +1,3 @@
1
- from CCE import CCE0, CCE1, CCE2
2
- from PCE import PCE2, PCE3, PCE4, PCE5
1
+ from .CCE import CCE0, CCE1, CCE2
2
+ from .PCE import PCE2, PCE3, PCE4, PCE5
3
3
 
nv/__init__.py CHANGED
@@ -1,10 +1,10 @@
1
- from nv import params, plot_params, generate_operators, add_N14
2
- from nv import generate_H0, generate_full_H0
3
- from nv import pulse_nv, hyperpol, hyperpol_avg
4
- from nv import plot_D_pol, plot_D_pol_N
5
- from nv import floquet_spectrum
6
- from nv import nv_generator
7
-
8
- from p1 import construct_H0, LG, LG4, find_U
1
+ from .nv import params, plot_params, generate_operators, add_N14
2
+ from .nv import generate_H0, generate_full_H0
3
+ from .nv import pulse_NV, hyperpol, hyperpol_avg
4
+ from .nv import plot_D_pol, plot_D_pol_N
5
+ from .nv import floquet_spectrum
6
+ from .nv import nv_generator
7
+
8
+
9
9
 
10
10
 
nv/nv.py CHANGED
@@ -17,8 +17,8 @@ import scipy
17
17
  from matplotlib.ticker import AutoMinorLocator
18
18
  from scipy.signal.windows import gaussian
19
19
 
20
- options = qutip.solver.Options()
21
- options.store_states = True
20
+ #options = qutip.solver.Options()
21
+ options = {'store_states': True}
22
22
 
23
23
  """
24
24
  OPERATIONS
p1/__init__.py ADDED
@@ -0,0 +1,2 @@
1
+ from .p1 import construct_H0, LG, LG4, find_U
2
+
p1/p1.py ADDED
@@ -0,0 +1,215 @@
1
+ #!/usr/bin/env python3
2
+ # -*- coding: utf-8 -*-
3
+ """
4
+ Created on Mon Oct 7 11:48:14 2024
5
+
6
+ @author: ollywhaites
7
+ """
8
+ from sys import path
9
+ path.append('/Users/ollywhaites/Documents/Documents/PhD/Python/Libraries/')
10
+
11
+ import numpy as np
12
+ import ONV.nv.nv as nv
13
+
14
+
15
+ def rot_mat(a,b):
16
+
17
+ R = np.array([[np.cos(a)*np.cos(b),np.cos(b)*np.sin(a),-np.sin(b)],
18
+ [-np.sin(a),np.cos(a),0],
19
+ [np.sin(b)*np.cos(a),np.sin(b)*np.sin(a),np.cos(b)]])
20
+
21
+ return R
22
+ def find_axisCoup(Adiag,axis = 'D'):
23
+
24
+ rot = {'A':{'a':0,'b':np.radians(109.5)},
25
+ 'B':{'a':0*np.radians(120),'b':np.radians(109.5)},
26
+ 'C':{'a':0*np.radians(240),'b':np.radians(109.5)},
27
+ 'D':{'a':0,'b':0}}
28
+
29
+ R = rot_mat(rot[axis]['a'], rot[axis]['b'])
30
+
31
+ return np.dot(np.dot(R,Adiag),R.T)
32
+
33
+
34
+ def tensor_prod(operators,i,j,PN):
35
+
36
+ axis = {0:'x',
37
+ 1: 'y',
38
+ 2: 'z'}
39
+
40
+ HQ = 0
41
+ for n in range(3):
42
+ #m = n
43
+ for m in range(3):
44
+ HQ += PN[n][m]*operators['I%s'%axis[n]][i]*operators['I%s'%axis[m]][j]
45
+
46
+
47
+ return HQ
48
+
49
+
50
+ def construct_H0(operators,params,spins,bath,Tin):
51
+
52
+
53
+
54
+ H0 = 0
55
+ if params['lab'] == True:
56
+ H0 += params['omega_e']*operators['Sz'] + params['zfs_NV']*operators['Sz']*operators['Sz']
57
+
58
+ Hi = 0
59
+ Hij = 0
60
+ k = 0
61
+ for i in spins:
62
+
63
+ r1 = {'x':bath.loc[i].iloc[1]['pos'][0]*1e-10,
64
+ 'y':bath.loc[i].iloc[1]['pos'][1]*1e-10,
65
+ 'z':bath.loc[i].iloc[1]['pos'][2]*1e-10}
66
+
67
+
68
+ if bath.loc[i].iloc[0]['Species'] == 'N':
69
+ Adiag = np.array([[-2*np.pi*113.83e6,0,0],[0,-2*np.pi*113.83e6,0],[0,0,-2*np.pi*159.7e6]])
70
+ Pdiag = np.array([[0,0,0],[0,0,0],[0,0,-2*np.pi*3.97e6]])
71
+ else:
72
+
73
+ Adiag = np.array([[2*np.pi*81.32e6,0,0],[0,2*np.pi*81.32e6,0],[0,0,2*np.pi*114.03e6]])
74
+ #Pdiag = np.array([[2*np.pi*1.32e6,0,0],[0,2*np.pi*1.32e6,0],[0,0,2*np.pi*2.65e6]])
75
+ Pdiag = np.array([[2*np.pi*0,0,0],[0,2*np.pi*0,0],[0,0,-2*np.pi*3.97e6]])
76
+
77
+ #AN = find_axisCoup(Adiag,axis = bath.loc[i]['JT_axis'].iloc[1])
78
+ PN = find_axisCoup(Pdiag,axis = bath.loc[i]['JT_axis'].iloc[1])
79
+
80
+ if Tin == True:
81
+ AN = find_axisCoup(Adiag,axis = bath.loc[i]['JT_axis'].iloc[1])[2]
82
+
83
+ Hi += (params['D']*operators['Iz'][2*k + 0] + 2*np.pi*params['gamma_e']*params['B0']*operators['Iz'][2*k + 0] + 2*np.pi*params['gamma_N']*params['B0']*operators['Iz'][2*k + 1]
84
+ + (AN[2]*operators['Iz'][2*k + 1] + AN[0]*operators['Ix'][2*k + 1] + AN[1]*operators['Iy'][2*k + 1])*operators['Iz'][2*k + 0]
85
+ #+ tensor_prod(operators,2*k + 1,2*k + 1,PN)
86
+ + 2*np.pi*1e3*(bath.loc[i]['Az'].iloc[1]*operators['Iz'][2*k + 0])*operators['Sz']
87
+ + params['Omega_RF']*(np.sin(params['RF_phase'])*operators['Ix'][2*k + 0] + np.cos(params['RF_phase'])*operators['Iy'][2*k + 0])
88
+ + params['Omega_N']*(np.sin(params['N_phase'])*operators['Ix'][2*k + 1] + np.cos(params['N_phase'])*operators['Iy'][2*k + 1]))
89
+
90
+ elif Tin == False:
91
+ AN = find_axisCoup(Adiag,axis = bath.loc[i]['JT_axis'].iloc[1])
92
+
93
+ Hi += (2*np.pi*params['gamma_e']*params['B0']*operators['Iz'][2*k + 0] + 2*np.pi*params['gamma_N']*params['B0']*operators['Iz'][2*k + 1]
94
+ + tensor_prod(operators,2*k + 0,2*k + 1,AN)
95
+ #+ (AN[2]*operators['Iz'][2*k + 1] + AN[0]*operators['Ix'][2*k + 1] + AN[1]*operators['Iy'][2*k + 1])*operators['Iz'][2*k + 0]
96
+ + tensor_prod(operators,2*k + 1,2*k + 1,PN)
97
+ + 2*np.pi*1e3*(bath.loc[i]['Az'].iloc[1]*operators['Iz'][2*k + 0])*operators['Sz']
98
+ #+ 2*np.pi*1e3*(bath.loc[i]['Az'].iloc[1]*operators['Iz'][2*k + 0] + bath.loc[i]['Ax'].iloc[1]*operators['Ix'][2*k + 0] + bath.loc[i]['Ay'].iloc[1]*operators['Iy'][2*k + 0])*operators['Sz']
99
+ #+ 2*params['Omega']*(np.sin(params['omega_RF']*params['t'] - params['RF_phase'])*operators['Ix'][2*k + 0]))
100
+ )
101
+
102
+
103
+ for j in spins[k + 1:]:
104
+
105
+ r2 = {'x':bath.loc[j].iloc[1]['pos'][0]*1e-10,
106
+ 'y':bath.loc[j].iloc[1]['pos'][1]*1e-10,
107
+ 'z':bath.loc[j].iloc[1]['pos'][2]*1e-10}
108
+
109
+
110
+ Cij = 2*np.pi*nv.cc_coupling(r1,r2,params = params,species = 'e')
111
+
112
+ Hij += Cij*(operators['Iz'][2*k + 0]*operators['Iz'][2*k + 2] - (1/2)*(operators['Ix'][2*k + 0]*operators['Ix'][2*k + 2] + operators['Iy'][2*k + 0]*operators['Iy'][2*k + 2]))
113
+
114
+
115
+ k+=1
116
+ operators['H0'] = H0 + Hi + Hij
117
+
118
+ return operators,params
119
+
120
+
121
+ def LG4(operators,params,bath,spins,Tin):
122
+
123
+ D = params['D']
124
+ Om = params['Omega']
125
+ alpha = params['RF_phase']
126
+
127
+ operators,params = construct_H0(operators,params,spins,bath,Tin)
128
+ rho,coh, UA = nv.pulse_NV(operators,params,measure = 'x',)
129
+
130
+ params['D'] = -D
131
+ params['Omega'] = -Om
132
+ params['RF_phase'] = alpha
133
+
134
+ operators,params = construct_H0(operators,params,spins,bath,Tin)
135
+ rho,coh, UAm = nv.pulse_NV(operators,params,measure = 'x',)
136
+
137
+ params['D'] = D
138
+ params['Omega'] = Om
139
+ params['RF_phase'] = -alpha
140
+
141
+ operators,params = construct_H0(operators,params,spins,bath,Tin)
142
+ rho,coh, UB = nv.pulse_NV(operators,params,measure = 'x',)
143
+
144
+
145
+ params['D'] = -D
146
+ params['Omega'] = -Om
147
+ params['RF_phase'] = -alpha
148
+
149
+ operators,params = construct_H0(operators,params,spins,bath,Tin)
150
+ rho,coh, UBm = nv.pulse_NV(operators,params,measure = 'x',)
151
+
152
+ params['D'] = D
153
+ params['Omega'] = Om
154
+ params['RF_phase'] = alpha
155
+
156
+ U = UBm*UB*UAm*UA
157
+
158
+ return U
159
+
160
+
161
+
162
+ def LG(operators,params,bath,spins,Tin):
163
+
164
+ operators,params = construct_H0(operators,params,spins,bath,Tin)
165
+ rho,coh, U = nv.pulse_NV(operators,params,measure = 'x',)
166
+
167
+ return U
168
+
169
+ def LG_pulse(operators,params,bath,spins,Tin):
170
+
171
+ D = params['D']
172
+ OmRF = params['Omega_RF']
173
+ OmN = params['Omega_N']
174
+ Om = params['Omega']
175
+ alpha = params['RF_phase']
176
+ t_ev = params['t_ev']
177
+
178
+
179
+ params['D'] = 0
180
+ params['Omega_RF'] = OmRF
181
+ params['Omega_N'] = 0
182
+ params['RF_phase'] = alpha
183
+
184
+
185
+ operators,params = construct_H0(operators,params,spins,bath,Tin)
186
+ _,_, U0 = nv.pulse_NV(operators,params,measure = 'x',)
187
+
188
+
189
+ params['D'] = 0
190
+ params['Omega_RF'] = 0
191
+ params['Omega_N'] = OmN
192
+ params['Omega'] = 0
193
+ params['RF_phase'] = alpha + np.pi/2
194
+
195
+ params['t_ev'] = params['Tp_RF']
196
+ params['t_ev'] = np.pi/params['Omega_N'] if params['Omega_N'] != 0 else 0
197
+
198
+ operators,params = construct_H0(operators,params,spins,bath,Tin)
199
+ _,_, UX = nv.pulse_NV(operators,params,measure = 'x',)
200
+
201
+ params['Omega'] = Om
202
+ params['RF_phase'] = alpha
203
+ params['t_ev'] = t_ev
204
+
205
+ return U0*UX*U0
206
+
207
+ RF_protocols = {'LG': LG,
208
+ 'LG4': LG4,
209
+ 'LG_pulse': LG_pulse}
210
+
211
+ def find_U(operators,params,bath,spins,Tin):
212
+
213
+ U = RF_protocols[params['RF_protocol']](operators,params,bath,spins,Tin)
214
+
215
+ return U
@@ -1,12 +0,0 @@
1
- cce/CCE.py,sha256=sdBl4fwXkHGJnaA55lBXHw-ilIrxTyYElFWxo2jgnFw,10171
2
- cce/PCE.py,sha256=czPRY0w5Ul_vs-xOk_sKTQOH4jP-ROpm61c_h-_R6pc,30538
3
- cce/__init__.py,sha256=joddLkdNmwZGCc2kiY-hxQ00S4Yt4rvQvnFl2B6P900,73
4
- nv/__init__.py,sha256=XjVbtWn9lXo5BGMmRlMZyvAILQ35TlrJG6WY1CLa1II,306
5
- nv/nv.py,sha256=ejjFU195CohwAw3SbP9J1TJc42Qr54SR176_uyd-Md8,62327
6
- nv/p1.py,sha256=ZOwEqfcdvO9XXZIfqXrx68mdTMF9PyRTvvJu2GvEhpI,6046
7
- tools/__init__.py,sha256=cIGZJCLRoUxKs705DjaJKRcl-bJnOc0YGeTqo3iano8,69
8
- tools/plot_tools.py,sha256=RE2hZDNiMVhrzS9suMVaKhV2nz9AUnKFmlje92rHpR8,4520
9
- ONV-0.0.1.dist-info/METADATA,sha256=c-ATokNiReyat2RNnPMlguiiByrHzcpcPZzun-HLFjI,580
10
- ONV-0.0.1.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
11
- ONV-0.0.1.dist-info/top_level.txt,sha256=jmmBPxx5ufCxRVITkxZpr2dsr7HSkTt2IboqWPmx5u0,13
12
- ONV-0.0.1.dist-info/RECORD,,