PageRenderTime 41ms CodeModel.GetById 11ms RepoModel.GetById 0ms app.codeStats 0ms

/ATF2/FlightSim/coreApps/changeP.m

http://atf2flightsim.googlecode.com/
MATLAB | 94 lines | 73 code | 6 blank | 15 comment | 14 complexity | cd6d1067026bee46f53151940c482b2d MD5 | raw file
Possible License(s): BSD-2-Clause, LGPL-2.0, IPL-1.0, BSD-3-Clause
  1. function stat=changeP(dp,df)
  2. %
  3. % stat=changeP(0.01); % P=P0*(1+0.01)
  4. %
  5. % Change beam momentum by dp*(design momentum) for dispersion measurement
  6. % (change relative to beam first time this function is run; reset reference P
  7. % for this by issuing "clear changeP" command)
  8. %
  9. % stat=changeP(~,'on'); % turn DR RF-ramp ON
  10. % stat=changeP(~,-2); % set DR RF-ramp dF= -2 kHz
  11. % stat=changeP(~,'off'); % turn DR RF-ramp OFF
  12. global FL BEAMLINE
  13. persistent initX
  14. debug=false;
  15. if (debug)
  16. fprintf(1,'NOTE: "debug" flag set in changeP\n');
  17. end
  18. stat{1}=1;
  19. if (~isnumeric(dp))
  20. stat{1}=-1;
  21. stat{2}='changeP: dp arg must be numeric';
  22. return
  23. end
  24. twoargs=exist('df','var');
  25. if (isequal(FL.mode,'trusted')&&(~FL.isthread)) % server
  26. if (FL.SimMode)
  27. % save initial beam
  28. if (isempty(initX)||isempty(initX{FL.simBeamID}))
  29. initX{FL.simBeamID}=FL.SimBeam{FL.simBeamID}.Bunch.x;
  30. end
  31. if (twoargs&&ischar(df))
  32. return % 'on' and 'off' are no-ops in simulation mode
  33. end
  34. % for simulation case, change input beam momentum (dp required)
  35. if (debug)
  36. if (twoargs)
  37. fprintf(1,'changeP: dp=%s , df=%s\n',num2str(dp),num2str(df));
  38. else
  39. fprintf(1,'changeP: dp=%s\n',num2str(dp));
  40. end
  41. else
  42. FL.SimBeam{FL.simBeamID}.Bunch.x(6,:)= ...
  43. initX{FL.simBeamID}(6,:)+BEAMLINE{1}.P*dp ;
  44. % also change initial beam conditions
  45. FL.SimBeam{FL.simBeamID}.Bunch.x(1,:)= ...
  46. initX{FL.simBeamID}(1,:)+FL.SimModel.Initial.x.Twiss.eta*dp;
  47. FL.SimBeam{FL.simBeamID}.Bunch.x(2,:)= ...
  48. initX{FL.simBeamID}(2,:)+FL.SimModel.Initial.x.Twiss.etap*dp;
  49. FL.SimBeam{FL.simBeamID}.Bunch.x(3,:)= ...
  50. initX{FL.simBeamID}(3,:)+FL.SimModel.Initial.y.Twiss.eta*dp;
  51. FL.SimBeam{FL.simBeamID}.Bunch.x(4,:)= ...
  52. initX{FL.simBeamID}(4,:)+FL.SimModel.Initial.y.Twiss.etap*dp;
  53. end % if debug
  54. else
  55. % use control system interface (df required)
  56. if (~twoargs)
  57. stat{1}=-1;
  58. stat{2}='changeP: df arg required';
  59. return
  60. end
  61. if (debug)
  62. if (ischar(df))
  63. fprintf(1,'changeP: dp=%s , df=''%s''\n',num2str(dp),df);
  64. else
  65. fprintf(1,'changeP: dp=%s , df=%s\n',num2str(dp),num2str(df));
  66. end
  67. stat{1}=1;
  68. else
  69. stat=DRRF_RampControl(df); % df= 'on', 'off', or dF (kHz)
  70. end
  71. end % if FL.SimModel
  72. else % client
  73. % forward request to server
  74. if (twoargs)
  75. cmd=['changeP(',num2str(dp,FL.comPrec),','];
  76. if (ischar(df))
  77. cmd=[cmd,'''',df,''')'];
  78. else
  79. cmd=[cmd,num2str(df,FL.comPrec),')'];
  80. end
  81. else
  82. cmd=['changeP(',num2str(dp,FL.comPrec),')'];
  83. end
  84. stat=sockrw('writechar','cas',cmd);
  85. if (stat{1}~=1),return,end
  86. sockrw('readchar','cas',10);
  87. end % if trusted
  88. end