00001 00014 #ifndef BPMINTERFACE_H__ 00015 #define BPMINTERFACE_H__ 00016 00017 /* --------------------------------------------------------------------------------------- 00018 // includes 00019 // ------------------------------------------------------------------------------------ */ 00020 #include <stdio.h> 00021 #include <stdlib.h> 00022 #include <string.h> 00023 #include <bpm/bpm_defs.h> 00024 #include <bpm/bpm_wf.h> 00025 #include <bpm/bpm_dsp.h> 00026 00027 /* ---------------------------------------------------------------------------------------- 00028 // macro definitions 00029 // ------------------------------------------------------------------------------------- */ 00030 00031 /* ---------------------------------------------------------------------------------------- 00032 // typedefs, enums and other declarations 00033 // ------------------------------------------------------------------------------------- */ 00034 #ifdef __cplusplus 00035 extern "C" { 00036 #endif 00037 00041 enum bpmtype_t { 00042 diode, 00043 monopole, 00044 dipole 00045 }; 00046 00050 enum triggertype { 00051 positive, 00052 negative, 00053 bipolar 00054 }; 00055 00059 enum bpmpol_t { 00060 horiz, 00061 vert 00062 }; 00063 00067 enum bpmphase_t { 00068 randomised, 00069 locked 00070 }; 00071 00072 00073 typedef struct bpmconf bpmconf_t; 00074 typedef struct bpmcalib bpmcalib_t; 00075 typedef struct bpmproc bpmproc_t; 00076 typedef struct beamconf beamconf_t; 00077 typedef struct bunchconf bunchconf_t; 00078 typedef struct bpmmode bpmmode_t; 00079 typedef struct rfmodel rfmodel_t; 00080 00081 typedef enum triggertype triggertype_t; 00082 00086 struct bpmconf { 00087 char name[20]; 00089 enum bpmtype_t cav_type; 00090 enum bpmpol_t cav_polarisation; 00091 enum bpmphase_t cav_phasetype; 00093 rfmodel_t *cav_model; 00094 double cav_length; 00095 double cav_freq; 00096 double cav_decaytime; 00097 double cav_phase; 00098 double cav_iqrotation; 00099 double cav_chargesens; 00100 double cav_possens; 00101 double cav_tiltsens; 00103 double rf_LOfreq; 00105 // digitisation configuration parameters 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 /* ------------------- normal waveform processing parameters ----------------------- */ 00116 double t0; 00118 // ddc processing configuration parameters 00119 double ddc_freq; 00120 double ddc_tdecay; 00121 double ddc_tOffset; 00122 filter_t *ddc_filter; 00124 // fit processing configuration parameters 00125 double fit_inifreq; 00126 double fit_initdecay; 00127 double fit_tOffset; 00129 /* -------------------- caltone waveform processing parameters --------------------- */ 00130 double ddc_ct_freq; 00131 filter_t *ddc_ct_filter; 00132 int ddc_ct_iSample; 00135 /* -------------------- geometry of the BPM in the beamline ------------------------ */ 00136 double geom_pos[3]; 00137 double geom_tilt[3]; 00139 /* --------------------- indices to use for user programs -------------------------- */ 00140 int ref_idx; 00141 int diode_idx; 00142 int forced_trigger; 00144 /* ------------------------- some processing buffers ------------------------------- */ 00145 doublewf_t* ddc_buffer_re; 00146 doublewf_t* ddc_buffer_im; 00147 }; 00148 00152 struct bpmcalib { 00153 // ddc calibration constants 00154 double ddc_IQphase; 00155 double ddc_posscale; 00156 double ddc_slopescale; 00157 double ddc_ct_amp; 00158 double ddc_ct_phase; 00160 // fit calibration constants 00161 double fit_IQphase; 00162 double fit_posscale; 00163 double fit_slopescale; 00164 double fit_ct_amp; 00165 double fit_ct_phase; 00166 }; 00167 00171 struct bpmproc { 00172 double ampnoise; 00173 double voltageoffset; 00175 double t0; 00177 int saturated; 00178 int iunsat; 00180 complexwf_t *dc; 00181 complexwf_t *ft; 00183 // FFT parameters 00184 int fft_success; 00185 double fft_amp; 00186 double fft_freq; 00187 double fft_tdecay; 00188 double fft_offset; 00190 // DDC parameters 00191 int ddc_success; 00192 double ddc_tSample; 00193 int ddc_iSample; 00194 double ddc_Q; 00195 double ddc_I; 00196 double ddc_amp; 00197 double ddc_phase; 00198 double ddc_tdecay; 00200 double ddc_pos; 00201 double ddc_slope; 00203 double ddc_ct_amp; 00204 double ddc_ct_phase; 00206 // FIT parameters 00207 int fit_success; 00208 double fit_Q; 00209 double fit_I; 00210 double fit_amp; 00211 double fit_phase; 00212 double fit_freq; 00213 double fit_tdecay; 00214 double fit_offset; 00216 double fit_pos; 00217 double fit_slope; 00219 double fit_ct_amp; 00220 double fit_ct_phase; 00221 }; 00222 00227 struct beamconf { 00228 int train_num; 00230 double beamrate; 00231 double bunchrate; 00232 int nbunches; 00234 bunchconf_t *bunch; 00236 double position[2]; 00237 double positionsigma[2]; 00239 double slope[2]; 00240 double slopesigma[2]; 00242 double tilt[2]; 00243 double tiltsigma[2]; 00245 double bunchlength; 00246 double bunchlengthsigma; 00248 double energy; 00249 double energysigma; 00250 double charge; 00251 double chargesigma; 00252 }; 00253 00260 struct bunchconf { 00261 int train_num; 00262 int bunch_num; 00264 double energy; 00265 double energyspread; 00266 double charge; 00267 double length; 00268 double arrival_time; 00269 double position[2]; 00270 double slope[2]; 00271 double tilt[2]; 00273 double bpmposition[3]; 00274 double bpmslope[2]; 00275 double bpmtilt[2]; 00276 }; 00277 00282 struct bpmmode { 00283 char name[20]; 00284 double frequency; 00285 double Q; 00286 int order; 00287 enum bpmpol_t polarisation; 00288 double sensitivity; 00289 complexwf_t *response; 00290 doublewf_t *buffer; 00291 }; 00292 00296 struct rfmodel { 00297 char name[20]; 00298 int nmodes; 00299 bpmmode_t *mode; 00300 }; 00301 00302 00303 00304 00305 /* ----------------------------------------------------------------------------- 00306 function prototypes and declarations 00307 -------------------------------------------------------------------------- */ 00308 EXTERN int bpm_verbose; 00309 EXTERN int libbpm_evtnum; 00312 #ifdef __cplusplus 00313 } 00314 #endif 00315 00316 00317 #endif /* #ifndef BPMINTERFACE_H__ */ 00318 00319 /* ================================ end of file ============================= */