pyhrf.jde.beta module

class pyhrf.jde.beta.BetaSampler(do_sampling=True, use_true_value=False, val_ini=array([ 0.7]), sigma=0.05, pr_beta_cut=1.2, pf_method='es', pf=None)

Bases: pyhrf.xmlio.Initable, pyhrf.jde.samplerbase.GibbsSamplerVariable

checkAndSetInitValue(variables)
getOutputs()
get_string_value(v)
linkToData(dataInput)
loadBetaGrid()
parametersComments = {'pf_method': 'either "es" (extrapolation scheme) or "ps" (path sampling)'}
parametersToShow = ['do_sampling', 'val_ini']
sampleNextInternal(variables)
samplingWarmUp(variables)
saveCurrentValue(it)
pyhrf.jde.beta.Cpt_AcceptNewBeta_Graph(RefGraph, GraphNodesLabels, VecEstim_lnZ, VecBetaVal, CurrentBeta, sigma, thresh=1.2, GraphWeight=None)

Starting from a given Beta vector (1 value for each condition) ‘CurrentBeta’, computes new Beta values in ‘NewBeta’ using a Metropolis-Hastings step. input:

  • RefGraph: List which contains the connectivity graph. Each entry represents a node of the graph

    and contains the list of its neighbors entry location in the graph. ex: RefGraph[2][3]=10 means 3rd neighbour of the 2nd node is the 10th node.

    => There exists i such that RefGraph[10][i]=2

  • GraphWeight: Same shape as RefGraph. Each entry is the weight of the corresponding

    edge in RefGraph. If not defined the weights are set to 1.0.

  • GraphNodesLabels: Nodes labels. GraphNodesLabels[i] is the node i label.

  • VecEstim_lnZ: Vector containing the ln(Z(beta,mask)) estimates (in accordance with the defined mask).

  • VecBetaVal: Vector of the same size as VecExpectZ containing the corresponding beta

    value (in accordance with the defined mask).

  • CurrentBeta: Beta at the current iteration

  • sigma: such as NewBeta = CurrentBeta + N(0,sigma)

  • thresh: the prior on beta is uniform between 0 and thresh and linearly decrease between thresh and VecBetaVal[-1]

  • GraphWeight: Same shape as RefGraph. Each entry is the weight of the corresponding

    edge in RefGraph. If not defined the weights are set to 1.0.

output:
  • NewBeta: Contains the accepted beta value at the next iteration
pyhrf.jde.beta.Cpt_Distrib_P_beta_graph(RefGraph, GraphNodesLabels, VecEstim_lnZ, VecBetaVal, thresh=1.5, GraphWeight=None)

Computes the distribution P(beta|q) input:

  • RefGraph: List which contains the connectivity graph. Each entry represents a node of the graph

    and contains the list of its neighbors entry location in the graph. ex: RefGraph[2][3]=10 means 3rd neighbour of the 2nd node is the 10th node.

    => There exists i such that RefGraph[10][i]=2

  • GraphNodesLabels: Nodes labels. GraphNodesLabels[i] is the node i label.

  • VecEstim_lnZ: Vector containing the ln(Z(beta,mask)) estimates (in accordance with the defined graph).

  • VecBetaVal: Vector of the same size as VecExpectZ containing the corresponding beta

    value (in accordance with the defined graph).

  • thresh: the prior on beta is uniform between 0 and thresh and linearly decrease between thresh and VecBetaVal[-1]

  • GraphWeight: Same shape as RefGraph. Each entry is the weight of the corresponding

    edge in RefGraph. If not defined the weights are set to 1.0.

output:
  • Vec_P_Beta: contains the P(beta|q) values (consistant with VecBetaVal).
pyhrf.jde.beta.Cpt_Exact_lnZ_graph(RefGraph, beta, LabelsNb, GraphWeight=None)

Computes the logarithm of the exact partition function Z(eta). input:

  • RefGraph: List which contains the connectivity graph. Each entry represents a node of the graph

    and contains the list of its neighbors entry location in the graph. ex: RefGraph[2][3]=10 means 3rd neighbour of the 2nd node is the 10th node.

    => There exists i such that RefGraph[10][i]=2

  • beta: spatial regularization parameter

  • LabelsNb: number of labels in each site (typically 2 or 3)

  • GraphWeight: Same shape as RefGraph. Each entry is the weight of the corresponding

    edge in RefGraph. If not defined the weights are set to 1.0.

output:
  • exact_lnZ: exact value of ln(Z)
pyhrf.jde.beta.Cpt_Expected_U_graph(RefGraph, beta, LabelsNb, SamplesNb, GraphWeight=None, GraphNodesLabels=None, GraphLinks=None, RefGrphNgbhPosi=None)

Useless now!

Estimates the expectation of U for a given normalization constant Beta and a given mask shape. Swendsen-Wang sampling is used to assess the expectation on significant images depending of beta. input:

  • RefGraph: List which contains the connectivity graph. Each entry

    represents a node of the graph and contains the list of its neighbors entry location in the graph. ex: RefGraph[2][3]=10 means 3rd neighbour of the 2nd

    node is the 10th node.

    => There exists i such that RefGraph[10][i]=2

  • beta: normalization constant

  • LabelsNb: Labels number

  • SamplesNb: Samples number for the U expectation estimation

  • GraphWeight: Same shape as RefGraph. Each entry is the weight of the

    corresponding edge in RefGraph. If not defined the weights are set to 1.0.

  • GraphNodesLabels: Optional list containing the nodes labels.

    The sampler aims to modify its values in function of beta and NbLabels. At this level this variable is seen as temporary and will be modified. Defining it slightly increases the calculation times.

  • GraphLinks: Same shape as RefGraph. Each entry indicates if the link

    of the corresponding edge in RefGraph is considered (if yes ...=1 else ...=0). At this level this variable is seen as temporary and will be modified. Defining it slightly increases the calculation times.

  • RefGrphNgbhPosi: Same shape as RefGraph. RefGrphNgbhPosi[i][j]

    indicates for which k is the link to i in RefGraph[RefGraph[i][j]][k]. This optional list is never modified.

output:
  • ExpectU: U expectation
pyhrf.jde.beta.Cpt_Vec_Estim_lnZ_Graph(RefGraph, LabelsNb, SamplesNb=40, BetaMax=1.4, BetaStep=0.05, GraphWeight=None)

Estimates ln(Z) for fields of a given size and Beta values between 0 and BetaMax. Estimates of ln(Z) are first computed on a coarse grid of Beta values. They are then computed and returned on a fine grid. No approximation using precomputed partition function is performed here. input:

  • RefGraph: List which contains the connectivity graph. Each entry

    represents a node of the graph and contains the list of its neighbors entry location in the graph. ex: RefGraph[2][3]=10 means 3rd neighbour of the 2nd node is the 10th node. => There exists i such that RefGraph[10][i]=2

  • LabelsNb: number of labels

  • SamplesNb: number of fields estimated for each beta

  • BetaMax: Z(beta,mask) will be computed for beta between 0 and BetaMax

  • BetaStep: gap between two considered values of beta (...in the fine

    grid. This gap in the coarse grid is automatically fixed and depends on the graph size.)

  • GraphWeight: Same shape as RefGraph. Each entry is the weight of

    the corresponding edge in RefGraph. If not defined the weights are set to 1.0.

output:
  • VecEstim_lnZ: Vector containing the ln(Z(beta,mask)) estimates

  • VecBetaVal: Vector of the same size as VecExpectZ containing the

    corresponding beta value

pyhrf.jde.beta.Cpt_Vec_Estim_lnZ_Graph_fast(RefGraph, LabelsNb, MaxErrorAllowed=5, BetaMax=1.4, BetaStep=0.05)

Estimate ln(Z(beta)) of Potts fields. The default Beta grid is between 0. and 1.4 with a step of 0.05. Extrapolation algorithm is used. Fast estimates are only performed for Ising fields (2 labels). Reference partition functions were pre-computed on Ising fields designed on regular and non-regular grids. They all respect a 6-connectivity system. input:

  • RefGraph: List which contains the connectivity graph. Each entry represents a node of the graph

    and contains the list of its neighbors entry location in the graph. ex: RefGraph[2][3]=10 means 3rd neighbour of the 2nd node is the 10th node. => There exists i such that RefGraph[10][i]=2

  • LabelsNb: possible number of labels in each site of the graph

  • MaxErrorAllowed: maximum error allowed in the graph estimation (in percents).

  • BetaMax: Z(beta,mask) will be computed for beta between 0 and BetaMax. Maximum considered value is 1.4

  • BetaStep: gap between two considered values of beta. Actual gaps are not exactly those asked but very close.

output:
  • Est_lnZ: Vector containing the ln(Z(beta)) estimates
  • V_Beta: Vector of the same size as VecExpectZ containing the corresponding beta value
pyhrf.jde.beta.Cpt_Vec_Estim_lnZ_Graph_fast2(RefGraph, BetaMax=1.4, BetaStep=0.05)

Estimate ln(Z(beta)) of Ising fields (2 labels). The default Beta grid is between 0. and 1.4 with a step of 0.05. Bilinar estimation with the number of sites and cliques is used. The bilinear functions were estimated using bilinear regression on reference partition functions on 240 non-regular grids and with respect to a 6-connectivity system. (Pfs are found in LoadBaseLogPartFctRef -> PFs 0:239)

input:
  • RefGraph: List which contains the connectivity graph. Each entry represents a node of the graph

    and contains the list of its neighbors entry location in the graph. ex: RefGraph[2][3]=10 means 3rd neighbour of the 2nd node is the 10th node. => There exists i such that RefGraph[10][i]=2

  • BetaMax: Z(beta,mask) will be computed for beta between 0 and BetaMax. Maximum considered value is 1.4

  • BetaStep: gap between two considered values of beta. Actual gaps are not exactly those asked but very close.

output:
  • Est_lnZ: Vector containing the ln(Z(beta)) estimates
  • V_Beta: Vector of the same size as VecExpectZ containing the corresponding beta value
pyhrf.jde.beta.Cpt_Vec_Estim_lnZ_Graph_fast3(RefGraph, LabelsNb, MaxErrorAllowed=5, BetaMax=1.4, BetaStep=0.05)

Estimate ln(Z(beta)) of Potts fields. The default Beta grid is between 0. and 1.4 with a step of 0.05. Extrapolation algorithm is used. Fast estimates are only performed for Ising fields (2 labels). Reference partition functions were pre-computed on Ising fields designed on regular and non-regular grids. They all respect a 6-connectivity system. input:

  • RefGraph: List which contains the connectivity graph. Each entry represents a node of the graph

    and contains the list of its neighbors entry location in the graph. ex: RefGraph[2][3]=10 means 3rd neighbour of the 2nd node is the 10th node. => There exists i such that RefGraph[10][i]=2

  • LabelsNb: possible number of labels in each site of the graph

  • MaxErrorAllowed: maximum error allowed in the graph estimation (in percents).

  • BetaMax: Z(beta,mask) will be computed for beta between 0 and BetaMax. Maximum considered value is 1.4

  • BetaStep: gap between two considered values of beta. Actual gaps are not exactly those asked but very close.

output:
  • Est_lnZ: Vector containing the ln(Z(beta)) estimates
  • V_Beta: Vector of the same size as VecExpectZ containing the corresponding beta value
pyhrf.jde.beta.Cpt_Vec_Estim_lnZ_OLD_Graph(RefGraph, LabelsNb, SamplesNb=50, BetaMax=1.0, BetaStep=0.01, GraphWeight=None)

Useless now!

Estimates ln(Z) for fields of a given size and Beta values between 0 and BetaMax input:

  • RefGraph: List which contains the connectivity graph. Each entry represents a node of the graph

    and contains the list of its neighbors entry location in the graph. ex: RefGraph[2][3]=10 means 3rd neighbour of the 2nd node is the 10th node.

    => There exists i such that RefGraph[10][i]=2

  • LabelsNb: number of labels

  • BetaMax: Z(beta,mask) will be computed for beta between 0 and BetaMax

  • BetaStep: gap between two considered values of bseta

  • GraphWeight: Same shape as RefGraph. Each entry is the weight of the corresponding

    edge in RefGraph. If not defined the weights are set to 1.0.

output:
  • VecEstim_lnZ: Vector containing the ln(Z(beta,mask)) estimates
  • VecBetaVal: Vector of the same size as VecExpectZ containing the corresponding beta value
pyhrf.jde.beta.Cpt_Vec_Estim_lnZ_Onsager(n, BetaMax=1.2, BetaStep=0.05)

Estimate ln(Z(beta)) Onsager using Onsager technique (2D periodic fields - 2 labels - 4 connectivity) input:

  • n: number of sites
  • BetaMax: Z(beta,mask) will be computed for beta between 0 and BetaMax. Maximum considered value is 1.2.
  • BetaStep: gap between two considered values of beta. Actual gaps are not exactly those asked but very close.
output:
  • Est_lnZ: Vector containing the ln(Z(beta)) estimates
  • V_Beta: Vector of the same size as VecExpectZ containing the corresponding beta value
pyhrf.jde.beta.Estim_lnZ_Onsager(n, beta)

Estimate ln(Z(beta)) using Onsager technique (2D periodic fields - 2 labels - 4 connectivity) input:

  • n: number of sites
  • beta: beta
output:
  • LogZ: ln(Z(beta)) estimate
pyhrf.jde.beta.Estim_lnZ_ngbhd_graph(RefGraph, beta_Ngbhd, beta_Ref, lnZ_ref, VecU_ref, LabelsNb)

Estimates ln(Z) for beta=betaNgbhd. beta_Ngbhd is supposed close to beta_Ref for which ln(Z) is known (lnZ_ref) and the energy U of fields generated according to it have already been computed (VecU_ref). input:

  • RefGraph: List which contains the connectivity graph. Each entry

    represents a node of the graph and contains the list of its neighbors entry location in the graph. ex: RefGraph[2][3]=10 means 3rd neighbour of the 2nd node is the 10th node. => There exists i such that RefGraph[10][i]=2

  • beta_Ngbhd: normalization constant for which ln(Z) will be estimated

  • beta_Ref: normalization constant close to beta_Ngbhd for which ln(Z)

    already known

  • lnZ_ref: ln(Z) for beta=beta_Ref

  • VecU_ref: energy U of fields generated according to beta_Ref

  • LabelsNb: Labels number

output:
  • lnZ_Ngbhd: ln(Z) for beta=beta_Ngbhd
pyhrf.jde.beta.LoadBaseLogPartFctRef()
output:
  • BaseLogPartFctRef: dictionnary that contains the data base of log-PF (first value = nb labels / second value = nb. sites / third value = nb. cliques)
  • V_Beta_Ref: Beta grid corresponding to the log-PF values in ‘Est_lnZ_Ref’
pyhrf.jde.beta.beta_estim_obs_field(graph, labels, gridLnz, method='MAP', weights=None)

Estimate the amount of spatial correlation of an Ising observed field. ‘graph’ is the neighbours list defining the topology ‘labels’ is the field realisation ‘gridLnz’ is the log-partition function associated to the topology, ie a grid where gridLnz[0] stores values of lnz and gridLnz[1] stores corresponding values of beta. Return :

  • estimated beta
  • tabulated distribution p(beta|labels)
pyhrf.jde.beta.logpf_ising_onsager(size, beta)

Calculate log partition function in terms of beta for an Ising field of size ‘size’. ‘beta’ can be scalar or numpy.array. Assumptions: the field is 2D, squared, toroidal and has 4-connectivity