diff options
Diffstat (limited to 'src/test-find-peaks.c')
-rw-r--r-- | src/test-find-peaks.c | 194 |
1 files changed, 120 insertions, 74 deletions
diff --git a/src/test-find-peaks.c b/src/test-find-peaks.c index c82f9ec..ccd581c 100644 --- a/src/test-find-peaks.c +++ b/src/test-find-peaks.c @@ -95,52 +95,51 @@ void plot_find_peaks(event *ev, double *peak_theta, double *peak_phi, size_t n) } } -int get_event(zebraFile *f, event *ev, bank *b) +int get_event(zebraFile *f, event *ev, zebraBank *bev) { /* Read all the PMT banks from the zebra file and update `ev`. * - * Returns the last return value from get_bank(). */ + * Returns 0 on success, -1 on error. */ int i, rv; PMTBank bpmt; + zebraBank b; int id, crate, card, channel; for (i = 0; i < MAX_PMTS; i++) { ev->pmt_hits[i].hit = 0; } - while (1) { - rv = next_bank(f, b); + rv = zebra_get_bank(f,&b,bev->links[KEV_PMT-1]); - if (rv == -1) { - break; - } else if (rv == 1) { - /* EOF */ - break; - } + if (rv) { + fprintf(stderr, "error getting PMT bank: %s\n", zebra_err); + return -1; + } - switch (b->name) { - case PMT_RECORD: - unpack_pmt(b->data, &bpmt); - card = bpmt.pin/1024; - crate = (bpmt.pin % 1024)/32; - channel = bpmt.pin % 32; - id = crate*512 + card*32 + channel; - ev->pmt_hits[id].hit = 1; - ev->pmt_hits[id].t = bpmt.pt; - ev->pmt_hits[id].qhl = bpmt.phl; - ev->pmt_hits[id].qhs = bpmt.phs; - ev->pmt_hits[id].qlx = bpmt.plx; - ev->pmt_hits[id].flags |= bpmt.pf & KPF_DIS; - break; - case EV_RECORD: - case MAST_RECORD: - goto end; + while (1) { + unpack_pmt(b.data, &bpmt); + card = bpmt.pin/1024; + crate = (bpmt.pin % 1024)/32; + channel = bpmt.pin % 32; + id = crate*512 + card*32 + channel; + ev->pmt_hits[id].hit = 1; + ev->pmt_hits[id].t = bpmt.pt; + ev->pmt_hits[id].qhl = bpmt.phl; + ev->pmt_hits[id].qhs = bpmt.phs; + ev->pmt_hits[id].qlx = bpmt.plx; + ev->pmt_hits[id].flags |= bpmt.pf & KPF_DIS; + + if (!b.next) break; + + rv = zebra_get_bank(f,&b,b.next); + + if (rv) { + fprintf(stderr, "error getting PMT bank: %s\n", zebra_err); + return -1; } } -end: - - return rv; + return 0; } void usage(void) @@ -156,7 +155,7 @@ int main(int argc, char **argv) int i; char *filename = NULL; zebraFile *f; - bank b; + zebraBank bmast, bmc, bmcgn, b; EVBank bev; event ev = {0}; int rv; @@ -198,70 +197,117 @@ int main(int argc, char **argv) return 1; } - int skip = 0; while (1) { - if (!skip) - rv = next_bank(f, &b); - - skip = 0; + rv = zebra_read_next_logical_record(f); if (rv == -1) { - fprintf(stderr, "error getting bank: %s\n", zebra_err); + fprintf(stderr, "error getting MAST bank: %s\n", zebra_err); goto err; } else if (rv == 1) { /* EOF */ break; } - switch (b.name) { - case MCVX_RECORD: - /* New MC vertex. */ - if (b.status & KMCVX_CRE) { - unpack_mcvx(b.data, &bmcvx); - } - break; - case EV_RECORD: - unpack_ev(b.data, &bev); - ev.run = bev.run; - ev.gtid = bev.gtr_id; + rv = zebra_get_bank(f, &bmast, f->first_bank); - rv = get_event(f,&ev,&b); + if (rv) { + fprintf(stderr, "error getting MAST bank: %s\n", zebra_err); + goto err; + } - pos[0] = bmcvx.x; - pos[1] = bmcvx.y; - pos[2] = bmcvx.z; + if (bmast.links[KMAST_MC-1] == 0) { + fprintf(stderr, "MAST link is zero!\n"); + goto err; + } + + rv = zebra_get_bank(f,&bmc,bmast.links[KMAST_MC-1]); - size_t n = 100; - size_t m = 100; + if (rv) { + fprintf(stderr, "error getting MC bank: %s\n", zebra_err); + goto err; + } - double *x = calloc(n,sizeof(double)); - double *y = calloc(m,sizeof(double)); - double *result = calloc(n*m,sizeof(double)); + if (bmast.links[KMC_MCGN-1] == 0) { + fprintf(stderr, "MCGN link is zero!\n"); + goto err; + } - for (i = 0; i < n; i++) { - x[i] = i*M_PI/(n-1); - } + rv = zebra_get_bank(f,&bmcgn,bmc.links[KMC_MCGN-1]); - for (i = 0; i < m; i++) { - y[i] = i*2*M_PI/(m-1); - } + if (rv) { + fprintf(stderr, "error getting MCGN bank: %s\n", zebra_err); + goto err; + } - get_hough_transform(&ev,pos,x,y,n,m,result,0,0); + if (bmcgn.links[KMCGN_MCTK-1] == 0) { + fprintf(stderr, "MCTK link is zero!\n"); + goto err; + } - find_peaks(&ev,pos,n,m,peak_theta,peak_phi,&npeaks,LEN(peak_theta)); + rv = zebra_get_bank(f,&b,bmcgn.links[KMCGN_MCTK-1]); - printf("gtid %i\n", ev.gtid); - for (i = 0; i < npeaks; i++) { - printf("%.2f %.2f\n", peak_theta[i], peak_phi[i]); - } + if (rv) { + fprintf(stderr, "error getting MCTK bank: %s\n", zebra_err); + goto err; + } + + if (b.up == 0) { + fprintf(stderr, "MCVX link is zero!\n"); + goto err; + } + + rv = zebra_get_bank(f,&b,b.up); + + if (rv) { + fprintf(stderr, "error getting MCVX bank: %s\n", zebra_err); + goto err; + } + + unpack_mcvx(b.data, &bmcvx); + + rv = zebra_get_bank(f,&b,bmast.links[KMAST_EV-1]); - if (plot) - plot_find_peaks(&ev,peak_theta,peak_phi,npeaks); + if (rv) { + fprintf(stderr, "error getting EV bank: %s\n", zebra_err); + goto err; + } + + unpack_ev(b.data, &bev); + ev.run = bev.run; + ev.gtid = bev.gtr_id; + + rv = get_event(f,&ev,&b); + + pos[0] = bmcvx.x; + pos[1] = bmcvx.y; + pos[2] = bmcvx.z; + + size_t n = 100; + size_t m = 100; + + double *x = calloc(n,sizeof(double)); + double *y = calloc(m,sizeof(double)); + double *result = calloc(n*m,sizeof(double)); - /* Skip reading in the next bank since get_event() already read in - * the next bank. */ - skip = 1; + for (i = 0; i < n; i++) { + x[i] = i*M_PI/(n-1); } + + for (i = 0; i < m; i++) { + y[i] = i*2*M_PI/(m-1); + } + + get_hough_transform(&ev,pos,x,y,n,m,result,0,0); + + find_peaks(&ev,pos,n,m,peak_theta,peak_phi,&npeaks,LEN(peak_theta)); + + printf("gtid %i\n", ev.gtid); + for (i = 0; i < npeaks; i++) { + printf("%.2f %.2f\n", peak_theta[i], peak_phi[i]); + } + + if (plot) + plot_find_peaks(&ev,peak_theta,peak_phi,npeaks); } zebra_close(f); |