00001
00014 #ifndef BPMINTERFACE_H__
00015 #define BPMINTERFACE_H__
00016
00017
00018
00019
00020 #include <stdio.h>
00021 #include <stdlib.h>
00022 #include <string.h>
00023 #include <bpm/bpm_defs.h>
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #ifdef __cplusplus
00034 extern "C" {
00035 #endif
00036
00040 enum bpmtype_t {
00041 diode,
00042 monopole,
00043 dipole
00044 };
00045
00049 enum bpmpol_t {
00050 horiz,
00051 vert
00052 };
00053
00057 enum bpmphase_t {
00058 randomised,
00059 locked
00060 };
00061
00067 enum rffiltertype_t {
00068 nofilter,
00069 butterworth_low_pass,
00070 butterworth_band_pass,
00071 butterworth_high_pass
00072 };
00073
00074
00075 typedef struct bpmconf bpmconf_t;
00076 typedef struct bpmsignal bpmsignal_t;
00077 typedef struct bpmcalib bpmcalib_t;
00078 typedef struct bpmproc bpmproc_t;
00079 typedef struct beamconf beamconf_t;
00085 struct bpmconf {
00086 char name[20];
00088 enum bpmtype_t cav_type;
00089 enum bpmpol_t cav_polarisation;
00090 enum bpmphase_t cav_phasetype;
00092 double cav_freq;
00093 double cav_decaytime;
00094 double cav_phase;
00095 double cav_iqrotation;
00096 double cav_chargesens;
00097 double cav_possens;
00098 double cav_tiltsens;
00100 double rf_LOfreq;
00101 enum rffiltertype_t rf_filtertype;
00102 int rf_nfiltpars;
00103 double *rf_filterpars;
00104 double rf_gain;
00106 double digi_trigtimeoffset;
00107 double digi_freq;
00108 int digi_nbits;
00109 int digi_nsamples;
00110 double digi_ampnoise;
00111 int digi_voltageoffset;
00112 double digi_phasenoise;
00115 double geom_pos[3];
00116 double geom_tilt[3];
00118 int ref_idx;
00119 int diode_idx;
00120 };
00121
00122
00126 struct bpmsignal {
00127 int *wf;
00128 int ns;
00129 };
00130
00131
00135 struct bpmcalib {
00136 double freq;
00137 double tdecay;
00138 double ddcfiltBW;
00139 double ddcepsFilt;
00140 double t0Offset;
00141 double IQphase;
00142 double posscale;
00143 double slopescale;
00144 };
00145
00149 struct bpmproc {
00150
00151 double ampnoise;
00152 double voltageoffset;
00154 double t0;
00156 double **ddcwf;
00157 double **fftwf;
00159 int fft_success;
00160 double fft_freq;
00161 double fft_tdecay;
00163 int ddc_success;
00164 double ddc_Q;
00165 double ddc_I;
00166 double ddc_amp;
00167 double ddc_phase;
00168 double ddc_tdecay;
00169 double ddc_pos;
00170 double ddc_slope;
00172 int fit_success;
00173 double fit_Q;
00174 double fit_I;
00175 double fit_amp;
00176 double fit_phase;
00177 double fit_freq;
00178 double fit_tdecay;
00179 double fit_pos;
00180 double fit_slope;
00181 };
00182
00183
00187 struct beamconf {
00188 double energy;
00189 double sig_energy;
00190 double charge;
00191 double sig_charge;
00193 double arrival_time;
00195 double beampos[2];
00196 double beamslope[2];
00198 double bpmhit[3];
00199 double bpmtilt[3];
00200 };
00201
00202
00203
00204
00205
00206 EXTERN int bpm_verbose;
00266 EXTERN int load_bpmconf( const char *fname, bpmconf_t **conf, int *num_conf );
00267
00268
00285 EXTERN int get_header( FILE *file, double *version, int *num_structs );
00286
00287
00304 EXTERN int load_struct( FILE *file, char ***arg_list, char ***val_list, int *num_args );
00305
00306
00316 EXTERN int save_signals( char *fname, bpmsignal_t *sigs, int num_evts );
00317
00318
00327 EXTERN int load_signals( char *fname, bpmsignal_t **sigs );
00328
00329
00330
00331
00332 #ifdef __cplusplus
00333 }
00334 #endif
00335
00336
00337 #endif
00338
00339