00001
00005 #include <bpm/bpm_messages.h>
00006 #include <bpm/bpm_orbit.h>
00007
00008 int generate_mover_scan( beamconf_t* beam, int num_evts, int num_steps,
00009 double mover_range, double angle ) {
00010
00011 if ( ! beam ) {
00012 bpm_error( "Invalid pointer arguments in generate_mover_scan(...)",
00013 __FILE__, __LINE__ );
00014 return BPM_FAILURE;
00015 }
00016
00017 if ( num_evts == 0 ) {
00018 bpm_warning( "Zero events given as an argument to generate_mover_scan(...)",
00019 __FILE__, __LINE__ );
00020 return BPM_FAILURE;
00021 }
00022
00023 if ( num_steps == 0 ) {
00024 bpm_error( "Zero steps given as an argument to generate_mover_scan(...)",
00025 __FILE__, __LINE__ );
00026 return BPM_FAILURE;
00027 }
00028
00029 double step = 0;
00030 int evt = 0;
00031 angle *= 1.e-6;
00032
00033
00034 for (evt = 0; evt < num_evts * num_steps; evt++ ) {
00035 double curr_move = -mover_range / 2. + step * mover_range / (double) (num_steps - 1);
00036
00037
00038 beam[evt].beampos[0] -= cos( angle ) * curr_move;
00039 beam[evt].beampos[1] -= sin( angle ) * curr_move;
00040
00041 if ( (( evt % num_evts ) == 0) && ( evt > 0 )) step++;
00042 }
00043
00044 return BPM_SUCCESS;
00045 }