20                               data real pwindow, data real D,
 
   22                               array[] real primary_params) {
 
   36      d | dist_id, params, pwindow, D, primary_id, primary_params
 
   40    real lower_bound = max({d - pwindow, 1e-6});
 
   41    int n_params = num_elements(params);
 
   42    int n_primary_params = num_elements(primary_params);
 
   43    array[n_params + n_primary_params] real theta = append_array(params, primary_params);
 
   44    array[4] 
int ids = {dist_id, primary_id, n_params, n_primary_params};
 
   46    vector[1] y0 = rep_vector(0.0, 1);
 
   47    result = ode_rk45(
primarycensored_ode, y0, lower_bound, {d}, theta, {d, pwindow}, ids)[1, 1];
 
   51        D | dist_id, params, pwindow, positive_infinity(), primary_id,primary_params
 
   53      result = exp(log(result) - log_cdf_D);
 
 
   89                                data real pwindow, data real D,
 
   91                                array[] real primary_params) {
 
   95    return negative_infinity();
 
  105      d | dist_id, params, pwindow, positive_infinity(), primary_id, primary_params
 
  110      d | dist_id, params, pwindow, positive_infinity(), primary_id, primary_params
 
  117      D | dist_id, params, pwindow, positive_infinity(), primary_id, primary_params
 
  119    result = result - log_cdf_D;
 
 
  156                                data real pwindow, data real d_upper,
 
  157                                data real D, 
int primary_id,
 
  158                                array[] real primary_params) {
 
  160    reject(
"Upper truncation point is greater than D. It is ", d_upper,
 
  161           " and D is ", D, 
". Resolve this by increasing D to be greater or equal to d + swindow or decreasing swindow.");
 
  164    reject(
"Upper truncation point is less than or equal to d. It is ", d_upper,
 
  165           " and d is ", d, 
". Resolve this by increasing d to be less than d_upper.");
 
  168    d_upper | dist_id, params, pwindow, positive_infinity(), primary_id, primary_params
 
  171    d | dist_id, params, pwindow, positive_infinity(), primary_id, primary_params
 
  177      log_cdf_D = log_cdf_upper;
 
  180        D | dist_id, params, pwindow, positive_infinity(), primary_id, primary_params
 
  183    return log_diff_exp(log_cdf_upper, log_cdf_lower) - log_cdf_D;
 
  185    return log_diff_exp(log_cdf_upper, log_cdf_lower);
 
 
  219                               data real pwindow, data real d_upper,
 
  220                               data real D, 
int primary_id,
 
  221                               array[] real primary_params) {
 
  224      d | dist_id, params, pwindow, d_upper, D, primary_id, primary_params
 
 
  269  int max_delay, data real D, 
int dist_id,
 
  270  array[] real params, data real pwindow,
 
  271  int primary_id, array[] real primary_params
 
  274  int upper_interval = max_delay + 1;
 
  275  vector[upper_interval] log_pmfs;
 
  276  vector[upper_interval] log_cdfs;
 
  280  if (D < upper_interval) {
 
  281    reject(
"D must be at least max_delay + 1");
 
  285  for (d in 1:upper_interval) {
 
  287      d | dist_id, params, pwindow, positive_infinity(), primary_id,
 
  293  if (D > upper_interval) {
 
  298        D | dist_id, params, pwindow, positive_infinity(),
 
  299        primary_id, primary_params
 
  303    log_normalizer = log_cdfs[upper_interval];
 
  307  log_pmfs[1] = log_cdfs[1] - log_normalizer;
 
  308  for (d in 2:upper_interval) {
 
  309    log_pmfs[d] = log_diff_exp(log_cdfs[d], log_cdfs[d-1]) - log_normalizer;
 
 
  352  int max_delay, data real D, 
int dist_id,
 
  353  array[] real params, data real pwindow,
 
  355  array[] real primary_params
 
  359      max_delay, D, dist_id, params, pwindow, primary_id, primary_params
 
 
int check_for_analytical(int dist_id, int primary_id)
 
vector primarycensored_ode(real t, vector y, array[] real theta, array[] real x_r, array[] int x_i)
 
real primarycensored_cdf(data real d, int dist_id, array[] real params, data real pwindow, data real D, int primary_id, array[] real primary_params)
 
real primarycensored_lpmf(data int d, int dist_id, array[] real params, data real pwindow, data real d_upper, data real D, int primary_id, array[] real primary_params)
 
real primarycensored_lcdf(data real d, int dist_id, array[] real params, data real pwindow, data real D, int primary_id, array[] real primary_params)
 
real primarycensored_pmf(data int d, int dist_id, array[] real params, data real pwindow, data real d_upper, data real D, int primary_id, array[] real primary_params)
 
vector primarycensored_sone_pmf_vectorized(int max_delay, data real D, int dist_id, array[] real params, data real pwindow, int primary_id, array[] real primary_params)
 
vector primarycensored_sone_lpmf_vectorized(int max_delay, data real D, int dist_id, array[] real params, data real pwindow, int primary_id, array[] real primary_params)
 
real primarycensored_analytical_cdf(data real d, int dist_id, array[] real params, data real pwindow, data real D, int primary_id, array[] real primary_params)
 
real primarycensored_analytical_lcdf(data real d, int dist_id, array[] real params, data real pwindow, data real D, int primary_id, array[] real primary_params)