capture program drop bunchtobit_tloglike
program bunchtobit_tloglike
/*truncated mid-censored normal log-likelihood:
  delta_l normalized slope + intercept coefficients of model censored on the *right*, that uses data on the LEFT of the kink
  delta_r normalized slope + intercept coefficients of model censored on the *left*, that uses data on the RIGHT of the kink
   normalization of deltas is as follows: delta_k = eta_k*W/sigma, where eta_k is the vector of slope + intercept coefficients
   of side k={l,r} of the model, sigma is standard deviation
  lngamma normalized std deviation parameter: lngamma = -ln(sigma), where sigma is the standard deviation
*/
	version 14
	args lnf delta_l delta_r lngamma

	qui replace `lnf' = 0
	qui replace `lnf' = (1 / $obs_num_g ) * ln(   ///
									exp(`lngamma') * normalden(exp(`lngamma')*$ML_y1 - `delta_l', 1) ///
									/ ( normal(exp(`lngamma')*(___kink + ___h) - `delta_r') - normal(exp(`lngamma')*(___kink - ___h) - `delta_l') )  ///
									) ///
						if $ML_y1 < ___kink & $ML_y1 > ___kink - ___h
	qui replace `lnf' = (1 / $obs_num_g ) * ln(  ///
									(normal((exp(`lngamma')*___kink  - `delta_r')) - normal((exp(`lngamma')*___kink  - `delta_l'))) ///
									/ ( normal(exp(`lngamma')*(___kink + ___h) - `delta_r') - normal(exp(`lngamma')*(___kink - ___h) - `delta_l') ) ///
									) ///
						if $ML_y1 == ___kink
	qui replace `lnf' = (1 / $obs_num_g ) * ln( ///
									exp(`lngamma') * normalden(exp(`lngamma')*$ML_y1 - `delta_r', 1 ) ///
									/ ( normal(exp(`lngamma')*(___kink + ___h) - `delta_r') - normal(exp(`lngamma')*(___kink - ___h) - `delta_l') )   ///
									)  ///
						if $ML_y1 < ___kink + ___h & $ML_y1 > ___kink
end