aboutsummaryrefslogtreecommitdiff
path: root/src/likelihood.c
diff options
context:
space:
mode:
authortlatorre <tlatorre@uchicago.edu>2018-11-25 11:42:24 -0600
committertlatorre <tlatorre@uchicago.edu>2018-11-25 11:42:24 -0600
commitd3f5750bcb3688e4ef2ed67d96c937de772b4c03 (patch)
tree7f165165241a727bbf3af0c88b487878f8d7bb22 /src/likelihood.c
parent933a4756d6babdc7a9795818b6a18baa2ad3d7a5 (diff)
downloadsddm-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.
Diffstat (limited to 'src/likelihood.c')
-rw-r--r--src/likelihood.c11
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)) {