Algorithm 23 of the Supplementary Information to Jumper et al. (2021), p. 29. Six numbers are read off each residue's single representation: three quaternion components and a translation. Fixing the leading quaternion component to 1 before normalisation guarantees a valid unit quaternion without a constraint and biases the layer towards small rotations, since zero input gives the identity.
Examples
M <- matrix(c(1, 2, 3, 4, 5, 6), nrow = 2)
Alfbkb(M, M)
#> $frames
#> $frames[[1]]
#> $frames[[1]]$R
#> [,1] [,2] [,3]
#> [1,] NA NA NA
#> [2,] NA NA NA
#> [3,] NA NA NA
#>
#> $frames[[1]]$t
#> [1] NA NA NA
#>
#>
#> $frames[[2]]
#> $frames[[2]]$R
#> [,1] [,2] [,3]
#> [1,] NA NA NA
#> [2,] NA NA NA
#> [3,] NA NA NA
#>
#> $frames[[2]]$t
#> [1] NA NA NA
#>
#>
#>
#> $quat
#> [,1] [,2] [,3] [,4]
#> [1,] NA NA NA NA
#> [2,] NA NA NA NA
#>
#> $estimate
#> [1] NA
#>
#> $n
#> [1] 2
#>
#> $method
#> [1] "AlphaFold backbone update (quaternion to rigid frame)"
#>
