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