*! 1.0.2 MLB 23Jul2007
*! 1.0.1 MLB 15May2007
program define seqlogit_lf
	version 9.2
	/*count number of equations*/
	forvalues i = 1/$S_eqs {
		local xb "`xb' xb`i'"
	}
	args lnf `xb'

	/*The numerators*/
	forvalues i = 1/$S_Ntrans {
		local denom`i' "1"
		foreach j of global S_eqstr`i' {
			local denom`i' "`denom`i'' + exp(`xb`j'')"
		}
	}
	/*The likelihood*/
	forvalues t = 1/$S_Ntrans {
		/*likelihood for the failing transitions*/
		foreach lev of global S_treelevels {
			local ctr`t'choice0 : subinstr global S_tr`t'choice0 " " " | `lev' == ", all
			if (`lev' == `ctr`t'choice0') {
				local ll`lev' "`ll`lev'' + ln(1/(`denom`t''))"
			}
		}
		/*likelihood for the other choises*/
		local end = ${S_Nchoice`t'} -1
		forvalues c = 1/`end' {
			foreach lev of global S_treelevels {
				local ctr`t'choice`c' : subinstr global S_tr`t'choice`c' " " " | `lev' == ", all
				if (`lev' == `ctr`t'choice`c'') {
					local ll`lev' "`ll`lev'' + ln(exp(`xb${S_eqtr`t'c`c'}')/(`denom`t''))"
				}
			}
		}
	}
	foreach lev of global S_treelevels {
		gettoken plus ll`lev' : ll`lev', pars("+")
		qui replace `lnf' = `ll`lev'' if $ML_y1==`lev'
	}
end