bpmorbit/generate_corr_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_corr_scan(  bpmconf_t* bpm, beamconf_t* beam, int num_evts,
00009                          int num_steps, double angle_range, double angle,
00010                          double z_pos ) {
00011 
00012   if ( ! bpm ) {
00013     bpm_error( "Invalid pointer arguments in generate_corr_scan(...)",
00014                __FILE__, __LINE__ ); 
00015     return BPM_FAILURE;
00016   }
00017 
00018   if ( ! beam ) {
00019     bpm_error( "Invalid pointer arguments in generate_corr_scan(...)",
00020                __FILE__, __LINE__ ); 
00021     return BPM_FAILURE;
00022   }
00023 
00024   if ( num_evts == 0 ) {
00025     bpm_warning( "Zero events given as an argument to generate_corr_scan(...)",
00026                __FILE__, __LINE__ ); 
00027     return BPM_FAILURE;
00028   }
00029 
00030   if ( num_steps == 0 ) {
00031     bpm_error( "Zero steps given as an argument to generate_corr_scan(...)",
00032                __FILE__, __LINE__ ); 
00033     return BPM_FAILURE;
00034   }
00035   
00036   double step = 0;
00037   int evt = 0;
00038   double z_diff = bpm->geom_pos[2] - z_pos;
00039   angle *= 1.e-6;
00040   z_diff *= 1.e6; // Change to microns from metres
00041 
00042   // Loop over the events and generate the positions
00043   for (evt = 0; evt < num_evts * num_steps; evt++ ) {
00044 
00045     double curr_angle = -angle_range / 2. + step * angle_range / (double) (num_steps - 1);
00046     curr_angle *= 1.e-6;
00047 
00048     beam[evt].beampos[0] += cos( angle ) * z_diff * tan( curr_angle );
00049     beam[evt].beampos[1] += sin( angle ) * z_diff * tan( curr_angle );
00050     beam[evt].beamslope[0] += curr_angle * 1.e6;
00051     beam[evt].beamslope[1] += angle * 1.e6;
00052 
00053     if ( (( evt % num_evts ) == 0) && ( evt > 0 )) step++;
00054 
00055   }
00056     
00057   return BPM_SUCCESS;
00058 }

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