00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00315 #ifndef BPMPROCESS_H__
00316 #define BPMPROCESS_H__
00317
00318
00319
00320
00321 #include <float.h>
00322 #include <math.h>
00323 #include <bpm/bpm_defs.h>
00324 #include <bpm/bpm_interface.h>
00325 #include <bpm/bpm_wf.h>
00326 #include <bpm/bpm_dsp.h>
00327
00328
00329
00330
00331 #define PROC_DEFAULT 0
00332 #define PROC_DO_FFT 0x00000001
00333 #define PROC_DO_FIT 0x00000002
00334 #define PROC_DO_DDC 0x00000004
00335 #define PROC_DDC_CALIBFREQ 0x00000008
00336 #define PROC_DDC_CALIBTDECAY 0x00000010
00337 #define PROC_DDC_FITFREQ 0x00000020
00338 #define PROC_DDC_FITTDECAY 0x00000040
00339 #define PROC_DDC_FFTFREQ 0x00000080
00340 #define PROC_DDC_FFTTDECAY 0x00000100
00341 #define PROC_DDC_FULL 0x00000200
00342 #define PROC_FIT_DDC 0x00000400
00343 #define PROC_FIT_FFT 0x00000800
00344 #define PROC_RAW_PHASE 0x00001000
00345 #define PROC_CORR_AMP 0x00002000
00346 #define PROC_CORR_PHASE 0x00004000
00347 #define PROC_CORR_GAIN 0x00006000
00348
00349
00350
00351
00352 #ifdef __cplusplus
00353 extern "C" {
00354 #endif
00355
00356
00357
00358
00359
00360
00361
00377 EXTERN int process_diode( doublewf_t *signal, bpmconf_t *conf, bpmproc_t *proc );
00378
00379
00394 EXTERN int process_monopole( doublewf_t *signal, bpmconf_t *bpm, bpmcalib_t *cal, bpmproc_t *proc,
00395 bpmproc_t *trig, unsigned int mode );
00396
00397
00414 EXTERN int process_dipole( doublewf_t *signal, bpmconf_t *bpm, bpmcalib_t *cal, bpmproc_t *proc,
00415 bpmproc_t *trig, bpmproc_t *ampref, bpmproc_t *phaseref,
00416 unsigned int mode );
00417
00461 EXTERN int process_waveform( doublewf_t *signal, bpmconf_t *bpm, bpmproc_t *proc,
00462 bpmproc_t *trig, unsigned int mode );
00463
00464
00465
00466
00491 EXTERN int postprocess_waveform( bpmconf_t *bpm, bpmproc_t *proc, bpmcalib_t *cal,
00492 bpmproc_t *ampref, bpmproc_t *phaseref, unsigned int mode );
00493
00494
00495
00496
00497
00498
00516 EXTERN int process_caltone( doublewf_t *signal, bpmconf_t *bpm, bpmproc_t *proc,
00517 unsigned int mode );
00518
00519
00537 EXTERN int correct_gain( bpmproc_t *proc, bpmcalib_t *cal, unsigned int mode );
00538
00539
00540
00541
00563 EXTERN int fit_waveform( doublewf_t *w, double t0,
00564 double i_freq, double i_tdecay, double i_amp, double i_phase,
00565 double *freq, double *tdecay, double *amp, double *phase );
00566
00567
00572 EXTERN int fit_diodepulse( doublewf_t *w, double *t0 );
00573
00574
00575
00586 EXTERN int fft_waveform( doublewf_t *w, complexwf_t *ft );
00587
00588
00606 EXTERN int fit_fft_prepare( complexwf_t *ft, int *n1, int *n2,
00607 double *amp, double *freq, double *fwhm );
00608
00609
00632 EXTERN int fit_fft( complexwf_t *ft, double *freq, double *tdecay, double *A, double *C );
00633
00634
00635
00636
00637
00659 EXTERN int check_saturation( doublewf_t *w, int nbits, int *iunsat );
00660
00661
00674 EXTERN int downmix_waveform( doublewf_t *w, double frequency, complexwf_t *out );
00675
00676
00681 EXTERN int ddc_waveform( doublewf_t *w, double frequency, filter_t *filt, complexwf_t *dc,
00682 doublewf_t *buf_re, doublewf_t *buf_im );
00683
00684
00693 EXTERN int ddc_sample_waveform( doublewf_t *w, double frequency, filter_t *filt, int iSample,
00694 double t0, double tdecay, double *amp, double *phase,
00695 doublewf_t *buf_re, doublewf_t *buf_im );
00696
00711 EXTERN int get_pedestal( doublewf_t *wf, int range, double *offset, double *rms );
00712
00713
00727 EXTERN int get_t0( doublewf_t *w, double *t0 );
00728
00729
00730
00731
00732
00749 EXTERN int get_IQ( double amp, double phase, double refamp, double refphase,
00750 double *Q, double *I );
00751
00752
00768 EXTERN int get_pos( double Q, double I, double IQphase, double posscale,
00769 double *pos );
00770
00771
00772
00788 EXTERN int get_slope( double Q, double I, double IQphase, double slopescale,
00789 double *slope );
00790
00791 #ifdef __cplusplus
00792 }
00793 #endif
00794
00795 #endif
00796
00797