package statalign.model.ext.plugins.structalign; import statalign.base.Utils; import statalign.model.ext.plugins.StructAlign; public class TranslationMove extends RotationOrTranslationMove { public TranslationMove (StructAlign s, String n) { owner = s; structAlign = s; name = n; proposalWidthControlVariable = structAlign.xlatP; minProposalWidthControlVariable = 1e-5; maxProposalWidthControlVariable = 1e3; } public double proposal(Object externalState) { double logProposalRatio = super.proposal(externalState); double[] shift = new double[3]; for(int i = 0; i < 3; i++) shift[i] = Utils.generator.nextGaussian() * proposalWidthControlVariable; for(int l = 0; l < subtreeLeaves.size(); l++){ int j = subtreeLeaves.get(l); if (structAlign.coords[j] == null) continue; for(int i = 0; i < 3; i++) structAlign.xlats[j][i] += shift[i]; } return logProposalRatio; // logProposalRatio is 0 because prior is uniform and proposal is symmetric } }