00001
00006 #include <bpm/bpm_simulation.h>
00007
00008 int generate_bpmsignal( bpmconf_t *bpm, beamconf_t *beam, doublewf_t *rf ) {
00009
00010 int i = 0;
00011 static char msg[80];
00012 complexwf_t *rf_compl;
00013 doublewf_t *rf_im;
00014
00015 if ( ! bpm || ! beam || ! rf ) {
00016 bpm_error( "Invalid pointer arguments in generate_bpmsignal(...)",
00017 __FILE__, __LINE__ );
00018 return BPM_FAILURE;
00019 }
00020
00021
00022 doublewf_reset( rf );
00023
00024 rf_compl = complexwf( rf->ns, rf->fs );
00025 rf_im = doublewf( rf->ns, rf->fs );
00026
00027
00028 for ( i=0; i<bpm->cav_model->nmodes; i++ ) {
00029
00030 if ( add_mode_response( rf_compl, bpm, bpm->cav_model->mode[i], beam ) ) {
00031 sprintf( msg, "Cannot add response for mode %s in generate_bpmsignal",
00032 bpm->cav_model->mode[i]->name );
00033 bpm_error( msg, __FILE__, __LINE__ );
00034 return BPM_FAILURE;
00035 }
00036
00037 }
00038
00039 complexwf_getreal( rf, rf_compl );
00040 complexwf_getimag( rf_im, rf_compl );
00041 doublewf_add( rf, rf_im );
00042
00043 complexwf_delete( rf_compl );
00044 doublewf_delete( rf_im );
00045
00046 return BPM_SUCCESS;
00047 }