# ComputeMorph¶

class ComputeMorph : public feasst::TrialCompute

Attempt to morph particle(s) a, b, …, h into particle(s) $$z_a, z_b, ..., z_h$$.

To avoid trivial morphs, the particle type of $$i$$ cannot be equal to the type of $$z_i$$.

The derivation of the acceptance criteria follows a similar procedure as descibed in TrialComputeAdd and ComputeAddMultiple.

 Forward event [reverse event] Probability, $$\pi_{on}$$ [reverse probability, $$\pi_{no}$$] Change particle of type a to z_a [Change particle of type z_a to a] $$1/N_a$$ $$[1/(N_{z_a}+\sum_{x=a}^h \delta_{z_az_x} - \delta_{z_ax})]$$ Change particle of type b to z_b [Change particle of type z_b to b] $$1/(N_b+1+\sum_{x=a}^{b} \delta_{z_x b} - \delta_{xb})$$ $$[1/(N_{z_b}+\sum_{x=b}^h \delta_{z_bz_x} - \delta_{z_bx})]$$ … … Change particle of type h to z_h [Change particle of type z_h to h] $$1/(N_h+1+\sum_{x=a}^{h} \delta_{z_x h} - \delta_{xh})$$ $$[1/(N_{z_h} + 1)]$$ Accept [Accept] $$min(1, \chi)$$ $$[min(1, 1/\chi)]$$

Application of local detailed balance yields the acceptance probability,

$$\chi = e^{-\beta\Delta U} \prod_{i=a}^h e^{\beta(\mu_{z_i}-\mu_i)} \frac{ N_i + 1 + \sum_{j=a}^i \delta_{z_j i} - \delta_{ji} }{ N_{z_i} + \sum_{j=i}^h \delta_{z_i z_j} - \delta_{z_ij} }$$

Note that the number of particles is from the perspective of the old state.

A rederivation using the new state number of particles instead is as follows:

 Forward event [reverse event] Probability, $$\pi_{on}$$ [reverse probability, $$\pi_{no}$$] Change particle of type a to z_a [Change particle of type z_a to a] $$1/(N_a+\sum_{x=a}^h \delta_{xa} - \delta_{z_xa})$$ $$[1/N_{z_a}]$$ Change particle of type b to z_b [Change particle of type z_b to b] $$1/(N_b+\sum_{x=b}^h \delta_{xb} - \delta_{z_xb})$$ $$[1/(N_{z_b}+1+\sum_{x=a}^b \delta_{xz_b}-\delta_{z_xz_b})]$$ … … Change particle of type h to z_h [Change particle of type z_h to h] $$1/(N_h + 1)$$ $$[1/(N_{z_h}+1+\sum_{x=a}^h \delta_{xz_h}-\delta_{z_xz_h})]$$ Accept [Accept] $$min(1, \chi)$$ $$[min(1, 1/\chi)]$$

$$\chi = e^{-\beta\Delta U} \prod_{i=a}^h e^{\beta(\mu_{z_i}-\mu_i)} \frac{ N_i + \sum_{j=i}^h\delta_{ji}-\delta_{z_j i} }{ N_{z_i}+1+\sum_{j=a}^i\delta_{jz_i}-\delta_{z_jz_i} }$$

Public Functions

void perturb_and_acceptance(Criteria *criteria, System *system, Acceptance *acceptance, std::vector<TrialStage*> *stages, Random *random)

Perform the Perturbations and determine acceptance.