diff options
author | tlatorre <tlatorre@uchicago.edu> | 2018-08-14 10:08:27 -0500 |
---|---|---|
committer | tlatorre <tlatorre@uchicago.edu> | 2018-08-14 10:08:27 -0500 |
commit | 24c8bcfe7f76b20124e2862ea050f815c0f768e7 (patch) | |
tree | e5bdbd638a2c7f38f1c094cc9e95cbdfe05b9481 /fit.c | |
parent | 0b7f199c0d93074484ea580504485a32dc29f5e2 (diff) | |
download | sddm-24c8bcfe7f76b20124e2862ea050f815c0f768e7.tar.gz sddm-24c8bcfe7f76b20124e2862ea050f815c0f768e7.tar.bz2 sddm-24c8bcfe7f76b20124e2862ea050f815c0f768e7.zip |
move everything to src directory
Diffstat (limited to 'fit.c')
-rw-r--r-- | fit.c | 205 |
1 files changed, 0 insertions, 205 deletions
@@ -1,205 +0,0 @@ -#include "likelihood.h" -#include <stdio.h> -#include "zebra.h" -#include "Record_Info.h" -#include "event.h" -#include "zdab_utils.h" -#include <gsl/gsl_vector.h> -#include <gsl/gsl_multimin.h> -#include "scattering.h" -#include "pmt.h" -#include "sno_charge.h" -#include "db.h" -#include "dqxx.h" - -#define EV_RECORD 0x45562020 // 'EV ' (as written to ZDAB file) - -double nll(const gsl_vector *v, void *params) -{ - double T, theta, phi, t0; - double pos[3], dir[3]; - - T = gsl_vector_get(v,0); - - /* FIXME: should use a minimization algorithm with bounds. */ - if (T < 0) return 1e9; - - pos[0] = gsl_vector_get(v,1); - pos[1] = gsl_vector_get(v,2); - pos[2] = gsl_vector_get(v,3); - - theta = gsl_vector_get(v,4); - phi = gsl_vector_get(v,5); - dir[0] = sin(theta)*cos(phi); - dir[1] = sin(theta)*sin(phi); - dir[2] = cos(theta); - - t0 = gsl_vector_get(v,6); - - return nll_muon((event *) params, T, pos, dir, t0); -} - -int main(int argc, char **argv) -{ - int i; - zebraFile *f; - bank b; - int rv; - PMTBank bpmt; - EVBank bev; - event ev = {0}; - int crate, card, channel; - int id; - - if (argc < 2) { - fprintf(stderr, "usage: fit [filename]\n"); - return 1; - } - - f = zebra_open(argv[1]); - - if (!f) { - fprintf(stderr, "%s\n", zebra_err); - return 1; - } - - load_pmt_info(); - - for (i = 0; i < 10000; i++) { - ev.pmt_hits[i].hit = 0; - ev.pmt_hits[i].flags = 0; - } - - ev.run = -1; - - const gsl_multimin_fminimizer_type *T = gsl_multimin_fminimizer_nmsimplex2; - gsl_multimin_fminimizer *s = NULL; - gsl_vector *ss, *x; - gsl_multimin_function minex_func; - - size_t iter = 0; - int status; - double size; - - /* Starting point */ - x = gsl_vector_alloc(7); - - ss = gsl_vector_alloc(7); - - minex_func.n = 7; - minex_func.f = nll; - minex_func.params = &ev; - - init_interpolation(); - init_charge(); - dict *db = db_init(); - - if (load_file(db, "DQXX_0000010000.dat")) { - fprintf(stderr, "failed to load DQXX_0000010000.dat: %s\n", db_err); - exit(1); - } - - if (dqxx_init(db, &ev)) { - fprintf(stderr, "failed to initialize DQXX bank: %s\n", dqxx_err); - exit(1); - } - - while (1) { - rv = next_bank(f, &b); - - if (rv == -1) { - fprintf(stderr, "error getting bank: %s\n", zebra_err); - goto err; - } else if (rv == 1) { - /* EOF */ - break; - } - - if (b.name == 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.pn & KPF_DIS; - } else if (b.name == EV_RECORD) { - unpack_ev(b.data, &bev); - if (ev.run != -1) { - if (ev.run != bev.run || ev.gtid != bev.gtr_id) { - /* New event, so we need to fit the old event. */ - iter = 0; - - gsl_vector_set(x,0,1000.0); - gsl_vector_set(x,1,100.0); - gsl_vector_set(x,2,100.0); - gsl_vector_set(x,3,100.0); - gsl_vector_set(x,4,1.57); - gsl_vector_set(x,5,0.0); - gsl_vector_set(x,6,120.0); - - gsl_vector_set(ss,0,10.0); - gsl_vector_set(ss,1,10.0); - gsl_vector_set(ss,2,10.0); - gsl_vector_set(ss,3,10.0); - gsl_vector_set(ss,4,0.1); - gsl_vector_set(ss,5,0.1); - gsl_vector_set(ss,6,1.0); - - s = gsl_multimin_fminimizer_alloc(T, 7); - gsl_multimin_fminimizer_set(s, &minex_func, x, ss); - - do { - iter++; - status = gsl_multimin_fminimizer_iterate(s); - - if (status) break; - - size = gsl_multimin_fminimizer_size(s); - status = gsl_multimin_test_size(size,1e-2); - - if (status == GSL_SUCCESS) { - printf("converged to minimum at\n"); - } - - printf("%5zu %.2g %.2g %.2g %.2g %.2g %.2g %.2g f() = %7.3e size = %.3f\n", - iter, - gsl_vector_get(s->x,0), - gsl_vector_get(s->x,1), - gsl_vector_get(s->x,2), - gsl_vector_get(s->x,3), - gsl_vector_get(s->x,4), - gsl_vector_get(s->x,5), - gsl_vector_get(s->x,6), - s->fval, - size); - } while (status == GSL_CONTINUE && iter < 1000); - - gsl_multimin_fminimizer_free(s); - } - } - ev.run = bev.run; - ev.gtid = bev.gtr_id; - } - } - - free_interpolation(); - - db_free(db); - - gsl_vector_free(x); - gsl_vector_free(ss); - - zebra_close(f); - - return 0; - -err: - - zebra_close(f); - return 1; -} |