Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.
Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.
| Download
GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it
Project: cocalc-sagemath-dev-slelievre
Views: 418346We introduce a way to calculate a sufficient part of an orbit and the1stabilizer of a point.234<Section><Heading>Orbit Stabilizer for Crystallographic Groups</Heading>56<ManSection>7<Meth Name="OrbitStabilizerInUnitCubeOnRight"8Arg="group, x"/>9<Returns>10A record containing11<List>12<Item>13<K>.stabilizer</K>: the stabilizer of <Arg>x</Arg>.14</Item>15<Item>16<K>.orbit</K> set of vectors from <M>[0,1)^n</M> which17represents the orbit.18</Item>19</List>20</Returns>21<Description>22Let <Arg>x</Arg> be a rational vector from <M>[0,1)^n</M> and23<Arg>group</Arg> a space group in standard form.2425The function then calculates the part of the orbit which lies inside the26cube <M>[0,1)^n</M> and the stabilizer of <Arg>x</Arg>. Observe that every27element of the full orbit differs from a point in the returned orbit only28by a pure translation.29</Description>30</ManSection>3132Note that the restriction to points from <M>[0,1)^n</M> makes sense if orbits33should be compared and the vector passed to34<C>OrbitStabilizerInUnitCubeOnRight</C> should be an element of the returned35orbit (part).3637<Example>38<![CDATA[39gap> S:=SpaceGroup(3,5);;40gap> OrbitStabilizerInUnitCubeOnRight(S,[1/2,0,9/11]);41rec( orbit := [ [ 0, 1/2, 2/11 ], [ 1/2, 0, 9/11 ] ],42stabilizer := Group([ [ [ 1, 0, 0, 0 ], [ 0, 1, 0, 0 ], [ 0, 0, 1, 0 ],43[ 0, 0, 0, 1 ] ] ]) )44gap> OrbitStabilizerInUnitCubeOnRight(S,[0,0,0]);45rec( orbit := [ [ 0, 0, 0 ] ], stabilizer := <matrix group with 2 generators> )46]]>47</Example>4849If you are interested in other parts of the orbit, you can use <Ref50Meth="VectorModOne"/> for the base point and the functions <Ref51Meth="ShiftedOrbitPart"/>, <Ref Meth="TranslationsToOneCubeAroundCenter"/> and52<Ref Meth="TranslationsToBox"/> for the resulting orbit<Br/>5354Suppose we want to calculate the part of the orbit of <C>[4/3,5/3,7/3]</C> in55the cube of sidelength <C>1</C> around this point:5657<Example>58gap> S:=SpaceGroup(3,5);;59gap> p:=[4/3,5/3,7/3];;60gap> o:=OrbitStabilizerInUnitCubeOnRight(S,VectorModOne(p)).orbit;61[ [ 1/3, 2/3, 1/3 ], [ 1/3, 2/3, 2/3 ] ]62gap> box:=p+[[-1,1],[-1,1],[-1,1]];63[ [ 1/3, 8/3, 7/3 ], [ 1/3, 8/3, 7/3 ], [ 1/3, 8/3, 7/3 ] ]64gap> o2:=Concatenation(List(o,i->i+TranslationsToBox(i,box)));;65gap> # This is what we looked for. But it is somewhat large:66gap> Size(o2);675468</Example>697071<ManSection>72<Meth Name="OrbitStabilizerInUnitCubeOnRightOnSets"73Arg="group, set"/>74<Returns>75A record containing76<List>77<Item>78<K>.stabilizer</K>: the stabilizer of <Arg>set</Arg>.79</Item>80<Item>81<K>.orbit</K> set of sets of vectors from <M>[0,1)^n</M> which82represents the orbit.83</Item>84</List>85</Returns>8687<Description>88Calculates orbit and stabilizer of a set of vectors. Just as <Ref89Meth="OrbitStabilizerInUnitCubeOnRight"></Ref>, it needs input from90<M>[0,1)^n</M>.9192The returned orbit part <K>.orbit</K> is a set of sets such that every93element of <K>.orbit</K> has a non-trivial intersection with the94cube <M>[0,1)^n</M>. In general, these sets will not lie inside95<M>[0,1)^n</M> completely.96</Description>97</ManSection>9899<Example>100gap> S:=SpaceGroup(3,5);;101gap> OrbitStabilizerInUnitCubeOnRightOnSets(S,[[0,0,0],[0,1/2,0]]);102rec( orbit := [ [ [ -1/2, 0, 0 ], [ 0, 0, 0 ] ],103[ [ 0, 0, 0 ], [ 0, 1/2, 0 ] ],104[ [ 1/2, 0, 0 ], [ 1, 0, 0 ] ] ],105stabilizer := Group([ [ [ 1, 0, 0, 0 ], [ 0, 1, 0, 0 ],106[ 0, 0, 1, 0 ], [ 0, 0, 0, 1 ] ] ]) )107</Example>108109<ManSection>110<Meth Name="OrbitPartInVertexSetsStandardSpaceGroup"111Arg="group vertexset allvertices"/>112<Returns>113Set of subsets of <A>allvertices</A>.114</Returns>115<Description>116If <A>allvertices</A> is a set of vectors and <A>vertexset</A> is117a subset thereof, then <Ref118Meth="OrbitPartInVertexSetsStandardSpaceGroup"></Ref> returns119that part of the orbit of <A>vertexset</A> which consists entirely of120subsets of <A>allvertices</A>.121Note that,unlike the other <C>OrbitStabilizer</C> algorithms, this does not122require the input to lie in some particular part of the space.123</Description>124</ManSection>125126<Example>127gap> S:=SpaceGroup(3,5);;128gap> OrbitPartInVertexSetsStandardSpaceGroup(S,[[0,1,5],[1,2,0]],129> Set([[1,2,0],[2,3,1],[1,2,6],[1,1,0],[0,1,5],[3/5,7,12],[1/17,6,1/2]]));130[ [ [ 0, 1, 5 ], [ 1, 2, 0 ] ], [ [ 1, 2, 6 ], [ 2, 3, 1 ] ] ]131gap> OrbitPartInVertexSetsStandardSpaceGroup(S, [[1,2,0]],132> Set([[1,2,0],[2,3,1],[1,2,6],[1,1,0],[0,1,5],[3/5,7,12],[1/17,6,1/2]]));133[ [ [ 0, 1, 5 ] ], [ [ 1, 1, 0 ] ], [ [ 1, 2, 0 ] ], [ [ 1, 2, 6 ] ], [ [ 2, 3, 1 ] ] ]134</Example>135136137<ManSection>138<Meth Name="OrbitPartInFacesStandardSpaceGroup"139Arg="group vertexset faceset"/>140<Returns>141Set of subsets of <A>faceset</A>.142</Returns>143<Description>144This calculates the orbit of a space group on sets restricted to a set of145faces.<Br/>146If <A>faceset</A> is a set of sets of vectors and <A>vertexset</A> is147an element of <A>faceset</A>, then <Ref148Meth="OrbitPartInFacesStandardSpaceGroup"></Ref> returns149that part of the orbit of <A>vertexset</A> which consists entirely of150elements of <A>faceset</A>.<Br/>151Note that,unlike the other <C>OrbitStabilizer</C> algorithms, this does not152require the input to lie in some particular part of the space.153</Description>154</ManSection>155156157158<ManSection>159<Meth Name="OrbitPartAndRepresentativesInFacesStandardSpaceGroup"160Arg="group vertexset faceset"/>161<Returns>162A set of face-matrix pairs .163</Returns>164<Description>165This is a slight variation of166<Ref Meth="OrbitPartInFacesStandardSpaceGroup"></Ref>167that also returns a representative for every orbit element.168</Description>169</ManSection>170171<Example>172gap> S:=SpaceGroup(3,5);;173gap> OrbitPartInVertexSetsStandardSpaceGroup(S,[[0,1,5],[1,2,0]],174> Set([[1,2,0],[2,3,1],[1,2,6],[1,1,0],[0,1,5],[3/5,7,12],[1/17,6,1/2]]));175[ [ [ 0, 1, 5 ], [ 1, 2, 0 ] ], [ [ 1, 2, 6 ], [ 2, 3, 1 ] ] ]176gap> OrbitPartInFacesStandardSpaceGroup(S,[[0,1,5],[1,2,0]],177> Set( [ [ [ 0, 1, 5 ], [ 1, 2, 0 ] ], [[1/17,6,1/2],[1,2,7]]]));178[ [ [ 0, 1, 5 ], [ 1, 2, 0 ] ] ]179gap> OrbitPartAndRepresentativesInFacesStandardSpaceGroup(S,[[0,1,5],[1,2,0]],180> Set( [ [ [ 0, 1, 5 ], [ 1, 2, 0 ] ], [[1/17,6,1/2],[1,2,7]]]));181[ [ [ [ 0, 1, 5 ], [ 1, 2, 0 ] ],182[ [ 1, 0, 0, 0 ], [ 0, 1, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 0, 0, 1 ] ] ] ]183</Example>184185186187<ManSection>188<Meth Name="StabilizerOnSetsStandardSpaceGroup"189Arg="group set"/>190<Returns>finite group of affine matrices (OnRight)</Returns>191<Description>192Given a set <A>set</A> of vectors and a space group <A>group</A> in193standard form, this method calculates the stabilizer of that set in194the full crystallographic group.<Br/>195</Description>196</ManSection>197198<Example>199<![CDATA[200gap> G:=SpaceGroup(3,12);;201gap> v:=[ 0, 0,0 ];;202gap> s:=StabilizerOnSetsStandardSpaceGroup(G,[v]);203<matrix group with 2 generators>204gap> s2:=OrbitStabilizerInUnitCubeOnRight(G,v).stabilizer;205<matrix group with 2 generators>206gap> s2=s;207true208]]>209</Example>210211<ManSection>212<Meth Name="RepresentativeActionOnRightOnSets"213Arg="group set imageset"/>214<Returns>215Affine matrix.216</Returns>217<Description>218Returns an element of the space group219<M>S</M> which takes the set <A>set</A> to the set220<A>imageset</A>. The group must be in standard form and act on the right.221</Description>222</ManSection>223224<Example>225gap> S:=SpaceGroup(3,5);;226gap> RepresentativeActionOnRightOnSets(G, [[0,0,0],[0,1/2,0]],227> [ [ 0, 1/2, 0 ], [ 0, 1, 0 ] ]);228[ [ 0, -1, 0, 0 ], [ -1, 0, 0, 0 ], [ 0, 0, -1, 0 ], [ 0, 1, 0, 1 ] ]229</Example>230231232<Subsection><Heading>Getting other orbit parts</Heading>233234<Package>HAPcryst</Package> does not calculate the full orbit but only the part235of it having coefficients between <M>-1/2</M> and <M>1/2</M>. The other parts236of the orbit can be calculated using the following functions.237</Subsection>238239<ManSection>240<Meth Name="ShiftedOrbitPart" Arg="point, orbitpart"/>241<Returns>Set of vectors </Returns>242<Description>243Takes each vector in <A>orbitpart</A> to the cube unit cube centered in244<A>point</A>.245</Description>246</ManSection>247248<Example>249gap> ShiftedOrbitPart([0,0,0],[[1/2,1/2,1/3],-[1/2,1/2,1/2],[19,3,1]]);250[ [ 1/2, 1/2, 1/3 ], [ 1/2, 1/2, 1/2 ], [ 0, 0, 0 ] ]251gap> ShiftedOrbitPart([1,1,1],[[1/2,1/2,1/2],-[1/2,1/2,1/2]]);252[ [ 3/2, 3/2, 3/2 ] ]253</Example>254255256257<ManSection>258<Meth Name="TranslationsToOneCubeAroundCenter" Arg="point, center"/>259<Returns>List of integer vectors</Returns>260<Description>261This method returns the list of all integer vectors which translate262<A>point</A> into the box <A>center</A><M>+[-1/2,1/2]^n</M>263</Description>264</ManSection>265266<Example>267gap> TranslationsToOneCubeAroundCenter([1/2,1/2,1/3],[0,0,0]);268[ [ 0, 0, 0 ], [ 0, -1, 0 ], [ -1, 0, 0 ], [ -1, -1, 0 ] ]269gap> TranslationsToOneCubeAroundCenter([1,0,1],[0,0,0]);270[ [ -1, 0, -1 ] ]271</Example>272273274<ManSection>275<Meth Name="TranslationsToBox" Arg="point, box"/>276<!-- <Returns>List of integer vectors or the empty list</Returns>-->277<Returns>An iterator of integer vectors or the empty iterator</Returns>278<Description>279Given a vector <M>v</M> and a list of pairs, this function returns the280translation vectors (integer vectors) which take <M>v</M> into the box281<A>box</A>. The box <A>box</A> has to be given as a list of pairs.282</Description>283</ManSection>284285<Example>286gap> TranslationsToBox([0,0],[[1/2,2/3],[1/2,2/3]]);287[ ]288gap> TranslationsToBox([0,0],[[-3/2,1/2],[1,4/3]]);289[ [ -1, 1 ], [ 0, 1 ] ]290gap> TranslationsToBox([0,0],[[-3/2,1/2],[2,1]]);291Error, Box must not be empty called from292...293</Example>294295296297</Section>298299300