EMCEE Example

        The following demo will fit a Gaussian. Amp must be in range [5,15],
    Pos in range [-1,1] and Width in range [0,3].
      !
      ! @ gag_demo:demo-emcee  Amp Pos Width Noise
      !
      ! An example of EMCEE usage
      ! For simplicity, let us define the GAUSSIAN function
      define function gauss(x,a,b,c) a*exp(-0.5*((x-b)/c)^2)
      !
      if .not.exist(my_data) then
        ! The Gaussian parameters, Amplitude, Position and Width
        define double amp pos width /global
        ! Now the data...
        define integer nx
        let nx 512
        define double my_xx[nx] my_data[nx] my_noise /global
        ! Define the Measurement points XX
        let my_xx[i] 10*(i-nx/2)/nx
      endif
      !
      ! Fill the data with some noisy values. In reality, this may come from
      ! an experiment or observation
      let my_noise &4
      let my_data gauss(my_xx,&1,&2,&3)
      let my_data[i] my_data+my_noise*noise(i/i)
      !
      ! Start with some random value
      let amp &1*(1+noise(my_noise))
      let width &3*(1+noise(my_noise))
      let pos &2+noise(my_noise)
      !
      begin procedure my_chi2
        define double res /like my_data
        let res my_data-gauss(my_xx,amp,pos,width)
        let res (res/my_noise)^2
        compute emcee%chi2 sum res ! The Chi^2 must be returned here
        @ emcee-timer ! Optional: report advances in the chain
      end procedure my_chi2
      !
      emcee my_data "@ my_chi2" /start 'amp' 'pos' 'width' -
            /par amp pos width /bound amp 5 15 pos -1 1 width 0 10 -
            /step 0.02 0.02 0.02 /length 100 /walk 4 /begin
      for i 1 to 4
        emcee
      next
      !