(*		GNU General Public Licence		 *)


(*

Methods file for OpenBUGS can be scaned in by UpdaterMethods.LoadUpdater or can be compiled and
the Load procedure called.

*)

MODULE UpdaterExternal;

	

	IMPORT
		UpdaterMethods;

	VAR
		version-: INTEGER;
		maintainer-: ARRAY 40 OF CHAR;

		LoadUpdater: PROCEDURE (IN installProc: ARRAY OF CHAR);

	PROCEDURE Load*;
	BEGIN

		(*	naive random walk metropolis to test things do not use for serious work comment next line out!	*)
		(*	LoadUpdater("UpdaterNaivemet.Install");	*)

		(*	updater when no likelihood for multivariate nodes	*)
		LoadUpdater("UpdaterForward.InstallMV");

		(*	updates node with multinomial prior	*)
		LoadUpdater("UpdaterMultinomial.Install");

		(*	conjugate multivariate updaters	*)

		(*	updater for MVN conditional with mean identical to prior	*)
		LoadUpdater("UpdaterMVNormal.Install");
		(*	updater for MVN conditional with mean linear function of prior	*)
		LoadUpdater("UpdaterMVNLinear.Install");
		(*	updates node with wishart conditional	*)
		LoadUpdater("UpdaterWishart.Install");
		(*	updates node with dirichlet conditional	*)
		LoadUpdater("UpdaterDirichlet.Install");

		(*	updates node with dirichlet prior	*)
		LoadUpdater("UpdaterDirichletprior.Install");

		(*	updater for chain graph priors	*)

		(*	updater for chain graph prior and logit,  loglinear or normal likelihood	*)
		(*	LoadUpdater("UpdaterHybridglm.InstallChain");	*)
		LoadUpdater("UpdaterGMRF.InstallNormal");
		LoadUpdater("UpdaterGMRF.InstallGeneral");
		LoadUpdater("UpdaterChain.Install");

		(*	updater when no likelihood for univariate nodes	*)
		LoadUpdater("UpdaterForward.Install");

		(*	updater for parameters of Kriging prior	*)
		(*	LoadUpdater("UpdaterKrigparam.Install");	*)

		(*	block updaters	*)

		(*	updates fixed effect block of nodes with logit or  loglinear conditional	*)
		LoadUpdater("UpdaterGLM.InstallGLM");

		(*	updates block of nodes with normal conditional	*)
		(*	LoadUpdater("UpdaterGLM.InstallNormal");	*)

		(*	updater for logit, loglinear or normal random effects	*)
		(*	LoadUpdater("UpdaterHybridglm.Install");	*)

		(*	updater for glm block using DE	*)
		LoadUpdater("UpdaterDEblock.InstallGLM");
		(*	updates fixed effect block of nodes all of which have a generic conditional using DE	*)
		LoadUpdater("UpdaterDEblock.InstallHomo");
		(*	updates fixed effect block of nodes at least one with a generic conditional using DE	*)
		LoadUpdater("UpdaterDEblock.InstallHetro");
		(*	updater for generic random effects using DE	*)
		(*	LoadUpdater("UpdaterDEblock.InstallRE");	*)

		(*	updater for non linear least squares with error variance integrated out	*)
		LoadUpdater("UpdaterAMNLLS.InstallMarginal");
		(*	updater for non linear least squares	*)
		LoadUpdater("UpdaterAMNLLS.InstallCond");
		(*	updater for glm block	*)
		(*	LoadUpdater("UpdaterAMblock.InstallGLM");	*)
		(*	updates fixed effect block of nodes at least one of which has a generic conditional	*)
		(*	LoadUpdater("UpdaterDFreeHybrid.Install");	*)
		(*	updates fixed effect block of nodes all of which has a generic conditional	*)
		LoadUpdater("UpdaterAMblock.InstallHomo");
		(*	updates fixed effect block of nodes at least one of which has a generic conditional	*)
		LoadUpdater("UpdaterAMblock.InstallHetro");
		(*	updater for generic random effects	*)
		(*	LoadUpdater("UpdaterAMblock.InstallRE");	*)

		(*	 univariate continuous updaters	*)

		(*	updater for any distribution	*)
		(*	LoadUpdater("UpdaterSCDE.InstallAny");	*)

		(*	updates node with normal conditional	*)
		LoadUpdater("UpdaterNormal.Install");
		(*	updates node with gamma conditional	*)
		LoadUpdater("UpdaterGamma.Install");
		(*	updates node with beta conditional	*)
		LoadUpdater("UpdaterBeta.Install");
		(*	updates node with pareto conditional	*)
		LoadUpdater("UpdaterPareto.Install");
		(*	updater for logit or loglinear conditional	*)
		LoadUpdater("UpdaterRejection.Install");
		(*	updater for generic distribution with support on whole of real line	*)
		(*	LoadUpdater("UpdaterMetnormal.InstallStd");	*)
		(*	updater for generic distribution using DE needs multiple >= 5 chains	*)
		LoadUpdater("UpdaterSCDE.Install");
		(*	updater for generic distribution with support on whole of real line	*)
		LoadUpdater("UpdaterSCAM.InstallDelayedNB");
		(*	updater for generic distribution with support on whole of real line	*)
		(*LoadUpdater("UpdaterSDScale.Install");*)
		(*	updater for generic distribution with support on whole of real line	*)
		LoadUpdater("UpdaterSCAM.InstallStd");
		(*	updater for generic distribution with support on whole of real line	*)
		LoadUpdater("UpdaterSCAAR.Install");
		(*	updater for generic distribution with support on whole of real line	*)
		LoadUpdater("UpdaterSDScale.Install");
		(*	updater for any distribution with support on whole of real line	*)
		(*	LoadUpdater("UpdaterMetnormal.InstallAnyStd");	*)
		(*	updater for generic distribution with bounded support	*)
		(*	LoadUpdater("UpdaterGriddy.Install");	*)
		(*	updater for generic distribution	*)
		LoadUpdater("UpdaterSlice.Install");
		(*	updater for generic distribution	*)
		LoadUpdater("UpdaterSCAM.InstallDelayedB");


		(*	descrete updaters	*)

		(*	updates node with poisson conditional	*)
		LoadUpdater("UpdaterPoisson.Install");
		(*	updater for descrete prior with finite range	*)
		LoadUpdater("UpdaterDescreteSlice.Install");
		(*	updater for descrete prior with finite range	*)
		LoadUpdater("UpdaterCatagorical.Install");
		(*updater for descrete prior with infinite range	*)
		LoadUpdater("UpdaterMetbinomial.Install");

	END Load;


	PROCEDURE Maintainer;
	BEGIN
		version := 200;
		maintainer := "A.Thomas"
	END Maintainer;

	PROCEDURE Init;
	BEGIN
		Maintainer;
		LoadUpdater := UpdaterMethods.LoadUpdater
	END Init;

BEGIN
	Init
END UpdaterExternal.