From bdb772ad527850381a39bd28e86e8736b3660167 Mon Sep 17 00:00:00 2001
From: Andreas Freise <adf@star.bham.ac.uk>
Date: Thu, 28 Apr 2016 00:21:41 +0100
Subject: [PATCH] fixing sagnac example file

---
 examples/sagnac/master.py       | 107 ++++++++++++++++++++------------
 examples/sagnac/sagnac_base.kat |  29 ++++-----
 2 files changed, 79 insertions(+), 57 deletions(-)

diff --git a/examples/sagnac/master.py b/examples/sagnac/master.py
index 8e9c196..59582d5 100644
--- a/examples/sagnac/master.py
+++ b/examples/sagnac/master.py
@@ -1,13 +1,29 @@
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
+from __future__ import unicode_literals
+
 from pykat import finesse
 from pykat.commands import *
 import copy
+import pylab as pl
 from collections import namedtuple
 from collections import OrderedDict
-import pylab as pl
-from  pykat.utilities.plotting.tools import printPDF
+
+import matplotlib
+formatter = matplotlib.ticker.EngFormatter(unit='', places=0)
+formatter.ENG_PREFIXES[-6] = 'u'
+
+global fig_sagnac
+
+import matplotlib.backends.backend_pdf
+def printPDF(self, filename):
+	pdfp = matplotlib.backends.backend_pdf.PdfPages(filename)
+	pdfp.savefig(self,dpi=300,bbox_inches='tight')
+	pdfp.close()
 	
 def main():
-	print """
+	print("""
 	--------------------------------------------------------------
 	Example file for using PyKat to automate Finesse simulations
 	Finesse: http://www.gwoptics.org/finesse
@@ -19,7 +35,7 @@ def main():
 	
 	Andreas Freise 30.10.2014
 	--------------------------------------------------------------
-	"""    
+	""")    
     # defining variables as global for debugging
 	global kat
 	global out
@@ -43,18 +59,11 @@ 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
@@ -63,34 +72,38 @@ def main():
 	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')
+	datah1=np.loadtxt('QN_Sagnac_lossless.dat')
+	datah2=np.loadtxt('QN_Sagnac_25ppm_loss.dat')
+
+	# Reading Stefan D. example data:
+	data=np.loadtxt('Stefan_data.txt')
 	
-	print "--------------------------------------------------------"
-	print " Run default file (no loss)"
+	print ("--------------------------------------------------------")
+	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 " Computing SQL"
+	print ("--------------------------------------------------------")
+	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*AoIScale
-	legend['default']=mylegend('Finesse, no loss','m')
 
 	result['H1']=datah1[:,1]
-	legend['H1']=mylegend('Haixing, no loss','k')
+	legend['H1']=mylegend('Haixing, no loss','g')
 	legend['H1'].lt='--.'
+	legend['H1'].lw=2
 
-	print "--------------------------------------------------------"
-	print " Run file with loss (or transmission) on end mirrors"
-	L=12.5e-6
-	#L=0
-	#T=25e-6
-	T=0
+	result['default']=out.y*np.cos(AoI2)
+	legend['default']=mylegend('no loss','m')
+
+
+	
+	print ("--------------------------------------------------------")
+	L=0
+	T=12.5e-6
 	R=1-T-L
 	kat.M2a.R=R
 	kat.M3a.R=R
@@ -105,25 +118,37 @@ def main():
 	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']=mylegend('Haixing, 25ppm loss','g')
 	legend['H2'].lt='-.'
+	legend['H2'].lw=5
+	
+	result['loss']=out.y*np.cos(AoI2)
+	legend['loss']=mylegend('25ppm loss','b')
+
+
 	
-	print "--------------------------------------------------------"
-	print " Additional imbalanced BS"
-	result['bs']=imbalanced_bs(kat)*AoIScale
-	legend['bs']=mylegend('Imbalanced BS 49:51','r')
+	#result['S_sym']=data[:,1]
+	#legend['S_sym']=mylegend('Stefan D, balanced','k')
+	#legend['S_sym'].lt='-.'
+
+	print ("--------------------------------------------------------")
+	print (" 3. Imbalanced BS")
+	#result['bs']=imbalanced_bs(kat)*np.cos(AoI2)
+	#legend['bs']=mylegend('Imbalanced BS 49:51','r')
+
+	#result['S_imb']=data[:,2]
+	#legend['S_imb']=mylegend('Stefan D, imbalanced','k')
+	#legend['S_imb'].lt='--.'
 
-	#print "--------------------------------------------------------"
-	#print " Mass asymmetry"
-	#result['mass']=mass(kat)*AoIScale
+	print ("--------------------------------------------------------")
+	print (" 3. Mass asymmetry")
+	#result['mass']=mass(kat)
 	#legend['mass']=mylegend('Mass asymmetry 10%','c')
 
-	print "--------------------------------------------------------"
-	print " Plotting results"
+	print ("--------------------------------------------------------")
+	print (" Plotting results")
 	plot_results(f, result, legend)
 
 
@@ -180,7 +205,7 @@ def plot_results(f, result, legend):
 	pl.legend(loc=1)
 	pl.draw()
 	pl.show(block=0)
-	printPDF(fig, "speedmeter_plots.pdf")
+	#printPDF(fig, "speedmeter_plots.pdf")
 	
 	
 if __name__ == '__main__':
diff --git a/examples/sagnac/sagnac_base.kat b/examples/sagnac/sagnac_base.kat
index 7b8797d..1449d7a 100644
--- a/examples/sagnac/sagnac_base.kat
+++ b/examples/sagnac/sagnac_base.kat
@@ -6,20 +6,20 @@
 # Andreas Freise, 30.10.2014
 #
 # The parameters below don't necessarily match the current 
-# 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.
+# 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.
 #################################################################
 
 ## 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 100 # Mass M2, M3: 100 gramm
+const MassM23 100m # 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)
+const AoI2 42.8
 
 ## lengths of some ray segments
 const lrs2 0.250
@@ -53,12 +53,10 @@ s rs7 $lrs7 nM6e nM7w
 bs M7 1 0 0 49.39870535E0 nM7w nM7n dump dump 
 s rs8 $lrs8 nM7n nM1an
 
-
-#attr M1a backscatter 0.6u
-bs1 M1a 500u 0 0 $AoI nM1aw nM1an nM1ae nM1as 
+bs1 M1a 500u 0 0 4.4 nM1aw nM1an nM1ae nM1as 
 attr M1a Rc -7.91
 attr M1a mass $MassM1 
-s rs12 0.6575 nM3an nM1ae
+s rs12 1.315 nM3an nM1ae
 bs1 M3a $T_ETM $L_ETM 0 $AoI2 nM3aw nM3an nM3aT1 nM3aT2
 attr M3a mass $MassM23
 s rs11 0.2 1. nM2an nM3aw   
@@ -81,8 +79,7 @@ s rs26 $lrs26 nM8n nM1bw
 
 #################################################################
 ## Cavity b
-#attr M1b backscatter 0.6u
-bs1 M1b 500u 0 0 $AoI nM1bw nM1bn nM1be nM1bs  
+bs1 M1b 500u 0 0 4.4 nM1bw nM1bn nM1be nM1bs  
 attr M1b Rc -7.91
 attr M1b mass $MassM1 
 s rs19 1.315 nM1be nM2bw
@@ -115,11 +112,11 @@ s sl2 1n nl2 nl3
 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
-# re-scaling output to m/sqrt(Hz)
-scale meter sens
+#qhdS sens 180 nout1 nout2
+# scale output to m/sqrt(Hz)
+#scale meter sens
 
-xaxis sig1 f log 100 100k 99
+%xaxis sig1 f log 100 100k 99
 yaxis log abs
 
 maxtem off
-- 
GitLab