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 #define NMAX_MODES 10
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
00062
00063 typedef struct bpmconf bpmconf_t;
00064 typedef struct bpmsignal bpmsignal_t;
00065 typedef struct bpmcalib bpmcalib_t;
00066 typedef struct bpmproc bpmproc_t;
00067 typedef struct beamconf beamconf_t;
00068 typedef struct bpmmode bpmmode_t;
00069 typedef struct rfmodel rfmodel_t;
00070
00071
00075 struct bpmconf {
00076 char name[20];
00078 enum bpmtype_t cav_type;
00079 enum bpmpol_t cav_polarisation;
00080 enum bpmphase_t cav_phasetype;
00082 rfmodel_t *cav_model;
00083 double cav_length;
00085 double cav_freq;
00086 double cav_decaytime;
00087 double cav_phase;
00088 double cav_iqrotation;
00089 double cav_chargesens;
00090 double cav_possens;
00091 double cav_tiltsens;
00093 double rf_LOfreq;
00095 double digi_trigtimeoffset;
00096 double digi_freq;
00097 int digi_nbits;
00098 int digi_nsamples;
00099 double digi_ampnoise;
00100 int digi_voltageoffset;
00101 double digi_phasenoise;
00104 double geom_pos[3];
00105 double geom_tilt[3];
00107 int ref_idx;
00108 int diode_idx;
00109 };
00110
00111
00115 struct bpmsignal {
00116 int *wf;
00117 int ns;
00118 };
00119
00120
00124 struct bpmcalib {
00125 double freq;
00126 double tdecay;
00127 double ddcfiltBW;
00128 double ddcepsFilt;
00129 double t0Offset;
00130 double IQphase;
00131 double posscale;
00132 double slopescale;
00133 };
00134
00138 struct bpmproc {
00139
00140 double ampnoise;
00141 double voltageoffset;
00143 double t0;
00145 double **ddcwf;
00146 double **fftwf;
00148 int fft_success;
00149 double fft_freq;
00150 double fft_tdecay;
00152 int ddc_success;
00153 double ddc_Q;
00154 double ddc_I;
00155 double ddc_amp;
00156 double ddc_phase;
00157 double ddc_tdecay;
00158 double ddc_pos;
00159 double ddc_slope;
00161 int fit_success;
00162 double fit_Q;
00163 double fit_I;
00164 double fit_amp;
00165 double fit_phase;
00166 double fit_freq;
00167 double fit_tdecay;
00168 double fit_pos;
00169 double fit_slope;
00170 };
00171
00172
00176 struct beamconf {
00177 double energy;
00178 double sig_energy;
00179 double charge;
00180 double sig_charge;
00182 double bunchlength;
00184 double arrival_time;
00186 double beampos[2];
00187 double beamslope[2];
00188 double bunchtilt[2];
00190 double bpmhit[3];
00191 double bpmslope[2];
00192 double bpmtilt[2];
00193 };
00194
00195
00196
00201 struct bpmmode {
00202 char name[20];
00203 double frequency;
00204 double Q;
00205 int order;
00206 enum bpmpol_t polarisation;
00207 double sensitivity;
00208 };
00209
00213 struct rfmodel {
00214 char name[20];
00215 int nmodes;
00216 bpmmode_t *mode[NMAX_MODES];
00217 };
00218
00219
00220
00221
00222
00223
00224
00225 EXTERN int bpm_verbose;
00282 EXTERN int load_bpmconf( const char *fname, bpmconf_t **conf, int *num_conf );
00283
00284
00301 EXTERN int get_header( FILE *file, double *version, int *num_structs );
00302
00303
00320 EXTERN int load_struct( FILE *file, char ***arg_list, char ***val_list, int *num_args );
00321
00322
00332 EXTERN int save_signals( char *fname, bpmsignal_t *sigs, int num_evts );
00333
00334
00343 EXTERN int load_signals( char *fname, bpmsignal_t **sigs );
00344
00345
00346
00347
00348 #ifdef __cplusplus
00349 }
00350 #endif
00351
00352
00353 #endif
00354
00355