diff --git a/examples/sagnac/QN_Sagnac_25ppm_loss.dat b/examples/sagnac/QN_Sagnac_25ppm_loss.dat new file mode 100644 index 0000000000000000000000000000000000000000..7ba9dd5534dfe2a017095f308150dcbaa355f89f --- /dev/null +++ b/examples/sagnac/QN_Sagnac_25ppm_loss.dat @@ -0,0 +1,100 @@ + 1.0000000e+02 1.3221987e-17 + 1.0549764e+02 1.1892014e-17 + 1.1129751e+02 1.0697027e-17 + 1.1741624e+02 9.6233229e-18 + 1.2387136e+02 8.6585877e-18 + 1.3068136e+02 7.7917584e-18 + 1.3786574e+02 7.0128946e-18 + 1.4544510e+02 6.3130646e-18 + 1.5344114e+02 5.6842429e-18 + 1.6187678e+02 5.1192187e-18 + 1.7077617e+02 4.6115125e-18 + 1.8016482e+02 4.1553025e-18 + 1.9006963e+02 3.7453572e-18 + 2.0051896e+02 3.3769761e-18 + 2.1154277e+02 3.0459350e-18 + 2.2317262e+02 2.7484385e-18 + 2.3544184e+02 2.4810757e-18 + 2.4838557e+02 2.2407817e-18 + 2.6204090e+02 2.0248019e-18 + 2.7644696e+02 1.8306611e-18 + 2.9164501e+02 1.6561346e-18 + 3.0767859e+02 1.4992233e-18 + 3.2459363e+02 1.3581301e-18 + 3.4243861e+02 1.2312401e-18 + 3.6126464e+02 1.1171018e-18 + 3.8112565e+02 1.0144104e-18 + 4.0207855e+02 9.2199328e-19 + 4.2418337e+02 8.3879641e-19 + 4.4750342e+02 7.6387246e-19 + 4.7210553e+02 6.9637002e-19 + 4.9806018e+02 6.3552396e-19 + 5.2544171e+02 5.8064677e-19 + 5.5432858e+02 5.3112082e-19 + 5.8480355e+02 4.8639134e-19 + 6.1695392e+02 4.4596020e-19 + 6.5087180e+02 4.0938025e-19 + 6.8665436e+02 3.7625032e-19 + 7.2440411e+02 3.4621061e-19 + 7.6422921e+02 3.1893866e-19 + 8.0624375e+02 2.9414563e-19 + 8.5056810e+02 2.7157298e-19 + 8.9732923e+02 2.5098946e-19 + 9.4666113e+02 2.3218842e-19 + 9.9870511e+02 2.1498536e-19 + 1.0536103e+03 1.9921567e-19 + 1.1115339e+03 1.8473266e-19 + 1.1726420e+03 1.7140573e-19 + 1.2371096e+03 1.5911873e-19 + 1.3051214e+03 1.4776850e-19 + 1.3768722e+03 1.3726347e-19 + 1.4525676e+03 1.2752255e-19 + 1.5324245e+03 1.1847396e-19 + 1.6166716e+03 1.1005432e-19 + 1.7055503e+03 1.0220774e-19 + 1.7993153e+03 9.4885079e-20 + 1.8982351e+03 8.8043226e-20 + 2.0025931e+03 8.1644475e-20 + 2.1126884e+03 7.5655973e-20 + 2.2288363e+03 7.0049214e-20 + 2.3513696e+03 6.4799584e-20 + 2.4806394e+03 5.9885947e-20 + 2.6170159e+03 5.5290272e-20 + 2.7608899e+03 5.0997283e-20 + 2.9126736e+03 4.6994141e-20 + 3.0728018e+03 4.3270151e-20 + 3.2417332e+03 3.9816479e-20 + 3.4199519e+03 3.6625898e-20 + 3.6079684e+03 3.3692530e-20 + 3.8063214e+03 3.1011596e-20 + 4.0155790e+03 2.8579147e-20 + 4.2363410e+03 2.6391768e-20 + 4.4692395e+03 2.4446230e-20 + 4.7149421e+03 2.2739070e-20 + 4.9741524e+03 2.1266108e-20 + 5.2476132e+03 2.0021909e-20 + 5.5361079e+03 1.8999274e-20 + 5.8404629e+03 1.8188844e-20 + 6.1615503e+03 1.7578950e-20 + 6.5002899e+03 1.7155798e-20 + 6.8576521e+03 1.6903997e-20 + 7.2346609e+03 1.6807352e-20 + 7.6323962e+03 1.6849767e-20 + 8.0519975e+03 1.7016076e-20 + 8.4946670e+03 1.7292690e-20 + 8.9616729e+03 1.7667984e-20 + 9.4543530e+03 1.8132454e-20 + 9.9741189e+03 1.8678680e-20 + 1.0522460e+04 1.9301162e-20 + 1.1100946e+04 1.9996097e-20 + 1.1711236e+04 2.0761136e-20 + 1.2355077e+04 2.1595145e-20 + 1.3034314e+04 2.2497999e-20 + 1.3750893e+04 2.3470401e-20 + 1.4506867e+04 2.4513740e-20 + 1.5304402e+04 2.5629976e-20 + 1.6145782e+04 2.6821557e-20 + 1.7033418e+04 2.8091350e-20 + 1.7969854e+04 2.9442599e-20 + 1.8957771e+04 3.0878893e-20 + 2.0000000e+04 3.2404143e-20 diff --git a/examples/sagnac/QN_Sagnac_lossless.dat b/examples/sagnac/QN_Sagnac_lossless.dat new file mode 100644 index 0000000000000000000000000000000000000000..765fb0b1af7b94e3d4827b41836a7762d904f015 --- /dev/null +++ b/examples/sagnac/QN_Sagnac_lossless.dat @@ -0,0 +1,100 @@ + 1.0000000e+02 2.1801158e-18 + 1.0549764e+02 2.0663790e-18 + 1.1129751e+02 1.9585621e-18 + 1.1741624e+02 1.8563564e-18 + 1.2387136e+02 1.7594689e-18 + 1.3068136e+02 1.6676221e-18 + 1.3786574e+02 1.5805530e-18 + 1.4544510e+02 1.4980120e-18 + 1.5344114e+02 1.4197628e-18 + 1.6187678e+02 1.3455810e-18 + 1.7077617e+02 1.2752543e-18 + 1.8016482e+02 1.2085812e-18 + 1.9006963e+02 1.1453706e-18 + 2.0051896e+02 1.0854414e-18 + 2.1154277e+02 1.0286221e-18 + 2.2317262e+02 9.7474986e-19 + 2.3544184e+02 9.2367033e-19 + 2.4838557e+02 8.7523723e-19 + 2.6204090e+02 8.2931184e-19 + 2.7644696e+02 7.8576263e-19 + 2.9164501e+02 7.4446488e-19 + 3.0767859e+02 7.0530034e-19 + 3.2459363e+02 6.6815688e-19 + 3.4243861e+02 6.3292815e-19 + 3.6126464e+02 5.9951334e-19 + 3.8112565e+02 5.6781681e-19 + 4.0207855e+02 5.3774788e-19 + 4.2418337e+02 5.0922057e-19 + 4.4750342e+02 4.8215331e-19 + 4.7210553e+02 4.5646876e-19 + 4.9806018e+02 4.3209358e-19 + 5.2544171e+02 4.0895821e-19 + 5.5432858e+02 3.8699668e-19 + 5.8480355e+02 3.6614647e-19 + 6.1695392e+02 3.4634826e-19 + 6.5087180e+02 3.2754585e-19 + 6.8665436e+02 3.0968596e-19 + 7.2440411e+02 2.9271811e-19 + 7.6422921e+02 2.7659446e-19 + 8.0624375e+02 2.6126975e-19 + 8.5056810e+02 2.4670113e-19 + 8.9732923e+02 2.3284807e-19 + 9.4666113e+02 2.1967229e-19 + 9.9870511e+02 2.0713764e-19 + 1.0536103e+03 1.9521006e-19 + 1.1115339e+03 1.8385746e-19 + 1.1726420e+03 1.7304971e-19 + 1.2371096e+03 1.6275856e-19 + 1.3051214e+03 1.5295758e-19 + 1.3768722e+03 1.4362213e-19 + 1.4525676e+03 1.3472932e-19 + 1.5324245e+03 1.2625798e-19 + 1.6166716e+03 1.1818861e-19 + 1.7055503e+03 1.1050334e-19 + 1.7993153e+03 1.0318592e-19 + 1.8982351e+03 9.6221637e-20 + 2.0025931e+03 8.9597306e-20 + 2.1126884e+03 8.3301184e-20 + 2.2288363e+03 7.7322915e-20 + 2.3513696e+03 7.1653442e-20 + 2.4806394e+03 6.6284921e-20 + 2.6170159e+03 6.1210612e-20 + 2.7608899e+03 5.6424763e-20 + 2.9126736e+03 5.1922491e-20 + 3.0728018e+03 4.7699653e-20 + 3.2417332e+03 4.3752717e-20 + 3.4199519e+03 4.0078645e-20 + 3.6079684e+03 3.6674775e-20 + 3.8063214e+03 3.3538718e-20 + 4.0155790e+03 3.0668257e-20 + 4.2363410e+03 2.8061238e-20 + 4.4692395e+03 2.5715433e-20 + 4.7149421e+03 2.3628350e-20 + 4.9741524e+03 2.1796944e-20 + 5.2476132e+03 2.0217222e-20 + 5.5361079e+03 1.8883727e-20 + 5.8404629e+03 1.7788968e-20 + 6.1615503e+03 1.6922917e-20 + 6.5002899e+03 1.6272736e-20 + 6.8576521e+03 1.5822905e-20 + 7.2346609e+03 1.5555806e-20 + 7.6323962e+03 1.5452701e-20 + 8.0519975e+03 1.5494869e-20 + 8.4946670e+03 1.5664683e-20 + 8.9616729e+03 1.5946425e-20 + 9.4543530e+03 1.6326756e-20 + 9.9741189e+03 1.6794870e-20 + 1.0522460e+04 1.7342411e-20 + 1.1100946e+04 1.7963240e-20 + 1.1711236e+04 1.8653130e-20 + 1.2355077e+04 1.9409460e-20 + 1.3034314e+04 2.0230924e-20 + 1.3750893e+04 2.1117283e-20 + 1.4506867e+04 2.2069157e-20 + 1.5304402e+04 2.3087868e-20 + 1.6145782e+04 2.4175310e-20 + 1.7033418e+04 2.5333857e-20 + 1.7969854e+04 2.6566294e-20 + 1.8957771e+04 2.7875771e-20 + 2.0000000e+04 2.9265764e-20 diff --git a/examples/sagnac/master.py b/examples/sagnac/master.py index a9a580a7d7fbf5aca155ebabdac63424297c6cbb..5dc67f61dba28cd621a9231bf381cd26cb3bc690 100644 --- a/examples/sagnac/master.py +++ b/examples/sagnac/master.py @@ -43,6 +43,7 @@ def main(): extra = kat._kat__blocks['NO_BLOCK'] # adding homodyne detector + #kat.addLine('qhdS sens 180 nout1 nout2') extra.contents.append('qhdS sens 180 nout1 nout2') extra.contents.append('scale meter sens') @@ -51,10 +52,18 @@ def main(): result=OrderedDict() legend = {} - # getting mass of the light mirror of cavity a + # getting mass of the light mirror of cavity a global m - m = kat.M1a.mass.value + # getting the anle of incidence on end mirrors: + AoI2 = float(kat.constants['AoI2'].value) / 180.*np.pi + # fsig applied to a BS with AoI!=0 reduces the phase + # change for a given signal in meters. Thus to make the + # finesse results comaptible with the default SQL we need + # to scale the results with cos(AoI): + global AoIScale + AoIScale=np.cos(AoI2) + # setting frequency range global f f = namedtuple('f', ('start','stop','points','data')) f.start=100 @@ -62,44 +71,65 @@ def main(): f.points = 100 kat.parseKatCode('xaxis sig1 f log {0} {1} {2}'.format(f.start, f.stop, f.points-1)) + # Reading Haixing Miao's reference data: + datah1=np.loadtxt('QN_Sagnac_25ppm_loss.dat') + datah2=np.loadtxt('QN_Sagnac_lossless.dat') + print "--------------------------------------------------------" - print " 0. Run default file" + print " Run default file (no loss)" out = kat.run() #f.data = np.logspace(np.log10(f.start), np.log10(f.stop), f.points) f.data=out.x # getting frequency vector from Finesse instead print "--------------------------------------------------------" - print " 1. Computing SQL" + print " Computing SQL" hbar=6.62606957E-34/(2.0 *np.pi) SQL_x= np.sqrt( 4 * hbar / ( m * f.data**2 * 4 * np.pi * np.pi )) legend['SQL']=mylegend('SQL','k') result['SQL']=SQL_x - result['default']=out.y - legend['default']=mylegend('Stefan D. example file','b') + result['default']=out.y*AoIScale + legend['default']=mylegend('Finesse, no loss','m') - print "--------------------------------------------------------" - print " 2. Open ETM ports, i.e. replacing dump nodes" - kat.M2a.remove() - kat.M3a.remove() - kat.parseCommands('bs1 M2a $T_ETM 0 0 0 nM2aw nM2an nM2aT1 nM2aT2') - kat.parseCommands('bs1 M3a $T_ETM 0 0 0 nM3aw nM3an nM3aT1 nM3aT2') - kat.M2b.remove() - kat.M3b.remove() - kat.parseCommands('bs1 M2b $T_ETM 0 0 0 nM2bw nM2bn nM2bT1 nM2bT2') - kat.parseCommands('bs1 M3b $T_ETM 0 0 0 nM3bw nM3bn nM3bT1 nM3bT2') - out=kat.run() - result['open']=out.y - legend['open']=mylegend('Opening M2/M3 ports','r') + result['H1']=datah1[:,1] + legend['H1']=mylegend('Haixing, no loss','k') + legend['H1'].lt='--.' print "--------------------------------------------------------" - print " 3. Imbalanced BS" - result['bs']=imbalanced_bs(kat) - legend['bs']=mylegend('Imbalanced BS 49:51','g') + print " Run file with loss (or transmission) on end mirrors" + L=12.5e-6 + #L=0 + #T=25e-6 + T=0 + R=1-T-L + kat.M2a.R=R + kat.M3a.R=R + kat.M2b.R=R + kat.M3b.R=R + kat.M2a.T=T + kat.M3a.T=T + kat.M2b.T=T + kat.M3b.T=T + kat.M2a.L=L + kat.M3a.L=L + kat.M2b.L=L + kat.M3b.L=L + out=kat.run() + result['loss']=out.y*AoIScale + legend['loss']=mylegend('Finesse, 25ppm loss','b') + result['H2']=datah2[:,1] + legend['H2']=mylegend('Haixing, 25ppm loss','k') + legend['H2'].lt='-.' + print "--------------------------------------------------------" - print " 3. Mass asymmetry" - result['mass']=mass(kat) - legend['mass']=mylegend('Mass asymmetry 10%','c') + print " Additional imbalanced BS" + result['bs']=imbalanced_bs(kat)*AoIScale + legend['bs']=mylegend('Imbalanced BS 49:51','r') + + #print "--------------------------------------------------------" + #print " Mass asymmetry" + #result['mass']=mass(kat)*AoIScale + #legend['mass']=mylegend('Mass asymmetry 10%','c') print "--------------------------------------------------------" print " Plotting results" @@ -129,20 +159,30 @@ def imbalanced_bs(tmpkat): kat.M6.T=0.51 out=kat.run() return out.y - + + +def update_plot(f, result): + for i, T in enumerate(result.keys()): + data=result[str(T)] + for j,f1 in enumerate(f): + lines[i].set_ydata(data(j)) + fig.canvas.draw() + def plot_results(f, result, legend): - fig=pl.figure() + fig=pl.figure(232) + fig.clear() N=len(result) + lines={} for i, T in enumerate(result.keys()): data=result[str(T)] - pl.plot(f.data, data,legend[str(T)].lt, color=legend[str(T)].color, label=legend[str(T)].text, lw=legend[str(T)].lw) + lines[i],=pl.plot(f.data, data,legend[str(T)].lt, color=legend[str(T)].color, label=legend[str(T)].text, lw=legend[str(T)].lw) #line.set_dashes([12, 4]) ax=pl.gca() ax.set_yscale('log') ax.set_xscale('log') - pl.xlabel("f [Hz}") - pl.ylabel("Sensitivity [m/sqrt(hz)]") + pl.xlabel("f [Hz]") + pl.ylabel("Sensitivity [m/sqrt(Hz)]") pl.xlim([f.start,f.stop]) pl.ylim([1E-20, 2E-17]) pl.grid() diff --git a/examples/sagnac/sagnac_base.kat b/examples/sagnac/sagnac_base.kat index adee6e780e69b6b15b2d3abf00d259c19819778a..3418ca298ac79c37dab28017056797ad1906a20f 100644 --- a/examples/sagnac/sagnac_base.kat +++ b/examples/sagnac/sagnac_base.kat @@ -6,17 +6,20 @@ # Andreas Freise, 30.10.2014 # # The parameters below don't necessarily match the current -# speedmeter design, instead they were chosen to match Stefan -# Danilishin's Matlab example for comparison. However, you can -# easily change the parameters to an updated design without -# problem. No special tuning or so is required. +# speedmeter design, instead they were chosen to fit an example +# file from Stefan Danilishin. However, you can easily change +# the parameters to an updated design without problem. ################################################################# ## general constants const Pin 0.6 # double the power at the BS, which for this example is 0.3W const MassM1 1m # Mass M1 in [kg]: 1 gramm -const MassM23 100m # Mass M2, M3: 100 gramm -const T_ETM 12.5u # transmission of cavity end mirrors (cavity loss) +const MassM23 100 # Mass M2, M3: 100 gramm +const T_ETM 0u # transmission of cavity end mirrors (cavity loss) +const L_ETM 0u # loss of cavity end mirrors (cavity loss) + +const AoI 0 # angle of incidence on input mirror (4.4 deg) +const AoI2 0 # angle of incidence on end mirror (42.8 deg) ## lengths of some ray segments const lrs2 0.250 @@ -50,21 +53,14 @@ s rs7 $lrs7 nM6e nM7w bs M7 1 0 0 49.39870535E0 nM7w nM7n dump dump s rs8 $lrs8 nM7n nM1an -bs1 M1a 500u 0 0 0 nM1aw nM1an nM1ae nM1as +bs1 M1a 500u 0 0 $AoI nM1aw nM1an nM1ae nM1as attr M1a Rc -7.91 attr M1a mass $MassM1 s rs12 1.315 nM3an nM1ae -################################################################## -# Note that the following lines are 'wrong'. The 'dump' notes -# are not open ports, i.e. even with the transmssion of the ETMs -# non-zero, no quantum noise will enter through this port. -# I am using dump notes here to match Stefan's example calculation, -# but you should not use 'dump' nodes with any mirror or BS that -# has non-zero losses or transmission -bs1 M3a $T_ETM 0 0 0 nM3aw nM3an dump dump #nM3aT1 nM3aT2 +bs1 M3a $T_ETM $L_ETM 0 $AoI2 nM3aw nM3an nM3aT1 nM3aT2 attr M3a mass $MassM23 s rs11 0.2 1. nM2an nM3aw -bs1 M2a $T_ETM 0 0 0 nM2aw nM2an dump dump #nM2aT1 nM2aT2 +bs1 M2a $T_ETM $L_ETM 0 $AoI2 nM2aw nM2an nM2aT1 nM2aT2 attr M2a mass $MassM23 s rs10 1.315 nM1as nM2aw cav AC_a M1a nM1as M1a nM1ae @@ -83,21 +79,14 @@ s rs26 $lrs26 nM8n nM1bw ################################################################# ## Cavity b -bs1 M1b 500u 0 0 0 nM1bw nM1bn nM1be nM1bs +bs1 M1b 500u 0 0 $AoI nM1bw nM1bn nM1be nM1bs attr M1b Rc -7.91 attr M1b mass $MassM1 s rs19 1.315 nM1be nM2bw -################################################################## -# Note that the following lines are 'wrong'. The 'dump' notes -# are not open ports, i.e. even with the transmssion of the ETMs -# non-zero, no quantum noise will enter through this port. -# I am using dump notes here to match Stefan's example calculation, -# but you should not use 'dump' nodes with any mirror or BS that -# has non-zero losses or transmission -bs1 M2b $T_ETM 0 0 0 nM2bw nM2bn dump dump #nM2bT1 nM2bT2 +bs1 M2b $T_ETM $L_ETM 0 $AoI2 nM2bw nM2bn nM2bT1 nM2bT2 attr M2b mass $MassM23 s rs20 0.2 nM2bn nM3bw -bs1 M3b $T_ETM 0 0 0 nM3bw nM3bn dump dump #nM3bT1 nM3bT2 +bs1 M3b $T_ETM $L_ETM 0 $AoI2 nM3bw nM3bn nM3bT1 nM3bT2 attr M3b mass $MassM23 s rs21 1.315 nM3bn nM1bs cav AC_b M1b nM1bs M1b nM1be @@ -124,7 +113,7 @@ bs dHD .5 .5 0 0 nHD1 nout1 nout2 nl3 # homodyne detector, use 180 deg phase for normal use, i.e. output=nout1-nout2 #qhdS sens 180 nout1 nout2 -# scale output to m/sqrt(Hz) +# re-scaling output to m/sqrt(Hz) #scale meter sens %xaxis sig1 f log 100 100k 99