bpmorbit/generate_mover_scan.c

Go to the documentation of this file.
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   // Loop over the events and generate the positions
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     // Note the negative - a bpm move causes the beam to move in the opposite direction
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 }

Generated on Thu Jan 10 10:18:04 2008 for libbpm by  doxygen 1.5.1