00001
00005 #include <stdio.h>
00006 #include <bpm/bpm_messages.h>
00007 #include <bpm/bpm_process.h>
00008
00009 int process_diode( doublewf_t *signal, bpmconf_t *conf, bpmproc_t *proc ) {
00010
00011 static char msg[128];
00012 int i, ok = 0;
00013 wfstat_t s;
00014
00015 if ( ! conf || ! signal || ! proc ) {
00016 bpm_error( "Invalid pointer arguments in process_diode(...)",
00017 __FILE__, __LINE__ );
00018 return BPM_FAILURE;
00019 }
00020
00021 if ( ! signal ) {
00022 sprintf( msg, "Invalid signal pointer for %s in process_diode(...)", conf->name );
00023 bpm_error( msg, __FILE__, __LINE__ );
00024 return BPM_FAILURE;
00025 }
00026
00027 if ( conf->cav_type == diode ) {
00028
00029
00030
00031 if ( fit_diodepulse( signal, &(proc->t0) ) == BPM_FAILURE ) {
00032 proc->t0 = 0.;
00033 bpm_error( "Could not fit the diode pulse in process_diode(...)",
00034 __FILE__, __LINE__ );
00035 return BPM_FAILURE;
00036 }
00037
00038 } else if ( conf->forced_trigger ) {
00039
00040
00041 doublewf_basic_stats( signal, 0, 20, &s );
00042 for ( i=0; i<signal->ns; i++ ) {
00043
00044
00045 if ( fabs(signal->wf[i] - s.mean) > 10. * s.rms ) {
00046 proc->t0 = (double) i / signal->fs;
00047 ok = 1;
00048 break;
00049 }
00050 }
00051
00052 if ( ok != 1 ) {
00053 proc->t0 = 0.;
00054 sprintf( msg, "No onset of waveform found for %s in process_diode(...), pulse probably noise",
00055 conf->name );
00056 bpm_error( msg, __FILE__, __LINE__ );
00057 return BPM_FAILURE;
00058 }
00059 } else {
00060
00061
00062 sprintf( msg, "Try to handle BPM %s through process_diode(...), don't think you want this...",
00063 conf->name );
00064 bpm_error( msg, __FILE__, __LINE__ );
00065 return BPM_FAILURE;
00066 }
00067
00068 return BPM_SUCCESS;
00069 }
00070