aboutsummaryrefslogtreecommitdiff
path: root/src/zdab_utils.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/zdab_utils.c')
-rw-r--r--src/zdab_utils.c316
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);