Chapter 5. Reference

Table of Contents

SIPPI
sippi_adjust_step_size
sippi_anneal_temperature
sippi_compute_acceptance_rate
sippi_compute_modelization_forward_error
sippi_forward
sippi_forward_linear
sippi_get_resim_data
sippi_get_sample
sippi_least_squares
sippi_likelihood
sippi_mcmc_init
sippi_metropolis
sippi_prior
sippi_prior_cholesky
sippi_prior_dsim
sippi_prior_init
sippi_prior_mps
sippi_prior_plurigaussian
sippi_prior_set_steplength
sippi_prior_sisim
sippi_prior_snesim
sippi_prior_snesim_std
sippi_prior_uniform
sippi_prior_visim
sippi_prior_voronoi
sippi_rejection
sippi_set_path
SIPPI plotting commands
sippi_colormap
sippi_get_posterior_data
sippi_plot_current_model
sippi_plot_data
sippi_plot_defaults
sippi_plot_loglikelihood
sippi_plot_model
sippi_plot_movie
sippi_plot_posterior
sippi_plot_posterior_2d_marg
sippi_plot_posterior_data
sippi_plot_posterior_loglikelihood
sippi_plot_posterior_sample
sippi_plot_prior
sippi_plot_prior_movie
sippi_plot_prior_sample
sippi_plot_set_axis
wiggle
SIPPI toolbox: Traveltime tomography
calc_Cd
eikonal
eikonal_raylength
eikonal_traveltime
kernel_buursink_2d
kernel_finite_2d
kernel_fresnel_2d
kernel_fresnel_monochrome_2d
kernel_multiple
kernel_slowness_to_velocity
mspectrum
munk_fresnel_2d
munk_fresnel_3d
pick_first_arrival
plot_traveltime_sr
sippi_forward_traveltime
sippi_forward_traveltime_example
tomography_kernel
SIPPI toolbox: 2D Full Waveform GPR modeling
FDTD_fwi
LoadTraceM
ant_geometry
disc_freq
distribute_to_cores
freq_int_diff_1D
fwi_ant_geometry
fwi_execute
fwi_execute_parfor
image_snapshots
iseven
load2Dbin
load_wavelet
resize
save1Dbin
save2Dbin
save_wavelet
setup_input_parameters
shift_signal
sippi_forward_gpr_fd
sippi_gpr_fd_example
sippi_plot_data_gpr
velocity_to_eps
write_parameters_to_screen
SIPPI toolbox: Covariance inference
sippi_forward_covariance_inference

SIPPI

sippi_adjust_step_size

  sippi_adjust_step_size Adjust step length length for Metropolis sampler in SIPPI
   
  Call : 
    step=sippi_adjust_step_size(step,P_average,P_target);
 
  step : current step 
  P_current : Current acceptance ratio
  P_target  : preferred acceptance ratio (def=0.3);
 
  See also sippi_compute_acceptance_rate, sippi_prior_set_steplength
 

sippi_anneal_temperature

  sippi_anneal_temperature : compute annealing temperature for
  annealing type sampling
 
    %% ANNEALING (TEMPERATURE AS A FUNTION OF ITERAITON NUMBER)
     i % iteration number
 
     mcmc.anneal.i_begin=1; % default, iteration number when annealing begins
     mcmc.anneal.i_end=100000; %  iteration number when annealing stops
     mcmc.anneal.T_begin=5; % Start temperature for annealing 
     mcmc.anneal.T_end=1; % End temperature for anneaing 
 
     mcmc.anneal.type='exp';     % Exponential temperature change
     mcmc.anneal.type='linear';  % Linear temperature change
  
  Call
    [T,mcmc]=sippi_anneal_temperature(i,mcmc);
 
  See also sippi_metropolis
 

sippi_compute_acceptance_rate

  sippi_compute_acceptance_rate Computes acceptance rate for the Metropolis sampler in SIPPI
 
  Call:
    P_acc=sippi_compute_acceptance_rate(acc,n_update_history);
 

sippi_compute_modelization_forward_error

  sippi_compute_modelization_forward_error Computes an estimate of the modelization erro
 
  Computes and estimate of the Gaussian modelization error, N(dt,Ct)
  caused by the use of an imperfect forward kernel
 
  If called with only one output '[Ct]=sippi..]' then the Gaussian model is
  assumed by centered around 0, (dt{1}=0).
 
  Call
    [Ct,dt,dd]=sippi_compute_modelization_forward_error(forward_full,forward_app,prior,N,d);
 
 
  For details see:
   Hansen, T.M., Cordua, K. S., Jacobsen, B. J., and Mosegaard, K. (2014)
   Accounting for imperfect forward modeling in geophysical inverse problems - exemplified for cross hole tomography.
   Geophsyics, 79(3) H1-H21, 2014. doi:10.1190/geo2013-0215.1
 

sippi_forward

  sippi_forward Simple forward wrapper for SIPPI
 
  Assumes that the actual forward solver has been defined by
  forward.forward_function
 
  Call:
    [d,forward,prior,data]=sippi_forward(m,forward)
 
  Optional: 
    [d,forward,prior,data]=sippi_forward(m,forward,prior)
    [d,forward,prior,data]=sippi_forward(m,forward,prior,data)
    [d,forward,prior,data]=sippi_forward(m,forward,prior,data,options)
 

sippi_forward_linear

  sippi_forward_linear: 
 
  % options:
  forward.G : Linear forward operator. such that d[
              d{id}=forward.G*m{im}(:)
              if not set, forward.G=eye(prod(size(m{im})));
 
  forward.force_sparse [0]: Use forward.G as is (default)
                      [1]: force forward.G to be treated as a sparse matrix
 
  %% Examples
  % Define an example of a prior model
     forward.forward_function='sippi_forward_linear';
     im=1;
     prior{im}.type='FFTMA';
     prior{im}.x=[0:1:100];
     prior{im}.m0=0;
     prior{im}.Va='1 Sph(10)';
  % Define the use of the linear forward solver
     forward.forward_function='sippi_forward_linear';
 
  % Example 1: Identity, 
  %             by default an identity operator is used if the linear
  %             is not set
    m=sippi_prior(prior);
    tic;
    d=sippi_forward(m,forward);
    t1=toc;
    figure(1);
    subplot(1,2,1);plot(m{1});title('m')
    subplot(1,2,2);plot(d{1});title('d')
    suptitle(sprintf('Ex1, Identity, t=%g',t1))
 
  % Example 2: Linear Operator
    nd=prod(size(m{im}));
    forward.G=precal_cov_2d(nd,1,1,1,'1 Sph(10)');
    tic;
    d=sippi_forward(m,forward);
    t2=toc;
    figure(2);
    subplot(1,2,1);plot(m{1});title('m')
    subplot(1,2,2);plot(d{1});title('d')
    suptitle(sprintf('Ex2, t=%g',t2))
 
 
   % Example 3: Force forward.G to be sparse
    forward.force_sparse=1;
    tic;
    d=sippi_forward(m,forward);
    t3=toc;
    figure(3);
    subplot(1,2,1);plot(m{1});title('m')
    subplot(1,2,2);plot(d{1});title('d')
    suptitle(sprintf('Force sparse, t=%g',t3))
 
  See also: sippi_forward

sippi_get_resim_data

  sippi_get_resim_data: Get conditional data for resimulation
 
  d_cond=sippi_get_resim_data(m_current,prior,ip);
  
  c_cond [n_cond,4]: col1: x, col2: y, col4: z, col4: d
 
  See also sippi_prior
 

sippi_get_sample

  sippi_get_sample: Get a posterior sample
 
  Call :
   [reals,etype_mean,etype_var,reals_all,reals_ite]=sippi_get_sample(working_directory,im,n_reals,skip_seq_gibbs);
 
     im: A priori model type
     n_reals: Number of realizations to return
     skip_seq_gibbs [1] Skip all realization where sequential gibbs is enabled
                    [0] Use all realization
     data: SIPPI data structure
     prior: SIPPI prior structure
     options: options structure when running sippi_metropolis
 
 
  If located in a SIPPI output folder one can simple use :
     [reals,etype_mean,etype_var,reals_all,reals_ite]=sippi_get_sample(im,n_reals);
  or
     skip_seq_gibbs=0;
     [reals,etype_mean,etype_var,reals_all,reals_ite]=sippi_get_sample(im,n_reals,skip_seq_gibbs);
 
 

sippi_least_squares

  sippi_least_squares Least squares type inversion for SIPPI
 
  Call : 
     [m_reals,m_est,Cm_est]=sippi_least_squares(data,prior,forward,n_reals,lsq_type,id,im);
 
 
 
    lsq_type : 'lsq' (def), classical least squares 
               'error_sim', simulation through error simulation
               'visim', simulation through SGSIM of DSSIM
 

sippi_likelihood

  sippi_likelihood Compute likelihood given an observed dataset
 
  Call
    [logL,L,data]=sippi_likelihood(d,data);
 
 
   data{1}.d_obs [N_data,1] N_data data observations
   data{1}.d_std [N_data,1] N_data uncorrelated Gaussian STD
 
   data{1}.d_var [N_data,1] N_data uncorrelated Gaussian variances
 
 
  Gaussian modelization error, N(dt,Ct), is specified as
   data{1}.dt [N_data,1] : Bias/mean of modelization error
   data{1}.Ct [N_data,N_data] : Covariance of modelization error
 
   data{1}.Ct [1,1] : Constant Covariance of modelization error
                      imples data{1}.Ct=ones(N_data.N_data)*data{1}.Ct;
 
  data{id}.recomputeCD [default=0], if '1' then data{1}.iCD is recomputed
  each time sippi_likelihood is called. This should be used if the noise model
  changes between each call to sippi_likelihood.
 
   data{id}.full_likelihood [default=]0; if '1' the the full likelihood
   (including the determinant) is computed. This not needed if the data
   civariance is constant, but if it changes, then use
   data{id}.full_likelihood=1;
 
 
   A new type of noise model can be used as long as it is available in a 
   m file staring with 'sippi_likelihood_'. Further, it should provide the
   inputs and outputs as sippi_likelihood.m
   If a noise model has been implemented in the m-files
   sippi_likelihood_other.m
   then this can be used to evaluate the likelhood in sippi using 
   data{1}.noise_model='sippi_likelihood_other',
 
 

sippi_mcmc_init

  sippi_mcmc_init Initialize McMC options for Metropolis and rejection sampling in SIPPI
 
  Call:
     options=sippi_mcmc_init(options,prior);
 

sippi_metropolis

  sippi_metropolis Extended Metropolis sampling in SIPPI
 
  Metropolis sampling.
    See e.g.
      Hansen, T. M., Cordua, K. S., and Mosegaard, K., 2012.
      Inverse problems with non-trivial priors - Efficient solution through Sequential Gibbs Sampling.
      Computational Geosciences. doi:10.1007/s10596-011-9271-1.
 
      Sambridge, M., 2013 - A Parallel Tempering algorithm for
      probabilistic sampling and multi-modal optimization.
 
  Call :
     [options,data,prior,forward,m_current]=sippi_metropolis(data,prior,forward,options)
  Input :
     data : sippi data structure
     prior : sippi prior structure
     forward : sippi forward structure
 
  options :
 
     options.mcmc.nite=30000;   % [1] : Number if iterations
     options.mcmc.i_sample=100; % : Number of iterations between saving model to disk
     options.mcmc.i_plot=50;  % [1]: Number of iterations between updating plots
     options.mcmc.i_save_workspace=10000;  % [1]: Number of iterations between
                                             saving the complete workspace
     options.mcmc.i_sample=100; % : Number of iterations between saving model to disk
 
     options.mcmc.m_init : Manually chosen starting model
     options.mcmc.m_ref  : Reference known target model
 
     options.mcmc.accept_only_improvements [0] : Optimization
     options.mcmc.accept_all [0]: accepts all proposed models (ignores lilkelihood)
 
     options.txt [string] : string to be used as part of all output file names
 
     %% PERTURBATION STRATEGY
     % Perturb all model parameter all the time
     options.mcmc.pert_strategy.perturb_all=1; % Perturb all priors in each
                                               % iteration. def =[0]
     options.mcmc.pert_strategy.perturb_all=2; % Perturb a random selection of 
                                               % all priors in each iteration. def =[0]
 
     % Perturb one a prior type at a time, according to some frequency
     options.mcmc.pert_strategy.i_pert = [1,3]; % only perturb prior 1 and 3
     options.mcmc.pert_strategy.i_pert_freq = [2 8]; % perturb prior 3 80% of
                                                % the time and prior 1 20%
                                                % of the time
     % the default pertubation strategt is to select one prior model to
     % perturb at tandom for each iteration
 
 
     %% TEMPERING
     options.mcmc.n_chains=1; % set number of chains (def=1)
     options.mcmc.T=1;      % set temperature of chains [1:n_chains]
     options.mcmc.chain_frequency_jump=0.1; % probability allowing a jump
                                            %  between two chains
     %% ANNEALING (TEMPERATURE AS A FUNCTION OF ITERATION NUMBER)
     options.mcmc.anneal.i_begin=1; % default, iteration number when annealing begins
     options.mcmc.anneal.i_end=100000; %  iteration number when annealing stops
     options.mcmc.anneal.T_begin=5; % Start temperature for annealing
     options.mcmc.anneal.T_end=1; % End temperature for annealing
 
     %% VERBOSITY
     The amount of text info displayed at the prompt, can be controlled by
     setenv('SIPPI_VERBOSE_LEVEL','2') % all: information on chain swapping
     setenv('SIPPI_VERBOSE_LEVEL','1') % information about seq-gibbs step update
     setenv('SIPPI_VERBOSE_LEVEL','0'); % [def] frequent update
     setenv('SIPPI_VERBOSE_LEVEL','-1'); % rare update om finish time
     setenv('SIPPI_VERBOSE_LEVEL','-2'); % indication of stop and start
     setenv('SIPPI_VERBOSE_LEVEL','-3'); % none
 
  See also sippi_rejection
 
 

sippi_prior

  sippi_prior: A priori models for SIPPI
 
  To generate a realization of the prior model defined by the prior structure use:
    [m_propose,prior]=sippi_prior(prior);
 
  To generate a realization of the prior model defined by the prior structure,
  in the vicinity of a current model (using sequential Gibbs sampling) use:
    [m_propose,prior]=sippi_prior(prior,m_current);
 
  The following types of a priori models can be used
    % two point statistics bases
    GAUSSIAN   [1D] : 1D generalized gaussian model
    UNIFORM [1D-3D] : 1D-3D uncorrelated uniform distribution
    CHOLESKY[1D-3D] : based on Cholesky decomposition
    FFTMA   [1D-3D] : based on the FFT-MA method (Multivariate Gaussian)
    VISIM   [1D-3D] : based on Sequential Gaussian and Direct Sequential simulation
    SISIM   [1D-3D] : based on Sequential indicator SIMULATION
    % multiple point based statistics
    SNESIM_STD  [1D-3D] : (SGEMS) based on a multiple point statistical model inferref from a training images. Relies in the SNESIM algorithm
    SNESIM  [1D-3D] : (GSLIB STYLE) based on a multiple point statistical model inferref from a training images. Relies in the SNESIM algorithm
 
 
 %%% SIMPLE EXAMPLE %%%
 
 % A simple 2D multivariate Gaissian based prior model based on the
 % FFT-MA method, can be defined using
    im=1;
    prior{im}.type='FFTMA';
    prior{im}.name='A SIMPLE PRIOR';
    prior{im}.x=[0:1:100];
    prior{im}.y=[0:1:100];
    prior{im}.m0=10;
    prior{im}.Va='1 Sph(10)';
    prior=sippi_prior_init(prior);
 % A realization from this prior model can be generated using
    m=sippi_prior(prior);
 % This realization can now be plotted using
    sippi_plot_prior(m,prior);
 % or
    imagesc(prior{1}.x,prior{1}.y,m{1})
 
 %%% A PRIOR MODEL WITH SEVERAL 'TYPES OF A PRIORI MODEL'
 
    im=1;
    prior{im}.type='GAUSSIAN';
    prior{im}.m0=100;
    prior{im}.std=50;
    prior{im}.norm=100;
    im=im+1;
    prior{im}.type='FFTMA';
    prior{im}.x=[0:1:100];
    prior{im}.y=[0:1:100];
    prior{im}.m0=10;
    prior{im}.Cm='1 Sph(10)';
    im=im+1;
    prior{im}.type='VISIM';
    prior{im}.x=[0:1:100];
    prior{im}.y=[0:1:100];
    prior{im}.m0=10;
    prior{im}.Cm='1 Sph(10)';
    im=im+1;
    prior{im}.type='SISIM';
    prior{im}.x=[0:1:100];
    prior{im}.y=[0:1:100];
    prior{im}.m0=10;
    prior{im}.Cm='1 Sph(10)';
    im=im+1;
    prior{im}.type='SNESIM';
    prior{im}.x=[0:1:100];
    prior{im}.y=[0:1:100];
 
    sippi_plot_prior(prior);
 
 %% Sequential Gibbs sampling
 
    All a priori model types can be perturbed, such that a new realization
    is generated in the vicinity of a current model.
    To do this Sequential Gibbs Sampling is used.
    For more information, see <a href="matlab:web('http://dx.doi.org/10.1007/s10596-011-9271-1')">Hansen, T. M., Cordua, K. S., and Mosegaard, K., 2012. Inverse problems with non-trivial priors - Efficient solution through Sequential Gibbs Sampling. Computational Geosciences</a>.
    The type of sequential Gibbs sampling can be controlled in the
    'seq_gibbs' structures, e.g. prior{1}.seq_gibbs
 
    im=1;
    prior{im}.type='SNESIM';
    prior{im}.x=[0:1:100];
    prior{im}.y=[0:1:100];
 
    [m,prior]=sippi_prior(prior);
    prior{1}.seq_gibbs.step=1; % Large step--> independant realizations
    prior{1}.seq_gibbs.step=.1; % Smaller step--> Dependant realizations
    for i=1:30;
       [m,prior]=sippi_prior(prior,m); % One iteration of Sequential Gibbs
       sippi_plot_prior(prior,m);
    end
 
  See also: sippi_prior_init, sippi_plot_prior, sippi_plot_prior_sample, sippi_prior_set_steplength.m
 
  TMH/2012
 

sippi_prior_cholesky

  sippi_prior_cholesky : Cholesky type Gaussian prior for SIPPI
 
 % Example:
    ip=1;
    prior{ip}.type='cholesky';
    prior{ip}.m0=10;
    prior{ip}.Cm='.001 Nug(0) + 1 Gau(10)';
    prior{ip}.x=0:1:100;linspace(0,100,20);
    prior{ip}.y=0:1:50;linspace(0,33,30);
    [m,prior]=sippi_prior_cholesky(prior);
    sippi_plot_prior(prior,m);
 
 % Sequential Gibbs sampling
    prior{1}.seq_gibbs.step=.1;
    for i=1:100;
        [m,prior]=sippi_prior_cholesky(prior,m);
        sippi_plot_prior(prior,m);
        caxis([8 12]);drawnow;
    end
 
 % Prior covariance model
  The prior covarince model can be setup using
    prior{ip}.m0=10;
    prior{ip}.Cm='.001 Nug(0) + 1 Gau(10)';
  or
    prior{ip}.m0=10;
   and the 'Cmat' variable 'prior{ip}.Cmat' which much the contain a full
   nd X nd size covariance matrix.
   (it is computed the first the sippi_prior_cholesky is called)
 
  See also: gaussian_simulation_cholesky
 

sippi_prior_dsim

  sippi_prior_dsim : Direct simulation in SIPPI
 
  Example: 
   
  prior{1}.type='dsim';
  prior{1}.x=1:1:40;;
  prior{1}.y=1:1:30;;
  prior{1}.ti=channels;;
 
  m=sippi_prior(prior);
  sippi_plot_prior(prior,m);
 
 
 
  % OPTIONAL OPTIONS
 
    prior{1}.options.n_cond [int]: number of conditional points (def=5)
    prior{1}.options.n_max_ite [int]: number of maximum iterations through the TI for matching patterns (def=200)
  
    prior{1}.options.plot    [int]: [0]:none, [1]:plot cond, [2]:storing movie (def=0)
    prior{1}.options.verbose [int]: [0] no infor to screen, [1]:some info (def=1)
  
  
 
  TMH/2014
 
  See also: sippi_prior_init, sippi_prior
 

sippi_prior_init

  sippi_prior_init Initialize PRIOR structure for SIPPI
 
  Call
    prior=sippi_prior_init(prior);
 
  See also sippi_prior
 

sippi_prior_mps

  sippi_prior_mps : prior based on MPS
 
                       Using SNESIM/ENESIM FROM 
                       https://github.com/ergosimulation/mpslib
  
 % Example:
     ip=1;
     prior{ip}.type='mps';
     prior{ip}.method='mps_snesim';
     prior{ip}.x=1:1:80;
     prior{ip}.y=1:1:80;
     prior{ip}.ti=channels;
     % prior{ip}.ti=maze;
 
     m=sippi_prior(prior);
     sippi_plot_prior(prior,m)
     figure(1);imagesc(prior{ip}.ti);axis image
 
 
 %  The specific algorithm use for MPS simulation is defined in ytje 'method' field
     prior{ip}.method='mps_snesim';         % default, same as 'mps_snesim_tree'
     prior{ip}.method='mps_snesim_tree';
     prior{ip}.method='mps_snesim_list';
     prior{ip}.method='mps_genesim';
 
     All properties for each algorithm are availale in the prior{ip}.MPS
     field
 
  See also: sippi_prior, ti, mps_cpp

sippi_prior_plurigaussian

  sippi_prior_plurigaussian: Plurigaussian type prior for SIPPI
 
 % Example:
    % PluriGaussian based on one Gaussian model / truncated Gaussian
    ip=1;
    prior{ip}.type='plurigaussian';
    prior{ip}.x=1:1:100;
    prior{ip}.y=1:1:100;
    prior{ip}.Cm='1 Gau(10)';
    prior{ip}.pg_map=[0 0 0 0 1 1 0 0 2 2 2];
 
    % PluriGaussian based on two Gaussian models 
    ip=ip+1;
    prior{ip}.type='plurigaussian';
    prior{ip}.x=1:1:100;
    prior{ip}.y=1:1:100;
    prior{ip}.pg_prior{1}.Cm=' 1 Gau(10)';
    prior{ip}.pg_prior{2}.Cm=' 1 Sph(10,90,.4)';
    prior{ip}.pg_map=[0 0 0 1 1; 1 2 0 1 1; 1 1 1 1 1];
 
    [m,prior]=sippi_prior(prior);
    sippi_plot_prior(prior,m);
 
    sippi_plot_prior_sample(prior,1,5);
    sippi_plot_prior_sample(prior,2,5);
 
 
 % Sequential Gibbs sampling
    prior{1}.seq_gibbs.step=.01;
    for i=1:100;
        [m,prior]=sippi_prior(prior,m);
        sippi_plot_prior(prior,m);
        caxis([0 2]);drawnow;
    end
 
  See also: sippi_prior, pg_transform
 

sippi_prior_set_steplength

  sippi_prior_set_steplength Set step length for Metropolis sampler in SIPPI
 
  Call
    prior=sippi_prior_set_steplength(prior,mcmc,im);
 

sippi_prior_sisim

  sippi_prior_sisim: SISIM (SGeMS) type prior for SIPPI
 
 % Example:
     ip=1;
     prior{ip}.type='sisim';
     prior{ip}.x=1:1:80;
     prior{ip}.y=1:1:80;
     prior{ip}.Cm='1 Sph(60)';
     prior{ip}.marginal_prob=[.1 .4 .5];
     m=sippi_prior(prior);
     sippi_plot_prior(prior,m)
 
     % optionally a specific random seed can be set using
     prior{ip}.seed=1;
 
 % Sequential Gibbs sampling type 1 (box selection of pixels)
     prior{ip}.seq_gibbs.type=1;%
     prior{ip}.seq_gibbs.step=10; % resim data in 10x10 pixel grids
     [m,prior]=sippi_prior(prior);
     for i=1:10;
        [m,prior]=sippi_prior(prior,m);
        sippi_plot_prior(prior,m);
        drawnow;
     end
 
 % Sequential Gibbs sampling type 2 (random pixels)
     prior{ip}.seq_gibbs.type=2;%
     prior{ip}.seq_gibbs.step=.6; % Resim 60% of data
     [m,prior]=sippi_prior(prior);
     for i=1:10;
        [m,prior]=sippi_prior(prior,m);
        sippi_plot_prior(prior,m);
        drawnow;
     end
 
  See also: sippi_prior, sgems
 

sippi_prior_snesim

  sippi_prior_snesim : SNESIM type Gaussian prior for SIPPI
 
                       Using SNESIM form
                       https://github.com/SCRFpublic/snesim-standalone
 
 % Example:
     ip=1;
     prior{ip}.type='snesim';
     prior{ip}.x=1:1:80;
     prior{ip}.y=1:1:80;
     prior{ip}.ti=channels;
     % prior{ip}.ti=maze;
 
     m=sippi_prior(prior);
     sippi_plot_prior(prior,m)
     figure(1);imagesc(prior{ip}.ti);axis image
 
 % Example: scaling and rotation
     ip=1;
     prior{ip}.type='snesim';
     prior{ip}.x=1:1:80;
     prior{ip}.y=1:1:80;
     prior{ip}.ti=channels;
     prior{ip}.scaling=[.1];
     prior{ip}.rotation=[10];
 
     m=sippi_prior(prior);
     sippi_plot_prior(prior,m)
     figure(1);imagesc(prior{ip}.ti);axis image
 
 % Hard data
    % hard data are given using either matrix of 4 columns (x,y,z,val)
    % or as a 4 column EAS file (x,y,z,val)
    d_hard=[1 1 0 0; 1 2 0 0; 2 2 0 1 ];
    prior{ip}.hard_data=d_hard;
 
    write_eas('snesim_hard.dat',d_hard);
    prior{ip}.hard_data='snesim_hard.dat';
 
 % Soft data
    % soft mush be provided as a matrix of the same size as the simulation
    % grid
    d_soft(:,:,1)=ones(80,80).*NaN
    d_soft(:,:,2)=1-d_soft(:,:,1);
    prior{ip}.soft_data_grid=d_soft;
 
 
    % Optionally the soft data can be provided as point data, in which case
    % a grid, the size of the simulation grid, with soft data values will be computed
    d_soft=[1 1 0 0.2 0.8; 1 2 0 0.1 0.9; 2 2 0  0.05 0.95];
    prior{ip}.soft_data=d_soft;
 
 % Sequential Gibbs sampling type 1 (box selection of pixels)
     prior{ip}.seq_gibbs.type=1;%
     prior{ip}.seq_gibbs.step=10; % resim data in 10x10 pixel grids
     [m,prior]=sippi_prior(prior);
     for i=1:10;
        [m,prior]=sippi_prior(prior,m);
        sippi_plot_prior(prior,m);
        drawnow;
     end
 
 % Sequential Gibbs sampling type 2 (random pixels)
     prior{ip}.seq_gibbs.type=2;%
     prior{ip}.seq_gibbs.step=.6; % Resim 60% of data
     [m,prior]=sippi_prior(prior);
     for i=1:10;
        [m,prior]=sippi_prior(prior,m);
        sippi_plot_prior(prior,m);
        drawnow;
     end
 
  See also: sippi_prior, ti
 

sippi_prior_snesim_std

  sippi_prior_snesim_std : SNESIM_STD (SGeMS) type Gaussian prior for SIPPI
                       
                       Requires SGeMS version 2.1b, available from 
                       http://sgems.sourceforge.net/?q=node/77
  
 % Example:
     ip=1;
     prior{ip}.type='snesim_std';
     prior{ip}.x=1:1:80;
     prior{ip}.y=1:1:80;
     prior{ip}.ti=channels;
     % prior{ip}.ti=maze;
 
     m=sippi_prior(prior);
     sippi_plot_prior(prior,m)
     figure(1);imagesc(prior{ip}.ti);axis image
 
 % Hard data
    % hard data are given using either matrix of 4 columns (x,y,z,val)
    % or as a 4 column EAS file (x,y,z,val)
    d_hard=[1 1 0 0; 1 2 0 0; 2 2 0 1 ];
    prior{ip}.hard_data=d_hard;
 
    write_eas('snesim_hard.dat',d_hard);
    sgems_write_pointset('snesim_hard.sgems',d_hard);
    prior{ip}.hard_data='snesim_hard.sgems';
 
 % Example: scaling and rotation
     ip=1;
     prior{ip}.type='snesim_std';
     prior{ip}.x=1:1:80;
     prior{ip}.y=1:1:80;
     prior{ip}.ti=channels;
     prior{ip}.scaling=[.1];
     prior{ip}.rotation=[10];
 
     m=sippi_prior(prior);
     sippi_plot_prior(prior,m)
     figure(1);imagesc(prior{ip}.ti);axis image
 
 % Sequential Gibbs sampling type 1 (box selection of pixels)
     prior{ip}.seq_gibbs.type=1;%    
     prior{ip}.seq_gibbs.step=10; % resim data in 10x10 pixel grids
     [m,prior]=sippi_prior(prior);
     for i=1:10;
        [m,prior]=sippi_prior(prior,m);
        sippi_plot_prior(prior,m);
        drawnow;
     end
 
 % Sequential Gibbs sampling type 2 (random pixels)
     prior{ip}.seq_gibbs.type=2;%    
     prior{ip}.seq_gibbs.step=.6; % Resim 60% of data
     [m,prior]=sippi_prior(prior);
     for i=1:10;
        [m,prior]=sippi_prior(prior,m);
        sippi_plot_prior(prior,m);
        drawnow;
     end
 
  See also: sippi_prior, sippi_prior_snbesim, ti
 

sippi_prior_uniform

  sippi_prior_uniform : Uniform prior for SIPPI
 
 
 % Example 1D uniform
    ip=1;
    prior{ip}.type='uniform';
    prior{ip}.min=10;
    prior{ip}.max=25;
    [m,prior]=sippi_prior_uniform(prior);
    sippi_plot_prior_sample(prior);
 
 % Example 10D uniform
    ip=1;
    prior{ip}.type='uniform';
    prior{ip}.x=1:1:10; % As dimensions are uncorrelated, only the lehgth
                        % of prior{ip}.x matters, not its actual values.
    prior{ip}.min=10;
    prior{ip}.max=25;
    [m,prior]=sippi_prior_uniform(prior);
    sippi_plot_prior_sample(prior);
 
 % Sequential Gibbs sampling
    prior{1}.seq_gibbs.step=.1;
    for i=1:1000;
        [m,prior]=sippi_prior(prior,m);
        mm(i)=m{1};
    end
    subplot(1,2,1);plot(mm);
    subplot(1,2,2);hist(mm);
 
  TMH/2014
 
  See also: sippi_prior_init, sippi_prior
 

sippi_prior_visim

  sippi_prior_visim : VISIM type Gaussian prior for SIPPI
 
 % Example:
     ip=1;
     prior{ip}.type='visim';
     prior{ip}.x=1:1:80;
     prior{ip}.y=1:1:80;
     prior{ip}.Cm='1 Sph(60)';
     m=sippi_prior(prior);
     sippi_plot_prior(prior,m)
 
     % optionally a specific random seed can be set using
     prior{ip}.seed=1;
 
 % Sequential Gibbs sampling type 1 (box selection of pixels)
     prior{ip}.seq_gibbs.type=1;
     prior{ip}.seq_gibbs.step=10; % resim data in 10x10 pixel grids
     prior{ip}.cax=[-2 2];
     [m,prior]=sippi_prior(prior);
     for i=1:1000;
        [m,prior]=sippi_prior(prior,m);
        sippi_plot_prior(prior,m);
        drawnow;
     end
 
 % Sequential Gibbs sampling type 2 (random pixels)
     prior{ip}.seq_gibbs.type=2;%
     prior{ip}.seq_gibbs.step=.6; % Resim 60% of data
     [m,prior]=sippi_prior(prior);
     for i=1:10;
        [m,prior]=sippi_prior(prior,m);
        sippi_plot_prior(prior,m);
        drawnow;
     end
 
 % TARGET DISTRIBUTION
  clear prior
  d_target=[7 8 9 10 11 11 12];
  d_target=[7 8 9 10 14 15 20];
 
  ip=1;
  prior{ip}.type='visim';
  prior{ip}.method='sgsim';
  % prior{ip}.method='dssim';
  prior{ip}.d_target=d_target;
  prior{ip}.cax=[min(d_target) max(d_target)];
  prior{ip}.x=1:1:80;
  prior{ip}.y=1:1:80;
  prior{ip}.Cm=sprintf('%g Gau(20)',var(d_target));
  prior{ip}.Cm=sprintf('%g Gau(20)',1);
  [m,prior]=sippi_prior(prior);
  sippi_plot_prior(prior,m);
 
  prior{ip}.seq_gibbs.step=16;
  prior{ip}.seq_gibbs.type=1;
  for i=1:10;
     [m,prior]=sippi_prior(prior,m);
     sippi_plot_prior(prior,m);
     drawnow
  end
 
 
  See also: sippi_prior, visim, nscore, inscore
 

sippi_prior_voronoi

  sippi_prior_voronoi: 
 
  TMH/2014
 
  Ex: 
    prior{1}.type='voronoi';
    prior{1}.x=1:1:20;
    prior{1}.y=1:1:20;
    prior{1}.cells_N_min=2;
    prior{1}.cells_N_max=100;
    prior{1}.cells_N=10;
    [m,prior]=sippi_prior(prior);
    sippi_plot_prior(prior,m);
 
  See also: sippi_prior_init, sippi_prior
 

sippi_rejection

  sippi_rejection Rejection sampling
 
  Call :
      options=sippi_rejection(data,prior,forward,options)
 
  input arguments
 
    options.mcmc.i_plot
    options.mcmc.nite     % maximum number of iterations
    options.mcmc.logLmax [def=1]; % Maximum possible log-likelihood value
 
    options.mcmc.rejection_normalize_log = log(options.mcmc.Lmax)
 
    options.mcmc.adaptive_rejection=1, adaptive setting of maximum likelihood
                   (def=[0])
                   At each iteration logLmax will be set if log(L(m_cur)=>options.mcmc.logLmax
 
 
    options.mcmc.max_run_time_hours = 1; % maximum runtime in hours
                                         % (overrides options.mcmc.nite if needed)
 
    options.mcmc.T = 1; % Tempering temperature. T=1, implies no tempering
 
  See also sippi_metropolis
 
 

sippi_set_path

  sippi_set_path Set paths for running sippi