/ATF2/FlightSim/latticeFiles/src/v4/get_ATF2_sexts_I.m

http://atf2flightsim.googlecode.com/ · MATLAB · 143 lines · 85 code · 19 blank · 39 comment · 7 complexity · 00e646e4ed80ad024a7d26daf2881fb4 MD5 · raw file

  1. function [Isext,GL]=get_ATF2_sexts_I(KL,energy,fflag)
  2. %
  3. % [Isext,GL]=get_ATF2_sexts_I(KL,energy,fflag);
  4. %
  5. % Compute ATF2 sext currents from KLs and beam energy
  6. %
  7. % INPUTS:
  8. %
  9. % KL = sext KLs (1/m^2) [5 element array]
  10. % energy = beam energy (GeV)
  11. % fflag = (optional) if present and zero, fudge factors will not be used
  12. %
  13. % The order of sextupole currents must be:
  14. %
  15. % SF6FF,SF5FF,SD4FF,SF1FF,SD1FF
  16. %
  17. % OUTPUTS:
  18. %
  19. % Isext = ATF2 sext currents (amps)
  20. % GL = integrated sext strengths (kG/m)
  21. Nsext=5;
  22. % check input args
  23. if (nargin<2)
  24. error('At least 2 input arguments required')
  25. end
  26. if (length(KL)~=Nsext)
  27. error('Incorrect KL length')
  28. end
  29. if (energy<=0)
  30. error('Bad energy value')
  31. end
  32. if (nargin==2)
  33. fudge=1;
  34. else
  35. fudge=(fflag~=0);
  36. end
  37. % ==============================================================================
  38. %
  39. % ATF2 SEXTUPOLE MAGNET DATA
  40. %
  41. % ==============================================================================
  42. % there are 2 types of ATF2 sextupole:
  43. % 1 = 1.625SX3.53 (SLC)
  44. % 2 = 2.13S3.00 (FFTB)
  45. r0=[0.020638;0.02705]; % poletip radius (m)
  46. sleff=[0.32834*0.3048;0.1]; % effective length (m)
  47. % MMS data for sext types (I is amp, B is T @ r0)
  48. % (from: SLC FF "SX3" polynomials
  49. % ATF$MAG:MAG_KI_S_SLAC_213.FOR)
  50. Nmms=[6;21];
  51. sI=[ ...
  52. 0.0, 0.0; ...
  53. 10.0, 0.5; ...
  54. 20.0, 1.0; ...
  55. 30.0, 1.5; ...
  56. 40.0, 2.0; ...
  57. 50.0, 2.5; ...
  58. 0 , 3.0; ...
  59. 0 , 3.5; ...
  60. 0 , 4.0; ...
  61. 0 , 4.5; ...
  62. 0 , 5.0; ...
  63. 0 , 5.5; ...
  64. 0 , 6.0; ...
  65. 0 , 6.5; ...
  66. 0 , 7.0; ...
  67. 0 , 7.5; ...
  68. 0 , 8.0; ...
  69. 0 , 8.5; ...
  70. 0 , 9.0; ...
  71. 0 , 9.5; ...
  72. 0 ,10.0; ...
  73. ];
  74. sB=[ ...
  75. 0.000000,0.000000; ...
  76. 0.051997,0.004694; ...
  77. 0.100725,0.010154; ...
  78. 0.149881,0.015612; ...
  79. 0.199296,0.021068; ...
  80. 0.248563,0.026522; ...
  81. 0 ,0.031973; ...
  82. 0 ,0.037422; ...
  83. 0 ,0.042868; ...
  84. 0 ,0.048312; ...
  85. 0 ,0.053753; ...
  86. 0 ,0.059190; ...
  87. 0 ,0.064624; ...
  88. 0 ,0.070054; ...
  89. 0 ,0.075480; ...
  90. 0 ,0.080900; ...
  91. 0 ,0.086314; ...
  92. 0 ,0.091722; ...
  93. 0 ,0.097121; ...
  94. 0 ,0.102511; ...
  95. 0 ,0.107890; ...
  96. ];
  97. % sextupole types and polarities
  98. stype=[1,1,1,2,2];
  99. ssgn=[+1,-1,+1,-1,+1];
  100. % "Kubo" fudge factors
  101. % (none defined at this time ... )
  102. sfudge=zeros(Nsext,1);
  103. % ==============================================================================
  104. % compute rigidity
  105. Cb=1e10/2.99792458e8; % kG-m/GeV
  106. brho=Cb*energy;
  107. % compute sextupole strengths
  108. % (NOTE: polynomial evaluation is not presently used to convert current
  109. % to gradient ... linear interpolation of MMS data is used)
  110. GL=zeros(Nsext,1);
  111. Isext=zeros(Nsext,1);
  112. for n=1:Nsext
  113. if (KL(n)==0)
  114. GL(n)=0;
  115. Isext(n)=0;
  116. else
  117. GL(n)=brho*KL(n); % kG/m
  118. nt=stype(n);
  119. B=0.5*brho*KL(n)*r0(nt)^2/sleff(nt); % kG
  120. B=0.1*B; % T
  121. if (fudge),B=B*(1+sfudge(n));end % apply the fudge factor
  122. Isext(n)=interp1(sB(1:Nmms(nt),nt),sI(1:Nmms(nt),nt),abs(B),'linear');
  123. end
  124. end