diff options
author | tlatorre <tlatorre@uchicago.edu> | 2019-06-19 09:55:17 -0500 |
---|---|---|
committer | tlatorre <tlatorre@uchicago.edu> | 2019-06-19 09:55:17 -0500 |
commit | 056baf97d087ca88d23147761f5b2a6bac4286a3 (patch) | |
tree | 88f30cd09c54780dfddd33f675aee5c15b6a2094 /src/zdab_utils.c | |
parent | 7a4c7f3d64f05b9c4de0f45c6f4091c6c31ee173 (diff) | |
download | sddm-056baf97d087ca88d23147761f5b2a6bac4286a3.tar.gz sddm-056baf97d087ca88d23147761f5b2a6bac4286a3.tar.bz2 sddm-056baf97d087ca88d23147761f5b2a6bac4286a3.zip |
add FTP, RSP, and FTK results to the output file
Diffstat (limited to 'src/zdab_utils.c')
-rw-r--r-- | src/zdab_utils.c | 316 |
1 files changed, 316 insertions, 0 deletions
diff --git a/src/zdab_utils.c b/src/zdab_utils.c index 20c33aa..ca0e3dc 100644 --- a/src/zdab_utils.c +++ b/src/zdab_utils.c @@ -24,6 +24,8 @@ #include "zebra.h" #include "misc.h" +char zdab_err[256]; + size_t get_nhit(event *ev) { /* Returns the number of PMT hits in event `ev`. @@ -264,6 +266,320 @@ void swap_int16(int16_t *val_pt, int count) return; } +/* Get and unpack the FTPV bank. + * + * Returns 0 if successful, or -1 on error. If there was an error, the error + * string is printed to zdab_err. */ +int get_ftpv(zebraFile *f, zebraBank *ev, FTPVBank *bftpv) +{ + int rv; + zebraBank ft, ftp, ftpv; + + if (ev->links[KEV_FT-1] == 0) { + sprintf(zdab_err, "FT link is zero!"); + goto err; + } + + rv = zebra_get_bank(f,&ft,ev->links[KEV_FT-1]); + + if (rv) { + sprintf(zdab_err, "error getting FT bank: %s", zebra_err); + goto err; + } + + if (ft.links[KFT_FTP-1] == 0) { + sprintf(zdab_err, "FTP link is zero!"); + goto err; + } + + rv = zebra_get_bank(f,&ftp,ft.links[KFT_FTP-1]); + + if (rv) { + sprintf(zdab_err, "error getting FTP bank: %s", zebra_err); + goto err; + } + + if (ftp.links[KFTX_FTXV-1] == 0) { + sprintf(zdab_err, "FTXV link is zero!"); + goto err; + } + + rv = zebra_get_bank(f,&ftpv,ftp.links[KFTX_FTXV-1]); + + if (rv) { + sprintf(zdab_err, "error getting FTXV bank: %s", zebra_err); + goto err; + } + + unpack_ftpv(ftpv.data,bftpv); + + return 0; + +err: + + return -1; +} + + +/* Get and unpack the FTXK bank from the FTP fitter. + * + * Returns 0 if successful, or -1 on error. If there was an error, the error + * string is printed to zdab_err. */ +int get_ftxk(zebraFile *f, zebraBank *ev, FTXKBank *bftxk) +{ + int rv; + zebraBank ft, ftp, ftxa, ftxk; + + if (ev->links[KEV_FT-1] == 0) { + sprintf(zdab_err, "FT link is zero!"); + goto err; + } + + rv = zebra_get_bank(f,&ft,ev->links[KEV_FT-1]); + + if (rv) { + sprintf(zdab_err, "error getting FT bank: %s", zebra_err); + goto err; + } + + if (ft.links[KFT_FTP-1] == 0) { + sprintf(zdab_err, "FTP link is zero!"); + goto err; + } + + rv = zebra_get_bank(f,&ftp,ft.links[KFT_FTP-1]); + + if (rv) { + sprintf(zdab_err, "error getting FTP bank: %s", zebra_err); + goto err; + } + + if (ftp.links[KFTX_FTXA-1] == 0) { + sprintf(zdab_err, "FTXA link is zero!"); + goto err; + } + + rv = zebra_get_bank(f,&ftxa,ftp.links[KFTX_FTXA-1]); + + if (rv) { + sprintf(zdab_err, "error getting FTXA bank: %s", zebra_err); + goto err; + } + + if (ftxa.links[KFTXA_FTXK-1] == 0) { + sprintf(zdab_err, "FTXK link is zero!"); + goto err; + } + + rv = zebra_get_bank(f,&ftxk,ftxa.links[KFTXA_FTXK-1]); + + if (rv) { + sprintf(zdab_err, "error getting FTXK bank: %s", zebra_err); + goto err; + } + + unpack_ftxk(ftxk.data, bftxk); + + return 0; + +err: + + return -1; +} + +/* Get and unpack the RSP bank from the FTXR bank from the FTP fitter. + * + * Returns 0 if successful, or -1 on error. If there was an error, the error + * string is printed to zdab_err. */ +int get_rsp(zebraFile *f, zebraBank *ev, RSPBank *brsp) +{ + int rv; + zebraBank ft, ftp, ftxa, ftxr; + + if (ev->links[KEV_FT-1] == 0) { + sprintf(zdab_err, "FT link is zero!"); + goto err; + } + + rv = zebra_get_bank(f,&ft,ev->links[KEV_FT-1]); + + if (rv) { + sprintf(zdab_err, "error getting FT bank: %s", zebra_err); + goto err; + } + + if (ft.links[KFT_FTP-1] == 0) { + sprintf(zdab_err, "FTP link is zero!"); + goto err; + } + + rv = zebra_get_bank(f,&ftp,ft.links[KFT_FTP-1]); + + if (rv) { + sprintf(zdab_err, "error getting FTP bank: %s", zebra_err); + goto err; + } + + if (ftp.links[KFTX_FTXA-1] == 0) { + sprintf(zdab_err, "FTXA link is zero!"); + goto err; + } + + rv = zebra_get_bank(f,&ftxa,ftp.links[KFTX_FTXA-1]); + + if (rv) { + sprintf(zdab_err, "error getting FTXA bank: %s", zebra_err); + goto err; + } + + if (ftxa.links[KFTXA_FTXR-1] == 0) { + sprintf(zdab_err, "FTXR link is zero!"); + goto err; + } + + rv = zebra_get_bank(f,&ftxr,ftxa.links[KFTXA_FTXR-1]); + + if (rv) { + sprintf(zdab_err, "error getting FTXR bank: %s", zebra_err); + goto err; + } + + unpack_rsp(ftxr.data, brsp); + + return 0; + +err: + + return -1; +} + +void unpack_rsp(uint32_t *data, RSPBank *b) +{ + unpack((uint8_t *) data, "f", &b->optical_response); + unpack((uint8_t *) (data+1), "f", &b->nwin); + unpack((uint8_t *) (data+2), "f", &b->nwin2); + unpack((uint8_t *) (data+3), "f", &b->ndark); + unpack((uint8_t *) (data+4), "f", &b->neff); + unpack((uint8_t *) (data+5), "f", &b->ncor); + unpack((uint8_t *) (data+6), "f", &b->ncormc); + unpack((uint8_t *) (data+7), "f", &b->nonline); + unpack((uint8_t *) (data+8), "f", &b->ncal); + unpack((uint8_t *) (data+9), "f", &b->nefficient); + unpack((uint8_t *) (data+10), "f", &b->nworking); + unpack((uint8_t *) (data+11), "f", &b->ene); + unpack((uint8_t *) (data+12), "f", &b->uncertainty); + unpack((uint8_t *) (data+13), "f", &b->quality); + unpack((uint8_t *) (data+14), "f", &b->r_d2o); + unpack((uint8_t *) (data+15), "f", &b->r_acr); + unpack((uint8_t *) (data+16), "f", &b->r_h2o); + unpack((uint8_t *) (data+17), "f", &b->r_fresnel); + unpack((uint8_t *) (data+18), "f", &b->r_mpe); + unpack((uint8_t *) (data+19), "f", &b->r_pmtr); + unpack((uint8_t *) (data+20), "f", &b->r_eff); + unpack((uint8_t *) (data+21), "f", &b->drift); + unpack((uint8_t *) (data+22), "f", &b->nhits); + unpack((uint8_t *) (data+23), "l", &b->fit_idx); + unpack((uint8_t *) (data+24), "f", &b->nwin_allq); + unpack((uint8_t *) (data+25), "f", &b->nhits_allq); + unpack((uint8_t *) (data+26), "f", &b->nhits_dqxx); + unpack((uint8_t *) (data+27), "f", &b->nwin_pt); + unpack((uint8_t *) (data+28), "f", &b->tshift); + unpack((uint8_t *) (data+29), "f", &b->pmt_response); + unpack((uint8_t *) (data+30), "f", &b->alt_energy); + unpack((uint8_t *) (data+31), "f", &b->nckv); + unpack((uint8_t *) (data+32), "f", &b->resolution); + unpack((uint8_t *) (data+33), "f", &b->fom); + unpack((uint8_t *) (data+34), "f", &b->ncd_shad_cor); + unpack((uint8_t *) (data+35), "f", &b->rlambda); + unpack((uint8_t *) (data+36), "f", &b->omega); + unpack((uint8_t *) (data+37), "f", &b->ckvprob); + unpack((uint8_t *) (data+38), "f", &b->chaneff); + unpack((uint8_t *) (data+39), "f", &b->pmteff); + unpack((uint8_t *) (data+40), "f", &b->mpe); + unpack((uint8_t *) (data+41), "f", &b->spare1); + unpack((uint8_t *) (data+42), "f", &b->spare2); + unpack((uint8_t *) (data+43), "f", &b->spare3); + unpack((uint8_t *) (data+44), "f", &b->spare4); + unpack((uint8_t *) (data+45), "f", &b->spare5); + unpack((uint8_t *) (data+46), "f", &b->spare6); + unpack((uint8_t *) (data+47), "f", &b->spare7); + unpack((uint8_t *) (data+48), "f", &b->spare8); + unpack((uint8_t *) (data+49), "f", &b->spare9); +} + +void unpack_ftpt(uint32_t *data, FTPTBank *b) +{ + unpack((uint8_t *) data, "f",&b->u); + unpack((uint8_t *) (data+1), "f",&b->v); + unpack((uint8_t *) (data+2), "f",&b->w); + unpack((uint8_t *) (data+3), "f",&b->du); + unpack((uint8_t *) (data+4), "f",&b->dv); + unpack((uint8_t *) (data+5), "f",&b->dw); +} + +void unpack_ftpv(uint32_t *data, FTPVBank *b) +{ + unpack((uint8_t *) data, "f",&b->x); + unpack((uint8_t *) (data+1), "f",&b->y); + unpack((uint8_t *) (data+2), "f",&b->z); + unpack((uint8_t *) (data+3), "f",&b->t); + unpack((uint8_t *) (data+4), "f",&b->dx); + unpack((uint8_t *) (data+5), "f",&b->dy); + unpack((uint8_t *) (data+6), "f",&b->dz); + unpack((uint8_t *) (data+7), "f",&b->dt); +} + +void unpack_ftxk(uint32_t *data, FTXKBank *b) +{ + unpack((uint8_t *) data, "f",&b->prob); + unpack((uint8_t *) (data+1), "f",&b->energy); + unpack((uint8_t *) (data+2), "f",&b->ene_merr); + unpack((uint8_t *) (data+3), "f",&b->ene_perr); + unpack((uint8_t *) (data+4), "f",&b->neff); + unpack((uint8_t *) (data+5), "f",&b->dir_scale); + unpack((uint8_t *) (data+6), "f",&b->dir_scale_sq); + unpack((uint8_t *) (data+7), "f",&b->scat_scale); + unpack((uint8_t *) (data+8), "f",&b->refl_scale); + unpack((uint8_t *) (data+9), "f",&b->refl_av1_scale); + unpack((uint8_t *) (data+10), "f",&b->refl_av2_scale); + unpack((uint8_t *) (data+11), "f",&b->refl_ncd_scale); + unpack((uint8_t *) (data+12), "f",&b->spare1); + unpack((uint8_t *) (data+13), "f",&b->spare2); + unpack((uint8_t *) (data+14), "f",&b->spare3); + unpack((uint8_t *) (data+15), "f",&b->spare4); + unpack((uint8_t *) (data+16), "f",&b->spare5); +} + +void unpack_ftk(uint32_t *data, FTKBank *b) +{ + unpack((uint8_t *) data, "l",&b->method); + unpack((uint8_t *) (data+1), "l",&b->retc); + unpack((uint8_t *) (data+2), "l",&b->method); + unpack((uint8_t *) (data+3), "l",&b->retc); + unpack((uint8_t *) (data+4), "l",&b->pmt_avail); + unpack((uint8_t *) (data+5), "l",&b->pmt_used); + unpack((uint8_t *) (data+6), "l",&b->early); + unpack((uint8_t *) (data+7), "l",&b->late); + unpack((uint8_t *) (data+8), "l",&b->iter); + unpack((uint8_t *) (data+9), "f",&b->prob); + unpack((uint8_t *) (data+10), "f",&b->energy); + unpack((uint8_t *) (data+11), "f",&b->ene_merr); + unpack((uint8_t *) (data+12), "f",&b->ene_perr); + unpack((uint8_t *) (data+13), "f",&b->neff); + unpack((uint8_t *) (data+14), "f",&b->dir_scale); + unpack((uint8_t *) (data+15), "f",&b->dir_scale_sq); + unpack((uint8_t *) (data+16), "f",&b->scat_scale); + unpack((uint8_t *) (data+17), "f",&b->refl_scale); + unpack((uint8_t *) (data+18), "f",&b->refl_av1_scale); + unpack((uint8_t *) (data+19), "f",&b->refl_av2_scale); + unpack((uint8_t *) (data+20), "f",&b->refl_ncd_scale); + unpack((uint8_t *) (data+21), "f",&b->spare1); + unpack((uint8_t *) (data+22), "f",&b->spare2); + unpack((uint8_t *) (data+23), "f",&b->spare3); + unpack((uint8_t *) (data+24), "f",&b->spare4); + unpack((uint8_t *) (data+25), "f",&b->spare5); +} + void unpack_mcgn(uint32_t *data, MCGNBank *b) { unpack((uint8_t *) data, "l",&b->id); |