Changes between different versions of Finesse. This file serves as an addition and update to the Finesse manual; it contains a brief but complete description of the latest changes and fixed bugs. This list starts with Version 0.53 since there were just too many changes before. Not every version number is listed. 0.99.7 -> 0.99.8 (21.01.2010) main changes: o updated the manual o added capablitity to read mirror surface maps o Finesse now includes x/y asymmetry for TEM modes (see 'fixed bugs' below) added feature : o the manual now includes a description of all new features. In addition I have started to document the interfaces between Finesse and MATLAB (see the chapter 'Advanced usage'). o added a new detector that can plot the parameters derived during a cavity trace. The syntax is: cp cavity_name x/y parameter_name possible paramters are w/w0/z/q/finesse/loss/length/FSR/FWHM/pole/r The values for the cp output are filled in by the trace algorithm, thus they only get computed when a trace is performed. If you tune a length, for example, the tracing is switched on automatically. But you must use 'retrace' to switch on the tracing if you, for example, tune a mirror reflectivity and would like to see the cavity loss with a cp detector. o added a new command 'variable name value' which defines a variable similar to the 'set' command. Thus the variable can be used in 'func' and 'put' commands. But unlike variables created with 'set' it is not connected to some other parameter but can be set directly or tuned with 'xaxis'. The latter is useful if a dummy paremeter is to be tuned, e.g. variable test1 10 xaxis test1 xxx lin 1 10 20 where the 'xxx' can be any string to satisfy the parser, which is expecting the syntac 'xaxis component parameter ...'. o added 'noxaxis' command that can be used if only terminal output is required e.g. from the 'trace' command. All axis (xaxis, x2axis, ...) commands will be ignored and the interferometer is computed once. Please note that 'put' commands that use '$x1' or similar variables still have an effect. It's better to remove these when 'noxaxis' is set. o added new commands to read and save surface map descriptions for mirrors: 'map component [angle] [mapname] filename' This reads a file given by filename and searches for a surface map given by a grid or by coupling coefficients (previously computed by Finesse). The grid can contain four different kinds of information specified by phase/amplitude and reflection/transmission. Phase maps store optical path length information given in meters, amplitude maps store amplitude coefficients between 0 and 1. The grid data is then used inside Finesse to compute coupling coefficients as k_n1m1n2m2 = Int_xy ( u_n1m1(x,y) * map_function * u_n2m2^*(x,y) ) Where 'mapfunction' are functions of the grid data, depending in the map type. The coefficients are then merged with the other coupling coefficients as K_total = K_old * K_map (here '*' means a matrix multiplication). 'savemap component mapname filename' This command saves the computed coupling coefficients into a file. Actually also the original data grid is saved, so that the new file contains all available information. o removed the 15 characters limitation for component and node names o You can now include Matlab commands for calculations or plots into the finesse file: MATLABPLOT view(2) END will cause a `view(2)' to be added to the Matlab file after the plot command, and: MATLAB z(:,:,1)=z(:,:,1)/max(max(z(:,:,1))); END will add this normalisation after the data has been loaded but before the plot command. o Matlab files have been improved: '-' signs in matlab file and function names are now automatically replaced by '_'. In the plot title any '_' is replaced by '\_'. fixed bugs: o Previous versions of Finesse did not include any asymmetry between horizontal and vertical TEMs. In some cases such as triangular cavities this actually makes an important difference Therefore, I have now included the reflection assymetry that horizontal modes are mirrored upon reflection whereas vertical modes are not. I re-run all test files and the only changes I could find are: some alignment signal change sign and some beam images are flipped upside-down or left-rigth. Please note that this has been implemented so far only for DC signals (i.e. no tyet for sidebands injected via `fsig') o Error message for 'broken interferometer' does not list 'dump' nodes anymore. o 'set' did not work properly with non-detector components, probably since version 0.99.5. o the last point of xaxis or x2axis could be suffereing from rounding errors. In special cases, e.g. tuning a tranmission from 1 to 0 this could cause the last value to be inconsitent and the interferometer matrix to return NaNs. This is now fixed by explicitly setting the last value to the user defined value. o MATLAB files now correctly use XLim with min < max. If xaxis is declared with min>max, the direction of the plot is reverses with a special command in the MATLAB file. known issues: o I still need to test the x-y asymmetry for AC signals, i.e. alignment transfer functions. 0.99.6 -> 0.99.7 (08.06.08) main changes: o Finesse is now faster when higher-order modes (maxtem>3) are used. o Finesse should be faster on Windows (it is now compiled with a newer compiler version: gcc4.2.3) o The Matlab plot files have been improved o The `retrace' command is not longer required. This should make simulations much faster when it was used accidently (or wrongly). o Finesse can now be used with a system-wide kat.ini file instead of one in each working directory. added feature : o Finesse now writes some information in the header of the output file, the lines start with the '%' sign so that Gnuplot and Matlab ignore them as comments. Thus this feature should not break any data processing. If you use other tools which do not ignore % as comment lines you can suppress the header by using the options '--noheader'. o beam parameters of 'gauss' commands can now be tuned with xaxis or put. You can tune zx, zy, zrx or zry, with z referring to the distance to the waist and zr to the Rayleigh range, the x and y refer to the x-z and y-z plane of a potentially astigmatic beam as ususal. o A new matrix solver has been added: The essential calculation inside Finesse is the solving of a set of linear equations, or more precisely the solving of a sparse matrix. Until this version the SPARSE 1.3 library has been used for this purpose. Now an additional spare matrix solver (KLU) has been implemented. The latter seems to be faster when many higher-order modes are used. Finesse now automatically switches between the two: maxtem<=3 : SPARSE maxtem>3 : KLU This automatic can be bypassed with command line options: `-klu' will force Finesse to use the KLU library whereas `-sparse' will switch to use the original SPARSE package. o The `retrace' command is no longer required. When higher-order modes are used, a beam tracing algorithm is used in the initialising phase in order to determine the beam parameters (beam size, waist position) at every node (because these are input parameters to the interferometer matrix). When one of the following parameters is used, the base system should be re-evaluated at each step of the calculation: - radius of curvature of mirror or beam splitter - length or index of refraction of a space - angle of incidence of a beam splitter - focal length of a lens This can be done using the command `retrace', or it can be switched off using `retrace off'. Finesse now automatically determines if a retracing is required. However, the retrace command can still be used to override the automatic. o The format of the Matlab script files has been improved: - the files contain information about usage in their header - the files contain functions rather than scripts now - optionally the data can be returned, e.g. calling the file example with [x,y]=example - they do not require any external functions anymore (convert3Ddata was required before) - for 3D plots they use the option 'Edgecolor','none', set the colorbar and switch of the legend - figure windows have a title now o the 'beam' command has been improved: - multiple detectors, beam or not-beam, can be mixed now Please note that if you tune the x/y axis of multiple detectors at once, for example with: xaxis beam1 x lin -1 1 50 put beam2 x $x1 Then each graph is plotted as a function of x/wx0 with wx0 the waist size of the beam at EACH detector, i.e. an individual scaling is applied, this is different from all other xaxis/put combinations. - beam size information is given for all beam detectors, in the label of the graphs as well as on in the terminal output - the beam detector can now also plot the amplitude and or phase front: optionally a frequency can be given, e.g. 'beam b1 0 n4' would show only the carrier field (f=0) at the node n4. This mode has the advantage of plotting amplitude and phase of the field rather than power so that a phasefront of the field can be plotted easily. This feature still requires some testing but seems to work well. o Finesse now reads in the environment variable `KATINI'. You can use KATINI to specify a global init file, e.g. on linux you would do: export KATINI=~/work/kat/kat.ini Finesse tries first to find a local `kat.ini' file in the current working directory, then it looks for the global file (if KATINI has been set) and only if neither can be found or opened it uses the internal default settings. o Changed the default entries in the kat.ini file to - gnuversion 4.2 (this also the internal default now when no kat.ini file is found) - GNUCOMMAND "/cygnus/gnuplot/Wgnuplot.exe" (windows Gnuplot example path) o The new command `deriv_h' can be used to overwrite the value for the step size for the numerical differentiation given in the kat.ini file. This is useful if several files in the same directory require different step sizes (mostly when `diff' command is used for alignment angles). o A warning is now issued if a global `scale' command is used. o The Windows version now replaces '\' by '/' in all filenames (in the start command for Gnuplot and inside the Gnuplot or Matlab files). This probably does not change the behaviour of Finesse in any way; please let me know if it breaks anything! o A further new option '-v' prints version number and exits. o Finesse now writes backup copies before overwriting output files (extensions log, gnu, m and out): filename.xxx becomes filename.xxx.bak. fixed bugs: o The C-function `atoi' was used in three places, and could sometimes cause Finesse to stop with wrong error message `too many demodulations'. o The Matlab script files did not work properly in some cases (3D plots with several detectors). o x3axis did not work since a while due to a bug introduced when the code was restructured. Should be fixed now but more testing needed. 0.99.5 -> 0.99.6 (28.02.2008) main changes: o this is mainly a bug fix release. However, at least one interesting feature has been added: Finesse now also writes Matlab output files for plotting, for people who do not use Gnuplot. added feature : o Finesse now writes a Matlab batch file (katfilename.m) along with the Gnuplot file. From within Matlab cd into the directory with the Finesse output file and type the name of the name for the *.m file to generate a Matlab plot from the data. o three new standard variables have been defined internally: $mx1 = -$x1 (minus the current xaxis value) $mx2 = -$x2 (minus the current x2axis value) $mx3 = -$x3 (minus the current x3axis value) Please note that the parsing of these is fragile. fixed bugs: o the rounding code for the xaxis step size has been improved so that the data point for e.g. xaxis ... 0 100 10 lie exactly on 0 10 20 ... 100. o the previous version introduced a memory error which causes functions of functions to crash sometimes o phase 2 did not work as advertised, it caused some phase shift in the coupling coefficients too, so that the same potential problems as in phase 1 or phase 3 (e.g. failure of energy conservation) might have appeared. o phases of alignment sidebands (from the fsig x/y command) have been corrected. Needs further testing, so far untested for beamsplitters. Use with care. 0.99.4 -> 0.99.5 (21.03.07) main changes: o this is a bug fix release, see below. fixed bugs: o numerical round-off error affected the selection of beat frequencies for demodulated signals. In the presence of strong modulation sidebands this could have caused wrong results for audio frequency demodulation. o phase of alignment type signal frequencies were wrong at the back of mirror components. This would result in different amplitudes of alignment signals for 'inner' mirror in couples cavities, like, e.g. arm cavity input mirrors in recycled gravitational wave detectors (please remember that the alignment TF part of Finesse is not as well tested as the longitudinal counterpart) o the command 'set' when used with with 'abs' as in e.g. 'set test pd1 abs' set test to |pd1|^2 instead of |pd1| o computation of power loss inside a cavity was sometimes wrong (whenever a mirror was inside the cavity with the connecting nodes in the particular order: s s1 .. n1 n2 m m1 .. n3 n2 , s1 -> n2 -> m1 -> n3 -> s2 s s2 .. n3 n4 o Several small bugs with cavity tracing: - If the first cavity node was in a material with index of refraction !=1 the Gaussian beam parameters for the cavity computed by the 'cav' command was wrong by a factor of n, with n the index of refraction. In most cases the index of refraction (at the first cavity mode) is n=1, so that the error would not be visible. However, it becomes important when looking at cavity eigenmodes inside a substrate.. - The beam tracing algorithm reported the wrong length and losses for unstable ring cavities. - if the first node of a cavity end mirror was a dump, Finesse crashed - If the user supplied the wrong nodes in the cavity command the Finesse error messages were sometimes misleading o fsig connected to spaces did not work correctly in recent versions, for some silly reason half of the signal was set to zero, probably some forgotten code testing o comment lines in a GNUPLOT ... END block are now passed to the .gnu file 0.99.3 -> 0.99.4 (29.11.2004) main changes: o A very common user mistake is to tune a length or a radius of curvature without using the 'retrace' command. Thus I have changed the default setting: The default for 'retrace' has been set to ON. This means Finesse by default will re-compute the beam parameters for each data point. If you are using higher order modes and are NOT changing a length or a radius of curvature this will slow done the computation very much. In that case you should switch continuous tracing of the beam off using the command 'retrace off' added feature : o the output of Finesse now goes to a log file (with extension '.log') o per default the numbers given for T,L or R for the components m1, m2, bs1, bs2 are assumed to be between 0 and 1. The traditional reading of numbers as [ppm] can be used by starting Finesse with the option '--old'. misc: o the syntax of 'gnucommand' in 'kat.ini' has been changed to allow parameters, options, etc. given after the filename. For example Windows users should try (e.g.): GNUCOMMAND "/cygnus/gnuplot/Wgnuplot.exe FILENAME -" # Windows example 'FILENAME' will be replaced by Finesse. This example will keep the plot window open even if 'pause' is not used (see below). o for the terminal 'windows' the default behaviour has been changed: the 'pause' command is not anymore added to the Gnuplot file. The same behaviour can be better achieved with the gnucommand (see above). However, the pause command can be added as before if the command 'pause' is added somewhere in the input file. o basenames with more than one dot (e.g. test.mine.one.kat) will now be recognised o the verbose output of the 'lock' command has been improved o removed the warnings for nodes with less than one connection in order to emphasise other, more important warning messages o the syntax for all components has been extended. The names in the following list are now equivalent: - m <=> mirror, m1 <=> mirror1, m2 <=> mirror2 - bs <=> beamsplitter (and similarly for bs1 and bs2) - s <=> space - l <=> laser *or* light - gr <=> grating - isol <=> diode fixed bugs: o retrace did not use the note defined by the 'startnode' command when doing the beam trace. o beam splitters connected connected to empty nodes and spaces with index of refraction!=1 generated the error 'index of refraction not consistent' because the empty node was set to the default index of refraction. The usual solution was to connect spaces to unused beam splitter nodes. This has been changed so that the nodes can remain empty. o lock* did work correctly but produced some wrong status information (i.e. 'reducing loop gain ...' when the lock was already stopped) and wasted some computation time. o a problem was found with respect to quoting of filenames on Windows systems within the output Gnuplot files. This has now been fixed. internal changes: o many name changes of functions and variables within the code o extension of the structural change made for quantum noise corrections. As a part of this change the original implementation to detect and make use of dump nodes in the interferometer to improve efficiency has been changed to be compatible for both quantum and classical calculations. For quantum calculations there are no dump nodes. This is only a classical concept, and so the speedup only applies to calculations where quantum corrections are turned off. o further improvement of API documentation, and commenting of code. o much addition of debug statements and assert() statements to check that variables stay within the required bounds. These statements are removed by the compiler when Finesse is compiled with the 'fast' or 'kat' options. o the Makefiles have been rewritten and extended in functionality. 0.99.2 -> 0.99.3 (25.02.2006) added feature : o added new feature for 'm' and 'bs' command. The following describes the changes for 'bs', the changes for 'm' are the same: Instead of 'bs' and 'bs*' one can now use the following commands command parameter1 parameter2 bs R T bs1 T L (was bs* before) bs2 R L Please recall that internally Finesse always uses R,T only. For bs1 and bs2 the numbers are historically given as ppm but this will be changed soon, see next item. o added option '--new' which switches on all the newest untested features. Currently there is only one: m* and bs* take their input for T and L in ppm with option '--new' m*,bs* read T and L 'as is'. fixed bugs: o 'cav' tracing did not find its way through a BS when approaching it from node 4. 0.99.1 -> 0.99.2 (26.10.2005) fixed bugs: o a 'retrace' on an unstable cavity or 'retrace' with no 'cav' nor 'gauss' command caused a "bug found" message. o the 'func' command could not parse function strings with multiple occurrences of the same variable name. o the phase delay on propagation through a 'space' component had the wrong sign. This basically flipped the frequency dependence, e.g. upper sidebands were behaving like lower sidebands and vice-versa. This must have been wrong since the beginning of Finesse. Should affect almost all results but mostly by only switching frequency signs. 0.99 -> 0.99.1 (26.08.2005) added feature : o FINESSE now computes once the field amplitudes and photo diode signals for the static setup given in the input files in order to initialise the detector outputs. This is useful when a 'lock' command is used as it prevents the diode signals from being zero at startup. o when 'x2axis' is used without 'multi' it is now possible to 'switch off' outputs: the first output without a 'noplot' will be chosen for plotting. o added warning message if a differentiation is used with alignment angles and deriv_h is larger than 1.0e-9. The default setting deriv_h=1e-6 is usually too large for alignment angles. o FINESSE is now available also for Macintosh OS X. It has been compiled on a Linux system with a gcc cross-compiler. It seems to be working fine (except for the f2c libraries, which are only used for the 'kmn' command which is mostly intended for debugging anyway). The default terminal for OS X is set to 'x11' but the terminal 'aqua' should also work (if AquaTerm is installed). The path to the Gnuplot binary to '/usr/local/bin/gnuplot'; it can be changed in the 'kat.ini' file. Please let me know if you find a bug or something strange with this version. fixed bugs: o Michaela Malec pointed out that my definition of demodulation phase in the Finesse code has been inconsistent (for years) and did not correspond to the formula in the manual. That has been fixed. At the same time I have changed the definition of the in-phase and in-quadrature signals to a more common one. Now, the in-phase signal is given by a demodulation by cos(omega t) and the in-quadrature signals is given by a demodulation with cos(omega t +90deg). Thus, the complex output of a photodiode is now Re{A_ij} compared to Re{A*_ij} before (compare the manual section 'photodetectors and demodulation', especially the paragraph 'a single demodulation'. I think that results are only affected by sign flips which can be recovered changing the demodulation phase to the corresponding negative value. o a pointer error in the function call for the evaluation of 'func' commands caused some arbitrary results when more than one argument was used o a memory allocation error occurred when 'bp' detectors were used together with other detector types o demodulating at a signal frequency introduced a factor of 0.5 for all demodulations except for the standard transfer function with a pd2. This has been fixed. Each demodulation now correctly introduces an extra factor of 0.5 to the signal. Only if the one demodulation frequency was a signal frequency, the resulting number is multiplied by 2 because in practise one does not want the 0.5 from the signal frequency demodulation to be present in the transfer function. misc: o numeric component names, like e.g. '0.1', are not allowed any more. avoids some errors when a component name has been omitted and the parser takes the first numeric parameter as a name. 0.98 -> 0.99 (08.03.2005) main changes: o FINESSE has undergone a major change: a simple parser for mathematical expressions has been added. This allows to combine various signals already inside FINESSE (e.g. one can normalise an error signal by a DC light power signal, etc.). In addition, FINESSE has been fitted with a simple algorithm to keep the interferometer automatically on an operating point. In other words, FINESSE can perform some kind of locking. For this new functionality it was also necessary to change the syntax related to the 'var' and the 'xparam' command: - 'var' command has been renames to 'const' (no other change) - The functionality around the 'xparam' has been changed completely: 'xparam' does not exist any more, instead several more flexible commands have been added (see below) PLEASE NOTE that old input files have to be adapted to run with FINESSE 0.99 or newer. added feature : o removed the 'xparam' command and added instead three commands (set, put and func) which allow a more flexible linking of parameters in FINESSE. The following gives a syntax reference and an example for the use of the new commands: - set name component parameter e.g. : set Lp space1 L defines the new variable 'Lp' to store the length of 'space1'. With 'set', all tunable parameters in the input file can be accessed with the usual syntax 'component parameter'. In addition the output of any detector can be stored in a variable. The syntax is: set name detector-name re/im/abs/deg where re/im/abs/deg indicate which real number to use if the detector output is a complex number. (NOTE for detectors with a real output, use 're' and NOT 'abs' since 'abs' will remove the sign!) The variable defined by 'set' are computed for each step of the computation, i.e. they 'see' when the source parameter changes. In addition to user defined variables, the variables $x1, $x2 and $x3 have been pre-defined and point to the current value of the xaxis (or x2axis, x3axis respectively). This names must not be used with 'set'. - func name = function-string e.g. func y = $Lp+2 defines the new variable 'y = Lp+2'. The previously defined variable 'Lp' has to be entered with a '$' sign. The new variable (i.e. the function result) will be plotted as a new output, like a detector output. Any previously defined variable via 'set', 'func' or lock (see below) can be used like this the function string. The functions are executed for each data point. (Please note that if you use two similar function names like 'function' and 'function1' the parser might have problems to distinguish between the two.) This new feature uses the mathematical expression parser Formulc 2.22 by Harald Helfgott. The following functions are available in the function string: exp() ln() sin() cos() tan() asin() acos() atan() atan2() abs() sqrt() pi() (with no parameters inside the parentheses) rnd() (a random number between 0 and 1) Other functions can be added on request. Numbers have to be given numerically, e.g. '3.0E-9' instead of '3n'. Please note that '3.0e-9' does not work. Multiplication with negative numbers requires parentheses, e.g.: y = (-1)*$x1 For a detailed description of the parser syntax, please see the documentation of Formulc 2.22. - put[*] component parameter $variable e.g. put space2 L $y writes the content of variable 'y' into the length of 'space2'. ('put*' always adds to the initially set lengths of space2) All 'put' commands are executed before first data point if pd outputs are used in 'put' or 'func' they are set to 0.0 for the first data point calculation. In total, the three commands 'set', 'func' and 'put' in this example connect the lengths of space1 and space2 so that space2 is always 2 meters longer. Another example: for making the tuning of mirror2 automatically the inverse tuning of mirror1, one can write: set a mirror1 phi // defines variable $a as the mirror1 tuning func b = (-1)*$a // defines the function $b=-$a put mirror2 phi $b // updates the mirror2 tuning with $b In order to tune other parameters together with the xaxis one can write, e.g.: xaxis mirror1 phi lin 0 90 200 set a mirror1 phi func b = (-1)*$a put mirror2 phi $b or directly: xaxis mirror1 phi lin 0 90 200 func b = (-1)*$x1 put mirror2 phi $b o added a new command 'lock' with the following syntax: lock[*] name $variable gain accuracy The command will read the variable given by '$variable' and writes into the new variable 'name'. This variable will be also plotted as a new output, like a detector output. 'lock*' stops after the first point so that only the initial lock is found and the rest is computed without locking (Please note that if you chose two similar lock names like 'lock' and 'lock1' the parser might have problems to distinguish between the two.) FINESSE will perform an iterative computation for each data point on the xaxis. In fact, it will compute the interferometer iteratively until the condition abs($variable)0, default 10000) Maximum number of steps that the iteration tried to achieve the lock. - autogain (integer, 0,1,2 default 2) Switch for the automatic gain control: 0 = Off 1 = On 2 = On with verbose output - autostop (integer, 0,1 default 1) If autostop is switched ON the locking algorithm will stop after it once fails to reach the desired accuracy - sequential (integer, 0,1,5, default 5) This keyword determines if the feedback signals are computed sequentially or in parallel. The sequential mode is slower but performs much better far away from the operating point or when 'autogain' is needed. The default 5 uses the sequential mode for the first two data points and then switches to the faster parallel locking. - lockthresholdhigh (double, >0, default=1.5) Whether a loop is probably oscillating with a too high gain is determined using 'lockthresholdhigh'. The criterion used is as follows (with y1,y2,... as successive error signal values): the oscillation condition is defined as: if abs((y1+y3-2*y2)/accuracy/y3) > lockthresholdhigh) true=loop oscillates - lockthresholdlow (double, >0, default=.01) Whether a loop gain is too low is determined using 'lockthresholdlow'. The low-gain condition is defined as: if abs((y1+y3-2*y2)/accuracy/y3) < lockthresholdlow) true=loop gain too low - locktest1 (integer, >0, default 5) and locktest2 (integer, >0, default 40) 'locktest1' and 'locktest2' determine the number of steps that an iteration is allowed to remain in an 'oscillation' (or 'low gain'). After 'locktest1' number of steps the loop state is checked. If for 'locktest2' number of checks the same error condition persists the loop gain will be reduced or increased by the factor 'gainfactor'. - gainfactor (double, >0, default 3) o another new command: 'showiterate steps'. If 'steps' is >0 the current state of the lock iteration is printed each 'steps' iterations. If 'steps'=-1 the result is printed only after the first successful iteration (useful for knowing the values of the initial operating point). o since 'func' and 'lock' creating new outputs, the resulting plots might become very cluttered. Therefore the command 'noplot output' has been introduced. It suppresses the plotting of the given output (photo detector, function, lock, ...). The data is stored in the *.out file as before, only the plot command in the respective the *.gnu batch file is changed. miscellaneous: o the 'var' command has been renamed to 'const'. Other than the name there is no change. Please note that even though the constants defined by 'const' and the variables defined via 'set' look similar they behave differently. The constants are put into the configuration by the input-file parser whereas the variables given by 'set' need a 'put' command and are inserted to the configuration at run-time, i.e. at each step of the computation. o 'xaxis' now allows to sweep from bigger to smaller values like e.g. 'xaxis mirror1 phi lin -30 0 100' (before FINESSE swapped those internally and swept always from smaller to bigger). o beam analyser has been set up (again) so that it is fast when x1 and x2 axis are used for beam analyser position only (beam.x and beam.y). If you use xaxis and x2axis but only one is tuning the beam analyser axis, use always x2 for the beam analyser; its faster. For example: xaxis* MNE R lin 0 -2000u 40 x2axis Beam2 x lin -200 200 40 beam analysers can now be used together with other diodes (this feature is necessary to use a beam analyser together with a locking loop). o started to play with Gnuplot 4.1. Changed kat to handle the new Gnuplot syntax. The version for Gnuplot can be set in kat.ini with the keyword 'gnuversion'. Default is 4.0. o added warning if fsig is used for the laser frequency and a modulator is present in the setup, because in most cases the frequency noise should be added (as phase noise via a mirror) after the modulator to obtain correct results. See also 'sidebands.ps' in the FINESSE documentation. o Error messages are printed if /* or */ are not used properly (properly = at the beginning of an input line). fixed bugs: o using x2axis switched of the second yaxis but also suppressed the output of the data into the file, i.e. with yaxis abs:deg normally only the amplitude was written into the output file (M. Malec), fixed. o 'yaxis re' and 'yaxis im' could not be set, fixed. o a memory allocation problem during parsing of the input file. Should not have affected any calculation. 0.96 -> 0.98 (27.02.2005) main changes: o added several features that are useful for designing telescopes or computing mode matching. For example: - two new detectors that can be used to print beam parameters like waist size, waist position, Gouy phases, etc. - added the keyword `retrace' that forces FINESSE to re-compute all beam parameters for each data point. o a bug fix concerning TEM_nm modes with n>2: sometimes a sign flip was applied in the coupling matrices for these modes. added feature : o detector `bp' (beam parameter), plots various beam parameters. It can be used to design telescopes, find waist positions, etc. Syntax: bp name x/y parameter node with parameters: w : beam radius w0 : waist radius z : distance to waist zr : Rayleigh range g : Gouy phase q : Gaussian beam parameter All parameters are available for the x and the y direction. o detector `gouy', plots the Gouy phase accumulated in a number of spaces (free propagations). This detector is very useful for designing telescopes used with quadrant cameras generating alignment error signals. Syntax: gouy name x/y space-list For example: `gouy g1 x s1 s2 s3 s4 s5 s5 s10' plots the Gouy phase (in x direction) a beam (TEM00) accumulates propagation through s1, s2, ..., s10. o keyword `retrace': if this keyword is used FINESSE computes the base set of HG modes for each data point. I.e. cavity eigen-modes, Gaussian beam parameters, ABCD matrices and coupling coefficients are re-computed. Thus, focal lengths of lenses, lengths and radii of curvature can be tuned without necessarily breaking the par-axial approximation. This feature is meant for using it with the new detectors `bp' and `gouy' but it can also be used with normal photo detectors. However, I believe that one should take care to understand very well the approximations used when `retrace' is set for computing error signal or transfer functions. o added command `startnode node' to allow the user to specify at which node the beam tracing algorithm should start. o the beam shape detector has now the optional parameter `frequency'. If a frequency is set, only the modes with that frequency are plotted. o x3axis (undocumented) has been changed. By default one output file with a 4-dimensional data set is produced (for post-processing with other software). o C-style comments with /* --- */ can be used to comment out several lines of an input file at once. Please note that start and beginning, i.e. /* and */ have to be put at the beginning of a line (and those lines will be also treated as comments). o The Gouy phase of a space can be set with an "attr space gx/y" command and with "xaxis space gx/gy" the Gouy phase can be overwritten, values in [deg] miscellaneous: o added an example for how to use Matlab/Octave together with FINESSE (by Gabriele Vajente) o all Gouy phases, entered and printed are now per default in [deg] instead of [rad] o error message "interferometer broken" now prints the names of the nodes that could not be traced o added some proper error handling for the internal Sparse error codes o changes the default value for "mtics" in the *.gnu file from 10 to 2. fixed bugs: o two bugs fixed related to the sign of coupling coefficients: first, a sign derived from a beam direction was used wrongly for reflections at back surfaces, second, a sign flip for TEM_nm modes with n>2 was sometimes applied accidently while filling the interferometer matrix. Both could in principle have produced wrong results in many cases but I have seen an effect only in constructed examples. o xaxis i1 P ... tuned the phase on the laser, not the power (M. Malec), fixed. o a memory leak when x3axis was used in connection with more than 6 detectors o tuning the y-axis of beam analyser, showed `y/wx0' as an axis label. Corrected to `y/wy0'. o fixed a bug in the phases of sidebands when fsig was applied to a modulator (thanks to Michaela Malec for finding this bug). o parsing of gauss* command was broken in many ways (i.e. it can never have worked at all) -> fixed. 0.93 -> 0.96 (02.10.2003) main changes: o two bug fixes concerning the computation of Hermite-Gauss modes. Both do not affect any of my own simulation examples but one of the bugs could change the result for n+m>3 in some special cases (see below). o number of modes, frequencies and components is now virtually unlimited. added feature : o The number of components or higher order modes (maxtem) are now virtually unlimited (except by the amount of time and memory you can offer). This required a complete re-write of the memory allocation methods in FINESSE. In connection with this I had to change the syntax of "pdtype" in kat.ini slightly. Before, the beat coefficients were given as: n1m1 n2m2 value Now, as mode numbers can be greater than 10 this has been changed to: n1 m2 n2 m2 value. So please adapt your kat.ini file or copy the new one. o radii of curvature for mirrors and beam splitters can now be set independently for x- and y-direction (x=tangential plane, y=saggital plane). NOTE: as a consequence you cannot tune the parameter 'Rc' any more. Use, `xaxis .. Rcx' plus `xparam .. Rcy' instead. o added new command `kmn value'. With `kmn' the user can specify whether the coupling coefficients for TEM modes are computed with the (default) Bayer-Helms formula or by solving the convolution integral numerically. kmn__________________ 0 _|_ Bayer-Helms 1 _|_ verbose 2 _|_ numeric integration if both x and y misalignment are set 4 _|_ numeric integration if x or y misalignment are set 8 _|_ always use numeric integration For customising the numeric integration the following parameters were added to the kat.ini file: maxintop: maximum function calls of the numeric integration algorithm (default 400000) abserr : absolute error requested from the numeric integration (default 1e-6) relerr : relative error requested from the numeric integration (default 1e-6) o added new command line options: - `kat -hh' gives a second help screen with some extra information about the command syntax. - `kat -f' writes the data to the output file with 15 digits (normal: 12 digits). o In preparation for adding other features the commands xparam, x2param, etc. will soon be replaced by two more general commands. The new commands are now used optionally and only allow the same functionality as xparam: The command `func' defines a new numeric number as a linear function of one interferometer parameters. `link' is then used to feed a function output to a interferometer parameter. For example: func f1 mirror1 phi 1 0 link mirror2 phi f1 connects the tuning of two mirrors: f1 is defined as f1=1*phi_mirror1+0 and this value is then "linked" to phi_mirror2. other changes: o amplitude detector in HG mode: when no mode numbers are given the detector tries to detect something like the `phase front' on the optical axis. The output is a complex number derived from the square root of the power and the phase of the sum over all amplitudes on the optical axis (EXPERIMENTAL). o some changes to the output of 'trace 4': - Kx and Ky are used internally as before but the output of 'trace 4' computes the mode mismatch with min(z_r, z_r') in the denominator (see manual). This gives a better quantitative number for the mode mismatch. - kmx, kmy are now computed as K**2/(1+K**2) which seems to be more useful than the original formula from Bayer-Helms - the mismatch parameters are printed in a slightly different order. - (Please see the new section about these parameters in the manual!) o changed the numerical approximation of the Bessel functions to a more accurate one from Takuya Ooura (see http://momonga.t.u-tokyo.ac.jp/~ooura/). Compared to available tables the old version differed in the 7th/8th significant digit whereas the new is correct to the accuracy of the table in `Handbook of Mathematical Functions...' by Abromowitz, Stegun (J0: 15 digits, J1, J2: 10 digits). Thanks to Eric Chassande-Mottin for this information. o inserted explicit formulas for Hermite polynomials up to the order H_10 (was H_3 before). For further higher orders the usual recursion is used. o improved the algorithms for complex powers and roots, i.e. z^n/m o changed the algorithm for computing n! so that it can handle large values. fixed bugs: o the sign of some coupling coefficients was wrong sometimes due to an incorrect order of complex roots. As far as I can tell the error occurred for TEM order of n+m>3 and mostly for numerically small coefficients. Thus, it did not alter the results of typical simulations. But I was able to design example files in which the output signals were changed by up to 5%. o added the index of refraction to ABCD matrices for reflection at a mirror and beam splitter. This affects the result only if the main reflection at a highly reflective and spherical surface occurs inside the substrate. o corrected the spelling of "Gouy" (as in Gouy phase) throughout the code and the manual. o `mkat' produced some warning messages with newer versions of Perl 0.92 -> 0.93 (14.07.2003) main changes: o increased speed of matrix initialisation by omitting consistency check. Consistency check can be forced by new option '-c'. o amplitude modulation can now be used for transfer functions (i.e. with fsig) o I started to add detailed information about the Hermite-Gauss part of FINESSE to the manual. o changed the syntax of the 'trace' command, see below. added feature : o added parameter 'type' to command fsig. 'type' specifies the respective type of signal modulation which can be 'amplitude', 'phase', 'frequency', 'xbeta' or 'ybeta'. For the moment the following types of signal modulation are implemented (default marked by *): m: phase*, amplitude bs: phase*, amplitude s: phase* input: frequency* modulator: phase* o Hermite-Gauss mode can now be switched off explicitly by using `maxtem off'. This allows to use the geometric optics mode without removing attributes and commands concerning transverse modes. other changes: o changed the bit-coding of the trace command to: trace 1: list of TEM modes used trace 2: cavity eigenvalues and cavity parameters like FWHM, FSR optical length and finesse trace 4: mode mismatch parameters for the initial setup trace 8: beam parameters for every node, nodes are listed in the order found by the tracing algorithm trace 16: Gouy phases for all spaces trace 32: coupling coefficients for all components trace 64: mode matching parameters during calculation, if they change due to a parameter change, for example by changing a radius of curvature. trace 128: nodes found during the cavity tracing o the windows version is now produced with a cross compiler (MinGW) running on Linux. If you have problems with the Windows version, please let me know (the binaries run well on all of the Windows systems I can access but these might not be representative). fixed bugs: o empty command "GNUPLOT END" produced segmentation fault -> fixed 0.90 -> 0.92 (03.03.2003) main changes: o tested (successfully) the propagation and coupling of TEM modes (order 0,2,4) with Roland Schilling against his FFT propagation code. o some minor bug fixes, see below. added feature : o speed of beam-analyser mode has been increased. o multiple outputs are now allowed with surface plot. First output is plotted by defaults. Other outputs are present as additional columns in the output data file and can be added to the plot with the keyword 'multi'. o added simple variables: command `var name value' defines a variable. Throughout the input file any instance of `$name' will be replaced by `value'. Maximum number of variables is 20. o maximum order of TEM modes (maxtem) is set to 12 (was 8 before) o added keyword `pause' that puts a `pause -1' after plot commands that are used with a screen terminal (`pause -1' is always added if the terminal `windows' is used). o default terminal is now "x11" on Unix machines and "windows" on Windows systems fixed bugs: o the units [deg] had been used for plots with xbeta or ybeta with the actual numbers given in radians -> fixed In addition, manual and help screen now state correctly that the misalignment angles are entered and plotted in [rad]. o beam analyser could not properly display the interference of two carrier fields because the phase information was not used -> fixed o mis-alignment angles for arbitrary incidence were wrong (switched x and y) Now: ydelta=2*cos(alpha)*ybeta and xdelta=2*xbeta, compare to 0.87. o changed input parser to cope better with different types of text files (MS-DOS/Unix) o changed Gnuplot file commands to work with newer patch levels (3.8i). o modulator commands may now precede input light commands 0.89 -> 0.90 (26.10.2002) main changes: o manual now in pdf format (Finesse.pdf) o added a document on `Sidebands of Sidebands' from Keita Kawabe to the package. added feature : o (undocumented) x3axis* fixed bugs: o some (spelling, grammar) corrections to the manual 0.87 -> 0.89 (20.06.2002) fixed bugs: o cavity command with not existing components or nodes could generate wrong error messages -> fixed o 'phases' set to non-zero (which is the default) produced a lot of debug info. This is switched off now. o TEM_nm modes with odd n did not get the proper phase change when reflected from a mirror or beam splitter. Thus, auto- alignment signals for rotation where wrong -> fixed. 0.86 -> 0.87 (02.06.2002) main changes: o changed the default for the command 'phase' to 3 (see below). This keeps cavities on resonance when the Hermite-Gauss mode is switched on. Be careful to use "phase 0" in the input file when you want to include some effects of mode mismatch. Please note that the mirror/beam splitter tunings for e.g. a resonance condition are not intuitive numbers when "phase 0" is used! fixed bugs: o the coupling coefficients came with a wrong phase in case of a mode mismatch -> fixed. This was a major bug and should have produced wrong results for almost all complex simulation with Hermite-Gauss modes! o the same bug also affected the output of a beam analyser but in my experience the changes were small. o the input parser sometimes gave wrong error messages in connection with fsig. This should be at least better now. o when a modulator was used in AM mode the parameter "phase" wasn't used at all -> fixed. o some corrections in the manual 0.83 -> 0.86 (27.04.2002) main changes: o the Gouy phase for the TEM_00 mode is now taken into account unless this is switched off with the command 'phase', see below. o a so called 'type' for photo detectors can now be specified (with respect to Hermite-Gauss modes). In the file 'kat.ini' a number of different types can be defined by giving power factors for the various beat signals between the different Hermite-Gauss modes. For example, if a photo detector will see the beat between the TEM_00 and TEM_01, then the line '00 01 1.0' (mode mode factor) should be present in the description. The definitions in the ini file are given a name. This name can be used with the command 'pdtype' in the input files. Many different types of real detectors (like split detectors) or (spatially) imperfect detection can be simulated using this new feature. The syntax for the type definitions: PDTYPE name ... END Between the "PDTYPE" and the "END" several lines of the following format can be given: 1. example: 01 02 1.0 beat between TEM_01 and TEM_02 is scaled with factor 1.0 2. example: 00 *0 1.0 '*' means 'any': the beats of TEM_00 with TEM_00, TEM_10, TEM_20, TEM_30,... are scaled with 1.0 3. example: xy xy 1.0 'x' or 'y' also mean 'any' but here all instances of 'x' are always the same number (same for 'y'). So in this example all beats of a mode with itself are scaled by 1.0 NOTE: All beat signals that are not explicitly given are scaled with 0.0! ('debug 2' somewhere in the input file will cause FINESSE to print all non-zero beat signal factors for all defined types.) Please take care when entering a definition, because the parser is very simple and cannot handle extra or missing spaces or extra characters. o `trace 4' prints quantitative numbers for the mode mismatch (mismatch parameter as in "F.Bayer-Helms, Appl. Opt. 1984 Vol 23 No 9"). fixed bugs: o there was a build-in mode mismatch at the transmission from node3 to node1 at a beam splitter, and for transmission from node2 to node1 at a mirror -> fixed o `scale ampere' only worked if a detector was specified -> fixed o undid changes to isolator (see 0.80) o `tem' factors were used squared by accident -> fixed added feature : o the command `phase' can be used to change the phases of light fields when higher modes are used. In general with higher order modes the spaces are not resonant any more for the TEM_00 mode because of the Gouy phase. Furthermore the coupling coefficients k_mnmn contribute to the phase when there is a mode mismatch. For correct analysis these effects have to be taken into account. On the other hand one can neglect these phase offsets for special analysis tasks. With the command `phase' these phase offsets can be set to zero: `phase 1' sets all phases for the coupling coefficients k_0000 (TEM_00 to TEM_00) to 0, `phase 2' sets all Gouy phases for TEM_00 to 0 and `phase 3' sets both effects. The phases for higher modes are changed accordingly, so that the relative phases stay correct. o added command `pdtype'. The command sets a pre-defined type to any kind of photo detector (i.e. with any number of demodulations). The different types have to be defined in in the file `kat.ini'. Fox example 'pdtype pd1 x-split' sets the photo detector pd1 to the type 'x-split'. o added command `mask'. With 'mask' certain TEM modes can be filtered at photo detectors or beam analysers. Without the command both detectors see all TEM modes. E.g. `mask detector1 0 1 0.9' scales the TEM_01 mode by 0.9 for detector1 (the command may be used several times for each detector). o misalignment angles of the beam splitters and mirrors are now more correctly translated into misalignment angles of the reflected beam as delta_x=2*cos(alpha)*beta_x and delta_y=2*beta_y. 0.82 -> 0.83 (18.04.2002) fixed bugs: o tracing several cavities in sequence was not implemented properly -> fixed. o the index of refraction at a "dump" node at beam splitters could cause an error -> fixed o modulators and isolators didn't work in Hermite-Gauss mode -> fixed 0.80 -> 0.82 (14.04.2002) main changes: o the index of refraction is now taken into account. The propagation of a Gaussian beam through a curved surface from one medium into another has been checked against OptoCad (by and with Roland Schilling). added feature : o `cav' will give some more information about the cavity: Finesse, FSR, FWHM (also checked against OptoCad). Some parameters for critical or unstable cavities will still be computed, only Gauss parameters are not derived from those cavity fixed bugs: o added description for command `attr' to the syntax reference in the manual o the tuning of some parameters was giving a "division by zero" errors due to a typing error -> fixed. o component `lens' was not working in Hermite-Gauss mode -> fixed other changes : o changed the output of Gauss parameters (trace 4), more verbose now. o changed the verbose output and the error messages for cavity tracing 0.63 -> 0.80 (02.04.2002) main changes: o the manual has been improved quite a lot (hopefully). It gives a better "Quick start" explanation for beginners. And for experienced "interferometrists" it contains the formulas showing how the physics is coded into FINESSE. o working on propagation of higher order modes: changes are marked with (*) o working on quantum correlation for shot noise calculation: changes are marked with (**) added feature : o (*) changed syntax of amplitude detector to include TEM numbers: `ad name [n m] f node[*]' with n,m as in TEM_nm. o (*) added index of refraction to component `space'. o (*) added keywords 'gauss' and 'gauss*': the Gaussian beam parameter q can be set as a base at a node. o (*) added keyword `cav': the beam is traced through a cavity, the eigenvalues for the ABCD matrix of the cavity is computed and the resulting q parameters are set for all cavity nodes. o (*) tracing Gaussian parameter q through system using the ABCD matrices of the components. o (*) added keyword `trace'. An integer value sets the level of verbosity for the beam tracing and also for other computations related to Hermite-Gauss modes. Try `trace 2' or `trace 4'. o (*) added component `lens' as a thin lens with parameter f o (* and **) added keyword `attr'. With `attr' the attributes mass (M), radius of curvature (Rc) and misalignment angle (beta) can be set for mirrors and beam splitters. This simplifies the input file structure. o (*) added detector `beam' which plots the cross section of a Gaussian beam. o (*) added keyword `maxtem': the maximum order of TEM modes can be specified (default is 0) o added component `isolator' which resembles a simple optical diode with adjustable suppression. o added keyword `ampere' for command `scale': with ampere set the values in the specified output will be converted from Watts to Ampere. NOTE the quantum efficiency is from now on only used in this conversion! o keyword `time': computation time is printed when program ends. fixed bugs: o signal sideband generation at mirrors and beam splitters always assumed r=1. This has been fixed. o (undocumented) mesh max/min fixed o changed the shot noise formula to depend correctly on the carrier wavelength. o with logarithmic x-axis the x-parameters now can have negative values o plotting with more than one Gnuplot terminal works only when terminals with file output comes first (`feature' of Gnuplot). FINESSE now sorts the terminals to assure this order. o fixed broken error message for pdS and pdN o the influence of alpha to the tuning (at beam splitters) was slightly wrong -> fixed o parameter alpha is now limited : -90 < alpha < 90 other changes : o order of commands and components in the input file can be (almost) arbitrary now o made parameter `phase' and `I' at input light (laser) tunable o changed suppression for isolators from amplitude suppression to power suppression. E.g. S=20 will cause the suppressed beam to have 0.1 times the initial power now. (changed back in 0.83) o added parameter `epsilon_c' to `kat.ini'. The light power had been calculated simply with I=E^2 before. Now the more correct I=epsilon_0*clight*E^2 can be used. The parameter `epsilon_c' is used for epsilon_0*clight in the equation above (in this notation the previous versions use epsilon_c=1). The default is epsilon_c=1.0. This does not change the results for photo detectors. But light _amplitudes_ can be given in correct units now. 0.56 -> 0.63 (01.10.2000) added feature : o added multiple (more than twice) demodulation (Note: syntax for `pd' has changed because of this!) o added analysis of oscillator phase noise o added quantum efficiency (qeff) of photo detectors as parameter for `kat.ini'. o added a more detailed description of the calculations to the manual o added Perl script "mkat" to the package (see manual) other changes : o change option name `-v' to `-max' o changed syntax of the photodetector command fixed bugs : o fixed phase problem for fsig: had been correct only for 0 or 180 degrees before o minor bug fixed concerning amplitudes of fsig (very tiny correction) o consistency of the demodulation phases fixed 0.55 -> 0.56 (10.04.2000) added feature : o transcribed the README file to a postscript file `Finesse.ps' The README file now contains only installation information and a short reference whereas the manual contains all the other information. o added option `--quiet' : suppresses all screen output o added option `-v' : `verbose' mode, currently prints max and min of all plotted graphs o added keywords `xaxis*' and `xparam*' (see manual) o added possibility to add signals (via `fsig') at beam splitters and spaces o added `amplitude' to `fsig' so that signal inputs with different amplitudes can be combined to one transfer function o added parameter `phase' to component `input light' o added parameter `detector' to `scale' so that different outputs can be scaled independently o added possibility to normalise output so that it gives m/sqrt(Hz) for plotted transfer functions when the signals are added at mirrors or beam splitters (see manual, keyword `scale') other changes : o changed the command name `deriv' to `diff' o changed default order of detected beams at modulators fixed bugs : o fixed bug in `out of range' detection for parameters o fixed wrong phase of transfer functions. The bug has caused an phase offset in most cases. 0.54 -> 0.55 (14.03.2000) added feature : o option `--perl1' for use with perl preprocessor (G. Heinzel) o increased number of components fixed bugs : o recompiled the Windows version so that the Gnuplot system command works fixed errors in README : o fixed error in description of xparam (switched `offset' and `factor') 0.53 -> 0.54 (03.03.2000) fixed bugs : o corrected ppm conversion from 1e-5 to 1e-6 (in m* and bs*) o corrected epsilon for signal sidebands (gives factor 0.5 for transfer functions) added features : o keyword `scale' added (allows rescaling of y-axis) fixed errors in README : o error in description of bs* fixed (changed R to T)