From e3d35ef812633084d94f14981765b66061758184 Mon Sep 17 00:00:00 2001 From: Laurent Farvacque Date: Mon, 20 Nov 2023 15:54:26 +0100 Subject: [PATCH] Matlab release 2.5 (#689) * Doc for release 2.5 * Packager for release 2.5 * Rebased on master * feat: modify template to generate doc with m2html * feat: update directory list * doc: separate contents (autogenerated) and README * Doc: update contents * Restore atmat/at.m and atmat/Contents.m * Add CoorectorPass bug fix in the release notes * Added Contents.m files * Update the release notes to take the last commits into account * increment the release notes --------- Co-authored-by: Laurent S. Nadolski --- Contents.m | 687 ++++++++++++++++++ ToolboxPackagingConfiguration.prj | 17 +- atintegrators/Contents.m | 39 + atmat/Contents.m | 588 ++++++++++++++- atmat/at.m | 2 +- atmat/atdemos/Contents.m | 53 +- atmat/atgui/Contents.m | 10 + atmat/atm2html.m | 10 +- atmat/atmatch/Contents.m | 17 + atmat/atphysics/CollectiveEffects/Contents.m | 10 + atmat/atphysics/Contents.m | 124 ++++ atmat/atphysics/LinearOptics/Contents.m | 30 + .../atphysics/LongitudinalDynamics/Contents.m | 19 + atmat/atphysics/NonLinearDynamics/Contents.m | 11 + atmat/atphysics/Orbit/Contents.m | 16 + .../ParameterSummaryFunctions/Contents.m | 14 + atmat/atphysics/Radiation/Contents.m | 33 + atmat/atphysics/TouschekPiwinski/Contents.m | 14 + .../atphysics/TuneAndChromaticity/Contents.m | 13 + atmat/atphysics/nafflib/Contents.m | 22 +- atmat/atphysics/nafflib/README | 10 + atmat/atplot/Contents.m | 37 + atmat/atplot/plotfunctions/Contents.m | 30 + atmat/attrack/Contents.m | 11 + atmat/atupdateContents.m | 29 +- atmat/atutils/Contents.m | 19 + atmat/lattice/Contents.m | 148 ++++ atmat/lattice/Converters/Contents.m | 44 ++ atmat/lattice/element_creation/Contents.m | 38 + atmat/lattice/survey/Contents.m | 10 + atmat/pubtools/Contents.m | 187 +++++ .../LatticeTuningFunctions/Contents.m | 144 ++++ atmat/pubtools/VacuumLifetime/Contents.m | 9 + atmat/pubtools/create_elems/Contents.m | 9 + atmat/pubtools/distance2curve/Contents.m | 9 + atmat/pubtools/haissinski/Contents.m | 12 + atmat/pubtools/lattice_tools/Contents.m | 14 + .../pubtools/local_lattice_params/Contents.m | 11 + developer/matlab/README.md | 4 +- developer/matlab/gen_toc.m | 2 +- developer/matlab/m/atradiation.m | 6 +- developer/matlab/m/atsummary.m | 4 +- developer/matlab/release_notes/r2.5.mlx | Bin 0 -> 4978 bytes docs/atdocs/matlab/AT_gs_top.html | 2 +- docs/atdocs/matlab/AT_page.html | 2 +- docs/atdocs/matlab/Installation.html | 20 +- docs/atdocs/matlab/atelemcreate.html | 82 ++- docs/atdocs/matlab/atelemfuncs.html | 46 +- docs/atdocs/matlab/atlatticefuncs.html | 113 ++- docs/atdocs/matlab/atlinearoptics.html | 81 ++- docs/atdocs/matlab/atloadsave.html | 62 +- docs/atdocs/matlab/atphysics.html | 40 +- docs/atdocs/matlab/atradiation.html | 64 +- docs/atdocs/matlab/atsummary.html | 48 +- .../matlab/helpsearch-v4_en/index_meta.json | 0 .../helpsearch-v4_en/store/000000000002.zap | Bin 117315 -> 152095 bytes .../matlab/helpsearch-v4_en/store/root.bolt | Bin 65536 -> 131072 bytes docs/atdocs/matlab/helptoc.xml | 1 + docs/atdocs/matlab/howtos.html | 41 +- docs/atdocs/matlab/howtos/CavityControl.html | 2 +- docs/atdocs/matlab/latticedemo.html | 66 +- docs/atdocs/matlab/primer.html | 71 +- docs/atdocs/matlab/release_notes.html | 49 +- docs/atdocs/matlab/release_notes/r2.3.html | 2 +- docs/atdocs/matlab/release_notes/r2.4.html | 2 +- docs/atdocs/matlab/release_notes/r2.5.html | 104 +++ docs/atdocs/matlab/ugsummary.html | 62 +- docs/m/index.rst | 1 + docs/m/releases/r2.5.rst | 19 + machine_data/Contents.m | 19 + 70 files changed, 3292 insertions(+), 223 deletions(-) create mode 100644 Contents.m create mode 100644 atintegrators/Contents.m create mode 100644 atmat/atgui/Contents.m create mode 100644 atmat/atmatch/Contents.m create mode 100644 atmat/atphysics/CollectiveEffects/Contents.m create mode 100644 atmat/atphysics/Contents.m create mode 100644 atmat/atphysics/LinearOptics/Contents.m create mode 100644 atmat/atphysics/LongitudinalDynamics/Contents.m create mode 100644 atmat/atphysics/NonLinearDynamics/Contents.m create mode 100644 atmat/atphysics/Orbit/Contents.m create mode 100644 atmat/atphysics/ParameterSummaryFunctions/Contents.m create mode 100644 atmat/atphysics/Radiation/Contents.m create mode 100644 atmat/atphysics/TouschekPiwinski/Contents.m create mode 100644 atmat/atphysics/TuneAndChromaticity/Contents.m create mode 100644 atmat/atplot/Contents.m create mode 100644 atmat/atplot/plotfunctions/Contents.m create mode 100644 atmat/attrack/Contents.m create mode 100644 atmat/atutils/Contents.m create mode 100644 atmat/lattice/Contents.m create mode 100644 atmat/lattice/Converters/Contents.m create mode 100644 atmat/lattice/element_creation/Contents.m create mode 100644 atmat/lattice/survey/Contents.m create mode 100644 atmat/pubtools/Contents.m create mode 100644 atmat/pubtools/LatticeTuningFunctions/Contents.m create mode 100644 atmat/pubtools/VacuumLifetime/Contents.m create mode 100644 atmat/pubtools/create_elems/Contents.m create mode 100644 atmat/pubtools/distance2curve/Contents.m create mode 100644 atmat/pubtools/haissinski/Contents.m create mode 100644 atmat/pubtools/lattice_tools/Contents.m create mode 100644 atmat/pubtools/local_lattice_params/Contents.m create mode 100644 developer/matlab/release_notes/r2.5.mlx mode change 100644 => 100755 docs/atdocs/matlab/helpsearch-v4_en/index_meta.json mode change 100644 => 100755 docs/atdocs/matlab/helpsearch-v4_en/store/000000000002.zap mode change 100644 => 100755 docs/atdocs/matlab/helpsearch-v4_en/store/root.bolt create mode 100644 docs/atdocs/matlab/release_notes/r2.5.html create mode 100644 docs/m/releases/r2.5.rst create mode 100644 machine_data/Contents.m diff --git a/Contents.m b/Contents.m new file mode 100644 index 000000000..08ca34ec8 --- /dev/null +++ b/Contents.m @@ -0,0 +1,687 @@ +% Accelerator Toolbox +% Version 2.5.0 (atcollab) 05-Nov-2023 +% +% AT +% See also +% +% Contents file for AT and its subfolders. +% +% AT/ATINTEGRATORS +% aperture - Creates a aperture element in old a AT version (Obsolete) +% BndStrMPoleSymplectic4Pass - .m Help file for BndStrMPoleSymplectic4Pass.c +% corrector - Creates a corrector element in old a AT version (Obsolete) +% drift - Creates a drift element in old a AT version (Obsolete) +% DriftPass - - Integrator for Drift spaces +% ExactHamiltonianPass - .m Help file for ExactHamiltonianPass.c +% GWigSymplecticPass - #ok +% GWigSymplecticRadPass - #ok +% hmonitor - Creates a horizontal monitor element in old AT version (Obsolete) +% idtable - (fname, Nslice, filename, Energy, method) +% idtable_global - IDTABLE Creates a RADIA-Map based element +% marker - Creates a marker element in old AT version (Obsolete) +% mChangeRefPass - Change the reference energy by scaling +% mDriftPass - Example of pass method in matlab +% mhdrload_bis - Loads data from an ASCII file containing multiple text +% mIdentityPass - MDRIFTPASS - example of pass method in matlab +% monitor - Creates a monitor element in old AT versions (Obsolete) +% multipole - Creates a thick multipole element in old AT versions (Obsolete) +% passmethodlist - Utility function for MATLAB Compiler +% passmethods - Returns a list of available AT passmethod functions in +% quadrupole - Creates a quadrupole element in old AT version (Obsolete) +% rbend - Creates a rectangular bend in old AT version (Obsolete) +% rbend2 - Creates rectangular bend with dipole fringe field in old AT versions (Obsolete) +% rbend3 - Creates a rectangular bend with different fringe fields at entrance +% rfcavity - Creates a RF cavity in older AT version +% sbend - Creates a sector bend element in old AT versions (Obsolete) +% sextupole - Creates a sextupole element in old AT versions (Obsolete) +% skewquad - Creates a skewquad element (alias to multipole) in old AT version (Obsolete) +% solenoid - Creates a solenoid element in old AT versions (Obsolete) +% vmonitor - Creates a vertical monitor element in old AT version (Obsolete) +% wiggler - (fname, Ltot, Lw, Bmax, Nstep, Nmeth, By, Bx, method,energy) +% +% AT/ATMAT +% at - Accelerator Toolbox +% atcavityoff - Switches RF cavities off +% atcavityon - ATRADON switches RF cavities on +% atdiag - Tests AT intallation +% atdisplay - Checks the verbosity level in the global variable GLOBVAL +% athelp - Generate the list of Accelerator Toolbox functions +% atm2html - MAKEDOC_HTML - Generate new MML, SOLEIL and AT HTML help files +% atmexall - Build all AT platform dependent mex-files from C-sources +% atpath - Adds the AT directories to the MATLAB search path +% atroot - Returns Accelerator Toolbox root directory +% atupdateContents - Updates Contents.m of AT directories +% getContents - Get the contents of a specified directory +% isOctave - Check if running Octave +% updateContents - Create a Contents.m file including subdirectories +% +% AT/ATMAT/ATDEMOS +% +% AT/ATMAT/ATDEMOS/ATFASTRING +% testatfastring - Demo of using atfastring for fast tracking +% +% AT/ATMAT/ATDEMOS/ATMATCHEXAMPLES/BUMP +% run_BumpFit - Fit a bump using correctors +% +% AT/ATMAT/ATDEMOS/ATMATCHEXAMPLES/EXAMPLEATMATCH +% betx - Get value of betx for Seq(indx) +% bety - Get value of bety for Seq(indx) +% dispx - Get value of horizontal dispersion for Seq(indx) +% getDispersion - Function [dx,dy]=getDispersion(THERING,bpmindx) +% mux +% runtotest_atmatch - Macro match dba test lattice beta functions and dispersion using +% VaryQuadFam +% +% AT/ATMAT/ATDEMOS/ATMATCHEXAMPLES/MATCHCHROMATICITY +% run_matchChromaticity - Match chrmaticity +% +% AT/ATMAT/ATDEMOS/GUI +% atslider - Is an example of a GUI control of multiple parameters in THERING +% demoknob - Illustrates the use of MATLAB GUI controls with AT +% +% AT/ATMAT/ATDEMOS/IDMODELING +% add_ID - Adds IDelem at the beginning and subtracts the length from +% trackWithU35KickMap - Read in ESRF lattice +% +% AT/ATMAT/ATDEMOS/OPTICSANDBEAMSIZES +% latticedemo - Self-running tutorial +% linoptdemo - Script illustrates the use of LINOPT +% ohmienvelopedemo - Illustrates the use of OHMIENVELOPE function +% +% AT/ATMAT/ATDEMOS/RESPONSEMATRIX +% findrespmdemo - Response matrix demo +% +% AT/ATMAT/ATDEMOS/TRACKING +% generateTrackData - Give some initial coordinates. Track through sample lattices +% test_openmp - Test the perfoemance of OpenMP +% testTracking - Test results of tracking against values previously computed +% trackingdemo - Self-running tutorial +% trackMultipleParticles - Time the tracking of multiple particles +% +% AT/ATMAT/ATDEMOS/TRACKWITHIMPEDANCE +% makeBBR - SI units; +% testTrackBBR - Create a fast ring from ESRF lattice +% +% AT/ATMAT/ATGUI +% intelem - Interactive element editor +% intlat - Interactive AT lattice editor +% +% AT/ATMAT/ATMATCH +% atApplyVariation - Applies a series of variations to variables as described in +% atDisplayConstraintsChange - This funciton evaluates the contraints defined in Constraints for lattice +% atDisplayVariableChange - This functions retrives variable Values for two rings to compare +% atEvaluateConstraints - This funciton evaluates the contraints defined in Constraints for lattice +% atGetPenalty +% atGetVariableValue +% atlinconstraint - Generate a constraint on linear optics for atmatch +% atmatch - Function [.. +% atVariableBuilder - AtVarBuilder create a simple variable structure for use with atmatch +% +% AT/ATMAT/ATPHYSICS +% atavedata - Average of optical functions on selected elements +% findrespm - Computes the change in the closed orbit due to parameter perturbations +% findspos - Returns longitudinal positions of accelerator lattice elements +% PhysConstant - Physical constants +% +% AT/ATMAT/ATPHYSICS/COLLECTIVEEFFECTS +% atbeam - Generates a particle distribution according to a sigma matrix +% atsigma - Constructs a beam sigma matrix 2x2 4x4 or 6x6 +% +% AT/ATMAT/ATPHYSICS/LINEAROPTICS +% amat - Find A matrix from one turn map matrix T such that: +% atdampingrates - Find tunes and damping rates from one map matrix with radiation +% atlinopt - Performs 4D linear analysis of the COUPLED lattices +% atlinopt2 - Performs the linear analysis of UNCOUPLED lattices +% atlinopt4 - Performs the 4D linear analysis of COUPLED lattices +% atlinopt6 - Performs linear analysis of the lattice +% beam22 - Computes the beam matrix from the 1-turn transfer matrix +% beam44 - Computes the coupled beam matrices +% find_betaoids - [H1 H2 H3]=find_betaoids(A) +% find_etaoids - Given the normalizing matrix A, we compute the etaoids +% find_inv_G - This function computes the invariants of a one turn map matrix +% find_inv_G_fromA - This function computes the invariant matrices G1,G2,G3 +% findelemm44 - Numerically finds the 4x4 transfer matrix of an element +% findelemm66 - Numerically finds the 6x6 transfer matrix of an element +% findm44 - Numerically finds the 4x4 transfer matrix of an accelerator lattice +% findm66 - Numerically finds the 6x6 transfer matrix of an accelerator lattice +% get_dispersion_from_etaoids - Computes dispersion functions (x,px,y,py) at refpts +% jmat - Compute antisymmetric Matrix [O 1; -1 0] +% linopt - Performs linear analysis of the COUPLED lattices +% mkSRotationMatrix - (PSI) coordinate transformation matrix +% plotbeta - Plots UNCOUPLED! beta-functions +% r_analysis - Return the phase for A standardization +% +% AT/ATMAT/ATPHYSICS/LONGITUDINALDYNAMICS +% atBunchLength - Bunch length due to the potential well effect +% atRFacc - Computes RF acceptance of the ring +% atsetcavity - ATSECAVITY Set the parameters of RF cavities +% atSetCavityPhase - SETCAVITYPHASE Set the TimeLag attribute of RF cavities +% BunchLength - Bunch length due to the potential well effect +% cavityoff - Turns cavities OFF +% cavityon - Turns Cavities ON +% mcf - Momentum compaction factor +% nus - Computes synchrotron tune from RF parameters +% phis - Phase = phis(U0MeV,VrfMV) +% RFacc - Computes the RF acceptance with linear formula +% +% AT/ATMAT/ATPHYSICS/NAFFLIB +% calcnaff - Computes NAFF decomposition for a phase space trajectory +% naff_cc - Compile nafflibrary for Matlab +% naff_example - Example to test naff within matlab +% nafflib - MATLAB to NAFF library +% +% AT/ATMAT/ATPHYSICS/NONLINEARDYNAMICS +% atnuampl - Computes tune shift with amplitude +% computeRDT - Computes Hamiltonian resonance driving terms (RDTs) +% tunespaceplot - Draws a tune diagram +% +% AT/ATMAT/ATPHYSICS/ORBIT +% findorbit - Find the closed orbit +% findorbit4 - Finds closed orbit in the 4-d transverse phase +% findorbit6 - Finds closed orbit in the full 6-d phase space +% findsyncorbit - Finds closed orbit, synchronous with the RF cavity +% plotcod - Closed Orbit Distortion +% xorbit_6 - Private function used by findorbit6 +% xorbit_ct - Private function used by findsyncorbit +% xorbit_dp - Private function used by findorbit4 +% +% AT/ATMAT/ATPHYSICS/PARAMETERSUMMARYFUNCTIONS +% atsummary - Print out various parameters of the current AT lattice +% atx - Computes and displays global information +% RadIntegrals - Calcuate the contribution to the radiation integrals of a Wiggler +% ringpara - Print out various parameters of the current AT lattice +% twissline - Calculates linear optics functions for an UNCOUPLED transport line +% twissring - Calculates linear optics functions for an UNCOUPLED ring +% +% AT/ATMAT/ATPHYSICS/RADIATION +% atdisable_6d - Switches radiation and cavity off +% atenable_6d - Switches RF and radiation on +% atenergy - Gets the lattice energy +% atgetU0 - Computes Energy loss per turn in eV +% atradoff - Obsolete: switches RF and radiation off +% atradon - Obsolete: switches RF and radiation on +% atsetenergy - (ring,Energy) sets the Energy field in all +% attapering - Scale magnet strengths +% check_6d - Check the presence of longitudinal motion in a lattice +% check_radiation - Obsolete: check the radiation state of a ring +% DipoleRadiation - Compute the radiation integrals in dipoles +% ElementRadiation - - Compute the radiation integrals in dipoles +% ElossRadiation - Compute the radiation integrals in EnergyLoss elements +% findelemraddiffm +% findmpoleraddiffmatrix - #ok +% findthickmpoleraddiffm +% findthinmpoleraddiffm +% getclass_6d - Private. Guess class for 6d motion +% ohmienvelope - Calculates equilibrium beam envelope in a +% quantumDiff - Compute the radiation-diffusion matrix +% radiationoff - Turns classical radiation OFF +% radiationon - Turns classical radiation ON +% thickmpoleraddiffm - FINDTHICKMPOLERADDIFFM +% thinmpoleraddiffm - FINDTHINMPOLERADDIFFM +% WigglerRadiation - Compute the radiation integrals in wigglers +% +% AT/ATMAT/ATPHYSICS/TOUSCHEKPIWINSKI +% MomAperture_allRing - All Ring momentum aperture +% momentum_aperture_at - Function [deltamin, deltamax.. +% simpletestToucheckLT - Simple example of use of toucheck lifetime formula: +% TLT_IntPiw - Integral in Piwinski Formula for the Lifetime +% TLT_IntPiw_k - Integral in Piwinski Formula for the Lifetime with u=tan^2(k) +% TouschekPiwinskiLifeTime - Function [Tl,contributionsTL]=TouschekPiwinskiLifeTime(ring,dpp,Ib,...) +% +% AT/ATMAT/ATPHYSICS/TUNEANDCHROMATICITY +% findtune - Get the tune value from turn by turn positions +% fitchrom2 - Fits chromaticity of THERING using 2 sextupole families +% fittune2 - Fits linear tunes of THERING using 2 quadrupole families +% intfft - Calculates the tune from interpolated FFT of the trajectory +% tunechrom - Computes linear tunes and chromaticities +% +% AT/ATMAT/ATPLOT +% atbaseplot - Plots data generated by a user-supplied function +% atplot - Plots optical functions +% atplotsyn - Helper function for ATPLOT +% atreforbit - Keep track of the nominal reference orbit through displaced elements +% xplot - Private function used by atplot and atbaseplot +% +% AT/ATMAT/ATPLOT/PLOTFUNCTIONS +% CurlyH - Function [H,Hv]=CurlyH(RING,dp,ind) +% CurlyHlindata - Function [H,Hv]=CurlyHlindata(lindata) +% plBeamSize - Plot H and V beam size +% plClosedOrbit - Plots H and V 4x4 closed orbit +% plCorrectorStrength - Plot PolynomB +% plEmitContrib - Plot H/rho³ at every dipole +% plenvelope - Plot beam envelope +% plot_betabeat - Function plot_betabeat(THERING_ref,THERING_mod) +% plot_trajectory - Plots particle trajectories +% plotAperture - Plots x and y aperture +% plotB0curlyh - Plot B and H +% plotbetadisp - Function [s,plotdata]=plotbetadisp(ring,dpp,plotfun,varargin) +% plotbetadispcurlyh - Plot beta, dispersion and H +% plotERAperture - Plot RApertures EApertures +% plotRDT +% plotsqrtbetadispcurlyh - Plot sqrt(beta), dispersion and H +% plotWdispP - Plot W functions +% plPolynomBComp - PlotBn coefficient with normalization +% plPolynomBSxtOct - Plots Bn for sextupole and octupole magnets +% plSigmaSigmap - Plots beam sizes and divergences +% pltouschek - Plots Touschek lifetime contribution +% plxi - #ok +% +% AT/ATMAT/ATTESTS +% githubrun - Private. This script runs the AT test suite in a GitHub action. There is +% githubsetup - Private. Setup Matlab for AT tests in GitHib Actions +% pytests - Shared setup for the entire test class +% +% AT/ATMAT/ATTRACK +% atpass - #ok +% linepass - Tracks particles through each element of the cell array LINE +% ringpass - Tracks particles through each element of the cell array RING +% +% AT/ATMAT/ATUTILS +% atoptions - Definition of default parameters +% frequency_control - Private. Handle off-momentum for 6D lattice +% getargs - Process positional arguments from the input arguments +% getdparg - Handle positional dp arguments +% getenvopt - (NAME, DEFAULTVALUE) +% getflag - Check the presence of a flag in an argument list +% getoption - Extract a keyword argument from an argument list +% opticsoptions - (private) extract arguments for atlinopt +% parseargs - Check and expands optional argument lists +% setoption - Set AT preference values +% wrapper6d - Private. Handle off-momentum for 6D lattice +% +% AT/ATMAT/LATTICE +% at2py - ELSTR=AT2PY(ELEM) convert AT element tp pyat +% at2str - Makes the string representation of an AT element +% ataddmpolecomppoly - Adds a multipole component to an existing polynomial, +% ataddmpoleerrors - Ataddrandmpole adds a random multipole component to all elements of type +% atCheckRingProperties - Get the ring properties if existing +% atdivelem - Divide an element into pieces +% atelem - Makes a new AT element structure from another element, +% atfastring - Generate simplified AT structures +% atfitchrom - Fit chromaticites by scaling 2 sextupole families +% atfittune - Fit linear tunes by scaling 2 quadrupole families +% atgetcells - Performs a search on MATLAB cell arrays of structures +% atgetfieldvalues - Retrieves the field values AT cell array of elements +% atGetRingProperties - Get the ring properties +% atguessclass - Tries to determine the class of an element +% atindex - Extracts the information about element families and +% atinsertelems - Insert elements at given locations in a line +% atloadfielderrs - Will load a field error structure into a ring +% atloadlattice - Load a lattice from a file +% atlocateparam - Private function. Locate the RingParam element +% atmaincavities - Get the fundamental mode cavities +% atmakefielderrstruct - MAKERNDFIELDERRS will create a field error data structure +% atparamscan - Private function. Updates the RingParam element +% atparticle - Particle definition for AT +% atreduce - Remove useless elements from an AT structure +% atrotatelattice - Circularly shift the lattice elements +% atsbreak - Insert markers at given s positions in a lattice +% atsetfieldvalues - Sets the field values of MATLAB cell array of structures +% atsetRFCavity - Set the RF Cavity with the passmethod RFCavityPass +% atSetRingProperties - Add or modify properties of the lattice +% atsetshift - Sets the misalignment vectors +% atsettilt - Sets the entrance and exit rotation matrices +% atshiftelem - Set new displacement parameters +% atsimplering - Creates a "simple ring" +% atsplitelem - Creates a line by inserting one or more elements into a base element +% attiltelem - Sets new rotation parameters +% atwritem - Creates a .m file to store an AT structure +% atwritepy - Creates pyAT lattice from a Matlab lattice +% buildlat - Places elements from FAMLIST into cell array THERING +% combinebypassmethod - Combines adjacent elements that have the same specified pass method +% combinelinear45 - Combines adjacent elements that use 4-by-5 PassMethods +% entrancefields - () Return the list of field names affecting the element entrance +% exitfields - () Return the list of field names affecting the element exit +% findcells - Performs a search on MATLAB cell arrays of structures +% findtags - Looks for string matches in 'Tag' field of AT lattice elements +% getcellstruct - Retrieves the field values MATLAB cell array of structures +% insertelem0 - - quick and dirty: +% insertindrift - Inserts one or more elements into a drift element +% isatelem - Tests if an input argument is a valid AT element +% isatlattice - Tests if an input argument is a valid AT lattice +% mergedrift - Removes a lattice element and merges the two adjacent drift spaces +% mvelem - Move an element +% mvfield - Move fields from one structure to another +% rmelem0 - Removes elements of length 0 from the accelerator lattice +% setcellstruct - Sets the field values of MATLAB cell array of structures +% setshift - Sets the misalignment vectors T1, T2 for elements +% settags - Sets the 'Tag' field in AT lattice elements +% settilt - Sets the entrance and exit misalignment matrixes +% splitdrift - Inserts an element into a drift space +% symplectify - Makes a matrix more symplectic +% +% AT/ATMAT/LATTICE/CONVERTERS +% readmad - Reads the file output of MAD commands +% +% AT/ATMAT/LATTICE/CONVERTERS/AT2ELEGANT +% AT_2_Elegant - This functions converts the AT lattice AT_ring in elegant form +% +% AT/ATMAT/LATTICE/CONVERTERS/AT2G4BL +% ATtoG4BL - Function [outtext]=ATtoG4BL(P_0,particle,folder) +% +% AT/ATMAT/LATTICE/CONVERTERS/AT2MAD8 +% AT_2_mad8 - Function [elelat,def,lines]=AT_2_mad8(AT_ring,linename) +% +% AT/ATMAT/LATTICE/CONVERTERS/AT2MADX +% AT_2_madX - Function [elelat,defs,lines]=AT_2_madX(AT_ring,linename) +% +% AT/ATMAT/LATTICE/CONVERTERS/AT2OPA +% AT_2_OPA - Function AT_2_OPA(AT_ring,linename) +% +% AT/ATMAT/LATTICE/CONVERTERS/ELEGANT2AT +% ele2at_run_me - Test_elegant_converter +% elegant2at - Function elegant2at(elegantlattice,E0,outfilename) +% ParseAtributesELEGANT_2_AT - Determines atribute and sets field in sxs{i} structure AT +% +% AT/ATMAT/LATTICE/CONVERTERS/MAD82MADX +% mad8TOmadx - Converts mad8 sequence files to madX +% +% AT/ATMAT/LATTICE/CONVERTERS/MADX2AT +% atfrommadx - Function atfrommadx(seqfilemadX,E0,outfilename) +% buildATLattice - Given a list (cell array) of elements with specified field Spos (center of element (madx default)) in a +% ParseAtributesMADX_2_AT - Determines atribute and sets field in sxs{i} structure AT +% reshapeToCellArray - If CEL_CEL is a cell array of structures and cell arrays it converts it a +% +% AT/ATMAT/LATTICE/CONVERTERS/MADX2AT/EXAMPLES +% convertMADXtoATExample - Simple lattice test (uncomment to run) +% +% AT/ATMAT/LATTICE/CONVERTERS/MADX2G4BL +% madx2g4bl - Function [outtext]=madx2g4bl(P_0,particle,folder) +% +% AT/ATMAT/LATTICE/ELEMENT_CREATION +% ataperture - Creates a aperture element +% atbaselem - Create an AT element structure + various checks +% atcorrector - Creates a drift space element with class 'Corrector' +% atdampMatElem - Creates an element that applies the global damping matrix +% atdrift - Creates a drift space element with Class 'Drift' +% atenergyloss - Creates an energy loss element +% atidtable - Creates an ID element +% atinsertiondevicekickmap - Creates an insertion device kick-map element +% atM66 - Create an element applying an arbitrary 6x6 transfer matrix +% atM66Tijk - ATM66(FAMNAME,M66,Tijk,PASSMETHOD) +% atmarker - Creates a marker space element +% atmonitor - Creates a Beam Position Monitor element with Class 'Monitor' +% atmultipole - Creates a multipole element +% atquadrupole - Creates a quadrupole element with Class 'Quadrupole' +% atQuantDiff - Creates a quantum diffusion element +% atrbend - Creates a rectangular bending magnet element with class 'Bend' +% atrbendtune - Set X0ref and RefDZ for rectangular bending magnets +% atrfcavity - Creates an rfcavity element with Class 'RFCavity' +% atringparam - Creates a RingParameter Element which should go at the beginning of the ring +% atsbend - Creates a sector bending magnet element with class 'Bend' +% atsextupole - Creates a sextupole element with class 'Sextupole' +% atSimpleQuantDiff - SimpleQuantDiff creates a simple quantum difusion element +% atskewquad - Creates a skew quadrupole element with Class 'Multipole' +% atsolenoid - Creates a new solenoid element with Class 'Solenoid' +% atthinmultipole - Creates a thin multipole element +% atvariablemultipole - Creates a variable thin multipole element +% atwiggler - Creates a wiggler +% +% AT/ATMAT/LATTICE/ELEMENT_CREATION/PRIVATE +% decodeatargs - Separates arguments and resources +% +% AT/ATMAT/LATTICE/PARAMGROUP +% atparamgroup - PARAMETER GROUP in AT is a general way +% mkparamgroup - Simplifies creation of AT parameter groups +% restoreparamgroup - Restores the values of multiple physical +% saveparamgroup - Saves the values of multiple physical +% setparamgroup - Modifies a group of parameters +% +% AT/ATMAT/LATTICE/SURVEY +% atgeometry - Computes the 2-D position of all elements (no vertical bend) +% atgeometry3 - Computes the 3-D position of all elements +% +% AT/ATMAT/PUBTOOLS +% atdynap - Compute the dynamic aperture +% atmomap - Find momentum aperture at start of ring +% atsurvey2spos - Returns closest lattics s coordinates to xycoord points +% atundulator - Define undulator model +% atvalue - Extract array from lindata structure +% calc_dppAperture - Calculate the momentum aperture at each location of the ring due to +% calc_Touschek - TauT = calc_Touschek(THERING, Ib) +% calc_TouschekPM - TauT = calc_TouschekPM(TD,dppPM,Trf,Ib,U0,coupling, sigE, emit_x) +% freqsearch - ========================================================================= +% nlchromplot - Example: nlchromplot(esrf,-.04,.04,30,16,1) +% +% AT/ATMAT/PUBTOOLS/APERTURE +% SetPhysicalAperture - Ringapert=SetPhysicalAperture(ring,apertureX,apertureY) +% +% AT/ATMAT/PUBTOOLS/CREATE_ELEMS +% atidtable_dat - Atidtable(FamName, Nslice, filename, Energy, method) +% +% AT/ATMAT/PUBTOOLS/DISTANCE2CURVE +% distance2curve - Gets the minimum distance from a point to a general curvilinear n-dimensional arc +% +% AT/ATMAT/PUBTOOLS/HAISSINSKI +% blength +% fitgaussian - GAUSSIAN_PARAM FITERR GAUSSFIT SIGERROR]= FITGAUSSIAN(DATA,[property_value_pair]); +% plothaissinski - [z lambda sigma mu] = HASSINSKYFIT(SIGMA0, R, L) +% Qval - Gives the unitless Q parameter needed to compute the +% +% AT/ATMAT/PUBTOOLS/LATTICE_TOOLS +% atreadbeta - Reads a BETA file +% atsetglobval - Creates the global variable GLOBVAL and adds Energy +% scalesext - Newring=scalesext(ring,sextfam,scale) +% setsext - Newring=setsext(ring,fam,val); +% setsextall - Newring=setsextall(ring,fam,val); +% sext_sens_scan - Esrf(:) +% +% AT/ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS +% +% AT/ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/CORRECTION +% qemsvd_mod - Function dq=qemsvd_mod(a,b,neig,plot) +% +% AT/ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/CORRECTION/CHROMATICITY +% atmatchchromdelta - Function arcchrom0=atmatchchromdelta(arc,c,sxtfams) +% +% AT/ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/CORRECTION/CORRECTION_CHAIN +% CorrectionChain - Corrected lattice +% DisplayCorrectionEffect - [d0,de,dc]=DisplayCorrectionEffect(.. +% testcorrectionchain - Test errors and correction functions +% +% AT/ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/CORRECTION/DISPERSION +% atcorrectdispersion - Function [.. +% testdispersioncorrection - Test errors and correction functions +% +% AT/ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/CORRECTION/DISPERSIONFREESTEERING +% atdispersionfreesteering - Function [.. +% testdispersionfreesteering - Test errors and correction functions +% +% AT/ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/CORRECTION/ORBIT +% atcorrectorbit +% testorbitbump - Test errors and correction functions +% testorbitcorrection - Test errors and correction functions +% +% AT/ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/CORRECTION/ORBITBUMPS/MATCHING +% BumpAtBPM - Function roff=BumpAtBPM(.. +% BumpAtBPM4D - Function roff=BumpAtBPM(.. +% testorbitbump - Test matching orbit bump +% +% AT/ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/CORRECTION/RDT +% atavedata_mod - ATAVEDATA Average of optical functions on selected elements +% atQuadRDTdispersioncorrection - - Make dispersion correction based on RDTs +% atRDTdispersioncorrection - Makes dispersion correction based on RDTs +% atRDTdispersionmeasuredcorrection - Makes correction of dispersion based on +% atSkewRDTdispersioncorrection - Function [.. +% EquivalentGradientsFromAlignments6D - Estimated normal quad gradients from sext offsets +% qemrdtresp_mod - QEMRDTRESP compute resonance driving terms at BPM locations +% semrdtresp_mod - SEMRDT compute resonance driving terms at BPM locations +% testRDTdispersionfreesteering - Test errors and correction functions +% +% AT/ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/CORRECTION/RESPONSE_MATRIX +% findrespmat - FINDRESPM_mod computes the change in the closed orbit due to parameter perturbations +% getresponsematrices - 1 AT lattice +% gettunechromatlinopt - Gets tunes and chromaticities from atlinopt +% +% AT/ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/CORRECTION/RFCAVITY +% atRFcorrection - Function [.. +% atsetRFCavityErr - ATSETRFCAVITY sets the RF Cavity with the passmethod RFCavityPass +% testsetRFCavityErr - Test errors and correction functions +% +% AT/ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/CORRECTION/TRAJECTORY +% atfirstturntrajectory - Makes first turn correction +% MatchLast2CorForFirstBPM - Takes the last two correctors to match the orbit and angle trajectory at +% Scan2x2DinCOD - [bestinputcoord]=ScanPosAngle(.. +% testorbitaftertrajectory - Test errors and correction functions +% testtrajectorycorrection - Test errors and correction functions +% +% AT/ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/CORRECTION/TUNE +% atmatchtunedelta - Function arcchrom0=atmatchtunedelta(arc,c,quadfams) +% fittunedelta2fam - Rerr=fittunedelta2fam(rerr,r0) +% testfittunedelta2fam - Test errors and correction functions +% +% AT/ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/ERRORS +% AssignFieldErr - Function r=AssignFieldErr(r,refpos,N,rho,BNn,ANn) +% atset_s_shift - Implements DS longitudinal position drift +% atsetbpmerr - Sets the misalignment vectors +% atsettiltdipole - Sets the entrance and exit rotation matrices +% bpm_matrices - Generate transformation matrices for BPM readings +% bpm_process - Compute BPM readings from the closed orbit +% finddispersion6Err - Gets 6D dispersion with bpm reading errors +% findorbit4Err - Gets 4x4 closed orbit with BPM errors +% findorbit6Err - Findorbit6 with bpm reading errors +% findtrajectory6Err - [t 6xNbpm array of trajectory +% setANYshift - Adds to the existing shift errors additional D +% setFieldIntegralError - Function rerr=setFieldIntegralError(r0,rerr,indx,order,Nsigma,sigmaperc) +% setGirderError - Rerr=setGirderError(r,pert,errval,mag_group) +% SetLargeErrorList - Sets given error list +% setTiltAbout - Sets tilt errors +% setTiltGirderAbout - Set Tilt error on a magnet +% setXshift - Set horizontal shifts for a element list +% +% AT/ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/ERRORS/BPMERRORS +% testerr - Load lattice +% +% AT/ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/ERRORS/DELTAS +% testerr - Load lattice +% +% AT/ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/ERRORS/DXDY +% testerr - Load lattice +% +% AT/ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/ERRORS/ERRORDISPLAYFUNCTIONS +% GetMisalignments - This function retrives 3 vectors, for x and y misalignments and tilts +% pltmisalignments - #ok +% +% AT/ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/ERRORS/ERRORSMANIPULATION +% GetExistingErrors - This function retrives 6 vectors, for x, y,s misalignments, +% getMagGroupsFromGirderIndex - Gets magnets on a girder +% getMagGroupsFromMagNum - - Gets magnet from a Magnet group +% setBpmOffsetOnDipoleRef - Set bpm on curve defined by dipole misalignments +% SetExistingError - Function SetExistingError(rerr,magindex,X0,Y0,S0,T0,R0,P0,bpm0) +% SumErrors - Rsum=SumErrors(r1,r2,magindex) +% ThetaPhiGirder - Rtp=ThetaPhiGirder(r,mag_gr) +% UniformGirderErrors - Function ring=UniformGirderErrors(ring) +% UniformMagGroupsErrors - Function ring=UniformMagGroupsErrors(ring) +% +% AT/ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/ERRORS/FIELDINTEGRAL +% testerr - Load lattice +% +% AT/ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/ERRORS/GIRDERS +% testerr - Load lattice +% +% AT/ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/ERRORS/LARGEERRLIST +% testerr - Load lattice +% +% AT/ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/ERRORS/LARGEWAVELIST +% testcor - Load lattice +% +% AT/ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/ERRORS/MULTIPOLES +% testerr - Load lattice +% +% AT/ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/ERRORS/RANDOM +% atsetrandomerrors - Function rerr=atsetrandomerrors(.. +% seterrorrand - Nominal lattice +% +% AT/ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/ERRORS/SURVEY +% SetESRFAlgeAlignmentError - Function SetESRFAlgeAlignmentError(.. +% testerr - Load lattice +% +% AT/ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/ERRORS/TILT +% compRotCorVsDip - Load lattice +% compRotCorVsDipQuad - Load lattice +% testerr - Load lattice +% testerrRotCorrector - Load lattice +% +% AT/ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/ERRORS/WAVE +% atsetwaveerrors - Function rerr=atsetwaveerrors(.. +% seterrorwave - Nominal lattice +% +% AT/ATMAT/PUBTOOLS/LOCAL_LATTICE_PARAMS +% atmakeXYProjectionEllipse - Gives points to plot the contour ellipses +% machine_at - Machine AT will return the optics of the lattice. Essentially takes what +% plotContours - Plots contours +% +% AT/ATMAT/PUBTOOLS/VACUUMLIFETIME +% VacLifetimeResidualGass - Coloumb scattering and residual gas Bremsstrahlung Cross sections are +% +% AT/ATOCTAVE +% atmexall - Build all AT platform dependent mex-files from C-sources +% atparticle - Particle definition for AT +% bootstrap - Prepare Octave for AT +% endsWith - True if text ends with pattern +% isstring - Determine whether input is string array +% octaveVersion - Get major and minor version numbers +% startsWith - True if text starts with pattern +% +% AT/BUILD/LIB.MACOSX-13-X86_64-CPYTHON-39/MACHINE_DATA +% macosx-13-x86_64-cpython-39/machine_data.australian_synchrotron +% macosx-13-x86_64-cpython-39/machine_data.esrf +% macosx-13-x86_64-cpython-39/machine_data.soleil +% macosx-13-x86_64-cpython-39/machine_data.thomx +% +% AT/DEVELOPER/MATLAB +% atchapters - Describe the User Guide chapters +% atclearmex - Remove all AT mex-files +% atrelease - RELEASE build, test and package a the AT package +% gen_help - Build the "help" infrastructure +% gen_list - Display a list of still non-documented AT functions +% gen_toc - Build the HTML files used by the Matlab help browser +% h1_line - Get the H1 line for a file +% howtochapters - Describe the How to chapters +% setversion - Set the version of AT +% +% AT/DEVELOPER/MATLAB/M +% atelemcreate - Element creation +% atelemfuncs - Element manipulation +% atlatticefuncs - Lattice manipulation +% atlinearoptics - Linear optics +% atloadsave - Loading and Saving lattices +% atphysics - Physics +% atradiation - Radiation +% atsummary - Parameter summary +% howtosummary - How to… +% ugsummary - AT User Guide +% +% AT/DOC +% talk +% +% AT/MACHINE_DATA +% australian_synchrotron +% dba - Create dba lattice +% esrf +% FODO - P1Dr=atdrift('Dr',0.1); +% soleil - Loads SOLEIL lattice +% sp3v81f - All the dipole and quadrupole lengths are effective lengths +% spear2 - Example lattice definition file +% spear2rad - Example lattice definition file with CAVITY and CLASSICAL radiation +% spear2resp - Example SPEAR2 lattice with orbit correctors and BPMS +% spear3 - Load the SPEAR3 lattice structure +% thomx +% +% AT/PYAT/MACHINE_DATA +% australian_synchrotron +% esrf +% soleil +% thomx +% +% AT/PYAT/TEST_MATLAB +% pyproxy - Convert structures to a form accessible in python +% +% AT/UTILS/MPI_SWEEP +% mpi_sweep_octave +% mpi_sweep_octave_example - D%d", i, j); +% +% This file was generated by updateContents.m on 06 Nov 2023 at 14:58:15. + + + diff --git a/ToolboxPackagingConfiguration.prj b/ToolboxPackagingConfiguration.prj index 0ed33d6bd..d43badbf8 100644 --- a/ToolboxPackagingConfiguration.prj +++ b/ToolboxPackagingConfiguration.prj @@ -16,7 +16,7 @@ AT is based on a 6-D modular tracking engine written in C/C++ for efficiency. La View on GitHub ${PROJECT_ROOT}/developer/matlab/AT.png - 2.4 + 2.5 ${PROJECT_ROOT}/Accelerator Toolbox.mltbx @@ -43,6 +43,9 @@ View on GitHub % **/*.bak .* **/.* +_custom_build +build +dist atoctave developer doc @@ -50,6 +53,7 @@ jupyter pyat resources utils +wheelhouse *.md **/*.md **/*.rst @@ -57,11 +61,15 @@ utils **/*.mex* **/*.py docs/_* +docs/common docs/m docs/p docs/images docs/make.bat -docs/Makefile +docs/Makefile +MANIFEST.in +pyproject.toml +setup.cfg true <?xml version="1.0" encoding="utf-8"?> <examples> @@ -81,6 +89,7 @@ docs/Makefile / /developer/matlab + /machine_data/__pycache__ /docs/vendor/bundle/ruby/2.6.0/gems/concurrent-ruby-1.1.9/lib/concurrent-ruby/concurrent/concurrent_ruby.jar @@ -149,7 +158,7 @@ docs/Makefile - /Applications/MATLAB_R2022a.app + /Applications/MATLAB_R2023b.app @@ -168,7 +177,7 @@ docs/Makefile false false false - 12.5.1 + 13.6.1 false true maci64 diff --git a/atintegrators/Contents.m b/atintegrators/Contents.m new file mode 100644 index 000000000..ca44926ff --- /dev/null +++ b/atintegrators/Contents.m @@ -0,0 +1,39 @@ +% ATINTEGRATORS +% See also +% +% Contents file for ATINTEGRATORS and its subfolders. +% +% ATINTEGRATORS +% aperture - Creates a aperture element in old a AT version (Obsolete) +% BndStrMPoleSymplectic4Pass - .m Help file for BndStrMPoleSymplectic4Pass.c +% corrector - Creates a corrector element in old a AT version (Obsolete) +% drift - Creates a drift element in old a AT version (Obsolete) +% DriftPass - - Integrator for Drift spaces +% ExactHamiltonianPass - .m Help file for ExactHamiltonianPass.c +% GWigSymplecticPass - #ok +% GWigSymplecticRadPass - #ok +% hmonitor - Creates a horizontal monitor element in old AT version (Obsolete) +% idtable - (fname, Nslice, filename, Energy, method) +% idtable_global - IDTABLE Creates a RADIA-Map based element +% marker - Creates a marker element in old AT version (Obsolete) +% mChangeRefPass - Change the reference energy by scaling +% mDriftPass - Example of pass method in matlab +% mhdrload_bis - Loads data from an ASCII file containing multiple text +% mIdentityPass - MDRIFTPASS - example of pass method in matlab +% monitor - Creates a monitor element in old AT versions (Obsolete) +% multipole - Creates a thick multipole element in old AT versions (Obsolete) +% passmethodlist - Utility function for MATLAB Compiler +% passmethods - Returns a list of available AT passmethod functions in +% quadrupole - Creates a quadrupole element in old AT version (Obsolete) +% rbend - Creates a rectangular bend in old AT version (Obsolete) +% rbend2 - Creates rectangular bend with dipole fringe field in old AT versions (Obsolete) +% rbend3 - Creates a rectangular bend with different fringe fields at entrance +% rfcavity - Creates a RF cavity in older AT version +% sbend - Creates a sector bend element in old AT versions (Obsolete) +% sextupole - Creates a sextupole element in old AT versions (Obsolete) +% skewquad - Creates a skewquad element (alias to multipole) in old AT version (Obsolete) +% solenoid - Creates a solenoid element in old AT versions (Obsolete) +% vmonitor - Creates a vertical monitor element in old AT version (Obsolete) +% wiggler - (fname, Ltot, Lw, Bmax, Nstep, Nmeth, By, Bx, method,energy) +% +% This file was generated by updateContents.m on 06 Nov 2023 at 14:58:13. diff --git a/atmat/Contents.m b/atmat/Contents.m index adea5f5b9..936fcf359 100644 --- a/atmat/Contents.m +++ b/atmat/Contents.m @@ -1,9 +1,581 @@ % Accelerator Toolbox -% Version 2.4.1 (#667) 05-Oct-2023 -% -% atdiag - Tests AT intallation -% atdisplay - checks the verbosity level in the global variable GLOBVAL -% atmexall - build all AT platform dependent mex-files from C-sources -% atpath - Adds the AT directories to the MATLAB search path -% atroot - returns Accelerator Toolbox root directory -% isOctave - isOctave check if running Octave +% Version 2.5.0 (atcollab) 06-Nov-2023 +% +% Contents file for ATMAT and its subfolders. +% +% ATMAT +% at - Accelerator Toolbox +% atcavityoff - Switches RF cavities off +% atcavityon - ATRADON switches RF cavities on +% atdiag - Tests AT intallation +% atdisplay - Checks the verbosity level in the global variable GLOBVAL +% athelp - Generate the list of Accelerator Toolbox functions +% atm2html - MAKEDOC_HTML - Generate new MML, SOLEIL and AT HTML help files +% atmexall - Build all AT platform dependent mex-files from C-sources +% atpath - Adds the AT directories to the MATLAB search path +% atroot - Returns Accelerator Toolbox root directory +% atupdateContents - Updates Contents.m of AT directories +% getContents - Get the contents of a specified directory +% isOctave - Check if running Octave +% updateContents - Create a Contents.m file including subdirectories +% +% ATMAT/ATDEMOS +% +% ATMAT/ATDEMOS/ATFASTRING +% testatfastring - Demo of using atfastring for fast tracking +% +% ATMAT/ATDEMOS/ATMATCHEXAMPLES/BUMP +% run_BumpFit - Fit a bump using correctors +% +% ATMAT/ATDEMOS/ATMATCHEXAMPLES/EXAMPLEATMATCH +% betx - Get value of betx for Seq(indx) +% bety - Get value of bety for Seq(indx) +% dispx - Get value of horizontal dispersion for Seq(indx) +% getDispersion - Function [dx,dy]=getDispersion(THERING,bpmindx) +% mux +% runtotest_atmatch - Macro match dba test lattice beta functions and dispersion using +% VaryQuadFam +% +% ATMAT/ATDEMOS/ATMATCHEXAMPLES/MATCHCHROMATICITY +% run_matchChromaticity - Match chrmaticity +% +% ATMAT/ATDEMOS/GUI +% atslider - Is an example of a GUI control of multiple parameters in THERING +% demoknob - Illustrates the use of MATLAB GUI controls with AT +% +% ATMAT/ATDEMOS/IDMODELING +% add_ID - Adds IDelem at the beginning and subtracts the length from +% trackWithU35KickMap - Read in ESRF lattice +% +% ATMAT/ATDEMOS/OPTICSANDBEAMSIZES +% latticedemo - Self-running tutorial +% linoptdemo - Script illustrates the use of LINOPT +% ohmienvelopedemo - Illustrates the use of OHMIENVELOPE function +% +% ATMAT/ATDEMOS/RESPONSEMATRIX +% findrespmdemo - Response matrix demo +% +% ATMAT/ATDEMOS/TRACKING +% generateTrackData - Give some initial coordinates. Track through sample lattices +% test_openmp - Test the perfoemance of OpenMP +% testTracking - Test results of tracking against values previously computed +% trackingdemo - Self-running tutorial +% trackMultipleParticles - Time the tracking of multiple particles +% +% ATMAT/ATDEMOS/TRACKWITHIMPEDANCE +% makeBBR - SI units; +% testTrackBBR - Create a fast ring from ESRF lattice +% +% ATMAT/ATGUI +% intelem - Interactive element editor +% intlat - Interactive AT lattice editor +% +% ATMAT/ATMATCH +% atApplyVariation - Applies a series of variations to variables as described in +% atDisplayConstraintsChange - This funciton evaluates the contraints defined in Constraints for lattice +% atDisplayVariableChange - This functions retrives variable Values for two rings to compare +% atEvaluateConstraints - This funciton evaluates the contraints defined in Constraints for lattice +% atGetPenalty +% atGetVariableValue +% atlinconstraint - Generate a constraint on linear optics for atmatch +% atmatch - Function [.. +% atVariableBuilder - AtVarBuilder create a simple variable structure for use with atmatch +% +% ATMAT/ATPHYSICS +% atavedata - Average of optical functions on selected elements +% findrespm - Computes the change in the closed orbit due to parameter perturbations +% findspos - Returns longitudinal positions of accelerator lattice elements +% PhysConstant - Physical constants +% +% ATMAT/ATPHYSICS/COLLECTIVEEFFECTS +% atbeam - Generates a particle distribution according to a sigma matrix +% atsigma - Constructs a beam sigma matrix 2x2 4x4 or 6x6 +% +% ATMAT/ATPHYSICS/LINEAROPTICS +% amat - Find A matrix from one turn map matrix T such that: +% atdampingrates - Find tunes and damping rates from one map matrix with radiation +% atlinopt - Performs 4D linear analysis of the COUPLED lattices +% atlinopt2 - Performs the linear analysis of UNCOUPLED lattices +% atlinopt4 - Performs the 4D linear analysis of COUPLED lattices +% atlinopt6 - Performs linear analysis of the lattice +% beam22 - Computes the beam matrix from the 1-turn transfer matrix +% beam44 - Computes the coupled beam matrices +% find_betaoids - [H1 H2 H3]=find_betaoids(A) +% find_etaoids - Given the normalizing matrix A, we compute the etaoids +% find_inv_G - This function computes the invariants of a one turn map matrix +% find_inv_G_fromA - This function computes the invariant matrices G1,G2,G3 +% findelemm44 - Numerically finds the 4x4 transfer matrix of an element +% findelemm66 - Numerically finds the 6x6 transfer matrix of an element +% findm44 - Numerically finds the 4x4 transfer matrix of an accelerator lattice +% findm66 - Numerically finds the 6x6 transfer matrix of an accelerator lattice +% get_dispersion_from_etaoids - Computes dispersion functions (x,px,y,py) at refpts +% jmat - Compute antisymmetric Matrix [O 1; -1 0] +% linopt - Performs linear analysis of the COUPLED lattices +% mkSRotationMatrix - (PSI) coordinate transformation matrix +% plotbeta - Plots UNCOUPLED! beta-functions +% r_analysis - Return the phase for A standardization +% +% ATMAT/ATPHYSICS/LONGITUDINALDYNAMICS +% atBunchLength - Bunch length due to the potential well effect +% atRFacc - Computes RF acceptance of the ring +% atsetcavity - ATSECAVITY Set the parameters of RF cavities +% atSetCavityPhase - SETCAVITYPHASE Set the TimeLag attribute of RF cavities +% BunchLength - Bunch length due to the potential well effect +% cavityoff - Turns cavities OFF +% cavityon - Turns Cavities ON +% mcf - Momentum compaction factor +% nus - Computes synchrotron tune from RF parameters +% phis - Phase = phis(U0MeV,VrfMV) +% RFacc - Computes the RF acceptance with linear formula +% +% ATMAT/ATPHYSICS/NAFFLIB +% calcnaff - Computes NAFF decomposition for a phase space trajectory +% naff_cc - Compile nafflibrary for Matlab +% naff_example - Example to test naff within matlab +% nafflib - MATLAB to NAFF library +% +% ATMAT/ATPHYSICS/NONLINEARDYNAMICS +% atnuampl - Computes tune shift with amplitude +% computeRDT - Computes Hamiltonian resonance driving terms (RDTs) +% tunespaceplot - Draws a tune diagram +% +% ATMAT/ATPHYSICS/ORBIT +% findorbit - Find the closed orbit +% findorbit4 - Finds closed orbit in the 4-d transverse phase +% findorbit6 - Finds closed orbit in the full 6-d phase space +% findsyncorbit - Finds closed orbit, synchronous with the RF cavity +% plotcod - Closed Orbit Distortion +% xorbit_6 - Private function used by findorbit6 +% xorbit_ct - Private function used by findsyncorbit +% xorbit_dp - Private function used by findorbit4 +% +% ATMAT/ATPHYSICS/PARAMETERSUMMARYFUNCTIONS +% atsummary - Print out various parameters of the current AT lattice +% atx - Computes and displays global information +% RadIntegrals - Calcuate the contribution to the radiation integrals of a Wiggler +% ringpara - Print out various parameters of the current AT lattice +% twissline - Calculates linear optics functions for an UNCOUPLED transport line +% twissring - Calculates linear optics functions for an UNCOUPLED ring +% +% ATMAT/ATPHYSICS/RADIATION +% atdisable_6d - Switches radiation and cavity off +% atenable_6d - Switches RF and radiation on +% atenergy - Gets the lattice energy +% atgetU0 - Computes Energy loss per turn in eV +% atradoff - Obsolete: switches RF and radiation off +% atradon - Obsolete: switches RF and radiation on +% atsetenergy - (ring,Energy) sets the Energy field in all +% attapering - Scale magnet strengths +% check_6d - Check the presence of longitudinal motion in a lattice +% check_radiation - Obsolete: check the radiation state of a ring +% DipoleRadiation - Compute the radiation integrals in dipoles +% ElementRadiation - - Compute the radiation integrals in dipoles +% ElossRadiation - Compute the radiation integrals in EnergyLoss elements +% findelemraddiffm +% findmpoleraddiffmatrix - #ok +% findthickmpoleraddiffm +% findthinmpoleraddiffm +% getclass_6d - Private. Guess class for 6d motion +% ohmienvelope - Calculates equilibrium beam envelope in a +% quantumDiff - Compute the radiation-diffusion matrix +% radiationoff - Turns classical radiation OFF +% radiationon - Turns classical radiation ON +% thickmpoleraddiffm - FINDTHICKMPOLERADDIFFM +% thinmpoleraddiffm - FINDTHINMPOLERADDIFFM +% WigglerRadiation - Compute the radiation integrals in wigglers +% +% ATMAT/ATPHYSICS/TOUSCHEKPIWINSKI +% MomAperture_allRing - All Ring momentum aperture +% momentum_aperture_at - Function [deltamin, deltamax.. +% simpletestToucheckLT - Simple example of use of toucheck lifetime formula: +% TLT_IntPiw - Integral in Piwinski Formula for the Lifetime +% TLT_IntPiw_k - Integral in Piwinski Formula for the Lifetime with u=tan^2(k) +% TouschekPiwinskiLifeTime - Function [Tl,contributionsTL]=TouschekPiwinskiLifeTime(ring,dpp,Ib,...) +% +% ATMAT/ATPHYSICS/TUNEANDCHROMATICITY +% findtune - Get the tune value from turn by turn positions +% fitchrom2 - Fits chromaticity of THERING using 2 sextupole families +% fittune2 - Fits linear tunes of THERING using 2 quadrupole families +% intfft - Calculates the tune from interpolated FFT of the trajectory +% tunechrom - Computes linear tunes and chromaticities +% +% ATMAT/ATPLOT +% atbaseplot - Plots data generated by a user-supplied function +% atplot - Plots optical functions +% atplotsyn - Helper function for ATPLOT +% atreforbit - Keep track of the nominal reference orbit through displaced elements +% xplot - Private function used by atplot and atbaseplot +% +% ATMAT/ATPLOT/PLOTFUNCTIONS +% CurlyH - Function [H,Hv]=CurlyH(RING,dp,ind) +% CurlyHlindata - Function [H,Hv]=CurlyHlindata(lindata) +% plBeamSize - Plot H and V beam size +% plClosedOrbit - Plots H and V 4x4 closed orbit +% plCorrectorStrength - Plot PolynomB +% plEmitContrib - Plot H/rho³ at every dipole +% plenvelope - Plot beam envelope +% plot_betabeat - Function plot_betabeat(THERING_ref,THERING_mod) +% plot_trajectory - Plots particle trajectories +% plotAperture - Plots x and y aperture +% plotB0curlyh - Plot B and H +% plotbetadisp - Function [s,plotdata]=plotbetadisp(ring,dpp,plotfun,varargin) +% plotbetadispcurlyh - Plot beta, dispersion and H +% plotERAperture - Plot RApertures EApertures +% plotRDT +% plotsqrtbetadispcurlyh - Plot sqrt(beta), dispersion and H +% plotWdispP - Plot W functions +% plPolynomBComp - PlotBn coefficient with normalization +% plPolynomBSxtOct - Plots Bn for sextupole and octupole magnets +% plSigmaSigmap - Plots beam sizes and divergences +% pltouschek - Plots Touschek lifetime contribution +% plxi - #ok +% +% ATMAT/ATTESTS +% githubrun - Private. This script runs the AT test suite in a GitHub action. There is +% githubsetup - Private. Setup Matlab for AT tests in GitHib Actions +% pytests - Shared setup for the entire test class +% +% ATMAT/ATTRACK +% atpass - #ok +% linepass - Tracks particles through each element of the cell array LINE +% ringpass - Tracks particles through each element of the cell array RING +% +% ATMAT/ATUTILS +% atoptions - Definition of default parameters +% frequency_control - Private. Handle off-momentum for 6D lattice +% getargs - Process positional arguments from the input arguments +% getdparg - Handle positional dp arguments +% getenvopt - (NAME, DEFAULTVALUE) +% getflag - Check the presence of a flag in an argument list +% getoption - Extract a keyword argument from an argument list +% opticsoptions - (private) extract arguments for atlinopt +% parseargs - Check and expands optional argument lists +% setoption - Set AT preference values +% wrapper6d - Private. Handle off-momentum for 6D lattice +% +% ATMAT/LATTICE +% at2py - ELSTR=AT2PY(ELEM) convert AT element tp pyat +% at2str - Makes the string representation of an AT element +% ataddmpolecomppoly - Adds a multipole component to an existing polynomial, +% ataddmpoleerrors - Ataddrandmpole adds a random multipole component to all elements of type +% atCheckRingProperties - Get the ring properties if existing +% atdivelem - Divide an element into pieces +% atelem - Makes a new AT element structure from another element, +% atfastring - Generate simplified AT structures +% atfitchrom - Fit chromaticites by scaling 2 sextupole families +% atfittune - Fit linear tunes by scaling 2 quadrupole families +% atgetcells - Performs a search on MATLAB cell arrays of structures +% atgetfieldvalues - Retrieves the field values AT cell array of elements +% atGetRingProperties - Get the ring properties +% atguessclass - Tries to determine the class of an element +% atindex - Extracts the information about element families and +% atinsertelems - Insert elements at given locations in a line +% atloadfielderrs - Will load a field error structure into a ring +% atloadlattice - Load a lattice from a file +% atlocateparam - Private function. Locate the RingParam element +% atmaincavities - Get the fundamental mode cavities +% atmakefielderrstruct - MAKERNDFIELDERRS will create a field error data structure +% atparamscan - Private function. Updates the RingParam element +% atparticle - Particle definition for AT +% atreduce - Remove useless elements from an AT structure +% atrotatelattice - Circularly shift the lattice elements +% atsbreak - Insert markers at given s positions in a lattice +% atsetfieldvalues - Sets the field values of MATLAB cell array of structures +% atsetRFCavity - Set the RF Cavity with the passmethod RFCavityPass +% atSetRingProperties - Add or modify properties of the lattice +% atsetshift - Sets the misalignment vectors +% atsettilt - Sets the entrance and exit rotation matrices +% atshiftelem - Set new displacement parameters +% atsimplering - Creates a "simple ring" +% atsplitelem - Creates a line by inserting one or more elements into a base element +% attiltelem - Sets new rotation parameters +% atwritem - Creates a .m file to store an AT structure +% atwritepy - Creates pyAT lattice from a Matlab lattice +% buildlat - Places elements from FAMLIST into cell array THERING +% combinebypassmethod - Combines adjacent elements that have the same specified pass method +% combinelinear45 - Combines adjacent elements that use 4-by-5 PassMethods +% entrancefields - () Return the list of field names affecting the element entrance +% exitfields - () Return the list of field names affecting the element exit +% findcells - Performs a search on MATLAB cell arrays of structures +% findtags - Looks for string matches in 'Tag' field of AT lattice elements +% getcellstruct - Retrieves the field values MATLAB cell array of structures +% insertelem0 - - quick and dirty: +% insertindrift - Inserts one or more elements into a drift element +% isatelem - Tests if an input argument is a valid AT element +% isatlattice - Tests if an input argument is a valid AT lattice +% mergedrift - Removes a lattice element and merges the two adjacent drift spaces +% mvelem - Move an element +% mvfield - Move fields from one structure to another +% rmelem0 - Removes elements of length 0 from the accelerator lattice +% setcellstruct - Sets the field values of MATLAB cell array of structures +% setshift - Sets the misalignment vectors T1, T2 for elements +% settags - Sets the 'Tag' field in AT lattice elements +% settilt - Sets the entrance and exit misalignment matrixes +% splitdrift - Inserts an element into a drift space +% symplectify - Makes a matrix more symplectic +% +% ATMAT/LATTICE/CONVERTERS +% readmad - Reads the file output of MAD commands +% +% ATMAT/LATTICE/CONVERTERS/AT2ELEGANT +% AT_2_Elegant - This functions converts the AT lattice AT_ring in elegant form +% +% ATMAT/LATTICE/CONVERTERS/AT2G4BL +% ATtoG4BL - Function [outtext]=ATtoG4BL(P_0,particle,folder) +% +% ATMAT/LATTICE/CONVERTERS/AT2MAD8 +% AT_2_mad8 - Function [elelat,def,lines]=AT_2_mad8(AT_ring,linename) +% +% ATMAT/LATTICE/CONVERTERS/AT2MADX +% AT_2_madX - Function [elelat,defs,lines]=AT_2_madX(AT_ring,linename) +% +% ATMAT/LATTICE/CONVERTERS/AT2OPA +% AT_2_OPA - Function AT_2_OPA(AT_ring,linename) +% +% ATMAT/LATTICE/CONVERTERS/ELEGANT2AT +% ele2at_run_me - Test_elegant_converter +% elegant2at - Function elegant2at(elegantlattice,E0,outfilename) +% ParseAtributesELEGANT_2_AT - Determines atribute and sets field in sxs{i} structure AT +% +% ATMAT/LATTICE/CONVERTERS/MAD82MADX +% mad8TOmadx - Converts mad8 sequence files to madX +% +% ATMAT/LATTICE/CONVERTERS/MADX2AT +% atfrommadx - Function atfrommadx(seqfilemadX,E0,outfilename) +% buildATLattice - Given a list (cell array) of elements with specified field Spos (center of element (madx default)) in a +% ParseAtributesMADX_2_AT - Determines atribute and sets field in sxs{i} structure AT +% reshapeToCellArray - If CEL_CEL is a cell array of structures and cell arrays it converts it a +% +% ATMAT/LATTICE/CONVERTERS/MADX2AT/EXAMPLES +% convertMADXtoATExample - Simple lattice test (uncomment to run) +% +% ATMAT/LATTICE/CONVERTERS/MADX2G4BL +% madx2g4bl - Function [outtext]=madx2g4bl(P_0,particle,folder) +% +% ATMAT/LATTICE/ELEMENT_CREATION +% ataperture - Creates a aperture element +% atbaselem - Create an AT element structure + various checks +% atcorrector - Creates a drift space element with class 'Corrector' +% atdampMatElem - Creates an element that applies the global damping matrix +% atdrift - Creates a drift space element with Class 'Drift' +% atenergyloss - Creates an energy loss element +% atidtable - Creates an ID element +% atinsertiondevicekickmap - Creates an insertion device kick-map element +% atM66 - Create an element applying an arbitrary 6x6 transfer matrix +% atM66Tijk - ATM66(FAMNAME,M66,Tijk,PASSMETHOD) +% atmarker - Creates a marker space element +% atmonitor - Creates a Beam Position Monitor element with Class 'Monitor' +% atmultipole - Creates a multipole element +% atquadrupole - Creates a quadrupole element with Class 'Quadrupole' +% atQuantDiff - Creates a quantum diffusion element +% atrbend - Creates a rectangular bending magnet element with class 'Bend' +% atrbendtune - Set X0ref and RefDZ for rectangular bending magnets +% atrfcavity - Creates an rfcavity element with Class 'RFCavity' +% atringparam - Creates a RingParameter Element which should go at the beginning of the ring +% atsbend - Creates a sector bending magnet element with class 'Bend' +% atsextupole - Creates a sextupole element with class 'Sextupole' +% atSimpleQuantDiff - SimpleQuantDiff creates a simple quantum difusion element +% atskewquad - Creates a skew quadrupole element with Class 'Multipole' +% atsolenoid - Creates a new solenoid element with Class 'Solenoid' +% atthinmultipole - Creates a thin multipole element +% atvariablemultipole - Creates a variable thin multipole element +% atwiggler - Creates a wiggler +% +% ATMAT/LATTICE/ELEMENT_CREATION/PRIVATE +% decodeatargs - Separates arguments and resources +% +% ATMAT/LATTICE/PARAMGROUP +% atparamgroup - PARAMETER GROUP in AT is a general way +% mkparamgroup - Simplifies creation of AT parameter groups +% restoreparamgroup - Restores the values of multiple physical +% saveparamgroup - Saves the values of multiple physical +% setparamgroup - Modifies a group of parameters +% +% ATMAT/LATTICE/SURVEY +% atgeometry - Computes the 2-D position of all elements (no vertical bend) +% atgeometry3 - Computes the 3-D position of all elements +% +% ATMAT/PUBTOOLS +% atdynap - Compute the dynamic aperture +% atmomap - Find momentum aperture at start of ring +% atsurvey2spos - Returns closest lattics s coordinates to xycoord points +% atundulator - Define undulator model +% atvalue - Extract array from lindata structure +% calc_dppAperture - Calculate the momentum aperture at each location of the ring due to +% calc_Touschek - TauT = calc_Touschek(THERING, Ib) +% calc_TouschekPM - TauT = calc_TouschekPM(TD,dppPM,Trf,Ib,U0,coupling, sigE, emit_x) +% freqsearch - ========================================================================= +% nlchromplot - Example: nlchromplot(esrf,-.04,.04,30,16,1) +% +% ATMAT/PUBTOOLS/APERTURE +% SetPhysicalAperture - Ringapert=SetPhysicalAperture(ring,apertureX,apertureY) +% +% ATMAT/PUBTOOLS/CREATE_ELEMS +% atidtable_dat - Atidtable(FamName, Nslice, filename, Energy, method) +% +% ATMAT/PUBTOOLS/DISTANCE2CURVE +% distance2curve - Gets the minimum distance from a point to a general curvilinear n-dimensional arc +% +% ATMAT/PUBTOOLS/HAISSINSKI +% blength +% fitgaussian - GAUSSIAN_PARAM FITERR GAUSSFIT SIGERROR]= FITGAUSSIAN(DATA,[property_value_pair]); +% plothaissinski - [z lambda sigma mu] = HASSINSKYFIT(SIGMA0, R, L) +% Qval - Gives the unitless Q parameter needed to compute the +% +% ATMAT/PUBTOOLS/LATTICE_TOOLS +% atreadbeta - Reads a BETA file +% atsetglobval - Creates the global variable GLOBVAL and adds Energy +% scalesext - Newring=scalesext(ring,sextfam,scale) +% setsext - Newring=setsext(ring,fam,val); +% setsextall - Newring=setsextall(ring,fam,val); +% sext_sens_scan - Esrf(:) +% +% ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS +% +% ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/CORRECTION +% qemsvd_mod - Function dq=qemsvd_mod(a,b,neig,plot) +% +% ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/CORRECTION/CHROMATICITY +% atmatchchromdelta - Function arcchrom0=atmatchchromdelta(arc,c,sxtfams) +% +% ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/CORRECTION/CORRECTION_CHAIN +% CorrectionChain - Corrected lattice +% DisplayCorrectionEffect - [d0,de,dc]=DisplayCorrectionEffect(.. +% testcorrectionchain - Test errors and correction functions +% +% ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/CORRECTION/DISPERSION +% atcorrectdispersion - Function [.. +% testdispersioncorrection - Test errors and correction functions +% +% ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/CORRECTION/DISPERSIONFREESTEERING +% atdispersionfreesteering - Function [.. +% testdispersionfreesteering - Test errors and correction functions +% +% ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/CORRECTION/ORBIT +% atcorrectorbit +% testorbitbump - Test errors and correction functions +% testorbitcorrection - Test errors and correction functions +% +% ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/CORRECTION/ORBITBUMPS/MATCHING +% BumpAtBPM - Function roff=BumpAtBPM(.. +% BumpAtBPM4D - Function roff=BumpAtBPM(.. +% testorbitbump - Test matching orbit bump +% +% ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/CORRECTION/RDT +% atavedata_mod - ATAVEDATA Average of optical functions on selected elements +% atQuadRDTdispersioncorrection - - Make dispersion correction based on RDTs +% atRDTdispersioncorrection - Makes dispersion correction based on RDTs +% atRDTdispersionmeasuredcorrection - Makes correction of dispersion based on +% atSkewRDTdispersioncorrection - Function [.. +% EquivalentGradientsFromAlignments6D - Estimated normal quad gradients from sext offsets +% qemrdtresp_mod - QEMRDTRESP compute resonance driving terms at BPM locations +% semrdtresp_mod - SEMRDT compute resonance driving terms at BPM locations +% testRDTdispersionfreesteering - Test errors and correction functions +% +% ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/CORRECTION/RESPONSE_MATRIX +% findrespmat - FINDRESPM_mod computes the change in the closed orbit due to parameter perturbations +% getresponsematrices - 1 AT lattice +% gettunechromatlinopt - Gets tunes and chromaticities from atlinopt +% +% ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/CORRECTION/RFCAVITY +% atRFcorrection - Function [.. +% atsetRFCavityErr - ATSETRFCAVITY sets the RF Cavity with the passmethod RFCavityPass +% testsetRFCavityErr - Test errors and correction functions +% +% ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/CORRECTION/TRAJECTORY +% atfirstturntrajectory - Makes first turn correction +% MatchLast2CorForFirstBPM - Takes the last two correctors to match the orbit and angle trajectory at +% Scan2x2DinCOD - [bestinputcoord]=ScanPosAngle(.. +% testorbitaftertrajectory - Test errors and correction functions +% testtrajectorycorrection - Test errors and correction functions +% +% ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/CORRECTION/TUNE +% atmatchtunedelta - Function arcchrom0=atmatchtunedelta(arc,c,quadfams) +% fittunedelta2fam - Rerr=fittunedelta2fam(rerr,r0) +% testfittunedelta2fam - Test errors and correction functions +% +% ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/ERRORS +% AssignFieldErr - Function r=AssignFieldErr(r,refpos,N,rho,BNn,ANn) +% atset_s_shift - Implements DS longitudinal position drift +% atsetbpmerr - Sets the misalignment vectors +% atsettiltdipole - Sets the entrance and exit rotation matrices +% bpm_matrices - Generate transformation matrices for BPM readings +% bpm_process - Compute BPM readings from the closed orbit +% finddispersion6Err - Gets 6D dispersion with bpm reading errors +% findorbit4Err - Gets 4x4 closed orbit with BPM errors +% findorbit6Err - Findorbit6 with bpm reading errors +% findtrajectory6Err - [t 6xNbpm array of trajectory +% setANYshift - Adds to the existing shift errors additional D +% setFieldIntegralError - Function rerr=setFieldIntegralError(r0,rerr,indx,order,Nsigma,sigmaperc) +% setGirderError - Rerr=setGirderError(r,pert,errval,mag_group) +% SetLargeErrorList - Sets given error list +% setTiltAbout - Sets tilt errors +% setTiltGirderAbout - Set Tilt error on a magnet +% setXshift - Set horizontal shifts for a element list +% +% ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/ERRORS/BPMERRORS +% testerr - Load lattice +% +% ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/ERRORS/DELTAS +% testerr - Load lattice +% +% ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/ERRORS/DXDY +% testerr - Load lattice +% +% ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/ERRORS/ERRORDISPLAYFUNCTIONS +% GetMisalignments - This function retrives 3 vectors, for x and y misalignments and tilts +% pltmisalignments - #ok +% +% ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/ERRORS/ERRORSMANIPULATION +% GetExistingErrors - This function retrives 6 vectors, for x, y,s misalignments, +% getMagGroupsFromGirderIndex - Gets magnets on a girder +% getMagGroupsFromMagNum - - Gets magnet from a Magnet group +% setBpmOffsetOnDipoleRef - Set bpm on curve defined by dipole misalignments +% SetExistingError - Function SetExistingError(rerr,magindex,X0,Y0,S0,T0,R0,P0,bpm0) +% SumErrors - Rsum=SumErrors(r1,r2,magindex) +% ThetaPhiGirder - Rtp=ThetaPhiGirder(r,mag_gr) +% UniformGirderErrors - Function ring=UniformGirderErrors(ring) +% UniformMagGroupsErrors - Function ring=UniformMagGroupsErrors(ring) +% +% ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/ERRORS/FIELDINTEGRAL +% testerr - Load lattice +% +% ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/ERRORS/GIRDERS +% testerr - Load lattice +% +% ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/ERRORS/LARGEERRLIST +% testerr - Load lattice +% +% ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/ERRORS/LARGEWAVELIST +% testcor - Load lattice +% +% ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/ERRORS/MULTIPOLES +% testerr - Load lattice +% +% ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/ERRORS/RANDOM +% atsetrandomerrors - Function rerr=atsetrandomerrors(.. +% seterrorrand - Nominal lattice +% +% ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/ERRORS/SURVEY +% SetESRFAlgeAlignmentError - Function SetESRFAlgeAlignmentError(.. +% testerr - Load lattice +% +% ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/ERRORS/TILT +% compRotCorVsDip - Load lattice +% compRotCorVsDipQuad - Load lattice +% testerr - Load lattice +% testerrRotCorrector - Load lattice +% +% ATMAT/PUBTOOLS/LATTICETUNINGFUNCTIONS/ERRORS/WAVE +% atsetwaveerrors - Function rerr=atsetwaveerrors(.. +% seterrorwave - Nominal lattice +% +% ATMAT/PUBTOOLS/LOCAL_LATTICE_PARAMS +% atmakeXYProjectionEllipse - Gives points to plot the contour ellipses +% machine_at - Machine AT will return the optics of the lattice. Essentially takes what +% plotContours - Plots contours +% +% ATMAT/PUBTOOLS/VACUUMLIFETIME +% VacLifetimeResidualGass - Coloumb scattering and residual gas Bremsstrahlung Cross sections are +% +% This file was generated by updateContents.m on 05 Nov 2023 at 22:34:15. diff --git a/atmat/at.m b/atmat/at.m index a8a3453f4..9558ea393 100644 --- a/atmat/at.m +++ b/atmat/at.m @@ -1,5 +1,5 @@ % Accelerator Toolbox -% Version 2.4.1 (#667) 05-Oct-2023 +% Version 2.5.0 (atcollab) 06-Nov-2023 % % The Accelerator Toolbox was originally created by Andrei Terebilo. % Development is now continued by a multi-laboratory collaboration, atcollab diff --git a/atmat/atdemos/Contents.m b/atmat/atdemos/Contents.m index 16f8643ec..f8dccead0 100644 --- a/atmat/atdemos/Contents.m +++ b/atmat/atdemos/Contents.m @@ -1,2 +1,51 @@ -%% -% Help for atdemos \ No newline at end of file +% ATDEMOS +% See also +% +% Contents file for ATDEMOS and its subfolders. +% +% ATDEMOS/ATFASTRING +% testatfastring - Demo of using atfastring for fast tracking +% +% ATDEMOS/ATMATCHEXAMPLES/BUMP +% run_BumpFit - Fit a bump using correctors +% +% ATDEMOS/ATMATCHEXAMPLES/EXAMPLEATMATCH +% betx - Get value of betx for Seq(indx) +% bety - Get value of bety for Seq(indx) +% dispx - Get value of horizontal dispersion for Seq(indx) +% getDispersion - Function [dx,dy]=getDispersion(THERING,bpmindx) +% mux +% runtotest_atmatch - Macro match dba test lattice beta functions and dispersion using +% VaryQuadFam +% +% ATDEMOS/ATMATCHEXAMPLES/MATCHCHROMATICITY +% run_matchChromaticity - Match chrmaticity +% +% ATDEMOS/GUI +% atslider - Is an example of a GUI control of multiple parameters in THERING +% demoknob - Illustrates the use of MATLAB GUI controls with AT +% +% ATDEMOS/IDMODELING +% add_ID - Adds IDelem at the beginning and subtracts the length from +% trackWithU35KickMap - Read in ESRF lattice +% +% ATDEMOS/OPTICSANDBEAMSIZES +% latticedemo - Self-running tutorial +% linoptdemo - Script illustrates the use of LINOPT +% ohmienvelopedemo - Illustrates the use of OHMIENVELOPE function +% +% ATDEMOS/RESPONSEMATRIX +% findrespmdemo - Response matrix demo +% +% ATDEMOS/TRACKING +% generateTrackData - Give some initial coordinates. Track through sample lattices +% test_openmp - Test the perfoemance of OpenMP +% testTracking - Test results of tracking against values previously computed +% trackingdemo - Self-running tutorial +% trackMultipleParticles - Time the tracking of multiple particles +% +% ATDEMOS/TRACKWITHIMPEDANCE +% makeBBR - SI units; +% testTrackBBR - Create a fast ring from ESRF lattice +% +% This file was generated by updateContents.m on 05 Nov 2023 at 22:34:11. diff --git a/atmat/atgui/Contents.m b/atmat/atgui/Contents.m new file mode 100644 index 000000000..3b32bed5d --- /dev/null +++ b/atmat/atgui/Contents.m @@ -0,0 +1,10 @@ +% ATGUI +% See also +% +% Contents file for ATGUI and its subfolders. +% +% ATGUI +% intelem - Interactive element editor +% intlat - Interactive AT lattice editor +% +% This file was generated by updateContents.m on 06 Nov 2023 at 14:58:12. diff --git a/atmat/atm2html.m b/atmat/atm2html.m index a8cb1743b..c955d933a 100644 --- a/atmat/atm2html.m +++ b/atmat/atm2html.m @@ -7,9 +7,11 @@ function atm2html(varargin) % 2. Update history.txt appropriately, including w current version % 3. Update overview.html file with the version/date/link to zip: % edit external/m2html/templates/at/about.html +% 4. Need to install graphviz fro graph dependency +% see: https://graphviz.org/ % -% Written by Laurent S. Nadolski +%% Written by Laurent S. Nadolski Options = {... 'htmldir','doc_html', ... @@ -19,11 +21,11 @@ function atm2html(varargin) 'todo', 'on', ... 'globalHypertextLinks', 'on', ... 'helptocxml', 'on', ... - 'template', 'frame-at'... % template for AT + 'template', 'frame'... % template for AT 'index','menu', ... % this part in mandatory with frame 'global', 'on', ... 'save', 'on', ... - 'download','off', ... + 'download','on', ... 'search', 'off', ... % does not work properly 'verbose', 'on', ... 'syntaxHighlighting', 'on', ... @@ -41,7 +43,7 @@ function atm2html(varargin) cd .. try - if isdir('doc_html') + if isfolder('doc_html') rmdir('doc_html','s'); end catch diff --git a/atmat/atmatch/Contents.m b/atmat/atmatch/Contents.m new file mode 100644 index 000000000..511654ec5 --- /dev/null +++ b/atmat/atmatch/Contents.m @@ -0,0 +1,17 @@ +% ATMATCH +% See also +% +% Contents file for ATMATCH and its subfolders. +% +% ATMATCH +% atApplyVariation - Applies a series of variations to variables as described in +% atDisplayConstraintsChange - This funciton evaluates the contraints defined in Constraints for lattice +% atDisplayVariableChange - This functions retrives variable Values for two rings to compare +% atEvaluateConstraints - This funciton evaluates the contraints defined in Constraints for lattice +% atGetPenalty +% atGetVariableValue +% atlinconstraint - Generate a constraint on linear optics for atmatch +% atmatch - Function [.. +% atVariableBuilder - AtVarBuilder create a simple variable structure for use with atmatch +% +% This file was generated by updateContents.m on 06 Nov 2023 at 14:58:12. diff --git a/atmat/atphysics/CollectiveEffects/Contents.m b/atmat/atphysics/CollectiveEffects/Contents.m new file mode 100644 index 000000000..9d390868d --- /dev/null +++ b/atmat/atphysics/CollectiveEffects/Contents.m @@ -0,0 +1,10 @@ +% COLLECTIVEEFFECTS +% See also +% +% Contents file for COLLECTIVEEFFECTS and its subfolders. +% +% COLLECTIVEEFFECTS +% atbeam - Generates a particle distribution according to a sigma matrix +% atsigma - Constructs a beam sigma matrix 2x2 4x4 or 6x6 +% +% This file was generated by updateContents.m on 06 Nov 2023 at 14:58:12. diff --git a/atmat/atphysics/Contents.m b/atmat/atphysics/Contents.m new file mode 100644 index 000000000..d4244eaa2 --- /dev/null +++ b/atmat/atphysics/Contents.m @@ -0,0 +1,124 @@ +% ATPHYSICS +% See also +% +% Contents file for ATPHYSICS and its subfolders. +% +% ATPHYSICS +% atavedata - Average of optical functions on selected elements +% findrespm - Computes the change in the closed orbit due to parameter perturbations +% findspos - Returns longitudinal positions of accelerator lattice elements +% PhysConstant - Physical constants +% +% ATPHYSICS/COLLECTIVEEFFECTS +% atbeam - Generates a particle distribution according to a sigma matrix +% atsigma - Constructs a beam sigma matrix 2x2 4x4 or 6x6 +% +% ATPHYSICS/LINEAROPTICS +% amat - Find A matrix from one turn map matrix T such that: +% atdampingrates - Find tunes and damping rates from one map matrix with radiation +% atlinopt - Performs 4D linear analysis of the COUPLED lattices +% atlinopt2 - Performs the linear analysis of UNCOUPLED lattices +% atlinopt4 - Performs the 4D linear analysis of COUPLED lattices +% atlinopt6 - Performs linear analysis of the lattice +% beam22 - Computes the beam matrix from the 1-turn transfer matrix +% beam44 - Computes the coupled beam matrices +% find_betaoids - [H1 H2 H3]=find_betaoids(A) +% find_etaoids - Given the normalizing matrix A, we compute the etaoids +% find_inv_G - This function computes the invariants of a one turn map matrix +% find_inv_G_fromA - This function computes the invariant matrices G1,G2,G3 +% findelemm44 - Numerically finds the 4x4 transfer matrix of an element +% findelemm66 - Numerically finds the 6x6 transfer matrix of an element +% findm44 - Numerically finds the 4x4 transfer matrix of an accelerator lattice +% findm66 - Numerically finds the 6x6 transfer matrix of an accelerator lattice +% get_dispersion_from_etaoids - Computes dispersion functions (x,px,y,py) at refpts +% jmat - Compute antisymmetric Matrix [O 1; -1 0] +% linopt - Performs linear analysis of the COUPLED lattices +% mkSRotationMatrix - (PSI) coordinate transformation matrix +% plotbeta - Plots UNCOUPLED! beta-functions +% r_analysis - Return the phase for A standardization +% +% ATPHYSICS/LONGITUDINALDYNAMICS +% atBunchLength - Bunch length due to the potential well effect +% atRFacc - Computes RF acceptance of the ring +% atsetcavity - ATSECAVITY Set the parameters of RF cavities +% atSetCavityPhase - SETCAVITYPHASE Set the TimeLag attribute of RF cavities +% BunchLength - Bunch length due to the potential well effect +% cavityoff - Turns cavities OFF +% cavityon - Turns Cavities ON +% mcf - Momentum compaction factor +% nus - Computes synchrotron tune from RF parameters +% phis - Phase = phis(U0MeV,VrfMV) +% RFacc - Computes the RF acceptance with linear formula +% +% ATPHYSICS/NAFFLIB +% calcnaff - Computes NAFF decomposition for a phase space trajectory +% naff_cc - Compile nafflibrary for Matlab +% naff_example - Example to test naff within matlab +% nafflib - MATLAB to NAFF library +% +% ATPHYSICS/NONLINEARDYNAMICS +% atnuampl - Computes tune shift with amplitude +% computeRDT - Computes Hamiltonian resonance driving terms (RDTs) +% tunespaceplot - Draws a tune diagram +% +% ATPHYSICS/ORBIT +% findorbit - Find the closed orbit +% findorbit4 - Finds closed orbit in the 4-d transverse phase +% findorbit6 - Finds closed orbit in the full 6-d phase space +% findsyncorbit - Finds closed orbit, synchronous with the RF cavity +% plotcod - Closed Orbit Distortion +% xorbit_6 - Private function used by findorbit6 +% xorbit_ct - Private function used by findsyncorbit +% xorbit_dp - Private function used by findorbit4 +% +% ATPHYSICS/PARAMETERSUMMARYFUNCTIONS +% atsummary - Print out various parameters of the current AT lattice +% atx - Computes and displays global information +% RadIntegrals - Calcuate the contribution to the radiation integrals of a Wiggler +% ringpara - Print out various parameters of the current AT lattice +% twissline - Calculates linear optics functions for an UNCOUPLED transport line +% twissring - Calculates linear optics functions for an UNCOUPLED ring +% +% ATPHYSICS/RADIATION +% atdisable_6d - Switches radiation and cavity off +% atenable_6d - Switches RF and radiation on +% atenergy - Gets the lattice energy +% atgetU0 - Computes Energy loss per turn in eV +% atradoff - Obsolete: switches RF and radiation off +% atradon - Obsolete: switches RF and radiation on +% atsetenergy - (ring,Energy) sets the Energy field in all +% attapering - Scale magnet strengths +% check_6d - Check the presence of longitudinal motion in a lattice +% check_radiation - Obsolete: check the radiation state of a ring +% DipoleRadiation - Compute the radiation integrals in dipoles +% ElementRadiation - - Compute the radiation integrals in dipoles +% ElossRadiation - Compute the radiation integrals in EnergyLoss elements +% findelemraddiffm +% findmpoleraddiffmatrix - #ok +% findthickmpoleraddiffm +% findthinmpoleraddiffm +% getclass_6d - Private. Guess class for 6d motion +% ohmienvelope - Calculates equilibrium beam envelope in a +% quantumDiff - Compute the radiation-diffusion matrix +% radiationoff - Turns classical radiation OFF +% radiationon - Turns classical radiation ON +% thickmpoleraddiffm - FINDTHICKMPOLERADDIFFM +% thinmpoleraddiffm - FINDTHINMPOLERADDIFFM +% WigglerRadiation - Compute the radiation integrals in wigglers +% +% ATPHYSICS/TOUSCHEKPIWINSKI +% MomAperture_allRing - All Ring momentum aperture +% momentum_aperture_at - Function [deltamin, deltamax.. +% simpletestToucheckLT - Simple example of use of toucheck lifetime formula: +% TLT_IntPiw - Integral in Piwinski Formula for the Lifetime +% TLT_IntPiw_k - Integral in Piwinski Formula for the Lifetime with u=tan^2(k) +% TouschekPiwinskiLifeTime - Function [Tl,contributionsTL]=TouschekPiwinskiLifeTime(ring,dpp,Ib,...) +% +% ATPHYSICS/TUNEANDCHROMATICITY +% findtune - Get the tune value from turn by turn positions +% fitchrom2 - Fits chromaticity of THERING using 2 sextupole families +% fittune2 - Fits linear tunes of THERING using 2 quadrupole families +% intfft - Calculates the tune from interpolated FFT of the trajectory +% tunechrom - Computes linear tunes and chromaticities +% +% This file was generated by updateContents.m on 06 Nov 2023 at 14:58:12. diff --git a/atmat/atphysics/LinearOptics/Contents.m b/atmat/atphysics/LinearOptics/Contents.m new file mode 100644 index 000000000..62ffa7ff2 --- /dev/null +++ b/atmat/atphysics/LinearOptics/Contents.m @@ -0,0 +1,30 @@ +% LINEAROPTICS +% See also +% +% Contents file for LINEAROPTICS and its subfolders. +% +% LINEAROPTICS +% amat - Find A matrix from one turn map matrix T such that: +% atdampingrates - Find tunes and damping rates from one map matrix with radiation +% atlinopt - Performs 4D linear analysis of the COUPLED lattices +% atlinopt2 - Performs the linear analysis of UNCOUPLED lattices +% atlinopt4 - Performs the 4D linear analysis of COUPLED lattices +% atlinopt6 - Performs linear analysis of the lattice +% beam22 - Computes the beam matrix from the 1-turn transfer matrix +% beam44 - Computes the coupled beam matrices +% find_betaoids - [H1 H2 H3]=find_betaoids(A) +% find_etaoids - Given the normalizing matrix A, we compute the etaoids +% find_inv_G - This function computes the invariants of a one turn map matrix +% find_inv_G_fromA - This function computes the invariant matrices G1,G2,G3 +% findelemm44 - Numerically finds the 4x4 transfer matrix of an element +% findelemm66 - Numerically finds the 6x6 transfer matrix of an element +% findm44 - Numerically finds the 4x4 transfer matrix of an accelerator lattice +% findm66 - Numerically finds the 6x6 transfer matrix of an accelerator lattice +% get_dispersion_from_etaoids - Computes dispersion functions (x,px,y,py) at refpts +% jmat - Compute antisymmetric Matrix [O 1; -1 0] +% linopt - Performs linear analysis of the COUPLED lattices +% mkSRotationMatrix - (PSI) coordinate transformation matrix +% plotbeta - Plots UNCOUPLED! beta-functions +% r_analysis - Return the phase for A standardization +% +% This file was generated by updateContents.m on 06 Nov 2023 at 14:58:12. diff --git a/atmat/atphysics/LongitudinalDynamics/Contents.m b/atmat/atphysics/LongitudinalDynamics/Contents.m new file mode 100644 index 000000000..1d679ca3c --- /dev/null +++ b/atmat/atphysics/LongitudinalDynamics/Contents.m @@ -0,0 +1,19 @@ +% LONGITUDINALDYNAMICS +% See also +% +% Contents file for LONGITUDINALDYNAMICS and its subfolders. +% +% LONGITUDINALDYNAMICS +% atBunchLength - Bunch length due to the potential well effect +% atRFacc - Computes RF acceptance of the ring +% atsetcavity - ATSECAVITY Set the parameters of RF cavities +% atSetCavityPhase - SETCAVITYPHASE Set the TimeLag attribute of RF cavities +% BunchLength - Bunch length due to the potential well effect +% cavityoff - Turns cavities OFF +% cavityon - Turns Cavities ON +% mcf - Momentum compaction factor +% nus - Computes synchrotron tune from RF parameters +% phis - Phase = phis(U0MeV,VrfMV) +% RFacc - Computes the RF acceptance with linear formula +% +% This file was generated by updateContents.m on 06 Nov 2023 at 14:58:12. diff --git a/atmat/atphysics/NonLinearDynamics/Contents.m b/atmat/atphysics/NonLinearDynamics/Contents.m new file mode 100644 index 000000000..6595eed51 --- /dev/null +++ b/atmat/atphysics/NonLinearDynamics/Contents.m @@ -0,0 +1,11 @@ +% NONLINEARDYNAMICS +% See also +% +% Contents file for NONLINEARDYNAMICS and its subfolders. +% +% NONLINEARDYNAMICS +% atnuampl - Computes tune shift with amplitude +% computeRDT - Computes Hamiltonian resonance driving terms (RDTs) +% tunespaceplot - Draws a tune diagram +% +% This file was generated by updateContents.m on 06 Nov 2023 at 14:58:12. diff --git a/atmat/atphysics/Orbit/Contents.m b/atmat/atphysics/Orbit/Contents.m new file mode 100644 index 000000000..abf06bebc --- /dev/null +++ b/atmat/atphysics/Orbit/Contents.m @@ -0,0 +1,16 @@ +% ORBIT +% See also +% +% Contents file for ORBIT and its subfolders. +% +% ORBIT +% findorbit - Find the closed orbit +% findorbit4 - Finds closed orbit in the 4-d transverse phase +% findorbit6 - Finds closed orbit in the full 6-d phase space +% findsyncorbit - Finds closed orbit, synchronous with the RF cavity +% plotcod - Closed Orbit Distortion +% xorbit_6 - Private function used by findorbit6 +% xorbit_ct - Private function used by findsyncorbit +% xorbit_dp - Private function used by findorbit4 +% +% This file was generated by updateContents.m on 06 Nov 2023 at 14:58:12. diff --git a/atmat/atphysics/ParameterSummaryFunctions/Contents.m b/atmat/atphysics/ParameterSummaryFunctions/Contents.m new file mode 100644 index 000000000..a32b177a6 --- /dev/null +++ b/atmat/atphysics/ParameterSummaryFunctions/Contents.m @@ -0,0 +1,14 @@ +% PARAMETERSUMMARYFUNCTIONS +% See also +% +% Contents file for PARAMETERSUMMARYFUNCTIONS and its subfolders. +% +% PARAMETERSUMMARYFUNCTIONS +% atsummary - Print out various parameters of the current AT lattice +% atx - Computes and displays global information +% RadIntegrals - Calcuate the contribution to the radiation integrals of a Wiggler +% ringpara - Print out various parameters of the current AT lattice +% twissline - Calculates linear optics functions for an UNCOUPLED transport line +% twissring - Calculates linear optics functions for an UNCOUPLED ring +% +% This file was generated by updateContents.m on 06 Nov 2023 at 14:58:12. diff --git a/atmat/atphysics/Radiation/Contents.m b/atmat/atphysics/Radiation/Contents.m new file mode 100644 index 000000000..2fb0264b4 --- /dev/null +++ b/atmat/atphysics/Radiation/Contents.m @@ -0,0 +1,33 @@ +% RADIATION +% See also +% +% Contents file for RADIATION and its subfolders. +% +% RADIATION +% atdisable_6d - Switches radiation and cavity off +% atenable_6d - Switches RF and radiation on +% atenergy - Gets the lattice energy +% atgetU0 - Computes Energy loss per turn in eV +% atradoff - Obsolete: switches RF and radiation off +% atradon - Obsolete: switches RF and radiation on +% atsetenergy - (ring,Energy) sets the Energy field in all +% attapering - Scale magnet strengths +% check_6d - Check the presence of longitudinal motion in a lattice +% check_radiation - Obsolete: check the radiation state of a ring +% DipoleRadiation - Compute the radiation integrals in dipoles +% ElementRadiation - - Compute the radiation integrals in dipoles +% ElossRadiation - Compute the radiation integrals in EnergyLoss elements +% findelemraddiffm +% findmpoleraddiffmatrix - #ok +% findthickmpoleraddiffm +% findthinmpoleraddiffm +% getclass_6d - Private. Guess class for 6d motion +% ohmienvelope - Calculates equilibrium beam envelope in a +% quantumDiff - Compute the radiation-diffusion matrix +% radiationoff - Turns classical radiation OFF +% radiationon - Turns classical radiation ON +% thickmpoleraddiffm - FINDTHICKMPOLERADDIFFM +% thinmpoleraddiffm - FINDTHINMPOLERADDIFFM +% WigglerRadiation - Compute the radiation integrals in wigglers +% +% This file was generated by updateContents.m on 06 Nov 2023 at 14:58:12. diff --git a/atmat/atphysics/TouschekPiwinski/Contents.m b/atmat/atphysics/TouschekPiwinski/Contents.m new file mode 100644 index 000000000..51f3332cc --- /dev/null +++ b/atmat/atphysics/TouschekPiwinski/Contents.m @@ -0,0 +1,14 @@ +% TOUSCHEKPIWINSKI +% See also +% +% Contents file for TOUSCHEKPIWINSKI and its subfolders. +% +% TOUSCHEKPIWINSKI +% MomAperture_allRing - All Ring momentum aperture +% momentum_aperture_at - Function [deltamin, deltamax.. +% simpletestToucheckLT - Simple example of use of toucheck lifetime formula: +% TLT_IntPiw - Integral in Piwinski Formula for the Lifetime +% TLT_IntPiw_k - Integral in Piwinski Formula for the Lifetime with u=tan^2(k) +% TouschekPiwinskiLifeTime - Function [Tl,contributionsTL]=TouschekPiwinskiLifeTime(ring,dpp,Ib,...) +% +% This file was generated by updateContents.m on 06 Nov 2023 at 14:58:12. diff --git a/atmat/atphysics/TuneAndChromaticity/Contents.m b/atmat/atphysics/TuneAndChromaticity/Contents.m new file mode 100644 index 000000000..b28c32b45 --- /dev/null +++ b/atmat/atphysics/TuneAndChromaticity/Contents.m @@ -0,0 +1,13 @@ +% TUNEANDCHROMATICITY +% See also +% +% Contents file for TUNEANDCHROMATICITY and its subfolders. +% +% TUNEANDCHROMATICITY +% findtune - Get the tune value from turn by turn positions +% fitchrom2 - Fits chromaticity of THERING using 2 sextupole families +% fittune2 - Fits linear tunes of THERING using 2 quadrupole families +% intfft - Calculates the tune from interpolated FFT of the trajectory +% tunechrom - Computes linear tunes and chromaticities +% +% This file was generated by updateContents.m on 06 Nov 2023 at 14:58:12. diff --git a/atmat/atphysics/nafflib/Contents.m b/atmat/atphysics/nafflib/Contents.m index c9fdf8b51..9aabdfe69 100644 --- a/atmat/atphysics/nafflib/Contents.m +++ b/atmat/atphysics/nafflib/Contents.m @@ -1,10 +1,12 @@ -% NAFF toolbox -% Version 2.0 SOLEIL version 2007 -% Copyright J. Laskar, IMCCE -% Astronomie et Systemes dynamiques -% This version can be freely used for AT distribution -% Reference papers -% J. Laskar, Icarus 88, 266-291, 1990 -% J. Laskar, Introduction to Frequency Map Analysis in the proceedings -% of 3DHAM95 NATO Advanced institute, S?Agaro, June 1995, -% C. Simo ? ed., 1999 +% NAFFLIB +% See also +% +% Contents file for NAFFLIB and its subfolders. +% +% NAFFLIB +% calcnaff - Computes NAFF decomposition for a phase space trajectory +% naff_cc - Compile nafflibrary for Matlab +% naff_example - Example to test naff within matlab +% nafflib - MATLAB to NAFF library +% +% This file was generated by updateContents.m on 05 Nov 2023 at 22:34:12. diff --git a/atmat/atphysics/nafflib/README b/atmat/atphysics/nafflib/README index f89014e1a..cff08d4d1 100644 --- a/atmat/atphysics/nafflib/README +++ b/atmat/atphysics/nafflib/README @@ -1,3 +1,13 @@ +Version 2.0 SOLEIL version 2007 +% Copyright J. Laskar, IMCCE +% Astronomie et Systemes dynamiques +% This version can be freely used for AT distribution +% Reference papers +% J. Laskar, Icarus 88, 266-291, 1990 +% J. Laskar, Introduction to Frequency Map Analysis in the proceedings +% of 3DHAM95 NATO Advanced institute, S?Agaro, June 1995, +% C. Simo ? ed., 1999 + 26/08/03 L. Nadolski, SOLEIL 2017-02-25 Updated with prerelease of AT 2.0 diff --git a/atmat/atplot/Contents.m b/atmat/atplot/Contents.m new file mode 100644 index 000000000..93bf8435e --- /dev/null +++ b/atmat/atplot/Contents.m @@ -0,0 +1,37 @@ +% ATPLOT +% See also +% +% Contents file for ATPLOT and its subfolders. +% +% ATPLOT +% atbaseplot - Plots data generated by a user-supplied function +% atplot - Plots optical functions +% atplotsyn - Helper function for ATPLOT +% atreforbit - Keep track of the nominal reference orbit through displaced elements +% xplot - Private function used by atplot and atbaseplot +% +% ATPLOT/PLOTFUNCTIONS +% CurlyH - Function [H,Hv]=CurlyH(RING,dp,ind) +% CurlyHlindata - Function [H,Hv]=CurlyHlindata(lindata) +% plBeamSize - Plot H and V beam size +% plClosedOrbit - Plots H and V 4x4 closed orbit +% plCorrectorStrength - Plot PolynomB +% plEmitContrib - Plot H/rho³ at every dipole +% plenvelope - Plot beam envelope +% plot_betabeat - Function plot_betabeat(THERING_ref,THERING_mod) +% plot_trajectory - Plots particle trajectories +% plotAperture - Plots x and y aperture +% plotB0curlyh - Plot B and H +% plotbetadisp - Function [s,plotdata]=plotbetadisp(ring,dpp,plotfun,varargin) +% plotbetadispcurlyh - Plot beta, dispersion and H +% plotERAperture - Plot RApertures EApertures +% plotRDT +% plotsqrtbetadispcurlyh - Plot sqrt(beta), dispersion and H +% plotWdispP - Plot W functions +% plPolynomBComp - PlotBn coefficient with normalization +% plPolynomBSxtOct - Plots Bn for sextupole and octupole magnets +% plSigmaSigmap - Plots beam sizes and divergences +% pltouschek - Plots Touschek lifetime contribution +% plxi - #ok +% +% This file was generated by updateContents.m on 06 Nov 2023 at 14:58:12. diff --git a/atmat/atplot/plotfunctions/Contents.m b/atmat/atplot/plotfunctions/Contents.m new file mode 100644 index 000000000..c03a79e01 --- /dev/null +++ b/atmat/atplot/plotfunctions/Contents.m @@ -0,0 +1,30 @@ +% PLOTFUNCTIONS +% See also +% +% Contents file for PLOTFUNCTIONS and its subfolders. +% +% PLOTFUNCTIONS +% CurlyH - Function [H,Hv]=CurlyH(RING,dp,ind) +% CurlyHlindata - Function [H,Hv]=CurlyHlindata(lindata) +% plBeamSize - Plot H and V beam size +% plClosedOrbit - Plots H and V 4x4 closed orbit +% plCorrectorStrength - Plot PolynomB +% plEmitContrib - Plot H/rho³ at every dipole +% plenvelope - Plot beam envelope +% plot_betabeat - Function plot_betabeat(THERING_ref,THERING_mod) +% plot_trajectory - Plots particle trajectories +% plotAperture - Plots x and y aperture +% plotB0curlyh - Plot B and H +% plotbetadisp - Function [s,plotdata]=plotbetadisp(ring,dpp,plotfun,varargin) +% plotbetadispcurlyh - Plot beta, dispersion and H +% plotERAperture - Plot RApertures EApertures +% plotRDT +% plotsqrtbetadispcurlyh - Plot sqrt(beta), dispersion and H +% plotWdispP - Plot W functions +% plPolynomBComp - PlotBn coefficient with normalization +% plPolynomBSxtOct - Plots Bn for sextupole and octupole magnets +% plSigmaSigmap - Plots beam sizes and divergences +% pltouschek - Plots Touschek lifetime contribution +% plxi - #ok +% +% This file was generated by updateContents.m on 06 Nov 2023 at 14:58:12. diff --git a/atmat/attrack/Contents.m b/atmat/attrack/Contents.m new file mode 100644 index 000000000..18559d05c --- /dev/null +++ b/atmat/attrack/Contents.m @@ -0,0 +1,11 @@ +% ATTRACK +% See also +% +% Contents file for ATTRACK and its subfolders. +% +% ATTRACK +% atpass - #ok +% linepass - Tracks particles through each element of the cell array LINE +% ringpass - Tracks particles through each element of the cell array RING +% +% This file was generated by updateContents.m on 06 Nov 2023 at 14:58:12. diff --git a/atmat/atupdateContents.m b/atmat/atupdateContents.m index a585ad983..f383ef325 100644 --- a/atmat/atupdateContents.m +++ b/atmat/atupdateContents.m @@ -5,22 +5,40 @@ ATROOT = fileparts(atroot); OLDDIR = pwd; -%Selects directories where to creat a Contents +%Selects directories where to create a Contents listOfFolderNames={ fullfile(ATROOT,'atmat', 'atdemos'), ... fullfile(ATROOT,'atmat', 'atgui'), ... fullfile(ATROOT,'atmat', 'atmatch'), ... + fullfile(ATROOT,'atmat', 'atutils'), ... fullfile(ATROOT,'atmat', 'atphysics'), ... + fullfile(ATROOT,'atmat', 'atphysics', 'CollectiveEffects'), ... + fullfile(ATROOT,'atmat', 'atphysics', 'LinearOptics'), ... + fullfile(ATROOT,'atmat', 'atphysics', 'LongitudinalDynamics'), ... + fullfile(ATROOT,'atmat', 'atphysics', 'Orbit'), ... + fullfile(ATROOT,'atmat', 'atphysics', 'ParameterSummaryFunctions'), ... + fullfile(ATROOT,'atmat', 'atphysics', 'TouschekPiwinski'), ... + fullfile(ATROOT,'atmat', 'atphysics', 'TuneAndChromaticity'), ... + fullfile(ATROOT,'atmat', 'atphysics', 'Radiation'), ... + fullfile(ATROOT,'atmat', 'atphysics', 'NonLinearDynamics'), ... + fullfile(ATROOT,'atmat', 'atphysics', 'nafflib'), ... fullfile(ATROOT,'atmat', 'atplot'), ... + fullfile(ATROOT,'atmat', 'atplot', 'plotfunctions'), ... fullfile(ATROOT,'atmat', 'attrack'), ... - fullfile(ATROOT,'atmat', 'pubtools'), ... fullfile(ATROOT,'atmat', 'lattice'), ... fullfile(ATROOT,'atmat', 'lattice', 'Converters'), ... fullfile(ATROOT,'atmat', 'lattice','element_creation'), ... + fullfile(ATROOT,'atmat', 'lattice','survey'), ... fullfile(ATROOT,'machine_data'), ... fullfile(ATROOT,'atintegrators'), ... fullfile(ATROOT,'atmat', 'pubtools'), ... fullfile(ATROOT,'atmat', 'pubtools', 'LatticeTuningFunctions'), ... + fullfile(ATROOT,'atmat', 'pubtools', 'VacuumLifetime'), ... + fullfile(ATROOT,'atmat', 'pubtools', 'distance2curve'), ... + fullfile(ATROOT,'atmat', 'pubtools', 'haissinski'), ... + fullfile(ATROOT,'atmat', 'pubtools', 'lattice_tools'), ... + fullfile(ATROOT,'atmat', 'pubtools', 'local_lattice_params'), ... + fullfile(ATROOT,'atmat', 'pubtools', 'create_elems'), ... fullfile(ATROOT,'atmat'), ... fullfile(ATROOT), ... }; @@ -31,6 +49,13 @@ updateContents(cd); end +myheaderstr = '% '; +dlmwrite('Contents.m',[myheaderstr 13 10 fileread('Contents.m')],'delimiter',''); +myheaderstr = '% Version 2.5.0 (atcollab) 05-Nov-2023'; +dlmwrite('Contents.m',[myheaderstr 13 10 fileread('Contents.m')],'delimiter',''); +myheaderstr = '% Accelerator Toolbox'; +dlmwrite('Contents.m',[myheaderstr 13 10 fileread('Contents.m')],'delimiter',''); + cd(OLDDIR); clear OLDIR ATROOT \ No newline at end of file diff --git a/atmat/atutils/Contents.m b/atmat/atutils/Contents.m new file mode 100644 index 000000000..3fbea992f --- /dev/null +++ b/atmat/atutils/Contents.m @@ -0,0 +1,19 @@ +% ATUTILS +% See also +% +% Contents file for ATUTILS and its subfolders. +% +% ATUTILS +% atoptions - Definition of default parameters +% frequency_control - Private. Handle off-momentum for 6D lattice +% getargs - Process positional arguments from the input arguments +% getdparg - Handle positional dp arguments +% getenvopt - (NAME, DEFAULTVALUE) +% getflag - Check the presence of a flag in an argument list +% getoption - Extract a keyword argument from an argument list +% opticsoptions - (private) extract arguments for atlinopt +% parseargs - Check and expands optional argument lists +% setoption - Set AT preference values +% wrapper6d - Private. Handle off-momentum for 6D lattice +% +% This file was generated by updateContents.m on 06 Nov 2023 at 14:58:12. diff --git a/atmat/lattice/Contents.m b/atmat/lattice/Contents.m new file mode 100644 index 000000000..24132b4b7 --- /dev/null +++ b/atmat/lattice/Contents.m @@ -0,0 +1,148 @@ +% LATTICE +% See also +% +% Contents file for LATTICE and its subfolders. +% +% LATTICE +% at2py - ELSTR=AT2PY(ELEM) convert AT element tp pyat +% at2str - Makes the string representation of an AT element +% ataddmpolecomppoly - Adds a multipole component to an existing polynomial, +% ataddmpoleerrors - Ataddrandmpole adds a random multipole component to all elements of type +% atCheckRingProperties - Get the ring properties if existing +% atdivelem - Divide an element into pieces +% atelem - Makes a new AT element structure from another element, +% atfastring - Generate simplified AT structures +% atfitchrom - Fit chromaticites by scaling 2 sextupole families +% atfittune - Fit linear tunes by scaling 2 quadrupole families +% atgetcells - Performs a search on MATLAB cell arrays of structures +% atgetfieldvalues - Retrieves the field values AT cell array of elements +% atGetRingProperties - Get the ring properties +% atguessclass - Tries to determine the class of an element +% atindex - Extracts the information about element families and +% atinsertelems - Insert elements at given locations in a line +% atloadfielderrs - Will load a field error structure into a ring +% atloadlattice - Load a lattice from a file +% atlocateparam - Private function. Locate the RingParam element +% atmaincavities - Get the fundamental mode cavities +% atmakefielderrstruct - MAKERNDFIELDERRS will create a field error data structure +% atparamscan - Private function. Updates the RingParam element +% atparticle - Particle definition for AT +% atreduce - Remove useless elements from an AT structure +% atrotatelattice - Circularly shift the lattice elements +% atsbreak - Insert markers at given s positions in a lattice +% atsetfieldvalues - Sets the field values of MATLAB cell array of structures +% atsetRFCavity - Set the RF Cavity with the passmethod RFCavityPass +% atSetRingProperties - Add or modify properties of the lattice +% atsetshift - Sets the misalignment vectors +% atsettilt - Sets the entrance and exit rotation matrices +% atshiftelem - Set new displacement parameters +% atsimplering - Creates a "simple ring" +% atsplitelem - Creates a line by inserting one or more elements into a base element +% attiltelem - Sets new rotation parameters +% atwritem - Creates a .m file to store an AT structure +% atwritepy - Creates pyAT lattice from a Matlab lattice +% buildlat - Places elements from FAMLIST into cell array THERING +% combinebypassmethod - Combines adjacent elements that have the same specified pass method +% combinelinear45 - Combines adjacent elements that use 4-by-5 PassMethods +% entrancefields - () Return the list of field names affecting the element entrance +% exitfields - () Return the list of field names affecting the element exit +% findcells - Performs a search on MATLAB cell arrays of structures +% findtags - Looks for string matches in 'Tag' field of AT lattice elements +% getcellstruct - Retrieves the field values MATLAB cell array of structures +% insertelem0 - - quick and dirty: +% insertindrift - Inserts one or more elements into a drift element +% isatelem - Tests if an input argument is a valid AT element +% isatlattice - Tests if an input argument is a valid AT lattice +% mergedrift - Removes a lattice element and merges the two adjacent drift spaces +% mvelem - Move an element +% mvfield - Move fields from one structure to another +% rmelem0 - Removes elements of length 0 from the accelerator lattice +% setcellstruct - Sets the field values of MATLAB cell array of structures +% setshift - Sets the misalignment vectors T1, T2 for elements +% settags - Sets the 'Tag' field in AT lattice elements +% settilt - Sets the entrance and exit misalignment matrixes +% splitdrift - Inserts an element into a drift space +% symplectify - Makes a matrix more symplectic +% +% LATTICE/CONVERTERS +% readmad - Reads the file output of MAD commands +% +% LATTICE/CONVERTERS/AT2ELEGANT +% AT_2_Elegant - This functions converts the AT lattice AT_ring in elegant form +% +% LATTICE/CONVERTERS/AT2G4BL +% ATtoG4BL - Function [outtext]=ATtoG4BL(P_0,particle,folder) +% +% LATTICE/CONVERTERS/AT2MAD8 +% AT_2_mad8 - Function [elelat,def,lines]=AT_2_mad8(AT_ring,linename) +% +% LATTICE/CONVERTERS/AT2MADX +% AT_2_madX - Function [elelat,defs,lines]=AT_2_madX(AT_ring,linename) +% +% LATTICE/CONVERTERS/AT2OPA +% AT_2_OPA - Function AT_2_OPA(AT_ring,linename) +% +% LATTICE/CONVERTERS/ELEGANT2AT +% ele2at_run_me - Test_elegant_converter +% elegant2at - Function elegant2at(elegantlattice,E0,outfilename) +% ParseAtributesELEGANT_2_AT - Determines atribute and sets field in sxs{i} structure AT +% +% LATTICE/CONVERTERS/MAD82MADX +% mad8TOmadx - Converts mad8 sequence files to madX +% +% LATTICE/CONVERTERS/MADX2AT +% atfrommadx - Function atfrommadx(seqfilemadX,E0,outfilename) +% buildATLattice - Given a list (cell array) of elements with specified field Spos (center of element (madx default)) in a +% ParseAtributesMADX_2_AT - Determines atribute and sets field in sxs{i} structure AT +% reshapeToCellArray - If CEL_CEL is a cell array of structures and cell arrays it converts it a +% +% LATTICE/CONVERTERS/MADX2AT/EXAMPLES +% convertMADXtoATExample - Simple lattice test (uncomment to run) +% +% LATTICE/CONVERTERS/MADX2G4BL +% madx2g4bl - Function [outtext]=madx2g4bl(P_0,particle,folder) +% +% LATTICE/ELEMENT_CREATION +% ataperture - Creates a aperture element +% atbaselem - Create an AT element structure + various checks +% atcorrector - Creates a drift space element with class 'Corrector' +% atdampMatElem - Creates an element that applies the global damping matrix +% atdrift - Creates a drift space element with Class 'Drift' +% atenergyloss - Creates an energy loss element +% atidtable - Creates an ID element +% atinsertiondevicekickmap - Creates an insertion device kick-map element +% atM66 - Create an element applying an arbitrary 6x6 transfer matrix +% atM66Tijk - ATM66(FAMNAME,M66,Tijk,PASSMETHOD) +% atmarker - Creates a marker space element +% atmonitor - Creates a Beam Position Monitor element with Class 'Monitor' +% atmultipole - Creates a multipole element +% atquadrupole - Creates a quadrupole element with Class 'Quadrupole' +% atQuantDiff - Creates a quantum diffusion element +% atrbend - Creates a rectangular bending magnet element with class 'Bend' +% atrbendtune - Set X0ref and RefDZ for rectangular bending magnets +% atrfcavity - Creates an rfcavity element with Class 'RFCavity' +% atringparam - Creates a RingParameter Element which should go at the beginning of the ring +% atsbend - Creates a sector bending magnet element with class 'Bend' +% atsextupole - Creates a sextupole element with class 'Sextupole' +% atSimpleQuantDiff - SimpleQuantDiff creates a simple quantum difusion element +% atskewquad - Creates a skew quadrupole element with Class 'Multipole' +% atsolenoid - Creates a new solenoid element with Class 'Solenoid' +% atthinmultipole - Creates a thin multipole element +% atvariablemultipole - Creates a variable thin multipole element +% atwiggler - Creates a wiggler +% +% LATTICE/ELEMENT_CREATION/PRIVATE +% decodeatargs - Separates arguments and resources +% +% LATTICE/PARAMGROUP +% atparamgroup - PARAMETER GROUP in AT is a general way +% mkparamgroup - Simplifies creation of AT parameter groups +% restoreparamgroup - Restores the values of multiple physical +% saveparamgroup - Saves the values of multiple physical +% setparamgroup - Modifies a group of parameters +% +% LATTICE/SURVEY +% atgeometry - Computes the 2-D position of all elements (no vertical bend) +% atgeometry3 - Computes the 3-D position of all elements +% +% This file was generated by updateContents.m on 06 Nov 2023 at 14:58:12. diff --git a/atmat/lattice/Converters/Contents.m b/atmat/lattice/Converters/Contents.m new file mode 100644 index 000000000..aa6f5945b --- /dev/null +++ b/atmat/lattice/Converters/Contents.m @@ -0,0 +1,44 @@ +% CONVERTERS +% See also +% +% Contents file for CONVERTERS and its subfolders. +% +% CONVERTERS +% readmad - Reads the file output of MAD commands +% +% CONVERTERS/AT2ELEGANT +% AT_2_Elegant - This functions converts the AT lattice AT_ring in elegant form +% +% CONVERTERS/AT2G4BL +% ATtoG4BL - Function [outtext]=ATtoG4BL(P_0,particle,folder) +% +% CONVERTERS/AT2MAD8 +% AT_2_mad8 - Function [elelat,def,lines]=AT_2_mad8(AT_ring,linename) +% +% CONVERTERS/AT2MADX +% AT_2_madX - Function [elelat,defs,lines]=AT_2_madX(AT_ring,linename) +% +% CONVERTERS/AT2OPA +% AT_2_OPA - Function AT_2_OPA(AT_ring,linename) +% +% CONVERTERS/ELEGANT2AT +% ele2at_run_me - Test_elegant_converter +% elegant2at - Function elegant2at(elegantlattice,E0,outfilename) +% ParseAtributesELEGANT_2_AT - Determines atribute and sets field in sxs{i} structure AT +% +% CONVERTERS/MAD82MADX +% mad8TOmadx - Converts mad8 sequence files to madX +% +% CONVERTERS/MADX2AT +% atfrommadx - Function atfrommadx(seqfilemadX,E0,outfilename) +% buildATLattice - Given a list (cell array) of elements with specified field Spos (center of element (madx default)) in a +% ParseAtributesMADX_2_AT - Determines atribute and sets field in sxs{i} structure AT +% reshapeToCellArray - If CEL_CEL is a cell array of structures and cell arrays it converts it a +% +% CONVERTERS/MADX2AT/EXAMPLES +% convertMADXtoATExample - Simple lattice test (uncomment to run) +% +% CONVERTERS/MADX2G4BL +% madx2g4bl - Function [outtext]=madx2g4bl(P_0,particle,folder) +% +% This file was generated by updateContents.m on 06 Nov 2023 at 14:58:13. diff --git a/atmat/lattice/element_creation/Contents.m b/atmat/lattice/element_creation/Contents.m new file mode 100644 index 000000000..db5a50623 --- /dev/null +++ b/atmat/lattice/element_creation/Contents.m @@ -0,0 +1,38 @@ +% ELEMENT_CREATION +% See also +% +% Contents file for ELEMENT_CREATION and its subfolders. +% +% ELEMENT_CREATION +% ataperture - Creates a aperture element +% atbaselem - Create an AT element structure + various checks +% atcorrector - Creates a drift space element with class 'Corrector' +% atdampMatElem - Creates an element that applies the global damping matrix +% atdrift - Creates a drift space element with Class 'Drift' +% atenergyloss - Creates an energy loss element +% atidtable - Creates an ID element +% atinsertiondevicekickmap - Creates an insertion device kick-map element +% atM66 - Create an element applying an arbitrary 6x6 transfer matrix +% atM66Tijk - ATM66(FAMNAME,M66,Tijk,PASSMETHOD) +% atmarker - Creates a marker space element +% atmonitor - Creates a Beam Position Monitor element with Class 'Monitor' +% atmultipole - Creates a multipole element +% atquadrupole - Creates a quadrupole element with Class 'Quadrupole' +% atQuantDiff - Creates a quantum diffusion element +% atrbend - Creates a rectangular bending magnet element with class 'Bend' +% atrbendtune - Set X0ref and RefDZ for rectangular bending magnets +% atrfcavity - Creates an rfcavity element with Class 'RFCavity' +% atringparam - Creates a RingParameter Element which should go at the beginning of the ring +% atsbend - Creates a sector bending magnet element with class 'Bend' +% atsextupole - Creates a sextupole element with class 'Sextupole' +% atSimpleQuantDiff - SimpleQuantDiff creates a simple quantum difusion element +% atskewquad - Creates a skew quadrupole element with Class 'Multipole' +% atsolenoid - Creates a new solenoid element with Class 'Solenoid' +% atthinmultipole - Creates a thin multipole element +% atvariablemultipole - Creates a variable thin multipole element +% atwiggler - Creates a wiggler +% +% ELEMENT_CREATION/PRIVATE +% decodeatargs - Separates arguments and resources +% +% This file was generated by updateContents.m on 06 Nov 2023 at 14:58:13. diff --git a/atmat/lattice/survey/Contents.m b/atmat/lattice/survey/Contents.m new file mode 100644 index 000000000..5de802a17 --- /dev/null +++ b/atmat/lattice/survey/Contents.m @@ -0,0 +1,10 @@ +% SURVEY +% See also +% +% Contents file for SURVEY and its subfolders. +% +% SURVEY +% atgeometry - Computes the 2-D position of all elements (no vertical bend) +% atgeometry3 - Computes the 3-D position of all elements +% +% This file was generated by updateContents.m on 06 Nov 2023 at 14:58:13. diff --git a/atmat/pubtools/Contents.m b/atmat/pubtools/Contents.m new file mode 100644 index 000000000..ad3860e93 --- /dev/null +++ b/atmat/pubtools/Contents.m @@ -0,0 +1,187 @@ +% PUBTOOLS +% See also +% +% Contents file for PUBTOOLS and its subfolders. +% +% PUBTOOLS +% atdynap - Compute the dynamic aperture +% atmomap - Find momentum aperture at start of ring +% atsurvey2spos - Returns closest lattics s coordinates to xycoord points +% atundulator - Define undulator model +% atvalue - Extract array from lindata structure +% calc_dppAperture - Calculate the momentum aperture at each location of the ring due to +% calc_Touschek - TauT = calc_Touschek(THERING, Ib) +% calc_TouschekPM - TauT = calc_TouschekPM(TD,dppPM,Trf,Ib,U0,coupling, sigE, emit_x) +% freqsearch - ========================================================================= +% nlchromplot - Example: nlchromplot(esrf,-.04,.04,30,16,1) +% +% PUBTOOLS/APERTURE +% SetPhysicalAperture - Ringapert=SetPhysicalAperture(ring,apertureX,apertureY) +% +% PUBTOOLS/CREATE_ELEMS +% atidtable_dat - Atidtable(FamName, Nslice, filename, Energy, method) +% +% PUBTOOLS/DISTANCE2CURVE +% distance2curve - Gets the minimum distance from a point to a general curvilinear n-dimensional arc +% +% PUBTOOLS/HAISSINSKI +% blength +% fitgaussian - GAUSSIAN_PARAM FITERR GAUSSFIT SIGERROR]= FITGAUSSIAN(DATA,[property_value_pair]); +% plothaissinski - [z lambda sigma mu] = HASSINSKYFIT(SIGMA0, R, L) +% Qval - Gives the unitless Q parameter needed to compute the +% +% PUBTOOLS/LATTICE_TOOLS +% atreadbeta - Reads a BETA file +% atsetglobval - Creates the global variable GLOBVAL and adds Energy +% scalesext - Newring=scalesext(ring,sextfam,scale) +% setsext - Newring=setsext(ring,fam,val); +% setsextall - Newring=setsextall(ring,fam,val); +% sext_sens_scan - Esrf(:) +% +% PUBTOOLS/LATTICETUNINGFUNCTIONS/CORRECTION +% qemsvd_mod - Function dq=qemsvd_mod(a,b,neig,plot) +% +% PUBTOOLS/LATTICETUNINGFUNCTIONS/CORRECTION/CHROMATICITY +% atmatchchromdelta - Function arcchrom0=atmatchchromdelta(arc,c,sxtfams) +% +% PUBTOOLS/LATTICETUNINGFUNCTIONS/CORRECTION/CORRECTION_CHAIN +% CorrectionChain - Corrected lattice +% DisplayCorrectionEffect - [d0,de,dc]=DisplayCorrectionEffect(.. +% testcorrectionchain - Test errors and correction functions +% +% PUBTOOLS/LATTICETUNINGFUNCTIONS/CORRECTION/DISPERSION +% atcorrectdispersion - Function [.. +% testdispersioncorrection - Test errors and correction functions +% +% PUBTOOLS/LATTICETUNINGFUNCTIONS/CORRECTION/DISPERSIONFREESTEERING +% atdispersionfreesteering - Function [.. +% testdispersionfreesteering - Test errors and correction functions +% +% PUBTOOLS/LATTICETUNINGFUNCTIONS/CORRECTION/ORBIT +% atcorrectorbit +% testorbitbump - Test errors and correction functions +% testorbitcorrection - Test errors and correction functions +% +% PUBTOOLS/LATTICETUNINGFUNCTIONS/CORRECTION/ORBITBUMPS/MATCHING +% BumpAtBPM - Function roff=BumpAtBPM(.. +% BumpAtBPM4D - Function roff=BumpAtBPM(.. +% testorbitbump - Test matching orbit bump +% +% PUBTOOLS/LATTICETUNINGFUNCTIONS/CORRECTION/RDT +% atavedata_mod - ATAVEDATA Average of optical functions on selected elements +% atQuadRDTdispersioncorrection - - Make dispersion correction based on RDTs +% atRDTdispersioncorrection - Makes dispersion correction based on RDTs +% atRDTdispersionmeasuredcorrection - Makes correction of dispersion based on +% atSkewRDTdispersioncorrection - Function [.. +% EquivalentGradientsFromAlignments6D - Estimated normal quad gradients from sext offsets +% qemrdtresp_mod - QEMRDTRESP compute resonance driving terms at BPM locations +% semrdtresp_mod - SEMRDT compute resonance driving terms at BPM locations +% testRDTdispersionfreesteering - Test errors and correction functions +% +% PUBTOOLS/LATTICETUNINGFUNCTIONS/CORRECTION/RESPONSE_MATRIX +% findrespmat - FINDRESPM_mod computes the change in the closed orbit due to parameter perturbations +% getresponsematrices - 1 AT lattice +% gettunechromatlinopt - Gets tunes and chromaticities from atlinopt +% +% PUBTOOLS/LATTICETUNINGFUNCTIONS/CORRECTION/RFCAVITY +% atRFcorrection - Function [.. +% atsetRFCavityErr - ATSETRFCAVITY sets the RF Cavity with the passmethod RFCavityPass +% testsetRFCavityErr - Test errors and correction functions +% +% PUBTOOLS/LATTICETUNINGFUNCTIONS/CORRECTION/TRAJECTORY +% atfirstturntrajectory - Makes first turn correction +% MatchLast2CorForFirstBPM - Takes the last two correctors to match the orbit and angle trajectory at +% Scan2x2DinCOD - [bestinputcoord]=ScanPosAngle(.. +% testorbitaftertrajectory - Test errors and correction functions +% testtrajectorycorrection - Test errors and correction functions +% +% PUBTOOLS/LATTICETUNINGFUNCTIONS/CORRECTION/TUNE +% atmatchtunedelta - Function arcchrom0=atmatchtunedelta(arc,c,quadfams) +% fittunedelta2fam - Rerr=fittunedelta2fam(rerr,r0) +% testfittunedelta2fam - Test errors and correction functions +% +% PUBTOOLS/LATTICETUNINGFUNCTIONS/ERRORS +% AssignFieldErr - Function r=AssignFieldErr(r,refpos,N,rho,BNn,ANn) +% atset_s_shift - Implements DS longitudinal position drift +% atsetbpmerr - Sets the misalignment vectors +% atsettiltdipole - Sets the entrance and exit rotation matrices +% bpm_matrices - Generate transformation matrices for BPM readings +% bpm_process - Compute BPM readings from the closed orbit +% finddispersion6Err - Gets 6D dispersion with bpm reading errors +% findorbit4Err - Gets 4x4 closed orbit with BPM errors +% findorbit6Err - Findorbit6 with bpm reading errors +% findtrajectory6Err - [t 6xNbpm array of trajectory +% setANYshift - Adds to the existing shift errors additional D +% setFieldIntegralError - Function rerr=setFieldIntegralError(r0,rerr,indx,order,Nsigma,sigmaperc) +% setGirderError - Rerr=setGirderError(r,pert,errval,mag_group) +% SetLargeErrorList - Sets given error list +% setTiltAbout - Sets tilt errors +% setTiltGirderAbout - Set Tilt error on a magnet +% setXshift - Set horizontal shifts for a element list +% +% PUBTOOLS/LATTICETUNINGFUNCTIONS/ERRORS/BPMERRORS +% testerr - Load lattice +% +% PUBTOOLS/LATTICETUNINGFUNCTIONS/ERRORS/DELTAS +% testerr - Load lattice +% +% PUBTOOLS/LATTICETUNINGFUNCTIONS/ERRORS/DXDY +% testerr - Load lattice +% +% PUBTOOLS/LATTICETUNINGFUNCTIONS/ERRORS/ERRORDISPLAYFUNCTIONS +% GetMisalignments - This function retrives 3 vectors, for x and y misalignments and tilts +% pltmisalignments - #ok +% +% PUBTOOLS/LATTICETUNINGFUNCTIONS/ERRORS/ERRORSMANIPULATION +% GetExistingErrors - This function retrives 6 vectors, for x, y,s misalignments, +% getMagGroupsFromGirderIndex - Gets magnets on a girder +% getMagGroupsFromMagNum - - Gets magnet from a Magnet group +% setBpmOffsetOnDipoleRef - Set bpm on curve defined by dipole misalignments +% SetExistingError - Function SetExistingError(rerr,magindex,X0,Y0,S0,T0,R0,P0,bpm0) +% SumErrors - Rsum=SumErrors(r1,r2,magindex) +% ThetaPhiGirder - Rtp=ThetaPhiGirder(r,mag_gr) +% UniformGirderErrors - Function ring=UniformGirderErrors(ring) +% UniformMagGroupsErrors - Function ring=UniformMagGroupsErrors(ring) +% +% PUBTOOLS/LATTICETUNINGFUNCTIONS/ERRORS/FIELDINTEGRAL +% testerr - Load lattice +% +% PUBTOOLS/LATTICETUNINGFUNCTIONS/ERRORS/GIRDERS +% testerr - Load lattice +% +% PUBTOOLS/LATTICETUNINGFUNCTIONS/ERRORS/LARGEERRLIST +% testerr - Load lattice +% +% PUBTOOLS/LATTICETUNINGFUNCTIONS/ERRORS/LARGEWAVELIST +% testcor - Load lattice +% +% PUBTOOLS/LATTICETUNINGFUNCTIONS/ERRORS/MULTIPOLES +% testerr - Load lattice +% +% PUBTOOLS/LATTICETUNINGFUNCTIONS/ERRORS/RANDOM +% atsetrandomerrors - Function rerr=atsetrandomerrors(.. +% seterrorrand - Nominal lattice +% +% PUBTOOLS/LATTICETUNINGFUNCTIONS/ERRORS/SURVEY +% SetESRFAlgeAlignmentError - Function SetESRFAlgeAlignmentError(.. +% testerr - Load lattice +% +% PUBTOOLS/LATTICETUNINGFUNCTIONS/ERRORS/TILT +% compRotCorVsDip - Load lattice +% compRotCorVsDipQuad - Load lattice +% testerr - Load lattice +% testerrRotCorrector - Load lattice +% +% PUBTOOLS/LATTICETUNINGFUNCTIONS/ERRORS/WAVE +% atsetwaveerrors - Function rerr=atsetwaveerrors(.. +% seterrorwave - Nominal lattice +% +% PUBTOOLS/LOCAL_LATTICE_PARAMS +% atmakeXYProjectionEllipse - Gives points to plot the contour ellipses +% machine_at - Machine AT will return the optics of the lattice. Essentially takes what +% plotContours - Plots contours +% +% PUBTOOLS/VACUUMLIFETIME +% VacLifetimeResidualGass - Coloumb scattering and residual gas Bremsstrahlung Cross sections are +% +% This file was generated by updateContents.m on 06 Nov 2023 at 14:58:13. diff --git a/atmat/pubtools/LatticeTuningFunctions/Contents.m b/atmat/pubtools/LatticeTuningFunctions/Contents.m new file mode 100644 index 000000000..b82c0f386 --- /dev/null +++ b/atmat/pubtools/LatticeTuningFunctions/Contents.m @@ -0,0 +1,144 @@ +% LATTICETUNINGFUNCTIONS +% See also +% +% Contents file for LATTICETUNINGFUNCTIONS and its subfolders. +% +% LATTICETUNINGFUNCTIONS/CORRECTION +% qemsvd_mod - Function dq=qemsvd_mod(a,b,neig,plot) +% +% LATTICETUNINGFUNCTIONS/CORRECTION/CHROMATICITY +% atmatchchromdelta - Function arcchrom0=atmatchchromdelta(arc,c,sxtfams) +% +% LATTICETUNINGFUNCTIONS/CORRECTION/CORRECTION_CHAIN +% CorrectionChain - Corrected lattice +% DisplayCorrectionEffect - [d0,de,dc]=DisplayCorrectionEffect(.. +% testcorrectionchain - Test errors and correction functions +% +% LATTICETUNINGFUNCTIONS/CORRECTION/DISPERSION +% atcorrectdispersion - Function [.. +% testdispersioncorrection - Test errors and correction functions +% +% LATTICETUNINGFUNCTIONS/CORRECTION/DISPERSIONFREESTEERING +% atdispersionfreesteering - Function [.. +% testdispersionfreesteering - Test errors and correction functions +% +% LATTICETUNINGFUNCTIONS/CORRECTION/ORBIT +% atcorrectorbit +% testorbitbump - Test errors and correction functions +% testorbitcorrection - Test errors and correction functions +% +% LATTICETUNINGFUNCTIONS/CORRECTION/ORBITBUMPS/MATCHING +% BumpAtBPM - Function roff=BumpAtBPM(.. +% BumpAtBPM4D - Function roff=BumpAtBPM(.. +% testorbitbump - Test matching orbit bump +% +% LATTICETUNINGFUNCTIONS/CORRECTION/RDT +% atavedata_mod - ATAVEDATA Average of optical functions on selected elements +% atQuadRDTdispersioncorrection - - Make dispersion correction based on RDTs +% atRDTdispersioncorrection - Makes dispersion correction based on RDTs +% atRDTdispersionmeasuredcorrection - Makes correction of dispersion based on +% atSkewRDTdispersioncorrection - Function [.. +% EquivalentGradientsFromAlignments6D - Estimated normal quad gradients from sext offsets +% qemrdtresp_mod - QEMRDTRESP compute resonance driving terms at BPM locations +% semrdtresp_mod - SEMRDT compute resonance driving terms at BPM locations +% testRDTdispersionfreesteering - Test errors and correction functions +% +% LATTICETUNINGFUNCTIONS/CORRECTION/RESPONSE_MATRIX +% findrespmat - FINDRESPM_mod computes the change in the closed orbit due to parameter perturbations +% getresponsematrices - 1 AT lattice +% gettunechromatlinopt - Gets tunes and chromaticities from atlinopt +% +% LATTICETUNINGFUNCTIONS/CORRECTION/RFCAVITY +% atRFcorrection - Function [.. +% atsetRFCavityErr - ATSETRFCAVITY sets the RF Cavity with the passmethod RFCavityPass +% testsetRFCavityErr - Test errors and correction functions +% +% LATTICETUNINGFUNCTIONS/CORRECTION/TRAJECTORY +% atfirstturntrajectory - Makes first turn correction +% MatchLast2CorForFirstBPM - Takes the last two correctors to match the orbit and angle trajectory at +% Scan2x2DinCOD - [bestinputcoord]=ScanPosAngle(.. +% testorbitaftertrajectory - Test errors and correction functions +% testtrajectorycorrection - Test errors and correction functions +% +% LATTICETUNINGFUNCTIONS/CORRECTION/TUNE +% atmatchtunedelta - Function arcchrom0=atmatchtunedelta(arc,c,quadfams) +% fittunedelta2fam - Rerr=fittunedelta2fam(rerr,r0) +% testfittunedelta2fam - Test errors and correction functions +% +% LATTICETUNINGFUNCTIONS/ERRORS +% AssignFieldErr - Function r=AssignFieldErr(r,refpos,N,rho,BNn,ANn) +% atset_s_shift - Implements DS longitudinal position drift +% atsetbpmerr - Sets the misalignment vectors +% atsettiltdipole - Sets the entrance and exit rotation matrices +% bpm_matrices - Generate transformation matrices for BPM readings +% bpm_process - Compute BPM readings from the closed orbit +% finddispersion6Err - Gets 6D dispersion with bpm reading errors +% findorbit4Err - Gets 4x4 closed orbit with BPM errors +% findorbit6Err - Findorbit6 with bpm reading errors +% findtrajectory6Err - [t 6xNbpm array of trajectory +% setANYshift - Adds to the existing shift errors additional D +% setFieldIntegralError - Function rerr=setFieldIntegralError(r0,rerr,indx,order,Nsigma,sigmaperc) +% setGirderError - Rerr=setGirderError(r,pert,errval,mag_group) +% SetLargeErrorList - Sets given error list +% setTiltAbout - Sets tilt errors +% setTiltGirderAbout - Set Tilt error on a magnet +% setXshift - Set horizontal shifts for a element list +% +% LATTICETUNINGFUNCTIONS/ERRORS/BPMERRORS +% testerr - Load lattice +% +% LATTICETUNINGFUNCTIONS/ERRORS/DELTAS +% testerr - Load lattice +% +% LATTICETUNINGFUNCTIONS/ERRORS/DXDY +% testerr - Load lattice +% +% LATTICETUNINGFUNCTIONS/ERRORS/ERRORDISPLAYFUNCTIONS +% GetMisalignments - This function retrives 3 vectors, for x and y misalignments and tilts +% pltmisalignments - #ok +% +% LATTICETUNINGFUNCTIONS/ERRORS/ERRORSMANIPULATION +% GetExistingErrors - This function retrives 6 vectors, for x, y,s misalignments, +% getMagGroupsFromGirderIndex - Gets magnets on a girder +% getMagGroupsFromMagNum - - Gets magnet from a Magnet group +% setBpmOffsetOnDipoleRef - Set bpm on curve defined by dipole misalignments +% SetExistingError - Function SetExistingError(rerr,magindex,X0,Y0,S0,T0,R0,P0,bpm0) +% SumErrors - Rsum=SumErrors(r1,r2,magindex) +% ThetaPhiGirder - Rtp=ThetaPhiGirder(r,mag_gr) +% UniformGirderErrors - Function ring=UniformGirderErrors(ring) +% UniformMagGroupsErrors - Function ring=UniformMagGroupsErrors(ring) +% +% LATTICETUNINGFUNCTIONS/ERRORS/FIELDINTEGRAL +% testerr - Load lattice +% +% LATTICETUNINGFUNCTIONS/ERRORS/GIRDERS +% testerr - Load lattice +% +% LATTICETUNINGFUNCTIONS/ERRORS/LARGEERRLIST +% testerr - Load lattice +% +% LATTICETUNINGFUNCTIONS/ERRORS/LARGEWAVELIST +% testcor - Load lattice +% +% LATTICETUNINGFUNCTIONS/ERRORS/MULTIPOLES +% testerr - Load lattice +% +% LATTICETUNINGFUNCTIONS/ERRORS/RANDOM +% atsetrandomerrors - Function rerr=atsetrandomerrors(.. +% seterrorrand - Nominal lattice +% +% LATTICETUNINGFUNCTIONS/ERRORS/SURVEY +% SetESRFAlgeAlignmentError - Function SetESRFAlgeAlignmentError(.. +% testerr - Load lattice +% +% LATTICETUNINGFUNCTIONS/ERRORS/TILT +% compRotCorVsDip - Load lattice +% compRotCorVsDipQuad - Load lattice +% testerr - Load lattice +% testerrRotCorrector - Load lattice +% +% LATTICETUNINGFUNCTIONS/ERRORS/WAVE +% atsetwaveerrors - Function rerr=atsetwaveerrors(.. +% seterrorwave - Nominal lattice +% +% This file was generated by updateContents.m on 06 Nov 2023 at 14:58:13. diff --git a/atmat/pubtools/VacuumLifetime/Contents.m b/atmat/pubtools/VacuumLifetime/Contents.m new file mode 100644 index 000000000..b6e248513 --- /dev/null +++ b/atmat/pubtools/VacuumLifetime/Contents.m @@ -0,0 +1,9 @@ +% VACUUMLIFETIME +% See also +% +% Contents file for VACUUMLIFETIME and its subfolders. +% +% VACUUMLIFETIME +% VacLifetimeResidualGass - Coloumb scattering and residual gas Bremsstrahlung Cross sections are +% +% This file was generated by updateContents.m on 06 Nov 2023 at 14:58:13. diff --git a/atmat/pubtools/create_elems/Contents.m b/atmat/pubtools/create_elems/Contents.m new file mode 100644 index 000000000..499a863fe --- /dev/null +++ b/atmat/pubtools/create_elems/Contents.m @@ -0,0 +1,9 @@ +% CREATE_ELEMS +% See also +% +% Contents file for CREATE_ELEMS and its subfolders. +% +% CREATE_ELEMS +% atidtable_dat - Atidtable(FamName, Nslice, filename, Energy, method) +% +% This file was generated by updateContents.m on 06 Nov 2023 at 14:58:13. diff --git a/atmat/pubtools/distance2curve/Contents.m b/atmat/pubtools/distance2curve/Contents.m new file mode 100644 index 000000000..12aac732b --- /dev/null +++ b/atmat/pubtools/distance2curve/Contents.m @@ -0,0 +1,9 @@ +% DISTANCE2CURVE +% See also +% +% Contents file for DISTANCE2CURVE and its subfolders. +% +% DISTANCE2CURVE +% distance2curve - Gets the minimum distance from a point to a general curvilinear n-dimensional arc +% +% This file was generated by updateContents.m on 06 Nov 2023 at 14:58:13. diff --git a/atmat/pubtools/haissinski/Contents.m b/atmat/pubtools/haissinski/Contents.m new file mode 100644 index 000000000..770332e8a --- /dev/null +++ b/atmat/pubtools/haissinski/Contents.m @@ -0,0 +1,12 @@ +% HAISSINSKI +% See also +% +% Contents file for HAISSINSKI and its subfolders. +% +% HAISSINSKI +% blength +% fitgaussian - GAUSSIAN_PARAM FITERR GAUSSFIT SIGERROR]= FITGAUSSIAN(DATA,[property_value_pair]); +% plothaissinski - [z lambda sigma mu] = HASSINSKYFIT(SIGMA0, R, L) +% Qval - Gives the unitless Q parameter needed to compute the +% +% This file was generated by updateContents.m on 06 Nov 2023 at 14:58:13. diff --git a/atmat/pubtools/lattice_tools/Contents.m b/atmat/pubtools/lattice_tools/Contents.m new file mode 100644 index 000000000..d8bade031 --- /dev/null +++ b/atmat/pubtools/lattice_tools/Contents.m @@ -0,0 +1,14 @@ +% LATTICE_TOOLS +% See also +% +% Contents file for LATTICE_TOOLS and its subfolders. +% +% LATTICE_TOOLS +% atreadbeta - Reads a BETA file +% atsetglobval - Creates the global variable GLOBVAL and adds Energy +% scalesext - Newring=scalesext(ring,sextfam,scale) +% setsext - Newring=setsext(ring,fam,val); +% setsextall - Newring=setsextall(ring,fam,val); +% sext_sens_scan - Esrf(:) +% +% This file was generated by updateContents.m on 06 Nov 2023 at 14:58:13. diff --git a/atmat/pubtools/local_lattice_params/Contents.m b/atmat/pubtools/local_lattice_params/Contents.m new file mode 100644 index 000000000..64f685646 --- /dev/null +++ b/atmat/pubtools/local_lattice_params/Contents.m @@ -0,0 +1,11 @@ +% LOCAL_LATTICE_PARAMS +% See also +% +% Contents file for LOCAL_LATTICE_PARAMS and its subfolders. +% +% LOCAL_LATTICE_PARAMS +% atmakeXYProjectionEllipse - Gives points to plot the contour ellipses +% machine_at - Machine AT will return the optics of the lattice. Essentially takes what +% plotContours - Plots contours +% +% This file was generated by updateContents.m on 06 Nov 2023 at 14:58:13. diff --git a/developer/matlab/README.md b/developer/matlab/README.md index f6d766ad1..a71ea7f8c 100644 --- a/developer/matlab/README.md +++ b/developer/matlab/README.md @@ -53,8 +53,8 @@ Generates _atroot_/at.m ("help at") gen_toc(); ``` - Generates _atroot_/developer/matlab/m/*.m files* -- Publishes these files in _atroot_/../docs/matlab/*.html -- Publishes _atroot_/developer/matlab/mlx/*.mlx in _atroot_/../docs/matlab/*.html +- Publishes these files in _atroot_/../docs/atdocs/matlab/*.html +- Publishes _atroot_/developer/matlab/mlx/*.mlx in _atroot_/../docs/atdocs/matlab/*.html - Generates the User's guide files for the help browser **Warning:** diff --git a/developer/matlab/gen_toc.m b/developer/matlab/gen_toc.m index 34b668833..b25992142 100644 --- a/developer/matlab/gen_toc.m +++ b/developer/matlab/gen_toc.m @@ -95,7 +95,7 @@ function mlxloop(secdir,secname,chapfun) delete(sumname); function res=lst() vals=reshape(dir(fullfile(dirname,'*.mlx')),1,[]); - [~,nms,~]=arrayfun(@fileparts,{vals.name},'UniformOutput',false); + [~,nms,~]=cellfun(@fileparts,{vals.name},'UniformOutput',false); nms=cellfun(@string,sort(nms),'UniformOutput',false); res=struct('id',nms,'title',nms); end diff --git a/developer/matlab/m/atradiation.m b/developer/matlab/m/atradiation.m index 3fdce018a..8f3722cd0 100644 --- a/developer/matlab/m/atradiation.m +++ b/developer/matlab/m/atradiation.m @@ -1,7 +1,7 @@ %% Radiation % %% -% - Check the radiation state of a ring +% - Obsolete: check the radiation state of a ring % % - Gets the lattice energy % @@ -9,9 +9,9 @@ % % - Find tunes and damping rates from one map matrix with radiation % -% - Switches RF and radiation on +% - Obsolete: switches RF and radiation on % -% - Switches radiation and cavity off +% - Obsolete: switches RF and radiation off % % - Compute the radiation-diffusion matrix % diff --git a/developer/matlab/m/atsummary.m b/developer/matlab/m/atsummary.m index e46a71302..cd4173424 100644 --- a/developer/matlab/m/atsummary.m +++ b/developer/matlab/m/atsummary.m @@ -3,7 +3,7 @@ %% % - Computes and displays global information % -% - Print out the parameters of the current AT lattice +% - Print out various parameters of the current AT lattice % -% - Calculates various ring parameters +% - Print out various parameters of the current AT lattice % diff --git a/developer/matlab/release_notes/r2.5.mlx b/developer/matlab/release_notes/r2.5.mlx new file mode 100644 index 0000000000000000000000000000000000000000..cce65ba5eb96e6f813e1f0ed2bfbd9f89573ea26 GIT binary patch literal 4978 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%0DfEkTfhlB z{jD8v)$r;;_b=*uzWA9agtBL0joP#Q&IEuL@mFB7X^S zlKxHTf2EYGQdfV&zoZ1n{z2-GpYp2a)nNZilY#snG_Qodz7`(-Z%Z)tmc*_P=kKi+ F@GqP_ZIb{1 literal 0 HcmV?d00001 diff --git a/docs/atdocs/matlab/AT_gs_top.html b/docs/atdocs/matlab/AT_gs_top.html index 2facc1ef3..e748159ac 100644 --- a/docs/atdocs/matlab/AT_gs_top.html +++ b/docs/atdocs/matlab/AT_gs_top.html @@ -1,5 +1,5 @@ -Getting Started with the Accelerator Toolbox

Getting Started with the Accelerator Toolbox


Element creation

Element creation

atbaselem - Create an AT element structure + various checks

atelem - Makes a new AT element structure from another element,

atringparam - Creates a RingParameter Element which should go at the beginning of the ring

atdrift - Creates a drift space element with Class 'Drift'

atquadrupole - Creates a quadrupole element with Class 'Quadrupole'

atrbend - Creates a rectangular bending magnet element with class 'Bend'

atsbend - Creates a sector bending magnet element with class 'Bend'

atsextupole - Creates a sextupole element with class 'Sextupole'

atskewquad - Creates a skew quadrupole element with Class 'Multipole'

atmultipole - Creates a multipole element

atrfcavity - Creates an rfcavity element with Class 'RFCavity'

atmarker - Creates a marker space element

atmonitor - Creates a Beam Position Monitor element with Class 'Monitor'

ataperture - Creates a aperture element

atcorrector - Creates a drift space element with class 'Corrector'

atidtable - Creates an ID element

atwiggler - Creates a wiggler

atdampMatElem - Creates an element that applies the global damping matrix

atsolenoid - Creates a new solenoid element with Class 'Solenoid'

atthinmultipole - Creates a thin multipole element

atM66 - Create an element applying an arbitrary 6x6 transfer matrix

atQuantDiff - Creates a quantum diffusion element

+ +

+atbaselem - Create an AT element structure + various checks

+

+atelem - Makes a new AT element structure from another element,

+

+atringparam - Creates a RingParameter Element which should go at the beginning of the ring

+

+atdrift - Creates a drift space element with Class 'Drift'

+

+atquadrupole - Creates a quadrupole element with Class 'Quadrupole'

+

+atrbend - Creates a rectangular bending magnet element with class 'Bend'

+

+atsbend - Creates a sector bending magnet element with class 'Bend'

+

+atsextupole - Creates a sextupole element with class 'Sextupole'

+

+atskewquad - Creates a skew quadrupole element with Class 'Multipole'

+

+atmultipole - Creates a multipole element

+

+atrfcavity - Creates an rfcavity element with Class 'RFCavity'

+

+atmarker - Creates a marker space element

+

+atmonitor - Creates a Beam Position Monitor element with Class 'Monitor'

+

+ataperture - Creates a aperture element

+

+atcorrector - Creates a drift space element with class 'Corrector'

+

+atidtable - Creates an ID element

+

+atwiggler - Creates a wiggler

+

+atdampMatElem - Creates an element that applies the global damping matrix

+

+atsolenoid - Creates a new solenoid element with Class 'Solenoid'

+

+atthinmultipole - Creates a thin multipole element

+

+atM66 - Create an element applying an arbitrary 6x6 transfer matrix

+

+atQuantDiff - Creates a quantum diffusion element

+ +
+ \ No newline at end of file +--> + + diff --git a/docs/atdocs/matlab/atelemfuncs.html b/docs/atdocs/matlab/atelemfuncs.html index e29f5aa5c..f4d56cf9f 100644 --- a/docs/atdocs/matlab/atelemfuncs.html +++ b/docs/atdocs/matlab/atelemfuncs.html @@ -1,12 +1,17 @@ - - - - - Element manipulation

Element manipulation

isatelem - Tests if an input argument is a valid AT element

atguessclass - Tries to determine the class of an element

atshiftelem - Set new displacement parameters

attiltelem - Sets new rotation parameters

+ +

+isatelem - Tests if an input argument is a valid AT element

+

+atguessclass - Tries to determine the class of an element

+

+atshiftelem - Set new displacement parameters

+

+attiltelem - Sets new rotation parameters

+ + + \ No newline at end of file +--> + + diff --git a/docs/atdocs/matlab/atlatticefuncs.html b/docs/atdocs/matlab/atlatticefuncs.html index 740a624cf..0f005676e 100644 --- a/docs/atdocs/matlab/atlatticefuncs.html +++ b/docs/atdocs/matlab/atlatticefuncs.html @@ -1,12 +1,17 @@ - - - - - Lattice manipulation

Lattice manipulation

Contents

isatlattice - Tests if an input argument is a valid AT lattice

Global lattice parameters

The global lattice properties 'FamName', 'Energy', 'Periodicity', 'Particle', 'HarmNumber' are stored in the RingParam lattice element.

The following functions gives an easy access to them:

atGetRingProperties - Get the ring properties

atSetRingProperties - Add or modify properties of the lattice

atenergy - Gets the lattice energy

Access elements

atindex - Extracts the information about element families and

atgetcells - Performs a search on MATLAB cell arrays of structures

atgetfieldvalues - Retrieves the field values AT cell array of elements

atsetfieldvalues - Sets the field values of MATLAB cell array of structures

Insert elements

atinsertelems - Insert elements at given locations in a line

atdivelem - Divide an element into pieces

atsplitelem - Creates a line by inserting one or more elements into a base element

insertindrift - Inserts one or more elements into a drift element

atsbreak - Insert markers at given s positions in a lattice

Join elements

atreduce - Remove useless elements from an AT structure

combinebypassmethod - Combines adjacent elements that have the same specified pass method

combinelinear45 - Combines adjacent elements that use 4-by-5 PassMethods

Other

atloadfielderrs - Will load a field error structure into a ring

atsetRFCavity - Set the RF Cavity with the passmethod RFCavityPass

atsetshift - Sets the misalignment vectors

atsettilt - Sets the entrance and exit rotation matrices

settags - Sets the 'Tag' field in AT lattice elements

findtags - Looks for string matches in 'Tag' field of AT lattice elements

mvelem - Move an element

mvfield - Move fields from one structure to another

+ +

Contents

+ +

+isatlattice - Tests if an input argument is a valid AT lattice

+

Global lattice parameters

+

The global lattice properties 'FamName', 'Energy', 'Periodicity', 'Particle', 'HarmNumber' are stored in the RingParam lattice element.

+

The following functions gives an easy access to them:

+

+atGetRingProperties - Get the ring properties

+

+atSetRingProperties - Add or modify properties of the lattice

+

+atenergy - Gets the lattice energy

+

Access elements

+

+atindex - Extracts the information about element families and

+

+atgetcells - Performs a search on MATLAB cell arrays of structures

+

+atgetfieldvalues - Retrieves the field values AT cell array of elements

+

+atsetfieldvalues - Sets the field values of MATLAB cell array of structures

+

Insert elements

+

+atinsertelems - Insert elements at given locations in a line

+

+atdivelem - Divide an element into pieces

+

+atsplitelem - Creates a line by inserting one or more elements into a base element

+

+insertindrift - Inserts one or more elements into a drift element

+

+atsbreak - Insert markers at given s positions in a lattice

+

Join elements

+

+atreduce - Remove useless elements from an AT structure

+

+combinebypassmethod - Combines adjacent elements that have the same specified pass method

+

+combinelinear45 - Combines adjacent elements that use 4-by-5 PassMethods

+

Other

+

+atloadfielderrs - Will load a field error structure into a ring

+

+atsetRFCavity - Set the RF Cavity with the passmethod RFCavityPass

+

+atsetshift - Sets the misalignment vectors

+

+atsettilt - Sets the entrance and exit rotation matrices

+

+settags - Sets the 'Tag' field in AT lattice elements

+

+findtags - Looks for string matches in 'Tag' field of AT lattice elements

+

+mvelem - Move an element

+

+mvfield - Move fields from one structure to another

+ + + \ No newline at end of file +--> + + diff --git a/docs/atdocs/matlab/atlinearoptics.html b/docs/atdocs/matlab/atlinearoptics.html index 4069d685f..32ce9cca4 100644 --- a/docs/atdocs/matlab/atlinearoptics.html +++ b/docs/atdocs/matlab/atlinearoptics.html @@ -1,12 +1,17 @@ - - - - - Linear optics

Linear optics

Contents

Closed orbit

findorbit - Find the closed orbit

findorbit4 - Finds closed orbit in the 4-d transverse phase

findorbit6 - Finds closed orbit in the full 6-d phase space

findsyncorbit - Finds closed orbit, synchronous with the RF cavity

Transfer matrices

findm44 - Numerically finds the 4x4 transfer matrix of an accelerator lattice

findm66 - Numerically finds the 6x6 transfer matrix of an accelerator lattice

findelemm44 - Numerically finds the 4x4 transfer matrix of an element

findelemm66 - Numerically finds the 6x6 transfer matrix of an element

Optical functions

atlinopt2 - Performs the linear analysis of UNCOUPLED lattices

atlinopt4 - Performs the 4D linear analysis of COUPLED lattices

atlinopt6 - Performs linear analysis of the lattice

beam22 - Computes the beam matrix from the 1-turn transfer matrix

beam44 - Computes the coupled beam matrices

+ +

Contents

+ +

Closed orbit

+

+findorbit - Find the closed orbit

+

+findorbit4 - Finds closed orbit in the 4-d transverse phase

+

+findorbit6 - Finds closed orbit in the full 6-d phase space

+

+findsyncorbit - Finds closed orbit, synchronous with the RF cavity

+

Transfer matrices

+

+findm44 - Numerically finds the 4x4 transfer matrix of an accelerator lattice

+

+findm66 - Numerically finds the 6x6 transfer matrix of an accelerator lattice

+

+findelemm44 - Numerically finds the 4x4 transfer matrix of an element

+

+findelemm66 - Numerically finds the 6x6 transfer matrix of an element

+

Optical functions

+

+atlinopt2 - Performs the linear analysis of UNCOUPLED lattices

+

+atlinopt4 - Performs the 4D linear analysis of COUPLED lattices

+

+atlinopt6 - Performs linear analysis of the lattice

+

+beam22 - Computes the beam matrix from the 1-turn transfer matrix

+

+beam44 - Computes the coupled beam matrices

+ + + \ No newline at end of file +--> + + diff --git a/docs/atdocs/matlab/atloadsave.html b/docs/atdocs/matlab/atloadsave.html index 759c8689c..b4635ca1b 100644 --- a/docs/atdocs/matlab/atloadsave.html +++ b/docs/atdocs/matlab/atloadsave.html @@ -1,12 +1,17 @@ - - - - - Loading and Saving lattices

Loading and Saving lattices

Contents

Loading lattices from files

atloadlattice - Load a lattice from a file

Binary files

Lattices can be saved as binary mat-files using the standard load and save commands

Text Files

atwritem - Creates a .m file to store an AT structure

atwritepy - Creates pyAT lattice from a Matlab lattice

+ +

Contents

+ +

Loading lattices from files

+

+atloadlattice - Load a lattice from a file

+

Binary files

+

Lattices can be saved as binary mat-files using the standard load and save commands

+

Text Files

+

+atwritem - Creates a .m file to store an AT structure

+

+atwritepy - Creates pyAT lattice from a Matlab lattice

+ + + \ No newline at end of file +--> + + diff --git a/docs/atdocs/matlab/atphysics.html b/docs/atdocs/matlab/atphysics.html index 14bf357ad..e1898185f 100644 --- a/docs/atdocs/matlab/atphysics.html +++ b/docs/atdocs/matlab/atphysics.html @@ -1,12 +1,17 @@ - - - - - Physics

Physics

symplectify - Makes a matrix more symplectic

+ +

+symplectify - Makes a matrix more symplectic

+ + + \ No newline at end of file +--> + + diff --git a/docs/atdocs/matlab/atradiation.html b/docs/atdocs/matlab/atradiation.html index b6d1fce39..f9b8f53a4 100644 --- a/docs/atdocs/matlab/atradiation.html +++ b/docs/atdocs/matlab/atradiation.html @@ -1,12 +1,17 @@ - - - - - Radiation

Radiation

check_radiation - Check the radiation state of a ring

atenergy - Gets the lattice energy

atgetU0 - Computes Energy loss per turn in eV

atdampingrates - Find tunes and damping rates from one map matrix with radiation

atradon - Switches RF and radiation on

atradoff - Switches radiation and cavity off

quantumDiff - Compute the radiation-diffusion matrix

ohmienvelope - Calculates equilibrium beam envelope in a

DipoleRadiation - Compute the radiation integrals in dipoles

WigglerRadiation - Compute the radiation integrals in wigglers

+ +

+check_radiation - Obsolete: check the radiation state of a ring

+

+atenergy - Gets the lattice energy

+

+atgetU0 - Computes Energy loss per turn in eV

+

+atdampingrates - Find tunes and damping rates from one map matrix with radiation

+

+atradon - Obsolete: switches RF and radiation on

+

+atradoff - Obsolete: switches RF and radiation off

+

+quantumDiff - Compute the radiation-diffusion matrix

+

+ohmienvelope - Calculates equilibrium beam envelope in a

+

+DipoleRadiation - Compute the radiation integrals in dipoles

+

+WigglerRadiation - Compute the radiation integrals in wigglers

+ + + \ No newline at end of file +--> + + diff --git a/docs/atdocs/matlab/atsummary.html b/docs/atdocs/matlab/atsummary.html index 838eb466b..b3625df96 100644 --- a/docs/atdocs/matlab/atsummary.html +++ b/docs/atdocs/matlab/atsummary.html @@ -1,12 +1,17 @@ - - - - - Parameter summary

Parameter summary

atx - Computes and displays global information

atsummary - Print out the parameters of the current AT lattice

ringpara - Calculates various ring parameters

+ +

+atx - Computes and displays global information

+

+atsummary - Print out various parameters of the current AT lattice

+

+ringpara - Print out various parameters of the current AT lattice

+ + + \ No newline at end of file +--> + + diff --git a/docs/atdocs/matlab/helpsearch-v4_en/index_meta.json b/docs/atdocs/matlab/helpsearch-v4_en/index_meta.json old mode 100644 new mode 100755 diff --git a/docs/atdocs/matlab/helpsearch-v4_en/store/000000000002.zap b/docs/atdocs/matlab/helpsearch-v4_en/store/000000000002.zap old mode 100644 new mode 100755 index 3e18e721fe8c24748683fa4d2c113f4fec835f42..716a3330e527d2ca309c9f6696c970268ed9fa84 GIT binary patch literal 152095 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

YTgWB@?|j}zOw%nB-3Il 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 Rc0}6s?b;B(i+m&he*q!Ql#u`c literal 117315 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 diff --git a/docs/atdocs/matlab/helpsearch-v4_en/store/root.bolt b/docs/atdocs/matlab/helpsearch-v4_en/store/root.bolt old mode 100644 new mode 100755 index 4deb27a5499c9a147910c0e4aa054cd811df63d7..c26b9312fde04db3d8adb26f7310127906f9c770 GIT binary patch delta 805 zcmZo@U}tzp^Y=LDU2+ZFY?!ctf0BTL0S~G^23|CctWbVj zI^(Kibtdm28Wnhi7@-m%n>c{@7yo8Cg~u#x$%!SIDTb2+)n-AMMhK=cf@uO`ast)n zBqpWifR)2}U>$HCSQDHF*0-5a^*`6fgfCo^90rLy61X;V1$^V5R4_=~Gl6R|mw`DW z`(`JDef*Oa09|MBjeoL%0LNsG1PR9O&58@|^E2{HW-L%(z@^AiHb; delta 321 zcmZo@;Am)InV?|6&VULypj=KU%>1M?(d?iOHxxESVcW}x(Q{z(&ndJ~kyL9Xaz ug}DhzcQFH9yO)2`0-%}$;+qvW+~=RPfkRS&0pck(s4`ecaR5!c?+*Ys3p!x{ diff --git a/docs/atdocs/matlab/helptoc.xml b/docs/atdocs/matlab/helptoc.xml index 9c4a9d744..002dd4462 100644 --- a/docs/atdocs/matlab/helptoc.xml +++ b/docs/atdocs/matlab/helptoc.xml @@ -50,6 +50,7 @@ Release notes r2.3 r2.4 + r2.5 diff --git a/docs/atdocs/matlab/howtos.html b/docs/atdocs/matlab/howtos.html index 1c182d12c..7bcb1a3b8 100644 --- a/docs/atdocs/matlab/howtos.html +++ b/docs/atdocs/matlab/howtos.html @@ -1,12 +1,17 @@ - - - - - How to…

+ +

+Control RF cavities +

+ + + \ No newline at end of file +--> + + diff --git a/docs/atdocs/matlab/howtos/CavityControl.html b/docs/atdocs/matlab/howtos/CavityControl.html index 46d698033..5c893f538 100644 --- a/docs/atdocs/matlab/howtos/CavityControl.html +++ b/docs/atdocs/matlab/howtos/CavityControl.html @@ -1,5 +1,5 @@ -Controlling the RF cavities

LATTICEDEMO self-running tutorial

clear

Create elements

An element in Accelerator Toolbox is a 1-by-1 MATLAB STRUCTURE.
Functions are provided to easily create such structures with adequate fields.
The following code creates a structure D1 for a drift space and a structure QF for a quadrupole.
D1 = atdrift('DR01', 3.0);
QF = atquadrupole('QF', 1.0, 0.2);
Use whos, disp or just type variable's name without closing semicolon to print the element's info:
whos D1 QF
Name Size Bytes Class Attributes +Summary
clear

Create elements

An element in Accelerator Toolbox is a 1-by-1 MATLAB STRUCTURE.
Functions are provided to easily create such structures with adequate fields.
The following code creates a structure D1 for a drift space and a structure QF for a quadrupole.
D1 = atdrift('DR01', 3.0);
QF = atquadrupole('QF', 1.0, 0.2);
Use whos, disp or just type variable's name without closing semicolon to print the element's info:
whos D1 QF
Name Size Bytes Class Attributes D1 1x1 716 struct - QF 1x1 1646 struct
disp(D1);
FamName: 'DR01' + QF 1x1 1646 struct
disp(D1);
FamName: 'DR01' PassMethod: 'DriftPass' Length: 3 - Class: 'Drift'
QF
QF = struct with fields:
FamName: 'QF' + Class: 'Drift'
QF
QF = struct with fields:
FamName: 'QF' PassMethod: 'StrMPoleSymplectic4Pass' Length: 1 Class: 'Quadrupole' @@ -82,7 +84,7 @@ PolynomA: [0 0] MaxOrder: 1 NumIntSteps: 10 -
The next few lines will create another drift structure D2 from the exiting D1 and modify the values of fields 'FamName' and 'Length'
D2 = D1;
D2.FamName = 'DR02';
D2.Length = 2;
Create another quadrupole element structure QD from QF and modify the values of fields 'K' and 'PolynomB' to make it defocusing
QD = QF;
QD.FamName = 'QD';
QD.K = -0.4;
The field 'PolynomB' is a vector of coefficients of the polynomial field expansion.
The second element (quadrupole coefficient) must be consistent with field 'K'
QD.PolynomB(2) = QD.K;
disp(QD);
FamName: 'QD' +
The next few lines will create another drift structure D2 from the exiting D1 and modify the values of fields 'FamName' and 'Length'
D2 = D1;
D2.FamName = 'DR02';
D2.Length = 2;
Create another quadrupole element structure QD from QF and modify the values of fields 'K' and 'PolynomB' to make it defocusing
QD = QF;
QD.FamName = 'QD';
QD.K = -0.4;
The field 'PolynomB' is a vector of coefficients of the polynomial field expansion.
The second element (quadrupole coefficient) must be consistent with field 'K'
QD.PolynomB(2) = QD.K;
disp(QD);
FamName: 'QD' PassMethod: 'StrMPoleSymplectic4Pass' Length: 1 Class: 'Quadrupole' @@ -90,14 +92,14 @@ PolynomB: [0 -0.4000] PolynomA: [0 0] MaxOrder: 1 - NumIntSteps: 10
We have created four elements:
whos
Name Size Bytes Class Attributes + NumIntSteps: 10
We have created four elements:
whos
Name Size Bytes Class Attributes D1 1x1 716 struct D2 1x1 716 struct QD 1x1 1646 struct - QF 1x1 1646 struct

Build lattices

We are ultimately interested in sequences of elements to model storage ring lattices or single-pass beam transport lines.
The next section illustrates building such sequences. Accelerator Toolbox represents sequences of elements as MATLAB cell arrays where individual cells are 1-by-1 structures describing elements.
The following command creates a simple FODO cell by copying previously created element structures into a cell array fodocell:
fodocell = {QF D1 QD D2 QF};
whos fodocell
Name Size Bytes Class Attributes + QF 1x1 1646 struct

Build lattices

We are ultimately interested in sequences of elements to model storage ring lattices or single-pass beam transport lines.
The next section illustrates building such sequences. Accelerator Toolbox represents sequences of elements as MATLAB cell arrays where individual cells are 1-by-1 structures describing elements.
The following command creates a simple FODO cell by copying previously created element structures into a cell array fodocell:
fodocell = {QF D1 QD D2 QF};
whos fodocell
Name Size Bytes Class Attributes - fodocell 1x5 6890 cell
length is useful to find the number of elements in a sequence:
L = length(fodocell)
L = 5
Use the {:} cell array syntax to print some or all elements:
fodocell{1}
ans = struct with fields:
FamName: 'QF' + fodocell 1x5 6890 cell
length is useful to find the number of elements in a sequence:
L = length(fodocell)
L = 5
Use the {:} cell array syntax to print some or all elements:
fodocell{1}
ans = struct with fields:
FamName: 'QF' PassMethod: 'StrMPoleSymplectic4Pass' Length: 1 Class: 'Quadrupole' @@ -106,7 +108,7 @@ PolynomA: [0 0] MaxOrder: 1 NumIntSteps: 10 -
fodocell{:}
ans = struct with fields:
FamName: 'QF' +
fodocell{:}
ans = struct with fields:
FamName: 'QF' PassMethod: 'StrMPoleSymplectic4Pass' Length: 1 Class: 'Quadrupole' @@ -115,11 +117,11 @@ PolynomA: [0 0] MaxOrder: 1 NumIntSteps: 10 -
ans = struct with fields:
FamName: 'DR01' +
ans = struct with fields:
FamName: 'DR01' PassMethod: 'DriftPass' Length: 3 Class: 'Drift' -
ans = struct with fields:
FamName: 'QD' +
ans = struct with fields:
FamName: 'QD' PassMethod: 'StrMPoleSymplectic4Pass' Length: 1 Class: 'Quadrupole' @@ -128,11 +130,11 @@ PolynomA: [0 0] MaxOrder: 1 NumIntSteps: 10 -
ans = struct with fields:
FamName: 'DR02' +
ans = struct with fields:
FamName: 'DR02' PassMethod: 'DriftPass' Length: 2 Class: 'Drift' -
ans = struct with fields:
FamName: 'QF' +
ans = struct with fields:
FamName: 'QF' PassMethod: 'StrMPoleSymplectic4Pass' Length: 1 Class: 'Quadrupole' @@ -141,9 +143,9 @@ PolynomA: [0 0] MaxOrder: 1 NumIntSteps: 10 -
Let's build a cell array fodoring that represents a closed ring with 10 periods of fodocell the same way we would build any other array in MATLAB from the command line:
fodoring = [fodocell fodocell fodocell fodocell fodocell...
fodocell fodocell fodocell fodocell fodocell];
whos fodoring
Name Size Bytes Class Attributes +
Let's build a cell array fodoring that represents a closed ring with 10 periods of fodocell the same way we would build any other array in MATLAB from the command line:
fodoring = [fodocell fodocell fodocell fodocell fodocell...
fodocell fodocell fodocell fodocell fodocell];
whos fodoring
Name Size Bytes Class Attributes - fodoring 1x50 68900 cell
The first element in fodoring is:
fodoring{1}
ans = struct with fields:
FamName: 'QF' + fodoring 1x50 68900 cell
The first element in fodoring is:
fodoring{1}
ans = struct with fields:
FamName: 'QF' PassMethod: 'StrMPoleSymplectic4Pass' Length: 1 Class: 'Quadrupole' @@ -152,11 +154,11 @@ PolynomA: [0 0] MaxOrder: 1 NumIntSteps: 10 -
To inspect or change the value of a specific field we can use MATLAB syntax for accessing cells in cell arrays and field in structures
oldK = fodoring{1}.K
oldK = 0.2000
fodoring{1}.K = 0.25;
newK = fodoring{1}.K
newK = 0.2500
The lattice fodoring is a variable in MATLAB workspace.
We can use it in accelerator physics functions and scripts.
For example: the function findm44 finds 4-by-4 transverse transfer matrix
M = findm44(fodoring,0)
M = 4×4
-0.6352 11.0305 0 0 +
To inspect or change the value of a specific field we can use MATLAB syntax for accessing cells in cell arrays and field in structures
oldK = fodoring{1}.K
oldK = 0.2000
fodoring{1}.K = 0.25;
newK = fodoring{1}.K
newK = 0.2500
The lattice fodoring is a variable in MATLAB workspace.
We can use it in accelerator physics functions and scripts.
For example: the function findm44 finds 4-by-4 transverse transfer matrix
M = findm44(fodoring,0)
M = 4×4
-0.6352 11.0305 0 0 -0.0763 -0.2497 0 0 0 0 -0.9706 0.3115 0 0 -0.0471 -1.0151 -

Summary

  1. Individual elements are represented by 1-by-1 MATLAB structures,
  2. Sequences of elements (lattices) are represented by 1-dimensional MATLAB cell arrays of structures,
  3. MATLAB syntax for handling structures and cell arrays applies.
No special language is required to define a lattice.
+

Summary

  1. Individual elements are represented by 1-by-1 MATLAB structures,
  2. Sequences of elements (lattices) are represented by 1-dimensional MATLAB cell arrays of structures,
  3. MATLAB syntax for handling structures and cell arrays applies.
No special language is required to define a lattice.

Release notes + +

+r2.3 +

+

+r2.4 +

+

+r2.5 +

+ + + \ No newline at end of file +--> + + diff --git a/docs/atdocs/matlab/release_notes/r2.3.html b/docs/atdocs/matlab/release_notes/r2.3.html index 4bb24d181..d76af1452 100644 --- a/docs/atdocs/matlab/release_notes/r2.3.html +++ b/docs/atdocs/matlab/release_notes/r2.3.html @@ -1,5 +1,5 @@ -2.3

2.5

Main changes

  • A new keyword df is introduced to specify to specify off-momentum computation, in addition to dp and dct. It is available in atsetcavity, findorbit*, findm44, atlinopt*, tunechrom,
  • Dipole radiation tapering can be set using attapering.
  • A set of new "exact" integrators is introduced: `ExactDriftPass`, `ExactMultipolePass`, `ExactSectorBendPass`, `ExactRectangularBendPass`.

New features

  • "atsummary", "ringpara" and "atx" use "atlinopt6" for optics by @lfarv in #500,
  • Introduce an RF frequency shift input `df` to specify off-momentum computation by @lfarv in #501,
  • Variable multipole by @swhite2401 in #510,
  • Set a dipole radiation tapering by @swhite2401 in #623,
  • Matlab frequency control by @lfarv in #560,
  • Introduction of an "energy loss" element by @lfarv in #632,
  • New Matlab function atsimplering by @lfarv in #657,
  • Create BndStrMPoleSymplectic4RadPass by @catohxb in #665.
  • New integrators: ExactDriftPass, ExactMultipolePass by @lfarv in #581

Bug fixes

  • quantpass bugfixes by @swhite2401 in #504,
  • Take "QuantPass" into account when checking 6D motion by @lfarv in #507,
  • Remove spurious printout by @lfarv in #509,
  • Secure the emittance computation in atsummary and ringpara by @lfarv in #511,
  • Failure of GitHub action for Matlab compilation error by @lfarv in #535,
  • Use the ct coordinate in the variable multipole pass method by @carmignani in #532,
  • Update quantum diffusion pass methods by @lfarv in #534,
  • Do not split elements with IdTablePass method by @oscarxblanco in #563,
  • Bug fix on atrotatelattice by @lfarv in #569,
  • ringparam always returns an emittance by @swhite2401 in #583,
  • Fixes bug producing infrequent NaN from calcnaff by @pcsch in #587,
  • Correct return type of wakefunc_long_resonator by@lfarv in #591,
  • Fix compilation with OPENMP=1 by @lfarv in #607,
  • atreduce: check entrance and exit angles in bends by @lfarv in #604,
  • Process aperture limitation and misalignment in CorrectorPass by @swhite2401 in #623,
  • Fix at disable_6d by @lfarv in #625,
  • Don't automatically cache the location of RF cavities by @lfarv in #640,
  • fix: ring phase advances in computeRDT.m by @wei0852 in #652,
  • Bug fix in atdisable_6d: keep the Energy field in cavities. by @lfarv in #654,
  • Fix atmaincavities by @lfarv in #656,
  • Correct the attribute name of solenoids in Matlab by @lfarv in #663,
  • Bug fix in atgeometry by @lfarv in #667,
  • Improve the performance of atsummary by @lnadolski in #688

New Contributors

+
+ +
\ No newline at end of file diff --git a/docs/atdocs/matlab/ugsummary.html b/docs/atdocs/matlab/ugsummary.html index a39639c50..2d475e6df 100644 --- a/docs/atdocs/matlab/ugsummary.html +++ b/docs/atdocs/matlab/ugsummary.html @@ -1,12 +1,17 @@ - - - - - AT User Guide + +

+Element creation +

+

+Element manipulation +

+

+Lattice manipulation +

+

+Loading and Saving lattices +

+

+Linear optics +

+

+Radiation +

+

+Parameter summary +

+

+Physics +

+ + + \ No newline at end of file +--> + + diff --git a/docs/m/index.rst b/docs/m/index.rst index 990c130b7..b9a986931 100644 --- a/docs/m/index.rst +++ b/docs/m/index.rst @@ -32,3 +32,4 @@ higher-level functions to provide physics results. releases/r2.3 releases/r2.4 + releases/r2.5 diff --git a/docs/m/releases/r2.5.rst b/docs/m/releases/r2.5.rst new file mode 100644 index 000000000..a5d05659b --- /dev/null +++ b/docs/m/releases/r2.5.rst @@ -0,0 +1,19 @@ +.. role:: hidden + +############# +:hidden:`2.5` +############# + +.. raw:: html + + + diff --git a/machine_data/Contents.m b/machine_data/Contents.m new file mode 100644 index 000000000..488f9aeda --- /dev/null +++ b/machine_data/Contents.m @@ -0,0 +1,19 @@ +% MACHINE_DATA +% See also +% +% Contents file for MACHINE_DATA and its subfolders. +% +% MACHINE_DATA +% australian_synchrotron +% dba - Create dba lattice +% esrf +% FODO - P1Dr=atdrift('Dr',0.1); +% soleil - Loads SOLEIL lattice +% sp3v81f - All the dipole and quadrupole lengths are effective lengths +% spear2 - Example lattice definition file +% spear2rad - Example lattice definition file with CAVITY and CLASSICAL radiation +% spear2resp - Example SPEAR2 lattice with orbit correctors and BPMS +% spear3 - Load the SPEAR3 lattice structure +% thomx +% +% This file was generated by updateContents.m on 06 Nov 2023 at 14:58:13.