diff options
author | tlatorre <tlatorre@uchicago.edu> | 2018-11-25 11:42:24 -0600 |
---|---|---|
committer | tlatorre <tlatorre@uchicago.edu> | 2018-11-25 11:42:24 -0600 |
commit | d3f5750bcb3688e4ef2ed67d96c937de772b4c03 (patch) | |
tree | 7f165165241a727bbf3af0c88b487878f8d7bb22 | |
parent | 933a4756d6babdc7a9795818b6a18baa2ad3d7a5 (diff) | |
download | sddm-d3f5750bcb3688e4ef2ed67d96c937de772b4c03.tar.gz sddm-d3f5750bcb3688e4ef2ed67d96c937de772b4c03.tar.bz2 sddm-d3f5750bcb3688e4ef2ed67d96c937de772b4c03.zip |
speed up fast likelihood calculation
This commit speeds up the fast likelihood calculation by only computing the
time PDF for a single photon. Since the majority of the time in the fast
likelihood calculation is spent computing the time PDF this should speed things
up by quite a bit. I suspect this won't have a big effect on the likelihood
value, but I should do some more testing.
-rw-r--r-- | src/likelihood.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/likelihood.c b/src/likelihood.c index 1b3502c..d0ab20f 100644 --- a/src/likelihood.c +++ b/src/likelihood.c @@ -747,6 +747,8 @@ double nll_muon(event *ev, int id, double T0, double *pos, double *dir, double t size_t npoints, npoints_shower; + double log_pt_fast; + /* Initialize static arrays. */ for (i = 0; i < MAX_PMTS; i++) mu_direct[i] = 0.0; for (i = 0; i < MAX_PMTS; i++) mu_shower[i] = 0.0; @@ -918,9 +920,16 @@ double nll_muon(event *ev, int id, double T0, double *pos, double *dir, double t log_mu = log(mu[i]); + if (fast) + log_pt_fast = log_pt(ev->pmt_hits[i].t, 1, mu_noise, mu_indirect, &mu_direct[i], &mu_shower[i], 1, &ts[i], &ts_shower[i], ts[i], PMT_TTS, &ts_sigma[i]); + if (ev->pmt_hits[i].hit) { for (j = 1; j < MAX_PE; j++) { - logp[j] = log(pq(ev->pmt_hits[i].qhs,j)) - mu[i] + j*log_mu - lnfact(j) + log_pt(ev->pmt_hits[i].t, j, mu_noise, mu_indirect, &mu_direct[i], &mu_shower[i], 1, &ts[i], &ts_shower[i], ts[i], PMT_TTS, &ts_sigma[i]); + if (fast) + logp[j] = log(pq(ev->pmt_hits[i].qhs,j)) - mu[i] + j*log_mu - lnfact(j) + log_pt_fast; + else + logp[j] = log(pq(ev->pmt_hits[i].qhs,j)) - mu[i] + j*log_mu - lnfact(j) + log_pt(ev->pmt_hits[i].t, j, mu_noise, mu_indirect, &mu_direct[i], &mu_shower[i], 1, &ts[i], &ts_shower[i], ts[i], PMT_TTS, &ts_sigma[i]); + if (j == 1 || logp[j] > max_logp) max_logp = logp[j]; if (logp[j] - max_logp < min_ratio*ln(10)) { |