diff --git a/CSManager/CSManager.csproj b/CSManager/CSManager.csproj index 0983ff5..07ecd97 100644 --- a/CSManager/CSManager.csproj +++ b/CSManager/CSManager.csproj @@ -4,8 +4,8 @@ WinExe net6.0-windows true - 2022.09.09.2035 - 2022.09.09.2035 + 2022.10.25.1516 + 2022.10.25.1516 App.ico diff --git a/Crystallography.Controls/Crystal/CrystalControl.Designer.cs b/Crystallography.Controls/Crystal/CrystalControl.Designer.cs index afbd8a7..2d08479 100644 --- a/Crystallography.Controls/Crystal/CrystalControl.Designer.cs +++ b/Crystallography.Controls/Crystal/CrystalControl.Designer.cs @@ -132,6 +132,8 @@ private void InitializeComponent() this.revertCellConstantsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); this.strainControlToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.convertToP1SymmetryToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.convertToSuperstructureToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.textBoxName = new System.Windows.Forms.TextBox(); this.label22 = new System.Windows.Forms.Label(); this.toolTip = new System.Windows.Forms.ToolTip(this.components); @@ -171,6 +173,7 @@ private void InitializeComponent() // // tabControl // + resources.ApplyResources(this.tabControl, "tabControl"); this.tabControl.AllowDrop = true; this.tabControl.Controls.Add(this.tabPageBasicInfo); this.tabControl.Controls.Add(this.tabPageAtom); @@ -182,38 +185,40 @@ private void InitializeComponent() this.tabControl.Controls.Add(this.tabPagePolycrystalline); this.tabControl.Controls.Add(this.tabPageBounds); this.tabControl.Controls.Add(this.tabPageLatticePlane); - resources.ApplyResources(this.tabControl, "tabControl"); this.tabControl.HotTrack = true; this.tabControl.Name = "tabControl"; this.tabControl.SelectedIndex = 0; + this.toolTip.SetToolTip(this.tabControl, resources.GetString("tabControl.ToolTip")); this.tabControl.DragDrop += new System.Windows.Forms.DragEventHandler(this.FormCrystal_DragDrop); this.tabControl.DragEnter += new System.Windows.Forms.DragEventHandler(this.FormCrystal_DragEnter); // // tabPageBasicInfo // + resources.ApplyResources(this.tabPageBasicInfo, "tabPageBasicInfo"); this.tabPageBasicInfo.BackColor = System.Drawing.SystemColors.Control; this.tabPageBasicInfo.Controls.Add(this.panel5); - resources.ApplyResources(this.tabPageBasicInfo, "tabPageBasicInfo"); this.tabPageBasicInfo.Name = "tabPageBasicInfo"; this.toolTip.SetToolTip(this.tabPageBasicInfo, resources.GetString("tabPageBasicInfo.ToolTip")); // // panel5 // + resources.ApplyResources(this.panel5, "panel5"); this.panel5.Controls.Add(this.flowLayoutPanel4); this.panel5.Controls.Add(this.symmetryControl); - resources.ApplyResources(this.panel5, "panel5"); this.panel5.Name = "panel5"; + this.toolTip.SetToolTip(this.panel5, resources.GetString("panel5.ToolTip")); // // flowLayoutPanel4 // + resources.ApplyResources(this.flowLayoutPanel4, "flowLayoutPanel4"); this.flowLayoutPanel4.Controls.Add(this.numericBoxVolume); this.flowLayoutPanel4.Controls.Add(this.numericBoxCellMass); this.flowLayoutPanel4.Controls.Add(this.numericBoxMolarVolume); this.flowLayoutPanel4.Controls.Add(this.numericBoxMolarMass); this.flowLayoutPanel4.Controls.Add(this.numericBoxDensity); this.flowLayoutPanel4.Controls.Add(this.colorControl); - resources.ApplyResources(this.flowLayoutPanel4, "flowLayoutPanel4"); this.flowLayoutPanel4.Name = "flowLayoutPanel4"; + this.toolTip.SetToolTip(this.flowLayoutPanel4, resources.GetString("flowLayoutPanel4.ToolTip")); // // numericBoxVolume // @@ -300,8 +305,8 @@ private void InitializeComponent() // // colorControl // - this.colorControl.Argb = -986896; resources.ApplyResources(this.colorControl, "colorControl"); + this.colorControl.Argb = -986896; this.colorControl.Blue = 240; this.colorControl.BlueF = 0.9411765F; this.colorControl.BoxSize = new System.Drawing.Size(20, 20); @@ -317,29 +322,31 @@ private void InitializeComponent() // symmetryControl // this.symmetryControl.A = 0D; + resources.ApplyResources(this.symmetryControl, "symmetryControl"); this.symmetryControl.Alpha = 0D; this.symmetryControl.B = 0D; this.symmetryControl.Beta = 0D; this.symmetryControl.C = 0D; - resources.ApplyResources(this.symmetryControl, "symmetryControl"); this.symmetryControl.Gamma = 0D; this.symmetryControl.Name = "symmetryControl"; this.symmetryControl.ShowError = false; this.symmetryControl.SkipEvent = false; this.symmetryControl.SymmetrySeriesNumber = 0; + this.toolTip.SetToolTip(this.symmetryControl, resources.GetString("symmetryControl.ToolTip")); this.symmetryControl.ItemChanged += new System.EventHandler(this.symmetryControl_ItemChanged); // // tabPageAtom // + resources.ApplyResources(this.tabPageAtom, "tabPageAtom"); this.tabPageAtom.BackColor = System.Drawing.SystemColors.Control; this.tabPageAtom.Controls.Add(this.atomControl); this.tabPageAtom.Controls.Add(this.panelAtom); - resources.ApplyResources(this.tabPageAtom, "tabPageAtom"); this.tabPageAtom.Name = "tabPageAtom"; this.toolTip.SetToolTip(this.tabPageAtom, resources.GetString("tabPageAtom.ToolTip")); // // atomControl // + resources.ApplyResources(this.atomControl, "atomControl"); this.atomControl.Alpha = 0F; this.atomControl.Ambient = 0F; this.atomControl.Aniso11 = 0D; @@ -360,7 +367,6 @@ private void InitializeComponent() this.atomControl.AtomNo = 0; this.atomControl.AtomSubNoElectron = -1; this.atomControl.AtomSubNoXray = -1; - resources.ApplyResources(this.atomControl, "atomControl"); this.atomControl.Crystal = null; this.atomControl.DebyeWallerError = false; this.atomControl.DebyeWallerTabVisible = true; @@ -382,6 +388,7 @@ private void InitializeComponent() this.atomControl.ShowLabel = false; this.atomControl.SkipEvent = false; this.atomControl.Specular = 0F; + this.toolTip.SetToolTip(this.atomControl, resources.GetString("atomControl.ToolTip")); this.atomControl.UseIsotropy = false; this.atomControl.UseTypeU = false; this.atomControl.X = 0D; @@ -397,12 +404,14 @@ private void InitializeComponent() resources.ApplyResources(this.panelAtom, "panelAtom"); this.panelAtom.Controls.Add(this.panel3); this.panelAtom.Name = "panelAtom"; + this.toolTip.SetToolTip(this.panelAtom, resources.GetString("panelAtom.ToolTip")); // // panel3 // resources.ApplyResources(this.panel3, "panel3"); this.panel3.ContextMenuStrip = this.contextMenuStrip2; this.panel3.Name = "panel3"; + this.toolTip.SetToolTip(this.panel3, resources.GetString("panel3.ToolTip")); // // contextMenuStrip2 // @@ -411,19 +420,21 @@ private void InitializeComponent() this.contextMenuStrip2.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.resetToolStripMenuItem}); this.contextMenuStrip2.Name = "contextMenuStrip2"; + this.toolTip.SetToolTip(this.contextMenuStrip2, resources.GetString("contextMenuStrip2.ToolTip")); // // resetToolStripMenuItem // - this.resetToolStripMenuItem.Name = "resetToolStripMenuItem"; resources.ApplyResources(this.resetToolStripMenuItem, "resetToolStripMenuItem"); + this.resetToolStripMenuItem.Name = "resetToolStripMenuItem"; this.resetToolStripMenuItem.Click += new System.EventHandler(this.resetToolStripMenuItem_Click); // // tabPageBondsPolyhedra // + resources.ApplyResources(this.tabPageBondsPolyhedra, "tabPageBondsPolyhedra"); this.tabPageBondsPolyhedra.BackColor = System.Drawing.SystemColors.Control; this.tabPageBondsPolyhedra.Controls.Add(this.bondControl); - resources.ApplyResources(this.tabPageBondsPolyhedra, "tabPageBondsPolyhedra"); this.tabPageBondsPolyhedra.Name = "tabPageBondsPolyhedra"; + this.toolTip.SetToolTip(this.tabPageBondsPolyhedra, resources.GetString("tabPageBondsPolyhedra.ToolTip")); // // bondControl // @@ -432,88 +443,101 @@ private void InitializeComponent() this.bondControl.ElementList = null; this.bondControl.Name = "bondControl"; this.bondControl.SkipEvent = false; + this.toolTip.SetToolTip(this.bondControl, resources.GetString("bondControl.ToolTip")); // // tabPageReference // + resources.ApplyResources(this.tabPageReference, "tabPageReference"); this.tabPageReference.BackColor = System.Drawing.SystemColors.Control; this.tabPageReference.Controls.Add(this.groupBox8); this.tabPageReference.Controls.Add(this.groupBox6); this.tabPageReference.Controls.Add(this.groupBox7); this.tabPageReference.Controls.Add(this.groupBox5); - resources.ApplyResources(this.tabPageReference, "tabPageReference"); this.tabPageReference.Name = "tabPageReference"; + this.toolTip.SetToolTip(this.tabPageReference, resources.GetString("tabPageReference.ToolTip")); // // groupBox8 // - this.groupBox8.Controls.Add(this.textBoxTitle); resources.ApplyResources(this.groupBox8, "groupBox8"); + this.groupBox8.Controls.Add(this.textBoxTitle); this.groupBox8.Name = "groupBox8"; this.groupBox8.TabStop = false; + this.toolTip.SetToolTip(this.groupBox8, resources.GetString("groupBox8.ToolTip")); // // textBoxTitle // this.textBoxTitle.AcceptsReturn = true; resources.ApplyResources(this.textBoxTitle, "textBoxTitle"); this.textBoxTitle.Name = "textBoxTitle"; + this.toolTip.SetToolTip(this.textBoxTitle, resources.GetString("textBoxTitle.ToolTip")); // // groupBox6 // - this.groupBox6.Controls.Add(this.textBoxAuthor); resources.ApplyResources(this.groupBox6, "groupBox6"); + this.groupBox6.Controls.Add(this.textBoxAuthor); this.groupBox6.Name = "groupBox6"; this.groupBox6.TabStop = false; + this.toolTip.SetToolTip(this.groupBox6, resources.GetString("groupBox6.ToolTip")); // // textBoxAuthor // this.textBoxAuthor.AcceptsReturn = true; resources.ApplyResources(this.textBoxAuthor, "textBoxAuthor"); this.textBoxAuthor.Name = "textBoxAuthor"; + this.toolTip.SetToolTip(this.textBoxAuthor, resources.GetString("textBoxAuthor.ToolTip")); // // groupBox7 // - this.groupBox7.Controls.Add(this.textBoxJournal); resources.ApplyResources(this.groupBox7, "groupBox7"); + this.groupBox7.Controls.Add(this.textBoxJournal); this.groupBox7.Name = "groupBox7"; this.groupBox7.TabStop = false; + this.toolTip.SetToolTip(this.groupBox7, resources.GetString("groupBox7.ToolTip")); // // textBoxJournal // this.textBoxJournal.AcceptsReturn = true; resources.ApplyResources(this.textBoxJournal, "textBoxJournal"); this.textBoxJournal.Name = "textBoxJournal"; + this.toolTip.SetToolTip(this.textBoxJournal, resources.GetString("textBoxJournal.ToolTip")); // // groupBox5 // - this.groupBox5.Controls.Add(this.textBoxMemo); resources.ApplyResources(this.groupBox5, "groupBox5"); + this.groupBox5.Controls.Add(this.textBoxMemo); this.groupBox5.Name = "groupBox5"; this.groupBox5.TabStop = false; + this.toolTip.SetToolTip(this.groupBox5, resources.GetString("groupBox5.ToolTip")); // // textBoxMemo // resources.ApplyResources(this.textBoxMemo, "textBoxMemo"); this.textBoxMemo.Name = "textBoxMemo"; + this.toolTip.SetToolTip(this.textBoxMemo, resources.GetString("textBoxMemo.ToolTip")); // // tabPageEOS // + resources.ApplyResources(this.tabPageEOS, "tabPageEOS"); this.tabPageEOS.BackColor = System.Drawing.SystemColors.Control; this.tabPageEOS.Controls.Add(this.eosControl); - resources.ApplyResources(this.tabPageEOS, "tabPageEOS"); this.tabPageEOS.Name = "tabPageEOS"; + this.toolTip.SetToolTip(this.tabPageEOS, resources.GetString("tabPageEOS.ToolTip")); // // eosControl // - this.eosControl.Crystal = null; resources.ApplyResources(this.eosControl, "eosControl"); + this.eosControl.Crystal = null; this.eosControl.Name = "eosControl"; this.eosControl.SkipEvent = false; + this.toolTip.SetToolTip(this.eosControl, resources.GetString("eosControl.ToolTip")); // // tabPageElasticity // + resources.ApplyResources(this.tabPageElasticity, "tabPageElasticity"); this.tabPageElasticity.BackColor = System.Drawing.SystemColors.Control; this.tabPageElasticity.Controls.Add(this.elasticityControl1); - resources.ApplyResources(this.tabPageElasticity, "tabPageElasticity"); this.tabPageElasticity.Name = "tabPageElasticity"; + this.toolTip.SetToolTip(this.tabPageElasticity, resources.GetString("tabPageElasticity.ToolTip")); // // elasticityControl1 // @@ -521,10 +545,12 @@ private void InitializeComponent() this.elasticityControl1.Mode = Crystallography.Elasticity.Mode.Stiffness; this.elasticityControl1.Name = "elasticityControl1"; this.elasticityControl1.SymmetrySeriesNumber = 1; + this.toolTip.SetToolTip(this.elasticityControl1, resources.GetString("elasticityControl1.ToolTip")); this.elasticityControl1.ValueChanged += new Crystallography.Controls.ElasticityControl.MyEventHandler(this.elasticityControl1_ValueChanged); // // tabPageStrainStress // + resources.ApplyResources(this.tabPageStrainStress, "tabPageStrainStress"); this.tabPageStrainStress.BackColor = System.Drawing.SystemColors.Control; this.tabPageStrainStress.Controls.Add(this.button1); this.tabPageStrainStress.Controls.Add(this.numericBoxStrain33); @@ -556,13 +582,14 @@ private void InitializeComponent() this.tabPageStrainStress.Controls.Add(this.numericBoxStrain12); this.tabPageStrainStress.Controls.Add(this.numericBoxStrain23); this.tabPageStrainStress.Controls.Add(this.numericBoxStrain13); - resources.ApplyResources(this.tabPageStrainStress, "tabPageStrainStress"); this.tabPageStrainStress.Name = "tabPageStrainStress"; + this.toolTip.SetToolTip(this.tabPageStrainStress, resources.GetString("tabPageStrainStress.ToolTip")); // // button1 // resources.ApplyResources(this.button1, "button1"); this.button1.Name = "button1"; + this.toolTip.SetToolTip(this.button1, resources.GetString("button1.ToolTip")); this.button1.UseVisualStyleBackColor = true; this.button1.Click += new System.EventHandler(this.button1_Click); // @@ -578,6 +605,7 @@ private void InitializeComponent() this.numericBoxStrain33.SkipEventDuringInput = false; this.numericBoxStrain33.SmartIncrement = true; this.numericBoxStrain33.TextFont = new System.Drawing.Font("Arial Narrow", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); + this.toolTip.SetToolTip(this.numericBoxStrain33, resources.GetString("numericBoxStrain33.ToolTip")); // // numericBoxHill // @@ -592,87 +620,104 @@ private void InitializeComponent() this.numericBoxHill.SkipEventDuringInput = false; this.numericBoxHill.SmartIncrement = true; this.numericBoxHill.TextFont = new System.Drawing.Font("Arial Narrow", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); + this.toolTip.SetToolTip(this.numericBoxHill, resources.GetString("numericBoxHill.ToolTip")); this.numericBoxHill.Value = 1D; // // label116 // resources.ApplyResources(this.label116, "label116"); this.label116.Name = "label116"; + this.toolTip.SetToolTip(this.label116, resources.GetString("label116.ToolTip")); // // label117 // resources.ApplyResources(this.label117, "label117"); this.label117.Name = "label117"; + this.toolTip.SetToolTip(this.label117, resources.GetString("label117.ToolTip")); // // label109 // resources.ApplyResources(this.label109, "label109"); this.label109.Name = "label109"; + this.toolTip.SetToolTip(this.label109, resources.GetString("label109.ToolTip")); // // label110 // resources.ApplyResources(this.label110, "label110"); this.label110.Name = "label110"; + this.toolTip.SetToolTip(this.label110, resources.GetString("label110.ToolTip")); // // label111 // resources.ApplyResources(this.label111, "label111"); this.label111.Name = "label111"; + this.toolTip.SetToolTip(this.label111, resources.GetString("label111.ToolTip")); // // label112 // resources.ApplyResources(this.label112, "label112"); this.label112.Name = "label112"; + this.toolTip.SetToolTip(this.label112, resources.GetString("label112.ToolTip")); // // label113 // resources.ApplyResources(this.label113, "label113"); this.label113.Name = "label113"; + this.toolTip.SetToolTip(this.label113, resources.GetString("label113.ToolTip")); // // label114 // resources.ApplyResources(this.label114, "label114"); this.label114.Name = "label114"; + this.toolTip.SetToolTip(this.label114, resources.GetString("label114.ToolTip")); // // label115 // resources.ApplyResources(this.label115, "label115"); this.label115.Name = "label115"; + this.toolTip.SetToolTip(this.label115, resources.GetString("label115.ToolTip")); // // label102 // resources.ApplyResources(this.label102, "label102"); this.label102.Name = "label102"; + this.toolTip.SetToolTip(this.label102, resources.GetString("label102.ToolTip")); // // label103 // resources.ApplyResources(this.label103, "label103"); this.label103.Name = "label103"; + this.toolTip.SetToolTip(this.label103, resources.GetString("label103.ToolTip")); // // label104 // resources.ApplyResources(this.label104, "label104"); this.label104.Name = "label104"; + this.toolTip.SetToolTip(this.label104, resources.GetString("label104.ToolTip")); // // label105 // resources.ApplyResources(this.label105, "label105"); this.label105.Name = "label105"; + this.toolTip.SetToolTip(this.label105, resources.GetString("label105.ToolTip")); // // label106 // resources.ApplyResources(this.label106, "label106"); this.label106.Name = "label106"; + this.toolTip.SetToolTip(this.label106, resources.GetString("label106.ToolTip")); // // label107 // resources.ApplyResources(this.label107, "label107"); this.label107.Name = "label107"; + this.toolTip.SetToolTip(this.label107, resources.GetString("label107.ToolTip")); // // label108 // resources.ApplyResources(this.label108, "label108"); this.label108.Name = "label108"; + this.toolTip.SetToolTip(this.label108, resources.GetString("label108.ToolTip")); // // numericBoxStress33 // @@ -686,6 +731,7 @@ private void InitializeComponent() this.numericBoxStress33.SkipEventDuringInput = false; this.numericBoxStress33.SmartIncrement = true; this.numericBoxStress33.TextFont = new System.Drawing.Font("Arial Narrow", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); + this.toolTip.SetToolTip(this.numericBoxStress33, resources.GetString("numericBoxStress33.ToolTip")); // // numericBoxStress22 // @@ -699,6 +745,7 @@ private void InitializeComponent() this.numericBoxStress22.SkipEventDuringInput = false; this.numericBoxStress22.SmartIncrement = true; this.numericBoxStress22.TextFont = new System.Drawing.Font("Arial Narrow", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); + this.toolTip.SetToolTip(this.numericBoxStress22, resources.GetString("numericBoxStress22.ToolTip")); // // numericBoxStress11 // @@ -712,6 +759,7 @@ private void InitializeComponent() this.numericBoxStress11.SkipEventDuringInput = false; this.numericBoxStress11.SmartIncrement = true; this.numericBoxStress11.TextFont = new System.Drawing.Font("Arial Narrow", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); + this.toolTip.SetToolTip(this.numericBoxStress11, resources.GetString("numericBoxStress11.ToolTip")); // // numericBoxStress23 // @@ -725,6 +773,7 @@ private void InitializeComponent() this.numericBoxStress23.SkipEventDuringInput = false; this.numericBoxStress23.SmartIncrement = true; this.numericBoxStress23.TextFont = new System.Drawing.Font("Arial Narrow", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); + this.toolTip.SetToolTip(this.numericBoxStress23, resources.GetString("numericBoxStress23.ToolTip")); // // numericBoxStress13 // @@ -738,6 +787,7 @@ private void InitializeComponent() this.numericBoxStress13.SkipEventDuringInput = false; this.numericBoxStress13.SmartIncrement = true; this.numericBoxStress13.TextFont = new System.Drawing.Font("Arial Narrow", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); + this.toolTip.SetToolTip(this.numericBoxStress13, resources.GetString("numericBoxStress13.ToolTip")); // // numericBoxStress12 // @@ -751,6 +801,7 @@ private void InitializeComponent() this.numericBoxStress12.SkipEventDuringInput = false; this.numericBoxStress12.SmartIncrement = true; this.numericBoxStress12.TextFont = new System.Drawing.Font("Arial Narrow", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); + this.toolTip.SetToolTip(this.numericBoxStress12, resources.GetString("numericBoxStress12.ToolTip")); // // numericBoxStrain11 // @@ -764,6 +815,7 @@ private void InitializeComponent() this.numericBoxStrain11.SkipEventDuringInput = false; this.numericBoxStrain11.SmartIncrement = true; this.numericBoxStrain11.TextFont = new System.Drawing.Font("Arial Narrow", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); + this.toolTip.SetToolTip(this.numericBoxStrain11, resources.GetString("numericBoxStrain11.ToolTip")); // // numericBoxStrain22 // @@ -777,6 +829,7 @@ private void InitializeComponent() this.numericBoxStrain22.SkipEventDuringInput = false; this.numericBoxStrain22.SmartIncrement = true; this.numericBoxStrain22.TextFont = new System.Drawing.Font("Arial Narrow", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); + this.toolTip.SetToolTip(this.numericBoxStrain22, resources.GetString("numericBoxStrain22.ToolTip")); // // numericBoxStrain12 // @@ -790,6 +843,7 @@ private void InitializeComponent() this.numericBoxStrain12.SkipEventDuringInput = false; this.numericBoxStrain12.SmartIncrement = true; this.numericBoxStrain12.TextFont = new System.Drawing.Font("Arial Narrow", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); + this.toolTip.SetToolTip(this.numericBoxStrain12, resources.GetString("numericBoxStrain12.ToolTip")); // // numericBoxStrain23 // @@ -803,6 +857,7 @@ private void InitializeComponent() this.numericBoxStrain23.SkipEventDuringInput = false; this.numericBoxStrain23.SmartIncrement = true; this.numericBoxStrain23.TextFont = new System.Drawing.Font("Arial Narrow", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); + this.toolTip.SetToolTip(this.numericBoxStrain23, resources.GetString("numericBoxStrain23.ToolTip")); // // numericBoxStrain13 // @@ -816,82 +871,88 @@ private void InitializeComponent() this.numericBoxStrain13.SkipEventDuringInput = false; this.numericBoxStrain13.SmartIncrement = true; this.numericBoxStrain13.TextFont = new System.Drawing.Font("Arial Narrow", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); + this.toolTip.SetToolTip(this.numericBoxStrain13, resources.GetString("numericBoxStrain13.ToolTip")); // // tabPagePolycrystalline // + resources.ApplyResources(this.tabPagePolycrystalline, "tabPagePolycrystalline"); this.tabPagePolycrystalline.BackColor = System.Drawing.SystemColors.Control; this.tabPagePolycrystalline.ContextMenuStrip = this.contextMenuStripPoleFigure; this.tabPagePolycrystalline.Controls.Add(this.poleFigureControl); this.tabPagePolycrystalline.Controls.Add(this.flowLayoutPanel3); this.tabPagePolycrystalline.Controls.Add(this.flowLayoutPanel2); - resources.ApplyResources(this.tabPagePolycrystalline, "tabPagePolycrystalline"); this.tabPagePolycrystalline.Name = "tabPagePolycrystalline"; + this.toolTip.SetToolTip(this.tabPagePolycrystalline, resources.GetString("tabPagePolycrystalline.ToolTip")); // // contextMenuStripPoleFigure // + resources.ApplyResources(this.contextMenuStripPoleFigure, "contextMenuStripPoleFigure"); this.contextMenuStripPoleFigure.ImageScalingSize = new System.Drawing.Size(20, 20); this.contextMenuStripPoleFigure.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.readToolStripMenuItem, this.saveToolStripMenuItem, this.exportToolStripMenuItem}); this.contextMenuStripPoleFigure.Name = "contextMenuStripPoleFigure"; - resources.ApplyResources(this.contextMenuStripPoleFigure, "contextMenuStripPoleFigure"); + this.toolTip.SetToolTip(this.contextMenuStripPoleFigure, resources.GetString("contextMenuStripPoleFigure.ToolTip")); // // readToolStripMenuItem // - this.readToolStripMenuItem.Name = "readToolStripMenuItem"; resources.ApplyResources(this.readToolStripMenuItem, "readToolStripMenuItem"); + this.readToolStripMenuItem.Name = "readToolStripMenuItem"; this.readToolStripMenuItem.Click += new System.EventHandler(this.readToolStripMenuItem_Click); // // saveToolStripMenuItem // - this.saveToolStripMenuItem.Name = "saveToolStripMenuItem"; resources.ApplyResources(this.saveToolStripMenuItem, "saveToolStripMenuItem"); + this.saveToolStripMenuItem.Name = "saveToolStripMenuItem"; this.saveToolStripMenuItem.Click += new System.EventHandler(this.saveToolStripMenuItem_Click); // // exportToolStripMenuItem // + resources.ApplyResources(this.exportToolStripMenuItem, "exportToolStripMenuItem"); this.exportToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.asCTFFilecomatibleToCHANNEL5FileToolStripMenuItem, this.asTXTFileAllEulerAngleAndDensityToolStripMenuItem, this.asTXTFileallEulerAngleAndDensitySortedToolStripMenuItem}); this.exportToolStripMenuItem.Name = "exportToolStripMenuItem"; - resources.ApplyResources(this.exportToolStripMenuItem, "exportToolStripMenuItem"); // // asCTFFilecomatibleToCHANNEL5FileToolStripMenuItem // - this.asCTFFilecomatibleToCHANNEL5FileToolStripMenuItem.Name = "asCTFFilecomatibleToCHANNEL5FileToolStripMenuItem"; resources.ApplyResources(this.asCTFFilecomatibleToCHANNEL5FileToolStripMenuItem, "asCTFFilecomatibleToCHANNEL5FileToolStripMenuItem"); + this.asCTFFilecomatibleToCHANNEL5FileToolStripMenuItem.Name = "asCTFFilecomatibleToCHANNEL5FileToolStripMenuItem"; this.asCTFFilecomatibleToCHANNEL5FileToolStripMenuItem.Click += new System.EventHandler(this.asCTFFilecomatibleToCHANNEL5FileToolStripMenuItem_Click); // // asTXTFileAllEulerAngleAndDensityToolStripMenuItem // - this.asTXTFileAllEulerAngleAndDensityToolStripMenuItem.Name = "asTXTFileAllEulerAngleAndDensityToolStripMenuItem"; resources.ApplyResources(this.asTXTFileAllEulerAngleAndDensityToolStripMenuItem, "asTXTFileAllEulerAngleAndDensityToolStripMenuItem"); + this.asTXTFileAllEulerAngleAndDensityToolStripMenuItem.Name = "asTXTFileAllEulerAngleAndDensityToolStripMenuItem"; this.asTXTFileAllEulerAngleAndDensityToolStripMenuItem.Click += new System.EventHandler(this.asTXTFileAllEulerAngleAndDensityToolStripMenuItem_Click); // // asTXTFileallEulerAngleAndDensitySortedToolStripMenuItem // - this.asTXTFileallEulerAngleAndDensitySortedToolStripMenuItem.Name = "asTXTFileallEulerAngleAndDensitySortedToolStripMenuItem"; resources.ApplyResources(this.asTXTFileallEulerAngleAndDensitySortedToolStripMenuItem, "asTXTFileallEulerAngleAndDensitySortedToolStripMenuItem"); + this.asTXTFileallEulerAngleAndDensitySortedToolStripMenuItem.Name = "asTXTFileallEulerAngleAndDensitySortedToolStripMenuItem"; this.asTXTFileallEulerAngleAndDensitySortedToolStripMenuItem.Click += new System.EventHandler(this.asTXTFileAllEulerAngleAndDensityToolStripMenuItem_Click); // // poleFigureControl // - this.poleFigureControl.Crystal = null; resources.ApplyResources(this.poleFigureControl, "poleFigureControl"); + this.poleFigureControl.Crystal = null; this.poleFigureControl.Name = "poleFigureControl"; + this.toolTip.SetToolTip(this.poleFigureControl, resources.GetString("poleFigureControl.ToolTip")); // // flowLayoutPanel3 // resources.ApplyResources(this.flowLayoutPanel3, "flowLayoutPanel3"); this.flowLayoutPanel3.Controls.Add(this.buttonGenerateRandomOrientations); this.flowLayoutPanel3.Name = "flowLayoutPanel3"; + this.toolTip.SetToolTip(this.flowLayoutPanel3, resources.GetString("flowLayoutPanel3.ToolTip")); // // buttonGenerateRandomOrientations // resources.ApplyResources(this.buttonGenerateRandomOrientations, "buttonGenerateRandomOrientations"); this.buttonGenerateRandomOrientations.Name = "buttonGenerateRandomOrientations"; + this.toolTip.SetToolTip(this.buttonGenerateRandomOrientations, resources.GetString("buttonGenerateRandomOrientations.ToolTip")); this.buttonGenerateRandomOrientations.UseVisualStyleBackColor = true; this.buttonGenerateRandomOrientations.Click += new System.EventHandler(this.buttonGenerateRandomOrientations_Click); // @@ -906,16 +967,18 @@ private void InitializeComponent() this.flowLayoutPanel2.Controls.Add(this.numericUpDownCrystallineSize); this.flowLayoutPanel2.Controls.Add(this.label99); this.flowLayoutPanel2.Name = "flowLayoutPanel2"; + this.toolTip.SetToolTip(this.flowLayoutPanel2, resources.GetString("flowLayoutPanel2.ToolTip")); // // label5 // resources.ApplyResources(this.label5, "label5"); this.label5.Name = "label5"; + this.toolTip.SetToolTip(this.label5, resources.GetString("label5.ToolTip")); // // numericUpDownAngleResolution // - this.numericUpDownAngleResolution.DecimalPlaces = 1; resources.ApplyResources(this.numericUpDownAngleResolution, "numericUpDownAngleResolution"); + this.numericUpDownAngleResolution.DecimalPlaces = 1; this.numericUpDownAngleResolution.Increment = new decimal(new int[] { 5, 0, @@ -932,6 +995,7 @@ private void InitializeComponent() 0, 65536}); this.numericUpDownAngleResolution.Name = "numericUpDownAngleResolution"; + this.toolTip.SetToolTip(this.numericUpDownAngleResolution, resources.GetString("numericUpDownAngleResolution.ToolTip")); this.numericUpDownAngleResolution.Value = new decimal(new int[] { 2, 0, @@ -943,6 +1007,7 @@ private void InitializeComponent() // resources.ApplyResources(this.label29, "label29"); this.label29.Name = "label29"; + this.toolTip.SetToolTip(this.label29, resources.GetString("label29.ToolTip")); // // numericUpDownAngleSubDivision // @@ -958,6 +1023,7 @@ private void InitializeComponent() 0, 0}); this.numericUpDownAngleSubDivision.Name = "numericUpDownAngleSubDivision"; + this.toolTip.SetToolTip(this.numericUpDownAngleSubDivision, resources.GetString("numericUpDownAngleSubDivision.ToolTip")); this.numericUpDownAngleSubDivision.Value = new decimal(new int[] { 4, 0, @@ -969,6 +1035,7 @@ private void InitializeComponent() // resources.ApplyResources(this.label101, "label101"); this.label101.Name = "label101"; + this.toolTip.SetToolTip(this.label101, resources.GetString("label101.ToolTip")); // // numericUpDownCrystallineSize // @@ -989,6 +1056,7 @@ private void InitializeComponent() 0, 0}); this.numericUpDownCrystallineSize.Name = "numericUpDownCrystallineSize"; + this.toolTip.SetToolTip(this.numericUpDownCrystallineSize, resources.GetString("numericUpDownCrystallineSize.ToolTip")); this.numericUpDownCrystallineSize.Value = new decimal(new int[] { 100, 0, @@ -1000,40 +1068,46 @@ private void InitializeComponent() // resources.ApplyResources(this.label99, "label99"); this.label99.Name = "label99"; + this.toolTip.SetToolTip(this.label99, resources.GetString("label99.ToolTip")); // // tabPageBounds // - this.tabPageBounds.Controls.Add(this.boundControl); resources.ApplyResources(this.tabPageBounds, "tabPageBounds"); + this.tabPageBounds.Controls.Add(this.boundControl); this.tabPageBounds.Name = "tabPageBounds"; + this.toolTip.SetToolTip(this.tabPageBounds, resources.GetString("tabPageBounds.ToolTip")); // // boundControl // - this.boundControl.Crystal = null; resources.ApplyResources(this.boundControl, "boundControl"); + this.boundControl.Crystal = null; this.boundControl.Name = "boundControl"; this.boundControl.SkipEvent = false; + this.toolTip.SetToolTip(this.boundControl, resources.GetString("boundControl.ToolTip")); // // tabPageLatticePlane // - this.tabPageLatticePlane.Controls.Add(this.latticePlaneControl); resources.ApplyResources(this.tabPageLatticePlane, "tabPageLatticePlane"); + this.tabPageLatticePlane.Controls.Add(this.latticePlaneControl); this.tabPageLatticePlane.Name = "tabPageLatticePlane"; + this.toolTip.SetToolTip(this.tabPageLatticePlane, resources.GetString("tabPageLatticePlane.ToolTip")); // // latticePlaneControl // - this.latticePlaneControl.Crystal = null; resources.ApplyResources(this.latticePlaneControl, "latticePlaneControl"); + this.latticePlaneControl.Crystal = null; this.latticePlaneControl.Name = "latticePlaneControl"; this.latticePlaneControl.SkipEvent = false; + this.toolTip.SetToolTip(this.latticePlaneControl, resources.GetString("latticePlaneControl.ToolTip")); // // panel1 // + resources.ApplyResources(this.panel1, "panel1"); this.panel1.Controls.Add(this.textBoxFormula); this.panel1.Controls.Add(this.numericBoxZnumber); this.panel1.Controls.Add(this.label90); - resources.ApplyResources(this.panel1, "panel1"); this.panel1.Name = "panel1"; + this.toolTip.SetToolTip(this.panel1, resources.GetString("panel1.ToolTip")); // // textBoxFormula // @@ -1064,6 +1138,7 @@ private void InitializeComponent() // // contextMenuStrip // + resources.ApplyResources(this.contextMenuStrip, "contextMenuStrip"); this.contextMenuStrip.ImageScalingSize = new System.Drawing.Size(20, 20); this.contextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { this.scatteringFactorToolStripMenuItem, @@ -1076,72 +1151,87 @@ private void InitializeComponent() this.clearAllDataToolStripMenuItem, this.revertCellConstantsToolStripMenuItem, this.toolStripSeparator3, - this.strainControlToolStripMenuItem}); + this.strainControlToolStripMenuItem, + this.convertToP1SymmetryToolStripMenuItem, + this.convertToSuperstructureToolStripMenuItem}); this.contextMenuStrip.Name = "contextMenuStrip1"; - resources.ApplyResources(this.contextMenuStrip, "contextMenuStrip"); + this.toolTip.SetToolTip(this.contextMenuStrip, resources.GetString("contextMenuStrip.ToolTip")); // // scatteringFactorToolStripMenuItem // - this.scatteringFactorToolStripMenuItem.Name = "scatteringFactorToolStripMenuItem"; resources.ApplyResources(this.scatteringFactorToolStripMenuItem, "scatteringFactorToolStripMenuItem"); + this.scatteringFactorToolStripMenuItem.Name = "scatteringFactorToolStripMenuItem"; this.scatteringFactorToolStripMenuItem.Click += new System.EventHandler(this.scatteringFactorToolStripMenuItem_Click); // // symmetryInformationToolStripMenuItem // - this.symmetryInformationToolStripMenuItem.Name = "symmetryInformationToolStripMenuItem"; resources.ApplyResources(this.symmetryInformationToolStripMenuItem, "symmetryInformationToolStripMenuItem"); + this.symmetryInformationToolStripMenuItem.Name = "symmetryInformationToolStripMenuItem"; this.symmetryInformationToolStripMenuItem.Click += new System.EventHandler(this.symmetryInformationToolStripMenuItem_Click); // // toolStripSeparator2 // - this.toolStripSeparator2.Name = "toolStripSeparator2"; resources.ApplyResources(this.toolStripSeparator2, "toolStripSeparator2"); + this.toolStripSeparator2.Name = "toolStripSeparator2"; // // importCrystalFromCIFAMCToolStripMenuItem // - this.importCrystalFromCIFAMCToolStripMenuItem.Name = "importCrystalFromCIFAMCToolStripMenuItem"; resources.ApplyResources(this.importCrystalFromCIFAMCToolStripMenuItem, "importCrystalFromCIFAMCToolStripMenuItem"); + this.importCrystalFromCIFAMCToolStripMenuItem.Name = "importCrystalFromCIFAMCToolStripMenuItem"; this.importCrystalFromCIFAMCToolStripMenuItem.Click += new System.EventHandler(this.importCrystalFromCIFAMCToolStripMenuItem_Click); // // exportThisCrystalAsCIFToolStripMenuItem // - this.exportThisCrystalAsCIFToolStripMenuItem.Name = "exportThisCrystalAsCIFToolStripMenuItem"; resources.ApplyResources(this.exportThisCrystalAsCIFToolStripMenuItem, "exportThisCrystalAsCIFToolStripMenuItem"); + this.exportThisCrystalAsCIFToolStripMenuItem.Name = "exportThisCrystalAsCIFToolStripMenuItem"; this.exportThisCrystalAsCIFToolStripMenuItem.Click += new System.EventHandler(this.exportThisCrystalAsCIFToolStripMenuItem_Click); // // sendThisCrystalToOtherSoftwareToolStripMenuItem // - this.sendThisCrystalToOtherSoftwareToolStripMenuItem.Name = "sendThisCrystalToOtherSoftwareToolStripMenuItem"; resources.ApplyResources(this.sendThisCrystalToOtherSoftwareToolStripMenuItem, "sendThisCrystalToOtherSoftwareToolStripMenuItem"); + this.sendThisCrystalToOtherSoftwareToolStripMenuItem.Name = "sendThisCrystalToOtherSoftwareToolStripMenuItem"; this.sendThisCrystalToOtherSoftwareToolStripMenuItem.Click += new System.EventHandler(this.sendThisCrystalToOtherSoftwareToolStripMenuItem_Click); // // toolStripSeparator1 // - this.toolStripSeparator1.Name = "toolStripSeparator1"; resources.ApplyResources(this.toolStripSeparator1, "toolStripSeparator1"); + this.toolStripSeparator1.Name = "toolStripSeparator1"; // // clearAllDataToolStripMenuItem // - this.clearAllDataToolStripMenuItem.Name = "clearAllDataToolStripMenuItem"; resources.ApplyResources(this.clearAllDataToolStripMenuItem, "clearAllDataToolStripMenuItem"); + this.clearAllDataToolStripMenuItem.Name = "clearAllDataToolStripMenuItem"; + this.clearAllDataToolStripMenuItem.Click += new System.EventHandler(this.clearAllDataToolStripMenuItem_Click); // // revertCellConstantsToolStripMenuItem // - this.revertCellConstantsToolStripMenuItem.Name = "revertCellConstantsToolStripMenuItem"; resources.ApplyResources(this.revertCellConstantsToolStripMenuItem, "revertCellConstantsToolStripMenuItem"); + this.revertCellConstantsToolStripMenuItem.Name = "revertCellConstantsToolStripMenuItem"; this.revertCellConstantsToolStripMenuItem.Click += new System.EventHandler(this.revertCellConstantsToolStripMenuItem_Click); // // toolStripSeparator3 // - this.toolStripSeparator3.Name = "toolStripSeparator3"; resources.ApplyResources(this.toolStripSeparator3, "toolStripSeparator3"); + this.toolStripSeparator3.Name = "toolStripSeparator3"; // // strainControlToolStripMenuItem // - this.strainControlToolStripMenuItem.Name = "strainControlToolStripMenuItem"; resources.ApplyResources(this.strainControlToolStripMenuItem, "strainControlToolStripMenuItem"); + this.strainControlToolStripMenuItem.Name = "strainControlToolStripMenuItem"; this.strainControlToolStripMenuItem.Click += new System.EventHandler(this.strainControlToolStripMenuItem_Click); // + // convertToP1SymmetryToolStripMenuItem + // + resources.ApplyResources(this.convertToP1SymmetryToolStripMenuItem, "convertToP1SymmetryToolStripMenuItem"); + this.convertToP1SymmetryToolStripMenuItem.Name = "convertToP1SymmetryToolStripMenuItem"; + this.convertToP1SymmetryToolStripMenuItem.Click += new System.EventHandler(this.convertToP1ToolStripMenuItem_Click); + // + // convertToSuperstructureToolStripMenuItem + // + resources.ApplyResources(this.convertToSuperstructureToolStripMenuItem, "convertToSuperstructureToolStripMenuItem"); + this.convertToSuperstructureToolStripMenuItem.Name = "convertToSuperstructureToolStripMenuItem"; + this.convertToSuperstructureToolStripMenuItem.Click += new System.EventHandler(this.convertToSuperstructureToolStripMenuItem_Click); + // // textBoxName // resources.ApplyResources(this.textBoxName, "textBoxName"); @@ -1152,6 +1242,7 @@ private void InitializeComponent() // resources.ApplyResources(this.label22, "label22"); this.label22.Name = "label22"; + this.toolTip.SetToolTip(this.label22, resources.GetString("label22.ToolTip")); // // buttonScatteringFactor // @@ -1177,20 +1268,22 @@ private void InitializeComponent() // resources.ApplyResources(this.flowLayoutPanel1, "flowLayoutPanel1"); this.flowLayoutPanel1.Name = "flowLayoutPanel1"; + this.toolTip.SetToolTip(this.flowLayoutPanel1, resources.GetString("flowLayoutPanel1.ToolTip")); // // panel4 // + resources.ApplyResources(this.panel4, "panel4"); this.panel4.Controls.Add(this.textBoxName); this.panel4.Controls.Add(this.buttonSymmetryInfo); this.panel4.Controls.Add(this.buttonScatteringFactor); this.panel4.Controls.Add(this.label22); - resources.ApplyResources(this.panel4, "panel4"); this.panel4.Name = "panel4"; + this.toolTip.SetToolTip(this.panel4, resources.GetString("panel4.ToolTip")); // // CrystalControl // - this.AllowDrop = true; resources.ApplyResources(this, "$this"); + this.AllowDrop = true; this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; this.ContextMenuStrip = this.contextMenuStrip; this.Controls.Add(this.tabControl); @@ -1199,6 +1292,7 @@ private void InitializeComponent() this.Controls.Add(this.flowLayoutPanel1); this.DoubleBuffered = true; this.Name = "CrystalControl"; + this.toolTip.SetToolTip(this, resources.GetString("$this.ToolTip")); this.Load += new System.EventHandler(this.CrystalForm_Load); this.DragDrop += new System.Windows.Forms.DragEventHandler(this.FormCrystal_DragDrop); this.DragEnter += new System.Windows.Forms.DragEventHandler(this.FormCrystal_DragEnter); @@ -1362,5 +1456,7 @@ private void InitializeComponent() private System.Windows.Forms.Button buttonScatteringFactor; private EOSControl eosControl; private System.Windows.Forms.Button button1; + private System.Windows.Forms.ToolStripMenuItem convertToP1SymmetryToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem convertToSuperstructureToolStripMenuItem; } } \ No newline at end of file diff --git a/Crystallography.Controls/Crystal/CrystalControl.cs b/Crystallography.Controls/Crystal/CrystalControl.cs index db520dc..873767d 100644 --- a/Crystallography.Controls/Crystal/CrystalControl.cs +++ b/Crystallography.Controls/Crystal/CrystalControl.cs @@ -1,6 +1,8 @@ #region Using +using Crystallography.Controls; using MathNet.Numerics.LinearAlgebra.Double; using System; +using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.IO; @@ -283,17 +285,8 @@ public void SetToInterface(bool ChangeCellParameter = true) public void ReadCrystal(string filename) { - - try - { - Crystal = ConvertCrystalData.ConvertToCrystal(filename); - } - catch (Exception ex) - { - if (Crystallography.AssemblyState.IsDebug) - MessageBox.Show(ex.ToString()); - return; - } + try { Crystal = ConvertCrystalData.ConvertToCrystal(filename); } + catch (Exception ex) { if (AssemblyState.IsDebug) MessageBox.Show(ex.ToString()); return; } } #region ドラッグドロップイベント @@ -369,6 +362,69 @@ private void strainControlToolStripMenuItem_Click(object sender, EventArgs e) formStrain.Visible = !formStrain.Visible; } + /// + /// 空間群P1に変換 + /// + /// + /// + private void convertToP1ToolStripMenuItem_Click(object sender, EventArgs e) + { + toSuperStructure(1, 1, 1); + } + + //超構造に変換 + private void convertToSuperstructureToolStripMenuItem_Click(object sender, EventArgs e) + { + var dlg = new FormSuperStructure(); + if(dlg.ShowDialog()== DialogResult.OK) + toSuperStructure(dlg.A, dlg.B, dlg.C); + } + + private void toSuperStructure(int _u, int _v, int _w) + { + GenerateFromInterface(); + crystal.SymmetrySeriesNumber = 1; + + var temp_atoms = new List(); + foreach (var atoms in Crystal.Atoms) + { + int n = 0; + foreach (var atom in atoms.Atom) + { + for (double u = 0; u < _u; u++) + for (double v = 0; v < _v; v++) + for (double w = 0; w < _w; w++) + { + var x = (atom.X + u) / _u; + var y = (atom.Y + v) / _v; + var z = (atom.Z + w) / _w; + + var x_err = atoms.X_err / _u; + var y_err = atoms.Y_err / _v; + var z_err = atoms.Z_err / _w; + + temp_atoms.Add(new Atoms( + atoms.Label.TrimEnd() + "_" + n.ToString(), + atoms.AtomicNumber, atoms.SubNumberXray, atoms.SubNumberElectron, atoms.Isotope, + 1, + new Vector3DBase(x, y, z), new Vector3DBase(x_err, y_err, z_err), + atoms.Occ, atoms.Occ_err, + atoms.Dsf, + atoms.Material, + atoms.Radius, atoms.GLEnabled, atoms.ShowLabel)); + n++; + } + } + } + crystal.A *= _u; + crystal.B *= _v; + crystal.C *= _w; + crystal.Atoms = temp_atoms.ToArray(); + + SetToInterface(true); + GenerateFromInterface(); + } + #endregion 右クリックメニュー #region キーボードイベント @@ -664,5 +720,10 @@ private void button1_Click(object sender, EventArgs e) { GenerateFromInterface(); } + + private void clearAllDataToolStripMenuItem_Click(object sender, EventArgs e) + { + + } } } \ No newline at end of file diff --git a/Crystallography.Controls/Crystal/CrystalControl.ja.resx b/Crystallography.Controls/Crystal/CrystalControl.ja.resx index 2c258cc..166aff8 100644 --- a/Crystallography.Controls/Crystal/CrystalControl.ja.resx +++ b/Crystallography.Controls/Crystal/CrystalControl.ja.resx @@ -1,64 +1,4 @@ - - - + @@ -124,15 +64,9 @@ 単位格子体積 - - 1000, 25 - 161, 25 - - Segoe UI, 9pt - ×10⁻²⁴ g @@ -145,9 +79,6 @@ 181, 4 - - 1000, 25 - 195, 25 @@ -160,12 +91,6 @@ モル体積 - - 10, 29 - - - 1000, 25 - 182, 25 @@ -178,9 +103,6 @@ 202, 29 - - 1000, 25 - 163, 25 @@ -193,12 +115,6 @@ 密度 - - 10, 54 - - - 1000, 25 - 135, 25 @@ -238,6 +154,15 @@ 458, 276 + + 210, 22 + + + デバイワラー因子をゼロにする + + + 211, 26 + 2, 2 @@ -326,87 +251,9 @@ 弾性定数 - - 1000, 24 - - - 47, 24 - - - 1000, 24 - - - 47, 24 - - - 1000, 24 - - - 47, 24 - - - 1000, 24 - - - 47, 24 - - - 1000, 24 - - - 47, 24 - - - 1000, 24 - - - 47, 24 - - - 1000, 24 - - - 47, 24 - 120, 123 - - 1000, 24 - - - 47, 24 - - - 1000, 24 - - - 47, 24 - - - 1000, 24 - - - 47, 24 - - - 1000, 24 - - - 47, 24 - - - 1000, 24 - - - 47, 24 - - - 1000, 24 - - - 47, 24 - 462, 280 @@ -503,9 +350,76 @@ 470, 24 + + 271, 22 + + + 散乱因子 + + + 271, 22 + + + 対称性詳細 + + + 268, 6 + + + 271, 22 + + + CIFファイル又はAMCファイルから読み込み + + + 271, 22 + + + CIFファイルとして出力 + + + 271, 22 + + + 268, 6 + + + 271, 22 + + + + False + + + 271, 22 + + + アプリ起動時の格子定数に戻す + + + 268, 6 + + + 271, 22 + Strain control + + 271, 22 + + + 空間群をP1に変換 + + + 271, 22 + + + 超構造に変換 + + + 272, 242 + 48, 0 diff --git a/Crystallography.Controls/Crystal/CrystalControl.resx b/Crystallography.Controls/Crystal/CrystalControl.resx index 2438207..d670f3d 100644 --- a/Crystallography.Controls/Crystal/CrystalControl.resx +++ b/Crystallography.Controls/Crystal/CrystalControl.resx @@ -57,3364 +57,3628 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - GrowAndShrink - - - Segoe UI Symbol, 9.75pt - - - Segoe UI, 9pt + + 22, 46 - - ų + + System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Segoe UI, 9pt + + + True - - Cell Volume + + + Right - - 10, 4 + + tabPageReference - - 10, 0, 0, 0 - - - 1000, 25 + + 3, 3, 3, 3 - - 1, 23 + + α - - 0, 0, 1, 0 + + True - - 156, 25 + + 167, 57 - - - 90 + + 3, 3, 3, 3 - - 17, 17 - - - Cell volume in ų + + 209, 46 - - Cell volume in ų + + tabControl - - numericBoxVolume + + 4, 0, 4, 0 - - Crystallography.Controls.NumericBox, Crystallography.Controls, Culture=neutral, PublicKeyToken=null + + numericBoxStrain12 - - flowLayoutPanel4 + + 114, 107 - - 0 + + flowLayoutPanel2 - - GrowAndShrink + + 0, 0, 4, 0 - - Segoe UI Symbol, 9.75pt + + - - Segoe UI, 9pt + + System.Windows.Forms.Button, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - × 10⁻²⁴ g + + 0, 0, 1, 0 - - Segoe UI, 9pt + + groupBox6 - - Cell Mass + + 3, 5, 3, 0 - - 176, 4 + + 23 - - 10, 0, 0, 0 + + tabPageStrainStress - - 1000, 25 + + 7 - - 1, 23 + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 0, 0, 1, 0 + + numericBoxVolume - - 175, 25 + + ε11 - - 90 + + GrowAndShrink - - Cell mass in 10⁻²⁴ g + + saveToolStripMenuItem - - Cell mass in 10⁻²⁴ g + + True - - numericBoxCellMass + + Times New Roman, 9pt - - Crystallography.Controls.NumericBox, Crystallography.Controls, Culture=neutral, PublicKeyToken=null + + 0 - - flowLayoutPanel4 + + label103 - - 1 + + 0, 0 - - GrowAndShrink + + 199, 25 - - Segoe UI Symbol, 9.75pt + + 7 - - Segoe UI Symbol, 9pt + + 47, 24 - - cm³/mol + + ε33 - - Segoe UI Symbol, 9pt + + 239 - - Molar Volume + + 19 - - 10, 29 + + Density in g/cm³ - - 10, 0, 0, 0 + + tabPageStrainStress - - 1000, 25 + + Arial, 9pt - - 1, 23 + + - - 0, 0, 1, 0 + + 459, 298 - - 199, 25 + + 114, 69 - + 90 - - Molar Volume in cm³/mol + + 94 - - Molar Volume in cm³/mol + + 4 - - numericBoxMolarVolume + + 0, 0, 1, 0 - - Crystallography.Controls.NumericBox, Crystallography.Controls, Culture=neutral, PublicKeyToken=null + + Segoe UI Symbol, 9.75pt - - flowLayoutPanel4 + + 1 - - 2 + + 98 - + GrowAndShrink - - Segoe UI Symbol, 9.75pt + + GrowAndShrink - - Segoe UI Symbol, 9pt + + 6 - - g/mol + + 3 - - Segoe UI Symbol, 9pt + + 10, 54 - - Molar Mass + + 1, 25 - - 219, 29 + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 10, 0, 0, 0 + + Segoe UI Symbol, 9.75pt - - 1000, 25 + + True - - 1, 23 + + 4, 26 - + + 3 + + 0, 0, 1, 0 - - 171, 25 + + Segoe UI, 9pt - - 90 + + System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Molar Mass in g/mol + + 0 - - Molar Mass in g/mol + + 1000, 24 - - numericBoxMolarMass + + 1, 1, 1, 1 - - Crystallography.Controls.NumericBox, Crystallography.Controls, Culture=neutral, PublicKeyToken=null + + Strain Control - - flowLayoutPanel4 + + tabPageStrainStress - - 3 + + 0, 0 - - GrowAndShrink + + 55, 19 - - Segoe UI Symbol, 9.75pt + + 254 - - Segoe UI Symbol, 9pt + + Segoe UI Symbol, 9.75pt - - g/cm³ + + True - - Segoe UI Symbol, 9pt + + asCTFFilecomatibleToCHANNEL5FileToolStripMenuItem - - Density + + 0, 0, 1, 0 - - 10, 54 + + flowLayoutPanel2 - - 10, 0, 0, 0 + + flowLayoutPanel2 - - 1000, 25 + + System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 1, 23 + + as CTF file (comatible to CHANNEL 5 file) - - 0, 0, 1, 0 + + Crystallography.Controls.EOSControl, Crystallography.Controls, Culture=neutral, PublicKeyToken=null - - 147, 25 + + 133 - - 95 + + Crystallography.Controls.NumericBox, Crystallography.Controls, Culture=neutral, PublicKeyToken=null - - Density in g/cm³ + + Segoe UI Symbol, 9.75pt - - Density in g/cm³ + + groupBox8 - - numericBoxDensity + + symmetryInformationToolStripMenuItem - - Crystallography.Controls.NumericBox, Crystallography.Controls, Culture=neutral, PublicKeyToken=null + + 24, 15 - - flowLayoutPanel4 + + GrowAndShrink - - 4 + + Microsoft Sans Serif, 9pt - - True + + 0, 0, 0, 2 - - GrowAndShrink + + Open another window with the structure factors - - Segoe UI Symbol, 9.75pt + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Segoe UI Symbol, 9pt + + Molar Mass in g/mol - - 0, 0, 0, 0 + + 7 - - + + 6 - - Segoe UI Symbol, 9pt + + Crystallography.Controls.NumericBox, Crystallography.Controls, Culture=neutral, PublicKeyToken=null - - 0, 0, 0, 0 + + Top - - Profile color + + Segoe UI Symbol, 9.75pt - - 167, 57 + + revertCellConstantsToolStripMenuItem - - 10, 3, 3, 3 + + 249, 0 - - 91, 20 + + Convert to superstructure - - 89 + + tabControl - - + + tabPageElasticity - - Profile color - + + System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - colorControl + + 109, 115 - - Crystallography.Controls.ColorControl, Crystallography.Controls, Culture=neutral, PublicKeyToken=null + + 0, 2, 0, 0 - - flowLayoutPanel4 + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 5 + + 3 - - Fill + + True - - 0, 133 + + - - 4, 4, 4, 4 + + 353, 0 - - 0, 4, 0, 0 + + 447, 33 - - 453, 159 + + contextMenuStrip2 - - 94 + + 252, 22 - - flowLayoutPanel4 + + latticePlaneControl - - System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 5 - - panel5 + + 2 - - 0 + + System.Windows.Forms.NumericUpDown, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Top + + 0, 0, 1, 0 - - 0, 0 + + 114, 25 - - 3, 11, 3, 11 + + - - 453, 133 + + TopCenter - - 93 + + 459, 244 - - symmetryControl - - - Crystallography.Controls.SymmetryControl, Crystallography.Controls, Culture=neutral, PublicKeyToken=null + + 0 - - panel5 + + - - 1 + + - - Fill + + scatteringFactorToolStripMenuItem - - 3, 3 + + 114, 30 - - 2, 2, 2, 2 + + 11 - - 453, 292 + + 0, 27 - - 93 + + GrowAndShrink - - panel5 + + 25, 15 - - System.Windows.Forms.Panel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 249, 6 - - tabPageBasicInfo + + GrowAndShrink - - 0 + + - - 4, 26 + + Times New Roman, 9pt - - 3, 3, 3, 3 + + Atom positions and species - - 459, 298 + + 206, 25 - - 4 + + contextMenuStripPoleFigure - - Basic Info. + + 120, 121 - - Cell constants, symmetry, and other basic informaton + + buttonSymmetryInfo - - Cell constants, symmetry, and other basic informaton + + tabPageStrainStress - - tabPageBasicInfo + + Crystallography.Controls.NumericBox, Crystallography.Controls, Culture=neutral, PublicKeyToken=null - + System.Windows.Forms.TabPage, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - tabControl + + Times New Roman, 9pt - - 0 + + tabPageStrainStress - - True + + 237 - - Fill + + Segoe UI Symbol, 9pt - - Microsoft Sans Serif, 9pt + + NoControl - - 0, 0 + + True - - 0, 0, 0, 0 + + 235 - - 446, 108 + + 12 - - 459, 298 + + GrowAndShrink - - 0 + + Import from CIF, AMC... - - atomControl + + 71, 84 - - Crystallography.Controls.AtomControl, Crystallography.Controls, Culture=neutral, PublicKeyToken=null + + Segoe UI, 9pt - - tabPageAtom + + System.Windows.Forms.Panel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 0 + + 1 - - True + + Segoe UI Symbol, 9.75pt - - GrowAndShrink + + Tahoma, 9pt - - True + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 249, 22 - - - Arial, 9pt + + 0 - - 217, 22 + + panelAtom - - Reset Debye-Waller factor + + 459, 298 - - 218, 26 + + 14 - - contextMenuStrip2 + + Segoe UI Symbol, 9.75pt - - System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + NoControl - - Bottom + + 0 - - 0, 0 + + 1, 23 - - 0, 0 + + 86 - - 65 + + 1, 22 - - panel3 + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - System.Windows.Forms.Panel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.GroupBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - panelAtom + + 453, 57 - - 0 + + ε13 - - Microsoft Sans Serif, 9pt + + tabPageBasicInfo - + 0, 0 - - 0, 0, 0, 0 + + 248 - - 0, 0 + + 64, 69 - - 65 + + numericBoxStress33 - - panelAtom + + Segoe UI Symbol, 9.75pt - - System.Windows.Forms.Panel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 122, 14 - - tabPageAtom + + 0, 0 - - 1 + + Segoe UI Symbol, 9.75pt - - Tahoma, 8.25pt + + 47, 24 - - 4, 26 + + 156, 25 - - 0, 0, 0, 0 + + 274, 4 - - 459, 298 + + groupBox6 - + + panel3 + + + Segoe UI Symbol, 9.75pt + + 0 - - Atom Info. + + 137 - - Atom positions and species + + 90 - - Atom positions and species + + 4, 0, 0, 0 - - tabPageAtom + + 357, 4 - - System.Windows.Forms.TabPage, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + NoControl - - tabControl + + 4, 26 - - 1 + + label110 - - True + + numericBoxStrain33 - - GrowAndShrink + + - - Fill + + Crystallography.Controls.NumericBox, Crystallography.Controls, Culture=neutral, PublicKeyToken=null - - Segoe UI Symbol, 9pt + + Fill - - 0, 0 + + tabPageStrainStress - - 0, 0, 0, 0 + + 1000, 24 - - 459, 298 + + 9 - - 0 + + 91, 20 - - bondControl + + 371, 25 - - Crystallography.Controls.BondInputControl, Crystallography.Controls, Culture=neutral, PublicKeyToken=null + + System.Windows.Forms.Button, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - tabPageBondsPolyhedra + + 4, 2, 0, 0 - - 0 + + σ23 - - 4, 26 + + System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 459, 298 + + label112 - - 3 + + tabPageStrainStress - - Bonds ( & Polyhedra) + + 459, 298 - - tabPageBondsPolyhedra + + 249, 6 - - System.Windows.Forms.TabPage, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.GroupBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - tabControl + + numericBoxMolarMass - - 2 + + Segoe UI Symbol, 9pt - - Fill + + True - - Segoe UI Symbol, 9.75pt + + 47, 24 - - 3, 21 + + Density in g/cm³ - - True + + 467, 328 - - Vertical + + 1, 23 - - 341, 156 + + Segoe UI Symbol, 9.75pt - - 0 + + tabPageEOS - - textBoxTitle + + numericBoxStrain11 - - System.Windows.Forms.TextBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 29 - - groupBox8 + + Save - - 0 + + label106 - - Fill + + 0, 4, 0, 0 - - 109, 115 + + Symmetry Information - - 347, 180 + + True - - 3 + + Crystallography.Controls.NumericBox, Crystallography.Controls, Culture=neutral, PublicKeyToken=null - - Title + + NoControl - - groupBox8 + + tabPageStrainStress - - System.Windows.Forms.GroupBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Crystallography.Controls.BondInputControl, Crystallography.Controls, Culture=neutral, PublicKeyToken=null - - tabPageReference + + - - 0 + + 120, 46 - - Fill + + - - Segoe UI Symbol, 9.75pt + + 6 - - 3, 21 + + System.Windows.Forms.TextBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + True - - Vertical + + label114 - - 100, 156 + + 0, 3, 3, 0 - - 0 + + NoControl - - textBoxAuthor + + Molar Mass in g/mol - - System.Windows.Forms.TextBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 75, 23 - - groupBox6 + + Molar Volume in cm³/mol - - 0 + + 3 - - Left + + True - - 3, 115 + + tabControl - - 106, 180 + + 1 - - 2 + + Molar Mass - - Authors + + NoControl - - groupBox6 + + numericBoxStress22 - - System.Windows.Forms.GroupBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 8 - - tabPageReference + + 2 - - 1 + + - - Fill + + NoControl - - Segoe UI Symbol, 9.75pt + + σ33 - - 3, 21 + + panel4 - + + Crystallography.Controls.SymmetryControl, Crystallography.Controls, Culture=neutral, PublicKeyToken=null + + + System.Windows.Forms.GroupBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + True - - Vertical + + NoControl - - 447, 31 + + - + 0 - - textBoxJournal + + - - System.Windows.Forms.TextBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - groupBox7 + + 0, 2, 0, 0 - - 0 + + Fill - - Top + + System.Windows.Forms.GroupBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 3, 60 + + 100, 156 - - 453, 55 + + 3, 3 - - 1 + + numericUpDownAngleResolution - - Journal + + System.Windows.Forms.NumericUpDown, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - groupBox7 + + 0 - - System.Windows.Forms.GroupBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + - - tabPageReference + + - - 2 + + 4, 0, 4, 0 - - Fill + + System.Windows.Forms.Panel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Segoe UI Symbol, 9.75pt + + Cell mass in 10⁻²⁴ g - - 3, 21 + + 90 - - True + + flowLayoutPanel1 - - 447, 33 + + 16 - - 0 + + 1000, 24 - - textBoxMemo + + 0, 0, 1, 0 - - System.Windows.Forms.TextBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 4, 0, 4, 0 - - groupBox5 + + Bottom - - 0 + + NoControl - - Top + + 459, 298 - - 3, 3 + + Segoe UI, 9pt - - 453, 57 + + True - - 0 + + Fill - - Note + + numericUpDownCrystallineSize - - groupBox5 + + Segoe UI Symbol, 9.75pt - - System.Windows.Forms.GroupBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Z (Number of formula in the unit cell) - - tabPageReference + + Times New Roman, 9pt - - 3 + + 0 - - 4, 26 + + 65 - - 3, 3, 3, 3 + + System.Windows.Forms.TabPage, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 459, 298 + + 6 - - 1 + + label101 - - Ref. + + 15 - - tabPageReference + + Fill - - System.Windows.Forms.TabPage, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 0 - - tabControl + + 306, 159 - - 3 + + - - Fill + + 10, 0, 0, 0 - - Segoe UI Symbol, 9pt + + flowLayoutPanel2 - - 3, 3 + + 0, 0 - - 2, 3, 2, 3 + + 453, 55 - - 453, 292 + + 5 - - 0 + + 10, 0, 0, 0 - - eosControl + + 110, 2 - - Crystallography.Controls.EOSControl, Crystallography.Controls, Culture=neutral, PublicKeyToken=null + + 1000, 24 - - tabPageEOS + + label5 - - 0 + + Crystallography.Controls.BoundControl, Crystallography.Controls, Culture=neutral, PublicKeyToken=null - - 4, 26 + + 3, 21 - - 3, 3, 3, 3 + + True - - 459, 298 + + - - 5 + + - - EOS + + Fill - - tabPageEOS + + 252 - - System.Windows.Forms.TabPage, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 0, 0, 0, 0 - - tabControl + + 0, 0, 1, 0 + + + 2, 2, 2, 2 4 - - True + + Segoe UI Symbol, 9.75pt - - 0, 6 + + Profile color - - 4, 4, 4, 4 + + Cell volume in ų - - 574, 177 + + 139 - - 0 + + System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - elasticityControl1 + + System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Crystallography.Controls.ElasticityControl, Crystallography.Controls, Culture=neutral, PublicKeyToken=null + + 1, 1, 1, 1 - - tabPageElasticity + + Segoe UI Symbol, 9.75pt - - 0 + + panel4 - - 4, 26 + + tabPageAtom - - 3, 3, 3, 3 + + - - 459, 298 + + textBoxTitle - - 6 + + tabPageBasicInfo - - Elasticity + + tabControl - - tabPageElasticity + + 118, 14 - - System.Windows.Forms.TabPage, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 1, 22 - - tabControl + + σ12 - - 5 + + 4, 26 - - 282, 196 + + asTXTFileallEulerAngleAndDensitySortedToolStripMenuItem - - 75, 23 + + NoControl - - 263 + + - - set + + 21 - - button1 + + 104, 25 - - System.Windows.Forms.Button, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + buttonScatteringFactor - - tabPageStrainStress + + 3 - - 0 + + Segoe UI Symbol, 9.75pt - - GrowAndShrink + + 1, 22 - - Segoe UI Symbol, 9.75pt + + cm³/mol - - 120, 121 + + 252, 22 - - 1, 1, 1, 1 + + 10, 29 - - 1000, 24 + + tabPageStrainStress - - 1, 22 + + panel5 - + 0, 0, 1, 0 - - 47, 24 - - - 5 + + tabControl - - numericBoxStrain33 + + 0 - - Crystallography.Controls.NumericBox, Crystallography.Controls, Culture=neutral, PublicKeyToken=null + + buttonGenerateRandomOrientations - - tabPageStrainStress + + True - - 1 + + 80 - - GrowAndShrink + + division - - Segoe UI Symbol, 9.75pt + + Export to CIF - - 306, 159 + + g/mol - - 1, 1, 1, 1 + + System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 1000, 24 + + label22 - - 1, 22 + + tabPageBondsPolyhedra - - 0, 0, 1, 0 + + 0 - - 47, 24 + + 194, 12 - - 13 + + label107 - - numericBoxHill + + NoControl - - Crystallography.Controls.NumericBox, Crystallography.Controls, Culture=neutral, PublicKeyToken=null + + 25, 15 - - tabPageStrainStress + + button1 - - 2 + + Size - - True + + 0 - - Times New Roman, 10pt + + tabControl - - NoControl + + System.Windows.Forms.TextBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 282, 162 + + tabPageLatticePlane - - 4, 0, 4, 0 + + Right - - 14, 16 + + 8 - - 262 + + 138 - - α + + - - label116 - - - System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabPageStrainStress + + 87 - - 3 + + exportToolStripMenuItem - - True + + tabControl - - Tahoma, 9pt + + - - NoControl + + 4, 26 - - 192, 162 + + 0, 0 - + 4, 0, 4, 0 - - 82, 14 - - - 12 - - - Hill coefficient + + 282, 162 - - label117 + + set - - System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 3 - + tabPageStrainStress - - 4 + + 3, 3, 3, 3 - - True + + 47, 24 - + Tahoma, 9pt - - NoControl - - - 194, 12 - - - 4, 0, 4, 0 + + 467, 0 - - 122, 14 + + panel5 - - 253 + + 89 - - Stress (Reuss model) - + + 9 - - label109 + + System.Windows.Forms.TabPage, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - tabPageStrainStress - - - 5 + + Profile color + - - True + + 0 - - Times New Roman, 9pt + + 217, 22 - - NoControl + + - - 251, 69 + + 17 - - 4, 0, 4, 0 + + 459, 27 - - 25, 15 + + - - 249 + + NoControl - - σ22 + + Angle Resolution - - label110 + + - - System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + groupBox7 - + tabPageStrainStress - - 6 + + 1000, 24 - - True + + 1 - - Times New Roman, 9pt + + tabControl - - NoControl + + System.Windows.Forms.TabPage, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 255, 29 + + 0 - - 4, 0, 4, 0 + + Left - - 25, 15 + + tabPageLatticePlane - - 250 + + 12 - - σ12 + + True - - label111 + + Segoe UI Symbol, 9pt - - System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 459, 298 - - tabPageStrainStress + + 4 - - 7 + + readToolStripMenuItem - - True + + 1 - - Times New Roman, 9pt + + 0 - - NoControl + + System.Windows.Forms.Button, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 301, 109 + + tabPageStrainStress - - 4, 0, 4, 0 + + Symmetry info. - - 25, 15 + + Segoe UI Symbol, 9.75pt - - 251 + + 55, 0 - - σ33 + + 47, 24 - - label112 + + 0, 0 - - System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + - - tabPageStrainStress + + Crystallography.Controls.NumericBox, Crystallography.Controls, Culture=neutral, PublicKeyToken=null - - 8 + + tabPageBounds - - True + + flowLayoutPanel2 - - Times New Roman, 9pt + + System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - NoControl + + 206, 28 - - 4, 0, 4, 0 + + 0, 6 - - 25, 15 + + Segoe UI Symbol, 9.75pt - - 254 + + - - σ11 + + 0, 0, 0, 0 - - label113 + + 4 - - System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 76 - - tabPageStrainStress + + 13 - - 9 + + 3 - - True + + 1, 22 - - Times New Roman, 9pt + + 5 - - NoControl + + Top - - 301, 69 + + tabPageStrainStress - - 4, 0, 4, 0 + + - - 25, 15 + + tabPageStrainStress - - 252 + + 108, 22 - - σ23 + + 252, 22 - - label114 + + True - - System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + tabControl - - tabPageStrainStress + + 0, 0, 1, 0 - - 10 + + nm - - True + + poleFigureControl - - Times New Roman, 9pt + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - NoControl + + Left - - 304, 29 + + numericBoxStress13 - - 4, 0, 4, 0 + + 459, 298 - - 25, 15 + + - - 248 + + 4, 0, 4, 0 - - σ13 + + Segoe UI Symbol, 9pt - - label115 + + 453, 292 - - System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 459, 27 - - tabPageStrainStress + + 13 - - 11 + + 459, 298 - + True - - Tahoma, 9pt - - - NoControl + + 22 - - 4, 12 + + 166, 4 - - 4, 0, 4, 0 + + GrowAndShrink - - 118, 14 + + System.Windows.Forms.Panel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 240 + + 0, 2, 0, 0 - - Strain (Voigt model) + + Fill - - label102 + + 309, 22 - - System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + - - tabPageStrainStress + + Molar Volume in cm³/mol - - 12 + + 24, 15 - - True + + 41, 25 - - Times New Roman, 9pt + + Basic Info. - - NoControl + + Fill - - 64, 69 + + 9 - - 4, 0, 4, 0 + + 3, 11, 3, 11 - - 24, 15 + + - - 235 + + tabPageStrainStress - - ε22 + + Scattering factor - - label103 + + textBoxAuthor - - System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + groupBox8 - - tabPageStrainStress + + 252, 22 - - 13 + + 2 - - True + + flowLayoutPanel4 - - Times New Roman, 9pt + + 27 - - NoControl + + 8 - - 64, 30 + + Polycrystalline Property - - 4, 0, 4, 0 + + numericBoxCellMass - - 24, 15 + + 0, 0, 0, 0 - - 236 + + 0 - - ε12 + + 87 - - label104 + + Right - - System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 71, 46 - - tabPageStrainStress + + - - 14 + + 4, 0, 4, 0 - + True - - Times New Roman, 9pt + + $this - - NoControl + + tabPageStrainStress - - 114, 107 + + numericBoxZnumber - - 4, 0, 4, 0 + + 4 - - 24, 15 + + Times New Roman, 9pt - - 237 + + Crystallography.Controls.NumericBox, Crystallography.Controls, Culture=neutral, PublicKeyToken=null - - ε33 + + Segoe UI Symbol, 9.75pt - - label105 + + 44, 25 - - System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + True - - tabPageStrainStress + + panel4 - - 15 + + Crystallography.Controls.NumericBox, Crystallography.Controls, Culture=neutral, PublicKeyToken=null - - True + + 0 - - Times New Roman, 9pt + + Atom Info. - - NoControl + + flowLayoutPanel4 - - 114, 69 + + 3, 3 - - 4, 0, 4, 0 + + Tahoma, 9pt - - 24, 15 + + 25, 15 - - 238 + + Random Rotations - - ε23 + + System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - label106 + + Segoe UI Symbol, 9pt - - System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Crystallography.Controls.AtomControl, Crystallography.Controls, Culture=neutral, PublicKeyToken=null - - tabPageStrainStress + + TopCenter - - 16 + + System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - True + + 0, 0, 0, 0 - - Times New Roman, 9pt + + System.Windows.Forms.TabControl, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - NoControl + + textBoxName - - 18, 30 + + 0 - - 4, 0, 4, 0 + + 1, 1, 1, 1 - - 24, 15 + + 0, 0, 0, 0 - - 241 + + 95 - - ε11 + + 5 - - label107 + + 47, 24 - - System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + GrowAndShrink - - tabPageStrainStress + + Tahoma, 8.25pt - - 17 + + 574, 177 - - True + + 47, 24 - - Times New Roman, 9pt + + σ13 - - NoControl + + 0 - - 114, 30 + + True - - 4, 0, 4, 0 + + 0 - - 24, 15 + + - - 239 + + groupBox5 - - ε13 + + 347, 180 - - label108 + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 126, 27 - - tabPageStrainStress + + True - - 18 + + 1000, 25 - - GrowAndShrink + + label115 - - Segoe UI Symbol, 9.75pt + + 4, 0, 4, 0 - - 305, 125 + + 135 - - 1, 1, 1, 1 + + 341, 156 - - 1000, 24 + + 252, 22 - - 1, 22 + + NoControl - - 0, 0, 1, 0 + + 301, 69 - - 47, 24 + + Z (Number of formula in the unit cell) - - 11 + + 307, 84 - - numericBoxStress33 + + Density - - Crystallography.Controls.NumericBox, Crystallography.Controls, Culture=neutral, PublicKeyToken=null + + 453, 292 - - tabPageStrainStress + + 2 - - 19 + + 467, 380 - + + 4, 26 + + GrowAndShrink - - Segoe UI Symbol, 9.75pt + + ε12 - - 257, 84 + + 1 - - 1, 1, 1, 1 + + 28 - - 1000, 24 + + flowLayoutPanel3 - - 1, 22 + + - - 0, 0, 1, 0 + + 447, 31 - - 47, 24 + + 459, 298 - - 9 + + Strain (Voigt model) - - numericBoxStress22 + + 0 - - Crystallography.Controls.NumericBox, Crystallography.Controls, Culture=neutral, PublicKeyToken=null + + 1 - - tabPageStrainStress + + panel4 - - 20 + + 0, 0, 1, 0 - - GrowAndShrink + + 4, 2, 0, 0 - - Segoe UI Symbol, 9.75pt + + True - - 209, 46 + + 2 - - 1, 1, 1, 1 + + 0 - - 1000, 24 + + Times New Roman, 10pt - - 1, 22 + + 10 - - 0, 0, 1, 0 + + True - - 47, 24 + + 3, 21 - - 6 + + 5 - - numericBoxStress11 + + 301, 109 - + Crystallography.Controls.NumericBox, Crystallography.Controls, Culture=neutral, PublicKeyToken=null - - tabPageStrainStress - - - 21 + + 459, 298 - - GrowAndShrink + + Cell constants, symmetry, and other basic informaton - - Segoe UI Symbol, 9.75pt + + 238 - - 307, 84 + + Vertical - + 1, 1, 1, 1 - - 1000, 24 - - - 1, 22 - - - 0, 0, 1, 0 + + True - - 47, 24 + + tabControl - - 10 + + × 10⁻²⁴ g - - numericBoxStress23 + + 250 - + Crystallography.Controls.NumericBox, Crystallography.Controls, Culture=neutral, PublicKeyToken=null - - tabPageStrainStress + + Segoe UI Symbol, 9.75pt - - 22 + + 3, 3, 3, 3 - - GrowAndShrink + + - - Segoe UI Symbol, 9.75pt + + Crystallography.Controls.NumericBox, Crystallography.Controls, Culture=neutral, PublicKeyToken=null - - 307, 46 + + Bounds - - 1, 1, 1, 1 + + Cell volume in ų - - 1000, 24 + + Times New Roman, 9pt - - 1, 22 + + σ22 - - 0, 0, 1, 0 + + - - 47, 24 + + 0 - - 8 + + tabPageStrainStress - - numericBoxStress13 + + 219, 29 - - Crystallography.Controls.NumericBox, Crystallography.Controls, Culture=neutral, PublicKeyToken=null + + numericBoxStrain22 - - tabPageStrainStress + + - - 23 + + True - - GrowAndShrink + + 262 - - Segoe UI Symbol, 9.75pt + + 453, 292 - - 258, 46 + + 4, 4, 4, 4 - - 1, 1, 1, 1 + + 0 - - 1000, 24 + + Top - - 1, 22 + + - - 0, 0, 1, 0 + + 106, 17 - - 47, 24 + + 0, 0, 1, 0 - - 7 + + tabPageElasticity - - numericBoxStress12 + + - + Crystallography.Controls.NumericBox, Crystallography.Controls, Culture=neutral, PublicKeyToken=null - - tabPageStrainStress + + - - 24 + + Authors - - GrowAndShrink + + panel1 - - Segoe UI Symbol, 9.75pt + + False - - 22, 46 + + 305, 125 - - 1, 1, 1, 1 + + $this - - 1000, 24 + + Open another window with the detailed symmetry information - - 1, 22 + + False - - 0, 0, 1, 0 + + panelAtom - - 47, 24 + + System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 0 - - - numericBoxStrain11 + + GrowAndShrink - - Crystallography.Controls.NumericBox, Crystallography.Controls, Culture=neutral, PublicKeyToken=null + + tabPageAtom - - tabPageStrainStress + + Segoe UI Symbol, 9.75pt - - 25 + + 3, 115 - - GrowAndShrink + + 0 - + Segoe UI Symbol, 9.75pt - - 71, 84 + + tabPageStrainStress - - 1, 1, 1, 1 + + tabPageReference - - 1000, 24 + + 26 - - 1, 22 + + System.Windows.Forms.TabPage, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 0, 0, 1, 0 + + System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 47, 24 + + 65 - - 3 + + Hill coefficient - - numericBoxStrain22 + + 3, 3, 3, 3 - - Crystallography.Controls.NumericBox, Crystallography.Controls, Culture=neutral, PublicKeyToken=null + + 249, 6 - - tabPageStrainStress + + label108 - - 26 + + Segoe UI Symbol, 9pt - - GrowAndShrink + + System.Windows.Forms.UserControl, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Segoe UI Symbol, 9.75pt + + flowLayoutPanel4 - - 71, 46 + + 2 - - 1, 1, 1, 1 + + 0, 0, 1, 0 - - 1000, 24 + + Times New Roman, 9pt - - 1, 22 + + Segoe UI Symbol, 9pt - - 0, 0, 1, 0 + + System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 47, 24 + + 24, 15 - - 1 + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - numericBoxStrain12 + + σ11 - - Crystallography.Controls.NumericBox, Crystallography.Controls, Culture=neutral, PublicKeyToken=null + + System.Windows.Forms.Panel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - tabPageStrainStress + + 0, 27 - - 27 + + 1000, 24 - - GrowAndShrink + + - - Segoe UI Symbol, 9.75pt + + 1 - - 120, 84 + + - - 1, 1, 1, 1 + + 10, 0, 0, 0 - - 1000, 24 + + 136 - - 1, 22 + + NoControl - + 0, 0, 1, 0 - - 47, 24 + + 11 - - 4 + + 1, 1, 1, 1 - - numericBoxStrain23 + + Segoe UI Symbol, 9.75pt - - Crystallography.Controls.NumericBox, Crystallography.Controls, Culture=neutral, PublicKeyToken=null + + True - - tabPageStrainStress + + elasticityControl1 - - 28 + + 1 - - GrowAndShrink + + tabPagePolycrystalline - - Segoe UI Symbol, 9.75pt + + 1, 1, 1, 1 - - 120, 46 + + 147, 25 + + + 4, 0, 4, 0 1, 1, 1, 1 - - 1000, 24 + + Note - - 1, 22 + + 85 - - 0, 0, 1, 0 + + panel4 - - 47, 24 + + GrowAndShrink - - 2 + + tabPageBondsPolyhedra - - numericBoxStrain13 + + tabPageStrainStress - - Crystallography.Controls.NumericBox, Crystallography.Controls, Culture=neutral, PublicKeyToken=null + + label102 - - tabPageStrainStress + + - - 29 + + 120, 84 - - 4, 26 + + 0, 3, 0, 0 - - 3, 3, 3, 3 + + - - 459, 298 + + System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 7 + + numericBoxStress11 - - Strain / Stress + + 1000, 24 - - tabPageStrainStress + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - System.Windows.Forms.TabPage, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Crystallography.Controls.NumericBox, Crystallography.Controls, Culture=neutral, PublicKeyToken=null - - tabControl + + tabPagePolycrystalline - - 6 + + as TXT file (all Euler angle and density) - - 414, 22 - - - 108, 22 - - - Read - - - 108, 22 + + Atom positions and species - - Save + + True - - 309, 22 + + Journal - - as CTF file (comatible to CHANNEL 5 file) + + 3, 3 - - 309, 22 + + numericBoxStrain23 - - as TXT file (all Euler angle and density) + + NoControl - - 309, 22 + + 93 - - as TXT file (all Euler angle and density) sorted + + 1, 1, 1, 1 - - 108, 22 + + Segoe UI Symbol, 9.75pt - - Export + + numericBoxMolarVolume - - 109, 70 + + True - - contextMenuStripPoleFigure + + NoControl - - System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 253, 242 - - Fill + + - + Segoe UI Symbol, 9.75pt - - 0, 54 + + 3, 4, 3, 4 - - 4, 2, 4, 2 + + 109, 70 - - 459, 244 + + flowLayoutPanel4 - - 133 + + 6 - - poleFigureControl + + 3, 21 - - Crystallography.Controls.PoleFigureControl, Crystallography.Controls, Culture=neutral, PublicKeyToken=null + + 2 - - tabPagePolycrystalline + + Cell Mass - - 0 + + 459, 298 - - True + + 1000, 25 - - True + + 4, 26 - - GrowAndShrink + + System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Segoe UI Symbol, 9.75pt + + 4 - - NoControl + + 1000, 25 - - 0, 0 + + toolTip - - 0, 0, 0, 0 + + numericBoxStress12 - - 126, 27 + + label90 - - 146 + + GrowAndShrink - - Random Rotations + + groupBox7 - - buttonGenerateRandomOrientations + + 252, 22 - - System.Windows.Forms.Button, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Crystallography.Controls.NumericBox, Crystallography.Controls, Culture=neutral, PublicKeyToken=null - - flowLayoutPanel3 + + System.Windows.Forms.TabPage, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 0 + + 459, 298 - - Top + + 0, 0, 0, 0 - - 0, 27 + + 0, 133 - - 459, 27 + + Segoe UI Symbol, 9.75pt - - 149 + + textBoxJournal - - flowLayoutPanel3 + + Crystallography.Controls.NumericBox, Crystallography.Controls, Culture=neutral, PublicKeyToken=null - - System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 4, 0, 4, 0 - - tabPagePolycrystalline + + 3, 3, 3, 3 - - 1 + + 1, 22 - - True + + 3, 3, 3, 3 - - True + + 252, 22 - + Segoe UI Symbol, 9.75pt - - NoControl - - - 4, 4 + + 2 - - 4, 2, 0, 0 + + 25, 15 - - 106, 17 + + System.Windows.Forms.TextBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 137 + + - - Angle Resolution + + Send this crystal to other software - - label5 + + 146 - - System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 43, 19 - + flowLayoutPanel2 - - 0 + + 0, 0 - - Segoe UI Symbol, 9.75pt + + - - 110, 2 + + 0, 0, 0, 0 - - 0, 0, 4, 0 + + - - 48, 25 + + 4, 0, 4, 0 - - 136 + + 1000, 24 - - True + + numericBoxHill - - numericUpDownAngleResolution + + - - System.Windows.Forms.NumericUpDown, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - flowLayoutPanel2 + + 4, 2, 4, 0 - - 1 + + 252, 22 - - True + + Name of the crystal - - Segoe UI Symbol, 9.75pt + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + NoControl - - 166, 4 - - - 4, 2, 0, 0 + + System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 52, 17 + + 18, 30 - - 138 + + textBoxFormula - - division + + 4, 0, 4, 0 - - label29 + + 4, 0, 4, 0 - - System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.TabPage, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - flowLayoutPanel2 + + - - 2 + + 48, 25 - - Segoe UI Symbol, 9.75pt + + 108, 22 - - 218, 2 + + panel1 - - 0, 0, 4, 0 + + Cell constants, symmetry, and other basic informaton - - 48, 25 + + NoControl - - 136 + + Segoe UI Symbol, 9.75pt - - True + + Top - - numericUpDownAngleSubDivision + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + System.Windows.Forms.NumericUpDown, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - flowLayoutPanel2 + + - - 3 + + 446, 108 - - True + + panel1 - - Segoe UI Symbol, 9.75pt + + Fill - - NoControl + + convertToSuperstructureToolStripMenuItem - - 274, 4 + + 108, 22 - - 4, 2, 4, 0 + + eosControl - - 31, 17 + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 138 + + Left - - Size + + 0, 0, 1, 0 - - label101 + + 4, 0, 4, 0 - - System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 1, 1, 1, 1 - - flowLayoutPanel2 + + 10, 0, 0, 0 - - 4 + + System.Windows.Forms.Panel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + + 4, 0, 4, 0 + + Segoe UI Symbol, 9.75pt - - 309, 2 + + sendThisCrystalToOtherSoftwareToolStripMenuItem - - 0, 0, 0, 0 + + Segoe UI Symbol, 9.75pt - - 44, 25 + + tabPagePolycrystalline - - 135 + + 90 - - numericUpDownCrystallineSize + + 24, 15 - - System.Windows.Forms.NumericUpDown, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 0 - - flowLayoutPanel2 + + contextMenuStrip - - 5 + + Fill - - True + + flowLayoutPanel4 - - Segoe UI Symbol, 9.75pt + + System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - NoControl + + 4, 12 - - 357, 4 + + Crystallography.Controls.ColorControl, Crystallography.Controls, Culture=neutral, PublicKeyToken=null - - 4, 2, 4, 0 + + True - - 26, 17 + + Segoe UI Symbol, 9.75pt - - 139 + + label113 - - nm + + 4, 4, 4, 4 - - label99 + + 10, 0, 0, 0 - - System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 47, 24 - - flowLayoutPanel2 + + 1, 1, 1, 1 - - 6 + + atomControl - - Top + + Crystallography.Controls.PoleFigureControl, Crystallography.Controls, Culture=neutral, PublicKeyToken=null - - 0, 0 + + Segoe UI Symbol, 9.75pt - - 0, 2, 0, 0 + + 0, 0, 0, 0 - - 459, 27 + + Lattice Plane - - 148 + + Export - - False + + 10 - - flowLayoutPanel2 + + GrowAndShrink - - System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 1, 22 - - tabPagePolycrystalline + + NoControl - - 2 - - - 4, 26 + + Microsoft Sans Serif, 9pt - - 459, 298 + + - + 8 - - Polycrystalline Property - - - tabPagePolycrystalline - - - System.Windows.Forms.TabPage, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - tabControl + + - - 7 + + 0 Fill - - Segoe UI Symbol, 9pt - - - 3, 3 + + 24, 15 - - 3, 4, 3, 4 + + flowLayoutPanel4 - - 453, 292 + + 43, 0 - - 0 + + 1 - - boundControl + + Times New Roman, 9pt - - Crystallography.Controls.BoundControl, Crystallography.Controls, Culture=neutral, PublicKeyToken=null + + System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - tabPageBounds + + System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 0 + + panel1 - - 4, 26 + + Segoe UI Symbol, 9pt - - 3, 3, 3, 3 + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 459, 298 + + System.Windows.Forms.ToolTip, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 9 + + tabPageStrainStress - - Bounds + + 4, 2, 4, 0 tabPageBounds - - System.Windows.Forms.TabPage, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 282, 196 - - tabControl + + flowLayoutPanel2 - - 8 + + Name - - Fill + + 47, 24 - - Segoe UI Symbol, 9pt + + Crystallography.Controls.LatticePlaneControl, Crystallography.Controls, Culture=neutral, PublicKeyToken=null - - 3, 3 + + label105 - - 3, 4, 3, 4 + + tabPageStrainStress - - 453, 292 + + tabPageStrainStress - - 0 + + 10, 4 - - latticePlaneControl + + Chemical formula - - Crystallography.Controls.LatticePlaneControl, Crystallography.Controls, Culture=neutral, PublicKeyToken=null + + 95 - - tabPageLatticePlane + + tabPageStrainStress - - 0 + + boundControl - - 4, 26 + + 4, 4 - - 3, 3, 3, 3 + + GrowAndShrink - - 459, 298 + + 1000, 24 - - 10 + + 47, 24 - - Lattice Plane + + 467, 25 - - tabPageLatticePlane + + 252, 22 - - System.Windows.Forms.TabPage, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + as TXT file (all Euler angle and density) sorted - - tabControl + + Formula - - 9 + + 252, 22 - - Fill + + 0 - - Segoe UI Symbol, 9.75pt + + 1000, 24 - - 0, 52 + + numericBoxDensity - - 0, 2, 0, 0 + + textBoxMemo - - True + + 309, 22 - - 467, 328 + + Stress (Reuss model) + - - 0 + + 251, 69 - - tabControl + + 3, 4, 3, 4 - - System.Windows.Forms.TabControl, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + - - $this + + Read - - 3 + + - + + NoControl + + Fill - - Segoe UI Symbol, 9.75pt + + 467, 27 - - 55, 0 + + 253 - - 0, 3, 3, 0 + + 251 - - True + + - + Vertical - - 371, 25 + + Cell mass in 10⁻²⁴ g - - 76 + + 0, 0, 0, 0 - - Chemical formula + + 1, 22 - - textBoxFormula + + GrowAndShrink - - System.Windows.Forms.TextBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + True - - panel1 + + - + + Fill + + 0 - + GrowAndShrink - - Right - - - Segoe UI Symbol, 9.75pt + + True - - Z + + label29 - - 426, 0 + + True - - 4, 0, 0, 0 + + - - 1000, 25 + + toolStripSeparator2 - - 1, 25 + + Times New Roman, 9pt - - 0, 0, 1, 0 + + Fill - - 41, 25 + + 48, 25 - - 95 + + numericBoxStress23 - - Z (Number of formula in the unit cell) + + 0, 0, 4, 0 - - Z (Number of formula in the unit cell) + + 3, 21 - - numericBoxZnumber + + True - - Crystallography.Controls.NumericBox, Crystallography.Controls, Culture=neutral, PublicKeyToken=null + + 1, 23 - - panel1 + + 0, 54 - - 1 + + bondControl - - True + + 453, 133 - - Left + + NoControl - - Segoe UI Symbol, 9.75pt + + tabPageReference - - NoControl + + numericBoxStrain13 - - 0, 0 + + Reset Debye-Waller factor - - 0, 0, 0, 0 + + System.Windows.Forms.TabPage, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 0, 2, 0, 0 + + NoControl - - 55, 19 + + System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 85 + + Segoe UI Symbol, 9.75pt - - Formula + + 24, 15 Chemical formula - - label90 - - - System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + - - panel1 + + - - 2 + + $this - - Top + + importCrystalFromCIFAMCToolStripMenuItem - - 0, 27 + + 2, 3, 2, 3 - - 467, 25 + + 20 - - 98 + + Times New Roman, 9pt - - panel1 + + strainControlToolStripMenuItem - - System.Windows.Forms.Panel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + True - - $this + + 0, 52 - - 4 + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 96, 22 - - - 252, 22 + + 52, 17 - - Scattering Factor + + 1, 22 - - 252, 22 + + 5 - - Symmetry Information + + Revert cell constants - - 249, 6 + + True - - 252, 22 + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Import from CIF, AMC... + + toolStripSeparator3 - - 252, 22 + + 24 - - Export to CIF + + 0 - - 252, 22 + + True - - Send this crystal to other software + + 1000, 25 - - 249, 6 + + 309, 2 - - 252, 22 + + - - Reset all data + + tabPageStrainStress - - 252, 22 + + - - Revert cell constants + + 1000, 24 - - 249, 6 + + Top - - 252, 22 + + label104 - - Strain Control + + 0 - - 253, 198 + + Segoe UI Symbol, 9.75pt - - contextMenuStrip + + Strain / Stress - - System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Crystallography.Controls.NumericBox, Crystallography.Controls, Culture=neutral, PublicKeyToken=null - - Fill + + 93 - - Segoe UI Symbol, 9.75pt + + GrowAndShrink - - 43, 0 + + True - - 0, 3, 0, 0 - - - 206, 25 - - - 0 - - - Name of the crystal + + 249 - - textBoxName + + 426, 0 - + System.Windows.Forms.TextBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - panel4 - - - 0 + + System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + True - - Left + + 1, 22 - - Segoe UI Symbol, 9.75pt + + - - NoControl + + groupBox5 - - 0, 0 + + 453, 159 - - 3, 5, 3, 0 + + - - 0, 2, 0, 0 + + 88 - - 43, 19 + + tabPageStrainStress - - 80 + + Top - - Name + + - - label22 + + 26, 17 - + + 1 + + System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - panel4 + + - - 3 + + NoControl - - True + + 1, 23 - - GrowAndShrink + + 3, 60 - - Right + + 10 - - Segoe UI Symbol, 9.75pt + + tabControl - - TopCenter + + Crystallography.Controls.ElasticityControl, Crystallography.Controls, Culture=neutral, PublicKeyToken=null - + + Times New Roman, 9pt + + + 7 + + NoControl - - 353, 0 + + 47, 24 - - 0, 0, 0, 0 + + ε23 - - 114, 25 + + Vertical - - 87 + + clearAllDataToolStripMenuItem - - Scattering factor + + - - Open another window with the structure factors + + 309, 22 - - buttonScatteringFactor + + g/cm³ - - System.Windows.Forms.Button, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 96, 96 - - panel4 + + panel5 - - 2 + + 0, 2, 0, 0 - - True + + label116 - - GrowAndShrink + + 1, 1, 1, 1 - - Right + + 240 - - Segoe UI Symbol, 9.75pt + + GrowAndShrink - - TopCenter + + Fill - - NoControl + + 1000, 24 - - 249, 0 + + EOS - - 104, 25 + + Elasticity - - 88 + + Z - - Symmetry info. + + 4, 0, 4, 0 - - Open another window with the detailed symmetry information + + 3, 3 - - buttonSymmetryInfo + + 2 - - System.Windows.Forms.Button, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Crystallography.Controls.NumericBox, Crystallography.Controls, Culture=neutral, PublicKeyToken=null - - panel4 + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - 1 + + Crystallography.Controls.NumericBox, Crystallography.Controls, Culture=neutral, PublicKeyToken=null - + True - - GrowAndShrink - - - Top + + Segoe UI Symbol, 9pt - - 0, 0 + + - - 467, 0 + + 0, 0, 1, 0 - - 86 + + 1 - - flowLayoutPanel1 + + Reset all data - - System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Segoe UI Symbol, 9pt - - $this + + Segoe UI Symbol, 9.75pt - - 6 + + Molar Volume - - Top + + 1 - - 0, 0 + + 136 - - 0, 0, 0, 2 + + 1, 22 - - 467, 27 + + GrowAndShrink - - 87 + + 4, 0, 4, 0 + + + 4, 26 + + + 0 + + + tabPageStrainStress + + + 10, 3, 3, 3 + + + label111 + + + + + + Segoe UI Symbol, 9pt + + + 9 + + + GrowAndShrink + + + 1000, 24 + + + + + + 3, 3 + + + GrowAndShrink + + + System.Windows.Forms.TextBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Title + + + 1, 23 + + + 175, 25 + + + 192, 162 + + + 149 + + + Top + + + 6 + + + 25 + + + + + + + + + numericUpDownAngleSubDivision + + + 0, 0 + + + System.Windows.Forms.Button, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + Vertical + + + 241 + + + False + + + symmetryControl + + + 1000, 25 + + + Segoe UI Symbol, 9.75pt + + + True + + + tabPageStrainStress + + + Cell Volume + + + 1, 1, 1, 1 + + + System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 14, 16 + + + System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + toolStripSeparator1 + + + 307, 46 + + + Ref. + + + Segoe UI Symbol, 9.75pt + + + 257, 84 + + + Segoe UI, 9pt + + + 148 + + + 0 + + + 0, 0 + + + 0, 0, 1, 0 + + + tabPageStrainStress + + + System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + + 47, 24 + + + Times New Roman, 9pt + + + System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 3 + + + 25, 15 + + + colorControl + + + Segoe UI Symbol, 9.75pt + + + 31, 17 + + + 1, 1, 1, 1 + + + 0 + + + System.Windows.Forms.TabPage, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 0, 0 + + + True + + + 0, 0 + + + label117 + + + tabPageReference + + + 4, 26 + + + + + + NoControl + + + resetToolStripMenuItem + + + 459, 298 + + + flowLayoutPanel4 + + + Segoe UI Symbol, 9pt + + + tabPageStrainStress + + + tabPageStrainStress + + + 0, 0, 1, 0 + + + 0 + + + Bonds ( & Polyhedra) + + + ų + + + Convert to P1 symmetry + + + 4, 2, 4, 2 + + + GrowAndShrink + + + flowLayoutPanel3 + + + + + + 218, 2 + + + 0, 0, 1, 0 + + + tabPageReference - - panel4 + + label99 - - System.Windows.Forms.Panel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + GrowAndShrink - - $this + + Fill - - 5 + + ε22 - - True - - - 50 - - - 96, 96 + + 1, 22 - + + 1000, 25 + + + 0, 0 + + + 3 + + GrowAndShrink - - 0, 0, 0, 0 + + Segoe UI Symbol, 9.75pt - - 467, 380 + + - - resetToolStripMenuItem + + 64, 30 - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 0, 0, 0, 0 - - readToolStripMenuItem + + - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 25, 15 - - saveToolStripMenuItem + + 2 - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + tabPageEOS - - exportToolStripMenuItem + + 218, 26 - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 4 - - asCTFFilecomatibleToCHANNEL5FileToolStripMenuItem + + 4, 26 - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 1, 22 - - asTXTFileAllEulerAngleAndDensityToolStripMenuItem + + 236 - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + label109 - - asTXTFileallEulerAngleAndDensitySortedToolStripMenuItem + + Segoe UI Symbol, 9.75pt - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + GrowAndShrink - - scatteringFactorToolStripMenuItem + + 171, 25 - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + asTXTFileAllEulerAngleAndDensityToolStripMenuItem - - symmetryInformationToolStripMenuItem + + - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - toolStripSeparator2 + + 0, 0, 1, 0 - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.TextBox, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - importCrystalFromCIFAMCToolStripMenuItem + + 18 - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Fill exportThisCrystalAsCIFToolStripMenuItem - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + tabPagePolycrystalline - - sendThisCrystalToOtherSoftwareToolStripMenuItem + + 263 - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 106, 180 - - toolStripSeparator1 + + 0 - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + Segoe UI Symbol, 9.75pt - - clearAllDataToolStripMenuItem + + System.Windows.Forms.Label, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 304, 29 - - revertCellConstantsToolStripMenuItem + + System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 82, 14 - - toolStripSeparator3 + + convertToP1SymmetryToolStripMenuItem - - System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 176, 4 - - strainControlToolStripMenuItem + + tabPageStrainStress - - System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 3 - - toolTip + + 1, 22 - - System.Windows.Forms.ToolTip, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + 5 + + + flowLayoutPanel2 + + + Top + + + 453, 292 + + + GrowAndShrink CrystalControl - - System.Windows.Forms.UserControl, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + System.Windows.Forms.TabPage, System.Windows.Forms, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 258, 46 + + + $this + + + Scattering Factor + + + 255, 29 + + + Crystallography.Controls.NumericBox, Crystallography.Controls, Culture=neutral, PublicKeyToken=null + + + 4, 26 + + + 0, 0, 0, 0 + + + 138 + + + tabPageAtom + + + 47, 24 + + 50 + + + True + + + 96, 22 + + + ja + + + 17, 17 + + + 249, 22 + + + 414, 22 + \ No newline at end of file diff --git a/Crystallography.Controls/Crystal/EOSControl.cs b/Crystallography.Controls/Crystal/EOSControl.cs index f7e054b..424bdde 100644 --- a/Crystallography.Controls/Crystal/EOSControl.cs +++ b/Crystallography.Controls/Crystal/EOSControl.cs @@ -72,8 +72,8 @@ public EOS EOScondition double ze = 0; foreach (var atom in crystal.Atoms) { - n += atom.Atom.Count; - ze += atom.AtomicNumber * atom.Atom.Count * atom.Occ; + n += atom.Atom.Length; + ze += atom.AtomicNumber * atom.Atom.Length * atom.Occ; } eos.Ze = ze; diff --git a/Crystallography.Controls/Crystal/FormAtomDetailedInfo.cs b/Crystallography.Controls/Crystal/FormAtomDetailedInfo.cs index 57b9a42..156c8c4 100644 --- a/Crystallography.Controls/Crystal/FormAtomDetailedInfo.cs +++ b/Crystallography.Controls/Crystal/FormAtomDetailedInfo.cs @@ -26,8 +26,8 @@ private void setAtomDetailedInfo() //string str = "No.\tx\t y\t z\r\n"; - for (int i = 0; i < atoms.Atom.Count; i++) - listBox.Items.Add((i + 1).ToString() + "\t" + Atoms.GetStringFromDouble(atoms.Atom[i].X) + "\t " + Atoms.GetStringFromDouble(atoms.Atom[i].Y) + "\t " + Atoms.GetStringFromDouble(atoms.Atom[i].Z)); + for (int i = 0; i < atoms.Atom.Length; i++) + listBox.Items.Add($"{i + 1}\t{Atoms.GetStringFromDouble(atoms.Atom[i].X)}\t {Atoms.GetStringFromDouble(atoms.Atom[i].Y)}\t {Atoms.GetStringFromDouble(atoms.Atom[i].Z)}"); //this.toolTip.SetToolTip(this.listBoxAtoms, str); ; } diff --git a/Crystallography.Controls/Crystal/FormStrain.cs b/Crystallography.Controls/Crystal/FormStrain.cs index 7829c8f..96758bf 100644 --- a/Crystallography.Controls/Crystal/FormStrain.cs +++ b/Crystallography.Controls/Crystal/FormStrain.cs @@ -147,7 +147,7 @@ private void SetStrainedCrystal() CrystalControl.SymmetrySeriesNumber = 1; CrystalControl.Crystal.Atoms = Array.Empty(); for (int i = 0; i < originalCrystal.Atoms.Length; i++) - for (int j = 0; j < originalCrystal.Atoms[i].Atom.Count; j++) + for (int j = 0; j < originalCrystal.Atoms[i].Atom.Length; j++) { var atom = Deep.Copy(originalCrystal.Atoms[i]); atom.X = originalCrystal.Atoms[i].Atom[j].X; diff --git a/Crystallography.Controls/Crystal/FormSuperStructure.Designer.cs b/Crystallography.Controls/Crystal/FormSuperStructure.Designer.cs new file mode 100644 index 0000000..9a9e527 --- /dev/null +++ b/Crystallography.Controls/Crystal/FormSuperStructure.Designer.cs @@ -0,0 +1,150 @@ +namespace Crystallography.Controls; + +partial class FormSuperStructure +{ + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.numericBoxA = new Crystallography.Controls.NumericBox(); + this.numericBoxB = new Crystallography.Controls.NumericBox(); + this.numericBoxC = new Crystallography.Controls.NumericBox(); + this.buttonOK = new System.Windows.Forms.Button(); + this.buttonCancel = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // numericBoxA + // + this.numericBoxA.BackColor = System.Drawing.Color.Transparent; + this.numericBoxA.Font = new System.Drawing.Font("Segoe UI Symbol", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); + this.numericBoxA.HeaderText = "a × "; + this.numericBoxA.Location = new System.Drawing.Point(9, 9); + this.numericBoxA.Margin = new System.Windows.Forms.Padding(0); + this.numericBoxA.Maximum = 100D; + this.numericBoxA.MaximumSize = new System.Drawing.Size(1000, 25); + this.numericBoxA.Minimum = 1D; + this.numericBoxA.MinimumSize = new System.Drawing.Size(1, 25); + this.numericBoxA.Name = "numericBoxA"; + this.numericBoxA.RadianValue = 0.017453292519943295D; + this.numericBoxA.RoundErrorAccuracy = -1; + this.numericBoxA.ShowUpDown = true; + this.numericBoxA.Size = new System.Drawing.Size(77, 25); + this.numericBoxA.TabIndex = 0; + this.numericBoxA.Value = 1D; + // + // numericBoxB + // + this.numericBoxB.BackColor = System.Drawing.Color.Transparent; + this.numericBoxB.Font = new System.Drawing.Font("Segoe UI Symbol", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); + this.numericBoxB.HeaderText = "b × "; + this.numericBoxB.Location = new System.Drawing.Point(96, 9); + this.numericBoxB.Margin = new System.Windows.Forms.Padding(0); + this.numericBoxB.Maximum = 100D; + this.numericBoxB.MaximumSize = new System.Drawing.Size(1000, 25); + this.numericBoxB.Minimum = 1D; + this.numericBoxB.MinimumSize = new System.Drawing.Size(1, 25); + this.numericBoxB.Name = "numericBoxB"; + this.numericBoxB.RadianValue = 0.017453292519943295D; + this.numericBoxB.RoundErrorAccuracy = -1; + this.numericBoxB.ShowUpDown = true; + this.numericBoxB.Size = new System.Drawing.Size(77, 25); + this.numericBoxB.TabIndex = 0; + this.numericBoxB.Value = 1D; + // + // numericBoxC + // + this.numericBoxC.BackColor = System.Drawing.Color.Transparent; + this.numericBoxC.Font = new System.Drawing.Font("Segoe UI Symbol", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point); + this.numericBoxC.HeaderText = "c × "; + this.numericBoxC.Location = new System.Drawing.Point(187, 9); + this.numericBoxC.Margin = new System.Windows.Forms.Padding(0); + this.numericBoxC.Maximum = 100D; + this.numericBoxC.MaximumSize = new System.Drawing.Size(1000, 25); + this.numericBoxC.Minimum = 1D; + this.numericBoxC.MinimumSize = new System.Drawing.Size(1, 25); + this.numericBoxC.Name = "numericBoxC"; + this.numericBoxC.RadianValue = 0.017453292519943295D; + this.numericBoxC.RoundErrorAccuracy = -1; + this.numericBoxC.ShowUpDown = true; + this.numericBoxC.Size = new System.Drawing.Size(77, 25); + this.numericBoxC.TabIndex = 0; + this.numericBoxC.Value = 1D; + // + // buttonOK + // + this.buttonOK.AutoSize = true; + this.buttonOK.Location = new System.Drawing.Point(138, 40); + this.buttonOK.Name = "buttonOK"; + this.buttonOK.Size = new System.Drawing.Size(60, 25); + this.buttonOK.TabIndex = 1; + this.buttonOK.Text = "OK"; + this.buttonOK.UseVisualStyleBackColor = true; + this.buttonOK.Click += new System.EventHandler(this.buttonOK_Click); + // + // buttonCancel + // + this.buttonCancel.AutoSize = true; + this.buttonCancel.Location = new System.Drawing.Point(204, 40); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.Size = new System.Drawing.Size(60, 25); + this.buttonCancel.TabIndex = 1; + this.buttonCancel.Text = "Cancel"; + this.buttonCancel.UseVisualStyleBackColor = true; + this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); + // + // FormSuperStructure + // + this.AcceptButton = this.buttonOK; + this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; + this.AutoSize = true; + this.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink; + this.CancelButton = this.buttonCancel; + this.ClientSize = new System.Drawing.Size(270, 71); + this.ControlBox = false; + this.Controls.Add(this.buttonCancel); + this.Controls.Add(this.buttonOK); + this.Controls.Add(this.numericBoxC); + this.Controls.Add(this.numericBoxB); + this.Controls.Add(this.numericBoxA); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + this.Name = "FormSuperStructure"; + this.ShowIcon = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "Set superstructure size"; + this.TopMost = true; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private NumericBox numericBoxA; + private NumericBox numericBoxB; + private NumericBox numericBoxC; + private System.Windows.Forms.Button buttonOK; + private System.Windows.Forms.Button buttonCancel; +} \ No newline at end of file diff --git a/Crystallography.Controls/Crystal/FormSuperStructure.cs b/Crystallography.Controls/Crystal/FormSuperStructure.cs new file mode 100644 index 0000000..ab527e2 --- /dev/null +++ b/Crystallography.Controls/Crystal/FormSuperStructure.cs @@ -0,0 +1,27 @@ +using System; +using System.Windows.Forms; + +namespace Crystallography.Controls; +public partial class FormSuperStructure : Form +{ + public int A => numericBoxA.ValueInteger; + public int B => numericBoxB.ValueInteger; + public int C => numericBoxC.ValueInteger; + + public FormSuperStructure() + { + InitializeComponent(); + } + + private void buttonOK_Click(object sender, EventArgs e) + { + DialogResult = DialogResult.OK; + Close(); + } + + private void buttonCancel_Click(object sender, EventArgs e) + { + DialogResult = DialogResult.Cancel; + Close(); + } +} diff --git a/Crystallography.Controls/Crystal/FormSuperStructure.resx b/Crystallography.Controls/Crystal/FormSuperStructure.resx new file mode 100644 index 0000000..f298a7b --- /dev/null +++ b/Crystallography.Controls/Crystal/FormSuperStructure.resx @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Crystallography.Controls/Crystal/SymmetryControl.cs b/Crystallography.Controls/Crystal/SymmetryControl.cs index 069f01e..d225ad7 100644 --- a/Crystallography.Controls/Crystal/SymmetryControl.cs +++ b/Crystallography.Controls/Crystal/SymmetryControl.cs @@ -342,80 +342,78 @@ public void SetCellConstantsBySymmetry() #endregion #region 群の記号を斜体、上付き、下付などに整形する + + //下付き文字用フォント + readonly Font fontSub = new("Times New Roman", 8f, FontStyle.Regular); + //斜体 + readonly Font fontItalic = new("Times New Roman", 11f, FontStyle.Italic); + //普通 + readonly Font fontRegular = new("Times New Roman", 11f, FontStyle.Regular); + //太字 + readonly Font fontBold = new("Times New Roman", 10f, FontStyle.Bold); + private void comboBoxSpaceGroup_DrawItem(object sender, DrawItemEventArgs e) { if (e.Index < 0) return; e.DrawBackground(); string txt = ((ComboBox)sender).Items[e.Index].ToString(); - //下付き文字用フォント - var sub = new Font("Times New Roman", 8f, FontStyle.Regular); - //斜体 - var italic = new Font("Times New Roman", 11f, FontStyle.Italic); - //普通 - var regular = new Font("Times New Roman", 11f, FontStyle.Regular); - - var bold = new Font("Times New Roman", 10f, FontStyle.Bold); - float xPos = e.Bounds.Left; - Brush b = null; - + Brush b; if ((e.State & DrawItemState.Selected) != DrawItemState.Selected) b = new SolidBrush(Color.Black); else b = new SolidBrush(Color.White); e.Graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; - //「:」が含まれている場合は、空間群番号を表すので、先に「:」までを処理する。 - if (txt.Contains(":")) + if (txt.Contains(':')) { var i = txt.find(":") + 1; - e.Graphics.DrawString(txt[0..i].ToString(), regular, b, xPos, e.Bounds.Y); - xPos += e.Graphics.MeasureString(txt[0..i].ToString(), regular).Width - 2; + e.Graphics.DrawString(txt[0..i].ToString(), fontRegular, b, xPos, e.Bounds.Y); + xPos += e.Graphics.MeasureString(txt[0..i].ToString(), fontRegular).Width - 2; txt = txt[i..]; } - while (txt.Length > 0) { - if (txt.StartsWith(" ")) + if (txt.StartsWith(" ", StringComparison.Ordinal)) xPos += 0; - else if (txt.StartsWith("sub"))//subで始まる時は + else if (txt.StartsWith("sub", StringComparison.Ordinal))//subで始まる時は { xPos -= 1; txt = txt[3..]; - e.Graphics.DrawString(txt[0].ToString(), sub, b, xPos, e.Bounds.Y + 3); - xPos += e.Graphics.MeasureString(txt[0].ToString(), sub).Width - 2; + e.Graphics.DrawString(txt[0].ToString(), fontSub, b, xPos, e.Bounds.Y + 3); + xPos += e.Graphics.MeasureString(txt[0].ToString(), fontSub).Width - 2; } - else if (txt.StartsWith("-"))//-で始まる時は + else if (txt.StartsWith("-", StringComparison.Ordinal))//-で始まる時は { - float x = e.Graphics.MeasureString(txt[1].ToString(), regular).Width; + float x = e.Graphics.MeasureString(txt[1].ToString(), fontRegular).Width; e.Graphics.DrawLine(new Pen(b, 1), new PointF(xPos + 2f, e.Bounds.Y + 1), new PointF(x + xPos - 3f, e.Bounds.Y + 1)); } - else if (txt.StartsWith("Hex") || txt.StartsWith("Rho") || txt.StartsWith("(1)") || txt.StartsWith("(2)")) + else if (txt.StartsWith("Hex", StringComparison.Ordinal) || txt.StartsWith("Rho", StringComparison.Ordinal) || txt.StartsWith("(1)", StringComparison.Ordinal) || txt.StartsWith("(2)", StringComparison.Ordinal)) { xPos += 2; - e.Graphics.DrawString(txt[..3], sub, b, xPos, e.Bounds.Y + 3); - xPos += e.Graphics.MeasureString(txt[..3], sub).Width - 2; + e.Graphics.DrawString(txt[..3], fontSub, b, xPos, e.Bounds.Y + 3); + xPos += e.Graphics.MeasureString(txt[..3], fontSub).Width - 2; txt = txt[2..]; } else if (txt[0] == '/') { xPos -= 1; - e.Graphics.DrawString(txt[0].ToString(), regular, b, xPos, e.Bounds.Y); - xPos += e.Graphics.MeasureString(txt[0].ToString(), regular).Width - 5; + e.Graphics.DrawString(txt[0].ToString(), fontRegular, b, xPos, e.Bounds.Y); + xPos += e.Graphics.MeasureString(txt[0].ToString(), fontRegular).Width - 5; } else if (('0' <= txt[0] && '9' >= txt[0]) || txt[0] == '(' || txt[0] == ')') { - e.Graphics.DrawString(txt[0].ToString(), regular, b, xPos, e.Bounds.Y); - xPos += e.Graphics.MeasureString(txt[0].ToString(), regular).Width - 2; + e.Graphics.DrawString(txt[0].ToString(), fontRegular, b, xPos, e.Bounds.Y); + xPos += e.Graphics.MeasureString(txt[0].ToString(), fontRegular).Width - 2; } else { - e.Graphics.DrawString(txt[0].ToString(), italic, b, xPos, e.Bounds.Y); - xPos += e.Graphics.MeasureString(txt[0].ToString(), italic).Width - 2; + e.Graphics.DrawString(txt[0].ToString(), fontItalic, b, xPos, e.Bounds.Y); + xPos += e.Graphics.MeasureString(txt[0].ToString(), fontItalic).Width - 2; } txt = txt[1..]; } diff --git a/Crystallography.Controls/Crystallography.Controls.csproj b/Crystallography.Controls/Crystallography.Controls.csproj index 5ae4271..8f2f850 100644 --- a/Crystallography.Controls/Crystallography.Controls.csproj +++ b/Crystallography.Controls/Crystallography.Controls.csproj @@ -4,8 +4,8 @@ Library net6.0-windows true - 2022.9.9.1118 - 2022.9.9.1118 + 2022.10.25.0616 + 2022.10.25.0616 diff --git a/Crystallography.Controls/Numeric/NumericBox.cs b/Crystallography.Controls/Numeric/NumericBox.cs index 431a69f..fc6b6c4 100644 --- a/Crystallography.Controls/Numeric/NumericBox.cs +++ b/Crystallography.Controls/Numeric/NumericBox.cs @@ -5,485 +5,440 @@ using System.Linq; using System.Windows.Forms; -namespace Crystallography.Controls +namespace Crystallography.Controls; + +[TypeConverter(typeof(DefinitionOrderTypeConverter))] +[DefaultEvent("ValueChanged")] +public partial class NumericBox : UserControl { - [TypeConverter(typeof(DefinitionOrderTypeConverter))] - [DefaultEvent("ValueChanged")] - public partial class NumericBox : UserControl - { - #region Cxg + #region Cxg - public delegate void MyEventHandler(object sender, EventArgs e); + public delegate void MyEventHandler(object sender, EventArgs e); - public event MyEventHandler ValueChanged; + public event MyEventHandler ValueChanged; - public event MyEventHandler ReadOnlyChanged; + public event MyEventHandler ReadOnlyChanged; - public event MyEventHandler Click2; + public event MyEventHandler Click2; - #endregion Cxg + #endregion Cxg - #region vpeB + #region vpeB - /// - /// VisualStudiofUCi[̕ҏW̎True - /// - public new bool DesignMode + /// + /// VisualStudiofUCi[̕ҏW̎True + /// + public new bool DesignMode + { + get { - get + if (LicenseManager.UsageMode == LicenseUsageMode.Designtime) + return true; + System.Windows.Forms.Control ctrl = this; + while (ctrl != null) { - if (LicenseManager.UsageMode == LicenseUsageMode.Designtime) + if (ctrl.Site != null && ctrl.Site.DesignMode) return true; - System.Windows.Forms.Control ctrl = this; - while (ctrl != null) - { - if (ctrl.Site != null && ctrl.Site.DesignMode) - return true; - ctrl = ctrl.Parent; - } - return false; + ctrl = ctrl.Parent; } + return false; } + } - /// - /// ۂߌ덷ĂƂ(Ⴆ7.11̂͂Ȃ̂ 7.110000000000001ƂA6.011̂͂Ȃ̂6.010999999999999Ƃ) - /// ̌덷ĕ\ - /// - public int RoundErrorAccuracy { get; set; } = -1; - - /// - /// UpDown{^Lɂ邩ǂ - /// - [DefaultValue(false)] - [Category("Appearance properties")] - public bool ShowUpDown + /// + /// ۂߌ덷ĂƂ(Ⴆ7.11̂͂Ȃ̂ 7.110000000000001ƂA6.011̂͂Ȃ̂6.010999999999999Ƃ) + /// ̌덷ĕ\ + /// + public int RoundErrorAccuracy { get; set; } = -1; + + /// + /// UpDown{^Lɂ邩ǂ + /// + [DefaultValue(false)] + [Category("Appearance properties")] + public bool ShowUpDown + { + get => showUpDown; + set { - get => showUpDown; - set - { - showUpDown = value; - numericUpDown.Visible = false; - numericUpDown.Visible = showUpDown; - Refresh(); - } + showUpDown = value; + numericUpDown.Visible = false; + numericUpDown.Visible = showUpDown; + Refresh(); } - private bool showUpDown = false; - - /// - /// UpDown{^LȏꍇAIncrement擾/ݒ - /// - [DefaultValue(1.0)] - [Category("Value properties")] - public double UpDown_Increment { set; get; } = 1.0; - - - /// - /// UpDown{^LȏꍇAIncrementŒ邩ǂ - /// - [DefaultValue(false)] - [Category("Value properties")] - public bool SmartIncrement { set; get; } = false; - - /// - /// ől - /// - [DefaultValue(double.PositiveInfinity)] - [Category("Value properties")] - public double Maximum + } + private bool showUpDown = false; + + /// + /// UpDown{^LȏꍇAIncrement擾/ݒ + /// + [DefaultValue(1.0)] + [Category("Value properties")] + public double UpDown_Increment { set; get; } = 1.0; + + + /// + /// UpDown{^LȏꍇAIncrementŒ邩ǂ + /// + [DefaultValue(false)] + [Category("Value properties")] + public bool SmartIncrement { set; get; } = false; + + /// + /// ől + /// + [DefaultValue(double.PositiveInfinity)] + [Category("Value properties")] + public double Maximum + { + set { - set + if (value > minimum) { - if (value > minimum) - { - maximum = value; + maximum = value; - if (RestrictLimitValue && Value > maximum) - Value = maximum; - } + if (RestrictLimitValue && Value > maximum) + Value = maximum; } - get => maximum; } - private double maximum = double.PositiveInfinity; - - /// - /// ŏl - /// - [DefaultValue(double.NegativeInfinity)] - [Category("Value properties")] - public double Minimum + get => maximum; + } + private double maximum = double.PositiveInfinity; + + /// + /// ŏl + /// + [DefaultValue(double.NegativeInfinity)] + [Category("Value properties")] + public double Minimum + { + set { - set + if (value < maximum) { - if (value < maximum) - { - minimum = value; + minimum = value; - if (RestrictLimitValue && Value < Minimum) - Value = Minimum; - } + if (RestrictLimitValue && Value < Minimum) + Value = Minimum; } - get => minimum; } - private double minimum = double.NegativeInfinity; + get => minimum; + } + private double minimum = double.NegativeInfinity; - /// - /// Maximum, Minimum͈̔͂ɓ͒l𐧌B͈͊Ȍꍇ́AIɂǂ炩̏ꍇɕύX - /// - [DefaultValue(true)] - [Category("Value properties")] - public bool RestrictLimitValue { set; get; } = true; + /// + /// Maximum, Minimum͈̔͂ɓ͒l𐧌B͈͊Ȍꍇ́AIɂǂ炩̏ꍇɕύX + /// + [DefaultValue(true)] + [Category("Value properties")] + public bool RestrictLimitValue { set; get; } = true; - [DefaultValue("")] - [Localizable(true)] - public string ToolTip + [DefaultValue("")] + [Localizable(true)] + public string ToolTip + { + get => toolTip.GetToolTip(textBox); + set { - get => toolTip.GetToolTip(textBox); - set - { - toolTip.SetToolTip(textBox, value); - toolTip.SetToolTip(labelFooter, value); - toolTip.SetToolTip(labelHeader, value); - toolTip.SetToolTip(this, value); + toolTip.SetToolTip(textBox, value); + toolTip.SetToolTip(labelFooter, value); + toolTip.SetToolTip(labelHeader, value); + toolTip.SetToolTip(this, value); - } } + } + + [Category("Value properties")] + public double MinimalStep => DecimalPlaces >= 0 ? Math.Pow(10, -DecimalPlaces) : 1; + + #region wb_[tb^[ ̕AtHgAF + /// + /// l̑Oɕ\eLXg + /// + [DefaultValue("")] + [Localizable(true)] + [Category("Font && Color")] + public string HeaderText { set => labelHeader.Text = value; get => labelHeader.Text; } + + [Category("Font && Color")] + [DefaultValue(typeof(Padding), "0,0,0,0")] + + public Padding HeaderMargin { set => labelHeader.Margin = value; get => labelHeader.Margin; } + + + [Localizable(true)] + [DefaultValue(typeof(Font), "Segoe UI Symbol, 9.75pt")] + [Category("Font && Color")] + + public Font HeaderFont { set => labelHeader.Font = value; get => labelHeader.Font; } + + [DefaultValue(typeof(Color), "ControlText")] + [Category("Font && Color")] + public Color HeaderForeColor { set => labelHeader.ForeColor = value; get => labelHeader.ForeColor; } + + [DefaultValue(typeof(Color), "Transparent")] + [Category("Font && Color")] + public Color HeaderBackColor { set => labelHeader.BackColor = value; get => labelHeader.BackColor; } + + /// + /// ľɕ\eLXg + /// + [DefaultValue("")] + [Category("Font && Color")] + [Localizable(true)] + public string FooterText { set => labelFooter.Text = value; get => labelFooter.Text; } + + [Category("Font && Color")] + [DefaultValue(typeof(Padding), "0,0,0,0")] + [Localizable(true)] + public Padding FooterMargin { set => labelFooter.Margin = value; get => labelFooter.Margin; } + + [Category("Font && Color")] + [DefaultValue(typeof(Font), "Segoe UI Symbol, 9.75pt")] + [Localizable(true)] + public Font FooterFont { set => labelFooter.Font = value; get => labelFooter.Font; } + + [DefaultValue(typeof(Color), "ControlText")] + [Category("Font && Color")] + public Color FooterForeColor { set => labelFooter.ForeColor = value; get => labelFooter.ForeColor; } + + [DefaultValue(typeof(Color), "Transparent")] + [Category("Font && Color")] + public Color FooterBackColor { set => labelFooter.BackColor = value; get => labelFooter.BackColor; } + #endregion - [Category("Value properties")] - public double MinimalStep => DecimalPlaces >= 0 ? Math.Pow(10, -DecimalPlaces) : 1; - - #region wb_[tb^[ ̕AtHgAF - /// - /// l̑Oɕ\eLXg - /// - [DefaultValue("")] - [Localizable(true)] - [Category("Font && Color")] - public string HeaderText { set => labelHeader.Text = value; get => labelHeader.Text; } - - [Category("Font && Color")] - [DefaultValue(typeof(Padding), "0,0,0,0")] - - public Padding HeaderMargin { set => labelHeader.Margin = value; get => labelHeader.Margin; } - - - [Localizable(true)] - [DefaultValue(typeof(Font), "Segoe UI Symbol, 9.75pt")] - [Category("Font && Color")] - - public Font HeaderFont { set => labelHeader.Font = value; get => labelHeader.Font; } - - [DefaultValue(typeof(Color), "ControlText")] - [Category("Font && Color")] - public Color HeaderForeColor { set => labelHeader.ForeColor = value; get => labelHeader.ForeColor; } - - [DefaultValue(typeof(Color), "Transparent")] - [Category("Font && Color")] - public Color HeaderBackColor { set => labelHeader.BackColor = value; get => labelHeader.BackColor; } - - /// - /// ľɕ\eLXg - /// - [DefaultValue("")] - [Category("Font && Color")] - [Localizable(true)] - public string FooterText { set => labelFooter.Text = value; get => labelFooter.Text; } - - [Category("Font && Color")] - [DefaultValue(typeof(Padding), "0,0,0,0")] - [Localizable(true)] - public Padding FooterMargin { set => labelFooter.Margin = value; get => labelFooter.Margin; } - - [Category("Font && Color")] - [DefaultValue(typeof(Font), "Segoe UI Symbol, 9.75pt")] - [Localizable(true)] - public Font FooterFont { set => labelFooter.Font = value; get => labelFooter.Font; } - - [DefaultValue(typeof(Color), "ControlText")] - [Category("Font && Color")] - public Color FooterForeColor { set => labelFooter.ForeColor = value; get => labelFooter.ForeColor; } - - [DefaultValue(typeof(Color), "Transparent")] - [Category("Font && Color")] - public Color FooterBackColor { set => labelFooter.BackColor = value; get => labelFooter.BackColor; } - #endregion - - [DefaultValue(typeof(Color), "WindowText")] - [Category("Font && Color")] - public Color TextBoxForeColor { set => textBox.ForeColor = value; get => textBox.ForeColor; } - - [DefaultValue(typeof(Color), "Window")] - [Category("Font && Color")] - public Color TextBoxBackColor { set => textBox.BackColor = value; get => textBox.BackColor; } - - [DefaultValue(typeof(Font), "Segoe UI Symbol, 9.75pt")] - [Category("Font && Color")] - /// - /// font - /// - public Font TextFont + [DefaultValue(typeof(Color), "WindowText")] + [Category("Font && Color")] + public Color TextBoxForeColor { set => textBox.ForeColor = value; get => textBox.ForeColor; } + + [DefaultValue(typeof(Color), "Window")] + [Category("Font && Color")] + public Color TextBoxBackColor { set => textBox.BackColor = value; get => textBox.BackColor; } + + [DefaultValue(typeof(Font), "Segoe UI Symbol, 9.75pt")] + [Category("Font && Color")] + /// + /// font + /// + public Font TextFont + { + set { - set + textBox.Font = value; + numericUpDown.Font = value; + if (Multiline) { - textBox.Font = value; - numericUpDown.Font = value; - if (Multiline) - { - MinimumSize = new Size(0, 0); - MaximumSize = new Size(0, 0); - } - else - { - this.Height = textBox.Height; - MinimumSize = new Size(1, textBox.Height+2); - MaximumSize = new Size(1000, textBox.Height+2); - } + MinimumSize = new Size(0, 0); + MaximumSize = new Size(0, 0); + } + else + { + this.Height = textBox.Height; + MinimumSize = new Size(1, textBox.Height+2); + MaximumSize = new Size(1000, textBox.Height+2); } - get { return textBox.Font; } } + get { return textBox.Font; } + } - /// - /// {\邩ǂ - /// - [DefaultValue(false)] - [Category("Appearance properties")] - public bool ShowPositiveSign { set; get; } = false; + /// + /// {\邩ǂ + /// + [DefaultValue(false)] + [Category("Appearance properties")] + public bool ShowPositiveSign { set; get; } = false; - + - /// - /// Rg[ێĂl - /// - [DefaultValue(0.0)] - [Category("Value properties")] - public double Value + /// + /// Rg[ێĂl + /// + [DefaultValue(0.0)] + [Category("Value properties")] + public double Value + { + set { - set + if (InvokeRequired) + Invoke(new Action(() => Value = value), null); + else if (this.numericalValue != value) { - if (InvokeRequired) - Invoke(new Action(() => Value = value), null); - else if (this.numericalValue != value) + if (RoundErrorAccuracy > 0) { - if (RoundErrorAccuracy > 0) - { - value = value.Round(RoundErrorAccuracy); - } - - if (RestrictLimitValue) - { - if (Maximum < value) - value = Maximum; - if (Minimum > value) - value = Minimum; - } - this.numericalValue = value; - skipTextChangeEvent = true; - textBox.Text = GetString(); - skipTextChangeEvent = false; - ValueChanged?.Invoke(this, new EventArgs()); + value = value.Round(RoundErrorAccuracy); } + + if (RestrictLimitValue) + { + if (Maximum < value) + value = Maximum; + if (Minimum > value) + value = Minimum; + } + this.numericalValue = value; + skipTextChangeEvent = true; + textBox.Text = GetString(); + skipTextChangeEvent = false; + ValueChanged?.Invoke(this, new EventArgs()); } - get => numericalValue; } - private double numericalValue = 0; - - /// - /// Rg[ێĂl̐l (get̂) - /// - [Category("Value properties")] - [DefaultValue(0)] - public int ValueInteger { get => (int)numericalValue; } - - /// - /// RadianƂĒl/擾 - /// - [DefaultValue(0.0)] - [Category("Value properties")] - public double RadianValue { set => Value = value * 180.0 / Math.PI; get => Value / 180.0 * Math.PI; } - - /// - /// 3؂ŃJ}\ - /// - [DefaultValue(false)] - [Category("Appearance properties")] - public bool ThonsandsSeparator { set { thonsandsSeparator = value; textBox.Text = GetString(); } get => thonsandsSeparator; } - private bool thonsandsSeparator = false; - - /// - /// _ȉ̌ - /// - [DefaultValue(-1)] - [Category("Appearance properties")] - public int DecimalPlaces + get => numericalValue; + } + private double numericalValue = 0; + + /// + /// Rg[ێĂl̐l (get̂) + /// + [Category("Value properties")] + [DefaultValue(0)] + public int ValueInteger { get => (int)numericalValue; } + + /// + /// RadianƂĒl/擾 + /// + [DefaultValue(0.0)] + [Category("Value properties")] + public double RadianValue { set => Value = value * 180.0 / Math.PI; get => Value / 180.0 * Math.PI; } + + /// + /// 3؂ŃJ}\ + /// + [DefaultValue(false)] + [Category("Appearance properties")] + public bool ThonsandsSeparator { set { thonsandsSeparator = value; textBox.Text = GetString(); } get => thonsandsSeparator; } + private bool thonsandsSeparator = false; + + /// + /// _ȉ̌ + /// + [DefaultValue(-1)] + [Category("Appearance properties")] + public int DecimalPlaces + { + set { - set + if (value >= -1 && value < 11) { - if (value >= -1 && value < 11) - { - decimalPlaces = value; - textBox.Text = GetString(); - } + decimalPlaces = value; + textBox.Text = GetString(); } - get => decimalPlaces; } - private int decimalPlaces = -1; - - /// - /// _ȉ̃[̋L폜邩ǂ - /// - [DefaultValue(false)] - [Category("Appearance properties")] - public bool TrimEndZero { get; set; } = false; - - /// - /// ǂݎpǂ - /// - [DefaultValue(false)] - [Category("Appearance properties")] - public bool ReadOnly { set => textBox.ReadOnly = value; get => textBox.ReadOnly; } - - /// - /// s\邩ǂ - /// - [DefaultValue(false)] - [Category("Appearance properties")] - public bool Multiline + get => decimalPlaces; + } + private int decimalPlaces = -1; + + /// + /// _ȉ̃[̋L폜邩ǂ + /// + [DefaultValue(false)] + [Category("Appearance properties")] + public bool TrimEndZero { get; set; } = false; + + /// + /// ǂݎpǂ + /// + [DefaultValue(false)] + [Category("Appearance properties")] + public bool ReadOnly { set => textBox.ReadOnly = value; get => textBox.ReadOnly; } + + /// + /// s\邩ǂ + /// + [DefaultValue(false)] + [Category("Appearance properties")] + public bool Multiline + { + set { - set + textBox.Multiline = value; + if (value) { - textBox.Multiline = value; - if (value) - { - //textBox.Dock = DockStyle.Fill; - MinimumSize = new Size(0, 0); - MaximumSize = new Size(0, 0); - } - else - { - //textBox.Dock = DockStyle.None; - this.Height = textBox.Height; - MinimumSize = new Size(1, textBox.Height); - MaximumSize = new Size(1000, textBox.Height); - } + //textBox.Dock = DockStyle.Fill; + MinimumSize = new Size(0, 0); + MaximumSize = new Size(0, 0); } - get => textBox.Multiline; - } - - /// - /// lɏoꍇA\邩 - /// - [Category("Appearance properties")] - [DefaultValue(false)] - public bool ShowFraction { set; get; } = false; - - - /// - /// lOp֐ɏoꍇAOp֐ŕ\邩 - /// - [DefaultValue(false)] - [Category("Appearance properties")] - public bool ShowTrigonomeric { set; get; } = false; - - [DefaultValue("0")] - public new string Text { - set + else { - textBox.Text = value; - textBox_Leave(new object(), new EventArgs()); - if (RoundErrorAccuracy > 0) - { - var val = Value; - Value = val; - } - + //textBox.Dock = DockStyle.None; + this.Height = textBox.Height; + MinimumSize = new Size(1, textBox.Height); + MaximumSize = new Size(1000, textBox.Height); } - get => numericalValue.ToString(); } + get => textBox.Multiline; + } - [Category("Appearance properties")] - [DefaultValue(true)] - public bool WordWrap { set => textBox.WordWrap = value; get => textBox.WordWrap; } + /// + /// lɏoꍇA\邩 + /// + [Category("Appearance properties")] + [DefaultValue(false)] + public bool ShowFraction { set; get; } = false; - [DefaultValue(true)] - public bool SkipEventDuringInput { set; get; } = true; + + /// + /// lOp֐ɏoꍇAOp֐ŕ\邩 + /// + [DefaultValue(false)] + [Category("Appearance properties")] + public bool ShowTrigonomeric { set; get; } = false; + + [DefaultValue("0")] + public new string Text { + set + { + textBox.Text = value; + textBox_Leave(new object(), new EventArgs()); + if (RoundErrorAccuracy > 0) + { + var val = Value; + Value = val; + } - #endregion vpeB + } + get => numericalValue.ToString(); + } - private void textBox_ReadOnlyChanged(object sender, EventArgs e) => ReadOnlyChanged?.Invoke(sender, e); + [Category("Appearance properties")] + [DefaultValue(true)] + public bool WordWrap { set => textBox.WordWrap = value; get => textBox.WordWrap; } - private void textBox_Click(object sender, EventArgs e) => Click2?.Invoke(sender, e); + [DefaultValue(true)] + public bool SkipEventDuringInput { set; get; } = true; - public NumericBox() - { - InitializeComponent(); - if (DesignMode) return; - } + #endregion vpeB - private void textBox_KeyPress(object sender, KeyPressEventArgs e) - { - if ((e.KeyChar == 13 && ModifierKeys == Keys.Shift) || (e.KeyChar == 10 && ModifierKeys == Keys.Control)) - e.Handled = true; - } - + private void textBox_ReadOnlyChanged(object sender, EventArgs e) => ReadOnlyChanged?.Invoke(sender, e); - private bool skipTextChangeEvent = false;//eLXg`FWCxĝLZ@ - private void textBox_TextChanged(object sender, EventArgs e) - { - if (DesignMode) - return; + private void textBox_Click(object sender, EventArgs e) => Click2?.Invoke(sender, e); - if (skipTextChangeEvent || SkipEventDuringInput) - return; - try - { - int count = 0, selectionLine = 0; - for (int i = 0; i < textBox.Lines.Length; i++) - { - count += textBox.Lines[i].Length + 2; - if (count > textBox.SelectionStart) - { - selectionLine = i; - break; - } - } - var formula = new string[selectionLine + 1]; - Array.Copy(textBox.Lines, formula, selectionLine + 1); - var d = NumericalFormula.GetNumetricValue(formula); - if (!double.IsNaN(d) && d != this.numericalValue) - { - if (RestrictLimitValue) - { - if (d > Maximum) { d = Maximum; this.numericalValue = Maximum; textBox.Text = GetString(); } - if (d < minimum) { d = minimum; this.numericalValue = Minimum; textBox.Text = GetString(); } - } - - this.numericalValue = d; - ValueChanged?.Invoke(this, e); - } - } - catch { } - } + public NumericBox() + { + InitializeComponent(); + if (DesignMode) return; + } - private void textBox_KeyDown(object sender, KeyEventArgs e) - { - if ((e.Control || e.Shift) && e.KeyCode == Keys.Return) - Calculate(sender, e); - else if (e.KeyCode == Keys.Return && SkipEventDuringInput) - { - SkipEventDuringInput = false; - textBox_TextChanged(sender, e); - SkipEventDuringInput = true; - } - } + private void textBox_KeyPress(object sender, KeyPressEventArgs e) + { + if ((e.KeyChar == 13 && ModifierKeys == Keys.Shift) || (e.KeyChar == 10 && ModifierKeys == Keys.Control)) + e.Handled = true; + } + + + private bool skipTextChangeEvent = false;//eLXg`FWCxĝLZ@ + private void textBox_TextChanged(object sender, EventArgs e) + { + if (DesignMode) + return; - public void Calculate(object sender, EventArgs e) + if (skipTextChangeEvent || SkipEventDuringInput) + return; + try { - double d = 0; - //݂̃J[\ʒũeLXgvZ - int count = 0; - int selectionLine = 0; + int count = 0, selectionLine = 0; for (int i = 0; i < textBox.Lines.Length; i++) { count += textBox.Lines[i].Length + 2; @@ -493,202 +448,246 @@ public void Calculate(object sender, EventArgs e) break; } } - string[] formula = new string[selectionLine + 1]; + var formula = new string[selectionLine + 1]; Array.Copy(textBox.Lines, formula, selectionLine + 1); - d = NumericalFormula.GetNumetricValue(formula); - if (!double.IsNaN(d)) + var d = NumericalFormula.GetNumetricValue(formula); + if (!double.IsNaN(d) && d != this.numericalValue) { - skipTextChangeEvent = true; - this.numericalValue = d; - if (textBox.Multiline) - { - if (textBox.Text.IndexOf("\r\n", textBox.SelectionStart,StringComparison.Ordinal) >= 0) - textBox.Text = textBox.Text.Remove(textBox.Text.IndexOf("\r\n", textBox.SelectionStart, StringComparison.Ordinal)); - - textBox.Text += "\r\n" + GetString(); - } - else + if (RestrictLimitValue) { - textBox.Text = GetString(); + if (d > Maximum) { d = Maximum; this.numericalValue = Maximum; textBox.Text = GetString(); } + if (d < minimum) { d = minimum; this.numericalValue = Minimum; textBox.Text = GetString(); } } this.numericalValue = d; ValueChanged?.Invoke(this, e); - - skipTextChangeEvent = false; - textBox.SelectionStart = textBox.Text.Length; } } + catch { } + } - - - /// - /// ݂numericalValueeLXg{bNX̕ݒ肷 - /// - /// - internal string GetString() + private void textBox_KeyDown(object sender, KeyEventArgs e) + { + if ((e.Control || e.Shift) && e.KeyCode == Keys.Return) + Calculate(sender, e); + else if (e.KeyCode == Keys.Return && SkipEventDuringInput) { - var threshold = DecimalPlaces >= 0 ? Math.Pow(10,-decimalPlaces) : 0.0000000001; - - if (InvokeRequired) - return (string)Invoke(new Func(GetString), null); - - string text = ""; - if (double.IsNaN(numericalValue)) - return double.NaN.ToString(); + SkipEventDuringInput = false; + textBox_TextChanged(sender, e); + SkipEventDuringInput = true; + } + } - if (numericalValue!=0 && ShowFraction) //ŕ\Ƃ + public void Calculate(object sender, EventArgs e) + { + double d = 0; + //݂̃J[\ʒũeLXgvZ + int count = 0; + int selectionLine = 0; + for (int i = 0; i < textBox.Lines.Length; i++) + { + count += textBox.Lines[i].Length + 2; + if (count > textBox.SelectionStart) { - int j = (int)Math.Ceiling(numericalValue - 1); - foreach (var denom in new[] { 2, 3, 4, 5, 6, 8, 9, 10, 11, 12 }) - for (int i = 1; i < denom && text ==""; i++) - if ((i == 1 || denom % i != 0) && Math.Abs(numericalValue - j - i / (double)denom) < threshold) - text = $"{i + (denom * j)}/{denom}"; + selectionLine = i; + break; } - if(numericalValue > -1 && numericalValue < 1 && ShowTrigonomeric && !text.Contains('/'))//Op֐ŕ\ (ɕ\ĂƂ͏) + } + string[] formula = new string[selectionLine + 1]; + Array.Copy(textBox.Lines, formula, selectionLine + 1); + d = NumericalFormula.GetNumetricValue(formula); + if (!double.IsNaN(d)) + { + skipTextChangeEvent = true; + this.numericalValue = d; + if (textBox.Multiline) { - //sin֐ -89 <= x <= 89͈̔͂1 (xP) - foreach (var a in Enumerable.Range(-89, 179)) - if (a != 0 && Math.Abs(numericalValue - Math.Sin(a / 180.0 * Math.PI)) < threshold) - { - text = $"sin({a})"; - break; - } - } + if (textBox.Text.IndexOf("\r\n", textBox.SelectionStart,StringComparison.Ordinal) >= 0) + textBox.Text = textBox.Text.Remove(textBox.Text.IndexOf("\r\n", textBox.SelectionStart, StringComparison.Ordinal)); - if (text.Length == 0) + textBox.Text += "\r\n" + GetString(); + } + else { - text = numericalValue.ToString(DecimalPlaces >= 0 ? $"f{DecimalPlaces}" : ""); - if(TrimEndZero && text.Contains(".")) - text= text.TrimEnd(new[] { '0' }).TrimEnd(new[] { '.'}); - - text = separateThousands(text); + textBox.Text = GetString(); } - if (!text.StartsWith("-") && ShowPositiveSign && text != "0") - text = "+" + text; - return text; + this.numericalValue = d; + ValueChanged?.Invoke(this, e); + + skipTextChangeEvent = false; + textBox.SelectionStart = textBox.Text.Length; } + } - private static string separateThousands(string valueString) - { - char decimalPoint = '.'; - if (valueString.Contains(",")) - decimalPoint = ','; - var integer = valueString.Split(new[] { decimalPoint }); - for (int i = integer[0].Length - 3; i > 0; i -= 3) - { - if (integer[0][i - 1] != '-') - integer[0] = integer[0].Insert(i, ","); - } - valueString = integer[0]; - if (integer.Length == 2) - valueString += decimalPoint + integer[1]; - return valueString; + + /// + /// ݂numericalValueeLXg{bNX̕ݒ肷 + /// + /// + internal string GetString() + { + var threshold = DecimalPlaces >= 0 ? Math.Pow(10,-decimalPlaces) : 0.0000000001; + + if (InvokeRequired) + return (string)Invoke(new Func(GetString), null); + + string text = ""; + if (double.IsNaN(numericalValue)) + return double.NaN.ToString(); + + if (numericalValue!=0 && ShowFraction) //ŕ\Ƃ + { + int j = (int)Math.Ceiling(numericalValue - 1); + foreach (var denom in new[] { 2, 3, 4, 5, 6, 8, 9, 10, 11, 12 }) + for (int i = 1; i < denom && text ==""; i++) + if ((i == 1 || denom % i != 0) && Math.Abs(numericalValue - j - i / (double)denom) < threshold) + text = $"{i + (denom * j)}/{denom}"; + } + if(numericalValue > -1 && numericalValue < 1 && ShowTrigonomeric && !text.Contains('/'))//Op֐ŕ\ (ɕ\ĂƂ͏) + { + //sin֐ -89 <= x <= 89͈̔͂1 (xP) + foreach (var a in Enumerable.Range(-89, 179)) + if (a != 0 && Math.Abs(numericalValue - Math.Sin(a / 180.0 * Math.PI)) < threshold) + { + text = $"sin({a})"; + break; + } } - private void textBox_FontChanged(object sender, EventArgs e) + if (text.Length == 0) { - /* if (Multiline == false) - { - this.Height = textBox.Height+3; - this.Width = textBox.Width+1; - }*/ - TextFont = textBox.Font; + text = numericalValue.ToString(DecimalPlaces >= 0 ? $"f{DecimalPlaces}" : ""); + if(TrimEndZero && text.Contains(".")) + text= text.TrimEnd(new[] { '0' }).TrimEnd(new[] { '.'}); + + text = separateThousands(text); } + if (!text.StartsWith("-") && ShowPositiveSign && text != "0") + text = "+" + text; + + return text; + } - private void numericBox_SizeChanged(object sender, EventArgs e) + private static string separateThousands(string valueString) + { + char decimalPoint = '.'; + if (valueString.Contains(",")) + decimalPoint = ','; + + var integer = valueString.Split(new[] { decimalPoint }); + for (int i = integer[0].Length - 3; i > 0; i -= 3) { - if (Multiline == false) - { - this.Height = textBox.Height; - MinimumSize = new Size(1, textBox.Height); - MaximumSize = new Size(1000, textBox.Height); - } + if (integer[0][i - 1] != '-') + integer[0] = integer[0].Insert(i, ","); } + valueString = integer[0]; + if (integer.Length == 2) + valueString += decimalPoint + integer[1]; + return valueString; + } + + private void textBox_FontChanged(object sender, EventArgs e) + { + /* if (Multiline == false) + { + this.Height = textBox.Height+3; + this.Width = textBox.Width+1; + }*/ + TextFont = textBox.Font; + } - private void numericUpDown_ValueChanged(object sender, EventArgs e) + private void numericBox_SizeChanged(object sender, EventArgs e) + { + if (Multiline == false) { - numericUpDown.ValueChanged -= numericUpDown_ValueChanged; + this.Height = textBox.Height; + MinimumSize = new Size(1, textBox.Height); + MaximumSize = new Size(1000, textBox.Height); + } + } - if (SmartIncrement) - { - double value = Math.Abs(this.Value); + private void numericUpDown_ValueChanged(object sender, EventArgs e) + { + numericUpDown.ValueChanged -= numericUpDown_ValueChanged; - int n = 0; - int sign = this.Value > 0 ? 1 : -1; + if (SmartIncrement) + { + double value = Math.Abs(this.Value); - if (value != 0) - n = (int)(Math.Floor(Math.Log10(Math.Abs(value)))); - else if (DecimalPlaces >= 0) - n = -DecimalPlaces; - else - n = -1; + int n = 0; + int sign = this.Value > 0 ? 1 : -1; - double step = 0; - if ((numericUpDown.Value == 1 && sign == 1) || numericUpDown.Value == -1 && sign == -1) - { - if (value < Math.Pow(10, n) * 2.0) - step = Math.Pow(10, n - 1); - else if (value < Math.Pow(10, n) * 4.0) - step = Math.Pow(10, n - 1) * 2; - else - step = Math.Pow(10, n - 1) * 5; - if (DecimalPlaces >= 0) - step = Math.Max(step, Math.Pow(10, -DecimalPlaces)); - value += step; - } - else - { - if (value > Math.Pow(10, n) * 4.0) - step = Math.Pow(10, n - 1) * 5; - else if (value > Math.Pow(10, n) * 2.0) - step = Math.Pow(10, n - 1) * 2; - else if (value > Math.Pow(10, n) * 1.0) - step = Math.Pow(10, n - 1) * 1; - else - step = Math.Pow(10, n - 1) * 0.5; - if (DecimalPlaces >= 0) - step = Math.Max(step, Math.Pow(10, -DecimalPlaces)); - value -= step; - } - if (value != 0) - { - n = (int)(Math.Floor(Math.Log10(Math.Abs(value)))); - double a = Math.Round(value / Math.Pow(10, n - 1), MidpointRounding.ToEven); - double b = Math.Pow(10, n - 1); - this.Value = sign * a * b; - } + if (value != 0) + n = (int)(Math.Floor(Math.Log10(Math.Abs(value)))); + else if (DecimalPlaces >= 0) + n = -DecimalPlaces; + else + n = -1; + + double step = 0; + if ((numericUpDown.Value == 1 && sign == 1) || numericUpDown.Value == -1 && sign == -1) + { + if (value < Math.Pow(10, n) * 2.0) + step = Math.Pow(10, n - 1); + else if (value < Math.Pow(10, n) * 4.0) + step = Math.Pow(10, n - 1) * 2; else - this.Value = 0; + step = Math.Pow(10, n - 1) * 5; + if (DecimalPlaces >= 0) + step = Math.Max(step, Math.Pow(10, -DecimalPlaces)); + value += step; } else { - if (numericUpDown.Value == 1) - this.Value += UpDown_Increment; + if (value > Math.Pow(10, n) * 4.0) + step = Math.Pow(10, n - 1) * 5; + else if (value > Math.Pow(10, n) * 2.0) + step = Math.Pow(10, n - 1) * 2; + else if (value > Math.Pow(10, n) * 1.0) + step = Math.Pow(10, n - 1) * 1; else - this.Value -= UpDown_Increment; + step = Math.Pow(10, n - 1) * 0.5; + if (DecimalPlaces >= 0) + step = Math.Max(step, Math.Pow(10, -DecimalPlaces)); + value -= step; } - numericUpDown.Value = 0; - - numericUpDown.ValueChanged += numericUpDown_ValueChanged; - } - - - private void textBox_Leave(object sender, EventArgs e) - { - if (SkipEventDuringInput) + if (value != 0) { - SkipEventDuringInput = false; - textBox_TextChanged(sender, e); - SkipEventDuringInput = true; + n = (int)(Math.Floor(Math.Log10(Math.Abs(value)))); + double a = Math.Round(value / Math.Pow(10, n - 1), MidpointRounding.ToEven); + double b = Math.Pow(10, n - 1); + this.Value = sign * a * b; } + else + this.Value = 0; + } + else + { + if (numericUpDown.Value == 1) + this.Value += UpDown_Increment; + else + this.Value -= UpDown_Increment; } + numericUpDown.Value = 0; + + numericUpDown.ValueChanged += numericUpDown_ValueChanged; + } - private void textBox_Enter(object sender, EventArgs e) + + private void textBox_Leave(object sender, EventArgs e) + { + if (SkipEventDuringInput) { - textBox.SelectAll(); + SkipEventDuringInput = false; + textBox_TextChanged(sender, e); + SkipEventDuringInput = true; } } + + private void textBox_Enter(object sender, EventArgs e) + { + textBox.SelectAll(); + } } \ No newline at end of file diff --git a/Crystallography/Atom/AtomMinimum.cs b/Crystallography/Atom/AtomMinimum.cs index 5c0470e..f752bc1 100644 --- a/Crystallography/Atom/AtomMinimum.cs +++ b/Crystallography/Atom/AtomMinimum.cs @@ -85,7 +85,7 @@ public Atoms2() { } /// /// /// - public Atoms2(string label, int atomNo, int sfx, int sfe, string[] pos, string occ, bool isIso, bool isU, string iso, string[] aniso) + public Atoms2(in string label, in int atomNo, in int sfx, in int sfe, string[] pos, in string occ, in bool isIso, in bool isU, in string iso, string[] aniso) { PositionTexts = pos; diff --git a/Crystallography/Atom/AtomStatic.cs b/Crystallography/Atom/AtomStatic.cs index 12cf4c7..803fac4 100644 --- a/Crystallography/Atom/AtomStatic.cs +++ b/Crystallography/Atom/AtomStatic.cs @@ -2682,7 +2682,7 @@ public double FactorImaginaryAnnular2(double kV, Vector3DBase g, Vector3DBase h, var k0 = UniversalConstants.Convert.EnergyToElectronWaveNumber(kV); double g_h = (g - h).ToPointD.Length2 / 4; PointD g2 = g.ToPointD, h2 = h.ToPointD; - return MathNet.Numerics.Integration.GaussLegendreRule.Integrate((phi, r) => + return GaussLegendreRule.Integrate((phi, r) => { var k = r * new PointD(Math.Cos(phi), Math.Sin(phi)); double k_g = (k - g2).Length2 / 4, k_h = (k - h2).Length2 / 4; diff --git a/Crystallography/Atom/Atoms.cs b/Crystallography/Atom/Atoms.cs index f097ac0..abb018e 100644 --- a/Crystallography/Atom/Atoms.cs +++ b/Crystallography/Atom/Atoms.cs @@ -1,5 +1,4 @@ using System; -using System.Collections.Generic; using System.Drawing; using System.Numerics; using System.Xml.Serialization; @@ -13,7 +12,7 @@ public class Atoms : System.IEquatable, ICloneable public object Clone() { Atoms atoms = (Atoms)this.MemberwiseClone(); - for (int i = 0; i < Atom.Count; i++) + for (int i = 0; i < Atom.Length; i++) atoms.Atom[i] = (Vector3D)Atom[i].Clone(); return atoms; } @@ -26,10 +25,7 @@ public override string ToString() public bool Equals(Atoms obj) { Atoms atoms = obj; - if (atoms.Label == Label && atoms.X == X && atoms.Y == Y && atoms.Z == Z && atoms.Occ == Occ) - return true; - else - return false; + return atoms.Label == Label && atoms.X == X && atoms.Y == Y && atoms.Z == Z && atoms.Occ == Occ; } #endregion @@ -38,10 +34,12 @@ public bool Equals(Atoms obj) public int ID; [XmlIgnore] - public List Atom = new(); + public Vector3D[] Atom = Array.Empty(); public double X, Y, Z; public double X_err, Y_err, Z_err; + + public double Occ, Occ_err; public int AtomicNumber; @@ -72,17 +70,20 @@ public bool Equals(Atoms obj) public int Argb; - public float Radius = 0.6f; - public float Ambient = Material.DefaultTexture.Ambient;//‹ public float Diffusion = Material.DefaultTexture.Diffuse;//gU public float Emission = Material.DefaultTexture.Emission;//ȏؖ public float Shininess = Material.DefaultTexture.SpecularPow;//ˌ̋x public float Specular = Material.DefaultTexture.Specular;//ˌ + + [XmlIgnore] + public Vector3DBase PositionError => new Vector3DBase(X_err, Y_err, Z_err); + [XmlIgnore] + public Vector3DBase Position => new Vector3DBase(X, Y, Z); - + [XmlIgnore] @@ -99,6 +100,8 @@ public bool Equals(Atoms obj) } } + public Material Material => new(Argb,(Ambient,Diffusion,Specular,Shininess,Emission)); + /// /// OpenGL`掞ɁAx\邩 /// @@ -136,9 +139,9 @@ public Atoms(WyckoffPosition wyk, string label, int atomicNumber, int subXray, i Multiplicity = wyk.Multiplicity; WyckoffNumber = wyk.WyckoffNumber; - Atom = new List(); + Atom = new Vector3D[Multiplicity]; for (int i = 0; i < Multiplicity; i++) - Atom.Add(new Vector3D(0, 0, 0)); + Atom[i] = new Vector3D(0, 0, 0); Dsf = dsf; @@ -166,7 +169,7 @@ public Atoms(WyckoffPosition wyk, string label, int atomicNumber, int subXray, i /// /// public Atoms(string label, int atomicNumber, int subXray, int subElectron, double[] isotope, int symmetrySeriesNumber, - Vector3D pos, double occ, DiffuseScatteringFactor dsf) + Vector3DBase pos, double occ, DiffuseScatteringFactor dsf) { SymmetrySeriesNumber = symmetrySeriesNumber; @@ -177,7 +180,7 @@ public Atoms(string label, int atomicNumber, int subXray, int subElectron, doubl Y = pos.Y; Z = pos.Z; - var temp = WyckoffPosition.GetEquivalentAtomsPosition(pos, symmetrySeriesNumber); + var temp = WyckoffPosition.GetEquivalentAtomsPosition((X,Y,Z), symmetrySeriesNumber); WyckoffLeter = temp.WyckoffLeter; SiteSymmetry = temp.SiteSymmetry; Multiplicity = temp.Multiplicity; @@ -208,7 +211,7 @@ public Atoms(string label, int atomicNumber, int subXray, int subElectron, doubl /// /// public Atoms(string label, int atomicNumber, int subXray, int subElectron, double[] isotope, int symmetrySeriesNumber, - Vector3D pos, Vector3D pos_err, double occ, double occ_err, DiffuseScatteringFactor dsf) + Vector3DBase pos, Vector3DBase pos_err, double occ, double occ_err, DiffuseScatteringFactor dsf) : this(label, atomicNumber, subXray, subElectron, isotope, symmetrySeriesNumber, pos, occ, dsf) { @@ -235,7 +238,7 @@ public Atoms(string label, int atomicNumber, int subXray, int subElectron, doubl /// /// public Atoms(string label, int atomicNumber, int subXray, int subElectron, double[] isotope, int symmetrySeriesNumber, - Vector3D pos, Vector3D pos_err, double occ, double occ_err, + Vector3DBase pos, Vector3DBase pos_err, double occ, double occ_err, DiffuseScatteringFactor dsf, Material mat, float radius, bool glEnabled = true, bool showLabel = false) : this(label, atomicNumber, subXray, subElectron, isotope, symmetrySeriesNumber, pos, pos_err, occ, occ_err, dsf) { @@ -260,7 +263,7 @@ public void ResetSymmetry(int symmetrySeriesNumber) { SymmetrySeriesNumber = symmetrySeriesNumber; - var temp = WyckoffPosition.GetEquivalentAtomsPosition(new Vector3D(X, Y, Z), symmetrySeriesNumber); + var temp = WyckoffPosition.GetEquivalentAtomsPosition((X, Y, Z), symmetrySeriesNumber); WyckoffLeter = temp.WyckoffLeter; SiteSymmetry = temp.SiteSymmetry; Multiplicity = temp.Multiplicity; diff --git a/Crystallography/BetheMethod.cs b/Crystallography/BetheMethod.cs index 220d49f..af5ac0f 100644 --- a/Crystallography/BetheMethod.cs +++ b/Crystallography/BetheMethod.cs @@ -11,12 +11,13 @@ using System.Xml.Serialization; using System.Buffers; +using MathNet.Numerics; using MathNet.Numerics.LinearAlgebra; using MathNet.Numerics.LinearAlgebra.Complex; using DMat = MathNet.Numerics.LinearAlgebra.Complex.DenseMatrix; using DVec = MathNet.Numerics.LinearAlgebra.Complex.DenseVector; using static System.Numerics.Complex; -using MathNet.Numerics; + using static System.Buffers.ArrayPool; #endregion @@ -30,15 +31,16 @@ public class BetheMethod { #region static readonly field private static readonly Complex One = Complex.One; - private static readonly double TwoPi = 2 * Math.PI; + private const double TwoPi = 2 * Math.PI; private static readonly Complex TwoPiI = TwoPi * ImaginaryOne; private static readonly Complex PiI = Math.PI * ImaginaryOne; - private static readonly double PiSq = Math.PI * Math.PI; + private const double PiSq = Math.PI * Math.PI; /// /// (001)ベクトル /// private static readonly Vector3DBase zNorm = new(0, 0, 1); - public static readonly bool EigenEnabled; + public static readonly bool EigenEnabled, MklEnabled, BlasEnabled, CudaEnabled; + public static readonly int ProcessorCount = Environment.ProcessorCount; #endregion @@ -111,6 +113,9 @@ public enum Solver { Eigen_MKL, Eigen_Eigen, MtxExp_MKL, MtxExp_Eigen, Auto } static BetheMethod() { EigenEnabled = NativeWrapper.Enabled; + BlasEnabled = Control.TryUseNativeOpenBLAS(); + MklEnabled = Control.TryUseNativeMKL(); + CudaEnabled = Control.TryUseNativeCUDA(); } public BetheMethod(Crystal crystal) { @@ -163,7 +168,8 @@ public void RunCBED(int maxNumOfBloch, double voltage, Matrix3D rotation, double BaseRotation = new Matrix3D(rotation); BeamDirections = beamDirections; Thicknesses = thickness; - var mkl = Control.TryUseNativeMKL(); + + //var cuda = Control.TryUseNativeCUDA(); bwCBED.RunWorkerAsync((solver, thread)); } @@ -207,7 +213,7 @@ private unsafe void cbed_DoWork(object sender, DoWorkEventArgs e) if (EigenEnabled) (solver, thread) = (Solver.MtxExp_Eigen, ProcessorCount); else - (solver, thread) = (Solver.Eigen_MKL, Control.TryUseNativeMKL() ? Math.Max(1, ProcessorCount / 4) : ProcessorCount); + (solver, thread) = (Solver.Eigen_MKL, MklEnabled ? Math.Max(1, ProcessorCount / 4) : ProcessorCount); } var reportString = $"{solver}{thread}"; #endregion @@ -396,7 +402,7 @@ private void cbed_DoWork2(object sender, DoWorkEventArgs e) if (EigenEnabled) (solver, thread) = (Solver.MtxExp_Eigen, ProcessorCount); else - (solver, thread) = (Solver.Eigen_MKL, Control.TryUseNativeMKL() ? Math.Max(1, ProcessorCount / 4) : ProcessorCount); + (solver, thread) = (Solver.Eigen_MKL, MklEnabled ? Math.Max(1, ProcessorCount / 4) : ProcessorCount); } var reportString = $"{solver}{thread}"; #endregion @@ -574,8 +580,6 @@ static int getIndex(PointD pos, PointD[] posList, int width) /// public Beam[] GetDifractedBeamAmpriltudes(int maxNumOfBloch, double voltage, Matrix3D rotation, double thickness) { - var useEigen = !MathNet.Numerics.Control.TryUseNativeMKL(); - if (AccVoltage != voltage) uDictionary.Clear(); @@ -602,7 +606,7 @@ public Beam[] GetDifractedBeamAmpriltudes(int maxNumOfBloch, double voltage, Mat var potentialMatrix = getEigenMatrix(Beams); dim = Beams.Length; //A行列に関する固有値、固有ベクトルを取得 - if (useEigen) + if (EigenEnabled || maxNumOfBloch < 400) { (EigenValues, EigenVectors) = NativeWrapper.EigenSolver(dim, potentialMatrix); EigenVectorsInverse = NativeWrapper.Inverse(Beams.Length, EigenVectors); @@ -662,8 +666,6 @@ public Beam[] GetPrecessionElectronDiffraction(int maxNumOfBloch, double voltage uDictionary.Clear(); var useEigen = EigenEnabled && maxNumOfBloch < 400; - if (!MathNet.Numerics.Control.TryUseNativeMKL()) - useEigen = true; var stepP = Enumerable.Range(0, step).ToList().AsParallel().WithDegreeOfParallelism(useEigen ? Environment.ProcessorCount : Math.Max(1, Environment.ProcessorCount / 4)); if (MaxNumOfBloch != maxNumOfBloch || AccVoltage != voltage || EigenValuesPED == null || EigenValuesPED.Length != step @@ -693,7 +695,7 @@ public Beam[] GetPrecessionElectronDiffraction(int maxNumOfBloch, double voltage potentialMatrix = getEigenMatrix(BeamsPED[k]); var dim = BeamsPED[k].Length; //A行列に関する固有値、固有ベクトルを取得 - if (useEigen) + if (useEigen) {//Eigenを使う場合 var (val,vec)= NativeWrapper.EigenSolver(dim, potentialMatrix); (EigenValuesPED[k], EigenVectorsPED[k]) = (new DVec(val), new DMat(len, len, vec)); @@ -785,7 +787,6 @@ public void RunSTEM(int maxNumOfBloch, double voltage, double cs, Size imageSize BeamDirections = beamDirections; Thicknesses = thickness; - Control.TryUseNativeMKL(); bwSTEM.RunWorkerAsync((solver, thread, cs, convergenceAngle, detAngleInner, detAngleOuter, defocusses, imageSize, resolution, calcElas, calcInel)); } public void stem_DoWork(object sender, DoWorkEventArgs e) @@ -843,7 +844,7 @@ public void stem_DoWork(object sender, DoWorkEventArgs e) if (EigenEnabled) (solver, thread) = (Solver.MtxExp_Eigen, ProcessorCount); else - (solver, thread) = (Solver.Eigen_MKL, Control.TryUseNativeMKL() ? Math.Max(1, ProcessorCount / 4) : ProcessorCount); + (solver, thread) = (Solver.Eigen_MKL, MklEnabled ? Math.Max(1, ProcessorCount / 4) : ProcessorCount); } (solver, thread) = EigenEnabled && bLen < 512 ? (Solver.Eigen_Eigen, ProcessorCount) : (Solver.Eigen_MKL, Math.Max(1, ProcessorCount / 4)); @@ -941,7 +942,7 @@ public void stem_DoWork(object sender, DoWorkEventArgs e) //各種変数(I_Elas, I_Inel, g_q_index, U)の準備 count = 0; - (int g, int g_q)[][] g_qIndex = new (int g, int g_q)[qList.Count][]; + var g_qIndex = new (int g, int g_q)[qList.Count][]; var U = new Complex[qList.Count][]; Complex[][] I_Elas = new Complex[qList.Count][], I_Inel = new Complex[qList.Count][]; var tempCoef = 1000.0 / bLen / qList.Count; @@ -993,6 +994,7 @@ public void stem_DoWork(object sender, DoWorkEventArgs e) if (bwSTEM.CancellationPending) return; var (index, result, gInDetector, K) = _disk2; + Complex[] c_k = eVectors[index], α_k = αs[index], λ_k = eValues[index]; double kz_k = k_z[index]; Complex[] lenz = new Complex[defocusses.Length]; @@ -1000,10 +1002,11 @@ public void stem_DoWork(object sender, DoWorkEventArgs e) try { for (int m = 0; m < qList.Count; m++) - if (A(K + qList[m].Vec.ToPointD)) + { + var P = K + qList[m].Vec.ToPointD; + if (A(P)) { - var P = K + qList[m].Vec.ToPointD; - double dX = P.X * coeff2 + coeff1, dY = -P.Y * coeff2 + coeff1;//Pに最も近いX,Y座標(実数) + double dX = P.X * coeff2 + coeff1, dY = -P.Y * coeff2 + coeff1;//P の X,Y座標(実数) int x = (int)(Math.Floor(dX)), y = (int)(Math.Floor(dY));//左上近接のX,Y座標(整数) int n0 = y * diameterPix + x, n1 = n0 + 1, n2 = n0 + diameterPix, n3 = n2 + 1;//それぞれのインデックス if ((uint)x < coeff3 && (uint)y < coeff3 && flag[n0] && flag[n1] && flag[n2] && flag[n3])//4つのインデックスが範囲内であることを判定 @@ -1049,7 +1052,7 @@ public void stem_DoWork(object sender, DoWorkEventArgs e) //kz(K)とkz(K+Q)を作成 double kz_kq = r0 * k_z[n0] + r1 * k_z[n1] + r2 * k_z[n2] + r3 * k_z[n3]; - + //kqの変数にあらかじめ係数を演算しておく。kの方は再利用するのでまずい。 for (int i = 0; i < bLen; i++) { @@ -1076,6 +1079,7 @@ public void stem_DoWork(object sender, DoWorkEventArgs e) } } } + } } finally { Shared.Return(TDS); Shared.Return(c_kq); Shared.Return(λ_kq); Shared.Return(α_kq); Shared.Return(temp_k); Shared.Return(temp_kq); } if (Interlocked.Increment(ref count) % 10 == 0) bwSTEM.ReportProgress(count, "Calculating I(Q)");//状況を報告 diff --git a/Crystallography/Crystal/ConvertCrystalData.cs b/Crystallography/Crystal/ConvertCrystalData.cs index 7262ade..0852032 100644 --- a/Crystallography/Crystal/ConvertCrystalData.cs +++ b/Crystallography/Crystal/ConvertCrystalData.cs @@ -1025,7 +1025,7 @@ private static Crystal2 ConvertFromCIF(List str) var p = new V3(0.111, 0.234, 0.457);//KȈʈʒu var tempAtom = WyckoffPosition.GetEquivalentAtomsPosition((p.X, p.Y, p.Z), sgnum).Atom; - if (operations.Count != 0 && operations.Count == tempAtom.Count) + if (operations.Count != 0 && operations.Count == tempAtom.Length) { var th = 0.0000001; var prms = new[] { "x", "y", "z" }.Select(s => Expression.Parameter(typeof(double), s)).ToArray(); diff --git a/Crystallography/Crystal/Crystal.cs b/Crystallography/Crystal/Crystal.cs index eb6a88b..3756782 100644 --- a/Crystallography/Crystal/Crystal.cs +++ b/Crystallography/Crystal/Crystal.cs @@ -7,6 +7,7 @@ using System.Threading; using System.Threading.Tasks; using System.Xml.Serialization; +using System.Runtime.InteropServices; namespace Crystallography; @@ -1064,6 +1065,10 @@ public void SetPlanes() #endregion #region tiqxNǧvZ + + static int composeKey(in int h, in int k, in int l) => ((h > 0) || (h == 0 && k > 0) || (h == 0 && k == 0 && l > 0)) ? ((h + 255) << 20) + ((k + 255) << 10) + l + 255 : -1; + static (int h, int k, int l) decomposeKey(in int key) => (((key << 2) >> 22) - 255, ((key << 12) >> 22) - 255, ((key << 22) >> 22) - 255); + /// /// dMinȏAdMaxȉ͈̔͂ŋtiqxNgvZAwavesorceɏ]āA\qvZ /// @@ -1074,9 +1079,6 @@ public void SetVectorOfG(double dMin, WaveSource wavesource, bool excludeLattice { if (A_Star == null) SetAxis(); - static int composeKey(in int h, in int k,in int l) => ((h > 0) || (h == 0 && k > 0) || (h == 0 && k == 0 && l > 0)) ? ((h + 255) << 20) + ((k + 255) << 10) + l + 255 : -1; - static (int h, int k, int l) decomposeKey(in int key) => (((key << 2) >> 22) - 255, ((key << 12) >> 22) - 255, ((key << 22) >> 22) - 255); - double aX = A_Star.X, aY = A_Star.Y, aZ = A_Star.Z; double bX = B_Star.X, bY = B_Star.Y, bZ = B_Star.Z; double cX = C_Star.X, cY = C_Star.Y, cZ = C_Star.Z; @@ -1112,36 +1114,40 @@ public void SetVectorOfG(double dMin, WaveSource wavesource, bool excludeLattice var maxGnum = 250000; var zeroKey = (255 << 20) + (255 << 10) + 255; - var outer = new Dictionary() { { zeroKey, 0 } }; - var gDic = new Dictionary() { { zeroKey, (0, 0, 0, 0) } }; + var outer = new List<(int key, double len)>() { (zeroKey, 0) }; + var gHash = new HashSet(maxGnum) { zeroKey }; + var gList=new List<(int key, double x, double y, double z, double len)>(maxGnum) { (zeroKey, 0, 0, 0, 0) }; var minG = 0.0; - while (gDic.Count < maxGnum && (minG = outer.Values.Min()) < gMax) + while (gList.Count < maxGnum && (minG = outer.Min(o => o.len)) < gMax) { - var outerList = outer.Where(o => o.Value - minG < shift * 4).Select(o => o.Key).ToList(); - outerList.ForEach(o => outer.Remove(o)); - - foreach (var (h1, k1, l1) in outerList.Select(o => decomposeKey(o))) + var end = outer.FindLastIndex(o => o.len - minG < shift * 2); + foreach (var (key1, _) in CollectionsMarshal.AsSpan(outer)[..(end + 1)]) + { + var (h1, k1, l1) = decomposeKey(key1); foreach ((int h2, int k2, int l2) in directions) { - int h = h1 + h2, k = k1 + k2, l = l1 + l2, key = composeKey(h, k, l);// h * 1024 * 1024 + k * 1024 + l; - if (key > 0 && !gDic.ContainsKey(key)) + int h = h1 + h2, k = k1 + k2, l = l1 + l2, key2 = composeKey(h, k, l); + if (key2 > 0 && !gHash.Contains(key2)) { double x = h * aX + k * bX + l * cX, y = h * aY + k * bY + l * cY, z = h * aZ + k * bZ + l * cZ; var len = Math.Sqrt(x * x + y * y + z * z); - gDic.Add(key, (x, y, z, len)); - outer.Add(key, len); + gHash.Add(key2); + gList.Add((key2, x, y, z, len)); + outer.Add((key2, len)); } } + } + outer.RemoveRange(0, end + 1); + outer.Sort((e1, e2) => e1.len.CompareTo(e2.len)); } - gDic.Remove(zeroKey); - - var gList = gDic.ToList(); - var gArray = new Vector3D[gDic.Count * 2]; + gList.RemoveAt(0); + + var gArray = new Vector3D[gList.Count * 2]; Parallel.For(0, gList.Count, i => { - var (h, k, l) = decomposeKey(gList[i].Key); - var (x, y, z, glen) = gList[i].Value; + var (key, x, y, z, glen) = gList[i]; + var (h, k, l) = decomposeKey(key); var extinction = Symmetry.CheckExtinctionRule(h, k, l); gArray[i * 2] = new Vector3D(x, y, z, false) { Index = (h, k, l), d = 1 / glen, Extinction = extinction, Text = $"{h} {k} {l}" }; gArray[i * 2 + 1] = new Vector3D(-x, -y, -z, false) { Index = (-h, -k, -l), d = 1 / glen, Extinction = extinction, Text = $"{-h} {-k} {-l}" }; @@ -1307,7 +1313,7 @@ public void ReCoordinateAtom() double minR = double.PositiveInfinity; double r; int k = -1; - for (int j = 0; j < Atoms[i].Atom.Count; j++) + for (int j = 0; j < Atoms[i].Atom.Length; j++) if ((r = Atoms[i].Atom[j].Length2) < minR) { minR = r; diff --git a/Crystallography/Crystallography.csproj b/Crystallography/Crystallography.csproj index e98d82a..416cddd 100644 --- a/Crystallography/Crystallography.csproj +++ b/Crystallography/Crystallography.csproj @@ -4,8 +4,8 @@ Library net6.0-windows true - 2022.9.9.1118 - 2022.9.9.1118 + 2022.10.25.0616 + 2022.10.25.0616 @@ -24,9 +24,10 @@ + - + diff --git a/Crystallography/Detector/Ring.cs b/Crystallography/Detector/Ring.cs index 1b51257..1d7616a 100644 --- a/Crystallography/Detector/Ring.cs +++ b/Crystallography/Detector/Ring.cs @@ -593,9 +593,11 @@ public static List FlipAndRotate(IEnumerable src, int width, boo #endregion #region Ό␳ - public static List CorrectPolarization(int rotate) + public static List CorrectPolarization(int rotate, List intensity = null) { - SetTiltParameter(); + intensity ??= Intensity; + + SetTiltParameter(); double fd = IP.FilmDistance, fd2 = fd * fd; double sizeX = IP.PixSizeX, sizeY = IP.PixSizeY; @@ -619,7 +621,7 @@ public static List CorrectPolarization(int rotate) //var coeff2 = new Func((x2, y2) => Math.Sqrt( fd2 / (x2 + y2 + fd2))); - var result = new double[Intensity.Count]; + var result = new double[intensity.Count]; //Parallel.ForgȂق int i = 0; for (int pixY = 0; pixY < SrcImgSize.Height; pixY++) @@ -636,7 +638,7 @@ public static List CorrectPolarization(int rotate) double temp8 = fd / (temp4 + tempX * Denom2); double x = (temp5 + tempX * Numer2) * temp8; double y = (tempX * Numer1 + temp6) * temp8; - result[i] = Intensity[i] / coeff1(x * x, y * y);// *coeff2(x * x, y * y); + result[i] = intensity[i] / coeff1(x * x, y * y);// *coeff2(x * x, y * y); i++; } } diff --git a/Crystallography/Euler.cs b/Crystallography/Euler.cs index f92d409..391ac50 100644 --- a/Crystallography/Euler.cs +++ b/Crystallography/Euler.cs @@ -27,7 +27,7 @@ public static Matrix3D SerchEulerAngleFromZoneAxes(ZoneAxis za, Crystal cry) { double tilt1 = za.tilt1; double tilt2 = za.tilt2; - Vector3D v = Vector3D.Normarize(za.u * cry.A_Axis + za.v * cry.B_Axis + za.w * cry.C_Axis); + var v = Vector3D.Normarize(za.u * cry.A_Axis + za.v * cry.B_Axis + za.w * cry.C_Axis); Vector3D V = new(-Math.Sin(tilt1), -Math.Cos(tilt1) * Math.Sin(tilt2), Math.Cos(tilt1) * Math.Cos(tilt2)); diff --git a/Crystallography/Images/BitmapConverter.cs b/Crystallography/Images/BitmapConverter.cs index daf79b5..2bcc02c 100644 --- a/Crystallography/Images/BitmapConverter.cs +++ b/Crystallography/Images/BitmapConverter.cs @@ -61,7 +61,7 @@ public unsafe static Bitmap FromArrayToBitmap(byte[] rgb, int width, int height) return new Bitmap(1, 1); } - public static Byte[] ToByte(Bitmap Bmp) + public static byte[] ToByte(Bitmap Bmp) { var bmpData = Bmp.LockBits(new Rectangle(0, 0, Bmp.Width, Bmp.Height), ImageLockMode.ReadOnly, Bmp.PixelFormat); var rgbValues = new byte[bmpData.Stride * Bmp.Height]; @@ -70,7 +70,7 @@ public static Byte[] ToByte(Bitmap Bmp) return rgbValues; } - public static Byte[] ToByteWithA(Bitmap Bmp, byte a) + public static byte[] ToByteWithA(Bitmap Bmp, byte a) { var bmpData = Bmp.LockBits(new Rectangle(0, 0, Bmp.Width, Bmp.Height), ImageLockMode.ReadOnly, Bmp.PixelFormat); byte[] rgbaValues; @@ -170,7 +170,7 @@ public static byte[] ToByteRGBA(Bitmap bmp) return argbValues; } - public static Byte[] ToByteGray(Bitmap Bmp) + public static byte[] ToByteGray(Bitmap Bmp) { var bmpData = Bmp.LockBits(new Rectangle(0, 0, Bmp.Width, Bmp.Height), ImageLockMode.ReadOnly, Bmp.PixelFormat); byte[] rgbValues = new byte[bmpData.Stride * Bmp.Height]; diff --git a/Crystallography/Images/PseudoBitmap.cs b/Crystallography/Images/PseudoBitmap.cs index e5049a4..d3a8ba6 100644 --- a/Crystallography/Images/PseudoBitmap.cs +++ b/Crystallography/Images/PseudoBitmap.cs @@ -7,1023 +7,1022 @@ using System.Runtime.InteropServices; using System.Threading.Tasks; -namespace Crystallography +namespace Crystallography; + +[Serializable] +public class PseudoBitmap : IDisposable { - [Serializable] - public class PseudoBitmap : IDisposable + public void Dispose() { - public void Dispose() - { - if (SrcBitmap != null) - SrcBitmap.Dispose(); - if (destBmp != null) - destBmp.Dispose(); - } + if (SrcBitmap != null) + SrcBitmap.Dispose(); + if (destBmp != null) + destBmp.Dispose(); + } - #region static なコンストラクタ、フィールド + #region static なコンストラクタ、フィールド - //public static byte[] BrightnessScaleR = new byte[65536];//明るさスケール 16bit長に固定 - //public static byte[] BrightnessScaleG = new byte[65536];//明るさスケール 16bit長に固定 - //public static byte[] BrightnessScaleB = new byte[65536];//明るさスケール 16bit長に固定 + //public static byte[] BrightnessScaleR = new byte[65536];//明るさスケール 16bit長に固定 + //public static byte[] BrightnessScaleG = new byte[65536];//明るさスケール 16bit長に固定 + //public static byte[] BrightnessScaleB = new byte[65536];//明るさスケール 16bit長に固定 - //public static byte[] BrightnessScaleLog = new byte[65536];//ログ用の明るさスケール 16bit長に固定 - //public static byte[] BrightnessScaleLiner = new byte[65536];//ログ用の明るさスケール 16bit長に固定 + //public static byte[] BrightnessScaleLog = new byte[65536];//ログ用の明るさスケール 16bit長に固定 + //public static byte[] BrightnessScaleLiner = new byte[65536];//ログ用の明るさスケール 16bit長に固定 - public static (byte R, byte G, byte B)[] ColorScaleGrayLiner = new (byte R, byte G, byte B)[65536]; - public static (byte R, byte G, byte B)[] ColorScaleGrayLog = new (byte R, byte G, byte B)[65536]; + public static (byte R, byte G, byte B)[] ColorScaleGrayLiner = new (byte R, byte G, byte B)[65536]; + public static (byte R, byte G, byte B)[] ColorScaleGrayLog = new (byte R, byte G, byte B)[65536]; - public static (byte R, byte G, byte B)[] ColorScaleColdWarmLiner = new (byte R, byte G, byte B)[65536]; - public static (byte R, byte G, byte B)[] ColorScaleColdWarmLog = new (byte R, byte G, byte B)[65536]; + public static (byte R, byte G, byte B)[] ColorScaleColdWarmLiner = new (byte R, byte G, byte B)[65536]; + public static (byte R, byte G, byte B)[] ColorScaleColdWarmLog = new (byte R, byte G, byte B)[65536]; - public static (byte R, byte G, byte B)[] ColorScaleFireLiner = new (byte R, byte G, byte B)[65536]; - public static (byte R, byte G, byte B)[] ColorScaleFireLog = new (byte R, byte G, byte B)[65536]; + public static (byte R, byte G, byte B)[] ColorScaleFireLiner = new (byte R, byte G, byte B)[65536]; + public static (byte R, byte G, byte B)[] ColorScaleFireLog = new (byte R, byte G, byte B)[65536]; - public static (byte R, byte G, byte B)[] ColorScaleSpectrumLiner = new (byte R, byte G, byte B)[65536]; - public static (byte R, byte G, byte B)[] ColorScaleSpectrumLog = new (byte R, byte G, byte B)[65536]; + public static (byte R, byte G, byte B)[] ColorScaleSpectrumLiner = new (byte R, byte G, byte B)[65536]; + public static (byte R, byte G, byte B)[] ColorScaleSpectrumLog = new (byte R, byte G, byte B)[65536]; - public static (byte R, byte G, byte B)[] ColorScaleRotationLiner = new (byte R, byte G, byte B)[65536]; - public static (byte R, byte G, byte B)[] ColorScaleRotationLog = new (byte R, byte G, byte B)[65536]; + public static (byte R, byte G, byte B)[] ColorScaleRotationLiner = new (byte R, byte G, byte B)[65536]; + public static (byte R, byte G, byte B)[] ColorScaleRotationLog = new (byte R, byte G, byte B)[65536]; - static PseudoBitmap() + static PseudoBitmap() + { + #region スケールの初期化 + + var gray = new (int I, byte R, byte G, byte B)[]{ + (0,0,0,0), + (65536,255,255,255) + }; + + var cold_warm = new (int I, byte R, byte G, byte B)[]{ + (0,0,0,0), + (5376,0,0,255), + (16256,0,191,191), + (27136,0,255,0), + (38016,255,255,0), + (48896,255,0,0), + (59904,255,0,255), + (65536,255,255,255) + }; + + var fire = new (int I, byte R, byte G, byte B)[]{ + (0,0,0,0), + (3840, 0,0,91), + (7936,46,0,160), + (12032,94,0,216), + (14336,122,0,227), + (16128,143,0, 212), + (20224,171,0,154), + (24320,193,0,96), + (24576,195,0,93), + (24832,196,1,89), + (27392,210,21,53), + (32512,238,76,0), + (36608,254,115,0), + (36864,255,117,0), + (40704,255, 145,0), + (45312,255,176, 0 ), + (48896,255,203, 0 ), + (53248,255,234, 0 ), + (57088,255,254,90 ), + (57344,255,255,98 ), + (61184,255,255, 215 ), + (65536,255,255,255) + }; + + var spectrum = new (int I, byte R, byte G, byte B)[]{ + (0,255,0,0), + (10752,255,252,0), + (11008,252,255,0), + (21760,0,255,0), + (32512,0,255,252), + (32768,0,252,255), + (43520,0,0,255), + (54272,252,0,255), + (54528,255,0,252), + (65536,255, 0, 0), + }; + + var rotation = new (int I, byte R, byte G, byte B)[]{ + (0, 80, 80, 255), //0 + (10922, 80, 255, 255), //60° + (21845, 80, 255, 80), //120° + (32767, 255, 255, 80), //180° + (43690, 255, 80, 80), //240° + (54613, 255, 80, 255), //300° + (65536, 80, 80, 255), //360° + + }; + + (byte R, byte G, byte B)[] setScaleLinear( (int I, byte R, byte G, byte B)[] src) { - #region スケールの初期化 - - var gray = new (int I, byte R, byte G, byte B)[]{ - (0,0,0,0), - (65536,255,255,255) - }; - - var cold_warm = new (int I, byte R, byte G, byte B)[]{ - (0,0,0,0), - (5376,0,0,255), - (16256,0,191,191), - (27136,0,255,0), - (38016,255,255,0), - (48896,255,0,0), - (59904,255,0,255), - (65536,255,255,255) - }; - - var fire = new (int I, byte R, byte G, byte B)[]{ - (0,0,0,0), - (3840, 0,0,91), - (7936,46,0,160), - (12032,94,0,216), - (14336,122,0,227), - (16128,143,0, 212), - (20224,171,0,154), - (24320,193,0,96), - (24576,195,0,93), - (24832,196,1,89), - (27392,210,21,53), - (32512,238,76,0), - (36608,254,115,0), - (36864,255,117,0), - (40704,255, 145,0), - (45312,255,176, 0 ), - (48896,255,203, 0 ), - (53248,255,234, 0 ), - (57088,255,254,90 ), - (57344,255,255,98 ), - (61184,255,255, 215 ), - (65536,255,255,255) - }; - - var spectrum = new (int I, byte R, byte G, byte B)[]{ - (0,255,0,0), - (10752,255,252,0), - (11008,252,255,0), - (21760,0,255,0), - (32512,0,255,252), - (32768,0,252,255), - (43520,0,0,255), - (54272,252,0,255), - (54528,255,0,252), - (65536,255, 0, 0), - }; - - var rotation = new (int I, byte R, byte G, byte B)[]{ - (0, 80, 80, 255), //0 - (10922, 80, 255, 255), //60° - (21845, 80, 255, 80), //120° - (32767, 255, 255, 80), //180° - (43690, 255, 80, 80), //240° - (54613, 255, 80, 255), //300° - (65536, 80, 80, 255), //360° - - }; - - (byte R, byte G, byte B)[] setScaleLinear( (int I, byte R, byte G, byte B)[] src) + var result = new (byte R, byte G, byte B)[65536]; + for (int j = 0; j < src.Length - 1; j++) { - var result = new (byte R, byte G, byte B)[65536]; - for (int j = 0; j < src.Length - 1; j++) + (int I, byte R, byte G, byte B) a = src[j], b =src[j + 1]; + for (int k = src[j].I; k < src[j + 1].I; k++) { - (int I, byte R, byte G, byte B) a = src[j], b =src[j + 1]; - for (int k = src[j].I; k < src[j + 1].I; k++) - { - var x = (double)(b.I - k) / (b.I - a.I); - result[k] = ((byte)(a.R * x + b.R * (1 - x)), (byte)(a.G * x + b.G * (1 - x)), (byte)(a.B * x + b.B * (1 - x))); - } + var x = (double)(b.I - k) / (b.I - a.I); + result[k] = ((byte)(a.R * x + b.R * (1 - x)), (byte)(a.G * x + b.G * (1 - x)), (byte)(a.B * x + b.B * (1 - x))); } - return result; } + return result; + } - (byte R, byte G, byte B)[] setScaleLog((int I, byte R, byte G, byte B)[] src) + (byte R, byte G, byte B)[] setScaleLog((int I, byte R, byte G, byte B)[] src) + { + var result = new (byte R, byte G, byte B)[65536]; + for (int i = 0; i < 65536; i++) { - var result = new (byte R, byte G, byte B)[65536]; - for (int i = 0; i < 65536; i++) - { - var k = (int)(Math.Log(i, 65536) * 65536); - for (int j = 0; j < src.Length - 1; j++) - if (src[j].I < k && src[j + 1].I >= k) - { - (int I, byte R, byte G, byte B) a = src[j], b = src[j + 1]; - double x = (double)(b.I - k) / (b.I - a.I); - result[i] = ((byte)(a.R * x + b.R * (1 - x)), (byte)(a.G * x + b.G * (1 - x)), (byte)(a.B * x + b.B * (1 - x))); - break; - } - } - return result; + var k = (int)(Math.Log(i, 65536) * 65536); + for (int j = 0; j < src.Length - 1; j++) + if (src[j].I < k && src[j + 1].I >= k) + { + (int I, byte R, byte G, byte B) a = src[j], b = src[j + 1]; + double x = (double)(b.I - k) / (b.I - a.I); + result[i] = ((byte)(a.R * x + b.R * (1 - x)), (byte)(a.G * x + b.G * (1 - x)), (byte)(a.B * x + b.B * (1 - x))); + break; + } } + return result; + } - ColorScaleGrayLiner = setScaleLinear(gray); - ColorScaleColdWarmLiner = setScaleLinear(cold_warm); - ColorScaleFireLiner = setScaleLinear(fire); - ColorScaleRotationLiner = setScaleLinear(rotation); - ColorScaleSpectrumLiner = setScaleLinear(spectrum); + ColorScaleGrayLiner = setScaleLinear(gray); + ColorScaleColdWarmLiner = setScaleLinear(cold_warm); + ColorScaleFireLiner = setScaleLinear(fire); + ColorScaleRotationLiner = setScaleLinear(rotation); + ColorScaleSpectrumLiner = setScaleLinear(spectrum); - ColorScaleGrayLog = setScaleLog(gray); - ColorScaleColdWarmLog = setScaleLog(cold_warm); - ColorScaleFireLog = setScaleLog(fire); - ColorScaleRotationLog = setScaleLog(rotation); - ColorScaleSpectrumLog = setScaleLog(spectrum); + ColorScaleGrayLog = setScaleLog(gray); + ColorScaleColdWarmLog = setScaleLog(cold_warm); + ColorScaleFireLog = setScaleLog(fire); + ColorScaleRotationLog = setScaleLog(rotation); + ColorScaleSpectrumLog = setScaleLog(spectrum); - #endregion スケールの初期化 - } - #endregion + #endregion スケールの初期化 + } + #endregion - #region コンストラクタ + #region コンストラクタ - public PseudoBitmap() - { - ColorScale = ColorScaleGrayLiner; - } + public PseudoBitmap() + { + ColorScale = ColorScaleGrayLiner; + } - /// - /// List型がソースデータであるグレー実画像のコンストラクタ - /// - /// - /// - /// - /// - /// - /// - /// - /// - public PseudoBitmap(List valueGray, int width, byte[] scaleR = null, byte[] scaleG = null, byte[] scaleB = null, bool realImage = true) - : this(valueGray.Select(a => (double)a).ToArray(), width, scaleR, scaleG, scaleB, realImage) - { } - - /// - /// List型がソースデータであるグレー実画像のコンストラクタ - /// - /// - /// - /// - /// - /// - /// - /// - public PseudoBitmap(List valueGray, double scale, int width, byte[] scaleR = null, byte[] scaleG = null, byte[] scaleB = null, bool realImage = true) - :this(valueGray.Select(a => a * scale).ToArray(),width,scaleR,scaleG,scaleB,realImage) - { - } + /// + /// List型がソースデータであるグレー実画像のコンストラクタ + /// + /// + /// + /// + /// + /// + /// + /// + /// + public PseudoBitmap(List valueGray, int width, byte[] scaleR = null, byte[] scaleG = null, byte[] scaleB = null, bool realImage = true) + : this(valueGray.Select(a => (double)a).ToArray(), width, scaleR, scaleG, scaleB, realImage) + { } + + /// + /// List型がソースデータであるグレー実画像のコンストラクタ + /// + /// + /// + /// + /// + /// + /// + /// + public PseudoBitmap(List valueGray, double scale, int width, byte[] scaleR = null, byte[] scaleG = null, byte[] scaleB = null, bool realImage = true) + :this(valueGray.Select(a => a * scale).ToArray(),width,scaleR,scaleG,scaleB,realImage) + { + } - /// - /// グレーの実画像を描画する. - /// - /// - /// - /// - /// - public PseudoBitmap(uint[] value, int width, byte[] scaleR = null, byte[] scaleG = null, byte[] scaleB = null, bool realImage = true) - : this(value.Select(a => (double)a).ToArray(), width, scaleR, scaleG, scaleB, realImage) - { } - - /// - /// double型がソースデータであるグレー実画像のコンストラクタ - /// - /// - /// - /// - /// - /// - /// - public PseudoBitmap(double[] values, int width, byte[] scaleR, byte[] scaleG, byte[] scaleB, bool realImage = true) + /// + /// グレーの実画像を描画する. + /// + /// + /// + /// + /// + public PseudoBitmap(uint[] value, int width, byte[] scaleR = null, byte[] scaleG = null, byte[] scaleB = null, bool realImage = true) + : this(value.Select(a => (double)a).ToArray(), width, scaleR, scaleG, scaleB, realImage) + { } + + /// + /// double型がソースデータであるグレー実画像のコンストラクタ + /// + /// + /// + /// + /// + /// + /// + public PseudoBitmap(double[] values, int width, byte[] scaleR, byte[] scaleG, byte[] scaleB, bool realImage = true) + { + if(scaleR==null || scaleG==null || scaleB == null || scaleR.Length != scaleG.Length || scaleG.Length != scaleB.Length || scaleR.Length<2) + constructor(values, width, null, realImage); + else { - if(scaleR==null || scaleG==null || scaleB == null || scaleR.Length != scaleG.Length || scaleG.Length != scaleB.Length || scaleR.Length<2) - constructor(values, width, null, realImage); - else - { - var scale = new (byte R, byte G, byte B)[scaleR.Length]; - for (int i = 0; i < scale.Length; i++) - scale[i] = (scaleR[i], scaleG[i], scaleB[i]); - constructor(values,width, scale, realImage); - } + var scale = new (byte R, byte G, byte B)[scaleR.Length]; + for (int i = 0; i < scale.Length; i++) + scale[i] = (scaleR[i], scaleG[i], scaleB[i]); + constructor(values,width, scale, realImage); } + } - /// - /// double型がソースデータであるグレー実画像のコンストラクタ - /// - /// - /// - /// - /// - /// - /// - public PseudoBitmap(double[] values, int width, (byte R , byte G, byte B)[] scale = null, bool realImage = true) - { - constructor(values, width, scale, realImage); - } + /// + /// double型がソースデータであるグレー実画像のコンストラクタ + /// + /// + /// + /// + /// + /// + /// + public PseudoBitmap(double[] values, int width, (byte R , byte G, byte B)[] scale = null, bool realImage = true) + { + constructor(values, width, scale, realImage); + } - private void constructor(double[] values, int width, (byte R, byte G, byte B)[] scale = null, bool realImage = true) - { - if (values.Length == 0 || values.Length % width != 0) throw new ArgumentNullException("Invalid input"); - Width = width; - Height = values.Length / width; + private void constructor(double[] values, int width, (byte R, byte G, byte B)[] scale = null, bool realImage = true) + { + if (values.Length == 0 || values.Length % width != 0) throw new ArgumentNullException("Invalid input"); + Width = width; + Height = values.Length / width; - GrayScale = true; - RealImage = true; + GrayScale = true; + RealImage = true; - SrcValuesGrayOriginal = SrcValuesGray = values; + SrcValuesGrayOriginal = SrcValuesGray = values; - IsSrcGray = true; + IsSrcGray = true; - SrcValuesR.Clear(); - SrcValuesG = SrcValuesB = SrcValuesR; + SrcValuesR.Clear(); + SrcValuesG = SrcValuesB = SrcValuesR; - if (scale == null || scale.Length < 2) - ColorScale = ColorScaleGrayLiner; - else - { - ColorScale = scale; - } - - - initFilter(); + if (scale == null || scale.Length < 2) + ColorScale = ColorScaleGrayLiner; + else + { + ColorScale = scale; } + + + initFilter(); + } - - #endregion コンストラクタ + + #endregion コンストラクタ - #region 初期化関連 + #region 初期化関連 - private static Complex[][] initComplex(int width, int height) + private static Complex[][] initComplex(int width, int height) + { + Complex[][] complex = new Complex[height][]; + for (int i = 0; i < height; i++) { - Complex[][] complex = new Complex[height][]; - for (int i = 0; i < height; i++) - { - complex[i] = new Complex[width]; - for (int j = 0; j < width; j++) - complex[i][j] = new Complex(0, 0); - } - return complex; + complex[i] = new Complex[width]; + for (int j = 0; j < width; j++) + complex[i][j] = new Complex(0, 0); } + return complex; + } - public void initFilter() - { - //if (Filter1.Count != Height * Width) - //{ - // Filter1 = Enumerable.Repeat(false, Height * Width).ToList(); - // Filter2 = Enumerable.Repeat(false, Height * Width).ToList(); - // Filter3 = Enumerable.Repeat(false, Height * Width).ToList(); - // Filter4 = Enumerable.Repeat(false, Height * Width).ToList(); - // Filter5 = Enumerable.Repeat(false, Height * Width).ToList(); - // FilterTemporary = Enumerable.Repeat(false, Height * Width).ToList(); - // if (Height * Width < 3001 * 3001) - // FFT_Filter= Enumerable.Repeat(0f, Height * Width).ToList(); - //} - //else - //{ - // for (int i = 0; i < Height * Width; i++) - // { - // if (Height * Width < 3001 * 3001) - // FFT_Filter[i] = 0; - // FilterTemporary[i] = false; - // Filter1[i] = false; - // Filter2[i] = false; - // Filter3[i] = false; - // Filter4[i] = false; - // Filter5[i] = false; - // } - //} - Filter1.Clear(); - Filter1.AddRange(new bool[Height * Width]); - - Filter2.Clear(); - Filter2.AddRange(new bool[Height * Width]); - - Filter3.Clear(); - Filter3.AddRange(new bool[Height * Width]); - - Filter4.Clear(); - Filter4.AddRange(new bool[Height * Width]); - - Filter5.Clear(); - Filter5.AddRange(new bool[Height * Width]); - - FilterTemporary.Clear(); - FilterTemporary.AddRange(new bool[Height * Width]); - - if (Height * Width < 3001 * 3001) - FFT_Filter= Enumerable.Repeat(0f, Height * Width).ToList(); + public void initFilter() + { + //if (Filter1.Count != Height * Width) + //{ + // Filter1 = Enumerable.Repeat(false, Height * Width).ToList(); + // Filter2 = Enumerable.Repeat(false, Height * Width).ToList(); + // Filter3 = Enumerable.Repeat(false, Height * Width).ToList(); + // Filter4 = Enumerable.Repeat(false, Height * Width).ToList(); + // Filter5 = Enumerable.Repeat(false, Height * Width).ToList(); + // FilterTemporary = Enumerable.Repeat(false, Height * Width).ToList(); + // if (Height * Width < 3001 * 3001) + // FFT_Filter= Enumerable.Repeat(0f, Height * Width).ToList(); + //} + //else + //{ + // for (int i = 0; i < Height * Width; i++) + // { + // if (Height * Width < 3001 * 3001) + // FFT_Filter[i] = 0; + // FilterTemporary[i] = false; + // Filter1[i] = false; + // Filter2[i] = false; + // Filter3[i] = false; + // Filter4[i] = false; + // Filter5[i] = false; + // } + //} + Filter1.Clear(); + Filter1.AddRange(new bool[Height * Width]); + + Filter2.Clear(); + Filter2.AddRange(new bool[Height * Width]); + + Filter3.Clear(); + Filter3.AddRange(new bool[Height * Width]); + + Filter4.Clear(); + Filter4.AddRange(new bool[Height * Width]); + + Filter5.Clear(); + Filter5.AddRange(new bool[Height * Width]); - } + FilterTemporary.Clear(); + FilterTemporary.AddRange(new bool[Height * Width]); + + if (Height * Width < 3001 * 3001) + FFT_Filter= Enumerable.Repeat(0f, Height * Width).ToList(); + + } - #endregion 初期化関連 + #endregion 初期化関連 - #region プロパティ + #region プロパティ - /// - /// グレイスケールモードの時、SrcValuesGrayOriginalをSrcValuesGrayとは異なる配列として確保する。newの直後に設定しないといけない。 - /// - public bool ReserveSrcValuesGrayOriginal + /// + /// グレイスケールモードの時、SrcValuesGrayOriginalをSrcValuesGrayとは異なる配列として確保する。newの直後に設定しないといけない。 + /// + public bool ReserveSrcValuesGrayOriginal + { + set { - set + if (value) { - if (value) - { - SrcValuesGrayOriginal = new double[SrcValuesGray.Length]; - Array.Copy(SrcValuesGray, SrcValuesGrayOriginal, SrcValuesGray.Length); - } - else - { - SrcValuesGrayOriginal = SrcValuesGray; - } + SrcValuesGrayOriginal = new double[SrcValuesGray.Length]; + Array.Copy(SrcValuesGray, SrcValuesGrayOriginal, SrcValuesGray.Length); + } + else + { + SrcValuesGrayOriginal = SrcValuesGray; } } + } - /// - /// アルファチャンネルが有効かどうか. FilterAlphaもセットしないと、機能しない. - /// - public bool AlphaEnabled { set; get; } = false; + /// + /// アルファチャンネルが有効かどうか. FilterAlphaもセットしないと、機能しない. + /// + public bool AlphaEnabled { set; get; } = false; - /// - /// 上下方向の反転をするかどうか - /// - public bool VerticalFlip { set; get; } = false; + /// + /// 上下方向の反転をするかどうか + /// + public bool VerticalFlip { set; get; } = false; - /// - /// 左右方向の反転をするかどうか - /// - public bool HorizontalFlip { set; get; } = false; + /// + /// 左右方向の反転をするかどうか + /// + public bool HorizontalFlip { set; get; } = false; - public enum Scales { GrayLinear, ColdWarmLinear, RotationLinear, SpectrumLinear, FireLinear, GrayLog, ColdWarmLog, RotationLog, SpectrumLog, FireLog, } + public enum Scales { GrayLinear, ColdWarmLinear, RotationLinear, SpectrumLinear, FireLinear, GrayLog, ColdWarmLog, RotationLog, SpectrumLog, FireLog, } - private Scales scale = Scales.GrayLinear; - public Scales Scale + private Scales scale = Scales.GrayLinear; + public Scales Scale + { + get => scale; + set { - get => scale; - set - { - scale = value; - if (scale == Scales.GrayLinear) - SetScaleGray(true); - else if (scale == Scales.GrayLog) - SetScaleGray(false); - else if (scale == Scales.ColdWarmLinear) - SetScaleColdWarm(true); - else if (scale == Scales.ColdWarmLog) - SetScaleColdWarm(false); - else if (scale == Scales.RotationLinear) - SetScaleRotation(); - else if (scale == Scales.SpectrumLinear) - SetScaleSpectrum(true); - else if (scale == Scales.SpectrumLog) - SetScaleSpectrum(false); - else if (scale == Scales.FireLinear) - SetScaleFire(true); - else if (scale == Scales.FireLog) - SetScaleFire(false); - } + scale = value; + if (scale == Scales.GrayLinear) + SetScaleGray(true); + else if (scale == Scales.GrayLog) + SetScaleGray(false); + else if (scale == Scales.ColdWarmLinear) + SetScaleColdWarm(true); + else if (scale == Scales.ColdWarmLog) + SetScaleColdWarm(false); + else if (scale == Scales.RotationLinear) + SetScaleRotation(); + else if (scale == Scales.SpectrumLinear) + SetScaleSpectrum(true); + else if (scale == Scales.SpectrumLog) + SetScaleSpectrum(false); + else if (scale == Scales.FireLinear) + SetScaleFire(true); + else if (scale == Scales.FireLog) + SetScaleFire(false); } - - + } + + - public bool RealImage = true; + public bool RealImage = true; - public PointF Center;//虚画像のときの中心ピクセル位置 + public PointF Center;//虚画像のときの中心ピクセル位置 - /// - /// Imageの幅 - /// - public int Width { get; set; } + /// + /// Imageの幅 + /// + public int Width { get; set; } - public int Height { get; set; }//高さ + public int Height { get; set; }//高さ - public Complex[][] ComplexGray;//元画像の複素数; - public Complex[][] ComplexR;//元画像Rの複素数; - public Complex[][] ComplexG;//元画像Gの複素数; - public Complex[][] ComplexB;//元画像Bの複素数; + public Complex[][] ComplexGray;//元画像の複素数; + public Complex[][] ComplexR;//元画像Rの複素数; + public Complex[][] ComplexG;//元画像Gの複素数; + public Complex[][] ComplexB;//元画像Bの複素数; - public List FFT_Filter = new(); - public List FilterTemporary = new(); - public List Filter1 = new(); - public List Filter2 = new(); - public List Filter3 = new(); - public List Filter4 = new(); - public List Filter5 = new(); - public bool Filter1Visible = true; - public bool Filter2Visible = true; - public bool Filter3Visible = true; - public bool Filter4Visible = true; - public bool Filter5Visible = true; + public List FFT_Filter = new(); + public List FilterTemporary = new(); + public List Filter1 = new(); + public List Filter2 = new(); + public List Filter3 = new(); + public List Filter4 = new(); + public List Filter5 = new(); + public bool Filter1Visible = true; + public bool Filter2Visible = true; + public bool Filter3Visible = true; + public bool Filter4Visible = true; + public bool Filter5Visible = true; - /// - /// 透明度フィルター. 0が透明、255が不透明. AlphaEnabledがTrueの時だけ使われる. - /// - public List FilterAlfha { get; set; } = new List(); + /// + /// 透明度フィルター. 0が透明、255が不透明. AlphaEnabledがTrueの時だけ使われる. + /// + public List FilterAlfha { get; set; } = new List(); - public (byte R, byte G, byte B)[] ColorScale; + public (byte R, byte G, byte B)[] ColorScale; - public List SrcValuesR = new(); - public List SrcValuesG = new(); - public List SrcValuesB = new(); + public List SrcValuesR = new(); + public List SrcValuesG = new(); + public List SrcValuesB = new(); - /// - /// グレースケールの画像データ (BlurModeが有効の時は、フィルター後のデータ) - /// - public double[] SrcValuesGray; + /// + /// グレースケールの画像データ (BlurModeが有効の時は、フィルター後のデータ) + /// + public double[] SrcValuesGray; - /// - /// グレースケールのもとの画像データ - /// - public double[] SrcValuesGrayOriginal; + /// + /// グレースケールのもとの画像データ + /// + public double[] SrcValuesGrayOriginal; - /// - /// Blurモードの列挙体 - /// - public enum BlurModeEnum { Gaussian, Lorentzian, None } + /// + /// Blurモードの列挙体 + /// + public enum BlurModeEnum { Gaussian, Lorentzian, None } - private enum ImageSouceEnum { GrayDouble, GrayUint, ColorDouble, ColorUint } + private enum ImageSouceEnum { GrayDouble, GrayUint, ColorDouble, ColorUint } - /// - /// グレイスケールとして表示するかどうか (ソースがグレースケールかどうかは無関係) - /// - public bool GrayScale; + /// + /// グレイスケールとして表示するかどうか (ソースがグレースケールかどうかは無関係) + /// + public bool GrayScale; - /// - /// ソースがグレースケールかどうか (グレースケールとして表示するかどうかは無関係) - /// - public bool IsSrcGray = false; + /// + /// ソースがグレースケールかどうか (グレースケールとして表示するかどうかは無関係) + /// + public bool IsSrcGray = false; - public UniversalConstants.LengthUnit Unit = UniversalConstants.LengthUnit.mm; - public double PixelSizeX = 1;//単位はunit - public double PixelSizeY = 1; + public UniversalConstants.LengthUnit Unit = UniversalConstants.LengthUnit.mm; + public double PixelSizeX = 1;//単位はunit + public double PixelSizeY = 1; - /// - /// 表示する強度の上限 (画像中の最大強度という意味ではない) - /// - public double MaxValue = 255; + /// + /// 表示する強度の上限 (画像中の最大強度という意味ではない) + /// + public double MaxValue = 255; - /// - /// 表示する強度の下限 (画像中の最大強度という意味ではない) - /// - public double MinValue = 0; + /// + /// 表示する強度の下限 (画像中の最大強度という意味ではない) + /// + public double MinValue = 0; - //public int BitsPerPixels = 8; + //public int BitsPerPixels = 8; - public bool IsNegative = false; + public bool IsNegative = false; - public Bitmap SrcBitmap;//実画像のときの元画像 + public Bitmap SrcBitmap;//実画像のときの元画像 - /// - /// 画像に関連付けた情報 (なんでも) - /// - public object Tag { get; set; } + /// + /// 画像に関連付けた情報 (なんでも) + /// + public object Tag { get; set; } - public Profile FrequencyProfile { get; set; } + public Profile FrequencyProfile { get; set; } - /// - /// 1ピクセルが相当する数値 (単位は PixelUnitで指定) - /// - public double PixelScale; + /// + /// 1ピクセルが相当する数値 (単位は PixelUnitで指定) + /// + public double PixelScale; - /// - /// ピクセルの単位 - /// - public PixelUnitEnum PixelUnit; - - #endregion プロパティ - - #region 操作 - - /// - /// オリジナルのピクセル強度データにリセットする。Grayスケールモードの時だけ有効。 - /// - public void SetOriginalGray() - { - if (IsSrcGray) - SrcValuesGray = SrcValuesGrayOriginal; - } + /// + /// ピクセルの単位 + /// + public PixelUnitEnum PixelUnit; + + #endregion プロパティ + + #region 操作 + + /// + /// オリジナルのピクセル強度データにリセットする。Grayスケールモードの時だけ有効。 + /// + public void SetOriginalGray() + { + if (IsSrcGray) + SrcValuesGray = SrcValuesGrayOriginal; + } - /// - /// ダスト&スクラッチを施す。Grayスケールモードの時だけ有効。 - /// - /// - /// - /// - public void SetDustAndScratches(double radius, double threshold, bool applyToOriginal = true) + /// + /// ダスト&スクラッチを施す。Grayスケールモードの時だけ有効。 + /// + /// + /// + /// + public void SetDustAndScratches(double radius, double threshold, bool applyToOriginal = true) + { + if (IsSrcGray) { - if (IsSrcGray) - { - if (applyToOriginal) - SrcValuesGray = ImageProcess.DustAndScratches(SrcValuesGrayOriginal, Width, radius, threshold); - else - SrcValuesGray = ImageProcess.DustAndScratches(SrcValuesGray, Width, radius, threshold); - } + if (applyToOriginal) + SrcValuesGray = ImageProcess.DustAndScratches(SrcValuesGrayOriginal, Width, radius, threshold); + else + SrcValuesGray = ImageProcess.DustAndScratches(SrcValuesGray, Width, radius, threshold); } + } - /// - /// ガウシアンBlurを施す。Grayスケールモードの時だけ有効。 - /// - /// 半値半幅 - /// - /// - public void SetBlurImage(double hwhm, BlurModeEnum mode, bool applyToOriginal = true) + /// + /// ガウシアンBlurを施す。Grayスケールモードの時だけ有効。 + /// + /// 半値半幅 + /// + /// + public void SetBlurImage(double hwhm, BlurModeEnum mode, bool applyToOriginal = true) + { + if (IsSrcGray) { - if (IsSrcGray) + if (mode == BlurModeEnum.Gaussian) { - if (mode == BlurModeEnum.Gaussian) - { - if (applyToOriginal) - SrcValuesGray = ImageProcess.GaussianBlurFast(SrcValuesGrayOriginal, Width, hwhm); - else - SrcValuesGray = ImageProcess.GaussianBlurFast(SrcValuesGray, Width, hwhm); - } + if (applyToOriginal) + SrcValuesGray = ImageProcess.GaussianBlurFast(SrcValuesGrayOriginal, Width, hwhm); else - SrcValuesGray = SrcValuesGrayOriginal; + SrcValuesGray = ImageProcess.GaussianBlurFast(SrcValuesGray, Width, hwhm); } + else + SrcValuesGray = SrcValuesGrayOriginal; } + } - /// - /// 指定されたピクセルのカラー値を返す - /// - /// xピクセル値 - /// yピクセル値 - /// - public Color GetPixelColor(int x, int y) - { - if (x < 0 || Width <= x || y < 0 || Height <= y || this.RealImage == false) return Color.FromArgb(0, 0, 0); - - var offset = x + (y * Width); - var index = Math.Max(Math.Min((int)((double)(SrcValuesR[offset] - MinValue) / (MaxValue - MinValue) * ColorScale.Length + 0.5), ColorScale.Length - 1), 0); - return Color.FromArgb(ColorScale[index].R, ColorScale[index].G, ColorScale[index].B); - } + /// + /// 指定されたピクセルのカラー値を返す + /// + /// xピクセル値 + /// yピクセル値 + /// + public Color GetPixelColor(int x, int y) + { + if (x < 0 || Width <= x || y < 0 || Height <= y || this.RealImage == false) return Color.FromArgb(0, 0, 0); - public Color GetPixelColor(double x, double y) => GetPixelColor((int)(x + 0.5), (int)(y + 0.5)); + var offset = x + (y * Width); + var index = Math.Max(Math.Min((int)((double)(SrcValuesR[offset] - MinValue) / (MaxValue - MinValue) * ColorScale.Length + 0.5), ColorScale.Length - 1), 0); + return Color.FromArgb(ColorScale[index].R, ColorScale[index].G, ColorScale[index].B); + } - public double GetPixelRawValue(PointD pt) => GetPixelRawValue(pt.X, pt.Y); + public Color GetPixelColor(double x, double y) => GetPixelColor((int)(x + 0.5), (int)(y + 0.5)); + public double GetPixelRawValue(PointD pt) => GetPixelRawValue(pt.X, pt.Y); - public void SetScaleColdWarm(bool linear=true) - { - if (linear) - ColorScale = ColorScaleColdWarmLiner; - else - ColorScale = ColorScaleColdWarmLog; - GrayScale = false; - } + public void SetScaleColdWarm(bool linear=true) + { + if (linear) + ColorScale = ColorScaleColdWarmLiner; + else + ColorScale = ColorScaleColdWarmLog; - public void SetScaleSpectrum(bool linear = true) - { - if (linear) - ColorScale = ColorScaleSpectrumLiner; - else - ColorScale = ColorScaleSpectrumLog; + GrayScale = false; + } - GrayScale = false; - } - public void SetScaleFire(bool linear = true) - { - if (linear) - ColorScale = ColorScaleFireLiner; - else - ColorScale = ColorScaleFireLog; + public void SetScaleSpectrum(bool linear = true) + { + if (linear) + ColorScale = ColorScaleSpectrumLiner; + else + ColorScale = ColorScaleSpectrumLog; - GrayScale = false; - } + GrayScale = false; + } + public void SetScaleFire(bool linear = true) + { + if (linear) + ColorScale = ColorScaleFireLiner; + else + ColorScale = ColorScaleFireLog; - public void SetScaleGray(bool linear = true) - { - if (linear) - ColorScale = ColorScaleGrayLiner; - else - ColorScale = ColorScaleGrayLog; - GrayScale = false; - } + GrayScale = false; + } - public void SetScaleRotation() - { - ColorScale= ColorScaleRotationLiner; - GrayScale = false; - } + public void SetScaleGray(bool linear = true) + { + if (linear) + ColorScale = ColorScaleGrayLiner; + else + ColorScale = ColorScaleGrayLog; + GrayScale = false; + } + public void SetScaleRotation() + { + ColorScale= ColorScaleRotationLiner; + GrayScale = false; + } - /// - /// グレースケールの時のx, y位置の生の強度を返す. グレースケールではなかったら常に0を返す. - /// - /// - /// - /// - public double GetPixelRawValue(double x, double y) => GetPixelRawValue((int)(x + 0.5), (int)(y + 0.5)); - /// - /// グレースケールの時のx, y位置の生の強度を返す グレースケールではなかったら常に0を返す. - /// - /// - /// - /// - public double GetPixelRawValue(int x, int y) - { - int offset = x + y * Width; - if (IsSrcGray == true && SrcValuesGray != null && offset < SrcValuesGray.Length && 0 <= offset) - return SrcValuesGray[offset]; - else - return 0; - } + /// + /// グレースケールの時のx, y位置の生の強度を返す. グレースケールではなかったら常に0を返す. + /// + /// + /// + /// + public double GetPixelRawValue(double x, double y) => GetPixelRawValue((int)(x + 0.5), (int)(y + 0.5)); - /// - /// 指定されたピクセルの複素数値を返す - /// - /// - /// - /// - public Complex[] GetPixelComplex(int x, int y) - { - if (x < 0 || Width <= x || y < 0 || Height <= y || this.RealImage == true) return new Complex[] { new Complex(), new Complex(), new Complex() }; + /// + /// グレースケールの時のx, y位置の生の強度を返す グレースケールではなかったら常に0を返す. + /// + /// + /// + /// + public double GetPixelRawValue(int x, int y) + { + int offset = x + y * Width; + if (IsSrcGray == true && SrcValuesGray != null && offset < SrcValuesGray.Length && 0 <= offset) + return SrcValuesGray[offset]; + else + return 0; + } - if (this.GrayScale == true) - return new Complex[] { ComplexGray[y][x], ComplexGray[y][x], ComplexGray[y][x] }; - else - return new Complex[] { ComplexR[y][x], ComplexG[y][x], ComplexB[y][x] }; - } + /// + /// 指定されたピクセルの複素数値を返す + /// + /// + /// + /// + public Complex[] GetPixelComplex(int x, int y) + { + if (x < 0 || Width <= x || y < 0 || Height <= y || this.RealImage == true) return new Complex[] { new Complex(), new Complex(), new Complex() }; - public Complex[] GetPixelComplex(double x, double y) => GetPixelComplex((int)Math.Round(x), (int)Math.Round(y)); + if (this.GrayScale == true) + return new Complex[] { ComplexGray[y][x], ComplexGray[y][x], ComplexGray[y][x] }; + else + return new Complex[] { ComplexR[y][x], ComplexG[y][x], ComplexB[y][x] }; + } - /// - /// 等倍のイメージを取得する - /// - /// - /// - /// - /// - public Bitmap GetImage() - { - - var bmp = GetImage(new RectangleD(0, 0, Width, Height), new Size(Width, Height)); - - - return bmp; + public Complex[] GetPixelComplex(double x, double y) => GetPixelComplex((int)Math.Round(x), (int)Math.Round(y)); - } + /// + /// 等倍のイメージを取得する + /// + /// + /// + /// + /// + public Bitmap GetImage() + { + + var bmp = GetImage(new RectangleD(0, 0, Width, Height), new Size(Width, Height)); + + + return bmp; - /// - /// 指定された範囲のイメージを取得する - /// - /// - /// - /// - /// - public Bitmap GetImage(PointD srcCenter, double zoom, Size destSize) => srcCenter.IsNaN - ? null - : GetImage(GetDrawingArea(srcCenter, zoom, destSize), destSize); - - /// - /// 描画範囲を得る - /// - /// - /// - /// - /// - public static RectangleD GetDrawingArea(PointD srcCenter, double zoom, Size destSize) - => new RectangleD(srcCenter.X - destSize.Width / zoom / 2.0, srcCenter.Y - destSize.Height / zoom / 2.0, destSize.Width / zoom, destSize.Height / zoom); - - private Bitmap destBmp; - - public delegate Point GetSrcPosition(int x, int y); - - public delegate byte GetValue(double value, byte[] scale); - - private RectangleD justBeforeSrcRect = new RectangleD(); - private Size justBeforeDestSize = new Size(); - - /// - /// 指定された範囲のイメージを取得する - /// - /// - /// - /// - public unsafe Bitmap GetImage(RectangleD srcRect, Size destSize) - { - if (Height == 0 || Width == 0 || srcRect.Width == 0 || srcRect.Height == 0 || destSize.Width == 0 || destSize.Height == 0) return null; + } - int width = destSize.Width, height = destSize.Height; + /// + /// 指定された範囲のイメージを取得する + /// + /// + /// + /// + /// + public Bitmap GetImage(PointD srcCenter, double zoom, Size destSize) => srcCenter.IsNaN + ? null + : GetImage(GetDrawingArea(srcCenter, zoom, destSize), destSize); + + /// + /// 描画範囲を得る + /// + /// + /// + /// + /// + public static RectangleD GetDrawingArea(PointD srcCenter, double zoom, Size destSize) + => new RectangleD(srcCenter.X - destSize.Width / zoom / 2.0, srcCenter.Y - destSize.Height / zoom / 2.0, destSize.Width / zoom, destSize.Height / zoom); + + private Bitmap destBmp; + + public delegate Point GetSrcPosition(int x, int y); + + public delegate byte GetValue(double value, byte[] scale); + + private RectangleD justBeforeSrcRect = new RectangleD(); + private Size justBeforeDestSize = new Size(); + + /// + /// 指定された範囲のイメージを取得する + /// + /// + /// + /// + public unsafe Bitmap GetImage(RectangleD srcRect, Size destSize) + { + if (Height == 0 || Width == 0 || srcRect.Width == 0 || srcRect.Height == 0 || destSize.Width == 0 || destSize.Height == 0) return null; - //まずbmpが前回作られていなかったら作成 - if (destBmp == null || destBmp.Width != width || destBmp.Height != height || destBmp.PixelFormat == (AlphaEnabled ? PixelFormat.Format32bppPArgb : PixelFormat.Format24bppRgb)) - { - destBmp = new Bitmap(width, height, AlphaEnabled ? PixelFormat.Format32bppPArgb : PixelFormat.Format24bppRgb); - } - //bmpをロック - BitmapData bmpData; - try - { - bmpData = destBmp.LockBits(new Rectangle(0, 0, destBmp.Width, destBmp.Height), ImageLockMode.ReadWrite, destBmp.PixelFormat); - } - catch - { - return null; - } - double zoom = (width / srcRect.Width + height / srcRect.Height) / 2.0; - - # region 描画する画素位置をソース画像位置に変換するローカル関数 - double srcX = srcRect.X + 0.5, srcY = srcRect.Y + 0.5, w = srcRect.Width / width, h= srcRect.Height / height; - Func getSrcPosition; - if (HorizontalFlip & VerticalFlip) - getSrcPosition = (x, y) => ((int)(srcX + (width - x) * w), (int)(srcY + (height - y) * h)); - else if (!HorizontalFlip & VerticalFlip) - getSrcPosition = (x, y) => ((int)(srcX + x * w), (int)(srcY + (height - y) * h)); - else if (HorizontalFlip & !VerticalFlip) - getSrcPosition = (x, y) => ((int)(srcX + (width - x) * w), (int)(srcY + y * h)); - else - getSrcPosition = (x, y) => ((int)(srcX + x * w), (int)(srcY + y * h)); - #endregion + int width = destSize.Width, height = destSize.Height; - #region 入力値doubleを表示する値に変換するローカル関数 - var length = ColorScale.Length; - var coeff = length /(MaxValue - MinValue); - byte getValueR(double rawValue) - { - var rawIndex = (int)((rawValue - MinValue) * coeff + 0.5); - return ColorScale[Math.Min(Math.Max(0, rawIndex), length - 1)].R; - } + //まずbmpが前回作られていなかったら作成 + if (destBmp == null || destBmp.Width != width || destBmp.Height != height || destBmp.PixelFormat == (AlphaEnabled ? PixelFormat.Format32bppPArgb : PixelFormat.Format24bppRgb)) + { + destBmp = new Bitmap(width, height, AlphaEnabled ? PixelFormat.Format32bppPArgb : PixelFormat.Format24bppRgb); + } + //bmpをロック + BitmapData bmpData; + try + { + bmpData = destBmp.LockBits(new Rectangle(0, 0, destBmp.Width, destBmp.Height), ImageLockMode.ReadWrite, destBmp.PixelFormat); + } + catch + { + return null; + } + double zoom = (width / srcRect.Width + height / srcRect.Height) / 2.0; + + # region 描画する画素位置をソース画像位置に変換するローカル関数 + double srcX = srcRect.X + 0.5, srcY = srcRect.Y + 0.5, w = srcRect.Width / width, h= srcRect.Height / height; + Func getSrcPosition; + if (HorizontalFlip & VerticalFlip) + getSrcPosition = (x, y) => ((int)(srcX + (width - x) * w), (int)(srcY + (height - y) * h)); + else if (!HorizontalFlip & VerticalFlip) + getSrcPosition = (x, y) => ((int)(srcX + x * w), (int)(srcY + (height - y) * h)); + else if (HorizontalFlip & !VerticalFlip) + getSrcPosition = (x, y) => ((int)(srcX + (width - x) * w), (int)(srcY + y * h)); + else + getSrcPosition = (x, y) => ((int)(srcX + x * w), (int)(srcY + y * h)); + #endregion + + #region 入力値doubleを表示する値に変換するローカル関数 + var length = ColorScale.Length; + var coeff = length /(MaxValue - MinValue); + byte getValueR(double rawValue) + { + var rawIndex = (int)((rawValue - MinValue) * coeff + 0.5); + return ColorScale[Math.Min(Math.Max(0, rawIndex), length - 1)].R; + } - byte getValueG(double rawValue) - { - var rawIndex = (int)((rawValue - MinValue) * coeff + 0.5); - return ColorScale[Math.Min(Math.Max(0, rawIndex), length - 1)].G; - } + byte getValueG(double rawValue) + { + var rawIndex = (int)((rawValue - MinValue) * coeff + 0.5); + return ColorScale[Math.Min(Math.Max(0, rawIndex), length - 1)].G; + } - byte getValueB(double rawValue) - { - var rawIndex = (int)((rawValue - MinValue) * coeff + 0.5); - return ColorScale[Math.Min(Math.Max(0, rawIndex), length - 1)].B; - } - #endregion + byte getValueB(double rawValue) + { + var rawIndex = (int)((rawValue - MinValue) * coeff + 0.5); + return ColorScale[Math.Min(Math.Max(0, rawIndex), length - 1)].B; + } + #endregion - int range = (int)(1 / zoom / 2 + 0.5); - int increase = (zoom >= 1) ? 0 : Math.Max(range / 3, 1); + int range = (int)(1 / zoom / 2 + 0.5); + int increase = (zoom >= 1) ? 0 : Math.Max(range / 3, 1); - int step = AlphaEnabled ? 4 : 3; - int nResidual = bmpData.Stride - destBmp.Width * step; - double filter; + int step = AlphaEnabled ? 4 : 3; + int nResidual = bmpData.Stride - destBmp.Width * step; + double filter; - int thread = Environment.ProcessorCount; + int thread = Environment.ProcessorCount; - + #if DEBUG - //thread = 1; + //thread = 1; #endif - int yStep = height / thread + 1; - Parallel.For(0, thread, t => - { - byte* p = (byte*)(void*)bmpData.Scan0; - p += t * yStep * bmpData.Stride; + int yStep = height / thread + 1; + Parallel.For(0, thread, t => + { + byte* p = (byte*)(void*)bmpData.Scan0; + p += t * yStep * bmpData.Stride; - byte r = 0, g = 0, b = 0; + byte r = 0, g = 0, b = 0; - (int X, int Y) beforePt = (int.MinValue, int.MinValue); - for (int y = t * yStep; y < Math.Min((t + 1) * yStep, height); y++) + (int X, int Y) beforePt = (int.MinValue, int.MinValue); + for (int y = t * yStep; y < Math.Min((t + 1) * yStep, height); y++) + { + for (int x = 0; x < width; x++) { - for (int x = 0; x < width; x++) + var pt = getSrcPosition(x, y); + if (pt.X == beforePt.X && pt.Y == beforePt.Y) { - var pt = getSrcPosition(x, y); - if (pt.X == beforePt.X && pt.Y == beforePt.Y) - { - for (int i = 0; i < step; i++) - p[i] = p[i - step]; - } - else if ((uint)pt.X < (uint)Width && (uint)pt.Y < (uint)Height)//描画域内のとき + for (int i = 0; i < step; i++) + p[i] = p[i - step]; + } + else if ((uint)pt.X < (uint)Width && (uint)pt.Y < (uint)Height)//描画域内のとき + { + var srcPosition = pt.X + pt.Y * Width; + if (increase > 0)//補完モード { - var srcPosition = pt.X + pt.Y * Width; - if (increase > 0)//補完モード - { - double rSum = 0, gSum = 0, bSum = 0, count = 0; - - for (int j = Math.Max(0, pt.Y - range); j <= Math.Min(pt.Y + range, Height - 1); j += increase) - for (int i = Math.Max(0, pt.X - range); i <= Math.Min(pt.X + range, Width - 1); i += increase) - { - var tempPosition = i + j * Width; + double rSum = 0, gSum = 0, bSum = 0, count = 0; - if (IsSrcGray) - bSum += SrcValuesGray[tempPosition]; - else - { - bSum += SrcValuesB[tempPosition]; - if (!GrayScale) - { - gSum += SrcValuesG[tempPosition]; - rSum += SrcValuesR[tempPosition]; - } - } - count++; - } - if (count > 0) + for (int j = Math.Max(0, pt.Y - range); j <= Math.Min(pt.Y + range, Height - 1); j += increase) + for (int i = Math.Max(0, pt.X - range); i <= Math.Min(pt.X + range, Width - 1); i += increase) { - b = getValueB(bSum / count); - if (GrayScale) - g = r = b; + var tempPosition = i + j * Width; + + if (IsSrcGray) + bSum += SrcValuesGray[tempPosition]; else { - if (IsSrcGray) - gSum = rSum = bSum; - g = getValueG(gSum / count); - r = getValueR(rSum / count); + bSum += SrcValuesB[tempPosition]; + if (!GrayScale) + { + gSum += SrcValuesG[tempPosition]; + rSum += SrcValuesR[tempPosition]; + } } + count++; } - } - else + if (count > 0) { - if (IsSrcGray) + b = getValueB(bSum / count); + if (GrayScale) + g = r = b; + else { - b = getValueB(SrcValuesGray[srcPosition]); - if (GrayScale) - g = r = b; - else - { - g = getValueG(SrcValuesGray[srcPosition]); - r = getValueR(SrcValuesGray[srcPosition]); - } + if (IsSrcGray) + gSum = rSum = bSum; + g = getValueG(gSum / count); + r = getValueR(rSum / count); } + } + } + else + { + if (IsSrcGray) + { + b = getValueB(SrcValuesGray[srcPosition]); + if (GrayScale) + g = r = b; else { - b = getValueB(SrcValuesB[srcPosition]); - if (GrayScale) - g = r = b; - else - { - g = getValueG(SrcValuesG[srcPosition]); - r = getValueR(SrcValuesR[srcPosition]); - } + g = getValueG(SrcValuesGray[srcPosition]); + r = getValueR(SrcValuesGray[srcPosition]); } } - - if (IsNegative) + else { - b = (byte)(byte.MaxValue - b); g = (byte)(byte.MaxValue - g); r = (byte)(byte.MaxValue - r); + b = getValueB(SrcValuesB[srcPosition]); + if (GrayScale) + g = r = b; + else + { + g = getValueG(SrcValuesG[srcPosition]); + r = getValueR(SrcValuesR[srcPosition]); + } } + } - p[0] = b; - p[1] = g; - p[2] = r; + if (IsNegative) + { + b = (byte)(byte.MaxValue - b); g = (byte)(byte.MaxValue - g); r = (byte)(byte.MaxValue - r); + } - if (AlphaEnabled) - p[3] = (srcPosition < FilterAlfha.Count) ? FilterAlfha[srcPosition] : (byte)255; + p[0] = b; + p[1] = g; + p[2] = r; - #region 各種フィルター - if (FFT_Filter != null && FFT_Filter.Count > 0 && (filter = FFT_Filter[srcPosition]) != 0)//もしフィルターされていたら全体を1/2にして(0,127,127)をたす - { //BG - p[0] = (byte)(p[0] * (2 - filter) * 0.5 + 127 * filter); - p[1] = (byte)(p[1] * (2 - filter) * 0.5 + 127 * filter); - p[2] = (byte)(p[2] * (2 - filter) * 0.5); - } + if (AlphaEnabled) + p[3] = (srcPosition < FilterAlfha.Count) ? FilterAlfha[srcPosition] : (byte)255; - if (FilterTemporary != null && FilterTemporary.Count > 0 && FilterTemporary[srcPosition])//もし一時フィルターされていたら全体を1/2にして(127,127,0)をたす - {//GR - p[0] = (byte)(p[0] * 0.8); - p[1] = (byte)(p[1] * 0.8 + 51); - p[2] = (byte)(p[2] * 0.8 + 51); - } - if (Filter1Visible && Filter1 != null && Filter1[srcPosition])//もし飽和点にいろをつけるなら - {//R - p[0] = (byte)(p[0] * 0.8); - p[1] = (byte)(p[1] * 0.8); - p[2] = (byte)(p[2] * 0.8 + 51); - } - if (Filter2Visible && Filter2 != null && Filter2[srcPosition]) - {//B - p[0] = (byte)(p[0] * 0.8 + 51); - p[1] = (byte)(p[1] * 0.8); - p[2] = (byte)(p[2] * 0.8); - } - if (Filter3Visible && Filter3 != null && Filter3[srcPosition])//もしスポットだったら全体を1/2にして(0,127,127)をたす - {//BG - p[0] = (byte)(p[0] * 0.8 + 51); - p[1] = (byte)(p[1] * 0.8 + 51); - p[2] = (byte)(p[2] * 0.8); - } - if (Filter4Visible && Filter4 != null && Filter4[srcPosition])//もし範囲外だったら全体を2/3にして(0,85,0)をたす - {//G - p[0] = (byte)(p[0] * 0.8); - p[1] = (byte)(p[1] * 0.8 + 51); - p[2] = (byte)(p[2] * 0.8); - } - if (Filter5Visible && Filter5 != null && Filter5[srcPosition])//もし範囲外だったら全体を2/3にして(0,85,0)をたす - {//BR - p[0] = (byte)(p[0] * 0.8 + 51); - p[1] = (byte)(p[2] * 0.8); - p[2] = (byte)(p[1] * 0.8 + 51); - } - #endregion + #region 各種フィルター + if (FFT_Filter != null && FFT_Filter.Count > 0 && (filter = FFT_Filter[srcPosition]) != 0)//もしフィルターされていたら全体を1/2にして(0,127,127)をたす + { //BG + p[0] = (byte)(p[0] * (2 - filter) * 0.5 + 127 * filter); + p[1] = (byte)(p[1] * (2 - filter) * 0.5 + 127 * filter); + p[2] = (byte)(p[2] * (2 - filter) * 0.5); + } + if (FilterTemporary != null && FilterTemporary.Count > 0 && FilterTemporary[srcPosition])//もし一時フィルターされていたら全体を1/2にして(127,127,0)をたす + {//GR + p[0] = (byte)(p[0] * 0.8); + p[1] = (byte)(p[1] * 0.8 + 51); + p[2] = (byte)(p[2] * 0.8 + 51); } - else//描画域がはみ出したとき - { - p[0] = 0; p[1] = 127; p[2] = 0; - if (AlphaEnabled) - p[3] = (byte)255; + if (Filter1Visible && Filter1 != null && Filter1[srcPosition])//もし飽和点にいろをつけるなら + {//R + p[0] = (byte)(p[0] * 0.8); + p[1] = (byte)(p[1] * 0.8); + p[2] = (byte)(p[2] * 0.8 + 51); } + if (Filter2Visible && Filter2 != null && Filter2[srcPosition]) + {//B + p[0] = (byte)(p[0] * 0.8 + 51); + p[1] = (byte)(p[1] * 0.8); + p[2] = (byte)(p[2] * 0.8); + } + if (Filter3Visible && Filter3 != null && Filter3[srcPosition])//もしスポットだったら全体を1/2にして(0,127,127)をたす + {//BG + p[0] = (byte)(p[0] * 0.8 + 51); + p[1] = (byte)(p[1] * 0.8 + 51); + p[2] = (byte)(p[2] * 0.8); + } + if (Filter4Visible && Filter4 != null && Filter4[srcPosition])//もし範囲外だったら全体を2/3にして(0,85,0)をたす + {//G + p[0] = (byte)(p[0] * 0.8); + p[1] = (byte)(p[1] * 0.8 + 51); + p[2] = (byte)(p[2] * 0.8); + } + if (Filter5Visible && Filter5 != null && Filter5[srcPosition])//もし範囲外だったら全体を2/3にして(0,85,0)をたす + {//BR + p[0] = (byte)(p[0] * 0.8 + 51); + p[1] = (byte)(p[2] * 0.8); + p[2] = (byte)(p[1] * 0.8 + 51); + } + #endregion - p += step; - - beforePt = pt; } - p += nResidual; + else//描画域がはみ出したとき + { + p[0] = 0; p[1] = 127; p[2] = 0; + if (AlphaEnabled) + p[3] = (byte)255; + } + + p += step; + + beforePt = pt; } - }); + p += nResidual; + } + }); - FilterTemporary.Clear(); - FilterTemporary.AddRange(new bool[Filter1.Count]); + FilterTemporary.Clear(); + FilterTemporary.AddRange(new bool[Filter1.Count]); - destBmp.UnlockBits(bmpData); + destBmp.UnlockBits(bmpData); - justBeforeDestSize = destSize; - justBeforeSrcRect = srcRect; - return destBmp; - } + justBeforeDestSize = destSize; + justBeforeSrcRect = srcRect; + return destBmp; + } - /// - /// 実画像モードのとき回転操作を施す - /// - /// - /// - /// - public void Rotate(double angle) + /// + /// 実画像モードのとき回転操作を施す + /// + /// + /// + /// + public void Rotate(double angle) + { + Bitmap destBitmap = new Bitmap(SrcBitmap.Width, SrcBitmap.Height, PixelFormat.Format24bppRgb); + Graphics g = Graphics.FromImage(destBitmap); + g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; + g.TranslateTransform((float)SrcBitmap.Width / 2, (float)SrcBitmap.Height / 2); + g.RotateTransform((float)(angle * 180 / Math.PI)); + g.TranslateTransform(-(float)SrcBitmap.Width / 2, -(float)SrcBitmap.Height / 2); + g.Clear(Color.White); + g.DrawImage(SrcBitmap, new RectangleF(0, 0, SrcBitmap.Width, SrcBitmap.Height), new RectangleF(0, 0, SrcBitmap.Width, SrcBitmap.Height), GraphicsUnit.Pixel); + + //SourceBitmapをロックする + BitmapData bitmapData = destBitmap.LockBits(new Rectangle(0, 0, Width, Height), ImageLockMode.ReadWrite, SrcBitmap.PixelFormat); + //SouceStrideを設定しておく + int BitmapStride = bitmapData.Stride; + //次にその情報をargbValuesに転送 + byte[] bitmapByteArray = new byte[bitmapData.Stride * SrcBitmap.Height]; + Marshal.Copy(bitmapData.Scan0, bitmapByteArray, 0, bitmapByteArray.Length); + //SourceBitmapをアンロックして終了 + destBitmap.UnlockBits(bitmapData); + + if (GrayScale) { - Bitmap destBitmap = new Bitmap(SrcBitmap.Width, SrcBitmap.Height, PixelFormat.Format24bppRgb); - Graphics g = Graphics.FromImage(destBitmap); - g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; - g.TranslateTransform((float)SrcBitmap.Width / 2, (float)SrcBitmap.Height / 2); - g.RotateTransform((float)(angle * 180 / Math.PI)); - g.TranslateTransform(-(float)SrcBitmap.Width / 2, -(float)SrcBitmap.Height / 2); - g.Clear(Color.White); - g.DrawImage(SrcBitmap, new RectangleF(0, 0, SrcBitmap.Width, SrcBitmap.Height), new RectangleF(0, 0, SrcBitmap.Width, SrcBitmap.Height), GraphicsUnit.Pixel); - - //SourceBitmapをロックする - BitmapData bitmapData = destBitmap.LockBits(new Rectangle(0, 0, Width, Height), ImageLockMode.ReadWrite, SrcBitmap.PixelFormat); - //SouceStrideを設定しておく - int BitmapStride = bitmapData.Stride; - //次にその情報をargbValuesに転送 - byte[] bitmapByteArray = new byte[bitmapData.Stride * SrcBitmap.Height]; - Marshal.Copy(bitmapData.Scan0, bitmapByteArray, 0, bitmapByteArray.Length); - //SourceBitmapをアンロックして終了 - destBitmap.UnlockBits(bitmapData); - - if (GrayScale) - { - SrcValuesR.Clear(); + SrcValuesR.Clear(); - for (int yInit = 0; yInit < Height * bitmapData.Stride; yInit += BitmapStride) - for (int x = 0; x < Width; x++) - SrcValuesR.Add(bitmapByteArray[yInit + x * 3]); - SrcValuesG = SrcValuesR; - SrcValuesB = SrcValuesR; - } - else - { - SrcValuesR.Clear(); ; - SrcValuesG.Clear(); - SrcValuesB.Clear(); - for (int yInit = 0; yInit < Height * bitmapData.Stride; yInit += BitmapStride) - for (int x = 0; x < Width; x++) - { - SrcValuesR.Add(bitmapByteArray[yInit + x * 3 + 2]); - SrcValuesG.Add(bitmapByteArray[yInit + x * 3 + 1]); - SrcValuesB.Add(bitmapByteArray[yInit + x * 3 + 0]); - } - } - bitmapByteArray = null; + for (int yInit = 0; yInit < Height * bitmapData.Stride; yInit += BitmapStride) + for (int x = 0; x < Width; x++) + SrcValuesR.Add(bitmapByteArray[yInit + x * 3]); + SrcValuesG = SrcValuesR; + SrcValuesB = SrcValuesR; } + else + { + SrcValuesR.Clear(); ; + SrcValuesG.Clear(); + SrcValuesB.Clear(); + for (int yInit = 0; yInit < Height * bitmapData.Stride; yInit += BitmapStride) + for (int x = 0; x < Width; x++) + { + SrcValuesR.Add(bitmapByteArray[yInit + x * 3 + 2]); + SrcValuesG.Add(bitmapByteArray[yInit + x * 3 + 1]); + SrcValuesB.Add(bitmapByteArray[yInit + x * 3 + 0]); + } + } + bitmapByteArray = null; + } - - #endregion 操作 - } + + #endregion 操作 } \ No newline at end of file diff --git a/Crystallography/Material.cs b/Crystallography/Material.cs index 0fa0baa..a29a124 100644 --- a/Crystallography/Material.cs +++ b/Crystallography/Material.cs @@ -80,7 +80,7 @@ public class Material #region コンストラクタ //基本コンストラクタ - public Material(C4 _color, float _ambient, float _diffuse, float _specular, float _specularPow, float _emission, float _transparency = -1f) + public Material(in C4 _color, float _ambient, float _diffuse, float _specular, float _specularPow, float _emission, float _transparency = -1f) { argb = _transparency != -1f ? new C4(_color.R, _color.G, _color.B, _transparency).ToArgb() : _color.ToArgb(); ambient = toByte(_ambient); @@ -94,13 +94,13 @@ public Material(in C4 color, in (float Ambient, float Diffuse, float Specular, f : this(color, tex.Ambient, tex.Diffuse, tex.Specular, tex.SpecularPow, tex.Emission, transparency) { } public Material(in C4 color) : this(color, DefaultTexture) { } - public Material(in C4 color, float transparency) : this(color, DefaultTexture, transparency) { } - public Material(in C4 color, double transparency) : this(color, DefaultTexture, (float)transparency) { } + public Material(in C4 color, in float transparency) : this(color, DefaultTexture, transparency) { } + public Material(in C4 color, in double transparency) : this(color, DefaultTexture, (float)transparency) { } - public Material(int argb, in (float Ambient, float Diffuse, float Specular, float SpecularPow, float Emission) tex, float transparency = -1f) : + public Material(in int argb, in (float Ambient, float Diffuse, float Specular, float SpecularPow, float Emission) tex, float transparency = -1f) : this(new C4((byte)(argb >>16 & 0xff), (byte)(argb >> 8 & 0xff), (byte)(argb & 0xff), (byte)(argb >>24 & 0xff)), tex, transparency) { } - public Material(int argb, float transparency = -1f) : this(argb, DefaultTexture, transparency) { } + public Material(in int argb, in float transparency = -1f) : this(argb, DefaultTexture, transparency) { } public Material(int argb, double transparency) : this(argb, DefaultTexture, (float)transparency) { } #endregion diff --git a/Crystallography/Matrix.cs b/Crystallography/Matrix.cs index 8860608..6092fa8 100644 --- a/Crystallography/Matrix.cs +++ b/Crystallography/Matrix.cs @@ -223,11 +223,11 @@ public Matrix3D(Matrix3D m) E33 = -m1.E33 }; - public static Vector3D operator *(Matrix3D m, in Vector3D v) => m == null || v == null + public static Vector3D operator *(Matrix3D m, Vector3D v) => m == null || v == null ? null : new Vector3D(m.E11 * v.X + m.E12 * v.Y + m.E13 * v.Z, m.E21 * v.X + m.E22 * v.Y + m.E23 * v.Z, m.E31 * v.X + m.E32 * v.Y + m.E33 * v.Z); - public static Vector3DBase operator *(Matrix3D m, in Vector3DBase v) + public static Vector3DBase operator *(Matrix3D m, Vector3DBase v) => new(m.E11 * v.X + m.E12 * v.Y + m.E13 * v.Z, m.E21 * v.X + m.E22 * v.Y + m.E23 * v.Z, m.E31 * v.X + m.E32 * v.Y + m.E33 * v.Z); /// @@ -584,18 +584,18 @@ public Vector3DBase(Vector3DBase v) public static bool operator >=(Vector3DBase v1, Vector3DBase v2) => (v1.X >= v2.X && v1.Y >= v2.Y && v1.Z >= v2.Z); - public static Vector3DBase operator +(Vector3DBase v1, Vector3DBase v2) => new Vector3DBase(v1.X + v2.X, v1.Y + v2.Y, v1.Z + v2.Z); + public static Vector3DBase operator +(Vector3DBase v1, Vector3DBase v2) => new(v1.X + v2.X, v1.Y + v2.Y, v1.Z + v2.Z); - public static Vector3DBase operator -(Vector3DBase v1, Vector3DBase v2) => new Vector3DBase(v1.X - v2.X, v1.Y - v2.Y, v1.Z - v2.Z); - public static Vector3DBase operator -(Vector3DBase v1) => new Vector3DBase(-v1.X, -v1.Y, -v1.Z); + public static Vector3DBase operator -(Vector3DBase v1, Vector3DBase v2) => new(v1.X - v2.X, v1.Y - v2.Y, v1.Z - v2.Z); + public static Vector3DBase operator -(Vector3DBase v1) => new(-v1.X, -v1.Y, -v1.Z); - public static Vector3DBase operator *(in double d, Vector3DBase v1) => new Vector3DBase(d * v1.X, d * v1.Y, d * v1.Z); + public static Vector3DBase operator *(in double d, Vector3DBase v1) => new(d * v1.X, d * v1.Y, d * v1.Z); - public static Vector3DBase operator *(Vector3DBase v1, in double d) => new Vector3DBase(d * v1.X, d * v1.Y, d * v1.Z); + public static Vector3DBase operator *(Vector3DBase v1, in double d) => new(d * v1.X, d * v1.Y, d * v1.Z); - public static Vector3DBase operator *(in int d, Vector3DBase v1) => new Vector3DBase(d * v1.X, d * v1.Y, d * v1.Z); + public static Vector3DBase operator *(in int d, Vector3DBase v1) => new(d * v1.X, d * v1.Y, d * v1.Z); - public static Vector3DBase operator *(Vector3DBase v1, in int d) => new Vector3DBase(d * v1.X, d * v1.Y, d * v1.Z); + public static Vector3DBase operator *(Vector3DBase v1, in int d) => new(d * v1.X, d * v1.Y, d * v1.Z); public static double operator *(Vector3DBase v1, Vector3DBase v2) => v1.X * v2.X + v1.Y * v2.Y + v1.Z * v2.Z; @@ -661,6 +661,17 @@ internal static Vector3DBase Normarize(Vector3DBase v) public Vector3DBase Normarize() => Normarize(this); + public void NormarizeThis() + { + double l = Math.Sqrt(X * X + Y * Y + Z * Z); + if (l > 0) + { + X /= l; + Y /= l; + Z /= l; + } + } + /// /// 2‚̃xNg̊OςԂ diff --git a/Crystallography/NativeWrapper.cs b/Crystallography/NativeWrapper.cs index fc4f23e..070666e 100644 --- a/Crystallography/NativeWrapper.cs +++ b/Crystallography/NativeWrapper.cs @@ -5,7 +5,6 @@ using System; using System.Collections.Generic; using System.Buffers; -using System.Drawing.Printing; namespace Crystallography; @@ -168,32 +167,27 @@ private static extern void _Histogram( #endregion #region Nativeライブラリが有効かどうか + + /// + /// Native ライブラリが有効かどうか + /// + public static bool Enabled { get; } + static NativeWrapper() { - Enabled = enabled(); - } - static bool enabled() - { var appPath = System.Reflection.Assembly.GetExecutingAssembly().Location.Replace(".dll", ".Native.dll"); if (!System.IO.File.Exists(appPath)) - return false; + Enabled = false; else if (System.IO.File.GetCreationTime(appPath).Ticks < new DateTime(2019, 08, 06, 19, 45, 00).Ticks) - return false; + Enabled = false; try { var result = Inverse(2, new[] { new Complex(1, 0), new Complex(0, 0), new Complex(0, 0), new Complex(1, 0) }); - return result[0].Real + result[3].Real > 1; + Enabled = result[0].Real + result[3].Real > 1; } - catch { return false; } + catch { Enabled = false; } } - - /// - /// Native ライブラリが有効かどうか - /// - - public static bool Enabled { get; } - #endregion #region 変換関数 @@ -363,9 +357,8 @@ unsafe static public void Divide(int dim, in Complex[] v1, in Complex[] v2, ref #endregion - #region Blend関数 - unsafe static public void Blend(int dim, in Complex[] c0, in Complex[] c1, in Complex[] c2, in Complex[] c3, double r0, double r1, double r2, double r3, ref Complex[] result) + unsafe static public void Blend(in int dim, in Complex[] c0, in Complex[] c1, in Complex[] c2, in Complex[] c3, in double r0, in double r1, in double r2, in double r3, ref Complex[] result) { fixed (Complex* p0 = c0) fixed (Complex* p1 = c1) @@ -374,7 +367,7 @@ unsafe static public void Blend(int dim, in Complex[] c0, in Complex[] c1, in Co fixed (Complex* res = result) _Blend(dim * 2, (double*)p0, (double*)p1, (double*)p2, (double*)p3, r0, r1, r2, r3, (double*)res); } - unsafe static public void Blend(int dim, in double[] c0, in double[] c1, in double[] c2, in double[] c3, double r0, double r1, double r2, double r3, ref double[] result) + unsafe static public void Blend(in int dim, in double[] c0, in double[] c1, in double[] c2, in double[] c3, in double r0, in double r1, in double r2, in double r3, ref double[] result) { fixed (double* p0 = c0) fixed (double* p1 = c1) @@ -384,7 +377,7 @@ unsafe static public void Blend(int dim, in double[] c0, in double[] c1, in doub _Blend(dim, p0, p1, p2, p3, r0, r1, r2, r3, res); } - unsafe static public void BlendAndConjugate(int dim, in Complex[] c0, in Complex[] c1, in Complex[] c2, in Complex[] c3, double r0, double r1, double r2, double r3, ref Complex[] result) + unsafe static public void BlendAndConjugate(in int dim, in Complex[] c0, in Complex[] c1, in Complex[] c2, in Complex[] c3, in double r0, in double r1, in double r2, in double r3, ref Complex[] result) { fixed (Complex* p0 = c0) fixed (Complex* p1 = c1) @@ -396,7 +389,7 @@ unsafe static public void BlendAndConjugate(int dim, in Complex[] c0, in Complex #endregion #region STEMの非弾性散乱電子強度の計算用の特殊関数 - unsafe static public void AdjointMul_Mul_Mul(int dim, in Complex[] mat1, in Complex[] mat2, in Complex[] mat3, ref Complex[] result) + unsafe static public void AdjointMul_Mul_Mul(in int dim, in Complex[] mat1, in Complex[] mat2, in Complex[] mat3, ref Complex[] result) { fixed (Complex* _mat1 = mat1) fixed (Complex* _mat2 = mat2) @@ -405,7 +398,7 @@ unsafe static public void AdjointMul_Mul_Mul(int dim, in Complex[] mat1, in Comp _AdJointMul_Mul_Mul(dim, (double*)_mat1, (double*)_mat2, (double*)_mat3, (double*)res); } - unsafe static public void BlendAdjointMul_Mul_Mul(int dim, in Complex[] c0, in Complex[] c1, in Complex[] c2, in Complex[] c3, double r0, double r1, double r2, double r3, + unsafe static public void BlendAdjointMul_Mul_Mul(in int dim, in Complex[] c0, in Complex[] c1, in Complex[] c2, in Complex[] c3, double r0, double r1, double r2, double r3, in Complex[] mat2, in Complex[] mat3, ref Complex[] result) { fixed (Complex* p0 = c0) @@ -418,7 +411,7 @@ unsafe static public void BlendAdjointMul_Mul_Mul(int dim, in Complex[] c0, in C _BlendAdJointMul_Mul_Mul(dim, (double*)p0, (double*)p1, (double*)p2, (double*)p3, r0, r1, r2, r3, (double*)_mat2, (double*)_mat3, (double*)res); } - unsafe static public void TDS(int dim, in Complex[] mat1, in Complex[] mat2, in Complex[] mat3, ref Complex[] result) + unsafe static public void TDS(in int dim, in Complex[] mat1, in Complex[] mat2, in Complex[] mat3, ref Complex[] result) { fixed (Complex* _mat1 = mat1) fixed (Complex* _mat2 = mat2) @@ -431,14 +424,14 @@ unsafe static public void TDS(int dim, in Complex[] mat1, in Complex[] mat2, in #endregion #region Eigenライブラリーを利用して、PartialPivLuSolveを求める - unsafe static public void PartialPivLuSolve(int dim, Complex[] mat, Complex[] vec, ref Complex[] result) + unsafe static public void PartialPivLuSolve(in int dim, Complex[] mat, Complex[] vec, ref Complex[] result) { fixed (Complex* m = mat) fixed (Complex* v = vec) fixed (Complex* res = result) _PartialPivLuSolve(dim, (double*)m, (double*)v, (double*)res); } - unsafe static public Complex[] PartialPivLuSolve(int dim, Complex[] mat, Complex[] vec) + unsafe static public Complex[] PartialPivLuSolve(in int dim, Complex[] mat, Complex[] vec) { var result = GC.AllocateUninitializedArray(dim);// new Complex[dim]; PartialPivLuSolve(dim, mat, vec, ref result); @@ -524,14 +517,14 @@ static public DenseMatrix MatrixExponential(DenseMatrix mat) return new DenseMatrix(mat.ColumnCount, mat.ColumnCount, MatrixExponential(mat.ColumnCount, mat.Values)); } - static unsafe public Complex[] MatrixExponential(int dim, Complex[] mat) + static unsafe public Complex[] MatrixExponential(in int dim, Complex[] mat) { var result = GC.AllocateUninitializedArray(dim * dim);//new Complex[dim]; MatrixExponential(dim, mat, ref result); return result; } - static unsafe public void MatrixExponential(int dim, Complex[] mat, ref Complex[] result) + static unsafe public void MatrixExponential(in int dim, Complex[] mat, ref Complex[] result) { fixed (Complex* _result = result) fixed (Complex* _mat = mat) @@ -549,7 +542,7 @@ static unsafe public void MatrixExponential(int dim, Complex[] mat, ref Complex[ /// /// /// - unsafe static public Complex[] CBEDSolver_Eigen(Complex[] potential, Complex[] psi0, double[] thickness, double coeff) + unsafe static public Complex[] CBEDSolver_Eigen(Complex[] potential, Complex[] psi0, double[] thickness, in double coeff) => CBEDSolver(potential, psi0, thickness, coeff, true); /// @@ -560,10 +553,10 @@ unsafe static public Complex[] CBEDSolver_Eigen(Complex[] potential, Complex[] p /// /// /// - unsafe static public Complex[] CBEDSolver_MatExp(Complex[] potential, Complex[] psi0, double[] thickness, double coeff) + unsafe static public Complex[] CBEDSolver_MatExp(Complex[] potential, Complex[] psi0, double[] thickness, in double coeff) => CBEDSolver(potential, psi0, thickness, coeff, false); - unsafe static private Complex[] CBEDSolver(Complex[] potential, Complex[] psi0, double[] thickness, double coeff, bool eigen) + unsafe static private Complex[] CBEDSolver(Complex[] potential, Complex[] psi0, double[] thickness, in double coeff, in bool eigen) { var dim = psi0.Length; var result = GC.AllocateUninitializedArray(dim * thickness.Length);// new Complex[dim * thickness.Length]; @@ -591,7 +584,8 @@ unsafe static private Complex[] CBEDSolver(Complex[] potential, Complex[] psi0, /// /// /// - unsafe static public (Complex[] Values, Complex[] Vectors, Complex[] Alphas, Complex[] Tg) CBEDSolver2(Complex[] potential, Complex[] psi0, double[] thickness, double coeff) + unsafe static public (Complex[] Values, Complex[] Vectors, Complex[] Alphas, Complex[] Tg) + CBEDSolver2(Complex[] potential, Complex[] psi0, double[] thickness, in double coeff) { var dim = psi0.Length; var Values = GC.AllocateUninitializedArray(dim); diff --git a/Crystallography/PointD.cs b/Crystallography/PointD.cs index a270dc2..c98a08f 100644 --- a/Crystallography/PointD.cs +++ b/Crystallography/PointD.cs @@ -151,7 +151,7 @@ public struct PointD : IComparable, IEquatable public double X { get; set; } public double Y { get; set; } public object Tag { get; set; } - public readonly bool IsNaN { get => double.IsNaN(X) || double.IsNaN(Y); } + public readonly bool IsNaN => double.IsNaN(X) || double.IsNaN(Y); public readonly double Length2 => X * X + Y * Y; public readonly double Length => Math.Sqrt(X * X + Y * Y); diff --git a/Crystallography/Symmetry/Symmetry.cs b/Crystallography/Symmetry/Symmetry.cs index 4c52d3d..0bbc6d4 100644 --- a/Crystallography/Symmetry/Symmetry.cs +++ b/Crystallography/Symmetry/Symmetry.cs @@ -48,7 +48,7 @@ public readonly struct Symmetry #endregion #region RXgN^ - public Symmetry(int seriesNumber) + public Symmetry(in int seriesNumber) { if (seriesNumber >= 0 && seriesNumber < SymmetryStatic.TotalSpaceGroupNumber) { @@ -124,18 +124,21 @@ public static List> SetExtinctionFunc(Symmetry sym) #region var func = new List>(); - if (sym.LatticeTypeStr == "A") - func.Add((h, k, l) => (k + l) % 2 != 0 ? "A" : null); - else if (sym.LatticeTypeStr == "B") - func.Add((h, k, l) => (l + h) % 2 != 0 ? "B" : null); - else if (sym.LatticeTypeStr == "C") - func.Add((h, k, l) => (h + k) % 2 != 0 ? "C" : null); - else if (sym.LatticeTypeStr == "I") - func.Add((h, k, l) => (h + k + l) % 2 != 0 ? "I" : null); - else if (sym.LatticeTypeStr == "F") - func.Add((h, k, l) => ((h + k) % 2 != 0 || (k + l) % 2 != 0 || (l + h) % 2 != 0) ? "F" : null); - else if (sym.LatticeTypeStr == "R" && sym.SpaceGroupHMStr.Contains("Hex")) - func.Add((h, k, l) => (-h + k + l) % 3 != 0 ? "R" : null); + switch (sym.LatticeTypeStr) + { + case "A": + func.Add((h, k, l) => (k + l) % 2 != 0 ? "A" : null); break; + case "B": + func.Add((h, k, l) => (l + h) % 2 != 0 ? "B" : null); break; + case "C": + func.Add((h, k, l) => (h + k) % 2 != 0 ? "C" : null); break; + case "I": + func.Add((h, k, l) => (h + k + l) % 2 != 0 ? "I" : null); break; + case "F": + func.Add((h, k, l) => (h + k) % 2 != 0 || (k + l) % 2 != 0 || (l + h) % 2 != 0 ? "F" : null); break; + case "R" when sym.SpaceGroupHMStr.Contains("Hex"): + func.Add((h, k, l) => (-h + k + l) % 3 != 0 ? "R" : null); break; + } switch (sym.CrystalSystemNumber) { @@ -180,86 +183,50 @@ public static List> SetExtinctionFunc(Symmetry sym) case 3:// orthorhombic if (sym.StrSE1p == "2s1") - { func.Add((h, k, l) => h % 2 != 0 && k == 0 && l == 0 ? "2sub1//[100]" : null); - } if (sym.StrSE2p == "2s1") - { func.Add((h, k, l) => k % 2 != 0 && l == 0 && h == 0 ? "2sub1//[010]" : null); - } if (sym.StrSE3p == "2s1") - { func.Add((h, k, l) => l % 2 != 0 && h == 0 && k == 0 ? "2sub1//[001]" : null); - } if (sym.StrSE1v == "b") - { func.Add((h, k, l) => k % 2 != 0 && h == 0 ? "b[100]" : null); - } else if (sym.StrSE1v == "c") - { func.Add((h, k, l) => l % 2 != 0 && h == 0 ? "c[100]" : null); - } else if (sym.StrSE1v == "n") - { func.Add((h, k, l) => (k + l) % 2 != 0 && h == 0 ? "n[100]" : null); - } else if (sym.StrSE1v == "d") - { func.Add((h, k, l) => (k + l) % 4 != 0 && h == 0 ? "d[100]" : null); - } if (sym.StrSE2v == "a") - { func.Add((h, k, l) => h % 2 != 0 && k == 0 ? "a[010]" : null); - } else if (sym.StrSE2v == "c") - { func.Add((h, k, l) => l % 2 != 0 && k == 0 ? "c[010]" : null); - } else if (sym.StrSE2v == "n") - { func.Add((h, k, l) => (h + l) % 2 != 0 && k == 0 ? "n[010]" : null); - } else if (sym.StrSE2v == "d") - { func.Add((h, k, l) => (h + l) % 4 != 0 && k == 0 ? "d[010]" : null); - } if (sym.StrSE3v == "a") - { func.Add((h, k, l) => h % 2 != 0 && l == 0 ? "a[001]" : null); - } else if (sym.StrSE3v == "b") - { func.Add((h, k, l) => k % 2 != 0 && l == 0 ? "b[001]" : null); - } else if (sym.StrSE3v == "n") - { func.Add((h, k, l) => (h + k) % 2 != 0 && l == 0 ? "n[001]" : null); - } else if (sym.StrSE3v == "d") - { func.Add((h, k, l) => (h + k) % 4 != 0 && l == 0 ? "d[001]" : null); - } break; case 4:// tetragonal if (sym.StrSE1p == "4s1") - { func.Add((h, k, l) => h == 0 && k == 0 && l % 4 != 0 ? "4sub1//[001]" : null); - } else if (sym.StrSE1p == "4s2") - { func.Add((h, k, l) => h == 0 && k == 0 && l % 2 != 0 ? "4sub2//[001]" : null); - } else if (sym.StrSE1p == "4s3") - { func.Add((h, k, l) => h == 0 && k == 0 && l % 4 != 0 ? "4sub3//[001]" : null); - } if (sym.StrSE2p == "2s1") { @@ -310,13 +277,9 @@ public static List> SetExtinctionFunc(Symmetry sym) case 5:// trigonal if (sym.StrSE1p == "3s1") - { func.Add((h, k, l) => h == 0 && k == 0 && l % 3 != 0 ? "3sub1//[001]" : null); - } else if (sym.StrSE1p == "3s2") - { func.Add((h, k, l) => h == 0 && k == 0 && l % 3 != 0 ? "3sub2//[001]" : null); - } if (sym.SpaceGroupHMsubStr != "R")//HexZ̏ꍇ { @@ -346,51 +309,29 @@ public static List> SetExtinctionFunc(Symmetry sym) case 6:// hexagonal if (sym.StrSE1p == "6s1") - { func.Add((h, k, l) => h == 0 && k == 0 && l % 6 != 0 ? "6sub1//[001]" : null); - } else if (sym.StrSE1p == "6s2") - { func.Add((h, k, l) => h == 0 && k == 0 && l % 3 != 0 ? "6sub2//[001]" : null); - } else if (sym.StrSE1p == "6s3") - { func.Add((h, k, l) => h == 0 && k == 0 && l % 2 != 0 ? "6sub3//[001]" : null); - } else if (sym.StrSE1p == "6s4") - { func.Add((h, k, l) => h == 0 && k == 0 && l % 3 != 0 ? "6sub4//[001]" : null); - } else if (sym.StrSE1p == "6s5") - { func.Add((h, k, l) => h == 0 && k == 0 && l % 6 != 0 ? "6sub5//[001]" : null); - } if (sym.StrSE2v == "c") - { func.Add((h, k, l) => l % 2 != 0 && h == -k ? "c[-1-10]" : null); - } else if (sym.StrSE2v == "c") - { func.Add((h, k, l) => l % 2 != 0 && h == 0 ? "c[100]" : null); - } else if (sym.StrSE2v == "c") - { func.Add((h, k, l) => l % 2 != 0 && k == 0 ? "c[010]" : null); - } if (sym.StrSE3v == "c") - { func.Add((h, k, l) => l % 2 != 0 && h == k ? "c[1-10]" : null); - } else if (sym.StrSE3v == "c") - { func.Add((h, k, l) => l % 2 != 0 && h == -2 * k ? "c[120]" : null); - } else if (sym.StrSE3v == "c") - { func.Add((h, k, l) => l % 2 != 0 && -2 * h == k ? "c[-2-10]" : null); - } break; diff --git a/Crystallography/Symmetry/SymmetryOperation.cs b/Crystallography/Symmetry/SymmetryOperation.cs index 82dd904..656f384 100644 --- a/Crystallography/Symmetry/SymmetryOperation.cs +++ b/Crystallography/Symmetry/SymmetryOperation.cs @@ -1,165 +1,164 @@ using System; -namespace Crystallography +namespace Crystallography; + +[Serializable()] +/// +/// Seitz表記によるSymmetry operationを表現するクラス SymmatryStaticで初期化される +/// +public readonly struct SymmetryOperation { - [Serializable()] + public ushort SeriesNumber { get;} + /// - /// Seitz表記によるSymmetry operationを表現するクラス SymmatryStaticで初期化される + /// 回転の次数. 1, 2, 3, 4, 6, -1, -2(=m), -3, -4, -6のいずれか /// - public readonly struct SymmetryOperation - { - public ushort SeriesNumber { get;} - - /// - /// 回転の次数. 1, 2, 3, 4, 6, -1, -2(=m), -3, -4, -6のいずれか - /// - public short Order { get;} + public short Order { get;} - /// - /// 回転の方向. trueは +1か falseは -1のいずれか - /// - public bool Sense { get;} + /// + /// 回転の方向. trueは +1か falseは -1のいずれか + /// + public bool Sense { get;} - /// - /// 回転の軸. - /// - public (int U, int V, int W) Direction {get;} + /// + /// 回転の軸. + /// + public (int U, int V, int W) Direction {get;} - /// - /// 並進ベクトル - /// - public (double U, double V, double W) Translation { get; } + /// + /// 並進ベクトル + /// + public (double U, double V, double W) Translation { get; } - public SymmetryOperation(int order, int sense,in (int U, int V, int W) direction,in (double U, double V, double W) translation) - { - SeriesNumber = 0; - Order = (short)order; - Sense = sense == 1; - Direction = direction; - Translation = translation; - } + public SymmetryOperation(int order, int sense,in (int U, int V, int W) direction,in (double U, double V, double W) translation) + { + SeriesNumber = 0; + Order = (short)order; + Sense = sense == 1; + Direction = direction; + Translation = translation; + } - public SymmetryOperation(SymmetryOperation so, int seriesNumber, double shiftU, double shiftV, double shiftW) - { - SeriesNumber = (ushort)seriesNumber; - Order = so.Order; - Sense = so.Sense; - Direction = so.Direction; - Translation = (so.Translation.U + shiftU, so.Translation.V + shiftV, so.Translation.W + shiftW); - } + public SymmetryOperation(SymmetryOperation so, int seriesNumber, double shiftU, double shiftV, double shiftW) + { + SeriesNumber = (ushort)seriesNumber; + Order = so.Order; + Sense = so.Sense; + Direction = so.Direction; + Translation = (so.Translation.U + shiftU, so.Translation.V + shiftV, so.Translation.W + shiftW); + } - public SymmetryOperation(SymmetryOperation so, int seriesNumber) - { - SeriesNumber = (ushort)seriesNumber; - Order = so.Order; - Sense = so.Sense; - Direction = so.Direction; - Translation = so.Translation; - } + public SymmetryOperation(SymmetryOperation so, int seriesNumber) + { + SeriesNumber = (ushort)seriesNumber; + Order = so.Order; + Sense = so.Sense; + Direction = so.Direction; + Translation = so.Translation; + } - public (int H, int K, int L) ConvertPlaneIndex((int H, int K, int L) index) - => ConvertPlaneIndex(index.H, index.K, index.L); + public (int H, int K, int L) ConvertPlaneIndex((int H, int K, int L) index) + => ConvertPlaneIndex(index.H, index.K, index.L); - public (int H, int K, int L) ConvertPlaneIndex(int h, int k, int l) + public (int H, int K, int L) ConvertPlaneIndex(int h, int k, int l) + { + if (Order == 1) + return (h, k, l); + else if (Order == -1) + return (-h, -k, -l); + else { - if (Order == 1) - return (h, k, l); - else if (Order == -1) - return (-h, -k, -l); - else - { - (int H, int K, int L) p = (0, 0, 0); + (int H, int K, int L) p = (0, 0, 0); - if (SymmetryStatic.NumArray[SeriesNumber][5] == 5 || SymmetryStatic.NumArray[SeriesNumber][5] == 6) - {//trigonalかHexagonalの場合 - if (SymmetryStatic.NumArray[SeriesNumber][2] == 1) - {//Hexaセッティングの時 - if (Math.Abs(Order) == 2) - { - p = Direction switch - { - (0, 0, 1) => (-h, -k, l), - (1, 0, 0) => (h, -h - k, -l), - (0, 1, 0) => (-h - k, k, -l), - (1, 1, 0) => (k, h, -l), - (1, -1, 0) => (-k, -h, -l), - (2, 1, 0) => (-h, h + k, -l), - (1, 2, 0) => (h + k, -k, -l), - _ => (0, 0, 0) - }; - } - else if (Math.Abs(Order) == 3) - { - if (Direction == (0, 0, 1)) - p = Sense ? (k, -h - k, l) : (-h - k, h, l); - } - else if (Math.Abs(Order) == 6) - { - if (Direction == (0, 0, 1)) - p = Sense ? (h + k, -h, l) : (-k, h + k, l); - } - } - else - {//Rhomboセッティングの時 - if (Math.Abs(Order) == 2) - { - p = Direction switch - { - (0, 1, -1) => (-h, -l, -k), - (-1, 0, 1) => (-l, -k, -h), - (1, -1, 0) => (-k, -h, -l), - _ => (0, 0, 0) - }; - } - else if (Math.Abs(Order) == 3) - { - if (Direction == (1, 1, 1)) - p = Sense ? (k, l, h) : (l, h, k); - } - } - } - else - {//trigonalでもHexagonalでもない場合 + if (SymmetryStatic.NumArray[SeriesNumber][5] == 5 || SymmetryStatic.NumArray[SeriesNumber][5] == 6) + {//trigonalかHexagonalの場合 + if (SymmetryStatic.NumArray[SeriesNumber][2] == 1) + {//Hexaセッティングの時 if (Math.Abs(Order) == 2) { p = Direction switch { - (1, 0, 0) => (h, -k, -l), - (0, 1, 0) => (-h, k, -l), (0, 0, 1) => (-h, -k, l), - (0, 1, 1) => (-h, l, k), - (1, 0, 1) => (l, -k, h), + (1, 0, 0) => (h, -h - k, -l), + (0, 1, 0) => (-h - k, k, -l), (1, 1, 0) => (k, h, -l), - (0, 1, -1) => (-h, -l, -k), - (-1, 0, 1) => (-l, -k, -h), (1, -1, 0) => (-k, -h, -l), + (2, 1, 0) => (-h, h + k, -l), + (1, 2, 0) => (h + k, -k, -l), _ => (0, 0, 0) }; } else if (Math.Abs(Order) == 3) { - p = Direction switch - { - (+1, +1, +1) => Sense ? (+k, +l, +h) : (+l, +h, +k), - (+1, -1, -1) => Sense ? (-k, +l, -h) : (-l, -h, +k), - (-1, +1, -1) => Sense ? (-k, -l, +h) : (+l, -h, -k), - (-1, -1, +1) => Sense ? (+k, -l, -h) : (-l, +h, -k), - _ => (0, 0, 0) - }; + if (Direction == (0, 0, 1)) + p = Sense ? (k, -h - k, l) : (-h - k, h, l); + } + else if (Math.Abs(Order) == 6) + { + if (Direction == (0, 0, 1)) + p = Sense ? (h + k, -h, l) : (-k, h + k, l); } - else if (Math.Abs(Order) == 4) + } + else + {//Rhomboセッティングの時 + if (Math.Abs(Order) == 2) { p = Direction switch { - (1, 0, 0) => Sense ? (h, l, -k) : (h, -l, k), - (0, 1, 0) => Sense ? (-l, k, h) : (l, k, -h), - (0, 0, 1) => Sense ? (k, -h, l) : (-k, h, l), + (0, 1, -1) => (-h, -l, -k), + (-1, 0, 1) => (-l, -k, -h), + (1, -1, 0) => (-k, -h, -l), _ => (0, 0, 0) }; } + else if (Math.Abs(Order) == 3) + { + if (Direction == (1, 1, 1)) + p = Sense ? (k, l, h) : (l, h, k); + } + } + } + else + {//trigonalでもHexagonalでもない場合 + if (Math.Abs(Order) == 2) + { + p = Direction switch + { + (1, 0, 0) => (h, -k, -l), + (0, 1, 0) => (-h, k, -l), + (0, 0, 1) => (-h, -k, l), + (0, 1, 1) => (-h, l, k), + (1, 0, 1) => (l, -k, h), + (1, 1, 0) => (k, h, -l), + (0, 1, -1) => (-h, -l, -k), + (-1, 0, 1) => (-l, -k, -h), + (1, -1, 0) => (-k, -h, -l), + _ => (0, 0, 0) + }; + } + else if (Math.Abs(Order) == 3) + { + p = Direction switch + { + (+1, +1, +1) => Sense ? (+k, +l, +h) : (+l, +h, +k), + (+1, -1, -1) => Sense ? (-k, +l, -h) : (-l, -h, +k), + (-1, +1, -1) => Sense ? (-k, -l, +h) : (+l, -h, -k), + (-1, -1, +1) => Sense ? (+k, -l, -h) : (-l, +h, -k), + _ => (0, 0, 0) + }; + } + else if (Math.Abs(Order) == 4) + { + p = Direction switch + { + (1, 0, 0) => Sense ? (h, l, -k) : (h, -l, k), + (0, 1, 0) => Sense ? (-l, k, h) : (l, k, -h), + (0, 0, 1) => Sense ? (k, -h, l) : (-k, h, l), + _ => (0, 0, 0) + }; } - return Order > 0 ? p : (-p.H, -p.K, -p.L); } + return Order > 0 ? p : (-p.H, -p.K, -p.L); } } } \ No newline at end of file diff --git a/Crystallography/Symmetry/SymmetryStatic.cs b/Crystallography/Symmetry/SymmetryStatic.cs index 472fd6d..bd036f7 100644 --- a/Crystallography/Symmetry/SymmetryStatic.cs +++ b/Crystallography/Symmetry/SymmetryStatic.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Threading.Tasks; using SO = Crystallography.SymmetryOperation; namespace Crystallography; @@ -23,3123 +22,7 @@ public static class SymmetryStatic #endregion #region static fields - public static readonly ushort[][][] PositionsDictionary; - public static readonly Func[] PositionGeneratorList; - public static readonly Func[] PositionGeneratorListA, PositionGeneratorListB, PositionGeneratorListC, PositionGeneratorListI; - public static readonly Func[] PositionGeneratorListR1, PositionGeneratorListR2; - public static readonly string[] PositionStringList; - public static readonly ushort[][] OperationDictionary; - public static readonly SO[] OperationList; - public static readonly byte[][] SiteSymmetryDictionary; - public static readonly string[] SiteSymmetryList; - public static readonly ushort[][][] BelongingNumberOfSymmetry = new ushort[][][]{ - #region BelongingNumberOfSymmetry - new ushort[][]{//unknown - new ushort[]{0} - }, - //triclinic - new ushort[][]{ - new ushort[]{1,536,537,538,539}, - new ushort[]{2,533,534,531,532,535} - }, - //mono - new ushort[][]{ - new ushort[]{3,4,5,6,7,8,9,10,11,12,13,14,15,16,17}, - new ushort[]{18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56}, - new ushort[]{57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107} - }, - //ortho - new ushort[][]{ - new ushort[]{108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124}, - new ushort[]{125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226}, - new ushort[]{227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348} - }, - //tetra - new ushort[][]{ - new ushort[]{349,350,351,352,353,354}, - new ushort[]{355,356}, - new ushort[]{357,358,359,360,361,362,363,364,365}, - new ushort[]{366,367,368,369,370,371,372,373,374,375}, - new ushort[]{376,377,378,379,380,381,382,383,384,385,386,387}, - new ushort[]{388,389,390,391,392,393,394,395,396,397,398,399}, - new ushort[]{400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429} - }, - //trigonal - new ushort[][]{ - new ushort[]{430,431,432,433,434}, - new ushort[]{435,436,437}, - new ushort[]{438,439,440,441,442,443,444,445}, - new ushort[]{446,447,448,449,450,451,452,453}, - new ushort[]{454,455,456,457,458,459,460,461} - }, - //hexa - new ushort[][]{ - new ushort[]{462,463,464,465,466,467}, - new ushort[]{468}, - new ushort[]{469,470}, - new ushort[]{471,472,473,474,475,476}, - new ushort[]{477,478,479,480}, - new ushort[]{481,482,483,484}, - new ushort[]{485,486,487,488} - }, - //cubic - new ushort[][]{ - new ushort[]{489,490,491,492,493}, - new ushort[]{494,495,496,497,498,499,500,501,502}, - new ushort[]{503,504,505,506,507,508,509,510}, - new ushort[]{511,512,513,514,515,516}, - new ushort[]{517,518,519,520,521,522,523,524,525,526,527,528,529,530} - } - #endregion - }; - - public static readonly Symmetry[] Symmetries; - - /// - /// WyckoffPositions[i][j]: 通し番号がi番目の空間群のj番目のワイコフ位置 - /// - public static readonly WyckoffPosition[][] WyckoffPositions; - - /// - /// 0:extra表記 1:SF表記 2 Hall表記 3:HM表記 4HM表記full 5:主軸 6 :格子タイプ - /// 7:1軸平行操作 8:1軸垂直操作, 9:2軸平行操作, 10:2軸垂直操作, 11:3軸平行操作, 12:3軸垂直操作 - /// 13:点群名前HM, 14:点群名前SF, 15:ラウエ, 16:結晶系 - /// - public static readonly string[][] StrArray; - - /// - /// 0:通し番号 1:空間群番号 2:空間群のSub番号 3:点群番号 4:ラウエ群番号 5:結晶系番号 - /// - public static readonly ushort[][] NumArray; - - public enum CrystalSystem { Unknown = 0, Triclinic = 1, Monoclinic = 2, Orthorhombic = 3, Tetragonal = 4, Trigonal = 5, Hexagonal = 6, Cubic = 7 }; - - public static readonly int TotalSpaceGroupNumber; - public static readonly string[] SpaceGroupListWithoutSpace; - #endregion - - #region static コンストラクタ - /// - /// 静的コンストラクタ - /// - static SymmetryStatic() - { - TotalSpaceGroupNumber = BelongingNumberOfSymmetry.Sum(b1 => b1.Sum(b2 => b2.Length)); - - //static readonly な定数をTaskで設定。あまり効果ないか。。。 - Task[]> task0 = Task.Run(() => new Func[] - { - #region PositionGenerator -(_,_,_) => (0,0,0), //0 -(_,_,_) => (0,0,d12), //1 -(_,_,_) => (0,0,d13), //2 -(_,_,_) => (0,0,d14), //3 -(_,_,_) => (0,0,d16), //4 -(_,_,_) => (0,0,d23), //5 -(_,_,_) => (0,0,d34), //6 -(_,_,_) => (0,0,d56), //7 -(x,_,_) => (0,0,x), //8 -(x,_,_) => (0,0,-x), //9 -(_,_,z) => (0,0,z), //10 -(_,_,z) => (0,0,-z), //11 -(_,_,z) => (0,0,z+d12), //12 -(_,_,z) => (0,0,-z+d12), //13 -(_,_,z) => (0,0,z+d13), //14 -(_,_,z) => (0,0,-z+d13), //15 -(_,_,z) => (0,0,z+d23), //16 -(_,_,z) => (0,0,-z+d23), //17 -(_,_,_) => (0,d12,0), //18 -(_,_,_) => (0,d12,d12), //19 -(_,_,_) => (0,d12,d13), //20 -(_,_,_) => (0,d12,d14), //21 -(_,_,_) => (0,d12,d16), //22 -(_,_,_) => (0,d12,d23), //23 -(_,_,_) => (0,d12,d34), //24 -(_,_,_) => (0,d12,d56), //25 -(x,_,_) => (0,d12,x), //26 -(x,_,_) => (0,d12,-x), //27 -(x,_,_) => (0,d12,x+d12), //28 -(x,_,_) => (0,d12,-x+d12), //29 -(_,_,z) => (0,d12,z), //30 -(_,_,z) => (0,d12,-z), //31 -(_,_,z) => (0,d12,z+d12), //32 -(_,_,z) => (0,d12,-z+d12), //33 -(_,_,z) => (0,d12,z+d13), //34 -(_,_,z) => (0,d12,-z+d13), //35 -(_,_,z) => (0,d12,z+d14), //36 -(_,_,z) => (0,d12,-z+d14), //37 -(_,_,z) => (0,d12,z+d23), //38 -(_,_,z) => (0,d12,-z+d23), //39 -(_,_,z) => (0,d12,z+d34), //40 -(_,_,_) => (0,d14,0), //41 -(_,_,_) => (0,d14,d12), //42 -(_,_,_) => (0,d14,d14), //43 -(_,_,_) => (0,d14,d18), //44 -(_,_,_) => (0,d14,d34), //45 -(_,_,_) => (0,d14,d38), //46 -(_,_,_) => (0,d14,d58), //47 -(_,_,_) => (0,d14,d78), //48 -(x,_,_) => (0,d14,x), //49 -(x,_,_) => (0,d14,x+d12), //50 -(x,_,_) => (0,d14,-x+d14), //51 -(x,_,_) => (0,d14,-x+d34), //52 -(_,_,z) => (0,d14,z), //53 -(_,_,z) => (0,d14,-z), //54 -(_,_,z) => (0,d14,z+d12), //55 -(_,_,z) => (0,d14,-z+d12), //56 -(_,_,z) => (0,d14,-z+d34), //57 -(_,_,_) => (0,d34,0), //58 -(_,_,_) => (0,d34,d12), //59 -(_,_,_) => (0,d34,d14), //60 -(_,_,_) => (0,d34,d18), //61 -(_,_,_) => (0,d34,d34), //62 -(_,_,_) => (0,d34,d38), //63 -(_,_,_) => (0,d34,d58), //64 -(_,_,_) => (0,d34,d78), //65 -(x,_,_) => (0,d34,-x), //66 -(x,_,_) => (0,d34,-x+d12), //67 -(x,_,_) => (0,d34,x+d34), //68 -(_,_,z) => (0,d34,z), //69 -(_,_,z) => (0,d34,-z), //70 -(_,_,z) => (0,d34,z+d12), //71 -(_,_,z) => (0,d34,-z+d12), //72 -(_,_,z) => (0,d34,z+d14), //73 -(x,_,_) => (0,x,0), //74 -(x,_,_) => (0,-x,0), //75 -(x,_,_) => (0,x,d12), //76 -(x,_,_) => (0,-x,d12), //77 -(x,_,_) => (0,x,d13), //78 -(x,_,_) => (0,-x,d13), //79 -(x,_,_) => (0,x,d14), //80 -(x,_,_) => (0,-x,d14), //81 -(x,_,_) => (0,x,d16), //82 -(x,_,_) => (0,-x,d16), //83 -(x,_,_) => (0,x,d23), //84 -(x,_,_) => (0,-x,d23), //85 -(x,_,_) => (0,x,d34), //86 -(x,_,_) => (0,-x,d34), //87 -(x,_,_) => (0,x,d56), //88 -(x,_,_) => (0,-x,d56), //89 -(x,_,_) => (0,x,-x), //90 -(x,_,_) => (0,-x,x), //91 -(x,_,z) => (0,x,z), //92 -(x,_,z) => (0,x,-z), //93 -(x,_,z) => (0,-x,z), //94 -(x,_,z) => (0,-x,-z), //95 -(x,_,z) => (0,x,z+d12), //96 -(x,_,z) => (0,x,-z+d12), //97 -(x,_,z) => (0,-x,z+d12), //98 -(x,_,_) => (0,-x+d12,0), //99 -(x,_,_) => (0,x+d12,d12), //100 -(x,_,_) => (0,-x+d12,d12), //101 -(_,y,_) => (0,y,0), //102 -(_,y,_) => (0,-y,0), //103 -(_,y,_) => (0,y,d12), //104 -(_,y,_) => (0,-y,d12), //105 -(_,y,_) => (0,y,d14), //106 -(_,y,_) => (0,-y,d14), //107 -(_,y,_) => (0,y,d34), //108 -(_,y,_) => (0,-y,d34), //109 -(_,y,_) => (0,y,y), //110 -(_,y,_) => (0,y,-y), //111 -(_,y,_) => (0,-y,y), //112 -(_,y,_) => (0,-y,-y), //113 -(_,y,_) => (0,y,y+d12), //114 -(_,y,_) => (0,-y,-y+d12), //115 -(_,y,z) => (0,y,z), //116 -(_,y,z) => (0,y,-z), //117 -(_,y,z) => (0,-y,z), //118 -(_,y,z) => (0,-y,-z), //119 -(_,y,z) => (0,y,-z+d12), //120 -(_,y,z) => (0,-y,z+d12), //121 -(_,y,_) => (0,y+d12,0), //122 -(_,y,_) => (0,-y+d12,0), //123 -(_,y,_) => (0,y+d12,d12), //124 -(_,y,_) => (0,-y+d12,d12), //125 -(_,y,_) => (0,y+d12,d14), //126 -(_,y,_) => (0,-y+d12,d14), //127 -(_,y,_) => (0,y+d12,d34), //128 -(_,y,_) => (0,-y+d12,d34), //129 -(_,y,_) => (0,y+d12,y), //130 -(_,y,_) => (0,-y+d12,-y), //131 -(_,y,_) => (0,y+d12,-y+d12), //132 -(_,y,_) => (0,-y+d12,y+d12), //133 -(_,y,z) => (0,y+d12,-z), //134 -(_,y,z) => (0,-y+d12,z), //135 -(_,y,z) => (0,y+d12,-z+d12), //136 -(_,y,z) => (0,-y+d12,z+d12), //137 -(_,y,z) => (0,-y+d12,-z+d14), //138 -(_,y,_) => (0,y+d14,y+d12), //139 -(_,y,_) => (0,-y+d34,-y+d12), //140 -(_,y,z) => (0,z,y), //141 -(_,y,z) => (0,z,-y), //142 -(_,y,z) => (0,-z,y), //143 -(_,y,z) => (0,-z,-y), //144 -(_,_,_) => (d12,0,0), //145 -(_,_,_) => (d12,0,d12), //146 -(_,_,_) => (d12,0,d14), //147 -(_,_,_) => (d12,0,d34), //148 -(x,_,_) => (d12,0,x), //149 -(x,_,_) => (d12,0,-x), //150 -(x,_,_) => (d12,0,x+d12), //151 -(x,_,_) => (d12,0,-x+d12), //152 -(_,_,z) => (d12,0,z), //153 -(_,_,z) => (d12,0,-z), //154 -(_,_,z) => (d12,0,z+d12), //155 -(_,_,z) => (d12,0,-z+d12), //156 -(_,_,z) => (d12,0,z+d13), //157 -(_,_,z) => (d12,0,z+d14), //158 -(_,_,z) => (d12,0,-z+d14), //159 -(_,_,z) => (d12,0,z+d23), //160 -(_,_,z) => (d12,0,z+d34), //161 -(_,_,z) => (d12,0,-z+d34), //162 -(_,_,_) => (d12,d12,0), //163 -(_,_,_) => (d12,d12,d12), //164 -(_,_,_) => (d12,d12,d13), //165 -(_,_,_) => (d12,d12,d14), //166 -(_,_,_) => (d12,d12,d16), //167 -(_,_,_) => (d12,d12,d23), //168 -(_,_,_) => (d12,d12,d34), //169 -(_,_,_) => (d12,d12,d56), //170 -(x,_,_) => (d12,d12,x), //171 -(x,_,_) => (d12,d12,-x), //172 -(x,_,_) => (d12,d12,x+d12), //173 -(x,_,_) => (d12,d12,-x+d12), //174 -(_,_,z) => (d12,d12,z), //175 -(_,_,z) => (d12,d12,-z), //176 -(_,_,z) => (d12,d12,z+d12), //177 -(_,_,z) => (d12,d12,-z+d12), //178 -(_,_,z) => (d12,d12,z+d13), //179 -(_,_,z) => (d12,d12,-z+d13), //180 -(_,_,z) => (d12,d12,z+d23), //181 -(_,_,z) => (d12,d12,-z+d23), //182 -(_,_,_) => (d12,d14,0), //183 -(_,_,_) => (d12,d14,d12), //184 -(_,_,_) => (d12,d14,d14), //185 -(_,_,_) => (d12,d14,d18), //186 -(_,_,_) => (d12,d14,d34), //187 -(_,_,_) => (d12,d14,d38), //188 -(_,_,_) => (d12,d14,d58), //189 -(_,_,_) => (d12,d14,d78), //190 -(x,_,_) => (d12,d14,x+d14), //191 -(x,_,_) => (d12,d14,x+d34), //192 -(_,_,z) => (d12,d14,z), //193 -(_,_,z) => (d12,d14,-z), //194 -(_,_,z) => (d12,d14,z+d12), //195 -(_,_,z) => (d12,d14,-z+d12), //196 -(_,_,z) => (d12,d14,z+d14), //197 -(_,_,_) => (d12,d34,0), //198 -(_,_,_) => (d12,d34,d12), //199 -(_,_,_) => (d12,d34,d14), //200 -(_,_,_) => (d12,d34,d34), //201 -(_,_,_) => (d12,d34,d38), //202 -(x,_,_) => (d12,d34,-x+d14), //203 -(_,_,z) => (d12,d34,z), //204 -(_,_,z) => (d12,d34,-z), //205 -(_,_,z) => (d12,d34,z+d12), //206 -(_,_,z) => (d12,d34,-z+d12), //207 -(_,_,z) => (d12,d34,-z+d14), //208 -(_,_,z) => (d12,d34,-z+d34), //209 -(x,_,_) => (d12,x,0), //210 -(x,_,_) => (d12,-x,0), //211 -(x,_,_) => (d12,x,d12), //212 -(x,_,_) => (d12,-x,d12), //213 -(x,_,_) => (d12,x,d14), //214 -(x,_,_) => (d12,-x,d14), //215 -(x,_,_) => (d12,x,d34), //216 -(x,_,_) => (d12,-x,d34), //217 -(x,_,_) => (d12,x,-x), //218 -(x,_,_) => (d12,-x,x), //219 -(x,_,z) => (d12,x,z), //220 -(x,_,z) => (d12,x,-z), //221 -(x,_,z) => (d12,-x,z), //222 -(x,_,z) => (d12,-x,-z), //223 -(x,_,z) => (d12,x,z+d12), //224 -(x,_,z) => (d12,-x,z+d12), //225 -(x,_,_) => (d12,x+d12,0), //226 -(x,_,_) => (d12,-x+d12,0), //227 -(x,_,_) => (d12,x+d12,d12), //228 -(x,_,_) => (d12,-x+d12,d12), //229 -(x,_,_) => (d12,x+d12,d14), //230 -(x,_,_) => (d12,-x+d12,d14), //231 -(x,_,_) => (d12,x+d12,d34), //232 -(x,_,_) => (d12,-x+d12,d34), //233 -(_,y,_) => (d12,y,0), //234 -(_,y,_) => (d12,-y,0), //235 -(_,y,_) => (d12,y,d12), //236 -(_,y,_) => (d12,-y,d12), //237 -(_,y,_) => (d12,y,d14), //238 -(_,y,_) => (d12,-y,d14), //239 -(_,y,_) => (d12,y,d34), //240 -(_,y,_) => (d12,-y,d34), //241 -(_,y,_) => (d12,y,y), //242 -(_,y,_) => (d12,y,-y), //243 -(_,y,_) => (d12,-y,y), //244 -(_,y,_) => (d12,-y,-y), //245 -(_,y,_) => (d12,y,y+d12), //246 -(_,y,_) => (d12,-y,-y+d12), //247 -(_,y,z) => (d12,y,z), //248 -(_,y,z) => (d12,y,-z), //249 -(_,y,z) => (d12,-y,z), //250 -(_,y,z) => (d12,-y,-z), //251 -(_,y,z) => (d12,y,-z+d12), //252 -(_,y,z) => (d12,-y,z+d12), //253 -(_,y,z) => (d12,-y,-z+d12), //254 -(_,y,z) => (d12,y,-z+d34), //255 -(_,y,_) => (d12,y+d12,0), //256 -(_,y,_) => (d12,-y+d12,0), //257 -(_,y,_) => (d12,y+d12,d12), //258 -(_,y,_) => (d12,-y+d12,d12), //259 -(_,y,_) => (d12,y+d12,d14), //260 -(_,y,_) => (d12,-y+d12,d14), //261 -(_,y,_) => (d12,y+d12,d34), //262 -(_,y,_) => (d12,-y+d12,d34), //263 -(_,y,_) => (d12,y+d12,y), //264 -(_,y,_) => (d12,-y+d12,-y), //265 -(_,y,_) => (d12,y+d12,y+d12), //266 -(_,y,_) => (d12,y+d12,-y+d12), //267 -(_,y,_) => (d12,-y+d12,y+d12), //268 -(_,y,_) => (d12,-y+d12,-y+d12), //269 -(_,y,_) => (d12,y+d12,y+d14), //270 -(_,y,_) => (d12,-y+d12,-y+d34), //271 -(_,y,z) => (d12,y+d12,-z), //272 -(_,y,z) => (d12,-y+d12,z), //273 -(_,y,z) => (d12,-y+d12,-z), //274 -(_,y,z) => (d12,y+d12,-z+d12), //275 -(_,y,z) => (d12,-y+d12,z+d12), //276 -(_,y,z) => (d12,-y+d12,-z+d12), //277 -(_,y,_) => (d12,y+d14,-y+d34), //278 -(_,y,_) => (d12,-y+d34,y+d14), //279 -(_,y,z) => (d12,z,y), //280 -(_,y,z) => (d12,z,-y), //281 -(_,y,z) => (d12,-z,y), //282 -(_,y,z) => (d12,-z,-y), //283 -(_,y,z) => (d12,z+d12,y+d12), //284 -(_,y,z) => (d12,z+d12,-y+d12), //285 -(_,y,z) => (d12,-z+d12,y+d12), //286 -(_,y,z) => (d12,-z+d12,-y+d12), //287 -(_,_,_) => (d13,d23,0), //288 -(_,_,_) => (d13,d23,d12), //289 -(_,_,_) => (d13,d23,d14), //290 -(_,_,_) => (d13,d23,d34), //291 -(_,_,z) => (d13,d23,z), //292 -(_,_,z) => (d13,d23,-z), //293 -(_,_,z) => (d13,d23,z+d12), //294 -(_,_,z) => (d13,d23,-z+d12), //295 -(_,_,_) => (d14,0,0), //296 -(_,_,_) => (d14,0,d12), //297 -(_,_,_) => (d14,0,d14), //298 -(_,_,_) => (d14,0,d34), //299 -(_,_,z) => (d14,0,z), //300 -(_,_,z) => (d14,0,-z), //301 -(_,_,z) => (d14,0,z+d12), //302 -(_,_,z) => (d14,0,-z+d12), //303 -(_,_,_) => (d14,d12,0), //304 -(_,_,_) => (d14,d12,d12), //305 -(_,_,_) => (d14,d12,d14), //306 -(_,_,_) => (d14,d12,d34), //307 -(_,_,z) => (d14,d12,z), //308 -(_,_,z) => (d14,d12,-z), //309 -(_,_,z) => (d14,d12,z+d12), //310 -(_,_,z) => (d14,d12,-z+d12), //311 -(_,_,_) => (d14,d14,0), //312 -(_,_,_) => (d14,d14,d12), //313 -(_,_,_) => (d14,d14,d14), //314 -(_,_,_) => (d14,d14,d34), //315 -(x,_,_) => (d14,d14,x), //316 -(x,_,_) => (d14,d14,-x), //317 -(x,_,_) => (d14,d14,-x+d12), //318 -(x,_,_) => (d14,d14,x+d14), //319 -(x,_,_) => (d14,d14,-x+d14), //320 -(x,_,_) => (d14,d14,x+d34), //321 -(_,_,z) => (d14,d14,z), //322 -(_,_,z) => (d14,d14,-z), //323 -(_,_,z) => (d14,d14,z+d12), //324 -(_,_,z) => (d14,d14,-z+d12), //325 -(_,_,z) => (d14,d14,z+d14), //326 -(_,_,z) => (d14,d14,-z+d14), //327 -(_,_,_) => (d14,d18,0), //328 -(_,_,_) => (d14,d34,0), //329 -(_,_,_) => (d14,d34,d12), //330 -(_,_,_) => (d14,d34,d14), //331 -(_,_,_) => (d14,d34,d34), //332 -(x,_,_) => (d14,d34,x), //333 -(x,_,_) => (d14,d34,-x), //334 -(x,_,_) => (d14,d34,x+d12), //335 -(x,_,_) => (d14,d34,-x+d12), //336 -(x,_,_) => (d14,d34,x+d34), //337 -(_,_,z) => (d14,d34,z), //338 -(_,_,z) => (d14,d34,-z), //339 -(_,_,z) => (d14,d34,z+d12), //340 -(_,_,z) => (d14,d34,-z+d12), //341 -(_,_,_) => (d14,d38,0), //342 -(_,_,_) => (d14,d58,0), //343 -(_,_,_) => (d14,d78,0), //344 -(x,_,_) => (d14,x,0), //345 -(x,_,_) => (d14,x,d12), //346 -(x,_,_) => (d14,x,d14), //347 -(x,_,_) => (d14,x,d34), //348 -(x,_,_) => (d14,-x,d34), //349 -(x,_,_) => (d14,-x,d78), //350 -(x,_,_) => (d14,x,-x+d12), //351 -(x,_,_) => (d14,x+d12,0), //352 -(x,_,_) => (d14,-x+d12,0), //353 -(x,_,_) => (d14,-x+d12,d12), //354 -(x,_,_) => (d14,-x+d12,d14), //355 -(x,_,_) => (d14,x+d12,d34), //356 -(x,_,_) => (d14,-x+d12,d34), //357 -(x,_,_) => (d14,x+d12,d38), //358 -(x,_,_) => (d14,-x+d14,0), //359 -(x,_,_) => (d14,x+d14,d12), //360 -(x,_,_) => (d14,x+d14,d14), //361 -(x,_,_) => (d14,-x+d14,d14), //362 -(x,_,_) => (d14,-x+d14,d34), //363 -(x,_,_) => (d14,-x+d34,0), //364 -(x,_,_) => (d14,x+d34,d12), //365 -(x,_,_) => (d14,x+d34,d14), //366 -(_,y,_) => (d14,y,0), //367 -(_,y,_) => (d14,-y,0), //368 -(_,y,_) => (d14,y,d12), //369 -(_,y,_) => (d14,-y,d12), //370 -(_,y,_) => (d14,y,d14), //371 -(_,y,_) => (d14,-y,d14), //372 -(_,y,_) => (d14,y,d18), //373 -(_,y,_) => (d14,y,d34), //374 -(_,y,_) => (d14,-y,d34), //375 -(_,y,_) => (d14,y,y), //376 -(_,y,_) => (d14,y,-y), //377 -(_,y,_) => (d14,-y,y), //378 -(_,y,_) => (d14,-y,-y), //379 -(_,y,_) => (d14,y,y+d12), //380 -(_,y,_) => (d14,y,-y+d12), //381 -(_,y,_) => (d14,-y,y+d12), //382 -(_,y,_) => (d14,-y,-y+d12), //383 -(_,y,z) => (d14,y,z), //384 -(_,y,z) => (d14,y,-z), //385 -(_,y,z) => (d14,-y,z), //386 -(_,y,z) => (d14,-y,-z), //387 -(_,y,z) => (d14,y,-z+d12), //388 -(_,y,z) => (d14,-y,z+d12), //389 -(_,y,_) => (d14,y+d12,0), //390 -(_,y,_) => (d14,-y+d12,0), //391 -(_,y,_) => (d14,y+d12,d12), //392 -(_,y,_) => (d14,-y+d12,d12), //393 -(_,y,_) => (d14,y+d12,d14), //394 -(_,y,_) => (d14,-y+d12,d14), //395 -(_,y,_) => (d14,y+d12,d34), //396 -(_,y,_) => (d14,-y+d12,d34), //397 -(_,y,_) => (d14,-y+d12,d58), //398 -(_,y,_) => (d14,y+d12,y), //399 -(_,y,_) => (d14,y+d12,-y), //400 -(_,y,_) => (d14,-y+d12,y), //401 -(_,y,_) => (d14,-y+d12,-y), //402 -(_,y,_) => (d14,-y+d12,-y+d12), //403 -(_,y,_) => (d14,y+d12,y+d34), //404 -(_,y,z) => (d14,-y+d12,z), //405 -(_,y,z) => (d14,y+d12,-z+d12), //406 -(_,y,z) => (d14,-y+d12,z+d12), //407 -(_,y,_) => (d14,y+d14,d14), //408 -(_,y,_) => (d14,-y+d14,d14), //409 -(_,y,_) => (d14,y+d34,y+d12), //410 -(_,y,_) => (d14,y+d34,-y+d14), //411 -(_,_,_) => (d18,0,d14), //412 -(_,_,_) => (d18,0,d34), //413 -(_,_,_) => (d18,d12,d14), //414 -(_,_,_) => (d18,d18,d18), //415 -(_,_,_) => (d18,d18,d58), //416 -(_,_,_) => (d18,d18,d78), //417 -(x,_,_) => (d18,d18,x), //418 -(x,_,_) => (d18,d18,-x+d14), //419 -(_,_,z) => (d18,d18,z), //420 -(_,_,_) => (d18,d38,d58), //421 -(_,_,_) => (d18,d38,d78), //422 -(_,_,_) => (d18,d58,d18), //423 -(_,_,_) => (d18,d58,d38), //424 -(_,_,_) => (d18,d58,d78), //425 -(x,_,_) => (d18,d58,x), //426 -(x,_,_) => (d18,d58,-x+d34), //427 -(_,_,_) => (d18,d78,d18), //428 -(_,_,_) => (d18,d78,d38), //429 -(_,_,_) => (d18,d78,d58), //430 -(_,_,_) => (d18,d78,d78), //431 -(x,_,_) => (d18,x,d18), //432 -(x,_,_) => (d18,-x+d14,d18), //433 -(x,_,_) => (d18,-x+d34,d18), //434 -(_,y,_) => (d18,y,d18), //435 -(_,y,_) => (d18,y,y+d14), //436 -(_,y,_) => (d18,y,-y+d14), //437 -(_,y,_) => (d18,-y+d12,-y+d34), //438 -(_,y,_) => (d18,-y+d14,y), //439 -(_,y,_) => (d18,y+d34,-y+d12), //440 -(x,_,_) => (2*x,x,0), //441 -(x,_,_) => (-2*x,-x,0), //442 -(x,_,_) => (2*x,x,d1_12), //443 -(x,_,_) => (2*x,x,d12), //444 -(x,_,_) => (-2*x,-x,d12), //445 -(x,_,_) => (2*x,x,d13), //446 -(x,_,_) => (-2*x,-x,d13), //447 -(x,_,_) => (2*x,x,d14), //448 -(x,_,_) => (-2*x,-x,d14), //449 -(x,_,_) => (2*x,x,d16), //450 -(x,_,_) => (-2*x,-x,d16), //451 -(x,_,_) => (2*x,x,d11_12), //452 -(x,_,_) => (2*x,x,d23), //453 -(x,_,_) => (-2*x,-x,d23), //454 -(x,_,_) => (2*x,x,d34), //455 -(x,_,_) => (-2*x,-x,d34), //456 -(x,_,_) => (-2*x,-x,d5_12), //457 -(x,_,_) => (2*x,x,d56), //458 -(x,_,_) => (-2*x,-x,d56), //459 -(x,_,_) => (-2*x,-x,d7_12), //460 -(x,_,z) => (2*x,x,z), //461 -(x,_,z) => (2*x,x,-z), //462 -(x,_,z) => (-2*x,-x,z), //463 -(x,_,z) => (-2*x,-x,-z), //464 -(x,_,z) => (2*x,x,z+d12), //465 -(x,_,z) => (-2*x,-x,-z+d12), //466 -(_,_,_) => (d23,d13,0), //467 -(_,_,_) => (d23,d13,d12), //468 -(_,_,_) => (d23,d13,d14), //469 -(_,_,_) => (d23,d13,d34), //470 -(_,_,z) => (d23,d13,z), //471 -(_,_,z) => (d23,d13,-z), //472 -(_,_,z) => (d23,d13,z+d12), //473 -(_,_,z) => (d23,d13,-z+d12), //474 -(_,_,_) => (d34,0,0), //475 -(_,_,_) => (d34,0,d12), //476 -(_,_,_) => (d34,0,d14), //477 -(_,_,_) => (d34,0,d34), //478 -(_,_,_) => (d34,0,d38), //479 -(_,_,_) => (d34,0,d78), //480 -(_,_,z) => (d34,0,z), //481 -(_,_,z) => (d34,0,-z), //482 -(_,_,z) => (d34,0,z+d12), //483 -(_,_,z) => (d34,0,-z+d12), //484 -(_,_,_) => (d34,d12,0), //485 -(_,_,_) => (d34,d12,d12), //486 -(_,_,_) => (d34,d12,d14), //487 -(_,_,_) => (d34,d12,d34), //488 -(_,_,_) => (d34,d12,d38), //489 -(_,_,_) => (d34,d12,d78), //490 -(_,_,z) => (d34,d12,z), //491 -(_,_,z) => (d34,d12,-z), //492 -(_,_,z) => (d34,d12,z+d12), //493 -(_,_,z) => (d34,d12,-z+d12), //494 -(_,_,_) => (d34,d14,0), //495 -(_,_,_) => (d34,d14,d12), //496 -(_,_,_) => (d34,d14,d14), //497 -(_,_,_) => (d34,d14,d34), //498 -(x,_,_) => (d34,d14,x), //499 -(x,_,_) => (d34,d14,-x), //500 -(x,_,_) => (d34,d14,x+d12), //501 -(x,_,_) => (d34,d14,-x+d12), //502 -(x,_,_) => (d34,d14,-x+d34), //503 -(_,_,z) => (d34,d14,z), //504 -(_,_,z) => (d34,d14,-z), //505 -(_,_,z) => (d34,d14,z+d12), //506 -(_,_,z) => (d34,d14,-z+d12), //507 -(_,_,_) => (d34,d18,0), //508 -(_,_,_) => (d34,d34,0), //509 -(_,_,_) => (d34,d34,d12), //510 -(_,_,_) => (d34,d34,d14), //511 -(_,_,_) => (d34,d34,d34), //512 -(x,_,_) => (d34,d34,-x), //513 -(x,_,_) => (d34,d34,x+d12), //514 -(x,_,_) => (d34,d34,-x+d34), //515 -(_,_,z) => (d34,d34,z), //516 -(_,_,z) => (d34,d34,-z), //517 -(_,_,z) => (d34,d34,z+d12), //518 -(_,_,z) => (d34,d34,-z+d12), //519 -(_,_,_) => (d34,d38,0), //520 -(_,_,_) => (d34,d38,d12), //521 -(_,_,_) => (d34,d58,0), //522 -(_,_,_) => (d34,d78,0), //523 -(x,_,_) => (d34,-x,0), //524 -(x,_,_) => (d34,-x,d12), //525 -(x,_,_) => (d34,x,d14), //526 -(x,_,_) => (d34,-x,d14), //527 -(x,_,_) => (d34,-x,d34), //528 -(x,_,_) => (d34,x,d78), //529 -(x,_,_) => (d34,-x,d78), //530 -(x,_,_) => (d34,-x,x+d12), //531 -(x,_,_) => (d34,x+d12,0), //532 -(x,_,_) => (d34,-x+d12,0), //533 -(x,_,_) => (d34,x+d12,d12), //534 -(x,_,_) => (d34,x+d12,d14), //535 -(x,_,_) => (d34,-x+d12,d14), //536 -(x,_,_) => (d34,x+d12,d34), //537 -(x,_,_) => (d34,x+d12,d38), //538 -(x,_,_) => (d34,x+d14,0), //539 -(x,_,_) => (d34,-x+d14,d12), //540 -(x,_,_) => (d34,x+d14,d34), //541 -(x,_,_) => (d34,-x+d14,d34), //542 -(x,_,_) => (d34,x+d34,0), //543 -(x,_,_) => (d34,-x+d34,d12), //544 -(x,_,_) => (d34,x+d34,d14), //545 -(x,_,_) => (d34,-x+d34,d34), //546 -(_,y,_) => (d34,y,0), //547 -(_,y,_) => (d34,-y,0), //548 -(_,y,_) => (d34,y,d12), //549 -(_,y,_) => (d34,-y,d12), //550 -(_,y,_) => (d34,y,d14), //551 -(_,y,_) => (d34,-y,d14), //552 -(_,y,_) => (d34,y,d34), //553 -(_,y,_) => (d34,-y,d34), //554 -(_,y,_) => (d34,y,d58), //555 -(_,y,_) => (d34,y,y), //556 -(_,y,_) => (d34,y,-y), //557 -(_,y,_) => (d34,-y,y), //558 -(_,y,_) => (d34,-y,-y), //559 -(_,y,_) => (d34,y,y+d12), //560 -(_,y,_) => (d34,y,-y+d12), //561 -(_,y,_) => (d34,-y,y+d12), //562 -(_,y,_) => (d34,-y,-y+d12), //563 -(_,y,z) => (d34,y,z), //564 -(_,y,z) => (d34,y,-z), //565 -(_,y,z) => (d34,-y,z), //566 -(_,y,z) => (d34,-y,-z), //567 -(_,y,z) => (d34,y,-z+d12), //568 -(_,y,z) => (d34,-y,z+d12), //569 -(_,y,_) => (d34,y+d12,0), //570 -(_,y,_) => (d34,-y+d12,0), //571 -(_,y,_) => (d34,y+d12,d12), //572 -(_,y,_) => (d34,-y+d12,d12), //573 -(_,y,_) => (d34,y+d12,d14), //574 -(_,y,_) => (d34,-y+d12,d14), //575 -(_,y,_) => (d34,-y+d12,d18), //576 -(_,y,_) => (d34,y+d12,d34), //577 -(_,y,_) => (d34,-y+d12,d34), //578 -(_,y,_) => (d34,y+d12,y), //579 -(_,y,_) => (d34,y+d12,-y), //580 -(_,y,_) => (d34,-y+d12,y), //581 -(_,y,_) => (d34,-y+d12,-y), //582 -(_,y,_) => (d34,y+d12,y+d12), //583 -(_,y,_) => (d34,-y+d12,-y+d14), //584 -(_,y,z) => (d34,y+d12,-z), //585 -(_,y,z) => (d34,y+d12,-z+d12), //586 -(_,y,z) => (d34,-y+d12,z+d12), //587 -(_,y,_) => (d34,-y+d14,-y+d12), //588 -(_,y,_) => (d34,-y+d14,y+d34), //589 -(_,_,_) => (d38,0,d14), //590 -(_,_,_) => (d38,0,d34), //591 -(_,_,_) => (d38,d18,d58), //592 -(_,_,_) => (d38,d18,d78), //593 -(_,_,_) => (d38,d38,d38), //594 -(_,_,_) => (d38,d38,d58), //595 -(x,_,_) => (d38,d38,x+d34), //596 -(_,_,_) => (d38,d58,d18), //597 -(_,_,_) => (d38,d58,d38), //598 -(_,_,_) => (d38,d58,d58), //599 -(_,_,_) => (d38,d58,d78), //600 -(_,_,_) => (d38,d78,d18), //601 -(_,_,_) => (d38,d78,d58), //602 -(x,_,_) => (d38,d78,x+d34), //603 -(_,_,z) => (d38,d78,z+d14), //604 -(x,_,_) => (d38,-x+d12,d38), //605 -(x,_,_) => (d38,x+d34,d38), //606 -(_,y,_) => (d38,-y,y+d34), //607 -(_,y,_) => (d38,-y,-y+d34), //608 -(_,y,_) => (d38,y+d12,-y+d14), //609 -(_,y,_) => (d38,y+d12,y+d34), //610 -(_,y,_) => (d38,y+d14,d78), //611 -(_,y,_) => (d38,-y+d14,-y), //612 -(_,y,_) => (d38,y+d34,y+d12), //613 -(_,_,_) => (d58,0,d14), //614 -(_,_,_) => (d58,0,d34), //615 -(_,_,_) => (d58,d18,d38), //616 -(_,_,_) => (d58,d18,d78), //617 -(x,_,_) => (d58,d18,-x+d14), //618 -(_,_,z) => (d58,d18,-z+d34), //619 -(_,_,_) => (d58,d38,d18), //620 -(_,_,_) => (d58,d38,d38), //621 -(_,_,_) => (d58,d38,d58), //622 -(_,_,_) => (d58,d38,d78), //623 -(_,_,_) => (d58,d58,d38), //624 -(_,_,_) => (d58,d58,d58), //625 -(x,_,_) => (d58,d58,-x+d14), //626 -(_,_,_) => (d58,d78,d18), //627 -(_,_,_) => (d58,d78,d38), //628 -(x,_,_) => (d58,x+d12,d58), //629 -(x,_,_) => (d58,-x+d14,d58), //630 -(x,_,_) => (d58,-x+d34,d18), //631 -(_,y,_) => (d58,y,y+d14), //632 -(_,y,_) => (d58,-y,y+d14), //633 -(_,y,_) => (d58,-y+d12,y+d34), //634 -(_,y,_) => (d58,-y+d12,-y+d34), //635 -(_,y,_) => (d58,y+d14,-y), //636 -(_,y,_) => (d58,-y+d34,d18), //637 -(_,y,_) => (d58,-y+d34,y+d12), //638 -(_,_,_) => (d78,0,d14), //639 -(_,_,_) => (d78,0,d34), //640 -(_,_,_) => (d78,d18,d18), //641 -(_,_,_) => (d78,d18,d38), //642 -(_,_,_) => (d78,d18,d58), //643 -(_,_,_) => (d78,d18,d78), //644 -(_,_,_) => (d78,d38,d18), //645 -(_,_,_) => (d78,d38,d38), //646 -(_,_,_) => (d78,d38,d58), //647 -(_,_,_) => (d78,d38,d78), //648 -(x,_,_) => (d78,d38,-x), //649 -(x,_,_) => (d78,d38,-x+d12), //650 -(_,_,_) => (d78,d58,d18), //651 -(_,_,_) => (d78,d58,d38), //652 -(_,_,_) => (d78,d78,d18), //653 -(_,_,_) => (d78,d78,d38), //654 -(_,_,_) => (d78,d78,d78), //655 -(x,_,_) => (d78,d78,-x), //656 -(x,_,_) => (d78,d78,x+d34), //657 -(_,_,z) => (d78,d78,-z), //658 -(x,_,_) => (d78,-x,d78), //659 -(x,_,_) => (d78,x+d14,d38), //660 -(x,_,_) => (d78,x+d14,d78), //661 -(x,_,_) => (d78,x+d34,d78), //662 -(_,y,_) => (d78,-y,d78), //663 -(_,y,_) => (d78,-y,y+d34), //664 -(_,y,_) => (d78,y+d12,y+d14), //665 -(_,y,_) => (d78,y+d12,-y+d14), //666 -(_,y,_) => (d78,-y+d12,-y+d34), //667 -(_,y,_) => (d78,y+d14,y), //668 -(_,y,_) => (d78,-y+d34,-y+d12), //669 -(x,_,_) => (x,0,0), //670 -(x,_,_) => (-x,0,0), //671 -(x,_,_) => (x,0,d12), //672 -(x,_,_) => (-x,0,d12), //673 -(x,_,_) => (x,0,d13), //674 -(x,_,_) => (x,0,d14), //675 -(x,_,_) => (-x,0,d14), //676 -(x,_,_) => (x,0,d16), //677 -(x,_,_) => (x,0,d23), //678 -(x,_,_) => (x,0,d34), //679 -(x,_,_) => (-x,0,d34), //680 -(x,_,_) => (x,0,d56), //681 -(x,_,_) => (x,0,-x), //682 -(x,_,_) => (-x,0,x), //683 -(x,_,z) => (x,0,z), //684 -(x,_,z) => (x,0,-z), //685 -(x,_,z) => (-x,0,z), //686 -(x,_,z) => (-x,0,-z), //687 -(x,_,z) => (x,0,-z+d12), //688 -(x,_,z) => (-x,0,z+d12), //689 -(x,_,_) => (x,d12,0), //690 -(x,_,_) => (-x,d12,0), //691 -(x,_,_) => (x,d12,d12), //692 -(x,_,_) => (-x,d12,d12), //693 -(x,_,_) => (x,d12,d14), //694 -(x,_,_) => (-x,d12,d14), //695 -(x,_,_) => (x,d12,d34), //696 -(x,_,_) => (-x,d12,d34), //697 -(x,_,_) => (x,d12,-x), //698 -(x,_,_) => (-x,d12,x), //699 -(x,_,z) => (x,d12,z), //700 -(x,_,z) => (x,d12,-z), //701 -(x,_,z) => (-x,d12,z), //702 -(x,_,z) => (-x,d12,-z), //703 -(x,_,z) => (x,d12,-z+d12), //704 -(x,_,z) => (-x,d12,z+d12), //705 -(x,_,z) => (-x,d12,-z+d12), //706 -(x,_,_) => (x,d14,0), //707 -(x,_,_) => (-x,d14,0), //708 -(x,_,_) => (x,d14,d12), //709 -(x,_,_) => (-x,d14,d12), //710 -(x,_,_) => (x,d14,d14), //711 -(x,_,_) => (-x,d14,d14), //712 -(x,_,_) => (x,d14,d18), //713 -(x,_,_) => (-x,d14,d18), //714 -(x,_,_) => (x,d14,d34), //715 -(x,_,_) => (-x,d14,d34), //716 -(x,_,z) => (x,d14,z), //717 -(x,_,z) => (x,d14,-z), //718 -(x,_,z) => (-x,d14,z), //719 -(x,_,z) => (-x,d14,-z), //720 -(x,_,z) => (x,d14,-z+d12), //721 -(x,_,_) => (x,d18,d18), //722 -(x,_,_) => (x,d18,d58), //723 -(x,_,_) => (x,2*x,0), //724 -(x,_,_) => (-x,-2*x,0), //725 -(x,_,_) => (x,2*x,d12), //726 -(x,_,_) => (-x,-2*x,d12), //727 -(x,_,_) => (x,2*x,d13), //728 -(x,_,_) => (x,2*x,d14), //729 -(x,_,_) => (-x,-2*x,d14), //730 -(x,_,_) => (x,2*x,d16), //731 -(x,_,_) => (x,2*x,d23), //732 -(x,_,_) => (x,2*x,d34), //733 -(x,_,_) => (-x,-2*x,d34), //734 -(x,_,_) => (x,2*x,d56), //735 -(x,_,z) => (x,2*x,z), //736 -(x,_,z) => (x,2*x,-z), //737 -(x,_,z) => (-x,-2*x,z), //738 -(x,_,z) => (-x,-2*x,-z), //739 -(x,_,z) => (x,2*x,-z+d12), //740 -(x,_,z) => (-x,-2*x,z+d12), //741 -(x,_,_) => (x,d34,0), //742 -(x,_,_) => (-x,d34,0), //743 -(x,_,_) => (x,d34,d12), //744 -(x,_,_) => (-x,d34,d12), //745 -(x,_,_) => (x,d34,d14), //746 -(x,_,_) => (-x,d34,d14), //747 -(x,_,_) => (-x,d34,d18), //748 -(x,_,_) => (x,d34,d34), //749 -(x,_,_) => (-x,d34,d34), //750 -(x,_,z) => (x,d34,z), //751 -(x,_,z) => (x,d34,-z), //752 -(x,_,z) => (-x,d34,z), //753 -(x,_,z) => (-x,d34,-z), //754 -(x,_,z) => (-x,d34,z+d12), //755 -(x,_,_) => (-x,d78,d38), //756 -(x,_,_) => (-x,d78,d78), //757 -(x,_,_) => (x,x,0), //758 -(x,_,_) => (x,-x,0), //759 -(x,_,_) => (-x,x,0), //760 -(x,_,_) => (-x,-x,0), //761 -(x,_,_) => (x,-x,d1_12), //762 -(x,_,_) => (x,x,d12), //763 -(x,_,_) => (x,-x,d12), //764 -(x,_,_) => (-x,x,d12), //765 -(x,_,_) => (-x,-x,d12), //766 -(x,_,_) => (x,x,d13), //767 -(x,_,_) => (x,-x,d13), //768 -(x,_,_) => (-x,x,d13), //769 -(x,_,_) => (-x,-x,d13), //770 -(x,_,_) => (x,x,d14), //771 -(x,_,_) => (x,-x,d14), //772 -(x,_,_) => (-x,x,d14), //773 -(x,_,_) => (-x,-x,d14), //774 -(x,_,_) => (x,x,d16), //775 -(x,_,_) => (x,-x,d16), //776 -(x,_,_) => (-x,x,d16), //777 -(x,_,_) => (-x,-x,d16), //778 -(x,_,_) => (x,-x,d18), //779 -(x,_,_) => (-x,-x,d18), //780 -(x,_,_) => (x,-x,d11_12), //781 -(x,_,_) => (x,x,d23), //782 -(x,_,_) => (x,-x,d23), //783 -(x,_,_) => (-x,x,d23), //784 -(x,_,_) => (-x,-x,d23), //785 -(x,_,_) => (x,x,d34), //786 -(x,_,_) => (x,-x,d34), //787 -(x,_,_) => (-x,x,d34), //788 -(x,_,_) => (-x,-x,d34), //789 -(x,_,_) => (x,x,d38), //790 -(x,_,_) => (-x,x,d38), //791 -(x,_,_) => (-x,x,d5_12), //792 -(x,_,_) => (x,x,d56), //793 -(x,_,_) => (x,-x,d56), //794 -(x,_,_) => (-x,x,d56), //795 -(x,_,_) => (-x,-x,d56), //796 -(x,_,_) => (x,x,d58), //797 -(x,_,_) => (-x,x,d58), //798 -(x,_,_) => (-x,x,d7_12), //799 -(x,_,_) => (x,-x,d78), //800 -(x,_,_) => (-x,-x,d78), //801 -(x,_,_) => (x,x,x), //802 -(x,_,_) => (x,x,-x), //803 -(x,_,_) => (x,-x,x), //804 -(x,_,_) => (x,-x,-x), //805 -(x,_,_) => (-x,x,x), //806 -(x,_,_) => (-x,x,-x), //807 -(x,_,_) => (-x,-x,x), //808 -(x,_,_) => (-x,-x,-x), //809 -(x,_,_) => (x,x,-x+d12), //810 -(x,_,_) => (x,-x,-x+d12), //811 -(x,_,_) => (-x,-x,x+d12), //812 -(x,_,z) => (x,x,z), //813 -(x,_,z) => (x,x,-z), //814 -(x,_,z) => (x,-x,z), //815 -(x,_,z) => (x,-x,-z), //816 -(x,_,z) => (-x,x,z), //817 -(x,_,z) => (-x,x,-z), //818 -(x,_,z) => (-x,-x,z), //819 -(x,_,z) => (-x,-x,-z), //820 -(x,_,z) => (x,x,z+d12), //821 -(x,_,z) => (x,-x,z+d12), //822 -(x,_,z) => (x,-x,-z+d12), //823 -(x,_,z) => (-x,x,z+d12), //824 -(x,_,z) => (-x,x,-z+d12), //825 -(x,_,z) => (-x,-x,-z+d12), //826 -(x,_,_) => (x,x+d12,0), //827 -(x,_,_) => (x,-x+d12,0), //828 -(x,_,_) => (-x,x+d12,0), //829 -(x,_,_) => (-x,-x+d12,0), //830 -(x,_,_) => (x,x+d12,d12), //831 -(x,_,_) => (x,-x+d12,d12), //832 -(x,_,_) => (-x,x+d12,d12), //833 -(x,_,_) => (-x,-x+d12,d12), //834 -(x,_,_) => (x,x+d12,d14), //835 -(x,_,_) => (x,-x+d12,d14), //836 -(x,_,_) => (-x,x+d12,d14), //837 -(x,_,_) => (-x,-x+d12,d14), //838 -(x,_,_) => (x,x+d12,d34), //839 -(x,_,_) => (x,-x+d12,d34), //840 -(x,_,_) => (-x,x+d12,d34), //841 -(x,_,_) => (-x,-x+d12,d34), //842 -(x,_,_) => (x,-x+d12,x), //843 -(x,_,_) => (-x,x+d12,-x), //844 -(x,_,_) => (-x,-x+d12,x), //845 -(x,_,_) => (x,-x+d12,x+d12), //846 -(x,_,_) => (x,-x+d12,-x+d12), //847 -(x,_,_) => (-x,x+d12,x+d12), //848 -(x,_,_) => (-x,x+d12,-x+d12), //849 -(x,_,_) => (-x,-x+d12,x+d12), //850 -(x,_,z) => (x,x+d12,z), //851 -(x,_,z) => (x,x+d12,-z), //852 -(x,_,z) => (x,-x+d12,z), //853 -(x,_,z) => (x,-x+d12,-z), //854 -(x,_,z) => (-x,x+d12,z), //855 -(x,_,z) => (-x,x+d12,-z), //856 -(x,_,z) => (-x,-x+d12,z), //857 -(x,_,z) => (-x,-x+d12,-z), //858 -(x,_,z) => (x,x+d12,-z+d12), //859 -(x,_,z) => (x,-x+d12,z+d12), //860 -(x,_,z) => (x,-x+d12,-z+d12), //861 -(x,_,z) => (-x,x+d12,z+d12), //862 -(x,_,z) => (-x,x+d12,-z+d12), //863 -(x,_,z) => (-x,-x+d12,z+d12), //864 -(x,_,_) => (x,x+d14,d18), //865 -(x,_,_) => (x,-x+d14,d58), //866 -(x,_,_) => (x,x+d14,d78), //867 -(x,_,_) => (x,-x+d14,d78), //868 -(x,_,_) => (x,-x+d14,-x+d14), //869 -(x,_,_) => (x,-x+d14,-x+d34), //870 -(x,_,_) => (-x,x+d34,d18), //871 -(x,_,_) => (-x,-x+d34,d18), //872 -(x,_,_) => (-x,x+d34,d38), //873 -(x,_,_) => (-x,-x+d34,d78), //874 -(x,_,_) => (-x,x+d34,x+d14), //875 -(x,_,_) => (-x,x+d34,x+d34), //876 -(x,y,_) => (-x,-x+y,0), //877 -(x,y,_) => (-x,-x+y,d12), //878 -(x,y,_) => (-x,-x+y,d14), //879 -(x,y,_) => (-x,-x+y,d34), //880 -(x,y,z) => (-x,-x+y,z), //881 -(x,y,z) => (-x,-x+y,-z), //882 -(x,y,z) => (-x,-x+y,z+d12), //883 -(x,y,z) => (-x,-x+y,-z+d12), //884 -(x,y,z) => (-x,-x+y,-z+d13), //885 -(x,y,z) => (-x,-x+y,-z+d23), //886 -(x,y,_) => (x,x-y,0), //887 -(x,y,_) => (x,x-y,d12), //888 -(x,y,_) => (x,x-y,d14), //889 -(x,y,_) => (x,x-y,d34), //890 -(x,y,z) => (x,x-y,z), //891 -(x,y,z) => (x,x-y,-z), //892 -(x,y,z) => (x,x-y,z+d12), //893 -(x,y,z) => (x,x-y,-z+d12), //894 -(x,y,z) => (x,x-y,-z+d13), //895 -(x,y,z) => (x,x-y,-z+d16), //896 -(x,y,z) => (x,x-y,-z+d23), //897 -(x,y,z) => (x,x-y,-z+d56), //898 -(x,y,_) => (x,y,0), //899 -(x,y,_) => (x,-y,0), //900 -(x,y,_) => (-x,y,0), //901 -(x,y,_) => (-x,-y,0), //902 -(x,y,_) => (x,y,d12), //903 -(x,y,_) => (x,-y,d12), //904 -(x,y,_) => (-x,y,d12), //905 -(x,y,_) => (-x,-y,d12), //906 -(x,y,_) => (x,y,d14), //907 -(x,y,_) => (x,-y,d14), //908 -(x,y,_) => (-x,y,d14), //909 -(x,y,_) => (-x,-y,d14), //910 -(x,y,_) => (x,y,d34), //911 -(x,y,_) => (x,-y,d34), //912 -(x,y,_) => (-x,y,d34), //913 -(x,y,_) => (-x,-y,d34), //914 -(x,y,z) => (x,y,z), //915 -(x,y,z) => (x,y,-z), //916 -(x,y,z) => (x,-y,z), //917 -(x,y,z) => (x,-y,-z), //918 -(x,y,z) => (-x,y,z), //919 -(x,y,z) => (-x,y,-z), //920 -(x,y,z) => (-x,-y,z), //921 -(x,y,z) => (-x,-y,-z), //922 -(x,y,z) => (x,y,-z+d12), //923 -(x,y,z) => (x,-y,z+d12), //924 -(x,y,z) => (x,-y,-z+d12), //925 -(x,y,z) => (-x,y,z+d12), //926 -(x,y,z) => (-x,y,-z+d12), //927 -(x,y,z) => (-x,-y,z+d12), //928 -(x,y,_) => (x,-y+d12,0), //929 -(x,y,_) => (-x,y+d12,0), //930 -(x,y,_) => (x,-y+d12,d12), //931 -(x,y,_) => (-x,y+d12,d12), //932 -(x,y,_) => (-x,-y+d12,d12), //933 -(x,y,_) => (x,-y+d12,d14), //934 -(x,y,_) => (-x,y+d12,d14), //935 -(x,y,_) => (x,-y+d12,d34), //936 -(x,y,_) => (-x,y+d12,d34), //937 -(x,y,z) => (x,y+d12,-z), //938 -(x,y,z) => (x,-y+d12,z), //939 -(x,y,z) => (x,-y+d12,-z), //940 -(x,y,z) => (-x,y+d12,z), //941 -(x,y,z) => (-x,y+d12,-z), //942 -(x,y,z) => (-x,-y+d12,z), //943 -(x,y,z) => (x,y+d12,-z+d12), //944 -(x,y,z) => (x,-y+d12,z+d12), //945 -(x,y,z) => (x,-y+d12,-z+d12), //946 -(x,y,z) => (-x,y+d12,z+d12), //947 -(x,y,z) => (-x,y+d12,-z+d12), //948 -(x,y,z) => (-x,-y+d12,z+d12), //949 -(x,y,z) => (-x,-y+d12,-z+d12), //950 -(x,y,z) => (x,-y+d12,-z+d14), //951 -(x,y,z) => (-x,-y+d12,-z+d14), //952 -(x,y,z) => (x,-y+d12,-z+d34), //953 -(x,y,z) => (x,-y+d14,-z+d14), //954 -(x,y,z) => (-x,y+d14,z+d14), //955 -(x,y,z) => (x,-y+d34,-z+d34), //956 -(x,y,z) => (-x,y+d34,z+d34), //957 -(x,_,z) => (x,z,x), //958 -(x,_,z) => (x,z,-x), //959 -(x,_,z) => (x,-z,x), //960 -(x,_,z) => (x,-z,-x), //961 -(x,_,z) => (-x,z,x), //962 -(x,_,z) => (-x,z,-x), //963 -(x,_,z) => (-x,-z,x), //964 -(x,_,z) => (-x,-z,-x), //965 -(x,y,z) => (x,z,y), //966 -(x,y,z) => (x,z,-y), //967 -(x,y,z) => (x,-z,y), //968 -(x,y,z) => (x,-z,-y), //969 -(x,y,z) => (-x,z,y), //970 -(x,y,z) => (-x,z,-y), //971 -(x,y,z) => (-x,-z,y), //972 -(x,y,z) => (-x,-z,-y), //973 -(x,y,z) => (x,z,-y+d12), //974 -(x,y,z) => (x,-z,-y+d12), //975 -(x,y,z) => (-x,-z,y+d12), //976 -(x,_,z) => (x,-z+d12,-x+d12), //977 -(x,_,z) => (-x,z+d12,x+d12), //978 -(x,_,z) => (-x,-z+d12,x+d12), //979 -(x,y,z) => (x,-z+d12,y), //980 -(x,y,z) => (-x,z+d12,-y), //981 -(x,y,z) => (-x,-z+d12,y), //982 -(x,y,z) => (x,-z+d12,-y+d12), //983 -(x,y,z) => (-x,z+d12,y+d12), //984 -(x,y,z) => (-x,z+d12,-y+d12), //985 -(x,y,z) => (x,-z+d14,-y+d34), //986 -(x,y,z) => (-x,z+d34,y+d14), //987 -(x,_,_) => (x+d12,0,0), //988 -(x,_,_) => (-x+d12,0,0), //989 -(x,_,_) => (x+d12,0,d12), //990 -(x,_,_) => (-x+d12,0,d12), //991 -(x,_,_) => (x+d12,0,d14), //992 -(x,_,_) => (-x+d12,0,d14), //993 -(x,_,_) => (x+d12,0,d34), //994 -(x,_,_) => (-x+d12,0,d34), //995 -(x,_,z) => (x+d12,0,-z), //996 -(x,_,z) => (-x+d12,0,z), //997 -(x,_,z) => (x+d12,0,-z+d12), //998 -(x,_,z) => (-x+d12,0,z+d12), //999 -(x,_,_) => (x+d12,d12,0), //1000 -(x,_,_) => (-x+d12,d12,0), //1001 -(x,_,_) => (x+d12,d12,d12), //1002 -(x,_,_) => (-x+d12,d12,d12), //1003 -(x,_,_) => (x+d12,d12,d14), //1004 -(x,_,_) => (-x+d12,d12,d14), //1005 -(x,_,_) => (x+d12,d12,d34), //1006 -(x,_,_) => (-x+d12,d12,d34), //1007 -(x,_,z) => (x+d12,d12,-z), //1008 -(x,_,z) => (-x+d12,d12,z), //1009 -(x,_,z) => (-x+d12,d12,-z), //1010 -(x,_,z) => (x+d12,d12,-z+d12), //1011 -(x,_,z) => (-x+d12,d12,z+d12), //1012 -(x,_,_) => (x+d12,d14,0), //1013 -(x,_,_) => (-x+d12,d14,0), //1014 -(x,_,_) => (x+d12,d14,d12), //1015 -(x,_,_) => (-x+d12,d14,d12), //1016 -(x,_,_) => (x+d12,d14,d14), //1017 -(x,_,_) => (-x+d12,d14,d14), //1018 -(x,_,_) => (x+d12,d14,d34), //1019 -(x,_,_) => (-x+d12,d14,d34), //1020 -(x,_,_) => (x+d12,d14,d58), //1021 -(x,_,_) => (-x+d12,d14,d58), //1022 -(x,_,_) => (-x+d12,d14,x), //1023 -(x,_,z) => (x+d12,d14,-z), //1024 -(x,_,z) => (-x+d12,d14,z), //1025 -(x,_,z) => (x+d12,d14,-z+d12), //1026 -(x,_,z) => (-x+d12,d14,z+d12), //1027 -(x,_,_) => (x+d12,d34,0), //1028 -(x,_,_) => (-x+d12,d34,0), //1029 -(x,_,_) => (x+d12,d34,d12), //1030 -(x,_,_) => (-x+d12,d34,d12), //1031 -(x,_,_) => (x+d12,d34,d14), //1032 -(x,_,_) => (-x+d12,d34,d14), //1033 -(x,_,_) => (x+d12,d34,d34), //1034 -(x,_,_) => (-x+d12,d34,d34), //1035 -(x,_,_) => (x+d12,d34,-x), //1036 -(x,_,z) => (x+d12,d34,-z), //1037 -(x,_,z) => (-x+d12,d34,z), //1038 -(x,_,z) => (x+d12,d34,-z+d12), //1039 -(x,_,z) => (-x+d12,d34,z+d12), //1040 -(x,_,_) => (-x+d12,d78,d38), //1041 -(x,_,_) => (x+d12,x,0), //1042 -(x,_,_) => (x+d12,-x,0), //1043 -(x,_,_) => (-x+d12,x,0), //1044 -(x,_,_) => (-x+d12,-x,0), //1045 -(x,_,_) => (x+d12,x,d12), //1046 -(x,_,_) => (x+d12,-x,d12), //1047 -(x,_,_) => (-x+d12,x,d12), //1048 -(x,_,_) => (-x+d12,-x,d12), //1049 -(x,_,_) => (x+d12,x,d14), //1050 -(x,_,_) => (x+d12,-x,d14), //1051 -(x,_,_) => (-x+d12,x,d14), //1052 -(x,_,_) => (-x+d12,-x,d14), //1053 -(x,_,_) => (x+d12,x,d34), //1054 -(x,_,_) => (x+d12,-x,d34), //1055 -(x,_,_) => (-x+d12,x,d34), //1056 -(x,_,_) => (-x+d12,-x,d34), //1057 -(x,_,_) => (x+d12,-x,-x), //1058 -(x,_,_) => (-x+d12,x,x), //1059 -(x,_,_) => (-x+d12,x,-x), //1060 -(x,_,_) => (x+d12,x,-x+d12), //1061 -(x,_,_) => (x+d12,-x,x+d12), //1062 -(x,_,_) => (x+d12,-x,-x+d12), //1063 -(x,_,_) => (-x+d12,x,-x+d12), //1064 -(x,_,_) => (-x+d12,-x,x+d12), //1065 -(x,_,z) => (x+d12,x,z), //1066 -(x,_,z) => (x+d12,x,-z), //1067 -(x,_,z) => (x+d12,-x,z), //1068 -(x,_,z) => (x+d12,-x,-z), //1069 -(x,_,z) => (-x+d12,x,z), //1070 -(x,_,z) => (-x+d12,x,-z), //1071 -(x,_,z) => (-x+d12,-x,-z), //1072 -(x,_,z) => (x+d12,x,z+d12), //1073 -(x,_,z) => (x+d12,x,-z+d12), //1074 -(x,_,z) => (x+d12,-x,z+d12), //1075 -(x,_,z) => (x+d12,-x,-z+d12), //1076 -(x,_,z) => (-x+d12,x,z+d12), //1077 -(x,_,z) => (-x+d12,x,-z+d12), //1078 -(x,_,z) => (-x+d12,-x,-z+d12), //1079 -(x,_,_) => (x+d12,x+d12,0), //1080 -(x,_,_) => (x+d12,-x+d12,0), //1081 -(x,_,_) => (-x+d12,x+d12,0), //1082 -(x,_,_) => (-x+d12,-x+d12,0), //1083 -(x,_,_) => (x+d12,x+d12,d12), //1084 -(x,_,_) => (x+d12,-x+d12,d12), //1085 -(x,_,_) => (-x+d12,x+d12,d12), //1086 -(x,_,_) => (-x+d12,-x+d12,d12), //1087 -(x,_,_) => (x+d12,x+d12,d14), //1088 -(x,_,_) => (x+d12,-x+d12,d14), //1089 -(x,_,_) => (-x+d12,x+d12,d14), //1090 -(x,_,_) => (-x+d12,-x+d12,d14), //1091 -(x,_,_) => (x+d12,x+d12,d34), //1092 -(x,_,_) => (x+d12,-x+d12,d34), //1093 -(x,_,_) => (-x+d12,x+d12,d34), //1094 -(x,_,_) => (-x+d12,-x+d12,d34), //1095 -(x,_,_) => (x+d12,x+d12,-x), //1096 -(x,_,_) => (x+d12,-x+d12,-x), //1097 -(x,_,_) => (-x+d12,x+d12,x), //1098 -(x,_,_) => (-x+d12,x+d12,-x), //1099 -(x,_,_) => (-x+d12,-x+d12,x), //1100 -(x,_,_) => (x+d12,x+d12,x+d12), //1101 -(x,_,_) => (x+d12,x+d12,-x+d12), //1102 -(x,_,_) => (x+d12,-x+d12,x+d12), //1103 -(x,_,_) => (x+d12,-x+d12,-x+d12), //1104 -(x,_,_) => (-x+d12,x+d12,x+d12), //1105 -(x,_,_) => (-x+d12,x+d12,-x+d12), //1106 -(x,_,_) => (-x+d12,-x+d12,x+d12), //1107 -(x,_,_) => (-x+d12,-x+d12,-x+d12), //1108 -(x,_,z) => (x+d12,x+d12,-z), //1109 -(x,_,z) => (x+d12,-x+d12,-z), //1110 -(x,_,z) => (-x+d12,x+d12,z), //1111 -(x,_,z) => (-x+d12,x+d12,-z), //1112 -(x,_,z) => (-x+d12,-x+d12,z), //1113 -(x,_,z) => (x+d12,x+d12,-z+d12), //1114 -(x,_,z) => (x+d12,-x+d12,z+d12), //1115 -(x,_,z) => (x+d12,-x+d12,-z+d12), //1116 -(x,_,z) => (-x+d12,x+d12,z+d12), //1117 -(x,_,z) => (-x+d12,x+d12,-z+d12), //1118 -(x,_,z) => (-x+d12,-x+d12,-z+d12), //1119 -(x,_,_) => (x+d12,x+d14,d38), //1120 -(x,_,_) => (x+d12,x+d14,d58), //1121 -(x,_,_) => (x+d12,-x+d14,d58), //1122 -(x,_,_) => (x+d12,-x+d14,d78), //1123 -(x,_,_) => (x+d12,-x+d14,-x+d34), //1124 -(x,_,_) => (-x+d12,x+d34,d18), //1125 -(x,_,_) => (-x+d12,x+d34,d38), //1126 -(x,_,_) => (-x+d12,-x+d34,d38), //1127 -(x,_,_) => (-x+d12,-x+d34,d58), //1128 -(x,_,_) => (x+d12,-x+d34,-x+d14), //1129 -(x,_,_) => (-x+d12,x+d34,x+d14), //1130 -(x,_,z) => (x+d12,-x+d34,-z+d14), //1131 -(x,_,z) => (-x+d12,x+d34,z+d14), //1132 -(x,y,_) => (x+d12,-y,0), //1133 -(x,y,_) => (-x+d12,y,0), //1134 -(x,y,_) => (x+d12,-y,d12), //1135 -(x,y,_) => (-x+d12,y,d12), //1136 -(x,y,_) => (-x+d12,-y,d12), //1137 -(x,y,_) => (-x+d12,y,d14), //1138 -(x,y,_) => (x+d12,-y,d34), //1139 -(x,y,z) => (x+d12,y,-z), //1140 -(x,y,z) => (x+d12,-y,z), //1141 -(x,y,z) => (x+d12,-y,-z), //1142 -(x,y,z) => (-x+d12,y,z), //1143 -(x,y,z) => (-x+d12,y,-z), //1144 -(x,y,z) => (-x+d12,-y,z), //1145 -(x,y,z) => (x+d12,y,-z+d12), //1146 -(x,y,z) => (x+d12,-y,z+d12), //1147 -(x,y,z) => (x+d12,-y,-z+d12), //1148 -(x,y,z) => (-x+d12,y,z+d12), //1149 -(x,y,z) => (-x+d12,y,-z+d12), //1150 -(x,y,z) => (-x+d12,-y,z+d12), //1151 -(x,y,z) => (-x+d12,-y,-z+d12), //1152 -(x,y,z) => (-x+d12,y,-z+d14), //1153 -(x,y,z) => (x+d12,y,-z+d34), //1154 -(x,y,z) => (x+d12,-y,-z+d34), //1155 -(x,y,z) => (-x+d12,y,-z+d34), //1156 -(x,y,_) => (x+d12,-y+d12,0), //1157 -(x,y,_) => (-x+d12,y+d12,0), //1158 -(x,y,_) => (x+d12,-y+d12,d12), //1159 -(x,y,_) => (-x+d12,y+d12,d12), //1160 -(x,y,_) => (x+d12,-y+d12,d14), //1161 -(x,y,_) => (-x+d12,y+d12,d14), //1162 -(x,y,_) => (x+d12,-y+d12,d34), //1163 -(x,y,_) => (-x+d12,y+d12,d34), //1164 -(x,y,z) => (x+d12,y+d12,-z), //1165 -(x,y,z) => (x+d12,-y+d12,z), //1166 -(x,y,z) => (x+d12,-y+d12,-z), //1167 -(x,y,z) => (-x+d12,y+d12,z), //1168 -(x,y,z) => (-x+d12,y+d12,-z), //1169 -(x,y,z) => (-x+d12,-y+d12,z), //1170 -(x,y,z) => (-x+d12,-y+d12,-z), //1171 -(x,y,z) => (x+d12,y+d12,-z+d12), //1172 -(x,y,z) => (x+d12,-y+d12,z+d12), //1173 -(x,y,z) => (x+d12,-y+d12,-z+d12), //1174 -(x,y,z) => (-x+d12,y+d12,z+d12), //1175 -(x,y,z) => (-x+d12,y+d12,-z+d12), //1176 -(x,y,z) => (-x+d12,-y+d12,z+d12), //1177 -(x,y,z) => (-x+d12,-y+d12,-z+d12), //1178 -(x,y,z) => (x+d12,-y+d12,-z+d14), //1179 -(x,y,z) => (-x+d12,y+d12,-z+d14), //1180 -(x,y,z) => (x+d12,-y+d12,-z+d34), //1181 -(x,y,z) => (-x+d12,y+d12,-z+d34), //1182 -(x,y,z) => (x+d12,-y+d14,-z+d34), //1183 -(x,y,z) => (-x+d12,y+d14,z+d34), //1184 -(x,y,z) => (x+d12,-y+d34,-z+d14), //1185 -(x,y,z) => (-x+d12,y+d34,z+d14), //1186 -(x,_,z) => (x+d12,-z,x+d12), //1187 -(x,_,z) => (x+d12,-z,-x+d12), //1188 -(x,_,z) => (-x+d12,z,-x+d12), //1189 -(x,y,z) => (x+d12,-z,-y), //1190 -(x,y,z) => (-x+d12,z,y), //1191 -(x,y,z) => (-x+d12,z,-y), //1192 -(x,y,z) => (x+d12,-z,y+d12), //1193 -(x,y,z) => (-x+d12,z,-y+d12), //1194 -(x,y,z) => (-x+d12,-z,y+d12), //1195 -(x,_,z) => (x+d12,z+d12,-x), //1196 -(x,_,z) => (-x+d12,z+d12,-x), //1197 -(x,_,z) => (-x+d12,-z+d12,x), //1198 -(x,_,z) => (x+d12,z+d12,-x+d12), //1199 -(x,_,z) => (x+d12,-z+d12,x+d12), //1200 -(x,_,z) => (-x+d12,z+d12,x+d12), //1201 -(x,_,z) => (-x+d12,-z+d12,-x+d12), //1202 -(x,y,z) => (x+d12,z+d12,-y), //1203 -(x,y,z) => (x+d12,-z+d12,-y), //1204 -(x,y,z) => (-x+d12,-z+d12,y), //1205 -(x,y,z) => (x+d12,z+d12,y+d12), //1206 -(x,y,z) => (x+d12,z+d12,-y+d12), //1207 -(x,y,z) => (x+d12,-z+d12,y+d12), //1208 -(x,y,z) => (x+d12,-z+d12,-y+d12), //1209 -(x,y,z) => (-x+d12,z+d12,y+d12), //1210 -(x,y,z) => (-x+d12,z+d12,-y+d12), //1211 -(x,y,z) => (-x+d12,-z+d12,y+d12), //1212 -(x,y,z) => (-x+d12,-z+d12,-y+d12), //1213 -(x,y,z) => (x+d12,-z+d14,-y+d34), //1214 -(x,_,z) => (x+d12,-z+d34,-x+d14), //1215 -(x,_,z) => (-x+d12,z+d34,x+d14), //1216 -(x,y,z) => (-x+d12,z+d34,y+d14), //1217 -(x,_,_) => (-x+d14,0,d14), //1218 -(x,_,_) => (x+d14,d12,d14), //1219 -(x,_,_) => (-x+d14,d12,d34), //1220 -(x,_,_) => (x+d14,d14,d14), //1221 -(x,_,_) => (-x+d14,d14,d14), //1222 -(x,_,_) => (-x+d14,d18,d18), //1223 -(x,_,_) => (x+d14,d38,d78), //1224 -(x,_,_) => (-x+d14,d58,d18), //1225 -(x,_,_) => (-x+d14,d58,d58), //1226 -(x,_,_) => (-x+d14,x,-x+d14), //1227 -(x,_,_) => (x+d14,-x,x+d34), //1228 -(x,_,_) => (x+d14,-x+d12,x+d34), //1229 -(x,_,_) => (-x+d14,x+d12,-x+d34), //1230 -(x,_,z) => (x+d14,-x+d12,z+d34), //1231 -(x,_,z) => (-x+d14,x+d12,-z+d34), //1232 -(x,_,_) => (-x+d14,-x+d14,x), //1233 -(x,_,_) => (x+d14,x+d14,x+d14), //1234 -(x,_,_) => (x+d14,x+d14,-x+d14), //1235 -(x,_,_) => (x+d14,-x+d14,x+d14), //1236 -(x,_,_) => (-x+d14,x+d14,x+d14), //1237 -(x,_,_) => (-x+d14,-x+d14,-x+d14), //1238 -(x,_,_) => (x+d14,-x+d14,x+d34), //1239 -(x,_,z) => (-x+d14,-x+d14,-z+d14), //1240 -(x,_,_) => (-x+d14,-x+d34,x), //1241 -(x,_,_) => (-x+d14,-x+d34,x+d12), //1242 -(x,_,_) => (-x+d14,x+d34,x+d14), //1243 -(x,_,_) => (x+d14,x+d34,-x+d34), //1244 -(x,_,_) => (x+d14,-x+d34,x+d34), //1245 -(x,_,_) => (-x+d14,-x+d34,x+d34), //1246 -(x,_,z) => (x+d14,-x+d34,z+d34), //1247 -(x,y,z) => (x+d14,-y,z+d14), //1248 -(x,y,z) => (-x+d14,y,-z+d14), //1249 -(x,y,z) => (x+d14,-y+d12,z+d34), //1250 -(x,y,z) => (-x+d14,y+d12,-z+d34), //1251 -(x,y,z) => (x+d14,y+d14,-z), //1252 -(x,y,z) => (-x+d14,-y+d14,z), //1253 -(x,y,z) => (x+d14,y+d14,-z+d14), //1254 -(x,y,z) => (x+d14,-y+d14,z+d14), //1255 -(x,y,z) => (-x+d14,y+d14,z+d14), //1256 -(x,y,z) => (-x+d14,-y+d14,-z+d14), //1257 -(x,y,z) => (x+d14,-y+d14,z+d34), //1258 -(x,y,z) => (x+d14,y+d34,-z+d12), //1259 -(x,y,z) => (-x+d14,-y+d34,z+d12), //1260 -(x,y,z) => (-x+d14,y+d34,z+d14), //1261 -(x,y,z) => (x+d14,y+d34,-z+d34), //1262 -(x,y,z) => (x+d14,-z,y+d34), //1263 -(x,_,z) => (x+d14,-z+d12,x+d34), //1264 -(x,_,z) => (-x+d14,z+d12,-x+d34), //1265 -(x,y,z) => (x+d14,-z+d12,y+d34), //1266 -(x,_,z) => (-x+d14,-z+d14,-x+d14), //1267 -(x,y,z) => (x+d14,z+d14,y+d14), //1268 -(x,y,z) => (-x+d14,-z+d14,-y+d14), //1269 -(x,y,z) => (x+d14,-z+d14,y+d34), //1270 -(x,_,z) => (x+d14,-z+d34,x+d34), //1271 -(x,y,z) => (-x+d14,-z+d34,y), //1272 -(x,y,z) => (-x+d14,-z+d34,y+d12), //1273 -(x,y,z) => (-x+d14,z+d34,y+d14), //1274 -(x,y,z) => (x+d14,z+d34,-y+d34), //1275 -(x,y,z) => (x+d14,-z+d34,y+d34), //1276 -(x,y,z) => (-x+d14,-z+d34,y+d34), //1277 -(x,_,_) => (-x+d34,0,d14), //1278 -(x,_,_) => (x+d34,0,d34), //1279 -(x,_,_) => (x+d34,d12,d14), //1280 -(x,_,_) => (x+d34,d14,d14), //1281 -(x,_,_) => (x+d34,d14,d34), //1282 -(x,_,_) => (-x+d34,d18,d58), //1283 -(x,_,_) => (-x+d34,d34,d14), //1284 -(x,_,_) => (-x+d34,d34,d34), //1285 -(x,_,_) => (x+d34,d38,d38), //1286 -(x,_,_) => (x+d34,d38,d78), //1287 -(x,_,_) => (-x+d34,d58,d18), //1288 -(x,_,_) => (x+d34,d78,d78), //1289 -(x,_,_) => (-x+d34,x,-x+d14), //1290 -(x,_,_) => (x+d34,-x,x+d34), //1291 -(x,_,_) => (-x+d34,x+d12,-x+d14), //1292 -(x,_,_) => (x+d34,x+d14,-x), //1293 -(x,_,_) => (x+d34,x+d14,-x+d12), //1294 -(x,_,_) => (-x+d34,-x+d14,x+d12), //1295 -(x,_,_) => (x+d34,x+d14,-x+d14), //1296 -(x,_,_) => (x+d34,x+d14,-x+d34), //1297 -(x,_,_) => (x+d34,-x+d14,-x+d34), //1298 -(x,_,_) => (-x+d34,x+d14,x+d34), //1299 -(x,_,z) => (x+d34,x+d14,-z+d12), //1300 -(x,_,z) => (-x+d34,-x+d14,z+d12), //1301 -(x,_,z) => (x+d34,x+d14,-z+d34), //1302 -(x,_,_) => (x+d34,x+d34,-x), //1303 -(x,_,_) => (x+d34,-x+d34,x+d14), //1304 -(x,_,_) => (-x+d34,x+d34,x+d14), //1305 -(x,_,_) => (-x+d34,x+d34,-x+d14), //1306 -(x,_,_) => (-x+d34,-x+d34,-x+d34), //1307 -(x,_,z) => (-x+d34,x+d34,z+d14), //1308 -(x,y,z) => (x+d34,-y,z+d34), //1309 -(x,y,z) => (-x+d34,y,-z+d34), //1310 -(x,y,z) => (x+d34,-y+d12,z+d14), //1311 -(x,y,z) => (-x+d34,y+d12,-z+d14), //1312 -(x,y,z) => (x+d34,y+d14,-z+d12), //1313 -(x,y,z) => (-x+d34,-y+d14,z+d12), //1314 -(x,y,z) => (x+d34,y+d14,-z+d14), //1315 -(x,y,z) => (-x+d34,y+d14,z+d34), //1316 -(x,y,z) => (x+d34,y+d34,-z), //1317 -(x,y,z) => (-x+d34,-y+d34,z), //1318 -(x,y,z) => (x+d34,-y+d34,z+d14), //1319 -(x,y,z) => (-x+d34,-y+d34,-z+d34), //1320 -(x,y,z) => (-x+d34,z,-y+d14), //1321 -(x,y,z) => (-x+d34,z+d12,-y+d14), //1322 -(x,_,z) => (x+d34,z+d14,-x+d12), //1323 -(x,_,z) => (-x+d34,-z+d14,x+d12), //1324 -(x,_,z) => (x+d34,z+d14,-x+d34), //1325 -(x,y,z) => (x+d34,z+d14,-y), //1326 -(x,y,z) => (x+d34,z+d14,-y+d12), //1327 -(x,y,z) => (x+d34,z+d14,-y+d14), //1328 -(x,y,z) => (x+d34,z+d14,-y+d34), //1329 -(x,y,z) => (x+d34,-z+d14,-y+d34), //1330 -(x,y,z) => (-x+d34,z+d14,y+d34), //1331 -(x,_,z) => (-x+d34,z+d34,x+d14), //1332 -(x,y,z) => (x+d34,-z+d34,y+d14), //1333 -(x,y,z) => (-x+d34,z+d34,y+d14), //1334 -(x,y,z) => (-x+d34,z+d34,-y+d14), //1335 -(x,y,z) => (-x+d34,-z+d34,-y+d34), //1336 -(x,y,_) => (-x+y,-x,0), //1337 -(x,y,_) => (-x+y,-x,d12), //1338 -(x,y,_) => (-x+y,-x,d14), //1339 -(x,y,z) => (-x+y,-x,z), //1340 -(x,y,z) => (-x+y,-x,-z), //1341 -(x,y,z) => (-x+y,-x,-z+d12), //1342 -(x,y,z) => (-x+y,-x,z+d13), //1343 -(x,y,z) => (-x+y,-x,z+d23), //1344 -(x,y,_) => (-x+y,y,0), //1345 -(x,y,_) => (-x+y,y,d12), //1346 -(x,y,_) => (-x+y,y,d14), //1347 -(x,y,_) => (-x+y,y,d34), //1348 -(x,y,z) => (-x+y,y,z), //1349 -(x,y,z) => (-x+y,y,-z), //1350 -(x,y,z) => (-x+y,y,z+d12), //1351 -(x,y,z) => (-x+y,y,-z+d12), //1352 -(x,y,z) => (-x+y,y,-z+d13), //1353 -(x,y,z) => (-x+y,y,-z+d23), //1354 -(x,y,_) => (x-y,x,0), //1355 -(x,y,_) => (x-y,x,d12), //1356 -(x,y,_) => (x-y,x,d34), //1357 -(x,y,z) => (x-y,x,z), //1358 -(x,y,z) => (x-y,x,-z), //1359 -(x,y,z) => (x-y,x,z+d12), //1360 -(x,y,z) => (x-y,x,z+d13), //1361 -(x,y,z) => (x-y,x,z+d16), //1362 -(x,y,z) => (x-y,x,z+d23), //1363 -(x,y,z) => (x-y,x,z+d56), //1364 -(x,y,_) => (x-y,-y,0), //1365 -(x,y,_) => (x-y,-y,d12), //1366 -(x,y,_) => (x-y,-y,d14), //1367 -(x,y,_) => (x-y,-y,d34), //1368 -(x,y,z) => (x-y,-y,z), //1369 -(x,y,z) => (x-y,-y,-z), //1370 -(x,y,z) => (x-y,-y,z+d12), //1371 -(x,y,z) => (x-y,-y,-z+d12), //1372 -(x,y,z) => (x-y,-y,-z+d13), //1373 -(x,y,z) => (x-y,-y,-z+d23), //1374 -(_,y,_) => (y,0,d14), //1375 -(_,y,_) => (-y,0,d14), //1376 -(_,y,_) => (y,0,d34), //1377 -(_,y,_) => (-y,0,d34), //1378 -(_,y,_) => (y,0,y), //1379 -(_,y,_) => (y,0,-y), //1380 -(_,y,_) => (-y,0,y), //1381 -(_,y,_) => (-y,0,-y), //1382 -(_,y,_) => (y,0,y+d12), //1383 -(_,y,_) => (-y,0,-y+d12), //1384 -(_,y,z) => (y,0,z), //1385 -(_,y,z) => (y,0,-z), //1386 -(_,y,z) => (-y,0,z), //1387 -(_,y,z) => (-y,0,-z), //1388 -(_,y,z) => (y,0,z+d12), //1389 -(_,y,z) => (y,0,-z+d12), //1390 -(_,y,z) => (-y,0,z+d12), //1391 -(_,y,z) => (-y,0,-z+d12), //1392 -(_,y,_) => (y,d12,d14), //1393 -(_,y,_) => (-y,d12,d14), //1394 -(_,y,_) => (y,d12,d34), //1395 -(_,y,_) => (-y,d12,d34), //1396 -(_,y,_) => (y,d12,y), //1397 -(_,y,_) => (y,d12,-y), //1398 -(_,y,_) => (-y,d12,y), //1399 -(_,y,_) => (-y,d12,-y), //1400 -(_,y,_) => (y,d12,y+d12), //1401 -(_,y,_) => (-y,d12,-y+d12), //1402 -(_,y,z) => (y,d12,z), //1403 -(_,y,z) => (y,d12,-z), //1404 -(_,y,z) => (-y,d12,z), //1405 -(_,y,z) => (-y,d12,-z), //1406 -(_,y,z) => (y,d12,z+d12), //1407 -(_,y,z) => (y,d12,-z+d12), //1408 -(_,y,z) => (-y,d12,z+d12), //1409 -(_,y,z) => (-y,d12,-z+d12), //1410 -(_,y,z) => (-y,d12,z+d14), //1411 -(_,y,_) => (y,d14,y), //1412 -(_,y,_) => (y,d14,-y), //1413 -(_,y,_) => (-y,d14,y), //1414 -(_,y,_) => (-y,d14,-y), //1415 -(_,y,_) => (y,d14,y+d12), //1416 -(_,y,_) => (y,d14,-y+d12), //1417 -(_,y,_) => (-y,d14,y+d12), //1418 -(_,y,_) => (-y,d14,-y+d12), //1419 -(_,y,z) => (y,d14,z), //1420 -(_,y,z) => (y,d14,z+d12), //1421 -(_,y,_) => (y,d18,-y+d14), //1422 -(_,y,_) => (-y,d34,d38), //1423 -(_,y,_) => (y,d34,d78), //1424 -(_,y,_) => (y,d34,y), //1425 -(_,y,_) => (y,d34,-y), //1426 -(_,y,_) => (-y,d34,y), //1427 -(_,y,_) => (-y,d34,-y), //1428 -(_,y,_) => (y,d34,y+d12), //1429 -(_,y,_) => (y,d34,-y+d12), //1430 -(_,y,_) => (-y,d34,y+d12), //1431 -(_,y,_) => (-y,d34,-y+d12), //1432 -(_,y,z) => (-y,d34,-z), //1433 -(_,y,z) => (-y,d34,-z+d12), //1434 -(_,y,_) => (-y,d38,-y+d14), //1435 -(_,y,_) => (-y,d58,y+d14), //1436 -(_,y,_) => (y,d78,y+d14), //1437 -(x,y,_) => (y,x,0), //1438 -(x,y,_) => (y,-x,0), //1439 -(x,y,_) => (-y,x,0), //1440 -(x,y,_) => (-y,-x,0), //1441 -(x,y,_) => (y,x,d12), //1442 -(x,y,_) => (y,-x,d12), //1443 -(x,y,_) => (-y,x,d12), //1444 -(x,y,_) => (-y,-x,d12), //1445 -(x,y,_) => (y,x,d14), //1446 -(x,y,_) => (-y,-x,d14), //1447 -(x,y,_) => (y,x,d34), //1448 -(x,y,_) => (-y,-x,d34), //1449 -(x,y,z) => (y,x,z), //1450 -(x,y,z) => (y,x,-z), //1451 -(x,y,z) => (y,-x,z), //1452 -(x,y,z) => (y,-x,-z), //1453 -(x,y,z) => (-y,x,z), //1454 -(x,y,z) => (-y,x,-z), //1455 -(x,y,z) => (-y,-x,z), //1456 -(x,y,z) => (-y,-x,-z), //1457 -(x,y,z) => (y,x,z+d12), //1458 -(x,y,z) => (y,x,-z+d12), //1459 -(x,y,z) => (y,-x,z+d12), //1460 -(x,y,z) => (y,-x,-z+d12), //1461 -(x,y,z) => (-y,x,z+d12), //1462 -(x,y,z) => (-y,x,-z+d12), //1463 -(x,y,z) => (-y,-x,z+d12), //1464 -(x,y,z) => (-y,-x,-z+d12), //1465 -(x,y,z) => (y,x,-z+d13), //1466 -(x,y,z) => (-y,-x,-z+d13), //1467 -(x,y,z) => (y,x,-z+d14), //1468 -(x,y,z) => (y,-x,z+d14), //1469 -(x,y,z) => (-y,x,z+d14), //1470 -(x,y,z) => (-y,-x,-z+d14), //1471 -(x,y,z) => (-y,-x,-z+d16), //1472 -(x,y,z) => (y,x,-z+d23), //1473 -(x,y,z) => (-y,-x,-z+d23), //1474 -(x,y,z) => (y,x,-z+d34), //1475 -(x,y,z) => (y,-x,z+d34), //1476 -(x,y,z) => (-y,x,z+d34), //1477 -(x,y,z) => (-y,-x,-z+d34), //1478 -(x,y,z) => (-y,-x,-z+d56), //1479 -(x,y,z) => (y,-x+d12,z), //1480 -(x,y,z) => (-y,x+d12,-z), //1481 -(x,y,z) => (-y,-x+d12,z), //1482 -(x,y,z) => (y,-x+d12,z+d12), //1483 -(x,y,z) => (y,-x+d12,-z+d12), //1484 -(x,y,z) => (-y,x+d12,z+d12), //1485 -(x,y,z) => (-y,x+d12,-z+d12), //1486 -(x,y,z) => (y,x+d12,z+d14), //1487 -(x,y,z) => (-y,x+d12,z+d14), //1488 -(x,y,z) => (-y,-x+d12,z+d14), //1489 -(x,y,z) => (y,x+d12,z+d34), //1490 -(x,y,z) => (-y,-x+d12,z+d34), //1491 -(x,y,z) => (y,-x+d14,-z+d34), //1492 -(x,y,z) => (-y,x+d34,z+d14), //1493 -(x,y,_) => (y,-x+y,0), //1494 -(x,y,_) => (y,-x+y,d12), //1495 -(x,y,_) => (y,-x+y,d34), //1496 -(x,y,z) => (y,-x+y,z), //1497 -(x,y,z) => (y,-x+y,-z), //1498 -(x,y,z) => (y,-x+y,z+d12), //1499 -(x,y,z) => (y,-x+y,z+d13), //1500 -(x,y,z) => (y,-x+y,z+d16), //1501 -(x,y,z) => (y,-x+y,z+d23), //1502 -(x,y,z) => (y,-x+y,z+d56), //1503 -(x,y,_) => (-y,x-y,0), //1504 -(x,y,_) => (-y,x-y,d12), //1505 -(x,y,_) => (-y,x-y,d14), //1506 -(x,y,z) => (-y,x-y,z), //1507 -(x,y,z) => (-y,x-y,-z), //1508 -(x,y,z) => (-y,x-y,-z+d12), //1509 -(x,y,z) => (-y,x-y,z+d13), //1510 -(x,y,z) => (-y,x-y,z+d23), //1511 -(_,y,_) => (y,y,0), //1512 -(_,y,_) => (y,-y,0), //1513 -(_,y,_) => (-y,y,0), //1514 -(_,y,_) => (-y,-y,0), //1515 -(_,y,_) => (y,y,d12), //1516 -(_,y,_) => (y,-y,d12), //1517 -(_,y,_) => (-y,y,d12), //1518 -(_,y,_) => (-y,-y,d12), //1519 -(_,y,_) => (y,y,d14), //1520 -(_,y,_) => (y,-y,d14), //1521 -(_,y,_) => (-y,y,d14), //1522 -(_,y,_) => (-y,-y,d14), //1523 -(_,y,_) => (y,y,d34), //1524 -(_,y,_) => (y,-y,d34), //1525 -(_,y,_) => (-y,y,d34), //1526 -(_,y,_) => (-y,-y,d34), //1527 -(_,y,_) => (y,y+d12,0), //1528 -(_,y,_) => (-y,-y+d12,0), //1529 -(_,y,_) => (y,y+d12,d12), //1530 -(_,y,_) => (-y,-y+d12,d12), //1531 -(_,y,_) => (y,y+d12,d14), //1532 -(_,y,_) => (y,-y+d12,d14), //1533 -(_,y,_) => (-y,y+d12,d14), //1534 -(_,y,_) => (-y,-y+d12,d14), //1535 -(_,y,_) => (y,y+d12,d34), //1536 -(_,y,_) => (y,-y+d12,d34), //1537 -(_,y,_) => (-y,y+d12,d34), //1538 -(_,y,_) => (-y,-y+d12,d34), //1539 -(_,y,_) => (y,y+d14,d18), //1540 -(_,y,_) => (y,-y+d14,d18), //1541 -(_,y,_) => (y,y+d14,d58), //1542 -(_,y,_) => (-y,y+d14,d58), //1543 -(_,y,_) => (-y,y+d34,d38), //1544 -(_,y,_) => (-y,-y+d34,d38), //1545 -(_,y,_) => (-y,y+d34,d78), //1546 -(_,y,z) => (y,z,0), //1547 -(_,y,z) => (y,-z,0), //1548 -(_,y,z) => (-y,z,0), //1549 -(_,y,z) => (-y,-z,0), //1550 -(_,y,z) => (y,z,d12), //1551 -(_,y,z) => (y,-z,d12), //1552 -(_,y,z) => (-y,z,d12), //1553 -(_,y,z) => (-y,-z,d12), //1554 -(x,y,z) => (y,z,x), //1555 -(x,y,z) => (y,z,-x), //1556 -(x,y,z) => (y,-z,x), //1557 -(x,y,z) => (y,-z,-x), //1558 -(x,y,z) => (-y,z,x), //1559 -(x,y,z) => (-y,z,-x), //1560 -(x,y,z) => (-y,-z,x), //1561 -(x,y,z) => (-y,-z,-x), //1562 -(x,y,z) => (y,-z+d12,x+d12), //1563 -(x,y,z) => (y,-z+d12,-x+d12), //1564 -(x,y,z) => (-y,z+d12,x+d12), //1565 -(x,y,z) => (-y,z+d12,-x+d12), //1566 -(x,y,z) => (-y,-z+d12,x+d12), //1567 -(x,y,z) => (y,-z+d14,-x+d14), //1568 -(x,y,z) => (-y,z+d34,x+d34), //1569 -(_,y,_) => (y+d12,0,y), //1570 -(_,y,_) => (-y+d12,0,-y), //1571 -(_,y,_) => (y+d12,0,-y+d12), //1572 -(_,y,_) => (-y+d12,0,y+d12), //1573 -(_,y,_) => (y+d12,0,y+d14), //1574 -(_,y,_) => (-y+d12,0,-y+d34), //1575 -(_,y,z) => (y+d12,0,z+d34), //1576 -(_,y,_) => (y+d12,d12,y), //1577 -(_,y,_) => (-y+d12,d12,-y), //1578 -(_,y,_) => (y+d12,d12,y+d12), //1579 -(_,y,_) => (y+d12,d12,-y+d12), //1580 -(_,y,_) => (-y+d12,d12,y+d12), //1581 -(_,y,_) => (-y+d12,d12,-y+d12), //1582 -(_,y,z) => (y+d12,d12,z), //1583 -(_,y,z) => (-y+d12,d12,z), //1584 -(_,y,z) => (y+d12,d12,z+d12), //1585 -(_,y,z) => (y+d12,d12,-z+d12), //1586 -(_,y,z) => (-y+d12,d12,z+d12), //1587 -(_,y,z) => (-y+d12,d12,-z+d12), //1588 -(_,y,_) => (y+d12,d14,y), //1589 -(_,y,_) => (y+d12,d14,-y), //1590 -(_,y,_) => (-y+d12,d14,y), //1591 -(_,y,_) => (-y+d12,d14,-y), //1592 -(_,y,_) => (-y+d12,d14,-y+d12), //1593 -(_,y,_) => (y+d12,d14,y+d34), //1594 -(_,y,z) => (-y+d12,d14,z), //1595 -(_,y,z) => (-y+d12,d14,z+d12), //1596 -(_,y,_) => (-y+d12,d18,y+d34), //1597 -(_,y,_) => (-y+d12,d34,d38), //1598 -(_,y,_) => (y+d12,d34,d78), //1599 -(_,y,_) => (y+d12,d34,y), //1600 -(_,y,_) => (y+d12,d34,-y), //1601 -(_,y,_) => (-y+d12,d34,y), //1602 -(_,y,_) => (-y+d12,d34,-y), //1603 -(_,y,_) => (y+d12,d34,y+d12), //1604 -(_,y,_) => (-y+d12,d34,-y+d14), //1605 -(_,y,z) => (y+d12,d34,-z), //1606 -(_,y,z) => (y+d12,d34,-z+d12), //1607 -(_,y,_) => (y+d12,d38,y+d34), //1608 -(_,y,_) => (y+d12,d58,-y+d34), //1609 -(_,y,_) => (-y+d12,d78,-y+d34), //1610 -(x,y,z) => (y+d12,-x,-z), //1611 -(x,y,z) => (-y+d12,x,z), //1612 -(x,y,z) => (-y+d12,x,-z), //1613 -(x,y,z) => (y+d12,-x,z+d12), //1614 -(x,y,z) => (y+d12,-x,-z+d12), //1615 -(x,y,z) => (-y+d12,x,z+d12), //1616 -(x,y,z) => (-y+d12,x,-z+d12), //1617 -(x,y,z) => (-y+d12,-x,z+d12), //1618 -(x,y,z) => (y+d12,x,z+d14), //1619 -(x,y,z) => (-y+d12,-x,z+d14), //1620 -(x,y,z) => (y+d12,x,z+d34), //1621 -(x,y,z) => (y+d12,-x,z+d34), //1622 -(x,y,z) => (-y+d12,-x,z+d34), //1623 -(x,y,_) => (y+d12,x+d12,0), //1624 -(x,y,_) => (-y+d12,-x+d12,0), //1625 -(x,y,_) => (y+d12,x+d12,d12), //1626 -(x,y,_) => (y+d12,-x+d12,d12), //1627 -(x,y,_) => (-y+d12,x+d12,d12), //1628 -(x,y,_) => (-y+d12,-x+d12,d12), //1629 -(x,y,z) => (y+d12,x+d12,z), //1630 -(x,y,z) => (y+d12,x+d12,-z), //1631 -(x,y,z) => (y+d12,-x+d12,z), //1632 -(x,y,z) => (y+d12,-x+d12,-z), //1633 -(x,y,z) => (-y+d12,x+d12,z), //1634 -(x,y,z) => (-y+d12,x+d12,-z), //1635 -(x,y,z) => (-y+d12,-x+d12,z), //1636 -(x,y,z) => (-y+d12,-x+d12,-z), //1637 -(x,y,z) => (y+d12,x+d12,z+d12), //1638 -(x,y,z) => (y+d12,x+d12,-z+d12), //1639 -(x,y,z) => (y+d12,-x+d12,z+d12), //1640 -(x,y,z) => (y+d12,-x+d12,-z+d12), //1641 -(x,y,z) => (-y+d12,x+d12,z+d12), //1642 -(x,y,z) => (-y+d12,x+d12,-z+d12), //1643 -(x,y,z) => (-y+d12,-x+d12,z+d12), //1644 -(x,y,z) => (-y+d12,-x+d12,-z+d12), //1645 -(x,y,z) => (y+d12,-x+d12,z+d14), //1646 -(x,y,z) => (-y+d12,x+d12,z+d14), //1647 -(x,y,z) => (y+d12,-x+d12,z+d34), //1648 -(x,y,z) => (-y+d12,x+d12,z+d34), //1649 -(x,y,z) => (y+d12,-x+d14,-z+d34), //1650 -(x,y,z) => (-y+d12,x+d34,z+d14), //1651 -(_,y,_) => (y+d12,y,0), //1652 -(_,y,_) => (-y+d12,-y,0), //1653 -(_,y,_) => (y+d12,y,d12), //1654 -(_,y,_) => (-y+d12,-y,d12), //1655 -(_,y,_) => (y+d12,y,d14), //1656 -(_,y,_) => (y+d12,-y,d14), //1657 -(_,y,_) => (-y+d12,y,d14), //1658 -(_,y,_) => (-y+d12,-y,d14), //1659 -(_,y,_) => (y+d12,y,d34), //1660 -(_,y,_) => (y+d12,-y,d34), //1661 -(_,y,_) => (-y+d12,y,d34), //1662 -(_,y,_) => (-y+d12,-y,d34), //1663 -(_,y,_) => (y+d12,-y+d12,0), //1664 -(_,y,_) => (-y+d12,y+d12,0), //1665 -(_,y,_) => (y+d12,y+d12,d12), //1666 -(_,y,_) => (y+d12,-y+d12,d12), //1667 -(_,y,_) => (-y+d12,y+d12,d12), //1668 -(_,y,_) => (-y+d12,-y+d12,d12), //1669 -(_,y,_) => (-y+d12,-y+d12,d14), //1670 -(_,y,_) => (y+d12,y+d12,d34), //1671 -(_,y,_) => (y+d12,y+d14,d12), //1672 -(_,y,_) => (-y+d12,-y+d14,d34), //1673 -(_,y,_) => (y+d12,-y+d14,d38), //1674 -(_,y,_) => (y+d12,y+d14,d78), //1675 -(_,y,_) => (y+d12,-y+d14,d78), //1676 -(_,y,_) => (-y+d12,-y+d34,d12), //1677 -(_,y,_) => (y+d12,y+d34,d14), //1678 -(_,y,_) => (-y+d12,-y+d34,d18), //1679 -(_,y,_) => (y+d12,y+d34,d38), //1680 -(_,y,_) => (-y+d12,y+d34,d58), //1681 -(_,y,_) => (-y+d12,-y+d34,d58), //1682 -(_,y,_) => (-y+d12,-y+d34,d78), //1683 -(x,y,z) => (y+d12,z,-x+d12), //1684 -(x,y,z) => (y+d12,-z,x+d12), //1685 -(x,y,z) => (y+d12,-z,-x+d12), //1686 -(x,y,z) => (-y+d12,z,-x+d12), //1687 -(x,y,z) => (-y+d12,-z,x+d12), //1688 -(x,y,z) => (y+d12,z+d12,-x), //1689 -(x,y,z) => (y+d12,-z+d12,-x), //1690 -(x,y,z) => (-y+d12,z+d12,x), //1691 -(x,y,z) => (-y+d12,z+d12,-x), //1692 -(x,y,z) => (-y+d12,-z+d12,x), //1693 -(x,y,z) => (y+d12,z+d12,-x+d12), //1694 -(x,y,z) => (y+d12,-z+d12,x+d12), //1695 -(x,y,z) => (-y+d12,z+d12,x+d12), //1696 -(x,y,z) => (-y+d12,-z+d12,-x+d12), //1697 -(x,y,z) => (y+d12,-z+d14,-x+d34), //1698 -(x,y,z) => (-y+d12,z+d14,x+d34), //1699 -(x,y,z) => (y+d12,-z+d34,-x+d14), //1700 -(x,y,z) => (-y+d12,z+d34,x+d14), //1701 -(_,y,_) => (y+d14,d12,y+d12), //1702 -(_,y,_) => (y+d14,d12,-y+d34), //1703 -(_,y,_) => (-y+d14,d14,y+d34), //1704 -(_,y,z) => (y+d14,d14,z+d34), //1705 -(_,y,z) => (-y+d14,d14,-z+d34), //1706 -(_,y,_) => (y+d14,d18,y), //1707 -(_,y,_) => (-y+d14,d18,y), //1708 -(_,y,_) => (-y+d14,d34,-y+d12), //1709 -(_,y,z) => (y+d14,d34,-z+d14), //1710 -(_,y,z) => (-y+d14,d34,z+d14), //1711 -(_,y,_) => (-y+d14,d38,y+d12), //1712 -(_,y,_) => (y+d14,d58,y), //1713 -(_,y,_) => (y+d14,d58,-y), //1714 -(_,y,_) => (y+d14,d78,y+d12), //1715 -(_,y,_) => (-y+d14,d78,y+d12), //1716 -(x,y,z) => (y+d14,-x,z+d34), //1717 -(x,y,z) => (y+d14,-x+d12,z+d34), //1718 -(x,y,z) => (y+d14,x+d14,z+d14), //1719 -(x,y,z) => (-y+d14,x+d14,-z+d14), //1720 -(x,y,z) => (-y+d14,-x+d14,-z+d14), //1721 -(x,y,z) => (y+d14,-x+d14,z+d34), //1722 -(x,y,z) => (-y+d14,-x+d14,-z+d34), //1723 -(x,y,z) => (-y+d14,-x+d34,z), //1724 -(x,y,z) => (-y+d14,-x+d34,z+d12), //1725 -(x,y,z) => (y+d14,x+d34,-z+d14), //1726 -(x,y,z) => (-y+d14,x+d34,z+d14), //1727 -(x,y,z) => (y+d14,x+d34,-z+d34), //1728 -(x,y,z) => (y+d14,-x+d34,z+d34), //1729 -(x,y,z) => (y+d14,-x+d34,-z+d34), //1730 -(x,y,z) => (-y+d14,-x+d34,z+d34), //1731 -(_,y,_) => (-y+d14,y,d18), //1732 -(_,y,_) => (-y+d14,-y,d38), //1733 -(_,y,_) => (y+d14,-y,d58), //1734 -(_,y,_) => (y+d14,y,d78), //1735 -(_,y,_) => (y+d14,y+d12,0), //1736 -(_,y,_) => (-y+d14,-y+d12,d34), //1737 -(_,y,_) => (y+d14,-y+d34,d12), //1738 -(_,y,_) => (-y+d14,y+d34,d34), //1739 -(x,y,z) => (-y+d14,z,-x+d14), //1740 -(x,y,z) => (y+d14,-z+d12,x+d34), //1741 -(x,y,z) => (-y+d14,z+d12,-x+d34), //1742 -(x,y,z) => (-y+d14,-z+d14,x), //1743 -(x,y,z) => (y+d14,z+d14,-x+d14), //1744 -(x,y,z) => (y+d14,-z+d14,x+d14), //1745 -(x,y,z) => (-y+d14,z+d14,x+d14), //1746 -(x,y,z) => (-y+d14,-z+d14,-x+d14), //1747 -(x,y,z) => (y+d14,-z+d14,x+d34), //1748 -(x,y,z) => (y+d14,z+d34,-x+d12), //1749 -(x,y,z) => (-y+d14,-z+d34,x+d12), //1750 -(x,y,z) => (-y+d14,z+d34,x+d14), //1751 -(x,y,z) => (y+d14,z+d34,-x+d34), //1752 -(_,y,_) => (-y+d34,d12,-y+d12), //1753 -(_,y,_) => (-y+d34,d12,y+d14), //1754 -(_,y,_) => (y+d34,d14,y+d12), //1755 -(_,y,_) => (-y+d34,d18,-y+d12), //1756 -(_,y,_) => (y+d34,d34,-y+d14), //1757 -(_,y,_) => (y+d34,d38,-y), //1758 -(_,y,_) => (-y+d34,d38,-y), //1759 -(_,y,_) => (y+d34,d38,y+d12), //1760 -(_,y,_) => (y+d34,d58,-y+d12), //1761 -(_,y,_) => (-y+d34,d58,-y+d12), //1762 -(_,y,_) => (y+d34,d78,-y), //1763 -(_,y,_) => (-y+d34,d78,-y+d12), //1764 -(x,y,z) => (-y+d34,x,-z+d14), //1765 -(x,y,z) => (-y+d34,x+d12,-z+d14), //1766 -(x,y,z) => (y+d34,x+d14,-z), //1767 -(x,y,z) => (y+d34,x+d14,-z+d12), //1768 -(x,y,z) => (y+d34,x+d14,-z+d14), //1769 -(x,y,z) => (-y+d34,x+d14,z+d14), //1770 -(x,y,z) => (-y+d34,-x+d14,z+d14), //1771 -(x,y,z) => (y+d34,x+d14,-z+d34), //1772 -(x,y,z) => (y+d34,-x+d14,-z+d34), //1773 -(x,y,z) => (-y+d34,x+d14,z+d34), //1774 -(x,y,z) => (-y+d34,-x+d14,z+d34), //1775 -(x,y,z) => (y+d34,x+d34,z+d14), //1776 -(x,y,z) => (y+d34,-x+d34,z+d14), //1777 -(x,y,z) => (-y+d34,x+d34,z+d14), //1778 -(x,y,z) => (-y+d34,x+d34,-z+d14), //1779 -(x,y,z) => (y+d34,x+d34,z+d34), //1780 -(x,y,z) => (y+d34,-x+d34,z+d34), //1781 -(x,y,z) => (-y+d34,-x+d34,-z+d34), //1782 -(_,y,_) => (-y+d34,-y+d12,0), //1783 -(_,y,_) => (y+d34,y+d12,d14), //1784 -(_,y,_) => (y+d34,-y+d12,d18), //1785 -(_,y,_) => (y+d34,y+d12,d38), //1786 -(_,y,_) => (-y+d34,y+d12,d58), //1787 -(_,y,_) => (-y+d34,-y+d12,d78), //1788 -(_,y,_) => (-y+d34,y+d14,d12), //1789 -(_,y,_) => (y+d34,-y+d14,d14), //1790 -(x,y,z) => (y+d34,-z,x+d34), //1791 -(x,y,z) => (y+d34,-z+d12,x+d14), //1792 -(x,y,z) => (-y+d34,z+d12,-x+d14), //1793 -(x,y,z) => (y+d34,z+d14,-x+d12), //1794 -(x,y,z) => (-y+d34,-z+d14,x+d12), //1795 -(x,y,z) => (y+d34,z+d14,-x+d14), //1796 -(x,y,z) => (-y+d34,z+d14,x+d34), //1797 -(x,y,z) => (y+d34,z+d34,-x), //1798 -(x,y,z) => (y+d34,-z+d34,x+d14), //1799 -(x,y,z) => (-y+d34,-z+d34,-x+d34), //1800 -(_,y,z) => (z,0,y), //1801 -(_,y,z) => (z,0,-y), //1802 -(_,y,z) => (-z,0,y), //1803 -(_,y,z) => (-z,0,-y), //1804 -(_,y,z) => (z,d12,y), //1805 -(_,y,z) => (z,d12,-y), //1806 -(_,y,z) => (-z,d12,y), //1807 -(_,y,z) => (-z,d12,-y), //1808 -(x,_,z) => (z,x,x), //1809 -(x,_,z) => (z,x,-x), //1810 -(x,_,z) => (z,-x,x), //1811 -(x,_,z) => (z,-x,-x), //1812 -(x,_,z) => (-z,x,x), //1813 -(x,_,z) => (-z,x,-x), //1814 -(x,_,z) => (-z,-x,x), //1815 -(x,_,z) => (-z,-x,-x), //1816 -(x,y,z) => (z,x,y), //1817 -(x,y,z) => (z,x,-y), //1818 -(x,y,z) => (z,-x,y), //1819 -(x,y,z) => (z,-x,-y), //1820 -(x,y,z) => (-z,x,y), //1821 -(x,y,z) => (-z,x,-y), //1822 -(x,y,z) => (-z,-x,y), //1823 -(x,y,z) => (-z,-x,-y), //1824 -(x,_,z) => (z,-x+d12,-x+d12), //1825 -(x,_,z) => (-z,x+d12,x+d12), //1826 -(x,_,z) => (-z,-x+d12,x+d12), //1827 -(x,y,z) => (z,-x+d12,y+d12), //1828 -(x,y,z) => (z,-x+d12,-y+d12), //1829 -(x,y,z) => (-z,x+d12,y+d12), //1830 -(x,y,z) => (-z,x+d12,-y+d12), //1831 -(x,y,z) => (-z,-x+d12,y+d12), //1832 -(x,y,z) => (z,-x+d14,-y+d14), //1833 -(x,y,z) => (-z,x+d34,y+d34), //1834 -(_,y,z) => (z,y,0), //1835 -(_,y,z) => (z,-y,0), //1836 -(_,y,z) => (-z,y,0), //1837 -(_,y,z) => (-z,-y,0), //1838 -(_,y,z) => (z,y,d12), //1839 -(_,y,z) => (z,-y,d12), //1840 -(_,y,z) => (-z,y,d12), //1841 -(_,y,z) => (-z,-y,d12), //1842 -(x,y,z) => (z,y,x), //1843 -(x,y,z) => (z,y,-x), //1844 -(x,y,z) => (z,-y,x), //1845 -(x,y,z) => (z,-y,-x), //1846 -(x,y,z) => (-z,y,x), //1847 -(x,y,z) => (-z,y,-x), //1848 -(x,y,z) => (-z,-y,x), //1849 -(x,y,z) => (-z,-y,-x), //1850 -(x,y,z) => (z,y,-x+d12), //1851 -(x,y,z) => (z,-y,-x+d12), //1852 -(x,y,z) => (-z,-y,x+d12), //1853 -(x,y,z) => (z,-y+d12,x), //1854 -(x,y,z) => (-z,y+d12,-x), //1855 -(x,y,z) => (-z,-y+d12,x), //1856 -(x,y,z) => (z,-y+d12,-x+d12), //1857 -(x,y,z) => (-z,y+d12,x+d12), //1858 -(x,y,z) => (-z,y+d12,-x+d12), //1859 -(x,y,z) => (z,-y+d14,-x+d34), //1860 -(x,y,z) => (-z,y+d34,x+d14), //1861 -(x,_,z) => (z+d12,-x,x+d12), //1862 -(x,_,z) => (z+d12,-x,-x+d12), //1863 -(x,_,z) => (-z+d12,x,-x+d12), //1864 -(x,y,z) => (z+d12,x,-y+d12), //1865 -(x,y,z) => (z+d12,-x,y+d12), //1866 -(x,y,z) => (z+d12,-x,-y+d12), //1867 -(x,y,z) => (-z+d12,x,-y+d12), //1868 -(x,y,z) => (-z+d12,-x,y+d12), //1869 -(x,_,z) => (z+d12,x+d12,-x), //1870 -(x,_,z) => (-z+d12,x+d12,-x), //1871 -(x,_,z) => (-z+d12,-x+d12,x), //1872 -(x,_,z) => (z+d12,x+d12,-x+d12), //1873 -(x,_,z) => (z+d12,-x+d12,x+d12), //1874 -(x,_,z) => (-z+d12,x+d12,x+d12), //1875 -(x,_,z) => (-z+d12,-x+d12,-x+d12), //1876 -(x,y,z) => (z+d12,x+d12,-y), //1877 -(x,y,z) => (z+d12,-x+d12,-y), //1878 -(x,y,z) => (-z+d12,x+d12,y), //1879 -(x,y,z) => (-z+d12,x+d12,-y), //1880 -(x,y,z) => (-z+d12,-x+d12,y), //1881 -(x,y,z) => (z+d12,x+d12,-y+d12), //1882 -(x,y,z) => (z+d12,-x+d12,y+d12), //1883 -(x,y,z) => (-z+d12,x+d12,y+d12), //1884 -(x,y,z) => (-z+d12,-x+d12,-y+d12), //1885 -(x,y,z) => (z+d12,-x+d14,-y+d34), //1886 -(x,y,z) => (-z+d12,x+d14,y+d34), //1887 -(x,_,z) => (z+d12,-x+d34,-x+d14), //1888 -(x,_,z) => (-z+d12,x+d34,x+d14), //1889 -(x,y,z) => (z+d12,-x+d34,-y+d14), //1890 -(x,y,z) => (-z+d12,x+d34,y+d14), //1891 -(x,y,z) => (z+d12,-y,-x), //1892 -(x,y,z) => (-z+d12,y,x), //1893 -(x,y,z) => (-z+d12,y,-x), //1894 -(x,y,z) => (z+d12,-y,x+d12), //1895 -(x,y,z) => (-z+d12,y,-x+d12), //1896 -(x,y,z) => (-z+d12,-y,x+d12), //1897 -(_,y,z) => (z+d12,y+d12,d12), //1898 -(_,y,z) => (z+d12,-y+d12,d12), //1899 -(_,y,z) => (-z+d12,y+d12,d12), //1900 -(_,y,z) => (-z+d12,-y+d12,d12), //1901 -(x,y,z) => (z+d12,y+d12,-x), //1902 -(x,y,z) => (z+d12,-y+d12,-x), //1903 -(x,y,z) => (-z+d12,-y+d12,x), //1904 -(x,y,z) => (z+d12,y+d12,x+d12), //1905 -(x,y,z) => (z+d12,y+d12,-x+d12), //1906 -(x,y,z) => (z+d12,-y+d12,x+d12), //1907 -(x,y,z) => (z+d12,-y+d12,-x+d12), //1908 -(x,y,z) => (-z+d12,y+d12,x+d12), //1909 -(x,y,z) => (-z+d12,y+d12,-x+d12), //1910 -(x,y,z) => (-z+d12,-y+d12,x+d12), //1911 -(x,y,z) => (-z+d12,-y+d12,-x+d12), //1912 -(x,y,z) => (z+d12,-y+d14,-x+d34), //1913 -(x,y,z) => (-z+d12,y+d34,x+d14), //1914 -(x,y,z) => (-z+d14,x,-y+d14), //1915 -(x,_,z) => (z+d14,-x+d12,x+d34), //1916 -(x,_,z) => (-z+d14,x+d12,-x+d34), //1917 -(x,y,z) => (z+d14,-x+d12,y+d34), //1918 -(x,y,z) => (-z+d14,x+d12,-y+d34), //1919 -(x,_,z) => (-z+d14,-x+d14,-x+d14), //1920 -(x,y,z) => (-z+d14,-x+d14,y), //1921 -(x,y,z) => (z+d14,x+d14,-y+d14), //1922 -(x,y,z) => (z+d14,-x+d14,y+d14), //1923 -(x,y,z) => (-z+d14,x+d14,y+d14), //1924 -(x,y,z) => (-z+d14,-x+d14,-y+d14), //1925 -(x,y,z) => (z+d14,-x+d14,y+d34), //1926 -(x,_,z) => (z+d14,-x+d34,x+d34), //1927 -(x,y,z) => (z+d14,x+d34,-y+d12), //1928 -(x,y,z) => (-z+d14,-x+d34,y+d12), //1929 -(x,y,z) => (-z+d14,x+d34,y+d14), //1930 -(x,y,z) => (z+d14,x+d34,-y+d34), //1931 -(x,y,z) => (z+d14,-y,x+d34), //1932 -(x,y,z) => (z+d14,-y+d12,x+d34), //1933 -(x,y,z) => (z+d14,y+d14,x+d14), //1934 -(x,y,z) => (-z+d14,-y+d14,-x+d14), //1935 -(x,y,z) => (z+d14,-y+d14,x+d34), //1936 -(x,y,z) => (-z+d14,-y+d34,x), //1937 -(x,y,z) => (-z+d14,-y+d34,x+d12), //1938 -(x,y,z) => (-z+d14,y+d34,x+d14), //1939 -(x,y,z) => (z+d14,y+d34,-x+d34), //1940 -(x,y,z) => (z+d14,-y+d34,x+d34), //1941 -(x,y,z) => (-z+d14,-y+d34,x+d34), //1942 -(x,y,z) => (z+d34,-x,y+d34), //1943 -(x,y,z) => (z+d34,-x+d12,y+d14), //1944 -(x,y,z) => (-z+d34,x+d12,-y+d14), //1945 -(x,_,z) => (z+d34,x+d14,-x+d12), //1946 -(x,_,z) => (-z+d34,-x+d14,x+d12), //1947 -(x,_,z) => (z+d34,x+d14,-x+d34), //1948 -(x,y,z) => (z+d34,x+d14,-y+d12), //1949 -(x,y,z) => (-z+d34,-x+d14,y+d12), //1950 -(x,y,z) => (z+d34,x+d14,-y+d14), //1951 -(x,y,z) => (-z+d34,x+d14,y+d34), //1952 -(x,_,z) => (-z+d34,x+d34,x+d14), //1953 -(x,y,z) => (z+d34,x+d34,-y), //1954 -(x,y,z) => (z+d34,-x+d34,y+d14), //1955 -(x,y,z) => (-z+d34,-x+d34,-y+d34), //1956 -(x,y,z) => (-z+d34,y,-x+d14), //1957 -(x,y,z) => (-z+d34,y+d12,-x+d14), //1958 -(x,y,z) => (z+d34,y+d14,-x), //1959 -(x,y,z) => (z+d34,y+d14,-x+d12), //1960 -(x,y,z) => (z+d34,y+d14,-x+d14), //1961 -(x,y,z) => (z+d34,y+d14,-x+d34), //1962 -(x,y,z) => (z+d34,-y+d14,-x+d34), //1963 -(x,y,z) => (-z+d34,y+d14,x+d34), //1964 -(x,y,z) => (z+d34,-y+d34,x+d14), //1965 -(x,y,z) => (-z+d34,y+d34,x+d14), //1966 -(x,y,z) => (-z+d34,y+d34,-x+d14), //1967 -(x,y,z) => (-z+d34,-y+d34,-x+d34) //1968 - - -#endregion Coordinates - }); - - Task taskOperationList = Task.Run(() => new SO[] - { - #region OperationList - -new SO(1,+1,(0,0,0),(0,0,0)),//000 -new SO(-1,+1,(0,0,0),(0,0,0)),//001 -new SO(2,+1,(0,1,0),(0,0,0)), -new SO(2,+1,(0,0,1),(0,0,0)), -new SO(2,+1,(1,0,0),(0,0,0)), -new SO(2,+1,(0,1,0),(0,0,d12)), -new SO(2,+1,(0,0,1),(0,0,d12)), -new SO(2,+1,(1,0,0),(0,d12,d14)), -new SO(-2,+1,(0,1,0),(0,0,0)), -new SO(-2,+1,(0,0,1),(0,0,0)), -new SO(-2,+1,(1,0,0),(0,0,0)), -new SO(-2,+1,(0,1,0),(0,0,d12)), -new SO(-2,+1,(0,1,0),(0,d12,d14)), -new SO(-2,+1,(0,1,0),(0,d12,d14)), -new SO(-2,+1,(0,0,1),(0,d12,d14)), -new SO(-2,+1,(0,0,1),(d12,0,d34)), -new SO(-2,+1,(0,0,1),(0,0,d12)), -new SO(-2,+1,(1,0,0),(0,0,d12)), -new SO(-2,+1,(1,0,0),(0,d12,d12)), -new SO(-2,+1,(1,0,0),(0,0,d12)), -new SO(-2,+1,(0,1,0),(0,0,d12)), -new SO(-2,+1,(0,0,1),(0,0,d12)), -new SO(-2,+1,(1,0,0),(0,d12,d14)), -new SO(2,+1,(0,1,0),(0,0,d12)), -new SO(2,+1,(0,1,0),(0,d12,d14)), -new SO(2,+1,(0,1,0),(0,d12,d14)), -new SO(2,+1,(0,0,1),(0,d12,d14)), -new SO(2,+1,(0,0,1),(d12,0,d34)), -new SO(2,+1,(0,0,1),(0,0,d12)), -new SO(2,+1,(1,0,0),(0,0,d12)), -new SO(2,+1,(1,0,0),(0,d12,d12)), -new SO(2,+1,(1,0,0),(0,0,d12)), -new SO(2,+1,(0,1,0),(0,d12,d12)), -new SO(-2,+1,(0,1,0),(0,d12,d12)), -new SO(2,+1,(0,1,0),(d12,0,d34)), -new SO(-2,+1,(0,1,0),(d12,0,d34)), -new SO(2,+1,(0,1,0),(d12,0,d34)), -new SO(-2,+1,(0,1,0),(d12,0,d34)), -new SO(2,+1,(0,0,1),(0,d12,d14)), -new SO(-2,+1,(0,0,1),(0,d12,d14)), -new SO(2,+1,(0,0,1),(d12,0,d34)), -new SO(-2,+1,(0,0,1),(d12,0,d34)), -new SO(2,+1,(0,0,1),(0,d12,d12)), -new SO(-2,+1,(0,0,1),(0,d12,d12)), -new SO(2,+1,(1,0,0),(d12,0,d34)), -new SO(-2,+1,(1,0,0),(d12,0,d34)), -new SO(2,+1,(1,0,0),(d12,0,d34)), -new SO(-2,+1,(1,0,0),(d12,0,d34)), -new SO(2,+1,(1,0,0),(0,d12,d14)), -new SO(-2,+1,(1,0,0),(0,d12,d14)), -new SO(-2,+1,(0,1,0),(d12,0,d34)), -new SO(-2,+1,(1,0,0),(d12,0,d34)), -new SO(-2,+1,(0,0,1),(d12,0,d34)), -new SO(-1,+1,(0,0,0),(d12,0,d34)), -new SO(-1,+1,(0,0,0),(d12,0,d34)), -new SO(-1,+1,(0,0,0),(0,d12,d12)), -new SO(-1,+1,(0,0,0),(0,d12,d14)), -new SO(-1,+1,(0,0,0),(d12,0,d34)), -new SO(2,+1,(0,0,1),(d34,d14,d34)), -new SO(2,+1,(0,1,0),(d14,d14,d34)), -new SO(2,+1,(1,0,0),(0,d12,d14)), -new SO(-2,+1,(0,0,1),(d12,0,d34)), -new SO(-2,+1,(0,1,0),(d12,0,d34)), -new SO(-2,+1,(1,0,0),(0,d14,d14)), -new SO(4,+1,(0,0,1),(0,0,0)), -new SO(4,+1,(0,0,1),(0,0,0)), -new SO(4,+1,(0,0,1),(0,0,d12)), -new SO(4,+1,(0,0,1),(0,0,d12)), -new SO(4,+1,(0,0,1),(0,0,d12)), -new SO(4,+1,(0,0,1),(0,0,d12)), -new SO(4,+1,(0,0,1),(0,0,d12)), -new SO(4,+1,(0,0,1),(0,0,d12)), -new SO(4,+1,(0,0,1),(0,d12,d12)), -new SO(4,+1,(0,0,1),(d12,0,d34)), -new SO(-4,+1,(0,0,1),(0,0,0)), -new SO(-4,+1,(0,0,1),(0,0,0)), -new SO(-4,+1,(0,0,1),(0,0,d12)), -new SO(-4,+1,(0,0,1),(0,0,d12)), -new SO(4,+1,(0,0,1),(d12,0,d34)), -new SO(4,+1,(0,0,1),(d12,0,d34)), -new SO(4,+1,(0,0,1),(0,d12,d14)), -new SO(4,+1,(0,0,1),(0,0,d12)), -new SO(-4,+1,(0,0,1),(0,d12,d14)), -new SO(-4,+1,(0,0,1),(0,0,d12)), -new SO(4,+1,(0,0,1),(d12,0,d34)), -new SO(4,+1,(0,0,1),(d12,0,d34)), -new SO(4,+1,(0,0,1),(0,d12,d12)), -new SO(4,+1,(0,0,1),(0,d12,d14)), -new SO(-4,+1,(0,0,1),(0,d12,d12)), -new SO(-4,+1,(0,0,1),(0,d12,d14)), -new SO(-1,+1,(0,0,0),(0,d12,d12)), -new SO(-2,+1,(0,0,1),(d12,0,d34)), -new SO(-4,+1,(0,0,1),(d12,0,d34)), -new SO(4,+1,(0,0,1),(d14,d14,d34)), -new SO(4,+1,(0,0,1),(0,d14,d34)), -new SO(-4,+1,(0,0,1),(d14,d34,d34)), -new SO(-4,+1,(0,0,1),(d12,0,d34)), -new SO(2,+1,(1,1,0),(0,0,0)), -new SO(2,+1,(1,-1,0),(0,0,0)), -new SO(2,+1,(1,1,0),(0,0,d12)), -new SO(2,+1,(1,-1,0),(0,0,d12)),//100 -new SO(4,+1,(0,0,1),(d12,0,d34)), -new SO(4,+1,(0,0,1),(d12,0,d34)), -new SO(2,+1,(0,1,0),(d12,0,d34)), -new SO(2,+1,(1,0,0),(d12,0,d34)), -new SO(2,+1,(1,-1,0),(0,0,d12)), -new SO(2,+1,(1,1,0),(0,0,d12)), -new SO(2,+1,(1,1,0),(0,0,d12)), -new SO(2,+1,(1,-1,0),(0,0,d12)), -new SO(4,+1,(0,0,1),(d12,0,d34)), -new SO(4,+1,(0,0,1),(d12,0,d34)), -new SO(2,+1,(0,1,0),(d12,0,d34)), -new SO(2,+1,(1,0,0),(d12,0,d34)), -new SO(2,+1,(0,1,0),(d12,0,d34)), -new SO(2,+1,(1,0,0),(0,d12,d12)), -new SO(2,+1,(1,1,0),(d12,0,d34)), -new SO(-2,+1,(1,1,0),(0,0,0)), -new SO(-2,-1,(1,-1,0),(0,0,0)), -new SO(-2,+1,(1,1,0),(d12,0,d34)), -new SO(-2,-1,(1,-1,0),(d12,0,d34)), -new SO(-2,+1,(1,1,0),(0,0,d12)), -new SO(-2,-1,(1,-1,0),(0,0,d12)), -new SO(-2,+1,(1,1,0),(d12,0,d34)), -new SO(-2,-1,(1,-1,0),(d12,0,d34)), -new SO(-2,+1,(1,1,0),(0,d12,d12)), -new SO(-2,-1,(1,-1,0),(d12,0,d34)), -new SO(-2,+1,(1,1,0),(0,d12,d12)), -new SO(-2,-1,(1,-1,0),(0,d12,d14)), -new SO(2,+1,(1,1,0),(d12,0,d34)), -new SO(2,+1,(1,-1,0),(d12,0,d34)), -new SO(2,+1,(1,-1,0),(d12,0,d34)), -new SO(2,+1,(1,0,0),(d12,0,d34)), -new SO(-2,+1,(1,1,0),(d12,0,d34)), -new SO(-4,+1,(0,0,1),(d12,0,d34)), -new SO(-4,+1,(0,0,1),(d12,0,d34)), -new SO(-4,+1,(0,0,1),(d12,0,d34)), -new SO(4,+1,(0,0,1),(0,d12,d14)), -new SO(4,+1,(0,0,1),(0,d12,d12)), -new SO(-4,+1,(0,0,1),(0,d12,d14)), -new SO(-4,+1,(0,0,1),(0,d12,d12)), -new SO(-2,-1,(1,-1,0),(0,d12,d12)), -new SO(4,+1,(0,0,1),(d12,0,d34)), -new SO(4,+1,(0,0,1),(d12,0,d34)), -new SO(2,+1,(1,1,0),(d12,0,d34)), -new SO(2,+1,(1,-1,0),(d12,0,d34)), -new SO(-4,+1,(0,0,1),(d34,d14,d34)), -new SO(-4,+1,(0,0,1),(d34,d34,d14)), -new SO(-2,+1,(1,1,0),(d34,d14,d34)), -new SO(-2,-1,(1,-1,0),(d34,d34,d14)), -new SO(2,+1,(0,1,0),(0,d12,d14)), -new SO(2,+1,(1,0,0),(0,d12,d12)), -new SO(-2,+1,(1,1,0),(0,d12,d14)), -new SO(-2,-1,(1,-1,0),(0,d12,d12)), -new SO(2,+1,(1,1,0),(d14,d34,d34)), -new SO(2,+1,(1,-1,0),(d12,0,d34)), -new SO(-2,+1,(1,1,0),(d14,d14,d34)), -new SO(-2,-1,(1,-1,0),(0,d14,d34)), -new SO(3,+1,(0,0,1),(0,0,0)), -new SO(3,-1,(0,0,1),(0,0,0)), -new SO(3,+1,(0,0,1),(0,0,d12)), -new SO(3,-1,(0,0,1),(0,0,d12)), -new SO(3,+1,(0,0,1),(0,0,d12)), -new SO(3,-1,(0,0,1),(0,0,d12)), -new SO(3,+1,(1,1,1),(0,0,0)), -new SO(3,-1,(1,1,1),(0,0,0)), -new SO(-3,+1,(0,0,1),(0,0,0)), -new SO(-3,-1,(0,0,1),(0,0,0)), -new SO(-3,+1,(1,1,1),(0,0,0)), -new SO(-3,-1,(1,1,1),(0,0,0)), -new SO(2,+1,(1,2,0),(0,0,0)), -new SO(2,+1,(2,1,0),(0,0,0)), -new SO(2,+1,(1,-1,0),(0,0,d12)), -new SO(2,+1,(1,2,0),(0,0,d12)), -new SO(2,+1,(1,0,0),(0,0,d12)), -new SO(2,+1,(0,1,0),(0,0,d12)), -new SO(2,+1,(1,-1,0),(0,0,d12)), -new SO(2,+1,(1,2,0),(0,0,d12)), -new SO(2,+1,(1,0,0),(0,0,d12)), -new SO(2,+1,(0,1,0),(0,0,d12)), -new SO(2,+1,(-1,0,1),(0,0,0)), -new SO(2,+1,(0,-1,1),(0,0,0)), -new SO(-2,+1,(1,2,0),(0,0,0)), -new SO(-2,+1,(2,1,0),(0,0,0)), -new SO(-2,+1,(1,2,0),(0,0,d12)), -new SO(-2,+1,(2,1,0),(0,0,d12)), -new SO(-2,-1,(-1,0,1),(0,0,0)), -new SO(-2,-1,(0,1,-1),(0,0,0)), -new SO(-2,-1,(-1,0,1),(d12,0,d34)), -new SO(-2,-1,(0,1,-1),(d12,0,d34)), -new SO(2,+1,(1,2,0),(0,0,d12)), -new SO(2,+1,(2,1,0),(0,0,d12)), -new SO(2,+1,(-1,0,1),(d12,0,d34)), -new SO(2,+1,(0,-1,1),(d12,0,d34)), -new SO(6,-1,(0,0,1),(0,0,0)), -new SO(6,-1,(0,0,1),(0,0,0)), -new SO(6,-1,(0,0,1),(0,0,d12)), -new SO(6,-1,(0,0,1),(0,0,d12)), -new SO(6,-1,(0,0,1),(0,0,d12)), -new SO(6,-1,(0,0,1),(0,0,d12)), -new SO(6,-1,(0,0,1),(0,0,d12)), -new SO(6,-1,(0,0,1),(0,0,d12)),//200 -new SO(6,-1,(0,0,1),(0,0,d12)), -new SO(6,-1,(0,0,1),(0,0,d12)), -new SO(6,-1,(0,0,1),(0,0,d12)), -new SO(6,-1,(0,0,1),(0,0,d12)), -new SO(-6,-1,(0,0,1),(0,0,0)), -new SO(-6,-1,(0,0,1),(0,0,0)), -new SO(-6,-1,(0,0,1),(0,0,d12)), -new SO(-6,-1,(0,0,1),(0,0,d12)), -new SO(2,+1,(1,1,0),(0,0,d12)), -new SO(2,+1,(1,-1,0),(0,0,d12)), -new SO(2,+1,(2,1,0),(0,0,d12)), -new SO(2,+1,(1,1,0),(0,0,d12)), -new SO(2,+1,(1,-1,0),(0,0,d12)), -new SO(2,+1,(2,1,0),(0,0,d12)), -new SO(2,+1,(2,1,0),(0,0,d12)), -new SO(2,+1,(2,1,0),(0,0,d12)), -new SO(3,+1,(-1,1,-1),(0,0,0)), -new SO(3,+1,(1,-1,-1),(0,0,0)), -new SO(3,+1,(-1,-1,1),(0,0,0)), -new SO(3,-1,(1,-1,-1),(0,0,0)), -new SO(3,-1,(-1,-1,1),(0,0,0)), -new SO(3,-1,(-1,1,-1),(0,0,0)), -new SO(3,+1,(-1,1,-1),(d12,0,d34)), -new SO(3,+1,(1,-1,-1),(0,d12,d14)), -new SO(3,+1,(-1,-1,1),(0,d12,d12)), -new SO(3,-1,(1,-1,-1),(0,d12,d12)), -new SO(3,-1,(-1,-1,1),(d12,0,d34)), -new SO(3,-1,(-1,1,-1),(0,d12,d14)), -new SO(-3,+1,(-1,1,-1),(0,0,0)), -new SO(-3,+1,(1,-1,-1),(0,0,0)), -new SO(-3,+1,(-1,-1,1),(0,0,0)), -new SO(-3,-1,(1,-1,-1),(0,0,0)), -new SO(-3,-1,(-1,-1,1),(0,0,0)), -new SO(-3,-1,(-1,1,-1),(0,0,0)), -new SO(-3,+1,(1,1,1),(d12,0,d34)), -new SO(-3,+1,(-1,1,-1),(d12,0,d34)), -new SO(-3,+1,(1,-1,-1),(d12,0,d34)), -new SO(-3,+1,(-1,-1,1),(d12,0,d34)), -new SO(-3,-1,(1,1,1),(d12,0,d34)), -new SO(-3,-1,(1,-1,-1),(d12,0,d34)), -new SO(-3,-1,(-1,-1,1),(d12,0,d34)), -new SO(-3,-1,(-1,1,-1),(d12,0,d34)), -new SO(3,+1,(-1,1,-1),(0,d12,d12)), -new SO(3,+1,(1,-1,-1),(d12,0,d34)), -new SO(3,+1,(-1,-1,1),(0,d12,d14)), -new SO(3,-1,(1,-1,-1),(0,d12,d14)), -new SO(3,-1,(-1,-1,1),(0,d12,d12)), -new SO(3,-1,(-1,1,-1),(d12,0,d34)), -new SO(-3,+1,(-1,1,-1),(0,d12,d12)), -new SO(-3,+1,(1,-1,-1),(d12,0,d34)), -new SO(-3,+1,(-1,-1,1),(0,d12,d14)), -new SO(-3,-1,(1,-1,-1),(0,d12,d14)), -new SO(-3,-1,(-1,-1,1),(0,d12,d12)), -new SO(-3,-1,(-1,1,-1),(d12,0,d34)), -new SO(-3,+1,(1,1,1),(d12,0,d34)), -new SO(-3,+1,(-1,1,-1),(d12,0,d34)), -new SO(-3,+1,(1,-1,-1),(d12,0,d34)), -new SO(-3,+1,(-1,-1,1),(d12,0,d34)), -new SO(-3,-1,(1,1,1),(d12,0,d34)), -new SO(-3,-1,(1,-1,-1),(d12,0,d34)), -new SO(-3,-1,(-1,-1,1),(d12,0,d34)), -new SO(-3,-1,(-1,1,-1),(d12,0,d34)), -new SO(3,+1,(-1,1,-1),(0,d12,d14)), -new SO(3,+1,(1,-1,-1),(d34,d14,d34)), -new SO(3,+1,(-1,-1,1),(d14,d14,d34)), -new SO(3,-1,(1,-1,-1),(d14,d14,d34)), -new SO(3,-1,(-1,-1,1),(0,d12,d14)), -new SO(3,-1,(-1,1,-1),(d34,d14,d34)), -new SO(-3,+1,(-1,1,-1),(0,d14,d14)), -new SO(-3,+1,(1,-1,-1),(d12,0,d34)), -new SO(-3,+1,(-1,-1,1),(d12,0,d34)), -new SO(-3,-1,(1,-1,-1),(d12,0,d34)), -new SO(-3,-1,(-1,-1,1),(0,d14,d14)), -new SO(-3,-1,(-1,1,-1),(d12,0,d34)), -new SO(-3,+1,(-1,1,-1),(d12,0,d34)), -new SO(-3,+1,(1,-1,-1),(0,d12,d14)), -new SO(-3,+1,(-1,-1,1),(0,d12,d12)), -new SO(-3,-1,(1,-1,-1),(0,d12,d12)), -new SO(-3,-1,(-1,-1,1),(d12,0,d34)), -new SO(-3,-1,(-1,1,-1),(0,d12,d14)), -new SO(4,-1,(1,0,0),(0,0,0)), -new SO(2,+1,(0,1,1),(0,0,0)), -new SO(4,+1,(1,0,0),(0,0,0)), -new SO(4,+1,(0,1,0),(0,0,0)), -new SO(2,+1,(1,0,1),(0,0,0)), -new SO(4,+1,(0,1,0),(0,0,0)), -new SO(4,-1,(1,0,0),(d12,0,d34)), -new SO(2,+1,(0,1,1),(d12,0,d34)), -new SO(4,+1,(1,0,0),(d12,0,d34)), -new SO(4,+1,(0,1,0),(d12,0,d34)), -new SO(2,+1,(1,0,1),(d12,0,d34)), -new SO(4,+1,(0,1,0),(d12,0,d34)), -new SO(3,+1,(-1,1,-1),(0,d12,d14)), -new SO(3,+1,(1,-1,-1),(0,d12,d12)), -new SO(3,+1,(-1,-1,1),(d12,0,d34)), -new SO(3,-1,(1,-1,-1),(d12,0,d34)), -new SO(3,-1,(-1,-1,1),(0,d12,d14)), -new SO(3,-1,(-1,1,-1),(0,d12,d12)), -new SO(2,+1,(1,1,0),(d34,d14,d34)), -new SO(4,+1,(0,0,1),(d14,d34,d34)),//300 -new SO(4,+1,(0,0,1),(d34,d34,d14)), -new SO(4,-1,(1,0,0),(d34,d14,d34)), -new SO(2,+1,(0,1,1),(d34,d34,d14)), -new SO(2,+1,(0,-1,1),(d12,0,d34)), -new SO(4,+1,(1,0,0),(d14,d34,d34)), -new SO(4,+1,(0,1,0),(d34,d14,d34)), -new SO(2,+1,(1,0,1),(d14,d34,d34)), -new SO(4,+1,(0,1,0),(d34,d34,d14)), -new SO(2,+1,(-1,0,1),(d12,0,d34)), -new SO(4,+1,(0,0,1),(d34,d34,d14)), -new SO(4,+1,(0,0,1),(d34,d14,d34)), -new SO(4,-1,(1,0,0),(d14,d34,d34)), -new SO(2,+1,(0,1,1),(d34,d14,d34)), -new SO(4,+1,(1,0,0),(d34,d34,d14)), -new SO(4,+1,(0,1,0),(d14,d34,d34)), -new SO(2,+1,(1,0,1),(d34,d34,d14)), -new SO(4,+1,(0,1,0),(d34,d14,d34)), -new SO(2,+1,(1,1,0),(d14,d14,d34)), -new SO(2,+1,(1,-1,0),(0,d14,d34)), -new SO(4,-1,(1,0,0),(d14,d14,d34)), -new SO(2,+1,(0,1,1),(d12,0,d34)), -new SO(2,+1,(0,-1,1),(0,d14,d34)), -new SO(4,+1,(1,0,0),(d12,0,d34)), -new SO(4,+1,(0,1,0),(d14,d14,d34)), -new SO(2,+1,(1,0,1),(d12,0,d34)), -new SO(4,+1,(0,1,0),(d12,0,d34)), -new SO(2,+1,(-1,0,1),(0,d14,d34)), -new SO(-4,+1,(1,0,0),(0,0,0)), -new SO(-4,-1,(1,0,0),(0,0,0)), -new SO(-2,-1,(0,1,1),(0,0,0)), -new SO(-4,+1,(0,1,0),(0,0,0)), -new SO(-2,+1,(1,0,1),(0,0,0)), -new SO(-4,+1,(0,1,0),(0,0,0)), -new SO(-4,+1,(1,0,0),(d12,0,d34)), -new SO(-4,-1,(1,0,0),(d12,0,d34)), -new SO(-2,-1,(0,1,1),(d12,0,d34)), -new SO(-4,+1,(0,1,0),(d12,0,d34)), -new SO(-2,+1,(1,0,1),(d12,0,d34)), -new SO(-4,+1,(0,1,0),(d12,0,d34)), -new SO(-2,-1,(1,-1,0),(d12,0,d34)), -new SO(-2,+1,(1,1,0),(d14,d34,d34)), -new SO(-2,-1,(0,1,-1),(d12,0,d34)), -new SO(-4,+1,(1,0,0),(d34,d34,d14)), -new SO(-4,-1,(1,0,0),(d14,d34,d34)), -new SO(-2,-1,(0,1,1),(d34,d14,d34)), -new SO(-2,-1,(-1,0,1),(d12,0,d34)), -new SO(-4,+1,(0,1,0),(d34,d14,d34)), -new SO(-2,+1,(1,0,1),(d34,d34,d14)), -new SO(-4,+1,(0,1,0),(d14,d34,d34)), -new SO(4,-1,(1,0,0),(0,0,d12)), -new SO(2,+1,(0,1,1),(0,d12,d14)), -new SO(4,+1,(1,0,0),(0,0,d12)), -new SO(4,+1,(0,1,0),(0,0,d12)), -new SO(2,+1,(1,0,1),(0,0,d12)), -new SO(4,+1,(0,1,0),(0,d12,d14)), -new SO(-4,-1,(1,0,0),(0,0,d12)), -new SO(-2,-1,(0,1,1),(0,d12,d14)), -new SO(-4,+1,(1,0,0),(0,0,d12)), -new SO(-4,+1,(0,1,0),(0,0,d12)), -new SO(-2,+1,(1,0,1),(0,0,d12)), -new SO(-4,+1,(0,1,0),(0,d12,d14)), -new SO(4,-1,(1,0,0),(d12,0,d34)), -new SO(2,+1,(0,1,1),(0,d12,d12)), -new SO(4,+1,(1,0,0),(0,d12,d14)), -new SO(4,+1,(0,1,0),(d12,0,d34)), -new SO(2,+1,(1,0,1),(0,d12,d14)), -new SO(4,+1,(0,1,0),(0,d12,d12)), -new SO(-4,-1,(1,0,0),(d12,0,d34)), -new SO(-2,-1,(0,1,1),(0,d12,d12)), -new SO(-4,+1,(1,0,0),(0,d12,d14)), -new SO(-4,+1,(0,1,0),(d12,0,d34)), -new SO(-2,+1,(1,0,1),(0,d12,d14)), -new SO(-4,+1,(0,1,0),(0,d12,d12)), -new SO(-2,+1,(0,0,1),(d14,d34,d34)), -new SO(-2,+1,(0,1,0),(d34,d34,d14)), -new SO(-2,+1,(1,0,0),(d34,d14,d34)), -new SO(-3,+1,(-1,1,-1),(d34,d14,d34)), -new SO(-3,+1,(1,-1,-1),(d14,d34,d34)), -new SO(-3,+1,(-1,-1,1),(d34,d34,d14)), -new SO(-3,-1,(1,-1,-1),(d34,d34,d14)), -new SO(-3,-1,(-1,-1,1),(d34,d14,d34)), -new SO(-3,-1,(-1,1,-1),(d14,d34,d34)), -new SO(-2,+1,(1,1,0),(0,d12,d14)), -new SO(-4,-1,(1,0,0),(0,d12,d14)), -new SO(-2,-1,(0,1,1),(d12,0,d34)), -new SO(-4,+1,(1,0,0),(0,d12,d12)), -new SO(-4,+1,(0,1,0),(0,d12,d14)), -new SO(-2,+1,(1,0,1),(0,d12,d12)), -new SO(-4,+1,(0,1,0),(d12,0,d34)), -new SO(2,+1,(0,0,1),(d14,d14,d34)), -new SO(2,+1,(0,1,0),(d12,0,d34)), -new SO(2,+1,(1,0,0),(d12,0,d34)), -new SO(3,+1,(-1,1,-1),(d12,0,d34)), -new SO(3,+1,(1,-1,-1),(d14,d14,d34)), -new SO(3,+1,(-1,-1,1),(d12,0,d34)), -new SO(3,-1,(1,-1,-1),(d12,0,d34)), -new SO(3,-1,(-1,-1,1),(d12,0,d34)), -new SO(3,-1,(-1,1,-1),(d14,d14,d34)), -new SO(2,+1,(1,1,0),(d14,d14,d34)), -new SO(4,+1,(0,0,1),(d12,0,d34)),//400 -new SO(4,+1,(0,0,1),(d12,0,d34)), -new SO(4,-1,(1,0,0),(d14,d14,d34)), -new SO(2,+1,(0,1,1),(d12,0,d34)), -new SO(4,+1,(1,0,0),(d12,0,d34)), -new SO(4,+1,(0,1,0),(d14,d14,d34)), -new SO(2,+1,(1,0,1),(d12,0,d34)), -new SO(4,+1,(0,1,0),(d12,0,d34)), -new SO(-2,+1,(0,0,1),(d12,0,d34)), -new SO(-2,+1,(0,1,0),(d14,d14,d34)), -new SO(-2,+1,(1,0,0),(d12,0,d34)), -new SO(-3,+1,(-1,1,-1),(d12,0,d34)), -new SO(-3,+1,(1,-1,-1),(d12,0,d34)), -new SO(-3,+1,(-1,-1,1),(d14,d14,d34)), -new SO(-3,-1,(1,-1,-1),(d14,d14,d34)), -new SO(-3,-1,(-1,-1,1),(d12,0,d34)), -new SO(-3,-1,(-1,1,-1),(d12,0,d34)), -new SO(-2,+1,(1,1,0),(d12,0,d34)), -new SO(-4,+1,(0,0,1),(d14,d14,d34)), -new SO(-4,+1,(0,0,1),(d12,0,d34)), -new SO(-4,-1,(1,0,0),(d12,0,d34)), -new SO(-2,-1,(0,1,1),(d12,0,d34)), -new SO(-4,+1,(1,0,0),(d14,d14,d34)), -new SO(-4,+1,(0,1,0),(d12,0,d34)), -new SO(-2,+1,(1,0,1),(d14,d14,d34)), -new SO(-4,+1,(0,1,0),(d12,0,d34)), -new SO(-1,+1,(0,0,0),(0,d14,d34)), -new SO(-2,+1,(0,0,1),(d14,d14,d34)), -new SO(-2,+1,(0,1,0),(d12,0,d34)), -new SO(-2,+1,(1,0,0),(d12,0,d34)), -new SO(-3,+1,(1,1,1),(0,d14,d34)), -new SO(-3,+1,(-1,1,-1),(d12,0,d34)), -new SO(-3,+1,(1,-1,-1),(d14,d14,d34)), -new SO(-3,+1,(-1,-1,1),(d12,0,d34)), -new SO(-3,-1,(1,1,1),(0,d14,d34)), -new SO(-3,-1,(1,-1,-1),(d12,0,d34)), -new SO(-3,-1,(-1,-1,1),(d12,0,d34)), -new SO(-3,-1,(-1,1,-1),(d14,d14,d34)), -new SO(-2,+1,(1,1,0),(0,0,d12)), -new SO(-4,+1,(0,0,1),(0,d12,d14)), -new SO(-4,-1,(1,0,0),(0,0,d12)), -new SO(-2,-1,(0,1,1),(0,0,d12)), -new SO(-4,+1,(1,0,0),(0,d12,d14)), -new SO(-4,+1,(0,1,0),(0,0,d12)), -new SO(-2,+1,(1,0,1),(0,d12,d14)), -new SO(-4,+1,(0,1,0),(0,0,d12)), -new SO(2,+1,(0,0,1),(d12,0,d34)), -new SO(2,+1,(0,1,0),(d14,d14,d34)), -new SO(2,+1,(1,0,0),(d12,0,d34)), -new SO(3,+1,(-1,1,-1),(d12,0,d34)), -new SO(3,+1,(1,-1,-1),(d12,0,d34)), -new SO(3,+1,(-1,-1,1),(d14,d14,d34)), -new SO(3,-1,(1,-1,-1),(d14,d14,d34)), -new SO(3,-1,(-1,-1,1),(d12,0,d34)), -new SO(3,-1,(-1,1,-1),(d12,0,d34)), -new SO(2,+1,(1,1,0),(d14,d14,d34)), -new SO(4,+1,(0,0,1),(d12,0,d34)), -new SO(4,+1,(0,0,1),(0,d12,d14)), -new SO(4,-1,(1,0,0),(d14,d14,d34)), -new SO(2,+1,(0,1,1),(0,d12,d14)), -new SO(4,+1,(1,0,0),(d12,0,d34)), -new SO(4,+1,(0,1,0),(d14,d14,d34)), -new SO(2,+1,(1,0,1),(d12,0,d34)), -new SO(4,+1,(0,1,0),(0,d12,d14)), -new SO(-2,+1,(0,0,1),(d14,d14,d34)), -new SO(-2,+1,(0,1,0),(d12,0,d34)), -new SO(-2,+1,(1,0,0),(d12,0,d34)), -new SO(-3,+1,(-1,1,-1),(d12,0,d34)), -new SO(-3,+1,(1,-1,-1),(d14,d14,d34)), -new SO(-3,+1,(-1,-1,1),(d12,0,d34)), -new SO(-3,-1,(1,-1,-1),(d12,0,d34)), -new SO(-3,-1,(-1,-1,1),(d12,0,d34)), -new SO(-3,-1,(-1,1,-1),(d14,d14,d34)), -new SO(-2,+1,(1,1,0),(d12,0,d34)), -new SO(-4,+1,(0,0,1),(d14,d14,d34)), -new SO(-4,+1,(0,0,1),(0,d12,d14)), -new SO(-4,-1,(1,0,0),(d12,0,d34)), -new SO(-2,-1,(0,1,1),(0,d12,d14)), -new SO(-4,+1,(1,0,0),(d14,d14,d34)), -new SO(-4,+1,(0,1,0),(d12,0,d34)), -new SO(-2,+1,(1,0,1),(d14,d14,d34)), -new SO(-4,+1,(0,1,0),(0,d12,d14)), - #endregion - }); - - Task task8 = Task.Run(() => new string[][] - { - #region StrArray - new[]{"","Unknown","Unknown","Unknown","Unknown","","Unknown","Unknown","Unknown","Unknown","Unknown","Unknown","Unknown","Unknown","Unknown","Unknown","Unknown"}, -new[]{"","C1^1","P1","P1","P1","","P","1","","1","","1","","1","C1","-1",t}, -new[]{"","Ci^1","-P1","P-1","P-1","","P","-1","","1","","1","","-1","Ci","-1",t}, -new[]{"b","C2^1","P2y","P2=P121","P121","b","P","1","","2","","1","","2","C2","2/m",m}, -new[]{"c","C2^1","P2","P2=P112","P112","c","P","1","","1","","2","","2","C2","2/m",m}, -new[]{"a","C2^1","P2x","P2=P211","P211","a","P","2","","1","","1","","2","C2","2/m",m}, -new[]{"b","C2^2","P2yb","P2sub1=P12sub11","P12sub11","b","P","1","","2s1","","1","","2","C2","2/m",m}, -new[]{"c","C2^2","P2c","P2sub1=P112sub1","P112sub1","c","P","1","","1","","2s1","","2","C2","2/m",m}, -new[]{"a","C2^2","P2xa","P2sub1=P2sub111","P2sub111","a","P","2s1","","1","","1","","2","C2","2/m",m}, -new[]{"b1","C2^3","C2y","C2=C121","C121","b","C","1","","2","","1","","2","C2","2/m",m}, -new[]{"b2","C2^3","A2y","C2=A121","A121","b","A","1","","2","","1","","2","C2","2/m",m}, -new[]{"b3","C2^3","I2y","C2=I121","I121","b","I","1","","2","","1","","2","C2","2/m",m}, -new[]{"c1","C2^3","A2","C2=A112","A112","c","A","1","","1","","2","","2","C2","2/m",m}, -new[]{"c2","C2^3","B2","C2=B112=B2","B112","c","B","1","","1","","2","","2","C2","2/m",m}, -new[]{"c3","C2^3","I2","C2=I112","I112","c","I","1","","1","","2","","2","C2","2/m",m}, -new[]{"a1","C2^3","B2x","C2=B211","B211","a","B","2","","1","","1","","2","C2","2/m",m}, -new[]{"a2","C2^3","C2x","C2=C211","C211","a","C","2","","1","","1","","2","C2","2/m",m}, -new[]{"a3","C2^3","I2x","C2=I211","I211","a","I","2","","1","","1","","2","C2","2/m",m}, -new[]{"b","Cs^1","P-2y","Pm=P1m1","P1m1","b","P","1","","1","m","1","","m","Cs","2/m",m}, -new[]{"c","Cs^1","P-2","Pm=P11m","P11m","c","P","1","","1","","1","m","m","Cs","2/m",m}, -new[]{"a","Cs^1","P-2x","Pm=Pm11","Pm11","a","P","","m","1","","1","","m","Cs","2/m",m}, -new[]{"b1","Cs^2","P-2yc","Pc=P1c1","P1c1","b","P","1","","","c","1","","m","Cs","2/m",m}, -new[]{"b2","Cs^2","P-2yac","Pc=P1n1","P1n1","b","P","1","","","n","1","","m","Cs","2/m",m}, -new[]{"b3","Cs^2","P-2ya","Pc=P1a1","P1a1","b","P","1","","","a","1","","m","Cs","2/m",m}, -new[]{"c1","Cs^2","P-2a","Pc=P11a","P11a","c","P","1","","1","","","a","m","Cs","2/m",m}, -new[]{"c2","Cs^2","P-2ab","Pc=P11n","P11n","c","P","1","","1","","","n","m","Cs","2/m",m}, -new[]{"c3","Cs^2","P-2b","Pc=P11b=Pb","P11b","c","P","1","","1","","","b","m","Cs","2/m",m}, -new[]{"a1","Cs^2","P-2xb","Pc=Pb11","Pb11","a","P","","b","1","","1","","m","Cs","2/m",m}, -new[]{"a2","Cs^2","P-2xbc","Pc=Pn11","Pn11","a","P","","n","1","","1","","m","Cs","2/m",m}, -new[]{"a3","Cs^2","P-2xc","Pc=Pc11","Pc11","a","P","","c","1","","1","","m","Cs","2/m",m}, -new[]{"b1","Cs^3","C-2y","Cm=C1m1","C1m1","b","C","1","","","m","1","","m","Cs","2/m",m}, -new[]{"b2","Cs^3","A-2y","Cm=A1m1","A1m1","b","A","1","","","m","1","","m","Cs","2/m",m}, -new[]{"b3","Cs^3","I-2y","Cm=I1m1","I1m1","b","I","1","","","m","1","","m","Cs","2/m",m}, -new[]{"c1","Cs^3","A-2","Cm=A11m","A11m","c","A","1","","1","","","m","m","Cs","2/m",m}, -new[]{"c2","Cs^3","B-2","Cm=B11m=Bm","B11m","c","B","1","","1","","","m","m","Cs","2/m",m}, -new[]{"c3","Cs^3","I-2","Cm=I11m","I11m","c","I","1","","1","","","m","m","Cs","2/m",m}, -new[]{"a1","Cs^3","B-2x","Cm=Bm11","Bm11","a","B","","m","1","","1","","m","Cs","2/m",m}, -new[]{"a2","Cs^3","C-2x","Cm=Cm11","Cm11","a","C","","m","1","","1","","m","Cs","2/m",m}, -new[]{"a3","Cs^3","I-2x","Cm=Im11","Im11","a","I","","m","1","","1","","m","Cs","2/m",m}, -new[]{"b1","Cs^4","C-2yc","Cc=C1c1","C1c1","b","C","1","","","c","1","","m","Cs","2/m",m}, -new[]{"b2","Cs^4","A-2yac","Cc=A1n1","A1n1","b","A","1","","","n","1","","m","Cs","2/m",m}, -new[]{"b3","Cs^4","I-2ya","Cc=I1a1","I1a1","b","I","1","","","a","1","","m","Cs","2/m",m}, -new[]{"-b1","Cs^4","A-2ya","Cc=A1a1","A1a1","b","A","1","","","a","1","","m","Cs","2/m",m}, -new[]{"-b2","Cs^4","C-2ybc","Cc=C1n1","C1n1","b","C","1","","","n","1","","m","Cs","2/m",m}, -new[]{"-b3","Cs^4","I-2yc","Cc=I1c1","I1c1","b","I","1","","","c","1","","m","Cs","2/m",m}, -new[]{"c1","Cs^4","A-2a","Cc=A11a","A11a","c","A","1","","1","","","a","m","Cs","2/m",m}, -new[]{"c2","Cs^4","B-2bc","Cc=B11n","B11n","c","B","1","","1","","","n","m","Cs","2/m",m}, -new[]{"c3","Cs^4","I-2b","Cc=I11b","I11b","c","I","1","","1","","","b","m","Cs","2/m",m}, -new[]{"-c1","Cs^4","B-2b","Cc=B11b=Bb","B11b","c","B","1","","1","","","b","m","Cs","2/m",m}, -new[]{"-c2","Cs^4","A-2ac","Cc=A11n","A11n","c","A","1","","1","","","n","m","Cs","2/m",m}, -new[]{"-c3","Cs^4","I-2a","Cc=I11a","I11a","c","I","1","","1","","","a","m","Cs","2/m",m}, -new[]{"a1","Cs^4","B-2xb","Cc=Bb11","Bb11","a","B","","b","1","","1","","m","Cs","2/m",m}, -new[]{"a2","Cs^4","C-2xbc","Cc=Cn11","Cn11","a","C","","n","1","","1","","m","Cs","2/m",m}, -new[]{"a3","Cs^4","I-2xc","Cc=Ic11","Ic11","a","I","","c","1","","1","","m","Cs","2/m",m}, -new[]{"-a1","Cs^4","C-2xc","Cc=Cc11","Cc11","a","C","","c","1","","1","","m","Cs","2/m",m}, -new[]{"-a2","Cs^4","B-2xbc","Cc=Bn11","Bn11","a","B","","n","1","","1","","m","Cs","2/m",m}, -new[]{"-a3","Cs^4","I-2xb","Cc=Ib11","Ib11","a","I","","b","1","","1","","m","Cs","2/m",m}, -new[]{"b","C2h^1","-P2y","P2/m=P12/m1","P12/m1","b","P","1","","2","m","1","","2/m","C2h","2/m",m}, -new[]{"c","C2h^1","-P2","P2/m=P112/m","P112/m","c","P","1","","1","","2","m","2/m","C2h","2/m",m}, -new[]{"a","C2h^1","-P2x","P2/m=P2/m11","P2/m11","a","P","2","m","1","","1","","2/m","C2h","2/m",m}, -new[]{"b","C2h^2","-P2yb","P2sub1/m=P12sub1/m1","P12sub1/m1","b","P","1","","2s1","m","1","","2/m","C2h","2/m",m}, -new[]{"c","C2h^2","-P2c","P2sub1/m=P112sub1/m","P112sub1/m","c","P","1","","1","","2s1","m","2/m","C2h","2/m",m}, -new[]{"a","C2h^2","-P2xa","P2sub1/m=P2sub1/m11","P2sub1/m11","a","P","2s1","m","1","","1","","2/m","C2h","2/m",m}, -new[]{"b1","C2h^3","-C2y","C2/m=C12/m1","C12/m1","b","C","1","","2","m","1","","2/m","C2h","2/m",m}, -new[]{"b2","C2h^3","-A2y","C2/m=A12/m1","A12/m1","b","A","1","","2","m","1","","2/m","C2h","2/m",m}, -new[]{"b3","C2h^3","-I2y","C2/m=I12/m1","I12/m1","b","I","1","","2","m","1","","2/m","C2h","2/m",m}, -new[]{"c1","C2h^3","-A2","C2/m=A112/m","A112/m","c","A","1","","1","","2","m","2/m","C2h","2/m",m}, -new[]{"c2","C2h^3","-B2","C2/m=B112/m=B2/m","B112/m","c","B","1","","1","","2","m","2/m","C2h","2/m",m}, -new[]{"c3","C2h^3","-I2","C2/m=I112/m","I112/m","c","I","1","","1","","2","m","2/m","C2h","2/m",m}, -new[]{"a1","C2h^3","-B2x","C2/m=B2/m11","B2/m11","a","B","2","m","1","","1","","2/m","C2h","2/m",m}, -new[]{"a2","C2h^3","-C2x","C2/m=C2/m11","C2/m11","a","C","2","m","1","","1","","2/m","C2h","2/m",m}, -new[]{"a3","C2h^3","-I2x","C2/m=I2/m11","I2/m11","a","I","2","m","1","","1","","2/m","C2h","2/m",m}, -new[]{"b1","C2h^4","-P2yc","P2/c=P12/c1","P12/c1","b","P","1","","2","c","1","","2/m","C2h","2/m",m}, -new[]{"b2","C2h^4","-P2yac","P2/c=P12/n1","P12/n1","b","P","1","","2","n","1","","2/m","C2h","2/m",m}, -new[]{"b3","C2h^4","-P2ya","P2/c=P12/a1","P12/a1","b","P","1","","2","a","1","","2/m","C2h","2/m",m}, -new[]{"c1","C2h^4","-P2a","P2/c=P112/a","P112/a","c","P","1","","1","","2","a","2/m","C2h","2/m",m}, -new[]{"c2","C2h^4","-P2ab","P2/c=P112/n","P112/n","c","P","1","","1","","2","n","2/m","C2h","2/m",m}, -new[]{"c3","C2h^4","-P2b","P2/c=P112/b=P2/b","P112/b","c","P","1","","1","","2","b","2/m","C2h","2/m",m}, -new[]{"a1","C2h^4","-P2xb","P2/c=P2/b11","P2/b11","a","P","2","b","1","","1","","2/m","C2h","2/m",m}, -new[]{"a2","C2h^4","-P2xbc","P2/c=P2/n11","P2/n11","a","P","2","n","1","","1","","2/m","C2h","2/m",m}, -new[]{"a3","C2h^4","-P2xc","P2/c=P2/c11","P2/c11","a","P","2","c","1","","1","","2/m","C2h","2/m",m}, -new[]{"b1","C2h^5","-P2ybc","P2sub1/c=P12sub1/c1","P12sub1/c1","b","P","1","","2s1","c","1","","2/m","C2h","2/m",m}, -new[]{"b2","C2h^5","-P2yn","P2sub1/c=P12sub1/n1","P12sub1/n1","b","P","1","","2s1","n","1","","2/m","C2h","2/m",m}, -new[]{"b3","C2h^5","-P2yab","P2sub1/c=P12sub1/a1","P12sub1/a1","b","P","1","","2s1","a","1","","2/m","C2h","2/m",m}, -new[]{"c1","C2h^5","-P2ac","P2sub1/c=P112sub1/a","P112sub1/a","c","P","1","","1","","2s1","a","2/m","C2h","2/m",m}, -new[]{"c2","C2h^5","-P2n","P2sub1/c=P112sub1/n","P112sub1/n","c","P","1","","1","","2s1","n","2/m","C2h","2/m",m}, -new[]{"c3","C2h^5","-P2bc","P2sub1/c=P112sub1/b=P2sub1/b","P112sub1/b","c","P","1","","1","","2s1","b","2/m","C2h","2/m",m}, -new[]{"a1","C2h^5","-P2xab","P2sub1/c=P2sub1/b11","P2sub1/b11","a","P","2s1","b","1","","1","","2/m","C2h","2/m",m}, -new[]{"a2","C2h^5","-P2xn","P2sub1/c=P2sub1/n11","P2sub1/n11","a","P","2s1","n","1","","1","","2/m","C2h","2/m",m}, -new[]{"a3","C2h^5","-P2xac","P2sub1/c=P2sub1/c11","P2sub1/c11","a","P","2s1","c","1","","1","","2/m","C2h","2/m",m}, -new[]{"b1","C2h^6","-C2yc","C2/c=C12/c1","C12/c1","b","C","1","","2","c","1","","2/m","C2h","2/m",m}, -new[]{"b2","C2h^6","-A2yac","C2/c=A12/n1","A12/n1","b","A","1","","2","n","1","","2/m","C2h","2/m",m}, -new[]{"b3","C2h^6","-I2ya","C2/c=I12/a1","I12/a1","b","I","1","","2","a","1","","2/m","C2h","2/m",m}, -new[]{"-b1","C2h^6","-A2ya","C2/c=A12/a1","A12/a1","b","A","1","","2","a","1","","2/m","C2h","2/m",m}, -new[]{"-b2","C2h^6","-C2ybc","C2/c=C12/n1","C12/n1","b","C","1","","2","n","1","","2/m","C2h","2/m",m}, -new[]{"-b3","C2h^6","-I2yc","C2/c=I12/c1","I12/c1","b","I","1","","2","c","1","","2/m","C2h","2/m",m}, -new[]{"c1","C2h^6","-A2a","C2/c=A112/a","A112/a","c","A","1","","1","","2","a","2/m","C2h","2/m",m}, -new[]{"c2","C2h^6","-B2bc","C2/c=B112/n","B112/n","c","B","1","","1","","2","n","2/m","C2h","2/m",m}, -new[]{"c3","C2h^6","-I2b","C2/c=I112/b","I112/b","c","I","1","","1","","2","b","2/m","C2h","2/m",m}, -new[]{"-c1","C2h^6","-B2b","C2/c=B112/b=B2/b","B112/b","c","B","1","","1","","2","b","2/m","C2h","2/m",m}, -new[]{"-c2","C2h^6","-A2ac","C2/c=A112/n","A112/n","c","A","1","","1","","2","n","2/m","C2h","2/m",m}, -new[]{"-c3","C2h^6","-I2a","C2/c=I112/a","I112/a","c","I","1","","1","","2","a","2/m","C2h","2/m",m}, -new[]{"a1","C2h^6","-B2xb","C2/c=B2/b11","B2/b11","a","B","2","b","1","","1","","2/m","C2h","2/m",m}, -new[]{"a2","C2h^6","-C2xbc","C2/c=C2/n11","C2/n11","a","C","2","n","1","","1","","2/m","C2h","2/m",m}, -new[]{"a3","C2h^6","-I2xc","C2/c=I2/c11","I2/c11","a","I","2","c","1","","1","","2/m","C2h","2/m",m}, -new[]{"-a1","C2h^6","-C2xc","C2/c=C2/c11","C2/c11","a","C","2","c","1","","1","","2/m","C2h","2/m",m}, -new[]{"-a2","C2h^6","-B2xbc","C2/c=B2/n11","B2/n11","a","B","2","n","1","","1","","2/m","C2h","2/m",m}, -new[]{"-a3","C2h^6","-I2xb","C2/c=I2/b11","I2/b11","a","I","2","b","1","","1","","2/m","C2h","2/m",m}, -new[]{"","D2^1","P22","P222","P222","","P","2","","2","","2","","222","D2","mmm",o}, -new[]{"","D2^2","P2c2","P222sub1","P222sub1","","P","2","","2","","2s1","","222","D2","mmm",o}, -new[]{"cab","D2^2","P2a2a","P2sub122","P2sub122","","P","2s1","","2","","2","","222","D2","mmm",o}, -new[]{"bca","D2^2","P22b","P22sub12","P22sub12","","P","2","","2s1","","2","","222","D2","mmm",o}, -new[]{"","D2^3","P22ab","P2sub12sub12","P2sub12sub12","","P","2s1","","2s1","","2","","222","D2","mmm",o}, -new[]{"cab","D2^3","P2bc2","P22sub12sub1","P22sub12sub1","","P","2","","2s1","","2s1","","222","D2","mmm",o}, -new[]{"bca","D2^3","P2ac2ac","P2sub122sub1","P2sub122sub1","","P","2s1","","2","","2s1","","222","D2","mmm",o}, -new[]{"","D2^4","P2ac2ab","P2sub12sub12sub1","P2sub12sub12sub1","","P","2s1","","2s1","","2s1","","222","D2","mmm",o}, -new[]{"","D2^5","C2c2","C222sub1","C222sub1","","C","2","","2","","2s1","","222","D2","mmm",o}, -new[]{"cab","D2^5","A2a2a","A2sub122","A2sub122","","A","2s1","","2","","2","","222","D2","mmm",o}, -new[]{"bca","D2^5","B22b","B22sub12","B22sub12","","B","2","","2s1","","2","","222","D2","mmm",o}, -new[]{"","D2^6","C22","C222","C222","","C","2","","2","","2","","222","D2","mmm",o}, -new[]{"cab","D2^6","A22","A222","A222","","A","2","","2","","2","","222","D2","mmm",o}, -new[]{"bca","D2^6","B22","B222","B222","","B","2","","2","","2","","222","D2","mmm",o}, -new[]{"","D2^7","F22","F222","F222","","F","2","","2","","2","","222","D2","mmm",o}, -new[]{"","D2^8","I22","I222","I222","","I","2","","2","","2","","222","D2","mmm",o}, -new[]{"","D2^9","I2b2c","I2sub12sub12sub1","I2sub12sub12sub1","","I","2s1","","2s1","","2s1","","222","D2","mmm",o}, -new[]{"","C2v^1","P2-2","Pmm2","Pmm2","","P","","m","","m","2","","mm2","C2v","mmm",o}, -new[]{"cab","C2v^1","P-22","P2mm","P2mm","","P","2","","","m","","m","mm2","C2v","mmm",o}, -new[]{"bca","C2v^1","P-2-2","Pm2m","Pm2m","","P","","m","2","","","m","mm2","C2v","mmm",o}, -new[]{"","C2v^2","P2c-2","Pmc2sub1","Pmc2sub1","","P","","m","","c","2s1","","mm2","C2v","mmm",o}, -new[]{"ba-c","C2v^2","P2c-2c","Pcm2sub1","Pcm2sub1","","P","","c","","m","2s1","","mm2","C2v","mmm",o}, -new[]{"cab","C2v^2","P-2a2a","P2sub1ma","P2sub1ma","","P","2s1","","","m","","a","mm2","C2v","mmm",o}, -new[]{"-cba","C2v^2","P-22a","P2sub1am","P2sub1am","","P","2s1","","","a","","m","mm2","C2v","mmm",o}, -new[]{"bca","C2v^2","P-2-2b","Pb2sub1m","Pb2sub1m","","P","","b","2s1","","","m","mm2","C2v","mmm",o}, -new[]{"a-cb","C2v^2","P-2b-2","Pm2sub1b","Pm2sub1b","","P","","m","2s1","","","b","mm2","C2v","mmm",o}, -new[]{"","C2v^3","P2-2c","Pcc2","Pcc2","","P","","c","","c","2","","mm2","C2v","mmm",o}, -new[]{"cab","C2v^3","P-2a2","P2aa","P2aa","","P","2","","","a","","a","mm2","C2v","mmm",o}, -new[]{"bca","C2v^3","P-2b-2b","Pb2b","Pb2b","","P","","b","2","","","b","mm2","C2v","mmm",o}, -new[]{"","C2v^4","P2-2a","Pma2","Pma2","","P","","m","","a","2","","mm2","C2v","mmm",o}, -new[]{"ba-c","C2v^4","P2-2b","Pbm2","Pbm2","","P","","b","","m","2","","mm2","C2v","mmm",o}, -new[]{"cab","C2v^4","P-2b2","P2mb","P2mb","","P","2","","","m","","b","mm2","C2v","mmm",o}, -new[]{"-cba","C2v^4","P-2c2","P2cm","P2cm","","P","2","","","c","","m","mm2","C2v","mmm",o}, -new[]{"bca","C2v^4","P-2c-2c","Pc2m","Pc2m","","P","","c","2","","","m","mm2","C2v","mmm",o}, -new[]{"a-cb","C2v^4","P-2a-2a","Pm2a","Pm2a","","P","","m","2","","","a","mm2","C2v","mmm",o}, -new[]{"","C2v^5","P2c-2ac","Pca2sub1","Pca2sub1","","P","","c","","a","2s1","","mm2","C2v","mmm",o}, -new[]{"ba-c","C2v^5","P2c-2b","Pbc2sub1","Pbc2sub1","","P","","b","","c","2s1","","mm2","C2v","mmm",o}, -new[]{"cab","C2v^5","P-2b2a","P2sub1ab","P2sub1ab","","P","2s1","","","a","","b","mm2","C2v","mmm",o}, -new[]{"-cba","C2v^5","P-2ac2a","P2sub1ca","P2sub1ca","","P","2s1","","","c","","a","mm2","C2v","mmm",o}, -new[]{"bca","C2v^5","P-2bc-2c","Pc2sub1b","Pc2sub1b","","P","","c","2s1","","","b","mm2","C2v","mmm",o}, -new[]{"a-cb","C2v^5","P-2a-2ab","Pb2sub1a","Pb2sub1a","","P","","b","2s1","","","a","mm2","C2v","mmm",o}, -new[]{"","C2v^6","P2-2bc","Pnc2","Pnc2","","P","","n","","c","2","","mm2","C2v","mmm",o}, -new[]{"ba-c","C2v^6","P2-2ac","Pcn2","Pcn2","","P","","c","","n","2","","mm2","C2v","mmm",o}, -new[]{"cab","C2v^6","P-2ac2","P2na","P2na","","P","2","","","n","","a","mm2","C2v","mmm",o}, -new[]{"-cba","C2v^6","P-2ab2","P2an","P2an","","P","2","","","a","","n","mm2","C2v","mmm",o}, -new[]{"bca","C2v^6","P-2ab-2ab","Pb2n","Pb2n","","P","","b","2","","","n","mm2","C2v","mmm",o}, -new[]{"a-cb","C2v^6","P-2bc-2bc","Pn2b","Pn2b","","P","","n","2","","","b","mm2","C2v","mmm",o}, -new[]{"","C2v^7","P2ac-2","Pmn2sub1","Pmn2sub1","","P","","m","","n","2s1","","mm2","C2v","mmm",o}, -new[]{"ba-c","C2v^7","P2bc-2bc","Pnm2sub1","Pnm2sub1","","P","","n","","m","2s1","","mm2","C2v","mmm",o}, -new[]{"cab","C2v^7","P-2ab2ab","P2sub1mn","P2sub1mn","","P","2s1","","","m","","n","mm2","C2v","mmm",o}, -new[]{"-cba","C2v^7","P-22ac","P2sub1nm","P2sub1nm","","P","2s1","","","n","","m","mm2","C2v","mmm",o}, -new[]{"bca","C2v^7","P-2-2bc","Pn2sub1m","Pn2sub1m","","P","","n","2s1","","","m","mm2","C2v","mmm",o}, -new[]{"a-cb","C2v^7","P-2ab-2","Pm2sub1n","Pm2sub1n","","P","","m","2s1","","","n","mm2","C2v","mmm",o}, -new[]{"","C2v^8","P2-2ab","Pba2","Pba2","","P","","b","","a","2","","mm2","C2v","mmm",o}, -new[]{"cab","C2v^8","P-2bc2","P2cb","P2cb","","P","2","","","c","","b","mm2","C2v","mmm",o}, -new[]{"bca","C2v^8","P-2ac-2ac","Pc2a","Pc2a","","P","","c","2","","","a","mm2","C2v","mmm",o}, -new[]{"","C2v^9","P2c-2n","Pna2sub1","Pna2sub1","","P","","n","","a","2s1","","mm2","C2v","mmm",o}, -new[]{"ba-c","C2v^9","P2c-2ab","Pbn2sub1","Pbn2sub1","","P","","b","","n","2s1","","mm2","C2v","mmm",o}, -new[]{"cab","C2v^9","P-2bc2a","P2sub1nb","P2sub1nb","","P","2s1","","","n","","b","mm2","C2v","mmm",o}, -new[]{"-cba","C2v^9","P-2n2a","P2sub1cn","P2sub1cn","","P","2s1","","","c","","n","mm2","C2v","mmm",o}, -new[]{"bca","C2v^9","P-2n-2ac","Pc2sub1n","Pc2sub1n","","P","","c","2s1","","","n","mm2","C2v","mmm",o}, -new[]{"a-cb","C2v^9","P-2ac-2n","Pn2sub1a","Pn2sub1a","","P","","n","2s1","","","a","mm2","C2v","mmm",o}, -new[]{"","C2v^10","P2-2n","Pnn2","Pnn2","","P","","n","","n","2","","mm2","C2v","mmm",o}, -new[]{"cab","C2v^10","P-2n2","P2nn","P2nn","","P","2","","","n","","n","mm2","C2v","mmm",o}, -new[]{"bca","C2v^10","P-2n-2n","Pn2n","Pn2n","","P","","n","2","","","n","mm2","C2v","mmm",o}, -new[]{"","C2v^11","C2-2","Cmm2","Cmm2","","C","","m","","m","2","","mm2","C2v","mmm",o}, -new[]{"cab","C2v^11","A-22","A2mm","A2mm","","A","2","","","m","","m","mm2","C2v","mmm",o}, -new[]{"bca","C2v^11","B-2-2","Bm2m","Bm2m","","B","","m","2","","","m","mm2","C2v","mmm",o}, -new[]{"","C2v^12","C2c-2","Cmc2sub1","Cmc2sub1","","C","","m","","c","2s1","","mm2","C2v","mmm",o}, -new[]{"ba-c","C2v^12","C2c-2c","Ccm2sub1","Ccm2sub1","","C","","c","","m","2s1","","mm2","C2v","mmm",o}, -new[]{"cab","C2v^12","A-2a2a","A2sub1ma","A2sub1ma","","A","2s1","","","m","","a","mm2","C2v","mmm",o}, -new[]{"-cba","C2v^12","A-22a","A2sub1am","A2sub1am","","A","2s1","","","a","","m","mm2","C2v","mmm",o}, -new[]{"bca","C2v^12","B-2-2b","Bb2sub1m","Bb2sub1m","","B","","b","2s1","","","m","mm2","C2v","mmm",o}, -new[]{"a-cb","C2v^12","B-2b-2","Bm2sub1b","Bm2sub1b","","B","","m","2s1","","","b","mm2","C2v","mmm",o}, -new[]{"","C2v^13","C2-2c","Ccc2","Ccc2","","C","","c","","c","2","","mm2","C2v","mmm",o}, -new[]{"cab","C2v^13","A-2a2","A2aa","A2aa","","A","2","","","a","","a","mm2","C2v","mmm",o}, -new[]{"bca","C2v^13","B-2b-2b","Bb2b","Bb2b","","B","","b","2","","","b","mm2","C2v","mmm",o}, -new[]{"","C2v^14","A2-2","Amm2","Amm2","","A","","m","","m","2","","mm2","C2v","mmm",o}, -new[]{"ba-c","C2v^14","B2-2","Bmm2","Bmm2","","B","","m","","m","2","","mm2","C2v","mmm",o}, -new[]{"cab","C2v^14","B-22","B2mm","B2mm","","B","2","","","m","","m","mm2","C2v","mmm",o}, -new[]{"-cba","C2v^14","C-22","C2mm","C2mm","","C","2","","","m","","m","mm2","C2v","mmm",o}, -new[]{"bca","C2v^14","C-2-2","Cm2m","Cm2m","","C","","m","2","","","m","mm2","C2v","mmm",o}, -new[]{"a-cb","C2v^14","A-2-2","Am2m","Am2m","","A","","m","2","","","m","mm2","C2v","mmm",o}, -new[]{"","C2v^15","A2-2c","Aem2","Aem2","","A","","b","","m","2","","mm2","C2v","mmm",o}, -new[]{"ba-c","C2v^15","B2-2c","Bme2","Bme2","","B","","m","","a","2","","mm2","C2v","mmm",o}, -new[]{"cab","C2v^15","B-2c2","B2em","B2em","","B","2","","","c","","m","mm2","C2v","mmm",o}, -new[]{"-cba","C2v^15","C-2b2","C2me","C2me","","C","2","","","m","","b","mm2","C2v","mmm",o}, -new[]{"bca","C2v^15","C-2b-2b","Cm2e","Cm2e","","C","","m","2","","","a","mm2","C2v","mmm",o}, -new[]{"a-cb","C2v^15","A-2c-2c","Ae2m","Ae2m","","A","","c","2","","","m","mm2","C2v","mmm",o}, -new[]{"","C2v^16","A2-2a","Ama2","Ama2","","A","","m","","a","2","","mm2","C2v","mmm",o}, -new[]{"ba-c","C2v^16","B2-2b","Bbm2","Bbm2","","B","","b","","m","2","","mm2","C2v","mmm",o}, -new[]{"cab","C2v^16","B-2b2","B2mb","B2mb","","B","2","","","m","","b","mm2","C2v","mmm",o}, -new[]{"-cba","C2v^16","C-2c2","C2cm","C2cm","","C","2","","","c","","m","mm2","C2v","mmm",o}, -new[]{"bca","C2v^16","C-2c-2c","Cc2m","Cc2m","","C","","c","2","","","m","mm2","C2v","mmm",o}, -new[]{"a-cb","C2v^16","A-2a-2a","Am2a","Am2a","","A","","m","2","","","a","mm2","C2v","mmm",o}, -new[]{"","C2v^17","A2-2ac","Aea2","Aea2","","A","","b","","a","2","","mm2","C2v","mmm",o}, -new[]{"ba-c","C2v^17","B2-2bc","Bbe2","Bbe2","","B","","b","","a","2","","mm2","C2v","mmm",o}, -new[]{"cab","C2v^17","B-2bc2","B2eb","B2eb","","B","2","","","c","","b","mm2","C2v","mmm",o}, -new[]{"-cba","C2v^17","C-2bc2","C2ce","C2ce","","C","2","","","c","","b","mm2","C2v","mmm",o}, -new[]{"bca","C2v^17","C-2bc-2bc","Cc2e","Cc2e","","C","","c","2","","","a","mm2","C2v","mmm",o}, -new[]{"a-cb","C2v^17","A-2ac-2ac","Ae2a","Ae2a","","A","","c","2","","","a","mm2","C2v","mmm",o}, -new[]{"","C2v^18","F2-2","Fmm2","Fmm2","","F","","m","","m","2","","mm2","C2v","mmm",o}, -new[]{"cab","C2v^18","F-22","F2mm","F2mm","","F","2","","","m","","m","mm2","C2v","mmm",o}, -new[]{"bca","C2v^18","F-2-2","Fm2m","Fm2m","","F","","m","2","","","m","mm2","C2v","mmm",o}, -new[]{"","C2v^19","F2-2d","Fdd2","Fdd2","","F","","d","","d","2","","mm2","C2v","mmm",o}, -new[]{"cab","C2v^19","F-2d2","F2dd","F2dd","","F","2","","","d","","d","mm2","C2v","mmm",o}, -new[]{"bca","C2v^19","F-2d-2d","Fd2d","Fd2d","","F","","d","2","","","d","mm2","C2v","mmm",o}, -new[]{"","C2v^20","I2-2","Imm2","Imm2","","I","","m","","m","2","","mm2","C2v","mmm",o}, -new[]{"cab","C2v^20","I-22","I2mm","I2mm","","I","2","","","m","","m","mm2","C2v","mmm",o}, -new[]{"bca","C2v^20","I-2-2","Im2m","Im2m","","I","","m","2","","","m","mm2","C2v","mmm",o}, -new[]{"","C2v^21","I2-2c","Iba2","Iba2","","I","","b","","a","2","","mm2","C2v","mmm",o}, -new[]{"cab","C2v^21","I-2a2","I2cb","I2cb","","I","2","","","c","","b","mm2","C2v","mmm",o}, -new[]{"bca","C2v^21","I-2b-2b","Ic2a","Ic2a","","I","","c","2","","","a","mm2","C2v","mmm",o}, -new[]{"","C2v^22","I2-2a","Ima2","Ima2","","I","","m","","a","2","","mm2","C2v","mmm",o}, -new[]{"ba-c","C2v^22","I2-2b","Ibm2","Ibm2","","I","","b","","m","2","","mm2","C2v","mmm",o}, -new[]{"cab","C2v^22","I-2b2","I2mb","I2mb","","I","2","","","m","","b","mm2","C2v","mmm",o}, -new[]{"-cba","C2v^22","I-2c2","I2cm","I2cm","","I","2","","","c","","m","mm2","C2v","mmm",o}, -new[]{"bca","C2v^22","I-2c-2c","Ic2m","Ic2m","","I","","c","2","","","m","mm2","C2v","mmm",o}, -new[]{"a-cb","C2v^22","I-2a-2a","Im2a","Im2a","","I","","m","2","","","a","mm2","C2v","mmm",o}, -new[]{"","D2h^1","-P22","Pmmm","P2/m2/m2/m","","P","2","m","2","m","2","m","mmm","D2h","mmm",o}, -new[]{"1","D2h^2","P22-1n","Pnnn(1)","P2/n2/n2/n","","P","2","n","2","n","2","n","mmm","D2h","mmm",o}, -new[]{"2","D2h^2","-P2ab2bc","Pnnn(2)","P2/n2/n2/n","","P","2","n","2","n","2","n","mmm","D2h","mmm",o}, -new[]{"","D2h^3","-P22c","Pccm","P2/c2/c2/m","","P","2","c","2","c","2","m","mmm","D2h","mmm",o}, -new[]{"cab","D2h^3","-P2a2","Pmaa","P2/m2/a2/a","","P","2","m","2","a","2","a","mmm","D2h","mmm",o}, -new[]{"bca","D2h^3","-P2b2b","Pbmb","P2/b2/m2/b","","P","2","b","2","m","2","b","mmm","D2h","mmm",o}, -new[]{"1","D2h^4","P22-1ab","Pban(1)","P2/b2/a2/n","","P","2","b","2","a","2","n","mmm","D2h","mmm",o}, -new[]{"2","D2h^4","-P2ab2b","Pban(2)","P2/b2/a2/n","","P","2","b","2","a","2","n","mmm","D2h","mmm",o}, -new[]{"1cab","D2h^4","P22-1bc","Pncb(1)","P2/n2/c2/b","","P","2","n","2","c","2","b","mmm","D2h","mmm",o}, -new[]{"2cab","D2h^4","-P2b2bc","Pncb(2)","P2/n2/c2/b","","P","2","n","2","c","2","b","mmm","D2h","mmm",o}, -new[]{"1bca","D2h^4","P22-1ac","Pcna(1)","P2/c2/n2/a","","P","2","c","2","n","2","a","mmm","D2h","mmm",o}, -new[]{"2bca","D2h^4","-P2a2c","Pcna(2)","P2/c2/n2/a","","P","2","c","2","n","2","a","mmm","D2h","mmm",o}, -new[]{"","D2h^5","-P2a2a","Pmma","P2sub1/m2/m2/a","","P","2s1","m","2","m","2","a","mmm","D2h","mmm",o}, -new[]{"ba-c","D2h^5","-P2b2","Pmmb","P2/m2sub1/m2/b","","P","2","m","2s1","m","2","b","mmm","D2h","mmm",o}, -new[]{"cab","D2h^5","-P22b","Pbmm","P2/b2sub1/m2/m","","P","2","b","2s1","m","2","m","mmm","D2h","mmm",o}, -new[]{"-cba","D2h^5","-P2c2c","Pcmm","P2/c2/m2sub1/m","","P","2","c","2","m","2s1","m","mmm","D2h","mmm",o}, -new[]{"bca","D2h^5","-P2c2","Pmcm","P2/m2/c2sub1/m","","P","2","m","2","c","2s1","m","mmm","D2h","mmm",o}, -new[]{"a-cb","D2h^5","-P22a","Pmam","P2sub1/m2/a2/m","","P","2s1","m","2","a","2","m","mmm","D2h","mmm",o}, -new[]{"","D2h^6","-P2a2bc","Pnna","P2/n2sub1/n2/a","","P","2","n","2s1","n","2","a","mmm","D2h","mmm",o}, -new[]{"ba-c","D2h^6","-P2b2n","Pnnb","P2sub1/n2/n2/b","","P","2s1","n","2","n","2","b","mmm","D2h","mmm",o}, -new[]{"cab","D2h^6","-P2n2b","Pbnn","P2/b2/n2sub1/n","","P","2","b","2","n","2s1","n","mmm","D2h","mmm",o}, -new[]{"-cba","D2h^6","-P2ab2c","Pcnn","P2/c2sub1/n2/n","","P","2","c","2s1","n","2","n","mmm","D2h","mmm",o}, -new[]{"bca","D2h^6","-P2ab2n","Pncn","P2sub1/n2/c2/n","","P","2s1","n","2","c","2","n","mmm","D2h","mmm",o}, -new[]{"a-cb","D2h^6","-P2n2bc","Pnan","P2/n2/a2sub1/n","","P","2","n","2","a","2s1","n","mmm","D2h","mmm",o}, -new[]{"","D2h^7","-P2ac2","Pmna","P2/m2/n2sub1/a","","P","2","m","2","n","2s1","a","mmm","D2h","mmm",o}, -new[]{"ba-c","D2h^7","-P2bc2bc","Pnmb","P2/n2/m2sub1/b","","P","2","n","2","m","2s1","b","mmm","D2h","mmm",o}, -new[]{"cab","D2h^7","-P2ab2ab","Pbmn","P2sub1/b2/m2/n","","P","2s1","b","2","m","2","n","mmm","D2h","mmm",o}, -new[]{"-cba","D2h^7","-P22ac","Pcnm","P2sub1/c2/n2/m","","P","2s1","c","2","n","2","m","mmm","D2h","mmm",o}, -new[]{"bca","D2h^7","-P22bc","Pncm","P2/n2sub1/c2/m","","P","2","n","2s1","c","2","m","mmm","D2h","mmm",o}, -new[]{"a-cb","D2h^7","-P2ab2","Pman","P2/m2sub1/a2/n","","P","2","m","2s1","a","2","n","mmm","D2h","mmm",o}, -new[]{"","D2h^8","-P2a2ac","Pcca","P2sub1/c2/c2/a","","P","2s1","c","2","c","2","a","mmm","D2h","mmm",o}, -new[]{"ba-c","D2h^8","-P2b2c","Pccb","P2/c2sub1/c2/b","","P","2","c","2s1","c","2","b","mmm","D2h","mmm",o}, -new[]{"cab","D2h^8","-P2a2b","Pbaa","P2/b2sub1/a2/a","","P","2","b","2s1","a","2","a","mmm","D2h","mmm",o}, -new[]{"-cba","D2h^8","-P2ac2c","Pcaa","P2/c2/a2sub1/a","","P","2","c","2","a","2s1","a","mmm","D2h","mmm",o}, -new[]{"bca","D2h^8","-P2bc2b","Pbcb","P2/b2/c2sub1/b","","P","2","b","2","c","2s1","b","mmm","D2h","mmm",o}, -new[]{"a-cb","D2h^8","-P2b2ab","Pbab","P2sub1/b2/a2/b","","P","2s1","b","2","a","2","b","mmm","D2h","mmm",o}, -new[]{"","D2h^9","-P22ab","Pbam","P2sub1/b2sub1/a2/m","","P","2s1","b","2s1","a","2","m","mmm","D2h","mmm",o}, -new[]{"cab","D2h^9","-P2bc2","Pmcb","P2/m2sub1/c2sub1/b","","P","2","m","2s1","c","2s1","b","mmm","D2h","mmm",o}, -new[]{"bca","D2h^9","-P2ac2ac","Pcma","P2sub1/c2/m2sub1/a","","P","2s1","c","2","m","2s1","a","mmm","D2h","mmm",o}, -new[]{"","D2h^10","-P2ab2ac","Pccn","P2sub1/c2sub1/c2/n","","P","2s1","c","2s1","c","2","n","mmm","D2h","mmm",o}, -new[]{"cab","D2h^10","-P2ac2bc","Pnaa","P2/n2sub1/a2sub1/a","","P","2","n","2s1","a","2s1","a","mmm","D2h","mmm",o}, -new[]{"bca","D2h^10","-P2bc2ab","Pbnb","P2sub1/b2/n2sub1/b","","P","2s1","b","2","n","2s1","b","mmm","D2h","mmm",o}, -new[]{"","D2h^11","-P2c2b","Pbcm","P2/b2sub1/c2sub1/m","","P","2","b","2s1","c","2s1","m","mmm","D2h","mmm",o}, -new[]{"ba-c","D2h^11","-P2c2ac","Pcam","P2sub1/c2/a2sub1/m","","P","2s1","c","2","a","2s1","m","mmm","D2h","mmm",o}, -new[]{"cab","D2h^11","-P2ac2a","Pmca","P2sub1/m2/c2sub1/a","","P","2s1","m","2","c","2s1","a","mmm","D2h","mmm",o}, -new[]{"-cba","D2h^11","-P2b2a","Pmab","P2sub1/m2sub1/a2/b","","P","2s1","m","2s1","a","2","b","mmm","D2h","mmm",o}, -new[]{"bca","D2h^11","-P2a2ab","Pbma","P2sub1/b2sub1/m2/a","","P","2s1","b","2s1","m","2","a","mmm","D2h","mmm",o}, -new[]{"a-cb","D2h^11","-P2bc2c","Pcmb","P2/c2sub1/m2sub1/b","","P","2","c","2s1","m","2s1","b","mmm","D2h","mmm",o}, -new[]{"","D2h^12","-P22n","Pnnm","P2sub1/n2sub1/n2/m","","P","2s1","n","2s1","n","2","m","mmm","D2h","mmm",o}, -new[]{"cab","D2h^12","-P2n2","Pmnn","P2/m2sub1/n2sub1/n","","P","2","m","2s1","n","2s1","n","mmm","D2h","mmm",o}, -new[]{"bca","D2h^12","-P2n2n","Pnmn","P2sub1/n2/m2sub1/n","","P","2s1","n","2","m","2s1","n","mmm","D2h","mmm",o}, -new[]{"1","D2h^13","P22ab-1ab","Pmmn(1)","P2sub1/m2sub1/m2/n","","P","2s1","m","2s1","m","2","n","mmm","D2h","mmm",o}, -new[]{"2","D2h^13","-P2ab2a","Pmmn(2)","P2sub1/m2sub1/m2/n","","P","2s1","m","2s1","m","2","n","mmm","D2h","mmm",o}, -new[]{"1cab","D2h^13","P2bc2-1bc","Pnmm(1)","P2/n2sub1/m2sub1/m","","P","2","n","2s1","m","2s1","m","mmm","D2h","mmm",o}, -new[]{"2cab","D2h^13","-P2c2bc","Pnmm(2)","P2/n2sub1/m2sub1/m","","P","2","n","2s1","m","2s1","m","mmm","D2h","mmm",o}, -new[]{"1bca","D2h^13","P2ac2ac-1ac","Pmnm(1)","P2sub1/m2/n2sub1/m","","P","2s1","m","2","n","2s1","m","mmm","D2h","mmm",o}, -new[]{"2bca","D2h^13","-P2c2a","Pmnm(2)","P2sub1/m2/n2sub1/m","","P","2s1","m","2","n","2s1","m","mmm","D2h","mmm",o}, -new[]{"","D2h^14","-P2n2ab","Pbcn","P2sub1/b2/c2sub1/n","","P","2s1","b","2","c","2s1","n","mmm","D2h","mmm",o}, -new[]{"ba-c","D2h^14","-P2n2c","Pcan","P2/c2sub1/a2sub1/n","","P","2","c","2s1","a","2s1","n","mmm","D2h","mmm",o}, -new[]{"cab","D2h^14","-P2a2n","Pnca","P2sub1/n2sub1/c2/a","","P","2s1","n","2s1","c","2","a","mmm","D2h","mmm",o}, -new[]{"-cba","D2h^14","-P2bc2n","Pnab","P2sub1/n2/a2sub1/b","","P","2s1","n","2","a","2s1","b","mmm","D2h","mmm",o}, -new[]{"bca","D2h^14","-P2ac2b","Pbna","P2/b2sub1/n2sub1/a","","P","2","b","2s1","n","2s1","a","mmm","D2h","mmm",o}, -new[]{"a-cb","D2h^14","-P2b2ac","Pcnb","P2sub1/c2sub1/n2/b","","P","2s1","c","2s1","n","2","b","mmm","D2h","mmm",o}, -new[]{"","D2h^15","-P2ac2ab","Pbca","P2sub1/b2sub1/c2sub1/a","","P","2s1","b","2s1","c","2s1","a","mmm","D2h","mmm",o}, -new[]{"ba-c","D2h^15","-P2bc2ac","Pcab","P2sub1/c2sub1/a2sub1/b","","P","2s1","c","2s1","a","2s1","b","mmm","D2h","mmm",o}, -new[]{"","D2h^16","-P2ac2n","Pnma","P2sub1/n2sub1/m2sub1/a","","P","2s1","n","2s1","m","2s1","a","mmm","D2h","mmm",o}, -new[]{"ba-c","D2h^16","-P2bc2a","Pmnb","P2sub1/m2sub1/n2sub1/b","","P","2s1","m","2s1","n","2s1","b","mmm","D2h","mmm",o}, -new[]{"cab","D2h^16","-P2c2ab","Pbnm","P2sub1/b2sub1/n2sub1/m","","P","2s1","b","2s1","n","2s1","m","mmm","D2h","mmm",o}, -new[]{"-cba","D2h^16","-P2n2ac","Pcmn","P2sub1/c2sub1/m2sub1/n","","P","2s1","c","2s1","m","2s1","n","mmm","D2h","mmm",o}, -new[]{"bca","D2h^16","-P2n2a","Pmcn","P2sub1/m2sub1/c2sub1/n","","P","2s1","m","2s1","c","2s1","n","mmm","D2h","mmm",o}, -new[]{"a-cb","D2h^16","-P2c2n","Pnam","P2sub1/n2sub1/a2sub1/m","","P","2s1","n","2s1","a","2s1","m","mmm","D2h","mmm",o}, -new[]{"","D2h^17","-C2c2","Cmcm","C2/m2/c2sub1/m","","C","2","m","2","c","2s1","m","mmm","D2h","mmm",o}, -new[]{"ba-c","D2h^17","-C2c2c","Ccmm","C2/c2/m2sub1/m","","C","2","c","2","m","2s1","m","mmm","D2h","mmm",o}, -new[]{"cab","D2h^17","-A2a2a","Amma","A2sub1/m2/m2/a","","A","2s1","m","2","m","2","a","mmm","D2h","mmm",o}, -new[]{"-cba","D2h^17","-A22a","Amam","A2sub1/m2/a2/m","","A","2s1","m","2","a","2","m","mmm","D2h","mmm",o}, -new[]{"bca","D2h^17","-B22b","Bbmm","B2/b2sub1/m2/m","","B","2","b","2s1","m","2","m","mmm","D2h","mmm",o}, -new[]{"a-cb","D2h^17","-B2b2","Bmmb","B2/m2sub1/m2/b","","B","2","m","2s1","m","2","b","mmm","D2h","mmm",o}, -new[]{"","D2h^18","-C2bc2","Cmce","C2/m2/c2sub1/e","","C","2","m","2","c","2s1","a","mmm","D2h","mmm",o}, -new[]{"ba-c","D2h^18","-C2bc2bc","Ccme","C2/c2/m2sub1/e","","C","2","c","2","m","2s1","b","mmm","D2h","mmm",o}, -new[]{"cab","D2h^18","-A2ac2ac","Aema","A2sub1/e2/ma","","A","2s1","b","2","m","","a","mmm","D2h","mmm",o}, -new[]{"-cba","D2h^18","-A22ac","Aeam","A2sub1/e2/a2/m","","A","2s1","c","2","a","2","m","mmm","D2h","mmm",o}, -new[]{"bca","D2h^18","-B22bc","Bbem","B2/b2sub1/e2/m","","B","2","b","2s1","c","2","m","mmm","D2h","mmm",o}, -new[]{"a-cb","D2h^18","-B2bc2","Bmeb","B2/m2sub1/e2/b","","B","2","m","2s1","a","2","b","mmm","D2h","mmm",o}, -new[]{"","D2h^19","-C22","Cmmm","C2/m2/m2/m","","C","2","m","2","m","2","m","mmm","D2h","mmm",o}, -new[]{"cab","D2h^19","-A22","Ammm","A2/m2/m2/m","","A","2","m","2","m","2","m","mmm","D2h","mmm",o}, -new[]{"bca","D2h^19","-B22","Bmmm","B2/m2/m2/m","","B","2","m","2","m","2","m","mmm","D2h","mmm",o}, -new[]{"","D2h^20","-C22c","Cccm","C2/c2/c2/m","","C","2","c","2","c","2","m","mmm","D2h","mmm",o}, -new[]{"cab","D2h^20","-A2a2","Amaa","A2/m2/a2/a","","A","2","m","2","a","2","a","mmm","D2h","mmm",o}, -new[]{"bca","D2h^20","-B2b2b","Bbmb","B2/b2/m2/b","","B","2","b","2","m","2","b","mmm","D2h","mmm",o}, -new[]{"","D2h^21","-C2b2","Cmme","C2/m2/m2/e","","C","2","m","2","m","2","a","mmm","D2h","mmm",o}, -new[]{"ba-c","D2h^21","-C2b2b","Cmme","C2/m2/m2/e","","C","2","m","2","m","2","b","mmm","D2h","mmm",o}, -new[]{"cab","D2h^21","-A2c2c","Aemm","A2/e2/m2/m","","A","2","b","2","m","2","m","mmm","D2h","mmm",o}, -new[]{"-cba","D2h^21","-A22c","Aemm","A2/e2/m2/m","","A","2","c","2","m","2","m","mmm","D2h","mmm",o}, -new[]{"bca","D2h^21","-B22c","Bmem","B2/m2/e2/m","","B","2","m","2","c","2","m","mmm","D2h","mmm",o}, -new[]{"a-cb","D2h^21","-B2c2","Bmem","B2/m2/e2/m","","B","2","m","2","a","2","m","mmm","D2h","mmm",o}, -new[]{"1","D2h^22","C22-1bc","Ccce(1)","C2/c2/c2/e","","C","2","c","2","c","2","a","mmm","D2h","mmm",o}, -new[]{"2","D2h^22","-C2b2bc","Ccce(2)","C2/c2/c2/e","","C","2","c","2","c","2","a","mmm","D2h","mmm",o}, -new[]{"1ba-c","D2h^22","C22-1bc","Ccce(1)","C2/c2/c2/e","","C","2","c","2","c","2","b","mmm","D2h","mmm",o}, -new[]{"2ba-c","D2h^22","-C2b2c","Ccce(2)","C2/c2/c2/e","","C","2","c","2","c","2","b","mmm","D2h","mmm",o}, -new[]{"1cab","D2h^22","A22-1ac","Aeaa(1)","A2/e2/a2/a","","A","2","b","2","a","2","a","mmm","D2h","mmm",o}, -new[]{"2cab","D2h^22","-A2a2c","Aeaa(2)","A2/e2/a2/a","","A","2","b","2","a","2","a","mmm","D2h","mmm",o}, -new[]{"1-cba","D2h^22","A22-1ac","Aeaa(1)","A2/e2/a2/a","","A","2","c","2","a","2","a","mmm","D2h","mmm",o}, -new[]{"2-cba","D2h^22","-A2ac2c","Aeaa(2)","A2/e2/a2/a","","A","2","c","2","a","2","a","mmm","D2h","mmm",o}, -new[]{"1bca","D2h^22","B22-1bc","Bbeb(1)","B2/b2/e2/b","","B","2","b","2","c","2","b","mmm","D2h","mmm",o}, -new[]{"2bca","D2h^22","-B2bc2b","Bbeb(2)","B2/b2/e2/b","","B","2","b","2","c","2","b","mmm","D2h","mmm",o}, -new[]{"1a-cb","D2h^22","B22-1bc","Bbeb(1)","B2/b2/e2/b","","B","2","b","2","a","2","b","mmm","D2h","mmm",o}, -new[]{"2a-cb","D2h^22","-B2b2bc","Bbeb(2)","B2/b2/e2/b","","B","2","b","2","a","2","b","mmm","D2h","mmm",o}, -new[]{"","D2h^23","-F22","Fmmm","F2/m2/m2/m","","F","2","m","2","m","2","m","mmm","D2h","mmm",o}, -new[]{"1","D2h^24","F22-1d","Fddd(1)","F2/d2/d2/d","","F","2","d","2","d","2","d","mmm","D2h","mmm",o}, -new[]{"2","D2h^24","-F2uv2vw","Fddd(2)","F2/d2/d2/d","","F","2","d","2","d","2","d","mmm","D2h","mmm",o}, -new[]{"","D2h^25","-I22","Immm","I2/m2/m2/m","","I","2","m","2","m","2","m","mmm","D2h","mmm",o}, -new[]{"","D2h^26","-I22c","Ibam","I2/b2/a2/m","","I","2","b","2","a","2","m","mmm","D2h","mmm",o}, -new[]{"cab","D2h^26","-I2a2","Imcb","I2/m2/c2/b","","I","2","m","2","c","2","b","mmm","D2h","mmm",o}, -new[]{"bca","D2h^26","-I2b2b","Icma","I2/c2/m2/a","","I","2","c","2","m","2","a","mmm","D2h","mmm",o}, -new[]{"","D2h^27","-I2b2c","Ibca","I2/b2/c2/a","","I","2","b","2","c","2","a","mmm","D2h","mmm",o}, -new[]{"ba-c","D2h^27","-I2a2b","Icab","I2/c2/a2/b","","I","2","c","2","a","2","b","mmm","D2h","mmm",o}, -new[]{"","D2h^28","-I2b2","Imma","I2/m2/m2/a","","I","2","m","2","m","2","a","mmm","D2h","mmm",o}, -new[]{"ba-c","D2h^28","-I2a2a","Immb","I2/m2/m2/b","","I","2","m","2","m","2","b","mmm","D2h","mmm",o}, -new[]{"cab","D2h^28","-I2c2c","Ibmm","I2/b2/m2/m","","I","2","b","2","m","2","m","mmm","D2h","mmm",o}, -new[]{"-cba","D2h^28","-I22b","Icmm","I2/c2/m2/m","","I","2","c","2","m","2","m","mmm","D2h","mmm",o}, -new[]{"bca","D2h^28","-I22a","Imcm","I2/m2/c2/m","","I","2","m","2","c","2","m","mmm","D2h","mmm",o}, -new[]{"a-cb","D2h^28","-I2c2","Imam","I2/m2/a2/m","","I","2","m","2","a","2","m","mmm","D2h","mmm",o}, -new[]{"","C4^1","P4","P4","P4","","P","4","","1","","1","","4","C4","4/m",te}, -new[]{"","C4^2","P4w","P4sub1","P4sub1","","P","4s1","","1","","1","","4","C4","4/m",te}, -new[]{"","C4^3","P4c","P4sub2","P4sub2","","P","4s2","","1","","1","","4","C4","4/m",te}, -new[]{"","C4^4","P4cw","P4sub3","P4sub3","","P","4s3","","1","","1","","4","C4","4/m",te}, -new[]{"","C4^5","I4","I4","I4","","I","4","","1","","1","","4","C4","4/m",te}, -new[]{"","C4^6","I4bw","I4sub1","I4sub1","","I","4s1","","1","","1","","4","C4","4/m",te}, -new[]{"","S4^1","P-4","P-4","P-4","","P","-4","","1","","1","","-4","S4","4/m",te}, -new[]{"","S4^2","I-4","I-4","I-4","","I","-4","","1","","1","","-4","S4","4/m",te}, -new[]{"","C4h^1","-P4","P4/m","P4/m","","P","4","m","1","","1","","4/m","C4h","4/m",te}, -new[]{"","C4h^2","-P4c","P4sub2/m","P4sub2/m","","P","4s2","m","1","","1","","4/m","C4h","4/m",te}, -new[]{"1","C4h^3","P4ab-1ab","P4/n(1)","P4/n","","P","4","n","1","","1","","4/m","C4h","4/m",te}, -new[]{"2","C4h^3","-P4a","P4/n(2)","P4/n","","P","4","n","1","","1","","4/m","C4h","4/m",te}, -new[]{"1","C4h^4","P4n-1n","P4sub2/n(1)","P4sub2/n","","P","4s2","n","1","","1","","4/m","C4h","4/m",te}, -new[]{"2","C4h^4","-P4bc","P4sub2/n(2)","P4sub2/n","","P","4s2","n","1","","1","","4/m","C4h","4/m",te}, -new[]{"","C4h^5","-I4","I4/m","I4/m","","I","4","m","1","","1","","4/m","C4h","4/m",te}, -new[]{"1","C4h^6","I4bw-1bw","I4sub1/a(1)","I4sub1/a","","I","4s1","a","1","","1","","4/m","C4h","4/m",te}, -new[]{"2","C4h^6","-I4ad","I4sub1/a(2)","I4sub1/a","","I","4s1","a","1","","1","","4/m","C4h","4/m",te}, -new[]{"","D4^1","P42","P422","P422","","P","4","","2","","2","","422","D4","4/mmm",te}, -new[]{"","D4^2","P4ab2ab","P42sub12","P42sub12","","P","4","","2s1","","2","","422","D4","4/mmm",te}, -new[]{"","D4^3","P4w2c","P4sub122","P4sub122","","P","4s1","","2","","2","","422","D4","4/mmm",te}, -new[]{"","D4^4","P4abw2nw","P4sub12sub12","P4sub12sub12","","P","4s1","","2s1","","2","","422","D4","4/mmm",te}, -new[]{"","D4^5","P4c2","P4sub222","P4sub222","","P","4s2","","2","","2","","422","D4","4/mmm",te}, -new[]{"","D4^6","P4n2n","P4sub22sub12","P4sub22sub12","","P","4s2","","2s1","","2","","422","D4","4/mmm",te}, -new[]{"","D4^7","P4cw2c","P4sub322","P4sub322","","P","4s3","","2","","2","","422","D4","4/mmm",te}, -new[]{"","D4^8","P4nw2abw","P4sub32sub12","P4sub32sub12","","P","4s3","","2s1","","2","","422","D4","4/mmm",te}, -new[]{"","D4^9","I42","I422","I422","","I","4","","2","","2","","422","D4","4/mmm",te}, -new[]{"","D4^10","I4bw2bw","I4sub122","I4sub122","","I","4s1","","2","","2","","422","D4","4/mmm",te}, -new[]{"","C4v^1","P4-2","P4mm","P4mm","","P","4","","","m","","m","4mm","C4v","4/mmm",te}, -new[]{"","C4v^2","P4-2ab","P4bm","P4bm","","P","4","","","b","","m","4mm","C4v","4/mmm",te}, -new[]{"","C4v^3","P4c-2c","P4sub2cm","P4sub2cm","","P","4s2","","","c","","m","4mm","C4v","4/mmm",te}, -new[]{"","C4v^4","P4n-2n","P4sub2nm","P4sub2nm","","P","4s2","","","n","","m","4mm","C4v","4/mmm",te}, -new[]{"","C4v^5","P4-2c","P4cc","P4cc","","P","4","","","c","","c","4mm","C4v","4/mmm",te}, -new[]{"","C4v^6","P4-2n","P4nc","P4nc","","P","4","","","n","","c","4mm","C4v","4/mmm",te}, -new[]{"","C4v^7","P4c-2","P4sub2mc","P4sub2mc","","P","4s2","","","m","","c","4mm","C4v","4/mmm",te}, -new[]{"","C4v^8","P4c-2ab","P4sub2bc","P4sub2bc","","P","4s2","","","b","","c","4mm","C4v","4/mmm",te}, -new[]{"","C4v^9","I4-2","I4mm","I4mm","","I","4","","","m","","m","4mm","C4v","4/mmm",te}, -new[]{"","C4v^10","I4-2c","I4cm","I4cm","","I","4","","","c","","m","4mm","C4v","4/mmm",te}, -new[]{"","C4v^11","I4bw-2","I4sub1md","I4sub1md","","I","4s1","","","m","","d","4mm","C4v","4/mmm",te}, -new[]{"","C4v^12","I4bw-2c","I4sub1cd","I4sub1cd","","I","4s1","","","c","","d","4mm","C4v","4/mmm",te}, -new[]{"","D2d^1","P-42","P-42m","P-42m","","P","-4","","2","","","m","-42m","D2d","4/mmm",te}, -new[]{"","D2d^2","P-42c","P-42c","P-42c","","P","-4","","2","","","c","-42m","D2d","4/mmm",te}, -new[]{"","D2d^3","P-42ab","P-42sub1m","P-42sub1m","","P","-4","","2s1","","","m","-42m","D2d","4/mmm",te}, -new[]{"","D2d^4","P-42n","P-42sub1c","P-42sub1c","","P","-4","","2s1","","","c","-42m","D2d","4/mmm",te}, -new[]{"","D2d^5","P-4-2","P-4m2","P-4m2","","P","-4","","","m","2","","-42m","D2d","4/mmm",te}, -new[]{"","D2d^6","P-4-2c","P-4c2","P-4c2","","P","-4","","","c","2","","-42m","D2d","4/mmm",te}, -new[]{"","D2d^7","P-4-2ab","P-4b2","P-4b2","","P","-4","","","b","2","","-42m","D2d","4/mmm",te}, -new[]{"","D2d^8","P-4-2n","P-4n2","P-4n2","","P","-4","","","n","2","","-42m","D2d","4/mmm",te}, -new[]{"","D2d^9","I-4-2","I-4m2","I-4m2","","I","-4","","","m","2","","-42m","D2d","4/mmm",te}, -new[]{"","D2d^10","I-4-2c","I-4c2","I-4c2","","I","-4","","","c","2","","-42m","D2d","4/mmm",te}, -new[]{"","D2d^11","I-42","I-42m","I-42m","","I","-4","","2","","","m","-42m","D2d","4/mmm",te}, -new[]{"","D2d^12","I-42bw","I-42d","I-42d","","I","-4","","2","","","d","-42m","D2d","4/mmm",te}, -new[]{"","D4h^1","-P42","P4/mmm","P4/m2/m2/m","","P","4","m","2","m","2","m","4/mmm","D4h","4/mmm",te}, -new[]{"","D4h^2","-P42c","P4/mcc","P4/m2/c2/c","","P","4","m","2","c","2","c","4/mmm","D4h","4/mmm",te}, -new[]{"1","D4h^3","P42-1ab","P4/nbm(1)","P4/n2/b2/m","","P","4","n","2","b","2","m","4/mmm","D4h","4/mmm",te}, -new[]{"2","D4h^3","-P4a2b","P4/nbm(2)","P4/n2/b2/m","","P","4","n","2","b","2","m","4/mmm","D4h","4/mmm",te}, -new[]{"1","D4h^4","P42-1n","P4/nnc(1)","P4/n2/n2/c","","P","4","n","2","n","2","c","4/mmm","D4h","4/mmm",te}, -new[]{"2","D4h^4","-P4a2bc","P4/nnc(2)","P4/n2/n2/c","","P","4","n","2","n","2","c","4/mmm","D4h","4/mmm",te}, -new[]{"","D4h^5","-P42ab","P4/mbm","P4/m2sub1/bm","","P","4","m","2s1","b","","m","4/mmm","D4h","4/mmm",te}, -new[]{"","D4h^6","-P42n","P4/mnc","P4/m2sub1/nc","","P","4","m","2s1","n","","c","4/mmm","D4h","4/mmm",te}, -new[]{"1","D4h^7","P4ab2ab-1ab","P4/nmm(1)","P4/n2sub1/mm","","P","4","n","2s1","m","","m","4/mmm","D4h","4/mmm",te}, -new[]{"2","D4h^7","-P4a2a","P4/nmm(2)","P4/n2sub1/mm","","P","4","n","2s1","m","","m","4/mmm","D4h","4/mmm",te}, -new[]{"1","D4h^8","P4ab2n-1ab","P4/ncc(1)","P4/n2sub1/cc","","P","4","n","2s1","c","","c","4/mmm","D4h","4/mmm",te}, -new[]{"2","D4h^8","-P4a2ac","P4/ncc(2)","P4/n2sub1/cc","","P","4","n","2s1","c","","c","4/mmm","D4h","4/mmm",te}, -new[]{"","D4h^9","-P4c2","P4sub2/mmc","P4sub2/m2/m2/c","","P","4s2","m","2","m","2","c","4/mmm","D4h","4/mmm",te}, -new[]{"","D4h^10","-P4c2c","P4sub2/mcm","P4sub2/m2/c2/m","","P","4s2","m","2","c","2","m","4/mmm","D4h","4/mmm",te}, -new[]{"1","D4h^11","P4n2c-1n","P4sub2/nbc(1)","P4sub2/n2/b2/c","","P","4s2","n","2","b","2","c","4/mmm","D4h","4/mmm",te}, -new[]{"2","D4h^11","-P4ac2b","P4sub2/nbc(2)","P4sub2/n2/b2/c","","P","4s2","n","2","b","2","c","4/mmm","D4h","4/mmm",te}, -new[]{"1","D4h^12","P4n2-1n","P4sub2/nnm(1)","P4sub2/n2/n2/m","","P","4s2","n","2","n","2","m","4/mmm","D4h","4/mmm",te}, -new[]{"2","D4h^12","-P4ac2bc","P4sub2/nnm(2)","P4sub2/n2/n2/m","","P","4s2","n","2","n","2","m","4/mmm","D4h","4/mmm",te}, -new[]{"","D4h^13","-P4c2ab","P4sub2/mbc","P4sub2/m2sub1/b2/c","","P","4s2","m","2s1","b","2","c","4/mmm","D4h","4/mmm",te}, -new[]{"","D4h^14","-P4n2n","P4sub2/mnm","P4sub2/m2sub1/n2/m","","P","4s2","m","2s1","n","2","m","4/mmm","D4h","4/mmm",te}, -new[]{"1","D4h^15","P4n2n-1n","P4sub2/nmc(1)","P4sub2/n2sub1/m2/c","","P","4s2","n","2s1","m","2","c","4/mmm","D4h","4/mmm",te}, -new[]{"2","D4h^15","-P4ac2a","P4sub2/nmc(2)","P4sub2/n2sub1/m2/c","","P","4s2","n","2s1","m","2","c","4/mmm","D4h","4/mmm",te}, -new[]{"1","D4h^16","P4n2ab-1n","P4sub2/ncm(1)","P4sub2/n2sub1/c2/m","","P","4s2","n","2s1","c","2","m","4/mmm","D4h","4/mmm",te}, -new[]{"2","D4h^16","-P4ac2ac","P4sub2/ncm(2)","P4sub2/n2sub1/c2/m","","P","4s2","n","2s1","c","2","m","4/mmm","D4h","4/mmm",te}, -new[]{"","D4h^17","-I42","I4/mmm","I4/m2/m2/m","","I","4","m","2","m","2","m","4/mmm","D4h","4/mmm",te}, -new[]{"","D4h^18","-I42c","I4/mcm","I4/m2/c2/m","","I","4","m","2","c","2","m","4/mmm","D4h","4/mmm",te}, -new[]{"1","D4h^19","I4bw2bw-1bw","I4sub1/amd(1)","I4sub1/a2/m2/d","","I","4s1","a","2","m","2","d","4/mmm","D4h","4/mmm",te}, -new[]{"2","D4h^19","-I4bd2","I4sub1/amd(2)","I4sub1/a2/m2/d","","I","4s1","a","2","m","2","d","4/mmm","D4h","4/mmm",te}, -new[]{"1","D4h^20","I4bw2aw-1bw","I4sub1/acd(1)","I4sub1/a2/c2/d","","I","4s1","a","2","c","2","d","4/mmm","D4h","4/mmm",te}, -new[]{"2","D4h^20","-I4bd2c","I4sub1/acd(2)","I4sub1/a2/c2/d","","I","4s1","a","2","c","2","d","4/mmm","D4h","4/mmm",te}, -new[]{"","C3^1","P3","P3","P3","","P","3","","1","","1","","3","C3","-3",tr}, -new[]{"","C3^2","P31","P3sub1","P3sub1","","P","3s1","","1","","1","","3","C3","-3",tr}, -new[]{"","C3^3","P32","P3sub2","P3sub2","","P","3s2","","1","","1","","3","C3","-3",tr}, -new[]{"H","C3^4","R3","R3Hex","R3","","R","3","","1","","1","","3","C3","-3",tr}, -new[]{"R","C3^4","P3*","R3Rho","R3","","R","3","","1","","1","","3","C3","-3",tr}, -new[]{"","C3i^1","-P3","P-3","P-3","","P","-3","","1","","1","","-3","C3i","-3",tr}, -new[]{"H","C3i^2","-R3","R-3Hex","R-3","","R","-3","","1","","1","","-3","C3i","-3",tr}, -new[]{"R","C3i^2","-P3*","R-3Rho","R-3","","R","-3","","1","","1","","-3","C3i","-3",tr}, -new[]{"","D3^1","P32","P312","P312","","P","3","","1","","2","","32","D3","-32m",tr}, -new[]{"","D3^2","P32\"","P321","P321","","P","3","","2","","1","","32","D3","-32m",tr}, -new[]{"","D3^3","P312c(001)","P3sub112","P3sub112","","P","3s1","","1","","2","","32","D3","-32m",tr}, -new[]{"","D3^4","P312\"","P3sub121","P3sub121","","P","3s1","","2","","1","","32","D3","-32m",tr}, -new[]{"","D3^5","P322c(00-1)","P3sub212","P3sub212","","P","3s2","","1","","2","","32","D3","-32m",tr}, -new[]{"","D3^6","P322\"","P3sub221","P3sub221","","P","3s2","","2","","1","","32","D3","-32m",tr}, -new[]{"H","D3^7","R32\"","R32Hex","R32","","R","3","","2","","1","","32","D3","-32m",tr}, -new[]{"R","D3^7","P3*2","R32Rho","R32","","R","3","","2","","1","","32","D3","-32m",tr}, -new[]{"","C3v^1","P3-2\"","P3m1","P3m1","","P","3","","","m","1","","3m","C3v","-32m",tr}, -new[]{"","C3v^2","P3-2","P31m","P31m","","P","3","","1","","","m","3m","C3v","-32m",tr}, -new[]{"","C3v^3","P3-2\"c","P3c1","P3c1","","P","3","","","c","1","","3m","C3v","-32m",tr}, -new[]{"","C3v^4","P3-2c","P31c","P31c","","P","3","","1","","","c","3m","C3v","-32m",tr}, -new[]{"H","C3v^5","R3-2\"","R3mHex","R3m","","R","3","","","m","1","","3m","C3v","-32m",tr}, -new[]{"R","C3v^5","P3*-2","R3mRho","R3m","","R","3","","","m","1","","3m","C3v","-32m",tr}, -new[]{"H","C3v^6","R3-2\"c","R3cHex","R3c","","R","3","","","c","1","","3m","C3v","-32m",tr}, -new[]{"R","C3v^6","P3*-2n","R3cRho","R3c","","R","3","","","c","1","","3m","C3v","-32m",tr}, -new[]{"","D3d^1","-P32","P-31m","P-312/m","","P","-3","","1","","2","m","-3m","D3d","-32m",tr}, -new[]{"","D3d^2","-P32c","P-31c","P-312/c","","P","-3","","1","","2","c","-3m","D3d","-32m",tr}, -new[]{"","D3d^3","-P32\"","P-3m1","P-32/m1","","P","-3","","2","m","1","","-3m","D3d","-32m",tr}, -new[]{"","D3d^4","-P32\"c","P-3c1","P-32/c1","","P","-3","","2","c","1","","-3m","D3d","-32m",tr}, -new[]{"H","D3d^5","-R32\"","R-3mHex","R-32/m","","R","-3","","2","m","1","","-3m","D3d","-32m",tr}, -new[]{"R","D3d^5","-P3*2","R-3mRho","R-32/m","","R","-3","","2","m","1","","-3m","D3d","-32m",tr}, -new[]{"H","D3d^6","-R32\"c","R-3cHex","R-32/c","","R","-3","","2","c","1","","-3m","D3d","-32m",tr}, -new[]{"R","D3d^6","-P3*2n","R-3cRho","R-32/c","","R","-3","","2","c","1","","-3m","D3d","-32m",tr}, -new[]{"","C6^1","P6","P6","P6","","P","6","","1","","1","","6","C6","6/m",h}, -new[]{"","C6^2","P61","P6sub1","P6sub1","","P","6s1","","1","","1","","6","C6","6/m",h}, -new[]{"","C6^3","P65","P6sub5","P6sub5","","P","6s5","","1","","1","","6","C6","6/m",h}, -new[]{"","C6^4","P62","P6sub2","P6sub2","","P","6s2","","1","","1","","6","C6","6/m",h}, -new[]{"","C6^5","P64","P6sub4","P6sub4","","P","6s4","","1","","1","","6","C6","6/m",h}, -new[]{"","C6^6","P6c","P6sub3","P6sub3","","P","6s3","","1","","1","","6","C6","6/m",h}, -new[]{"","C3h^1","P-6","P-6","P-6","","P","-6","","1","","1","","-6","C3h","6/m",h}, -new[]{"","C6h^1","-P6","P6/m","P6/m","","P","6","m","1","","1","","6/m","C6h","6/m",h}, -new[]{"","C6h^2","-P6c","P6sub3/m","P6sub3/m","","P","6s3","m","1","","1","","6/m","C6h","6/m",h}, -new[]{"","D6^1","P62","P622","P622","","P","6","","2","","2","","622","D6","6/mmm",h}, -new[]{"","D6^2","P612(00-1)","P6sub122","P6sub122","","P","6s1","","2","","2","","622","D6","6/mmm",h}, -new[]{"","D6^3","P652(001)","P6sub522","P6sub522","","P","6s5","","2","","2","","622","D6","6/mmm",h}, -new[]{"","D6^4","P622c(001)","P6sub222","P6sub222","","P","6s2","","2","","2","","622","D6","6/mmm",h}, -new[]{"","D6^5","P642c(00-1)","P6sub422","P6sub422","","P","6s4","","2","","2","","622","D6","6/mmm",h}, -new[]{"","D6^6","P6c2c","P6sub322","P6sub322","","P","6s3","","2","","2","","622","D6","6/mmm",h}, -new[]{"","C6v^1","P6-2","P6mm","P6mm","","P","6","","","m","","m","6mm","C6v","6/mmm",h}, -new[]{"","C6v^2","P6-2c","P6cc","P6cc","","P","6","","","c","","c","6mm","C6v","6/mmm",h}, -new[]{"","C6v^3","P6c-2","P6sub3cm","P6sub3cm","","P","6s3","","","c","","m","6mm","C6v","6/mmm",h}, -new[]{"","C6v^4","P6c-2c","P6sub3mc","P6sub3mc","","P","6s3","","","m","","c","6mm","C6v","6/mmm",h}, -new[]{"","D3h^1","P-62","P-6m2","P-6m2","","P","-6","","","m","2","","-6m2","D3h","6/mmm",h}, -new[]{"","D3h^2","P-6c2","P-6c2","P-6c2","","P","-6","","","c","2","","-6m2","D3h","6/mmm",h}, -new[]{"","D3h^3","P-6-2","P-62m","P-62m","","P","-6","","2","","","m","-6m2","D3h","6/mmm",h}, -new[]{"","D3h^4","P-6c-2c","P-62c","P-62c","","P","-6","","2","","","c","-6m2","D3h","6/mmm",h}, -new[]{"","D6h^1","-P62","P6/mmm","P6/m2/m2/m","","P","6","m","2","m","2","m","6/mmm","D6h","6/mmm",h}, -new[]{"","D6h^2","-P62c","P6/mcc","P6/m2/c2/c","","P","6","m","2","c","2","c","6/mmm","D6h","6/mmm",h}, -new[]{"","D6h^3","-P6c2","P6sub3/mcm","P6sub3/m2/c2/m","","P","6s3","m","2","c","2","m","6/mmm","D6h","6/mmm",h}, -new[]{"","D6h^4","-P6c2c","P6sub3/mmc","P6sub3/m2/m2/c","","P","6s3","m","2","m","2","c","6/mmm","D6h","6/mmm",h}, -new[]{"","T^1","P223","P23","P23","","P","2","","3","","1","","23","T","m-3",c}, -new[]{"","T^2","F223","F23","F23","","F","2","","3","","1","","23","T","m-3",c}, -new[]{"","T^3","I223","I23","I23","","I","2","","3","","1","","23","T","m-3",c}, -new[]{"","T^4","P2ac2ab3","P2sub13","P2sub13","","P","2s1","","3","","1","","23","T","m-3",c}, -new[]{"","T^5","I2b2c3","I2sub13","I2sub13","","I","2s1","","3","","1","","23","T","m-3",c}, -new[]{"","Th^1","-P223","Pm-3","P2/m-3","","P","2","m","-3","","1","","m-3","Th","m-3",c}, -new[]{"1","Th^2","P223-1n","Pn-3(1)","P2/n-3","","P","2","n","-3","","1","","m-3","Th","m-3",c}, -new[]{"2","Th^2","-P2ab2bc3","Pn-3(2)","P2/n-3","","P","2","n","-3","","1","","m-3","Th","m-3",c}, -new[]{"","Th^3","-F223","Fm-3","F2/m-3","","F","2","m","-3","","1","","m-3","Th","m-3",c}, -new[]{"1","Th^4","F223-1d","Fd-3(1)","F2/d-3","","F","2","d","-3","","1","","m-3","Th","m-3",c}, -new[]{"2","Th^4","-F2uv2vw3","Fd-3(2)","F2/d-3","","F","2","d","-3","","1","","m-3","Th","m-3",c}, -new[]{"","Th^5","-I223","Im-3","I2/m-3","","I","2","m","-3","","1","","m-3","Th","m-3",c}, -new[]{"","Th^6","-P2ac2ab3","Pa-3","P2sub1/a-3","","P","2s1","a","-3","","1","","m-3","Th","m-3",c}, -new[]{"","Th^7","-I2b2c3","Ia-3","I2sub1/a-3","","I","2s1","a","-3","","1","","m-3","Th","m-3",c}, -new[]{"","O^1","P423","P432","P432","","P","4","","3","","2","","432","O","m-3m",c}, -new[]{"","O^2","P4n23","P4sub232","P4sub232","","P","4s2","","3","","2","","432","O","m-3m",c}, -new[]{"","O^3","F423","F432","F432","","F","4","","3","","2","","432","O","m-3m",c}, -new[]{"","O^4","F4d23","F4sub132","F4sub132","","F","4s1","","3","","2","","432","O","m-3m",c}, -new[]{"","O^5","I423","I432","I432","","I","4","","3","","2","","432","O","m-3m",c}, -new[]{"","O^6","P4acd2ab3","P4sub332","P4sub332","","P","4s3","","3","","2","","432","O","m-3m",c}, -new[]{"","O^7","P4bd2ab3","P4sub132","P4sub132","","P","4s1","","3","","2","","432","O","m-3m",c}, -new[]{"","O^8","I4bd2c3","I4sub132","I4sub132","","I","4s1","","3","","2","","432","O","m-3m",c}, -new[]{"","Td^1","P-423","P-43m","P-43m","","P","-4","","3","","","m","-43m","Td","m-3m",c}, -new[]{"","Td^2","F-423","F-43m","F-43m","","F","-4","","3","","","m","-43m","Td","m-3m",c}, -new[]{"","Td^3","I-423","I-43m","I-43m","","I","-4","","3","","","m","-43m","Td","m-3m",c}, -new[]{"","Td^4","P-4n23","P-43n","P-43n","","P","-4","","3","","","n","-43m","Td","m-3m",c}, -new[]{"","Td^5","F-4c23","F-43c","F-43c","","F","-4","","3","","","c","-43m","Td","m-3m",c}, -new[]{"","Td^6","I-4bd2c3","I-43d","I-43d","","I","-4","","3","","","d","-43m","Td","m-3m",c}, -new[]{"","Oh^1","-P423","Pm-3m","P4/m-32/m","","P","4","m","-3","","2","m","m-3m","Oh","m-3m",c}, -new[]{"1","Oh^2","P423-1n","Pn-3n(1)","P4/n-32/n","","P","4","n","-3","","2","n","m-3m","Oh","m-3m",c}, -new[]{"2","Oh^2","-P4a2bc3","Pn-3n(2)","P4/n-32/n","","P","4","n","-3","","2","n","m-3m","Oh","m-3m",c}, -new[]{"","Oh^3","-P4n23","Pm-3n","P4sub2/m-32/n","","P","4s2","m","-3","","2","n","m-3m","Oh","m-3m",c}, -new[]{"1","Oh^4","P4n23-1n","Pn-3m(1)","P4sub2/n-32/m","","P","4s2","n","-3","","2","m","m-3m","Oh","m-3m",c}, -new[]{"2","Oh^4","-P4bc2bc3","Pn-3m(2)","P4sub2/n-32/m","","P","4s2","n","-3","","2","m","m-3m","Oh","m-3m",c}, -new[]{"","Oh^5","-F423","Fm-3m","F4/m-32/m","","F","4","m","-3","","2","m","m-3m","Oh","m-3m",c}, -new[]{"","Oh^6","-F4c23","Fm-3c","F4/m-32/c","","F","4","m","-3","","2","c","m-3m","Oh","m-3m",c}, -new[]{"1","Oh^7","F4d23-1d","Fd-3m(1)","F4sub1/d-32/m","","F","4s1","d","-3","","2","m","m-3m","Oh","m-3m",c}, -new[]{"2","Oh^7","-F4vw2vw3","Fd-3m(2)","F4sub1/d-32/m","","F","4s1","d","-3","","2","m","m-3m","Oh","m-3m",c}, -new[]{"1","Oh^8","F4d23-1cd","Fd-3c(1)","F4sub1/d-32/c","","F","4s1","d","-3","","2","c","m-3m","Oh","m-3m",c}, -new[]{"2","Oh^8","-F4cvw2vw3","Fd-3c(2)","F4sub1/d-32/c","","F","4s1","d","-3","","2","c","m-3m","Oh","m-3m",c}, -new[]{"","Oh^9","-I423","Im-3m","I4/m-32/m","","I","4","m","-3","","2","m","m-3m","Oh","m-3m",c}, -new[]{"","Oh^10","-I4bd2c3","Ia-3d","I4sub1/a-32/d","","I","4s1","a","-3","","2","d","m-3m","Oh","m-3m",c}, -new[]{"","Ci^1","extra","C-1","C-1","","C","-1","","1","","1","","-1","Ci","-1",t}, -new[]{"","Ci^1","extra","I-1","I-1","","I","-1","","1","","1","","-1","Ci","-1",t}, -new[]{"","Ci^1","extra","A-1","A-1","","A","-1","","1","","1","","-1","Ci","-1",t}, -new[]{"","Ci^1","extra","B-1","B-1","","B","-1","","1","","1","","-1","Ci","-1",t}, -new[]{"","Ci^1","extra","F-1","F-1","","F","-1","","1","","1","","-1","Ci","-1",t}, -new[]{"","C1^1","extra","A1","A1","","A","1","","1","","1","","1","Ci","1",t}, -new[]{"","C1^1","extra","B1","B1","","B","1","","1","","1","","1","Ci","1",t}, -new[]{"","C1^1","extra","C1","C1","","C","1","","1","","1","","1","Ci","1",t}, -new[]{"","C1^1","extra","F1","F1","","F","1","","1","","1","","1","Ci","1",t}, - #endregion - }); - - Task task2 = Task.Run(() => new ushort[][][] + public static readonly ushort[][][] PositionsDictionary = new ushort[][][] { #region positions //0 unk @@ -7310,9 +4193,1989 @@ static SymmetryStatic() //539 F 1 new ushort[][]{ new ushort[]{ 915}} #endregion positions - }); + }; + + public static readonly Func[] PositionGeneratorList + = new Func[] + { + #region PositionGenerator +(_,_,_) => (0,0,0), //0 +(_,_,_) => (0,0,d12), //1 +(_,_,_) => (0,0,d13), //2 +(_,_,_) => (0,0,d14), //3 +(_,_,_) => (0,0,d16), //4 +(_,_,_) => (0,0,d23), //5 +(_,_,_) => (0,0,d34), //6 +(_,_,_) => (0,0,d56), //7 +(x,_,_) => (0,0,x), //8 +(x,_,_) => (0,0,-x), //9 +(_,_,z) => (0,0,z), //10 +(_,_,z) => (0,0,-z), //11 +(_,_,z) => (0,0,z+d12), //12 +(_,_,z) => (0,0,-z+d12), //13 +(_,_,z) => (0,0,z+d13), //14 +(_,_,z) => (0,0,-z+d13), //15 +(_,_,z) => (0,0,z+d23), //16 +(_,_,z) => (0,0,-z+d23), //17 +(_,_,_) => (0,d12,0), //18 +(_,_,_) => (0,d12,d12), //19 +(_,_,_) => (0,d12,d13), //20 +(_,_,_) => (0,d12,d14), //21 +(_,_,_) => (0,d12,d16), //22 +(_,_,_) => (0,d12,d23), //23 +(_,_,_) => (0,d12,d34), //24 +(_,_,_) => (0,d12,d56), //25 +(x,_,_) => (0,d12,x), //26 +(x,_,_) => (0,d12,-x), //27 +(x,_,_) => (0,d12,x+d12), //28 +(x,_,_) => (0,d12,-x+d12), //29 +(_,_,z) => (0,d12,z), //30 +(_,_,z) => (0,d12,-z), //31 +(_,_,z) => (0,d12,z+d12), //32 +(_,_,z) => (0,d12,-z+d12), //33 +(_,_,z) => (0,d12,z+d13), //34 +(_,_,z) => (0,d12,-z+d13), //35 +(_,_,z) => (0,d12,z+d14), //36 +(_,_,z) => (0,d12,-z+d14), //37 +(_,_,z) => (0,d12,z+d23), //38 +(_,_,z) => (0,d12,-z+d23), //39 +(_,_,z) => (0,d12,z+d34), //40 +(_,_,_) => (0,d14,0), //41 +(_,_,_) => (0,d14,d12), //42 +(_,_,_) => (0,d14,d14), //43 +(_,_,_) => (0,d14,d18), //44 +(_,_,_) => (0,d14,d34), //45 +(_,_,_) => (0,d14,d38), //46 +(_,_,_) => (0,d14,d58), //47 +(_,_,_) => (0,d14,d78), //48 +(x,_,_) => (0,d14,x), //49 +(x,_,_) => (0,d14,x+d12), //50 +(x,_,_) => (0,d14,-x+d14), //51 +(x,_,_) => (0,d14,-x+d34), //52 +(_,_,z) => (0,d14,z), //53 +(_,_,z) => (0,d14,-z), //54 +(_,_,z) => (0,d14,z+d12), //55 +(_,_,z) => (0,d14,-z+d12), //56 +(_,_,z) => (0,d14,-z+d34), //57 +(_,_,_) => (0,d34,0), //58 +(_,_,_) => (0,d34,d12), //59 +(_,_,_) => (0,d34,d14), //60 +(_,_,_) => (0,d34,d18), //61 +(_,_,_) => (0,d34,d34), //62 +(_,_,_) => (0,d34,d38), //63 +(_,_,_) => (0,d34,d58), //64 +(_,_,_) => (0,d34,d78), //65 +(x,_,_) => (0,d34,-x), //66 +(x,_,_) => (0,d34,-x+d12), //67 +(x,_,_) => (0,d34,x+d34), //68 +(_,_,z) => (0,d34,z), //69 +(_,_,z) => (0,d34,-z), //70 +(_,_,z) => (0,d34,z+d12), //71 +(_,_,z) => (0,d34,-z+d12), //72 +(_,_,z) => (0,d34,z+d14), //73 +(x,_,_) => (0,x,0), //74 +(x,_,_) => (0,-x,0), //75 +(x,_,_) => (0,x,d12), //76 +(x,_,_) => (0,-x,d12), //77 +(x,_,_) => (0,x,d13), //78 +(x,_,_) => (0,-x,d13), //79 +(x,_,_) => (0,x,d14), //80 +(x,_,_) => (0,-x,d14), //81 +(x,_,_) => (0,x,d16), //82 +(x,_,_) => (0,-x,d16), //83 +(x,_,_) => (0,x,d23), //84 +(x,_,_) => (0,-x,d23), //85 +(x,_,_) => (0,x,d34), //86 +(x,_,_) => (0,-x,d34), //87 +(x,_,_) => (0,x,d56), //88 +(x,_,_) => (0,-x,d56), //89 +(x,_,_) => (0,x,-x), //90 +(x,_,_) => (0,-x,x), //91 +(x,_,z) => (0,x,z), //92 +(x,_,z) => (0,x,-z), //93 +(x,_,z) => (0,-x,z), //94 +(x,_,z) => (0,-x,-z), //95 +(x,_,z) => (0,x,z+d12), //96 +(x,_,z) => (0,x,-z+d12), //97 +(x,_,z) => (0,-x,z+d12), //98 +(x,_,_) => (0,-x+d12,0), //99 +(x,_,_) => (0,x+d12,d12), //100 +(x,_,_) => (0,-x+d12,d12), //101 +(_,y,_) => (0,y,0), //102 +(_,y,_) => (0,-y,0), //103 +(_,y,_) => (0,y,d12), //104 +(_,y,_) => (0,-y,d12), //105 +(_,y,_) => (0,y,d14), //106 +(_,y,_) => (0,-y,d14), //107 +(_,y,_) => (0,y,d34), //108 +(_,y,_) => (0,-y,d34), //109 +(_,y,_) => (0,y,y), //110 +(_,y,_) => (0,y,-y), //111 +(_,y,_) => (0,-y,y), //112 +(_,y,_) => (0,-y,-y), //113 +(_,y,_) => (0,y,y+d12), //114 +(_,y,_) => (0,-y,-y+d12), //115 +(_,y,z) => (0,y,z), //116 +(_,y,z) => (0,y,-z), //117 +(_,y,z) => (0,-y,z), //118 +(_,y,z) => (0,-y,-z), //119 +(_,y,z) => (0,y,-z+d12), //120 +(_,y,z) => (0,-y,z+d12), //121 +(_,y,_) => (0,y+d12,0), //122 +(_,y,_) => (0,-y+d12,0), //123 +(_,y,_) => (0,y+d12,d12), //124 +(_,y,_) => (0,-y+d12,d12), //125 +(_,y,_) => (0,y+d12,d14), //126 +(_,y,_) => (0,-y+d12,d14), //127 +(_,y,_) => (0,y+d12,d34), //128 +(_,y,_) => (0,-y+d12,d34), //129 +(_,y,_) => (0,y+d12,y), //130 +(_,y,_) => (0,-y+d12,-y), //131 +(_,y,_) => (0,y+d12,-y+d12), //132 +(_,y,_) => (0,-y+d12,y+d12), //133 +(_,y,z) => (0,y+d12,-z), //134 +(_,y,z) => (0,-y+d12,z), //135 +(_,y,z) => (0,y+d12,-z+d12), //136 +(_,y,z) => (0,-y+d12,z+d12), //137 +(_,y,z) => (0,-y+d12,-z+d14), //138 +(_,y,_) => (0,y+d14,y+d12), //139 +(_,y,_) => (0,-y+d34,-y+d12), //140 +(_,y,z) => (0,z,y), //141 +(_,y,z) => (0,z,-y), //142 +(_,y,z) => (0,-z,y), //143 +(_,y,z) => (0,-z,-y), //144 +(_,_,_) => (d12,0,0), //145 +(_,_,_) => (d12,0,d12), //146 +(_,_,_) => (d12,0,d14), //147 +(_,_,_) => (d12,0,d34), //148 +(x,_,_) => (d12,0,x), //149 +(x,_,_) => (d12,0,-x), //150 +(x,_,_) => (d12,0,x+d12), //151 +(x,_,_) => (d12,0,-x+d12), //152 +(_,_,z) => (d12,0,z), //153 +(_,_,z) => (d12,0,-z), //154 +(_,_,z) => (d12,0,z+d12), //155 +(_,_,z) => (d12,0,-z+d12), //156 +(_,_,z) => (d12,0,z+d13), //157 +(_,_,z) => (d12,0,z+d14), //158 +(_,_,z) => (d12,0,-z+d14), //159 +(_,_,z) => (d12,0,z+d23), //160 +(_,_,z) => (d12,0,z+d34), //161 +(_,_,z) => (d12,0,-z+d34), //162 +(_,_,_) => (d12,d12,0), //163 +(_,_,_) => (d12,d12,d12), //164 +(_,_,_) => (d12,d12,d13), //165 +(_,_,_) => (d12,d12,d14), //166 +(_,_,_) => (d12,d12,d16), //167 +(_,_,_) => (d12,d12,d23), //168 +(_,_,_) => (d12,d12,d34), //169 +(_,_,_) => (d12,d12,d56), //170 +(x,_,_) => (d12,d12,x), //171 +(x,_,_) => (d12,d12,-x), //172 +(x,_,_) => (d12,d12,x+d12), //173 +(x,_,_) => (d12,d12,-x+d12), //174 +(_,_,z) => (d12,d12,z), //175 +(_,_,z) => (d12,d12,-z), //176 +(_,_,z) => (d12,d12,z+d12), //177 +(_,_,z) => (d12,d12,-z+d12), //178 +(_,_,z) => (d12,d12,z+d13), //179 +(_,_,z) => (d12,d12,-z+d13), //180 +(_,_,z) => (d12,d12,z+d23), //181 +(_,_,z) => (d12,d12,-z+d23), //182 +(_,_,_) => (d12,d14,0), //183 +(_,_,_) => (d12,d14,d12), //184 +(_,_,_) => (d12,d14,d14), //185 +(_,_,_) => (d12,d14,d18), //186 +(_,_,_) => (d12,d14,d34), //187 +(_,_,_) => (d12,d14,d38), //188 +(_,_,_) => (d12,d14,d58), //189 +(_,_,_) => (d12,d14,d78), //190 +(x,_,_) => (d12,d14,x+d14), //191 +(x,_,_) => (d12,d14,x+d34), //192 +(_,_,z) => (d12,d14,z), //193 +(_,_,z) => (d12,d14,-z), //194 +(_,_,z) => (d12,d14,z+d12), //195 +(_,_,z) => (d12,d14,-z+d12), //196 +(_,_,z) => (d12,d14,z+d14), //197 +(_,_,_) => (d12,d34,0), //198 +(_,_,_) => (d12,d34,d12), //199 +(_,_,_) => (d12,d34,d14), //200 +(_,_,_) => (d12,d34,d34), //201 +(_,_,_) => (d12,d34,d38), //202 +(x,_,_) => (d12,d34,-x+d14), //203 +(_,_,z) => (d12,d34,z), //204 +(_,_,z) => (d12,d34,-z), //205 +(_,_,z) => (d12,d34,z+d12), //206 +(_,_,z) => (d12,d34,-z+d12), //207 +(_,_,z) => (d12,d34,-z+d14), //208 +(_,_,z) => (d12,d34,-z+d34), //209 +(x,_,_) => (d12,x,0), //210 +(x,_,_) => (d12,-x,0), //211 +(x,_,_) => (d12,x,d12), //212 +(x,_,_) => (d12,-x,d12), //213 +(x,_,_) => (d12,x,d14), //214 +(x,_,_) => (d12,-x,d14), //215 +(x,_,_) => (d12,x,d34), //216 +(x,_,_) => (d12,-x,d34), //217 +(x,_,_) => (d12,x,-x), //218 +(x,_,_) => (d12,-x,x), //219 +(x,_,z) => (d12,x,z), //220 +(x,_,z) => (d12,x,-z), //221 +(x,_,z) => (d12,-x,z), //222 +(x,_,z) => (d12,-x,-z), //223 +(x,_,z) => (d12,x,z+d12), //224 +(x,_,z) => (d12,-x,z+d12), //225 +(x,_,_) => (d12,x+d12,0), //226 +(x,_,_) => (d12,-x+d12,0), //227 +(x,_,_) => (d12,x+d12,d12), //228 +(x,_,_) => (d12,-x+d12,d12), //229 +(x,_,_) => (d12,x+d12,d14), //230 +(x,_,_) => (d12,-x+d12,d14), //231 +(x,_,_) => (d12,x+d12,d34), //232 +(x,_,_) => (d12,-x+d12,d34), //233 +(_,y,_) => (d12,y,0), //234 +(_,y,_) => (d12,-y,0), //235 +(_,y,_) => (d12,y,d12), //236 +(_,y,_) => (d12,-y,d12), //237 +(_,y,_) => (d12,y,d14), //238 +(_,y,_) => (d12,-y,d14), //239 +(_,y,_) => (d12,y,d34), //240 +(_,y,_) => (d12,-y,d34), //241 +(_,y,_) => (d12,y,y), //242 +(_,y,_) => (d12,y,-y), //243 +(_,y,_) => (d12,-y,y), //244 +(_,y,_) => (d12,-y,-y), //245 +(_,y,_) => (d12,y,y+d12), //246 +(_,y,_) => (d12,-y,-y+d12), //247 +(_,y,z) => (d12,y,z), //248 +(_,y,z) => (d12,y,-z), //249 +(_,y,z) => (d12,-y,z), //250 +(_,y,z) => (d12,-y,-z), //251 +(_,y,z) => (d12,y,-z+d12), //252 +(_,y,z) => (d12,-y,z+d12), //253 +(_,y,z) => (d12,-y,-z+d12), //254 +(_,y,z) => (d12,y,-z+d34), //255 +(_,y,_) => (d12,y+d12,0), //256 +(_,y,_) => (d12,-y+d12,0), //257 +(_,y,_) => (d12,y+d12,d12), //258 +(_,y,_) => (d12,-y+d12,d12), //259 +(_,y,_) => (d12,y+d12,d14), //260 +(_,y,_) => (d12,-y+d12,d14), //261 +(_,y,_) => (d12,y+d12,d34), //262 +(_,y,_) => (d12,-y+d12,d34), //263 +(_,y,_) => (d12,y+d12,y), //264 +(_,y,_) => (d12,-y+d12,-y), //265 +(_,y,_) => (d12,y+d12,y+d12), //266 +(_,y,_) => (d12,y+d12,-y+d12), //267 +(_,y,_) => (d12,-y+d12,y+d12), //268 +(_,y,_) => (d12,-y+d12,-y+d12), //269 +(_,y,_) => (d12,y+d12,y+d14), //270 +(_,y,_) => (d12,-y+d12,-y+d34), //271 +(_,y,z) => (d12,y+d12,-z), //272 +(_,y,z) => (d12,-y+d12,z), //273 +(_,y,z) => (d12,-y+d12,-z), //274 +(_,y,z) => (d12,y+d12,-z+d12), //275 +(_,y,z) => (d12,-y+d12,z+d12), //276 +(_,y,z) => (d12,-y+d12,-z+d12), //277 +(_,y,_) => (d12,y+d14,-y+d34), //278 +(_,y,_) => (d12,-y+d34,y+d14), //279 +(_,y,z) => (d12,z,y), //280 +(_,y,z) => (d12,z,-y), //281 +(_,y,z) => (d12,-z,y), //282 +(_,y,z) => (d12,-z,-y), //283 +(_,y,z) => (d12,z+d12,y+d12), //284 +(_,y,z) => (d12,z+d12,-y+d12), //285 +(_,y,z) => (d12,-z+d12,y+d12), //286 +(_,y,z) => (d12,-z+d12,-y+d12), //287 +(_,_,_) => (d13,d23,0), //288 +(_,_,_) => (d13,d23,d12), //289 +(_,_,_) => (d13,d23,d14), //290 +(_,_,_) => (d13,d23,d34), //291 +(_,_,z) => (d13,d23,z), //292 +(_,_,z) => (d13,d23,-z), //293 +(_,_,z) => (d13,d23,z+d12), //294 +(_,_,z) => (d13,d23,-z+d12), //295 +(_,_,_) => (d14,0,0), //296 +(_,_,_) => (d14,0,d12), //297 +(_,_,_) => (d14,0,d14), //298 +(_,_,_) => (d14,0,d34), //299 +(_,_,z) => (d14,0,z), //300 +(_,_,z) => (d14,0,-z), //301 +(_,_,z) => (d14,0,z+d12), //302 +(_,_,z) => (d14,0,-z+d12), //303 +(_,_,_) => (d14,d12,0), //304 +(_,_,_) => (d14,d12,d12), //305 +(_,_,_) => (d14,d12,d14), //306 +(_,_,_) => (d14,d12,d34), //307 +(_,_,z) => (d14,d12,z), //308 +(_,_,z) => (d14,d12,-z), //309 +(_,_,z) => (d14,d12,z+d12), //310 +(_,_,z) => (d14,d12,-z+d12), //311 +(_,_,_) => (d14,d14,0), //312 +(_,_,_) => (d14,d14,d12), //313 +(_,_,_) => (d14,d14,d14), //314 +(_,_,_) => (d14,d14,d34), //315 +(x,_,_) => (d14,d14,x), //316 +(x,_,_) => (d14,d14,-x), //317 +(x,_,_) => (d14,d14,-x+d12), //318 +(x,_,_) => (d14,d14,x+d14), //319 +(x,_,_) => (d14,d14,-x+d14), //320 +(x,_,_) => (d14,d14,x+d34), //321 +(_,_,z) => (d14,d14,z), //322 +(_,_,z) => (d14,d14,-z), //323 +(_,_,z) => (d14,d14,z+d12), //324 +(_,_,z) => (d14,d14,-z+d12), //325 +(_,_,z) => (d14,d14,z+d14), //326 +(_,_,z) => (d14,d14,-z+d14), //327 +(_,_,_) => (d14,d18,0), //328 +(_,_,_) => (d14,d34,0), //329 +(_,_,_) => (d14,d34,d12), //330 +(_,_,_) => (d14,d34,d14), //331 +(_,_,_) => (d14,d34,d34), //332 +(x,_,_) => (d14,d34,x), //333 +(x,_,_) => (d14,d34,-x), //334 +(x,_,_) => (d14,d34,x+d12), //335 +(x,_,_) => (d14,d34,-x+d12), //336 +(x,_,_) => (d14,d34,x+d34), //337 +(_,_,z) => (d14,d34,z), //338 +(_,_,z) => (d14,d34,-z), //339 +(_,_,z) => (d14,d34,z+d12), //340 +(_,_,z) => (d14,d34,-z+d12), //341 +(_,_,_) => (d14,d38,0), //342 +(_,_,_) => (d14,d58,0), //343 +(_,_,_) => (d14,d78,0), //344 +(x,_,_) => (d14,x,0), //345 +(x,_,_) => (d14,x,d12), //346 +(x,_,_) => (d14,x,d14), //347 +(x,_,_) => (d14,x,d34), //348 +(x,_,_) => (d14,-x,d34), //349 +(x,_,_) => (d14,-x,d78), //350 +(x,_,_) => (d14,x,-x+d12), //351 +(x,_,_) => (d14,x+d12,0), //352 +(x,_,_) => (d14,-x+d12,0), //353 +(x,_,_) => (d14,-x+d12,d12), //354 +(x,_,_) => (d14,-x+d12,d14), //355 +(x,_,_) => (d14,x+d12,d34), //356 +(x,_,_) => (d14,-x+d12,d34), //357 +(x,_,_) => (d14,x+d12,d38), //358 +(x,_,_) => (d14,-x+d14,0), //359 +(x,_,_) => (d14,x+d14,d12), //360 +(x,_,_) => (d14,x+d14,d14), //361 +(x,_,_) => (d14,-x+d14,d14), //362 +(x,_,_) => (d14,-x+d14,d34), //363 +(x,_,_) => (d14,-x+d34,0), //364 +(x,_,_) => (d14,x+d34,d12), //365 +(x,_,_) => (d14,x+d34,d14), //366 +(_,y,_) => (d14,y,0), //367 +(_,y,_) => (d14,-y,0), //368 +(_,y,_) => (d14,y,d12), //369 +(_,y,_) => (d14,-y,d12), //370 +(_,y,_) => (d14,y,d14), //371 +(_,y,_) => (d14,-y,d14), //372 +(_,y,_) => (d14,y,d18), //373 +(_,y,_) => (d14,y,d34), //374 +(_,y,_) => (d14,-y,d34), //375 +(_,y,_) => (d14,y,y), //376 +(_,y,_) => (d14,y,-y), //377 +(_,y,_) => (d14,-y,y), //378 +(_,y,_) => (d14,-y,-y), //379 +(_,y,_) => (d14,y,y+d12), //380 +(_,y,_) => (d14,y,-y+d12), //381 +(_,y,_) => (d14,-y,y+d12), //382 +(_,y,_) => (d14,-y,-y+d12), //383 +(_,y,z) => (d14,y,z), //384 +(_,y,z) => (d14,y,-z), //385 +(_,y,z) => (d14,-y,z), //386 +(_,y,z) => (d14,-y,-z), //387 +(_,y,z) => (d14,y,-z+d12), //388 +(_,y,z) => (d14,-y,z+d12), //389 +(_,y,_) => (d14,y+d12,0), //390 +(_,y,_) => (d14,-y+d12,0), //391 +(_,y,_) => (d14,y+d12,d12), //392 +(_,y,_) => (d14,-y+d12,d12), //393 +(_,y,_) => (d14,y+d12,d14), //394 +(_,y,_) => (d14,-y+d12,d14), //395 +(_,y,_) => (d14,y+d12,d34), //396 +(_,y,_) => (d14,-y+d12,d34), //397 +(_,y,_) => (d14,-y+d12,d58), //398 +(_,y,_) => (d14,y+d12,y), //399 +(_,y,_) => (d14,y+d12,-y), //400 +(_,y,_) => (d14,-y+d12,y), //401 +(_,y,_) => (d14,-y+d12,-y), //402 +(_,y,_) => (d14,-y+d12,-y+d12), //403 +(_,y,_) => (d14,y+d12,y+d34), //404 +(_,y,z) => (d14,-y+d12,z), //405 +(_,y,z) => (d14,y+d12,-z+d12), //406 +(_,y,z) => (d14,-y+d12,z+d12), //407 +(_,y,_) => (d14,y+d14,d14), //408 +(_,y,_) => (d14,-y+d14,d14), //409 +(_,y,_) => (d14,y+d34,y+d12), //410 +(_,y,_) => (d14,y+d34,-y+d14), //411 +(_,_,_) => (d18,0,d14), //412 +(_,_,_) => (d18,0,d34), //413 +(_,_,_) => (d18,d12,d14), //414 +(_,_,_) => (d18,d18,d18), //415 +(_,_,_) => (d18,d18,d58), //416 +(_,_,_) => (d18,d18,d78), //417 +(x,_,_) => (d18,d18,x), //418 +(x,_,_) => (d18,d18,-x+d14), //419 +(_,_,z) => (d18,d18,z), //420 +(_,_,_) => (d18,d38,d58), //421 +(_,_,_) => (d18,d38,d78), //422 +(_,_,_) => (d18,d58,d18), //423 +(_,_,_) => (d18,d58,d38), //424 +(_,_,_) => (d18,d58,d78), //425 +(x,_,_) => (d18,d58,x), //426 +(x,_,_) => (d18,d58,-x+d34), //427 +(_,_,_) => (d18,d78,d18), //428 +(_,_,_) => (d18,d78,d38), //429 +(_,_,_) => (d18,d78,d58), //430 +(_,_,_) => (d18,d78,d78), //431 +(x,_,_) => (d18,x,d18), //432 +(x,_,_) => (d18,-x+d14,d18), //433 +(x,_,_) => (d18,-x+d34,d18), //434 +(_,y,_) => (d18,y,d18), //435 +(_,y,_) => (d18,y,y+d14), //436 +(_,y,_) => (d18,y,-y+d14), //437 +(_,y,_) => (d18,-y+d12,-y+d34), //438 +(_,y,_) => (d18,-y+d14,y), //439 +(_,y,_) => (d18,y+d34,-y+d12), //440 +(x,_,_) => (2*x,x,0), //441 +(x,_,_) => (-2*x,-x,0), //442 +(x,_,_) => (2*x,x,d1_12), //443 +(x,_,_) => (2*x,x,d12), //444 +(x,_,_) => (-2*x,-x,d12), //445 +(x,_,_) => (2*x,x,d13), //446 +(x,_,_) => (-2*x,-x,d13), //447 +(x,_,_) => (2*x,x,d14), //448 +(x,_,_) => (-2*x,-x,d14), //449 +(x,_,_) => (2*x,x,d16), //450 +(x,_,_) => (-2*x,-x,d16), //451 +(x,_,_) => (2*x,x,d11_12), //452 +(x,_,_) => (2*x,x,d23), //453 +(x,_,_) => (-2*x,-x,d23), //454 +(x,_,_) => (2*x,x,d34), //455 +(x,_,_) => (-2*x,-x,d34), //456 +(x,_,_) => (-2*x,-x,d5_12), //457 +(x,_,_) => (2*x,x,d56), //458 +(x,_,_) => (-2*x,-x,d56), //459 +(x,_,_) => (-2*x,-x,d7_12), //460 +(x,_,z) => (2*x,x,z), //461 +(x,_,z) => (2*x,x,-z), //462 +(x,_,z) => (-2*x,-x,z), //463 +(x,_,z) => (-2*x,-x,-z), //464 +(x,_,z) => (2*x,x,z+d12), //465 +(x,_,z) => (-2*x,-x,-z+d12), //466 +(_,_,_) => (d23,d13,0), //467 +(_,_,_) => (d23,d13,d12), //468 +(_,_,_) => (d23,d13,d14), //469 +(_,_,_) => (d23,d13,d34), //470 +(_,_,z) => (d23,d13,z), //471 +(_,_,z) => (d23,d13,-z), //472 +(_,_,z) => (d23,d13,z+d12), //473 +(_,_,z) => (d23,d13,-z+d12), //474 +(_,_,_) => (d34,0,0), //475 +(_,_,_) => (d34,0,d12), //476 +(_,_,_) => (d34,0,d14), //477 +(_,_,_) => (d34,0,d34), //478 +(_,_,_) => (d34,0,d38), //479 +(_,_,_) => (d34,0,d78), //480 +(_,_,z) => (d34,0,z), //481 +(_,_,z) => (d34,0,-z), //482 +(_,_,z) => (d34,0,z+d12), //483 +(_,_,z) => (d34,0,-z+d12), //484 +(_,_,_) => (d34,d12,0), //485 +(_,_,_) => (d34,d12,d12), //486 +(_,_,_) => (d34,d12,d14), //487 +(_,_,_) => (d34,d12,d34), //488 +(_,_,_) => (d34,d12,d38), //489 +(_,_,_) => (d34,d12,d78), //490 +(_,_,z) => (d34,d12,z), //491 +(_,_,z) => (d34,d12,-z), //492 +(_,_,z) => (d34,d12,z+d12), //493 +(_,_,z) => (d34,d12,-z+d12), //494 +(_,_,_) => (d34,d14,0), //495 +(_,_,_) => (d34,d14,d12), //496 +(_,_,_) => (d34,d14,d14), //497 +(_,_,_) => (d34,d14,d34), //498 +(x,_,_) => (d34,d14,x), //499 +(x,_,_) => (d34,d14,-x), //500 +(x,_,_) => (d34,d14,x+d12), //501 +(x,_,_) => (d34,d14,-x+d12), //502 +(x,_,_) => (d34,d14,-x+d34), //503 +(_,_,z) => (d34,d14,z), //504 +(_,_,z) => (d34,d14,-z), //505 +(_,_,z) => (d34,d14,z+d12), //506 +(_,_,z) => (d34,d14,-z+d12), //507 +(_,_,_) => (d34,d18,0), //508 +(_,_,_) => (d34,d34,0), //509 +(_,_,_) => (d34,d34,d12), //510 +(_,_,_) => (d34,d34,d14), //511 +(_,_,_) => (d34,d34,d34), //512 +(x,_,_) => (d34,d34,-x), //513 +(x,_,_) => (d34,d34,x+d12), //514 +(x,_,_) => (d34,d34,-x+d34), //515 +(_,_,z) => (d34,d34,z), //516 +(_,_,z) => (d34,d34,-z), //517 +(_,_,z) => (d34,d34,z+d12), //518 +(_,_,z) => (d34,d34,-z+d12), //519 +(_,_,_) => (d34,d38,0), //520 +(_,_,_) => (d34,d38,d12), //521 +(_,_,_) => (d34,d58,0), //522 +(_,_,_) => (d34,d78,0), //523 +(x,_,_) => (d34,-x,0), //524 +(x,_,_) => (d34,-x,d12), //525 +(x,_,_) => (d34,x,d14), //526 +(x,_,_) => (d34,-x,d14), //527 +(x,_,_) => (d34,-x,d34), //528 +(x,_,_) => (d34,x,d78), //529 +(x,_,_) => (d34,-x,d78), //530 +(x,_,_) => (d34,-x,x+d12), //531 +(x,_,_) => (d34,x+d12,0), //532 +(x,_,_) => (d34,-x+d12,0), //533 +(x,_,_) => (d34,x+d12,d12), //534 +(x,_,_) => (d34,x+d12,d14), //535 +(x,_,_) => (d34,-x+d12,d14), //536 +(x,_,_) => (d34,x+d12,d34), //537 +(x,_,_) => (d34,x+d12,d38), //538 +(x,_,_) => (d34,x+d14,0), //539 +(x,_,_) => (d34,-x+d14,d12), //540 +(x,_,_) => (d34,x+d14,d34), //541 +(x,_,_) => (d34,-x+d14,d34), //542 +(x,_,_) => (d34,x+d34,0), //543 +(x,_,_) => (d34,-x+d34,d12), //544 +(x,_,_) => (d34,x+d34,d14), //545 +(x,_,_) => (d34,-x+d34,d34), //546 +(_,y,_) => (d34,y,0), //547 +(_,y,_) => (d34,-y,0), //548 +(_,y,_) => (d34,y,d12), //549 +(_,y,_) => (d34,-y,d12), //550 +(_,y,_) => (d34,y,d14), //551 +(_,y,_) => (d34,-y,d14), //552 +(_,y,_) => (d34,y,d34), //553 +(_,y,_) => (d34,-y,d34), //554 +(_,y,_) => (d34,y,d58), //555 +(_,y,_) => (d34,y,y), //556 +(_,y,_) => (d34,y,-y), //557 +(_,y,_) => (d34,-y,y), //558 +(_,y,_) => (d34,-y,-y), //559 +(_,y,_) => (d34,y,y+d12), //560 +(_,y,_) => (d34,y,-y+d12), //561 +(_,y,_) => (d34,-y,y+d12), //562 +(_,y,_) => (d34,-y,-y+d12), //563 +(_,y,z) => (d34,y,z), //564 +(_,y,z) => (d34,y,-z), //565 +(_,y,z) => (d34,-y,z), //566 +(_,y,z) => (d34,-y,-z), //567 +(_,y,z) => (d34,y,-z+d12), //568 +(_,y,z) => (d34,-y,z+d12), //569 +(_,y,_) => (d34,y+d12,0), //570 +(_,y,_) => (d34,-y+d12,0), //571 +(_,y,_) => (d34,y+d12,d12), //572 +(_,y,_) => (d34,-y+d12,d12), //573 +(_,y,_) => (d34,y+d12,d14), //574 +(_,y,_) => (d34,-y+d12,d14), //575 +(_,y,_) => (d34,-y+d12,d18), //576 +(_,y,_) => (d34,y+d12,d34), //577 +(_,y,_) => (d34,-y+d12,d34), //578 +(_,y,_) => (d34,y+d12,y), //579 +(_,y,_) => (d34,y+d12,-y), //580 +(_,y,_) => (d34,-y+d12,y), //581 +(_,y,_) => (d34,-y+d12,-y), //582 +(_,y,_) => (d34,y+d12,y+d12), //583 +(_,y,_) => (d34,-y+d12,-y+d14), //584 +(_,y,z) => (d34,y+d12,-z), //585 +(_,y,z) => (d34,y+d12,-z+d12), //586 +(_,y,z) => (d34,-y+d12,z+d12), //587 +(_,y,_) => (d34,-y+d14,-y+d12), //588 +(_,y,_) => (d34,-y+d14,y+d34), //589 +(_,_,_) => (d38,0,d14), //590 +(_,_,_) => (d38,0,d34), //591 +(_,_,_) => (d38,d18,d58), //592 +(_,_,_) => (d38,d18,d78), //593 +(_,_,_) => (d38,d38,d38), //594 +(_,_,_) => (d38,d38,d58), //595 +(x,_,_) => (d38,d38,x+d34), //596 +(_,_,_) => (d38,d58,d18), //597 +(_,_,_) => (d38,d58,d38), //598 +(_,_,_) => (d38,d58,d58), //599 +(_,_,_) => (d38,d58,d78), //600 +(_,_,_) => (d38,d78,d18), //601 +(_,_,_) => (d38,d78,d58), //602 +(x,_,_) => (d38,d78,x+d34), //603 +(_,_,z) => (d38,d78,z+d14), //604 +(x,_,_) => (d38,-x+d12,d38), //605 +(x,_,_) => (d38,x+d34,d38), //606 +(_,y,_) => (d38,-y,y+d34), //607 +(_,y,_) => (d38,-y,-y+d34), //608 +(_,y,_) => (d38,y+d12,-y+d14), //609 +(_,y,_) => (d38,y+d12,y+d34), //610 +(_,y,_) => (d38,y+d14,d78), //611 +(_,y,_) => (d38,-y+d14,-y), //612 +(_,y,_) => (d38,y+d34,y+d12), //613 +(_,_,_) => (d58,0,d14), //614 +(_,_,_) => (d58,0,d34), //615 +(_,_,_) => (d58,d18,d38), //616 +(_,_,_) => (d58,d18,d78), //617 +(x,_,_) => (d58,d18,-x+d14), //618 +(_,_,z) => (d58,d18,-z+d34), //619 +(_,_,_) => (d58,d38,d18), //620 +(_,_,_) => (d58,d38,d38), //621 +(_,_,_) => (d58,d38,d58), //622 +(_,_,_) => (d58,d38,d78), //623 +(_,_,_) => (d58,d58,d38), //624 +(_,_,_) => (d58,d58,d58), //625 +(x,_,_) => (d58,d58,-x+d14), //626 +(_,_,_) => (d58,d78,d18), //627 +(_,_,_) => (d58,d78,d38), //628 +(x,_,_) => (d58,x+d12,d58), //629 +(x,_,_) => (d58,-x+d14,d58), //630 +(x,_,_) => (d58,-x+d34,d18), //631 +(_,y,_) => (d58,y,y+d14), //632 +(_,y,_) => (d58,-y,y+d14), //633 +(_,y,_) => (d58,-y+d12,y+d34), //634 +(_,y,_) => (d58,-y+d12,-y+d34), //635 +(_,y,_) => (d58,y+d14,-y), //636 +(_,y,_) => (d58,-y+d34,d18), //637 +(_,y,_) => (d58,-y+d34,y+d12), //638 +(_,_,_) => (d78,0,d14), //639 +(_,_,_) => (d78,0,d34), //640 +(_,_,_) => (d78,d18,d18), //641 +(_,_,_) => (d78,d18,d38), //642 +(_,_,_) => (d78,d18,d58), //643 +(_,_,_) => (d78,d18,d78), //644 +(_,_,_) => (d78,d38,d18), //645 +(_,_,_) => (d78,d38,d38), //646 +(_,_,_) => (d78,d38,d58), //647 +(_,_,_) => (d78,d38,d78), //648 +(x,_,_) => (d78,d38,-x), //649 +(x,_,_) => (d78,d38,-x+d12), //650 +(_,_,_) => (d78,d58,d18), //651 +(_,_,_) => (d78,d58,d38), //652 +(_,_,_) => (d78,d78,d18), //653 +(_,_,_) => (d78,d78,d38), //654 +(_,_,_) => (d78,d78,d78), //655 +(x,_,_) => (d78,d78,-x), //656 +(x,_,_) => (d78,d78,x+d34), //657 +(_,_,z) => (d78,d78,-z), //658 +(x,_,_) => (d78,-x,d78), //659 +(x,_,_) => (d78,x+d14,d38), //660 +(x,_,_) => (d78,x+d14,d78), //661 +(x,_,_) => (d78,x+d34,d78), //662 +(_,y,_) => (d78,-y,d78), //663 +(_,y,_) => (d78,-y,y+d34), //664 +(_,y,_) => (d78,y+d12,y+d14), //665 +(_,y,_) => (d78,y+d12,-y+d14), //666 +(_,y,_) => (d78,-y+d12,-y+d34), //667 +(_,y,_) => (d78,y+d14,y), //668 +(_,y,_) => (d78,-y+d34,-y+d12), //669 +(x,_,_) => (x,0,0), //670 +(x,_,_) => (-x,0,0), //671 +(x,_,_) => (x,0,d12), //672 +(x,_,_) => (-x,0,d12), //673 +(x,_,_) => (x,0,d13), //674 +(x,_,_) => (x,0,d14), //675 +(x,_,_) => (-x,0,d14), //676 +(x,_,_) => (x,0,d16), //677 +(x,_,_) => (x,0,d23), //678 +(x,_,_) => (x,0,d34), //679 +(x,_,_) => (-x,0,d34), //680 +(x,_,_) => (x,0,d56), //681 +(x,_,_) => (x,0,-x), //682 +(x,_,_) => (-x,0,x), //683 +(x,_,z) => (x,0,z), //684 +(x,_,z) => (x,0,-z), //685 +(x,_,z) => (-x,0,z), //686 +(x,_,z) => (-x,0,-z), //687 +(x,_,z) => (x,0,-z+d12), //688 +(x,_,z) => (-x,0,z+d12), //689 +(x,_,_) => (x,d12,0), //690 +(x,_,_) => (-x,d12,0), //691 +(x,_,_) => (x,d12,d12), //692 +(x,_,_) => (-x,d12,d12), //693 +(x,_,_) => (x,d12,d14), //694 +(x,_,_) => (-x,d12,d14), //695 +(x,_,_) => (x,d12,d34), //696 +(x,_,_) => (-x,d12,d34), //697 +(x,_,_) => (x,d12,-x), //698 +(x,_,_) => (-x,d12,x), //699 +(x,_,z) => (x,d12,z), //700 +(x,_,z) => (x,d12,-z), //701 +(x,_,z) => (-x,d12,z), //702 +(x,_,z) => (-x,d12,-z), //703 +(x,_,z) => (x,d12,-z+d12), //704 +(x,_,z) => (-x,d12,z+d12), //705 +(x,_,z) => (-x,d12,-z+d12), //706 +(x,_,_) => (x,d14,0), //707 +(x,_,_) => (-x,d14,0), //708 +(x,_,_) => (x,d14,d12), //709 +(x,_,_) => (-x,d14,d12), //710 +(x,_,_) => (x,d14,d14), //711 +(x,_,_) => (-x,d14,d14), //712 +(x,_,_) => (x,d14,d18), //713 +(x,_,_) => (-x,d14,d18), //714 +(x,_,_) => (x,d14,d34), //715 +(x,_,_) => (-x,d14,d34), //716 +(x,_,z) => (x,d14,z), //717 +(x,_,z) => (x,d14,-z), //718 +(x,_,z) => (-x,d14,z), //719 +(x,_,z) => (-x,d14,-z), //720 +(x,_,z) => (x,d14,-z+d12), //721 +(x,_,_) => (x,d18,d18), //722 +(x,_,_) => (x,d18,d58), //723 +(x,_,_) => (x,2*x,0), //724 +(x,_,_) => (-x,-2*x,0), //725 +(x,_,_) => (x,2*x,d12), //726 +(x,_,_) => (-x,-2*x,d12), //727 +(x,_,_) => (x,2*x,d13), //728 +(x,_,_) => (x,2*x,d14), //729 +(x,_,_) => (-x,-2*x,d14), //730 +(x,_,_) => (x,2*x,d16), //731 +(x,_,_) => (x,2*x,d23), //732 +(x,_,_) => (x,2*x,d34), //733 +(x,_,_) => (-x,-2*x,d34), //734 +(x,_,_) => (x,2*x,d56), //735 +(x,_,z) => (x,2*x,z), //736 +(x,_,z) => (x,2*x,-z), //737 +(x,_,z) => (-x,-2*x,z), //738 +(x,_,z) => (-x,-2*x,-z), //739 +(x,_,z) => (x,2*x,-z+d12), //740 +(x,_,z) => (-x,-2*x,z+d12), //741 +(x,_,_) => (x,d34,0), //742 +(x,_,_) => (-x,d34,0), //743 +(x,_,_) => (x,d34,d12), //744 +(x,_,_) => (-x,d34,d12), //745 +(x,_,_) => (x,d34,d14), //746 +(x,_,_) => (-x,d34,d14), //747 +(x,_,_) => (-x,d34,d18), //748 +(x,_,_) => (x,d34,d34), //749 +(x,_,_) => (-x,d34,d34), //750 +(x,_,z) => (x,d34,z), //751 +(x,_,z) => (x,d34,-z), //752 +(x,_,z) => (-x,d34,z), //753 +(x,_,z) => (-x,d34,-z), //754 +(x,_,z) => (-x,d34,z+d12), //755 +(x,_,_) => (-x,d78,d38), //756 +(x,_,_) => (-x,d78,d78), //757 +(x,_,_) => (x,x,0), //758 +(x,_,_) => (x,-x,0), //759 +(x,_,_) => (-x,x,0), //760 +(x,_,_) => (-x,-x,0), //761 +(x,_,_) => (x,-x,d1_12), //762 +(x,_,_) => (x,x,d12), //763 +(x,_,_) => (x,-x,d12), //764 +(x,_,_) => (-x,x,d12), //765 +(x,_,_) => (-x,-x,d12), //766 +(x,_,_) => (x,x,d13), //767 +(x,_,_) => (x,-x,d13), //768 +(x,_,_) => (-x,x,d13), //769 +(x,_,_) => (-x,-x,d13), //770 +(x,_,_) => (x,x,d14), //771 +(x,_,_) => (x,-x,d14), //772 +(x,_,_) => (-x,x,d14), //773 +(x,_,_) => (-x,-x,d14), //774 +(x,_,_) => (x,x,d16), //775 +(x,_,_) => (x,-x,d16), //776 +(x,_,_) => (-x,x,d16), //777 +(x,_,_) => (-x,-x,d16), //778 +(x,_,_) => (x,-x,d18), //779 +(x,_,_) => (-x,-x,d18), //780 +(x,_,_) => (x,-x,d11_12), //781 +(x,_,_) => (x,x,d23), //782 +(x,_,_) => (x,-x,d23), //783 +(x,_,_) => (-x,x,d23), //784 +(x,_,_) => (-x,-x,d23), //785 +(x,_,_) => (x,x,d34), //786 +(x,_,_) => (x,-x,d34), //787 +(x,_,_) => (-x,x,d34), //788 +(x,_,_) => (-x,-x,d34), //789 +(x,_,_) => (x,x,d38), //790 +(x,_,_) => (-x,x,d38), //791 +(x,_,_) => (-x,x,d5_12), //792 +(x,_,_) => (x,x,d56), //793 +(x,_,_) => (x,-x,d56), //794 +(x,_,_) => (-x,x,d56), //795 +(x,_,_) => (-x,-x,d56), //796 +(x,_,_) => (x,x,d58), //797 +(x,_,_) => (-x,x,d58), //798 +(x,_,_) => (-x,x,d7_12), //799 +(x,_,_) => (x,-x,d78), //800 +(x,_,_) => (-x,-x,d78), //801 +(x,_,_) => (x,x,x), //802 +(x,_,_) => (x,x,-x), //803 +(x,_,_) => (x,-x,x), //804 +(x,_,_) => (x,-x,-x), //805 +(x,_,_) => (-x,x,x), //806 +(x,_,_) => (-x,x,-x), //807 +(x,_,_) => (-x,-x,x), //808 +(x,_,_) => (-x,-x,-x), //809 +(x,_,_) => (x,x,-x+d12), //810 +(x,_,_) => (x,-x,-x+d12), //811 +(x,_,_) => (-x,-x,x+d12), //812 +(x,_,z) => (x,x,z), //813 +(x,_,z) => (x,x,-z), //814 +(x,_,z) => (x,-x,z), //815 +(x,_,z) => (x,-x,-z), //816 +(x,_,z) => (-x,x,z), //817 +(x,_,z) => (-x,x,-z), //818 +(x,_,z) => (-x,-x,z), //819 +(x,_,z) => (-x,-x,-z), //820 +(x,_,z) => (x,x,z+d12), //821 +(x,_,z) => (x,-x,z+d12), //822 +(x,_,z) => (x,-x,-z+d12), //823 +(x,_,z) => (-x,x,z+d12), //824 +(x,_,z) => (-x,x,-z+d12), //825 +(x,_,z) => (-x,-x,-z+d12), //826 +(x,_,_) => (x,x+d12,0), //827 +(x,_,_) => (x,-x+d12,0), //828 +(x,_,_) => (-x,x+d12,0), //829 +(x,_,_) => (-x,-x+d12,0), //830 +(x,_,_) => (x,x+d12,d12), //831 +(x,_,_) => (x,-x+d12,d12), //832 +(x,_,_) => (-x,x+d12,d12), //833 +(x,_,_) => (-x,-x+d12,d12), //834 +(x,_,_) => (x,x+d12,d14), //835 +(x,_,_) => (x,-x+d12,d14), //836 +(x,_,_) => (-x,x+d12,d14), //837 +(x,_,_) => (-x,-x+d12,d14), //838 +(x,_,_) => (x,x+d12,d34), //839 +(x,_,_) => (x,-x+d12,d34), //840 +(x,_,_) => (-x,x+d12,d34), //841 +(x,_,_) => (-x,-x+d12,d34), //842 +(x,_,_) => (x,-x+d12,x), //843 +(x,_,_) => (-x,x+d12,-x), //844 +(x,_,_) => (-x,-x+d12,x), //845 +(x,_,_) => (x,-x+d12,x+d12), //846 +(x,_,_) => (x,-x+d12,-x+d12), //847 +(x,_,_) => (-x,x+d12,x+d12), //848 +(x,_,_) => (-x,x+d12,-x+d12), //849 +(x,_,_) => (-x,-x+d12,x+d12), //850 +(x,_,z) => (x,x+d12,z), //851 +(x,_,z) => (x,x+d12,-z), //852 +(x,_,z) => (x,-x+d12,z), //853 +(x,_,z) => (x,-x+d12,-z), //854 +(x,_,z) => (-x,x+d12,z), //855 +(x,_,z) => (-x,x+d12,-z), //856 +(x,_,z) => (-x,-x+d12,z), //857 +(x,_,z) => (-x,-x+d12,-z), //858 +(x,_,z) => (x,x+d12,-z+d12), //859 +(x,_,z) => (x,-x+d12,z+d12), //860 +(x,_,z) => (x,-x+d12,-z+d12), //861 +(x,_,z) => (-x,x+d12,z+d12), //862 +(x,_,z) => (-x,x+d12,-z+d12), //863 +(x,_,z) => (-x,-x+d12,z+d12), //864 +(x,_,_) => (x,x+d14,d18), //865 +(x,_,_) => (x,-x+d14,d58), //866 +(x,_,_) => (x,x+d14,d78), //867 +(x,_,_) => (x,-x+d14,d78), //868 +(x,_,_) => (x,-x+d14,-x+d14), //869 +(x,_,_) => (x,-x+d14,-x+d34), //870 +(x,_,_) => (-x,x+d34,d18), //871 +(x,_,_) => (-x,-x+d34,d18), //872 +(x,_,_) => (-x,x+d34,d38), //873 +(x,_,_) => (-x,-x+d34,d78), //874 +(x,_,_) => (-x,x+d34,x+d14), //875 +(x,_,_) => (-x,x+d34,x+d34), //876 +(x,y,_) => (-x,-x+y,0), //877 +(x,y,_) => (-x,-x+y,d12), //878 +(x,y,_) => (-x,-x+y,d14), //879 +(x,y,_) => (-x,-x+y,d34), //880 +(x,y,z) => (-x,-x+y,z), //881 +(x,y,z) => (-x,-x+y,-z), //882 +(x,y,z) => (-x,-x+y,z+d12), //883 +(x,y,z) => (-x,-x+y,-z+d12), //884 +(x,y,z) => (-x,-x+y,-z+d13), //885 +(x,y,z) => (-x,-x+y,-z+d23), //886 +(x,y,_) => (x,x-y,0), //887 +(x,y,_) => (x,x-y,d12), //888 +(x,y,_) => (x,x-y,d14), //889 +(x,y,_) => (x,x-y,d34), //890 +(x,y,z) => (x,x-y,z), //891 +(x,y,z) => (x,x-y,-z), //892 +(x,y,z) => (x,x-y,z+d12), //893 +(x,y,z) => (x,x-y,-z+d12), //894 +(x,y,z) => (x,x-y,-z+d13), //895 +(x,y,z) => (x,x-y,-z+d16), //896 +(x,y,z) => (x,x-y,-z+d23), //897 +(x,y,z) => (x,x-y,-z+d56), //898 +(x,y,_) => (x,y,0), //899 +(x,y,_) => (x,-y,0), //900 +(x,y,_) => (-x,y,0), //901 +(x,y,_) => (-x,-y,0), //902 +(x,y,_) => (x,y,d12), //903 +(x,y,_) => (x,-y,d12), //904 +(x,y,_) => (-x,y,d12), //905 +(x,y,_) => (-x,-y,d12), //906 +(x,y,_) => (x,y,d14), //907 +(x,y,_) => (x,-y,d14), //908 +(x,y,_) => (-x,y,d14), //909 +(x,y,_) => (-x,-y,d14), //910 +(x,y,_) => (x,y,d34), //911 +(x,y,_) => (x,-y,d34), //912 +(x,y,_) => (-x,y,d34), //913 +(x,y,_) => (-x,-y,d34), //914 +(x,y,z) => (x,y,z), //915 +(x,y,z) => (x,y,-z), //916 +(x,y,z) => (x,-y,z), //917 +(x,y,z) => (x,-y,-z), //918 +(x,y,z) => (-x,y,z), //919 +(x,y,z) => (-x,y,-z), //920 +(x,y,z) => (-x,-y,z), //921 +(x,y,z) => (-x,-y,-z), //922 +(x,y,z) => (x,y,-z+d12), //923 +(x,y,z) => (x,-y,z+d12), //924 +(x,y,z) => (x,-y,-z+d12), //925 +(x,y,z) => (-x,y,z+d12), //926 +(x,y,z) => (-x,y,-z+d12), //927 +(x,y,z) => (-x,-y,z+d12), //928 +(x,y,_) => (x,-y+d12,0), //929 +(x,y,_) => (-x,y+d12,0), //930 +(x,y,_) => (x,-y+d12,d12), //931 +(x,y,_) => (-x,y+d12,d12), //932 +(x,y,_) => (-x,-y+d12,d12), //933 +(x,y,_) => (x,-y+d12,d14), //934 +(x,y,_) => (-x,y+d12,d14), //935 +(x,y,_) => (x,-y+d12,d34), //936 +(x,y,_) => (-x,y+d12,d34), //937 +(x,y,z) => (x,y+d12,-z), //938 +(x,y,z) => (x,-y+d12,z), //939 +(x,y,z) => (x,-y+d12,-z), //940 +(x,y,z) => (-x,y+d12,z), //941 +(x,y,z) => (-x,y+d12,-z), //942 +(x,y,z) => (-x,-y+d12,z), //943 +(x,y,z) => (x,y+d12,-z+d12), //944 +(x,y,z) => (x,-y+d12,z+d12), //945 +(x,y,z) => (x,-y+d12,-z+d12), //946 +(x,y,z) => (-x,y+d12,z+d12), //947 +(x,y,z) => (-x,y+d12,-z+d12), //948 +(x,y,z) => (-x,-y+d12,z+d12), //949 +(x,y,z) => (-x,-y+d12,-z+d12), //950 +(x,y,z) => (x,-y+d12,-z+d14), //951 +(x,y,z) => (-x,-y+d12,-z+d14), //952 +(x,y,z) => (x,-y+d12,-z+d34), //953 +(x,y,z) => (x,-y+d14,-z+d14), //954 +(x,y,z) => (-x,y+d14,z+d14), //955 +(x,y,z) => (x,-y+d34,-z+d34), //956 +(x,y,z) => (-x,y+d34,z+d34), //957 +(x,_,z) => (x,z,x), //958 +(x,_,z) => (x,z,-x), //959 +(x,_,z) => (x,-z,x), //960 +(x,_,z) => (x,-z,-x), //961 +(x,_,z) => (-x,z,x), //962 +(x,_,z) => (-x,z,-x), //963 +(x,_,z) => (-x,-z,x), //964 +(x,_,z) => (-x,-z,-x), //965 +(x,y,z) => (x,z,y), //966 +(x,y,z) => (x,z,-y), //967 +(x,y,z) => (x,-z,y), //968 +(x,y,z) => (x,-z,-y), //969 +(x,y,z) => (-x,z,y), //970 +(x,y,z) => (-x,z,-y), //971 +(x,y,z) => (-x,-z,y), //972 +(x,y,z) => (-x,-z,-y), //973 +(x,y,z) => (x,z,-y+d12), //974 +(x,y,z) => (x,-z,-y+d12), //975 +(x,y,z) => (-x,-z,y+d12), //976 +(x,_,z) => (x,-z+d12,-x+d12), //977 +(x,_,z) => (-x,z+d12,x+d12), //978 +(x,_,z) => (-x,-z+d12,x+d12), //979 +(x,y,z) => (x,-z+d12,y), //980 +(x,y,z) => (-x,z+d12,-y), //981 +(x,y,z) => (-x,-z+d12,y), //982 +(x,y,z) => (x,-z+d12,-y+d12), //983 +(x,y,z) => (-x,z+d12,y+d12), //984 +(x,y,z) => (-x,z+d12,-y+d12), //985 +(x,y,z) => (x,-z+d14,-y+d34), //986 +(x,y,z) => (-x,z+d34,y+d14), //987 +(x,_,_) => (x+d12,0,0), //988 +(x,_,_) => (-x+d12,0,0), //989 +(x,_,_) => (x+d12,0,d12), //990 +(x,_,_) => (-x+d12,0,d12), //991 +(x,_,_) => (x+d12,0,d14), //992 +(x,_,_) => (-x+d12,0,d14), //993 +(x,_,_) => (x+d12,0,d34), //994 +(x,_,_) => (-x+d12,0,d34), //995 +(x,_,z) => (x+d12,0,-z), //996 +(x,_,z) => (-x+d12,0,z), //997 +(x,_,z) => (x+d12,0,-z+d12), //998 +(x,_,z) => (-x+d12,0,z+d12), //999 +(x,_,_) => (x+d12,d12,0), //1000 +(x,_,_) => (-x+d12,d12,0), //1001 +(x,_,_) => (x+d12,d12,d12), //1002 +(x,_,_) => (-x+d12,d12,d12), //1003 +(x,_,_) => (x+d12,d12,d14), //1004 +(x,_,_) => (-x+d12,d12,d14), //1005 +(x,_,_) => (x+d12,d12,d34), //1006 +(x,_,_) => (-x+d12,d12,d34), //1007 +(x,_,z) => (x+d12,d12,-z), //1008 +(x,_,z) => (-x+d12,d12,z), //1009 +(x,_,z) => (-x+d12,d12,-z), //1010 +(x,_,z) => (x+d12,d12,-z+d12), //1011 +(x,_,z) => (-x+d12,d12,z+d12), //1012 +(x,_,_) => (x+d12,d14,0), //1013 +(x,_,_) => (-x+d12,d14,0), //1014 +(x,_,_) => (x+d12,d14,d12), //1015 +(x,_,_) => (-x+d12,d14,d12), //1016 +(x,_,_) => (x+d12,d14,d14), //1017 +(x,_,_) => (-x+d12,d14,d14), //1018 +(x,_,_) => (x+d12,d14,d34), //1019 +(x,_,_) => (-x+d12,d14,d34), //1020 +(x,_,_) => (x+d12,d14,d58), //1021 +(x,_,_) => (-x+d12,d14,d58), //1022 +(x,_,_) => (-x+d12,d14,x), //1023 +(x,_,z) => (x+d12,d14,-z), //1024 +(x,_,z) => (-x+d12,d14,z), //1025 +(x,_,z) => (x+d12,d14,-z+d12), //1026 +(x,_,z) => (-x+d12,d14,z+d12), //1027 +(x,_,_) => (x+d12,d34,0), //1028 +(x,_,_) => (-x+d12,d34,0), //1029 +(x,_,_) => (x+d12,d34,d12), //1030 +(x,_,_) => (-x+d12,d34,d12), //1031 +(x,_,_) => (x+d12,d34,d14), //1032 +(x,_,_) => (-x+d12,d34,d14), //1033 +(x,_,_) => (x+d12,d34,d34), //1034 +(x,_,_) => (-x+d12,d34,d34), //1035 +(x,_,_) => (x+d12,d34,-x), //1036 +(x,_,z) => (x+d12,d34,-z), //1037 +(x,_,z) => (-x+d12,d34,z), //1038 +(x,_,z) => (x+d12,d34,-z+d12), //1039 +(x,_,z) => (-x+d12,d34,z+d12), //1040 +(x,_,_) => (-x+d12,d78,d38), //1041 +(x,_,_) => (x+d12,x,0), //1042 +(x,_,_) => (x+d12,-x,0), //1043 +(x,_,_) => (-x+d12,x,0), //1044 +(x,_,_) => (-x+d12,-x,0), //1045 +(x,_,_) => (x+d12,x,d12), //1046 +(x,_,_) => (x+d12,-x,d12), //1047 +(x,_,_) => (-x+d12,x,d12), //1048 +(x,_,_) => (-x+d12,-x,d12), //1049 +(x,_,_) => (x+d12,x,d14), //1050 +(x,_,_) => (x+d12,-x,d14), //1051 +(x,_,_) => (-x+d12,x,d14), //1052 +(x,_,_) => (-x+d12,-x,d14), //1053 +(x,_,_) => (x+d12,x,d34), //1054 +(x,_,_) => (x+d12,-x,d34), //1055 +(x,_,_) => (-x+d12,x,d34), //1056 +(x,_,_) => (-x+d12,-x,d34), //1057 +(x,_,_) => (x+d12,-x,-x), //1058 +(x,_,_) => (-x+d12,x,x), //1059 +(x,_,_) => (-x+d12,x,-x), //1060 +(x,_,_) => (x+d12,x,-x+d12), //1061 +(x,_,_) => (x+d12,-x,x+d12), //1062 +(x,_,_) => (x+d12,-x,-x+d12), //1063 +(x,_,_) => (-x+d12,x,-x+d12), //1064 +(x,_,_) => (-x+d12,-x,x+d12), //1065 +(x,_,z) => (x+d12,x,z), //1066 +(x,_,z) => (x+d12,x,-z), //1067 +(x,_,z) => (x+d12,-x,z), //1068 +(x,_,z) => (x+d12,-x,-z), //1069 +(x,_,z) => (-x+d12,x,z), //1070 +(x,_,z) => (-x+d12,x,-z), //1071 +(x,_,z) => (-x+d12,-x,-z), //1072 +(x,_,z) => (x+d12,x,z+d12), //1073 +(x,_,z) => (x+d12,x,-z+d12), //1074 +(x,_,z) => (x+d12,-x,z+d12), //1075 +(x,_,z) => (x+d12,-x,-z+d12), //1076 +(x,_,z) => (-x+d12,x,z+d12), //1077 +(x,_,z) => (-x+d12,x,-z+d12), //1078 +(x,_,z) => (-x+d12,-x,-z+d12), //1079 +(x,_,_) => (x+d12,x+d12,0), //1080 +(x,_,_) => (x+d12,-x+d12,0), //1081 +(x,_,_) => (-x+d12,x+d12,0), //1082 +(x,_,_) => (-x+d12,-x+d12,0), //1083 +(x,_,_) => (x+d12,x+d12,d12), //1084 +(x,_,_) => (x+d12,-x+d12,d12), //1085 +(x,_,_) => (-x+d12,x+d12,d12), //1086 +(x,_,_) => (-x+d12,-x+d12,d12), //1087 +(x,_,_) => (x+d12,x+d12,d14), //1088 +(x,_,_) => (x+d12,-x+d12,d14), //1089 +(x,_,_) => (-x+d12,x+d12,d14), //1090 +(x,_,_) => (-x+d12,-x+d12,d14), //1091 +(x,_,_) => (x+d12,x+d12,d34), //1092 +(x,_,_) => (x+d12,-x+d12,d34), //1093 +(x,_,_) => (-x+d12,x+d12,d34), //1094 +(x,_,_) => (-x+d12,-x+d12,d34), //1095 +(x,_,_) => (x+d12,x+d12,-x), //1096 +(x,_,_) => (x+d12,-x+d12,-x), //1097 +(x,_,_) => (-x+d12,x+d12,x), //1098 +(x,_,_) => (-x+d12,x+d12,-x), //1099 +(x,_,_) => (-x+d12,-x+d12,x), //1100 +(x,_,_) => (x+d12,x+d12,x+d12), //1101 +(x,_,_) => (x+d12,x+d12,-x+d12), //1102 +(x,_,_) => (x+d12,-x+d12,x+d12), //1103 +(x,_,_) => (x+d12,-x+d12,-x+d12), //1104 +(x,_,_) => (-x+d12,x+d12,x+d12), //1105 +(x,_,_) => (-x+d12,x+d12,-x+d12), //1106 +(x,_,_) => (-x+d12,-x+d12,x+d12), //1107 +(x,_,_) => (-x+d12,-x+d12,-x+d12), //1108 +(x,_,z) => (x+d12,x+d12,-z), //1109 +(x,_,z) => (x+d12,-x+d12,-z), //1110 +(x,_,z) => (-x+d12,x+d12,z), //1111 +(x,_,z) => (-x+d12,x+d12,-z), //1112 +(x,_,z) => (-x+d12,-x+d12,z), //1113 +(x,_,z) => (x+d12,x+d12,-z+d12), //1114 +(x,_,z) => (x+d12,-x+d12,z+d12), //1115 +(x,_,z) => (x+d12,-x+d12,-z+d12), //1116 +(x,_,z) => (-x+d12,x+d12,z+d12), //1117 +(x,_,z) => (-x+d12,x+d12,-z+d12), //1118 +(x,_,z) => (-x+d12,-x+d12,-z+d12), //1119 +(x,_,_) => (x+d12,x+d14,d38), //1120 +(x,_,_) => (x+d12,x+d14,d58), //1121 +(x,_,_) => (x+d12,-x+d14,d58), //1122 +(x,_,_) => (x+d12,-x+d14,d78), //1123 +(x,_,_) => (x+d12,-x+d14,-x+d34), //1124 +(x,_,_) => (-x+d12,x+d34,d18), //1125 +(x,_,_) => (-x+d12,x+d34,d38), //1126 +(x,_,_) => (-x+d12,-x+d34,d38), //1127 +(x,_,_) => (-x+d12,-x+d34,d58), //1128 +(x,_,_) => (x+d12,-x+d34,-x+d14), //1129 +(x,_,_) => (-x+d12,x+d34,x+d14), //1130 +(x,_,z) => (x+d12,-x+d34,-z+d14), //1131 +(x,_,z) => (-x+d12,x+d34,z+d14), //1132 +(x,y,_) => (x+d12,-y,0), //1133 +(x,y,_) => (-x+d12,y,0), //1134 +(x,y,_) => (x+d12,-y,d12), //1135 +(x,y,_) => (-x+d12,y,d12), //1136 +(x,y,_) => (-x+d12,-y,d12), //1137 +(x,y,_) => (-x+d12,y,d14), //1138 +(x,y,_) => (x+d12,-y,d34), //1139 +(x,y,z) => (x+d12,y,-z), //1140 +(x,y,z) => (x+d12,-y,z), //1141 +(x,y,z) => (x+d12,-y,-z), //1142 +(x,y,z) => (-x+d12,y,z), //1143 +(x,y,z) => (-x+d12,y,-z), //1144 +(x,y,z) => (-x+d12,-y,z), //1145 +(x,y,z) => (x+d12,y,-z+d12), //1146 +(x,y,z) => (x+d12,-y,z+d12), //1147 +(x,y,z) => (x+d12,-y,-z+d12), //1148 +(x,y,z) => (-x+d12,y,z+d12), //1149 +(x,y,z) => (-x+d12,y,-z+d12), //1150 +(x,y,z) => (-x+d12,-y,z+d12), //1151 +(x,y,z) => (-x+d12,-y,-z+d12), //1152 +(x,y,z) => (-x+d12,y,-z+d14), //1153 +(x,y,z) => (x+d12,y,-z+d34), //1154 +(x,y,z) => (x+d12,-y,-z+d34), //1155 +(x,y,z) => (-x+d12,y,-z+d34), //1156 +(x,y,_) => (x+d12,-y+d12,0), //1157 +(x,y,_) => (-x+d12,y+d12,0), //1158 +(x,y,_) => (x+d12,-y+d12,d12), //1159 +(x,y,_) => (-x+d12,y+d12,d12), //1160 +(x,y,_) => (x+d12,-y+d12,d14), //1161 +(x,y,_) => (-x+d12,y+d12,d14), //1162 +(x,y,_) => (x+d12,-y+d12,d34), //1163 +(x,y,_) => (-x+d12,y+d12,d34), //1164 +(x,y,z) => (x+d12,y+d12,-z), //1165 +(x,y,z) => (x+d12,-y+d12,z), //1166 +(x,y,z) => (x+d12,-y+d12,-z), //1167 +(x,y,z) => (-x+d12,y+d12,z), //1168 +(x,y,z) => (-x+d12,y+d12,-z), //1169 +(x,y,z) => (-x+d12,-y+d12,z), //1170 +(x,y,z) => (-x+d12,-y+d12,-z), //1171 +(x,y,z) => (x+d12,y+d12,-z+d12), //1172 +(x,y,z) => (x+d12,-y+d12,z+d12), //1173 +(x,y,z) => (x+d12,-y+d12,-z+d12), //1174 +(x,y,z) => (-x+d12,y+d12,z+d12), //1175 +(x,y,z) => (-x+d12,y+d12,-z+d12), //1176 +(x,y,z) => (-x+d12,-y+d12,z+d12), //1177 +(x,y,z) => (-x+d12,-y+d12,-z+d12), //1178 +(x,y,z) => (x+d12,-y+d12,-z+d14), //1179 +(x,y,z) => (-x+d12,y+d12,-z+d14), //1180 +(x,y,z) => (x+d12,-y+d12,-z+d34), //1181 +(x,y,z) => (-x+d12,y+d12,-z+d34), //1182 +(x,y,z) => (x+d12,-y+d14,-z+d34), //1183 +(x,y,z) => (-x+d12,y+d14,z+d34), //1184 +(x,y,z) => (x+d12,-y+d34,-z+d14), //1185 +(x,y,z) => (-x+d12,y+d34,z+d14), //1186 +(x,_,z) => (x+d12,-z,x+d12), //1187 +(x,_,z) => (x+d12,-z,-x+d12), //1188 +(x,_,z) => (-x+d12,z,-x+d12), //1189 +(x,y,z) => (x+d12,-z,-y), //1190 +(x,y,z) => (-x+d12,z,y), //1191 +(x,y,z) => (-x+d12,z,-y), //1192 +(x,y,z) => (x+d12,-z,y+d12), //1193 +(x,y,z) => (-x+d12,z,-y+d12), //1194 +(x,y,z) => (-x+d12,-z,y+d12), //1195 +(x,_,z) => (x+d12,z+d12,-x), //1196 +(x,_,z) => (-x+d12,z+d12,-x), //1197 +(x,_,z) => (-x+d12,-z+d12,x), //1198 +(x,_,z) => (x+d12,z+d12,-x+d12), //1199 +(x,_,z) => (x+d12,-z+d12,x+d12), //1200 +(x,_,z) => (-x+d12,z+d12,x+d12), //1201 +(x,_,z) => (-x+d12,-z+d12,-x+d12), //1202 +(x,y,z) => (x+d12,z+d12,-y), //1203 +(x,y,z) => (x+d12,-z+d12,-y), //1204 +(x,y,z) => (-x+d12,-z+d12,y), //1205 +(x,y,z) => (x+d12,z+d12,y+d12), //1206 +(x,y,z) => (x+d12,z+d12,-y+d12), //1207 +(x,y,z) => (x+d12,-z+d12,y+d12), //1208 +(x,y,z) => (x+d12,-z+d12,-y+d12), //1209 +(x,y,z) => (-x+d12,z+d12,y+d12), //1210 +(x,y,z) => (-x+d12,z+d12,-y+d12), //1211 +(x,y,z) => (-x+d12,-z+d12,y+d12), //1212 +(x,y,z) => (-x+d12,-z+d12,-y+d12), //1213 +(x,y,z) => (x+d12,-z+d14,-y+d34), //1214 +(x,_,z) => (x+d12,-z+d34,-x+d14), //1215 +(x,_,z) => (-x+d12,z+d34,x+d14), //1216 +(x,y,z) => (-x+d12,z+d34,y+d14), //1217 +(x,_,_) => (-x+d14,0,d14), //1218 +(x,_,_) => (x+d14,d12,d14), //1219 +(x,_,_) => (-x+d14,d12,d34), //1220 +(x,_,_) => (x+d14,d14,d14), //1221 +(x,_,_) => (-x+d14,d14,d14), //1222 +(x,_,_) => (-x+d14,d18,d18), //1223 +(x,_,_) => (x+d14,d38,d78), //1224 +(x,_,_) => (-x+d14,d58,d18), //1225 +(x,_,_) => (-x+d14,d58,d58), //1226 +(x,_,_) => (-x+d14,x,-x+d14), //1227 +(x,_,_) => (x+d14,-x,x+d34), //1228 +(x,_,_) => (x+d14,-x+d12,x+d34), //1229 +(x,_,_) => (-x+d14,x+d12,-x+d34), //1230 +(x,_,z) => (x+d14,-x+d12,z+d34), //1231 +(x,_,z) => (-x+d14,x+d12,-z+d34), //1232 +(x,_,_) => (-x+d14,-x+d14,x), //1233 +(x,_,_) => (x+d14,x+d14,x+d14), //1234 +(x,_,_) => (x+d14,x+d14,-x+d14), //1235 +(x,_,_) => (x+d14,-x+d14,x+d14), //1236 +(x,_,_) => (-x+d14,x+d14,x+d14), //1237 +(x,_,_) => (-x+d14,-x+d14,-x+d14), //1238 +(x,_,_) => (x+d14,-x+d14,x+d34), //1239 +(x,_,z) => (-x+d14,-x+d14,-z+d14), //1240 +(x,_,_) => (-x+d14,-x+d34,x), //1241 +(x,_,_) => (-x+d14,-x+d34,x+d12), //1242 +(x,_,_) => (-x+d14,x+d34,x+d14), //1243 +(x,_,_) => (x+d14,x+d34,-x+d34), //1244 +(x,_,_) => (x+d14,-x+d34,x+d34), //1245 +(x,_,_) => (-x+d14,-x+d34,x+d34), //1246 +(x,_,z) => (x+d14,-x+d34,z+d34), //1247 +(x,y,z) => (x+d14,-y,z+d14), //1248 +(x,y,z) => (-x+d14,y,-z+d14), //1249 +(x,y,z) => (x+d14,-y+d12,z+d34), //1250 +(x,y,z) => (-x+d14,y+d12,-z+d34), //1251 +(x,y,z) => (x+d14,y+d14,-z), //1252 +(x,y,z) => (-x+d14,-y+d14,z), //1253 +(x,y,z) => (x+d14,y+d14,-z+d14), //1254 +(x,y,z) => (x+d14,-y+d14,z+d14), //1255 +(x,y,z) => (-x+d14,y+d14,z+d14), //1256 +(x,y,z) => (-x+d14,-y+d14,-z+d14), //1257 +(x,y,z) => (x+d14,-y+d14,z+d34), //1258 +(x,y,z) => (x+d14,y+d34,-z+d12), //1259 +(x,y,z) => (-x+d14,-y+d34,z+d12), //1260 +(x,y,z) => (-x+d14,y+d34,z+d14), //1261 +(x,y,z) => (x+d14,y+d34,-z+d34), //1262 +(x,y,z) => (x+d14,-z,y+d34), //1263 +(x,_,z) => (x+d14,-z+d12,x+d34), //1264 +(x,_,z) => (-x+d14,z+d12,-x+d34), //1265 +(x,y,z) => (x+d14,-z+d12,y+d34), //1266 +(x,_,z) => (-x+d14,-z+d14,-x+d14), //1267 +(x,y,z) => (x+d14,z+d14,y+d14), //1268 +(x,y,z) => (-x+d14,-z+d14,-y+d14), //1269 +(x,y,z) => (x+d14,-z+d14,y+d34), //1270 +(x,_,z) => (x+d14,-z+d34,x+d34), //1271 +(x,y,z) => (-x+d14,-z+d34,y), //1272 +(x,y,z) => (-x+d14,-z+d34,y+d12), //1273 +(x,y,z) => (-x+d14,z+d34,y+d14), //1274 +(x,y,z) => (x+d14,z+d34,-y+d34), //1275 +(x,y,z) => (x+d14,-z+d34,y+d34), //1276 +(x,y,z) => (-x+d14,-z+d34,y+d34), //1277 +(x,_,_) => (-x+d34,0,d14), //1278 +(x,_,_) => (x+d34,0,d34), //1279 +(x,_,_) => (x+d34,d12,d14), //1280 +(x,_,_) => (x+d34,d14,d14), //1281 +(x,_,_) => (x+d34,d14,d34), //1282 +(x,_,_) => (-x+d34,d18,d58), //1283 +(x,_,_) => (-x+d34,d34,d14), //1284 +(x,_,_) => (-x+d34,d34,d34), //1285 +(x,_,_) => (x+d34,d38,d38), //1286 +(x,_,_) => (x+d34,d38,d78), //1287 +(x,_,_) => (-x+d34,d58,d18), //1288 +(x,_,_) => (x+d34,d78,d78), //1289 +(x,_,_) => (-x+d34,x,-x+d14), //1290 +(x,_,_) => (x+d34,-x,x+d34), //1291 +(x,_,_) => (-x+d34,x+d12,-x+d14), //1292 +(x,_,_) => (x+d34,x+d14,-x), //1293 +(x,_,_) => (x+d34,x+d14,-x+d12), //1294 +(x,_,_) => (-x+d34,-x+d14,x+d12), //1295 +(x,_,_) => (x+d34,x+d14,-x+d14), //1296 +(x,_,_) => (x+d34,x+d14,-x+d34), //1297 +(x,_,_) => (x+d34,-x+d14,-x+d34), //1298 +(x,_,_) => (-x+d34,x+d14,x+d34), //1299 +(x,_,z) => (x+d34,x+d14,-z+d12), //1300 +(x,_,z) => (-x+d34,-x+d14,z+d12), //1301 +(x,_,z) => (x+d34,x+d14,-z+d34), //1302 +(x,_,_) => (x+d34,x+d34,-x), //1303 +(x,_,_) => (x+d34,-x+d34,x+d14), //1304 +(x,_,_) => (-x+d34,x+d34,x+d14), //1305 +(x,_,_) => (-x+d34,x+d34,-x+d14), //1306 +(x,_,_) => (-x+d34,-x+d34,-x+d34), //1307 +(x,_,z) => (-x+d34,x+d34,z+d14), //1308 +(x,y,z) => (x+d34,-y,z+d34), //1309 +(x,y,z) => (-x+d34,y,-z+d34), //1310 +(x,y,z) => (x+d34,-y+d12,z+d14), //1311 +(x,y,z) => (-x+d34,y+d12,-z+d14), //1312 +(x,y,z) => (x+d34,y+d14,-z+d12), //1313 +(x,y,z) => (-x+d34,-y+d14,z+d12), //1314 +(x,y,z) => (x+d34,y+d14,-z+d14), //1315 +(x,y,z) => (-x+d34,y+d14,z+d34), //1316 +(x,y,z) => (x+d34,y+d34,-z), //1317 +(x,y,z) => (-x+d34,-y+d34,z), //1318 +(x,y,z) => (x+d34,-y+d34,z+d14), //1319 +(x,y,z) => (-x+d34,-y+d34,-z+d34), //1320 +(x,y,z) => (-x+d34,z,-y+d14), //1321 +(x,y,z) => (-x+d34,z+d12,-y+d14), //1322 +(x,_,z) => (x+d34,z+d14,-x+d12), //1323 +(x,_,z) => (-x+d34,-z+d14,x+d12), //1324 +(x,_,z) => (x+d34,z+d14,-x+d34), //1325 +(x,y,z) => (x+d34,z+d14,-y), //1326 +(x,y,z) => (x+d34,z+d14,-y+d12), //1327 +(x,y,z) => (x+d34,z+d14,-y+d14), //1328 +(x,y,z) => (x+d34,z+d14,-y+d34), //1329 +(x,y,z) => (x+d34,-z+d14,-y+d34), //1330 +(x,y,z) => (-x+d34,z+d14,y+d34), //1331 +(x,_,z) => (-x+d34,z+d34,x+d14), //1332 +(x,y,z) => (x+d34,-z+d34,y+d14), //1333 +(x,y,z) => (-x+d34,z+d34,y+d14), //1334 +(x,y,z) => (-x+d34,z+d34,-y+d14), //1335 +(x,y,z) => (-x+d34,-z+d34,-y+d34), //1336 +(x,y,_) => (-x+y,-x,0), //1337 +(x,y,_) => (-x+y,-x,d12), //1338 +(x,y,_) => (-x+y,-x,d14), //1339 +(x,y,z) => (-x+y,-x,z), //1340 +(x,y,z) => (-x+y,-x,-z), //1341 +(x,y,z) => (-x+y,-x,-z+d12), //1342 +(x,y,z) => (-x+y,-x,z+d13), //1343 +(x,y,z) => (-x+y,-x,z+d23), //1344 +(x,y,_) => (-x+y,y,0), //1345 +(x,y,_) => (-x+y,y,d12), //1346 +(x,y,_) => (-x+y,y,d14), //1347 +(x,y,_) => (-x+y,y,d34), //1348 +(x,y,z) => (-x+y,y,z), //1349 +(x,y,z) => (-x+y,y,-z), //1350 +(x,y,z) => (-x+y,y,z+d12), //1351 +(x,y,z) => (-x+y,y,-z+d12), //1352 +(x,y,z) => (-x+y,y,-z+d13), //1353 +(x,y,z) => (-x+y,y,-z+d23), //1354 +(x,y,_) => (x-y,x,0), //1355 +(x,y,_) => (x-y,x,d12), //1356 +(x,y,_) => (x-y,x,d34), //1357 +(x,y,z) => (x-y,x,z), //1358 +(x,y,z) => (x-y,x,-z), //1359 +(x,y,z) => (x-y,x,z+d12), //1360 +(x,y,z) => (x-y,x,z+d13), //1361 +(x,y,z) => (x-y,x,z+d16), //1362 +(x,y,z) => (x-y,x,z+d23), //1363 +(x,y,z) => (x-y,x,z+d56), //1364 +(x,y,_) => (x-y,-y,0), //1365 +(x,y,_) => (x-y,-y,d12), //1366 +(x,y,_) => (x-y,-y,d14), //1367 +(x,y,_) => (x-y,-y,d34), //1368 +(x,y,z) => (x-y,-y,z), //1369 +(x,y,z) => (x-y,-y,-z), //1370 +(x,y,z) => (x-y,-y,z+d12), //1371 +(x,y,z) => (x-y,-y,-z+d12), //1372 +(x,y,z) => (x-y,-y,-z+d13), //1373 +(x,y,z) => (x-y,-y,-z+d23), //1374 +(_,y,_) => (y,0,d14), //1375 +(_,y,_) => (-y,0,d14), //1376 +(_,y,_) => (y,0,d34), //1377 +(_,y,_) => (-y,0,d34), //1378 +(_,y,_) => (y,0,y), //1379 +(_,y,_) => (y,0,-y), //1380 +(_,y,_) => (-y,0,y), //1381 +(_,y,_) => (-y,0,-y), //1382 +(_,y,_) => (y,0,y+d12), //1383 +(_,y,_) => (-y,0,-y+d12), //1384 +(_,y,z) => (y,0,z), //1385 +(_,y,z) => (y,0,-z), //1386 +(_,y,z) => (-y,0,z), //1387 +(_,y,z) => (-y,0,-z), //1388 +(_,y,z) => (y,0,z+d12), //1389 +(_,y,z) => (y,0,-z+d12), //1390 +(_,y,z) => (-y,0,z+d12), //1391 +(_,y,z) => (-y,0,-z+d12), //1392 +(_,y,_) => (y,d12,d14), //1393 +(_,y,_) => (-y,d12,d14), //1394 +(_,y,_) => (y,d12,d34), //1395 +(_,y,_) => (-y,d12,d34), //1396 +(_,y,_) => (y,d12,y), //1397 +(_,y,_) => (y,d12,-y), //1398 +(_,y,_) => (-y,d12,y), //1399 +(_,y,_) => (-y,d12,-y), //1400 +(_,y,_) => (y,d12,y+d12), //1401 +(_,y,_) => (-y,d12,-y+d12), //1402 +(_,y,z) => (y,d12,z), //1403 +(_,y,z) => (y,d12,-z), //1404 +(_,y,z) => (-y,d12,z), //1405 +(_,y,z) => (-y,d12,-z), //1406 +(_,y,z) => (y,d12,z+d12), //1407 +(_,y,z) => (y,d12,-z+d12), //1408 +(_,y,z) => (-y,d12,z+d12), //1409 +(_,y,z) => (-y,d12,-z+d12), //1410 +(_,y,z) => (-y,d12,z+d14), //1411 +(_,y,_) => (y,d14,y), //1412 +(_,y,_) => (y,d14,-y), //1413 +(_,y,_) => (-y,d14,y), //1414 +(_,y,_) => (-y,d14,-y), //1415 +(_,y,_) => (y,d14,y+d12), //1416 +(_,y,_) => (y,d14,-y+d12), //1417 +(_,y,_) => (-y,d14,y+d12), //1418 +(_,y,_) => (-y,d14,-y+d12), //1419 +(_,y,z) => (y,d14,z), //1420 +(_,y,z) => (y,d14,z+d12), //1421 +(_,y,_) => (y,d18,-y+d14), //1422 +(_,y,_) => (-y,d34,d38), //1423 +(_,y,_) => (y,d34,d78), //1424 +(_,y,_) => (y,d34,y), //1425 +(_,y,_) => (y,d34,-y), //1426 +(_,y,_) => (-y,d34,y), //1427 +(_,y,_) => (-y,d34,-y), //1428 +(_,y,_) => (y,d34,y+d12), //1429 +(_,y,_) => (y,d34,-y+d12), //1430 +(_,y,_) => (-y,d34,y+d12), //1431 +(_,y,_) => (-y,d34,-y+d12), //1432 +(_,y,z) => (-y,d34,-z), //1433 +(_,y,z) => (-y,d34,-z+d12), //1434 +(_,y,_) => (-y,d38,-y+d14), //1435 +(_,y,_) => (-y,d58,y+d14), //1436 +(_,y,_) => (y,d78,y+d14), //1437 +(x,y,_) => (y,x,0), //1438 +(x,y,_) => (y,-x,0), //1439 +(x,y,_) => (-y,x,0), //1440 +(x,y,_) => (-y,-x,0), //1441 +(x,y,_) => (y,x,d12), //1442 +(x,y,_) => (y,-x,d12), //1443 +(x,y,_) => (-y,x,d12), //1444 +(x,y,_) => (-y,-x,d12), //1445 +(x,y,_) => (y,x,d14), //1446 +(x,y,_) => (-y,-x,d14), //1447 +(x,y,_) => (y,x,d34), //1448 +(x,y,_) => (-y,-x,d34), //1449 +(x,y,z) => (y,x,z), //1450 +(x,y,z) => (y,x,-z), //1451 +(x,y,z) => (y,-x,z), //1452 +(x,y,z) => (y,-x,-z), //1453 +(x,y,z) => (-y,x,z), //1454 +(x,y,z) => (-y,x,-z), //1455 +(x,y,z) => (-y,-x,z), //1456 +(x,y,z) => (-y,-x,-z), //1457 +(x,y,z) => (y,x,z+d12), //1458 +(x,y,z) => (y,x,-z+d12), //1459 +(x,y,z) => (y,-x,z+d12), //1460 +(x,y,z) => (y,-x,-z+d12), //1461 +(x,y,z) => (-y,x,z+d12), //1462 +(x,y,z) => (-y,x,-z+d12), //1463 +(x,y,z) => (-y,-x,z+d12), //1464 +(x,y,z) => (-y,-x,-z+d12), //1465 +(x,y,z) => (y,x,-z+d13), //1466 +(x,y,z) => (-y,-x,-z+d13), //1467 +(x,y,z) => (y,x,-z+d14), //1468 +(x,y,z) => (y,-x,z+d14), //1469 +(x,y,z) => (-y,x,z+d14), //1470 +(x,y,z) => (-y,-x,-z+d14), //1471 +(x,y,z) => (-y,-x,-z+d16), //1472 +(x,y,z) => (y,x,-z+d23), //1473 +(x,y,z) => (-y,-x,-z+d23), //1474 +(x,y,z) => (y,x,-z+d34), //1475 +(x,y,z) => (y,-x,z+d34), //1476 +(x,y,z) => (-y,x,z+d34), //1477 +(x,y,z) => (-y,-x,-z+d34), //1478 +(x,y,z) => (-y,-x,-z+d56), //1479 +(x,y,z) => (y,-x+d12,z), //1480 +(x,y,z) => (-y,x+d12,-z), //1481 +(x,y,z) => (-y,-x+d12,z), //1482 +(x,y,z) => (y,-x+d12,z+d12), //1483 +(x,y,z) => (y,-x+d12,-z+d12), //1484 +(x,y,z) => (-y,x+d12,z+d12), //1485 +(x,y,z) => (-y,x+d12,-z+d12), //1486 +(x,y,z) => (y,x+d12,z+d14), //1487 +(x,y,z) => (-y,x+d12,z+d14), //1488 +(x,y,z) => (-y,-x+d12,z+d14), //1489 +(x,y,z) => (y,x+d12,z+d34), //1490 +(x,y,z) => (-y,-x+d12,z+d34), //1491 +(x,y,z) => (y,-x+d14,-z+d34), //1492 +(x,y,z) => (-y,x+d34,z+d14), //1493 +(x,y,_) => (y,-x+y,0), //1494 +(x,y,_) => (y,-x+y,d12), //1495 +(x,y,_) => (y,-x+y,d34), //1496 +(x,y,z) => (y,-x+y,z), //1497 +(x,y,z) => (y,-x+y,-z), //1498 +(x,y,z) => (y,-x+y,z+d12), //1499 +(x,y,z) => (y,-x+y,z+d13), //1500 +(x,y,z) => (y,-x+y,z+d16), //1501 +(x,y,z) => (y,-x+y,z+d23), //1502 +(x,y,z) => (y,-x+y,z+d56), //1503 +(x,y,_) => (-y,x-y,0), //1504 +(x,y,_) => (-y,x-y,d12), //1505 +(x,y,_) => (-y,x-y,d14), //1506 +(x,y,z) => (-y,x-y,z), //1507 +(x,y,z) => (-y,x-y,-z), //1508 +(x,y,z) => (-y,x-y,-z+d12), //1509 +(x,y,z) => (-y,x-y,z+d13), //1510 +(x,y,z) => (-y,x-y,z+d23), //1511 +(_,y,_) => (y,y,0), //1512 +(_,y,_) => (y,-y,0), //1513 +(_,y,_) => (-y,y,0), //1514 +(_,y,_) => (-y,-y,0), //1515 +(_,y,_) => (y,y,d12), //1516 +(_,y,_) => (y,-y,d12), //1517 +(_,y,_) => (-y,y,d12), //1518 +(_,y,_) => (-y,-y,d12), //1519 +(_,y,_) => (y,y,d14), //1520 +(_,y,_) => (y,-y,d14), //1521 +(_,y,_) => (-y,y,d14), //1522 +(_,y,_) => (-y,-y,d14), //1523 +(_,y,_) => (y,y,d34), //1524 +(_,y,_) => (y,-y,d34), //1525 +(_,y,_) => (-y,y,d34), //1526 +(_,y,_) => (-y,-y,d34), //1527 +(_,y,_) => (y,y+d12,0), //1528 +(_,y,_) => (-y,-y+d12,0), //1529 +(_,y,_) => (y,y+d12,d12), //1530 +(_,y,_) => (-y,-y+d12,d12), //1531 +(_,y,_) => (y,y+d12,d14), //1532 +(_,y,_) => (y,-y+d12,d14), //1533 +(_,y,_) => (-y,y+d12,d14), //1534 +(_,y,_) => (-y,-y+d12,d14), //1535 +(_,y,_) => (y,y+d12,d34), //1536 +(_,y,_) => (y,-y+d12,d34), //1537 +(_,y,_) => (-y,y+d12,d34), //1538 +(_,y,_) => (-y,-y+d12,d34), //1539 +(_,y,_) => (y,y+d14,d18), //1540 +(_,y,_) => (y,-y+d14,d18), //1541 +(_,y,_) => (y,y+d14,d58), //1542 +(_,y,_) => (-y,y+d14,d58), //1543 +(_,y,_) => (-y,y+d34,d38), //1544 +(_,y,_) => (-y,-y+d34,d38), //1545 +(_,y,_) => (-y,y+d34,d78), //1546 +(_,y,z) => (y,z,0), //1547 +(_,y,z) => (y,-z,0), //1548 +(_,y,z) => (-y,z,0), //1549 +(_,y,z) => (-y,-z,0), //1550 +(_,y,z) => (y,z,d12), //1551 +(_,y,z) => (y,-z,d12), //1552 +(_,y,z) => (-y,z,d12), //1553 +(_,y,z) => (-y,-z,d12), //1554 +(x,y,z) => (y,z,x), //1555 +(x,y,z) => (y,z,-x), //1556 +(x,y,z) => (y,-z,x), //1557 +(x,y,z) => (y,-z,-x), //1558 +(x,y,z) => (-y,z,x), //1559 +(x,y,z) => (-y,z,-x), //1560 +(x,y,z) => (-y,-z,x), //1561 +(x,y,z) => (-y,-z,-x), //1562 +(x,y,z) => (y,-z+d12,x+d12), //1563 +(x,y,z) => (y,-z+d12,-x+d12), //1564 +(x,y,z) => (-y,z+d12,x+d12), //1565 +(x,y,z) => (-y,z+d12,-x+d12), //1566 +(x,y,z) => (-y,-z+d12,x+d12), //1567 +(x,y,z) => (y,-z+d14,-x+d14), //1568 +(x,y,z) => (-y,z+d34,x+d34), //1569 +(_,y,_) => (y+d12,0,y), //1570 +(_,y,_) => (-y+d12,0,-y), //1571 +(_,y,_) => (y+d12,0,-y+d12), //1572 +(_,y,_) => (-y+d12,0,y+d12), //1573 +(_,y,_) => (y+d12,0,y+d14), //1574 +(_,y,_) => (-y+d12,0,-y+d34), //1575 +(_,y,z) => (y+d12,0,z+d34), //1576 +(_,y,_) => (y+d12,d12,y), //1577 +(_,y,_) => (-y+d12,d12,-y), //1578 +(_,y,_) => (y+d12,d12,y+d12), //1579 +(_,y,_) => (y+d12,d12,-y+d12), //1580 +(_,y,_) => (-y+d12,d12,y+d12), //1581 +(_,y,_) => (-y+d12,d12,-y+d12), //1582 +(_,y,z) => (y+d12,d12,z), //1583 +(_,y,z) => (-y+d12,d12,z), //1584 +(_,y,z) => (y+d12,d12,z+d12), //1585 +(_,y,z) => (y+d12,d12,-z+d12), //1586 +(_,y,z) => (-y+d12,d12,z+d12), //1587 +(_,y,z) => (-y+d12,d12,-z+d12), //1588 +(_,y,_) => (y+d12,d14,y), //1589 +(_,y,_) => (y+d12,d14,-y), //1590 +(_,y,_) => (-y+d12,d14,y), //1591 +(_,y,_) => (-y+d12,d14,-y), //1592 +(_,y,_) => (-y+d12,d14,-y+d12), //1593 +(_,y,_) => (y+d12,d14,y+d34), //1594 +(_,y,z) => (-y+d12,d14,z), //1595 +(_,y,z) => (-y+d12,d14,z+d12), //1596 +(_,y,_) => (-y+d12,d18,y+d34), //1597 +(_,y,_) => (-y+d12,d34,d38), //1598 +(_,y,_) => (y+d12,d34,d78), //1599 +(_,y,_) => (y+d12,d34,y), //1600 +(_,y,_) => (y+d12,d34,-y), //1601 +(_,y,_) => (-y+d12,d34,y), //1602 +(_,y,_) => (-y+d12,d34,-y), //1603 +(_,y,_) => (y+d12,d34,y+d12), //1604 +(_,y,_) => (-y+d12,d34,-y+d14), //1605 +(_,y,z) => (y+d12,d34,-z), //1606 +(_,y,z) => (y+d12,d34,-z+d12), //1607 +(_,y,_) => (y+d12,d38,y+d34), //1608 +(_,y,_) => (y+d12,d58,-y+d34), //1609 +(_,y,_) => (-y+d12,d78,-y+d34), //1610 +(x,y,z) => (y+d12,-x,-z), //1611 +(x,y,z) => (-y+d12,x,z), //1612 +(x,y,z) => (-y+d12,x,-z), //1613 +(x,y,z) => (y+d12,-x,z+d12), //1614 +(x,y,z) => (y+d12,-x,-z+d12), //1615 +(x,y,z) => (-y+d12,x,z+d12), //1616 +(x,y,z) => (-y+d12,x,-z+d12), //1617 +(x,y,z) => (-y+d12,-x,z+d12), //1618 +(x,y,z) => (y+d12,x,z+d14), //1619 +(x,y,z) => (-y+d12,-x,z+d14), //1620 +(x,y,z) => (y+d12,x,z+d34), //1621 +(x,y,z) => (y+d12,-x,z+d34), //1622 +(x,y,z) => (-y+d12,-x,z+d34), //1623 +(x,y,_) => (y+d12,x+d12,0), //1624 +(x,y,_) => (-y+d12,-x+d12,0), //1625 +(x,y,_) => (y+d12,x+d12,d12), //1626 +(x,y,_) => (y+d12,-x+d12,d12), //1627 +(x,y,_) => (-y+d12,x+d12,d12), //1628 +(x,y,_) => (-y+d12,-x+d12,d12), //1629 +(x,y,z) => (y+d12,x+d12,z), //1630 +(x,y,z) => (y+d12,x+d12,-z), //1631 +(x,y,z) => (y+d12,-x+d12,z), //1632 +(x,y,z) => (y+d12,-x+d12,-z), //1633 +(x,y,z) => (-y+d12,x+d12,z), //1634 +(x,y,z) => (-y+d12,x+d12,-z), //1635 +(x,y,z) => (-y+d12,-x+d12,z), //1636 +(x,y,z) => (-y+d12,-x+d12,-z), //1637 +(x,y,z) => (y+d12,x+d12,z+d12), //1638 +(x,y,z) => (y+d12,x+d12,-z+d12), //1639 +(x,y,z) => (y+d12,-x+d12,z+d12), //1640 +(x,y,z) => (y+d12,-x+d12,-z+d12), //1641 +(x,y,z) => (-y+d12,x+d12,z+d12), //1642 +(x,y,z) => (-y+d12,x+d12,-z+d12), //1643 +(x,y,z) => (-y+d12,-x+d12,z+d12), //1644 +(x,y,z) => (-y+d12,-x+d12,-z+d12), //1645 +(x,y,z) => (y+d12,-x+d12,z+d14), //1646 +(x,y,z) => (-y+d12,x+d12,z+d14), //1647 +(x,y,z) => (y+d12,-x+d12,z+d34), //1648 +(x,y,z) => (-y+d12,x+d12,z+d34), //1649 +(x,y,z) => (y+d12,-x+d14,-z+d34), //1650 +(x,y,z) => (-y+d12,x+d34,z+d14), //1651 +(_,y,_) => (y+d12,y,0), //1652 +(_,y,_) => (-y+d12,-y,0), //1653 +(_,y,_) => (y+d12,y,d12), //1654 +(_,y,_) => (-y+d12,-y,d12), //1655 +(_,y,_) => (y+d12,y,d14), //1656 +(_,y,_) => (y+d12,-y,d14), //1657 +(_,y,_) => (-y+d12,y,d14), //1658 +(_,y,_) => (-y+d12,-y,d14), //1659 +(_,y,_) => (y+d12,y,d34), //1660 +(_,y,_) => (y+d12,-y,d34), //1661 +(_,y,_) => (-y+d12,y,d34), //1662 +(_,y,_) => (-y+d12,-y,d34), //1663 +(_,y,_) => (y+d12,-y+d12,0), //1664 +(_,y,_) => (-y+d12,y+d12,0), //1665 +(_,y,_) => (y+d12,y+d12,d12), //1666 +(_,y,_) => (y+d12,-y+d12,d12), //1667 +(_,y,_) => (-y+d12,y+d12,d12), //1668 +(_,y,_) => (-y+d12,-y+d12,d12), //1669 +(_,y,_) => (-y+d12,-y+d12,d14), //1670 +(_,y,_) => (y+d12,y+d12,d34), //1671 +(_,y,_) => (y+d12,y+d14,d12), //1672 +(_,y,_) => (-y+d12,-y+d14,d34), //1673 +(_,y,_) => (y+d12,-y+d14,d38), //1674 +(_,y,_) => (y+d12,y+d14,d78), //1675 +(_,y,_) => (y+d12,-y+d14,d78), //1676 +(_,y,_) => (-y+d12,-y+d34,d12), //1677 +(_,y,_) => (y+d12,y+d34,d14), //1678 +(_,y,_) => (-y+d12,-y+d34,d18), //1679 +(_,y,_) => (y+d12,y+d34,d38), //1680 +(_,y,_) => (-y+d12,y+d34,d58), //1681 +(_,y,_) => (-y+d12,-y+d34,d58), //1682 +(_,y,_) => (-y+d12,-y+d34,d78), //1683 +(x,y,z) => (y+d12,z,-x+d12), //1684 +(x,y,z) => (y+d12,-z,x+d12), //1685 +(x,y,z) => (y+d12,-z,-x+d12), //1686 +(x,y,z) => (-y+d12,z,-x+d12), //1687 +(x,y,z) => (-y+d12,-z,x+d12), //1688 +(x,y,z) => (y+d12,z+d12,-x), //1689 +(x,y,z) => (y+d12,-z+d12,-x), //1690 +(x,y,z) => (-y+d12,z+d12,x), //1691 +(x,y,z) => (-y+d12,z+d12,-x), //1692 +(x,y,z) => (-y+d12,-z+d12,x), //1693 +(x,y,z) => (y+d12,z+d12,-x+d12), //1694 +(x,y,z) => (y+d12,-z+d12,x+d12), //1695 +(x,y,z) => (-y+d12,z+d12,x+d12), //1696 +(x,y,z) => (-y+d12,-z+d12,-x+d12), //1697 +(x,y,z) => (y+d12,-z+d14,-x+d34), //1698 +(x,y,z) => (-y+d12,z+d14,x+d34), //1699 +(x,y,z) => (y+d12,-z+d34,-x+d14), //1700 +(x,y,z) => (-y+d12,z+d34,x+d14), //1701 +(_,y,_) => (y+d14,d12,y+d12), //1702 +(_,y,_) => (y+d14,d12,-y+d34), //1703 +(_,y,_) => (-y+d14,d14,y+d34), //1704 +(_,y,z) => (y+d14,d14,z+d34), //1705 +(_,y,z) => (-y+d14,d14,-z+d34), //1706 +(_,y,_) => (y+d14,d18,y), //1707 +(_,y,_) => (-y+d14,d18,y), //1708 +(_,y,_) => (-y+d14,d34,-y+d12), //1709 +(_,y,z) => (y+d14,d34,-z+d14), //1710 +(_,y,z) => (-y+d14,d34,z+d14), //1711 +(_,y,_) => (-y+d14,d38,y+d12), //1712 +(_,y,_) => (y+d14,d58,y), //1713 +(_,y,_) => (y+d14,d58,-y), //1714 +(_,y,_) => (y+d14,d78,y+d12), //1715 +(_,y,_) => (-y+d14,d78,y+d12), //1716 +(x,y,z) => (y+d14,-x,z+d34), //1717 +(x,y,z) => (y+d14,-x+d12,z+d34), //1718 +(x,y,z) => (y+d14,x+d14,z+d14), //1719 +(x,y,z) => (-y+d14,x+d14,-z+d14), //1720 +(x,y,z) => (-y+d14,-x+d14,-z+d14), //1721 +(x,y,z) => (y+d14,-x+d14,z+d34), //1722 +(x,y,z) => (-y+d14,-x+d14,-z+d34), //1723 +(x,y,z) => (-y+d14,-x+d34,z), //1724 +(x,y,z) => (-y+d14,-x+d34,z+d12), //1725 +(x,y,z) => (y+d14,x+d34,-z+d14), //1726 +(x,y,z) => (-y+d14,x+d34,z+d14), //1727 +(x,y,z) => (y+d14,x+d34,-z+d34), //1728 +(x,y,z) => (y+d14,-x+d34,z+d34), //1729 +(x,y,z) => (y+d14,-x+d34,-z+d34), //1730 +(x,y,z) => (-y+d14,-x+d34,z+d34), //1731 +(_,y,_) => (-y+d14,y,d18), //1732 +(_,y,_) => (-y+d14,-y,d38), //1733 +(_,y,_) => (y+d14,-y,d58), //1734 +(_,y,_) => (y+d14,y,d78), //1735 +(_,y,_) => (y+d14,y+d12,0), //1736 +(_,y,_) => (-y+d14,-y+d12,d34), //1737 +(_,y,_) => (y+d14,-y+d34,d12), //1738 +(_,y,_) => (-y+d14,y+d34,d34), //1739 +(x,y,z) => (-y+d14,z,-x+d14), //1740 +(x,y,z) => (y+d14,-z+d12,x+d34), //1741 +(x,y,z) => (-y+d14,z+d12,-x+d34), //1742 +(x,y,z) => (-y+d14,-z+d14,x), //1743 +(x,y,z) => (y+d14,z+d14,-x+d14), //1744 +(x,y,z) => (y+d14,-z+d14,x+d14), //1745 +(x,y,z) => (-y+d14,z+d14,x+d14), //1746 +(x,y,z) => (-y+d14,-z+d14,-x+d14), //1747 +(x,y,z) => (y+d14,-z+d14,x+d34), //1748 +(x,y,z) => (y+d14,z+d34,-x+d12), //1749 +(x,y,z) => (-y+d14,-z+d34,x+d12), //1750 +(x,y,z) => (-y+d14,z+d34,x+d14), //1751 +(x,y,z) => (y+d14,z+d34,-x+d34), //1752 +(_,y,_) => (-y+d34,d12,-y+d12), //1753 +(_,y,_) => (-y+d34,d12,y+d14), //1754 +(_,y,_) => (y+d34,d14,y+d12), //1755 +(_,y,_) => (-y+d34,d18,-y+d12), //1756 +(_,y,_) => (y+d34,d34,-y+d14), //1757 +(_,y,_) => (y+d34,d38,-y), //1758 +(_,y,_) => (-y+d34,d38,-y), //1759 +(_,y,_) => (y+d34,d38,y+d12), //1760 +(_,y,_) => (y+d34,d58,-y+d12), //1761 +(_,y,_) => (-y+d34,d58,-y+d12), //1762 +(_,y,_) => (y+d34,d78,-y), //1763 +(_,y,_) => (-y+d34,d78,-y+d12), //1764 +(x,y,z) => (-y+d34,x,-z+d14), //1765 +(x,y,z) => (-y+d34,x+d12,-z+d14), //1766 +(x,y,z) => (y+d34,x+d14,-z), //1767 +(x,y,z) => (y+d34,x+d14,-z+d12), //1768 +(x,y,z) => (y+d34,x+d14,-z+d14), //1769 +(x,y,z) => (-y+d34,x+d14,z+d14), //1770 +(x,y,z) => (-y+d34,-x+d14,z+d14), //1771 +(x,y,z) => (y+d34,x+d14,-z+d34), //1772 +(x,y,z) => (y+d34,-x+d14,-z+d34), //1773 +(x,y,z) => (-y+d34,x+d14,z+d34), //1774 +(x,y,z) => (-y+d34,-x+d14,z+d34), //1775 +(x,y,z) => (y+d34,x+d34,z+d14), //1776 +(x,y,z) => (y+d34,-x+d34,z+d14), //1777 +(x,y,z) => (-y+d34,x+d34,z+d14), //1778 +(x,y,z) => (-y+d34,x+d34,-z+d14), //1779 +(x,y,z) => (y+d34,x+d34,z+d34), //1780 +(x,y,z) => (y+d34,-x+d34,z+d34), //1781 +(x,y,z) => (-y+d34,-x+d34,-z+d34), //1782 +(_,y,_) => (-y+d34,-y+d12,0), //1783 +(_,y,_) => (y+d34,y+d12,d14), //1784 +(_,y,_) => (y+d34,-y+d12,d18), //1785 +(_,y,_) => (y+d34,y+d12,d38), //1786 +(_,y,_) => (-y+d34,y+d12,d58), //1787 +(_,y,_) => (-y+d34,-y+d12,d78), //1788 +(_,y,_) => (-y+d34,y+d14,d12), //1789 +(_,y,_) => (y+d34,-y+d14,d14), //1790 +(x,y,z) => (y+d34,-z,x+d34), //1791 +(x,y,z) => (y+d34,-z+d12,x+d14), //1792 +(x,y,z) => (-y+d34,z+d12,-x+d14), //1793 +(x,y,z) => (y+d34,z+d14,-x+d12), //1794 +(x,y,z) => (-y+d34,-z+d14,x+d12), //1795 +(x,y,z) => (y+d34,z+d14,-x+d14), //1796 +(x,y,z) => (-y+d34,z+d14,x+d34), //1797 +(x,y,z) => (y+d34,z+d34,-x), //1798 +(x,y,z) => (y+d34,-z+d34,x+d14), //1799 +(x,y,z) => (-y+d34,-z+d34,-x+d34), //1800 +(_,y,z) => (z,0,y), //1801 +(_,y,z) => (z,0,-y), //1802 +(_,y,z) => (-z,0,y), //1803 +(_,y,z) => (-z,0,-y), //1804 +(_,y,z) => (z,d12,y), //1805 +(_,y,z) => (z,d12,-y), //1806 +(_,y,z) => (-z,d12,y), //1807 +(_,y,z) => (-z,d12,-y), //1808 +(x,_,z) => (z,x,x), //1809 +(x,_,z) => (z,x,-x), //1810 +(x,_,z) => (z,-x,x), //1811 +(x,_,z) => (z,-x,-x), //1812 +(x,_,z) => (-z,x,x), //1813 +(x,_,z) => (-z,x,-x), //1814 +(x,_,z) => (-z,-x,x), //1815 +(x,_,z) => (-z,-x,-x), //1816 +(x,y,z) => (z,x,y), //1817 +(x,y,z) => (z,x,-y), //1818 +(x,y,z) => (z,-x,y), //1819 +(x,y,z) => (z,-x,-y), //1820 +(x,y,z) => (-z,x,y), //1821 +(x,y,z) => (-z,x,-y), //1822 +(x,y,z) => (-z,-x,y), //1823 +(x,y,z) => (-z,-x,-y), //1824 +(x,_,z) => (z,-x+d12,-x+d12), //1825 +(x,_,z) => (-z,x+d12,x+d12), //1826 +(x,_,z) => (-z,-x+d12,x+d12), //1827 +(x,y,z) => (z,-x+d12,y+d12), //1828 +(x,y,z) => (z,-x+d12,-y+d12), //1829 +(x,y,z) => (-z,x+d12,y+d12), //1830 +(x,y,z) => (-z,x+d12,-y+d12), //1831 +(x,y,z) => (-z,-x+d12,y+d12), //1832 +(x,y,z) => (z,-x+d14,-y+d14), //1833 +(x,y,z) => (-z,x+d34,y+d34), //1834 +(_,y,z) => (z,y,0), //1835 +(_,y,z) => (z,-y,0), //1836 +(_,y,z) => (-z,y,0), //1837 +(_,y,z) => (-z,-y,0), //1838 +(_,y,z) => (z,y,d12), //1839 +(_,y,z) => (z,-y,d12), //1840 +(_,y,z) => (-z,y,d12), //1841 +(_,y,z) => (-z,-y,d12), //1842 +(x,y,z) => (z,y,x), //1843 +(x,y,z) => (z,y,-x), //1844 +(x,y,z) => (z,-y,x), //1845 +(x,y,z) => (z,-y,-x), //1846 +(x,y,z) => (-z,y,x), //1847 +(x,y,z) => (-z,y,-x), //1848 +(x,y,z) => (-z,-y,x), //1849 +(x,y,z) => (-z,-y,-x), //1850 +(x,y,z) => (z,y,-x+d12), //1851 +(x,y,z) => (z,-y,-x+d12), //1852 +(x,y,z) => (-z,-y,x+d12), //1853 +(x,y,z) => (z,-y+d12,x), //1854 +(x,y,z) => (-z,y+d12,-x), //1855 +(x,y,z) => (-z,-y+d12,x), //1856 +(x,y,z) => (z,-y+d12,-x+d12), //1857 +(x,y,z) => (-z,y+d12,x+d12), //1858 +(x,y,z) => (-z,y+d12,-x+d12), //1859 +(x,y,z) => (z,-y+d14,-x+d34), //1860 +(x,y,z) => (-z,y+d34,x+d14), //1861 +(x,_,z) => (z+d12,-x,x+d12), //1862 +(x,_,z) => (z+d12,-x,-x+d12), //1863 +(x,_,z) => (-z+d12,x,-x+d12), //1864 +(x,y,z) => (z+d12,x,-y+d12), //1865 +(x,y,z) => (z+d12,-x,y+d12), //1866 +(x,y,z) => (z+d12,-x,-y+d12), //1867 +(x,y,z) => (-z+d12,x,-y+d12), //1868 +(x,y,z) => (-z+d12,-x,y+d12), //1869 +(x,_,z) => (z+d12,x+d12,-x), //1870 +(x,_,z) => (-z+d12,x+d12,-x), //1871 +(x,_,z) => (-z+d12,-x+d12,x), //1872 +(x,_,z) => (z+d12,x+d12,-x+d12), //1873 +(x,_,z) => (z+d12,-x+d12,x+d12), //1874 +(x,_,z) => (-z+d12,x+d12,x+d12), //1875 +(x,_,z) => (-z+d12,-x+d12,-x+d12), //1876 +(x,y,z) => (z+d12,x+d12,-y), //1877 +(x,y,z) => (z+d12,-x+d12,-y), //1878 +(x,y,z) => (-z+d12,x+d12,y), //1879 +(x,y,z) => (-z+d12,x+d12,-y), //1880 +(x,y,z) => (-z+d12,-x+d12,y), //1881 +(x,y,z) => (z+d12,x+d12,-y+d12), //1882 +(x,y,z) => (z+d12,-x+d12,y+d12), //1883 +(x,y,z) => (-z+d12,x+d12,y+d12), //1884 +(x,y,z) => (-z+d12,-x+d12,-y+d12), //1885 +(x,y,z) => (z+d12,-x+d14,-y+d34), //1886 +(x,y,z) => (-z+d12,x+d14,y+d34), //1887 +(x,_,z) => (z+d12,-x+d34,-x+d14), //1888 +(x,_,z) => (-z+d12,x+d34,x+d14), //1889 +(x,y,z) => (z+d12,-x+d34,-y+d14), //1890 +(x,y,z) => (-z+d12,x+d34,y+d14), //1891 +(x,y,z) => (z+d12,-y,-x), //1892 +(x,y,z) => (-z+d12,y,x), //1893 +(x,y,z) => (-z+d12,y,-x), //1894 +(x,y,z) => (z+d12,-y,x+d12), //1895 +(x,y,z) => (-z+d12,y,-x+d12), //1896 +(x,y,z) => (-z+d12,-y,x+d12), //1897 +(_,y,z) => (z+d12,y+d12,d12), //1898 +(_,y,z) => (z+d12,-y+d12,d12), //1899 +(_,y,z) => (-z+d12,y+d12,d12), //1900 +(_,y,z) => (-z+d12,-y+d12,d12), //1901 +(x,y,z) => (z+d12,y+d12,-x), //1902 +(x,y,z) => (z+d12,-y+d12,-x), //1903 +(x,y,z) => (-z+d12,-y+d12,x), //1904 +(x,y,z) => (z+d12,y+d12,x+d12), //1905 +(x,y,z) => (z+d12,y+d12,-x+d12), //1906 +(x,y,z) => (z+d12,-y+d12,x+d12), //1907 +(x,y,z) => (z+d12,-y+d12,-x+d12), //1908 +(x,y,z) => (-z+d12,y+d12,x+d12), //1909 +(x,y,z) => (-z+d12,y+d12,-x+d12), //1910 +(x,y,z) => (-z+d12,-y+d12,x+d12), //1911 +(x,y,z) => (-z+d12,-y+d12,-x+d12), //1912 +(x,y,z) => (z+d12,-y+d14,-x+d34), //1913 +(x,y,z) => (-z+d12,y+d34,x+d14), //1914 +(x,y,z) => (-z+d14,x,-y+d14), //1915 +(x,_,z) => (z+d14,-x+d12,x+d34), //1916 +(x,_,z) => (-z+d14,x+d12,-x+d34), //1917 +(x,y,z) => (z+d14,-x+d12,y+d34), //1918 +(x,y,z) => (-z+d14,x+d12,-y+d34), //1919 +(x,_,z) => (-z+d14,-x+d14,-x+d14), //1920 +(x,y,z) => (-z+d14,-x+d14,y), //1921 +(x,y,z) => (z+d14,x+d14,-y+d14), //1922 +(x,y,z) => (z+d14,-x+d14,y+d14), //1923 +(x,y,z) => (-z+d14,x+d14,y+d14), //1924 +(x,y,z) => (-z+d14,-x+d14,-y+d14), //1925 +(x,y,z) => (z+d14,-x+d14,y+d34), //1926 +(x,_,z) => (z+d14,-x+d34,x+d34), //1927 +(x,y,z) => (z+d14,x+d34,-y+d12), //1928 +(x,y,z) => (-z+d14,-x+d34,y+d12), //1929 +(x,y,z) => (-z+d14,x+d34,y+d14), //1930 +(x,y,z) => (z+d14,x+d34,-y+d34), //1931 +(x,y,z) => (z+d14,-y,x+d34), //1932 +(x,y,z) => (z+d14,-y+d12,x+d34), //1933 +(x,y,z) => (z+d14,y+d14,x+d14), //1934 +(x,y,z) => (-z+d14,-y+d14,-x+d14), //1935 +(x,y,z) => (z+d14,-y+d14,x+d34), //1936 +(x,y,z) => (-z+d14,-y+d34,x), //1937 +(x,y,z) => (-z+d14,-y+d34,x+d12), //1938 +(x,y,z) => (-z+d14,y+d34,x+d14), //1939 +(x,y,z) => (z+d14,y+d34,-x+d34), //1940 +(x,y,z) => (z+d14,-y+d34,x+d34), //1941 +(x,y,z) => (-z+d14,-y+d34,x+d34), //1942 +(x,y,z) => (z+d34,-x,y+d34), //1943 +(x,y,z) => (z+d34,-x+d12,y+d14), //1944 +(x,y,z) => (-z+d34,x+d12,-y+d14), //1945 +(x,_,z) => (z+d34,x+d14,-x+d12), //1946 +(x,_,z) => (-z+d34,-x+d14,x+d12), //1947 +(x,_,z) => (z+d34,x+d14,-x+d34), //1948 +(x,y,z) => (z+d34,x+d14,-y+d12), //1949 +(x,y,z) => (-z+d34,-x+d14,y+d12), //1950 +(x,y,z) => (z+d34,x+d14,-y+d14), //1951 +(x,y,z) => (-z+d34,x+d14,y+d34), //1952 +(x,_,z) => (-z+d34,x+d34,x+d14), //1953 +(x,y,z) => (z+d34,x+d34,-y), //1954 +(x,y,z) => (z+d34,-x+d34,y+d14), //1955 +(x,y,z) => (-z+d34,-x+d34,-y+d34), //1956 +(x,y,z) => (-z+d34,y,-x+d14), //1957 +(x,y,z) => (-z+d34,y+d12,-x+d14), //1958 +(x,y,z) => (z+d34,y+d14,-x), //1959 +(x,y,z) => (z+d34,y+d14,-x+d12), //1960 +(x,y,z) => (z+d34,y+d14,-x+d14), //1961 +(x,y,z) => (z+d34,y+d14,-x+d34), //1962 +(x,y,z) => (z+d34,-y+d14,-x+d34), //1963 +(x,y,z) => (-z+d34,y+d14,x+d34), //1964 +(x,y,z) => (z+d34,-y+d34,x+d14), //1965 +(x,y,z) => (-z+d34,y+d34,x+d14), //1966 +(x,y,z) => (-z+d34,y+d34,-x+d14), //1967 +(x,y,z) => (-z+d34,-y+d34,-x+d34) //1968 +#endregion Coordinates + }; + + public static readonly Func[] PositionGeneratorListA, PositionGeneratorListB, PositionGeneratorListC, PositionGeneratorListI; + public static readonly Func[] PositionGeneratorListR1, PositionGeneratorListR2; - Task task3 = Task.Run(() => new string[] + + public static readonly string[] PositionStringList = new string[] { #region CoodStr "0,0,0", @@ -9285,9 +8148,9 @@ static SymmetryStatic() "-z+3/4,y+3/4,-x+1/4", "-z+3/4,-y+3/4,-x+3/4" #endregion CoodStr - }); + }; - Task task4 = Task.Run(() => new ushort[][] + public static readonly ushort[][] OperationDictionary = new ushort[][] { #region OperationDictionary //0 Unknown @@ -10371,9 +9234,497 @@ static SymmetryStatic() //539 F1 new ushort[]{0,}, #endregion - }); - - Task task6 = Task.Run(() => new byte[][] + }; + public static readonly SO[] OperationList + = new SO[] + { + #region OperationList + +new SO(1,+1,(0,0,0),(0,0,0)),//000 +new SO(-1,+1,(0,0,0),(0,0,0)),//001 +new SO(2,+1,(0,1,0),(0,0,0)), +new SO(2,+1,(0,0,1),(0,0,0)), +new SO(2,+1,(1,0,0),(0,0,0)), +new SO(2,+1,(0,1,0),(0,0,d12)), +new SO(2,+1,(0,0,1),(0,0,d12)), +new SO(2,+1,(1,0,0),(0,d12,d14)), +new SO(-2,+1,(0,1,0),(0,0,0)), +new SO(-2,+1,(0,0,1),(0,0,0)), +new SO(-2,+1,(1,0,0),(0,0,0)), +new SO(-2,+1,(0,1,0),(0,0,d12)), +new SO(-2,+1,(0,1,0),(0,d12,d14)), +new SO(-2,+1,(0,1,0),(0,d12,d14)), +new SO(-2,+1,(0,0,1),(0,d12,d14)), +new SO(-2,+1,(0,0,1),(d12,0,d34)), +new SO(-2,+1,(0,0,1),(0,0,d12)), +new SO(-2,+1,(1,0,0),(0,0,d12)), +new SO(-2,+1,(1,0,0),(0,d12,d12)), +new SO(-2,+1,(1,0,0),(0,0,d12)), +new SO(-2,+1,(0,1,0),(0,0,d12)), +new SO(-2,+1,(0,0,1),(0,0,d12)), +new SO(-2,+1,(1,0,0),(0,d12,d14)), +new SO(2,+1,(0,1,0),(0,0,d12)), +new SO(2,+1,(0,1,0),(0,d12,d14)), +new SO(2,+1,(0,1,0),(0,d12,d14)), +new SO(2,+1,(0,0,1),(0,d12,d14)), +new SO(2,+1,(0,0,1),(d12,0,d34)), +new SO(2,+1,(0,0,1),(0,0,d12)), +new SO(2,+1,(1,0,0),(0,0,d12)), +new SO(2,+1,(1,0,0),(0,d12,d12)), +new SO(2,+1,(1,0,0),(0,0,d12)), +new SO(2,+1,(0,1,0),(0,d12,d12)), +new SO(-2,+1,(0,1,0),(0,d12,d12)), +new SO(2,+1,(0,1,0),(d12,0,d34)), +new SO(-2,+1,(0,1,0),(d12,0,d34)), +new SO(2,+1,(0,1,0),(d12,0,d34)), +new SO(-2,+1,(0,1,0),(d12,0,d34)), +new SO(2,+1,(0,0,1),(0,d12,d14)), +new SO(-2,+1,(0,0,1),(0,d12,d14)), +new SO(2,+1,(0,0,1),(d12,0,d34)), +new SO(-2,+1,(0,0,1),(d12,0,d34)), +new SO(2,+1,(0,0,1),(0,d12,d12)), +new SO(-2,+1,(0,0,1),(0,d12,d12)), +new SO(2,+1,(1,0,0),(d12,0,d34)), +new SO(-2,+1,(1,0,0),(d12,0,d34)), +new SO(2,+1,(1,0,0),(d12,0,d34)), +new SO(-2,+1,(1,0,0),(d12,0,d34)), +new SO(2,+1,(1,0,0),(0,d12,d14)), +new SO(-2,+1,(1,0,0),(0,d12,d14)), +new SO(-2,+1,(0,1,0),(d12,0,d34)), +new SO(-2,+1,(1,0,0),(d12,0,d34)), +new SO(-2,+1,(0,0,1),(d12,0,d34)), +new SO(-1,+1,(0,0,0),(d12,0,d34)), +new SO(-1,+1,(0,0,0),(d12,0,d34)), +new SO(-1,+1,(0,0,0),(0,d12,d12)), +new SO(-1,+1,(0,0,0),(0,d12,d14)), +new SO(-1,+1,(0,0,0),(d12,0,d34)), +new SO(2,+1,(0,0,1),(d34,d14,d34)), +new SO(2,+1,(0,1,0),(d14,d14,d34)), +new SO(2,+1,(1,0,0),(0,d12,d14)), +new SO(-2,+1,(0,0,1),(d12,0,d34)), +new SO(-2,+1,(0,1,0),(d12,0,d34)), +new SO(-2,+1,(1,0,0),(0,d14,d14)), +new SO(4,+1,(0,0,1),(0,0,0)), +new SO(4,+1,(0,0,1),(0,0,0)), +new SO(4,+1,(0,0,1),(0,0,d12)), +new SO(4,+1,(0,0,1),(0,0,d12)), +new SO(4,+1,(0,0,1),(0,0,d12)), +new SO(4,+1,(0,0,1),(0,0,d12)), +new SO(4,+1,(0,0,1),(0,0,d12)), +new SO(4,+1,(0,0,1),(0,0,d12)), +new SO(4,+1,(0,0,1),(0,d12,d12)), +new SO(4,+1,(0,0,1),(d12,0,d34)), +new SO(-4,+1,(0,0,1),(0,0,0)), +new SO(-4,+1,(0,0,1),(0,0,0)), +new SO(-4,+1,(0,0,1),(0,0,d12)), +new SO(-4,+1,(0,0,1),(0,0,d12)), +new SO(4,+1,(0,0,1),(d12,0,d34)), +new SO(4,+1,(0,0,1),(d12,0,d34)), +new SO(4,+1,(0,0,1),(0,d12,d14)), +new SO(4,+1,(0,0,1),(0,0,d12)), +new SO(-4,+1,(0,0,1),(0,d12,d14)), +new SO(-4,+1,(0,0,1),(0,0,d12)), +new SO(4,+1,(0,0,1),(d12,0,d34)), +new SO(4,+1,(0,0,1),(d12,0,d34)), +new SO(4,+1,(0,0,1),(0,d12,d12)), +new SO(4,+1,(0,0,1),(0,d12,d14)), +new SO(-4,+1,(0,0,1),(0,d12,d12)), +new SO(-4,+1,(0,0,1),(0,d12,d14)), +new SO(-1,+1,(0,0,0),(0,d12,d12)), +new SO(-2,+1,(0,0,1),(d12,0,d34)), +new SO(-4,+1,(0,0,1),(d12,0,d34)), +new SO(4,+1,(0,0,1),(d14,d14,d34)), +new SO(4,+1,(0,0,1),(0,d14,d34)), +new SO(-4,+1,(0,0,1),(d14,d34,d34)), +new SO(-4,+1,(0,0,1),(d12,0,d34)), +new SO(2,+1,(1,1,0),(0,0,0)), +new SO(2,+1,(1,-1,0),(0,0,0)), +new SO(2,+1,(1,1,0),(0,0,d12)), +new SO(2,+1,(1,-1,0),(0,0,d12)),//100 +new SO(4,+1,(0,0,1),(d12,0,d34)), +new SO(4,+1,(0,0,1),(d12,0,d34)), +new SO(2,+1,(0,1,0),(d12,0,d34)), +new SO(2,+1,(1,0,0),(d12,0,d34)), +new SO(2,+1,(1,-1,0),(0,0,d12)), +new SO(2,+1,(1,1,0),(0,0,d12)), +new SO(2,+1,(1,1,0),(0,0,d12)), +new SO(2,+1,(1,-1,0),(0,0,d12)), +new SO(4,+1,(0,0,1),(d12,0,d34)), +new SO(4,+1,(0,0,1),(d12,0,d34)), +new SO(2,+1,(0,1,0),(d12,0,d34)), +new SO(2,+1,(1,0,0),(d12,0,d34)), +new SO(2,+1,(0,1,0),(d12,0,d34)), +new SO(2,+1,(1,0,0),(0,d12,d12)), +new SO(2,+1,(1,1,0),(d12,0,d34)), +new SO(-2,+1,(1,1,0),(0,0,0)), +new SO(-2,-1,(1,-1,0),(0,0,0)), +new SO(-2,+1,(1,1,0),(d12,0,d34)), +new SO(-2,-1,(1,-1,0),(d12,0,d34)), +new SO(-2,+1,(1,1,0),(0,0,d12)), +new SO(-2,-1,(1,-1,0),(0,0,d12)), +new SO(-2,+1,(1,1,0),(d12,0,d34)), +new SO(-2,-1,(1,-1,0),(d12,0,d34)), +new SO(-2,+1,(1,1,0),(0,d12,d12)), +new SO(-2,-1,(1,-1,0),(d12,0,d34)), +new SO(-2,+1,(1,1,0),(0,d12,d12)), +new SO(-2,-1,(1,-1,0),(0,d12,d14)), +new SO(2,+1,(1,1,0),(d12,0,d34)), +new SO(2,+1,(1,-1,0),(d12,0,d34)), +new SO(2,+1,(1,-1,0),(d12,0,d34)), +new SO(2,+1,(1,0,0),(d12,0,d34)), +new SO(-2,+1,(1,1,0),(d12,0,d34)), +new SO(-4,+1,(0,0,1),(d12,0,d34)), +new SO(-4,+1,(0,0,1),(d12,0,d34)), +new SO(-4,+1,(0,0,1),(d12,0,d34)), +new SO(4,+1,(0,0,1),(0,d12,d14)), +new SO(4,+1,(0,0,1),(0,d12,d12)), +new SO(-4,+1,(0,0,1),(0,d12,d14)), +new SO(-4,+1,(0,0,1),(0,d12,d12)), +new SO(-2,-1,(1,-1,0),(0,d12,d12)), +new SO(4,+1,(0,0,1),(d12,0,d34)), +new SO(4,+1,(0,0,1),(d12,0,d34)), +new SO(2,+1,(1,1,0),(d12,0,d34)), +new SO(2,+1,(1,-1,0),(d12,0,d34)), +new SO(-4,+1,(0,0,1),(d34,d14,d34)), +new SO(-4,+1,(0,0,1),(d34,d34,d14)), +new SO(-2,+1,(1,1,0),(d34,d14,d34)), +new SO(-2,-1,(1,-1,0),(d34,d34,d14)), +new SO(2,+1,(0,1,0),(0,d12,d14)), +new SO(2,+1,(1,0,0),(0,d12,d12)), +new SO(-2,+1,(1,1,0),(0,d12,d14)), +new SO(-2,-1,(1,-1,0),(0,d12,d12)), +new SO(2,+1,(1,1,0),(d14,d34,d34)), +new SO(2,+1,(1,-1,0),(d12,0,d34)), +new SO(-2,+1,(1,1,0),(d14,d14,d34)), +new SO(-2,-1,(1,-1,0),(0,d14,d34)), +new SO(3,+1,(0,0,1),(0,0,0)), +new SO(3,-1,(0,0,1),(0,0,0)), +new SO(3,+1,(0,0,1),(0,0,d12)), +new SO(3,-1,(0,0,1),(0,0,d12)), +new SO(3,+1,(0,0,1),(0,0,d12)), +new SO(3,-1,(0,0,1),(0,0,d12)), +new SO(3,+1,(1,1,1),(0,0,0)), +new SO(3,-1,(1,1,1),(0,0,0)), +new SO(-3,+1,(0,0,1),(0,0,0)), +new SO(-3,-1,(0,0,1),(0,0,0)), +new SO(-3,+1,(1,1,1),(0,0,0)), +new SO(-3,-1,(1,1,1),(0,0,0)), +new SO(2,+1,(1,2,0),(0,0,0)), +new SO(2,+1,(2,1,0),(0,0,0)), +new SO(2,+1,(1,-1,0),(0,0,d12)), +new SO(2,+1,(1,2,0),(0,0,d12)), +new SO(2,+1,(1,0,0),(0,0,d12)), +new SO(2,+1,(0,1,0),(0,0,d12)), +new SO(2,+1,(1,-1,0),(0,0,d12)), +new SO(2,+1,(1,2,0),(0,0,d12)), +new SO(2,+1,(1,0,0),(0,0,d12)), +new SO(2,+1,(0,1,0),(0,0,d12)), +new SO(2,+1,(-1,0,1),(0,0,0)), +new SO(2,+1,(0,-1,1),(0,0,0)), +new SO(-2,+1,(1,2,0),(0,0,0)), +new SO(-2,+1,(2,1,0),(0,0,0)), +new SO(-2,+1,(1,2,0),(0,0,d12)), +new SO(-2,+1,(2,1,0),(0,0,d12)), +new SO(-2,-1,(-1,0,1),(0,0,0)), +new SO(-2,-1,(0,1,-1),(0,0,0)), +new SO(-2,-1,(-1,0,1),(d12,0,d34)), +new SO(-2,-1,(0,1,-1),(d12,0,d34)), +new SO(2,+1,(1,2,0),(0,0,d12)), +new SO(2,+1,(2,1,0),(0,0,d12)), +new SO(2,+1,(-1,0,1),(d12,0,d34)), +new SO(2,+1,(0,-1,1),(d12,0,d34)), +new SO(6,-1,(0,0,1),(0,0,0)), +new SO(6,-1,(0,0,1),(0,0,0)), +new SO(6,-1,(0,0,1),(0,0,d12)), +new SO(6,-1,(0,0,1),(0,0,d12)), +new SO(6,-1,(0,0,1),(0,0,d12)), +new SO(6,-1,(0,0,1),(0,0,d12)), +new SO(6,-1,(0,0,1),(0,0,d12)), +new SO(6,-1,(0,0,1),(0,0,d12)),//200 +new SO(6,-1,(0,0,1),(0,0,d12)), +new SO(6,-1,(0,0,1),(0,0,d12)), +new SO(6,-1,(0,0,1),(0,0,d12)), +new SO(6,-1,(0,0,1),(0,0,d12)), +new SO(-6,-1,(0,0,1),(0,0,0)), +new SO(-6,-1,(0,0,1),(0,0,0)), +new SO(-6,-1,(0,0,1),(0,0,d12)), +new SO(-6,-1,(0,0,1),(0,0,d12)), +new SO(2,+1,(1,1,0),(0,0,d12)), +new SO(2,+1,(1,-1,0),(0,0,d12)), +new SO(2,+1,(2,1,0),(0,0,d12)), +new SO(2,+1,(1,1,0),(0,0,d12)), +new SO(2,+1,(1,-1,0),(0,0,d12)), +new SO(2,+1,(2,1,0),(0,0,d12)), +new SO(2,+1,(2,1,0),(0,0,d12)), +new SO(2,+1,(2,1,0),(0,0,d12)), +new SO(3,+1,(-1,1,-1),(0,0,0)), +new SO(3,+1,(1,-1,-1),(0,0,0)), +new SO(3,+1,(-1,-1,1),(0,0,0)), +new SO(3,-1,(1,-1,-1),(0,0,0)), +new SO(3,-1,(-1,-1,1),(0,0,0)), +new SO(3,-1,(-1,1,-1),(0,0,0)), +new SO(3,+1,(-1,1,-1),(d12,0,d34)), +new SO(3,+1,(1,-1,-1),(0,d12,d14)), +new SO(3,+1,(-1,-1,1),(0,d12,d12)), +new SO(3,-1,(1,-1,-1),(0,d12,d12)), +new SO(3,-1,(-1,-1,1),(d12,0,d34)), +new SO(3,-1,(-1,1,-1),(0,d12,d14)), +new SO(-3,+1,(-1,1,-1),(0,0,0)), +new SO(-3,+1,(1,-1,-1),(0,0,0)), +new SO(-3,+1,(-1,-1,1),(0,0,0)), +new SO(-3,-1,(1,-1,-1),(0,0,0)), +new SO(-3,-1,(-1,-1,1),(0,0,0)), +new SO(-3,-1,(-1,1,-1),(0,0,0)), +new SO(-3,+1,(1,1,1),(d12,0,d34)), +new SO(-3,+1,(-1,1,-1),(d12,0,d34)), +new SO(-3,+1,(1,-1,-1),(d12,0,d34)), +new SO(-3,+1,(-1,-1,1),(d12,0,d34)), +new SO(-3,-1,(1,1,1),(d12,0,d34)), +new SO(-3,-1,(1,-1,-1),(d12,0,d34)), +new SO(-3,-1,(-1,-1,1),(d12,0,d34)), +new SO(-3,-1,(-1,1,-1),(d12,0,d34)), +new SO(3,+1,(-1,1,-1),(0,d12,d12)), +new SO(3,+1,(1,-1,-1),(d12,0,d34)), +new SO(3,+1,(-1,-1,1),(0,d12,d14)), +new SO(3,-1,(1,-1,-1),(0,d12,d14)), +new SO(3,-1,(-1,-1,1),(0,d12,d12)), +new SO(3,-1,(-1,1,-1),(d12,0,d34)), +new SO(-3,+1,(-1,1,-1),(0,d12,d12)), +new SO(-3,+1,(1,-1,-1),(d12,0,d34)), +new SO(-3,+1,(-1,-1,1),(0,d12,d14)), +new SO(-3,-1,(1,-1,-1),(0,d12,d14)), +new SO(-3,-1,(-1,-1,1),(0,d12,d12)), +new SO(-3,-1,(-1,1,-1),(d12,0,d34)), +new SO(-3,+1,(1,1,1),(d12,0,d34)), +new SO(-3,+1,(-1,1,-1),(d12,0,d34)), +new SO(-3,+1,(1,-1,-1),(d12,0,d34)), +new SO(-3,+1,(-1,-1,1),(d12,0,d34)), +new SO(-3,-1,(1,1,1),(d12,0,d34)), +new SO(-3,-1,(1,-1,-1),(d12,0,d34)), +new SO(-3,-1,(-1,-1,1),(d12,0,d34)), +new SO(-3,-1,(-1,1,-1),(d12,0,d34)), +new SO(3,+1,(-1,1,-1),(0,d12,d14)), +new SO(3,+1,(1,-1,-1),(d34,d14,d34)), +new SO(3,+1,(-1,-1,1),(d14,d14,d34)), +new SO(3,-1,(1,-1,-1),(d14,d14,d34)), +new SO(3,-1,(-1,-1,1),(0,d12,d14)), +new SO(3,-1,(-1,1,-1),(d34,d14,d34)), +new SO(-3,+1,(-1,1,-1),(0,d14,d14)), +new SO(-3,+1,(1,-1,-1),(d12,0,d34)), +new SO(-3,+1,(-1,-1,1),(d12,0,d34)), +new SO(-3,-1,(1,-1,-1),(d12,0,d34)), +new SO(-3,-1,(-1,-1,1),(0,d14,d14)), +new SO(-3,-1,(-1,1,-1),(d12,0,d34)), +new SO(-3,+1,(-1,1,-1),(d12,0,d34)), +new SO(-3,+1,(1,-1,-1),(0,d12,d14)), +new SO(-3,+1,(-1,-1,1),(0,d12,d12)), +new SO(-3,-1,(1,-1,-1),(0,d12,d12)), +new SO(-3,-1,(-1,-1,1),(d12,0,d34)), +new SO(-3,-1,(-1,1,-1),(0,d12,d14)), +new SO(4,-1,(1,0,0),(0,0,0)), +new SO(2,+1,(0,1,1),(0,0,0)), +new SO(4,+1,(1,0,0),(0,0,0)), +new SO(4,+1,(0,1,0),(0,0,0)), +new SO(2,+1,(1,0,1),(0,0,0)), +new SO(4,+1,(0,1,0),(0,0,0)), +new SO(4,-1,(1,0,0),(d12,0,d34)), +new SO(2,+1,(0,1,1),(d12,0,d34)), +new SO(4,+1,(1,0,0),(d12,0,d34)), +new SO(4,+1,(0,1,0),(d12,0,d34)), +new SO(2,+1,(1,0,1),(d12,0,d34)), +new SO(4,+1,(0,1,0),(d12,0,d34)), +new SO(3,+1,(-1,1,-1),(0,d12,d14)), +new SO(3,+1,(1,-1,-1),(0,d12,d12)), +new SO(3,+1,(-1,-1,1),(d12,0,d34)), +new SO(3,-1,(1,-1,-1),(d12,0,d34)), +new SO(3,-1,(-1,-1,1),(0,d12,d14)), +new SO(3,-1,(-1,1,-1),(0,d12,d12)), +new SO(2,+1,(1,1,0),(d34,d14,d34)), +new SO(4,+1,(0,0,1),(d14,d34,d34)),//300 +new SO(4,+1,(0,0,1),(d34,d34,d14)), +new SO(4,-1,(1,0,0),(d34,d14,d34)), +new SO(2,+1,(0,1,1),(d34,d34,d14)), +new SO(2,+1,(0,-1,1),(d12,0,d34)), +new SO(4,+1,(1,0,0),(d14,d34,d34)), +new SO(4,+1,(0,1,0),(d34,d14,d34)), +new SO(2,+1,(1,0,1),(d14,d34,d34)), +new SO(4,+1,(0,1,0),(d34,d34,d14)), +new SO(2,+1,(-1,0,1),(d12,0,d34)), +new SO(4,+1,(0,0,1),(d34,d34,d14)), +new SO(4,+1,(0,0,1),(d34,d14,d34)), +new SO(4,-1,(1,0,0),(d14,d34,d34)), +new SO(2,+1,(0,1,1),(d34,d14,d34)), +new SO(4,+1,(1,0,0),(d34,d34,d14)), +new SO(4,+1,(0,1,0),(d14,d34,d34)), +new SO(2,+1,(1,0,1),(d34,d34,d14)), +new SO(4,+1,(0,1,0),(d34,d14,d34)), +new SO(2,+1,(1,1,0),(d14,d14,d34)), +new SO(2,+1,(1,-1,0),(0,d14,d34)), +new SO(4,-1,(1,0,0),(d14,d14,d34)), +new SO(2,+1,(0,1,1),(d12,0,d34)), +new SO(2,+1,(0,-1,1),(0,d14,d34)), +new SO(4,+1,(1,0,0),(d12,0,d34)), +new SO(4,+1,(0,1,0),(d14,d14,d34)), +new SO(2,+1,(1,0,1),(d12,0,d34)), +new SO(4,+1,(0,1,0),(d12,0,d34)), +new SO(2,+1,(-1,0,1),(0,d14,d34)), +new SO(-4,+1,(1,0,0),(0,0,0)), +new SO(-4,-1,(1,0,0),(0,0,0)), +new SO(-2,-1,(0,1,1),(0,0,0)), +new SO(-4,+1,(0,1,0),(0,0,0)), +new SO(-2,+1,(1,0,1),(0,0,0)), +new SO(-4,+1,(0,1,0),(0,0,0)), +new SO(-4,+1,(1,0,0),(d12,0,d34)), +new SO(-4,-1,(1,0,0),(d12,0,d34)), +new SO(-2,-1,(0,1,1),(d12,0,d34)), +new SO(-4,+1,(0,1,0),(d12,0,d34)), +new SO(-2,+1,(1,0,1),(d12,0,d34)), +new SO(-4,+1,(0,1,0),(d12,0,d34)), +new SO(-2,-1,(1,-1,0),(d12,0,d34)), +new SO(-2,+1,(1,1,0),(d14,d34,d34)), +new SO(-2,-1,(0,1,-1),(d12,0,d34)), +new SO(-4,+1,(1,0,0),(d34,d34,d14)), +new SO(-4,-1,(1,0,0),(d14,d34,d34)), +new SO(-2,-1,(0,1,1),(d34,d14,d34)), +new SO(-2,-1,(-1,0,1),(d12,0,d34)), +new SO(-4,+1,(0,1,0),(d34,d14,d34)), +new SO(-2,+1,(1,0,1),(d34,d34,d14)), +new SO(-4,+1,(0,1,0),(d14,d34,d34)), +new SO(4,-1,(1,0,0),(0,0,d12)), +new SO(2,+1,(0,1,1),(0,d12,d14)), +new SO(4,+1,(1,0,0),(0,0,d12)), +new SO(4,+1,(0,1,0),(0,0,d12)), +new SO(2,+1,(1,0,1),(0,0,d12)), +new SO(4,+1,(0,1,0),(0,d12,d14)), +new SO(-4,-1,(1,0,0),(0,0,d12)), +new SO(-2,-1,(0,1,1),(0,d12,d14)), +new SO(-4,+1,(1,0,0),(0,0,d12)), +new SO(-4,+1,(0,1,0),(0,0,d12)), +new SO(-2,+1,(1,0,1),(0,0,d12)), +new SO(-4,+1,(0,1,0),(0,d12,d14)), +new SO(4,-1,(1,0,0),(d12,0,d34)), +new SO(2,+1,(0,1,1),(0,d12,d12)), +new SO(4,+1,(1,0,0),(0,d12,d14)), +new SO(4,+1,(0,1,0),(d12,0,d34)), +new SO(2,+1,(1,0,1),(0,d12,d14)), +new SO(4,+1,(0,1,0),(0,d12,d12)), +new SO(-4,-1,(1,0,0),(d12,0,d34)), +new SO(-2,-1,(0,1,1),(0,d12,d12)), +new SO(-4,+1,(1,0,0),(0,d12,d14)), +new SO(-4,+1,(0,1,0),(d12,0,d34)), +new SO(-2,+1,(1,0,1),(0,d12,d14)), +new SO(-4,+1,(0,1,0),(0,d12,d12)), +new SO(-2,+1,(0,0,1),(d14,d34,d34)), +new SO(-2,+1,(0,1,0),(d34,d34,d14)), +new SO(-2,+1,(1,0,0),(d34,d14,d34)), +new SO(-3,+1,(-1,1,-1),(d34,d14,d34)), +new SO(-3,+1,(1,-1,-1),(d14,d34,d34)), +new SO(-3,+1,(-1,-1,1),(d34,d34,d14)), +new SO(-3,-1,(1,-1,-1),(d34,d34,d14)), +new SO(-3,-1,(-1,-1,1),(d34,d14,d34)), +new SO(-3,-1,(-1,1,-1),(d14,d34,d34)), +new SO(-2,+1,(1,1,0),(0,d12,d14)), +new SO(-4,-1,(1,0,0),(0,d12,d14)), +new SO(-2,-1,(0,1,1),(d12,0,d34)), +new SO(-4,+1,(1,0,0),(0,d12,d12)), +new SO(-4,+1,(0,1,0),(0,d12,d14)), +new SO(-2,+1,(1,0,1),(0,d12,d12)), +new SO(-4,+1,(0,1,0),(d12,0,d34)), +new SO(2,+1,(0,0,1),(d14,d14,d34)), +new SO(2,+1,(0,1,0),(d12,0,d34)), +new SO(2,+1,(1,0,0),(d12,0,d34)), +new SO(3,+1,(-1,1,-1),(d12,0,d34)), +new SO(3,+1,(1,-1,-1),(d14,d14,d34)), +new SO(3,+1,(-1,-1,1),(d12,0,d34)), +new SO(3,-1,(1,-1,-1),(d12,0,d34)), +new SO(3,-1,(-1,-1,1),(d12,0,d34)), +new SO(3,-1,(-1,1,-1),(d14,d14,d34)), +new SO(2,+1,(1,1,0),(d14,d14,d34)), +new SO(4,+1,(0,0,1),(d12,0,d34)),//400 +new SO(4,+1,(0,0,1),(d12,0,d34)), +new SO(4,-1,(1,0,0),(d14,d14,d34)), +new SO(2,+1,(0,1,1),(d12,0,d34)), +new SO(4,+1,(1,0,0),(d12,0,d34)), +new SO(4,+1,(0,1,0),(d14,d14,d34)), +new SO(2,+1,(1,0,1),(d12,0,d34)), +new SO(4,+1,(0,1,0),(d12,0,d34)), +new SO(-2,+1,(0,0,1),(d12,0,d34)), +new SO(-2,+1,(0,1,0),(d14,d14,d34)), +new SO(-2,+1,(1,0,0),(d12,0,d34)), +new SO(-3,+1,(-1,1,-1),(d12,0,d34)), +new SO(-3,+1,(1,-1,-1),(d12,0,d34)), +new SO(-3,+1,(-1,-1,1),(d14,d14,d34)), +new SO(-3,-1,(1,-1,-1),(d14,d14,d34)), +new SO(-3,-1,(-1,-1,1),(d12,0,d34)), +new SO(-3,-1,(-1,1,-1),(d12,0,d34)), +new SO(-2,+1,(1,1,0),(d12,0,d34)), +new SO(-4,+1,(0,0,1),(d14,d14,d34)), +new SO(-4,+1,(0,0,1),(d12,0,d34)), +new SO(-4,-1,(1,0,0),(d12,0,d34)), +new SO(-2,-1,(0,1,1),(d12,0,d34)), +new SO(-4,+1,(1,0,0),(d14,d14,d34)), +new SO(-4,+1,(0,1,0),(d12,0,d34)), +new SO(-2,+1,(1,0,1),(d14,d14,d34)), +new SO(-4,+1,(0,1,0),(d12,0,d34)), +new SO(-1,+1,(0,0,0),(0,d14,d34)), +new SO(-2,+1,(0,0,1),(d14,d14,d34)), +new SO(-2,+1,(0,1,0),(d12,0,d34)), +new SO(-2,+1,(1,0,0),(d12,0,d34)), +new SO(-3,+1,(1,1,1),(0,d14,d34)), +new SO(-3,+1,(-1,1,-1),(d12,0,d34)), +new SO(-3,+1,(1,-1,-1),(d14,d14,d34)), +new SO(-3,+1,(-1,-1,1),(d12,0,d34)), +new SO(-3,-1,(1,1,1),(0,d14,d34)), +new SO(-3,-1,(1,-1,-1),(d12,0,d34)), +new SO(-3,-1,(-1,-1,1),(d12,0,d34)), +new SO(-3,-1,(-1,1,-1),(d14,d14,d34)), +new SO(-2,+1,(1,1,0),(0,0,d12)), +new SO(-4,+1,(0,0,1),(0,d12,d14)), +new SO(-4,-1,(1,0,0),(0,0,d12)), +new SO(-2,-1,(0,1,1),(0,0,d12)), +new SO(-4,+1,(1,0,0),(0,d12,d14)), +new SO(-4,+1,(0,1,0),(0,0,d12)), +new SO(-2,+1,(1,0,1),(0,d12,d14)), +new SO(-4,+1,(0,1,0),(0,0,d12)), +new SO(2,+1,(0,0,1),(d12,0,d34)), +new SO(2,+1,(0,1,0),(d14,d14,d34)), +new SO(2,+1,(1,0,0),(d12,0,d34)), +new SO(3,+1,(-1,1,-1),(d12,0,d34)), +new SO(3,+1,(1,-1,-1),(d12,0,d34)), +new SO(3,+1,(-1,-1,1),(d14,d14,d34)), +new SO(3,-1,(1,-1,-1),(d14,d14,d34)), +new SO(3,-1,(-1,-1,1),(d12,0,d34)), +new SO(3,-1,(-1,1,-1),(d12,0,d34)), +new SO(2,+1,(1,1,0),(d14,d14,d34)), +new SO(4,+1,(0,0,1),(d12,0,d34)), +new SO(4,+1,(0,0,1),(0,d12,d14)), +new SO(4,-1,(1,0,0),(d14,d14,d34)), +new SO(2,+1,(0,1,1),(0,d12,d14)), +new SO(4,+1,(1,0,0),(d12,0,d34)), +new SO(4,+1,(0,1,0),(d14,d14,d34)), +new SO(2,+1,(1,0,1),(d12,0,d34)), +new SO(4,+1,(0,1,0),(0,d12,d14)), +new SO(-2,+1,(0,0,1),(d14,d14,d34)), +new SO(-2,+1,(0,1,0),(d12,0,d34)), +new SO(-2,+1,(1,0,0),(d12,0,d34)), +new SO(-3,+1,(-1,1,-1),(d12,0,d34)), +new SO(-3,+1,(1,-1,-1),(d14,d14,d34)), +new SO(-3,+1,(-1,-1,1),(d12,0,d34)), +new SO(-3,-1,(1,-1,-1),(d12,0,d34)), +new SO(-3,-1,(-1,-1,1),(d12,0,d34)), +new SO(-3,-1,(-1,1,-1),(d14,d14,d34)), +new SO(-2,+1,(1,1,0),(d12,0,d34)), +new SO(-4,+1,(0,0,1),(d14,d14,d34)), +new SO(-4,+1,(0,0,1),(0,d12,d14)), +new SO(-4,-1,(1,0,0),(d12,0,d34)), +new SO(-2,-1,(0,1,1),(0,d12,d14)), +new SO(-4,+1,(1,0,0),(d14,d14,d34)), +new SO(-4,+1,(0,1,0),(d12,0,d34)), +new SO(-2,+1,(1,0,1),(d14,d14,d34)), +new SO(-4,+1,(0,1,0),(0,d12,d14)), + #endregion + }; + public static readonly byte[][] SiteSymmetryDictionary = new byte[][] { #region siteSymmetry //0 unk @@ -11457,12 +10808,716 @@ static SymmetryStatic() //539 F 1 new byte[]{0} #endregion - }); + }; + public static readonly string[] SiteSymmetryList = new string[] + { + #region siteSymmetryList +"1", +"-1", +"2", +"m", +"2/m", +"..2", +".2.", +"2..", +"222", +"m..", +".m.", +"mm2", +"..m", +"m2m", +"2mm", +"mmm", +"..2/m", +".2/m.", +"2/m..", +"4..", +"-4..", +"4/m..", +"222.", +"422", +"2.22", +"2mm.", +"4mm", +"2.mm", +"-42m", +"-4m2", +"m2m.", +"m.2m", +"mmm.", +"4/mmm", +"m.mm", +"3..", +"3.", +"-3..", +"-3.", +"3.2", +"32.", +".2", +"32", +"3m.", +"3.m", +".m", +"3m", +"-3.m", +"-3m.", +".2/m", +"-3m", +"6..", +"-6..", +"6/m..", +"622", +"6mm", +"-6m2", +"-62m", +"6/mmm", +".3.", +"222..", +"23.", +"mm2..", +"mmm..", +"m-3.", +".-3.", +"42.2", +"432", +".32", +".3m", +"-42.m", +"-43m", +"m.m2", +"4m.m", +"4/mm.m", +"m-3m", +"-4m.2", +".-3m" + #endregion + }; + public static readonly ushort[][][] BelongingNumberOfSymmetry = new ushort[][][]{ + #region BelongingNumberOfSymmetry + new ushort[][]{//unknown + new ushort[]{0} + }, + //triclinic + new ushort[][]{ + new ushort[]{1,536,537,538,539}, + new ushort[]{2,533,534,531,532,535} + }, + //mono + new ushort[][]{ + new ushort[]{3,4,5,6,7,8,9,10,11,12,13,14,15,16,17}, + new ushort[]{18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56}, + new ushort[]{57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107} + }, + //ortho + new ushort[][]{ + new ushort[]{108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124}, + new ushort[]{125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226}, + new ushort[]{227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348} + }, + //tetra + new ushort[][]{ + new ushort[]{349,350,351,352,353,354}, + new ushort[]{355,356}, + new ushort[]{357,358,359,360,361,362,363,364,365}, + new ushort[]{366,367,368,369,370,371,372,373,374,375}, + new ushort[]{376,377,378,379,380,381,382,383,384,385,386,387}, + new ushort[]{388,389,390,391,392,393,394,395,396,397,398,399}, + new ushort[]{400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429} + }, + //trigonal + new ushort[][]{ + new ushort[]{430,431,432,433,434}, + new ushort[]{435,436,437}, + new ushort[]{438,439,440,441,442,443,444,445}, + new ushort[]{446,447,448,449,450,451,452,453}, + new ushort[]{454,455,456,457,458,459,460,461} + }, + //hexa + new ushort[][]{ + new ushort[]{462,463,464,465,466,467}, + new ushort[]{468}, + new ushort[]{469,470}, + new ushort[]{471,472,473,474,475,476}, + new ushort[]{477,478,479,480}, + new ushort[]{481,482,483,484}, + new ushort[]{485,486,487,488} + }, + //cubic + new ushort[][]{ + new ushort[]{489,490,491,492,493}, + new ushort[]{494,495,496,497,498,499,500,501,502}, + new ushort[]{503,504,505,506,507,508,509,510}, + new ushort[]{511,512,513,514,515,516}, + new ushort[]{517,518,519,520,521,522,523,524,525,526,527,528,529,530} + } + #endregion + }; + + public static readonly Symmetry[] Symmetries; + + /// + /// WyckoffPositions[i][j]: 通し番号がi番目の空間群のj番目のワイコフ位置 + /// + public static readonly WyckoffPosition[][] WyckoffPositions; + + /// + /// 0:extra表記 1:SF表記 2 Hall表記 3:HM表記 4HM表記full 5:主軸 6 :格子タイプ + /// 7:1軸平行操作 8:1軸垂直操作, 9:2軸平行操作, 10:2軸垂直操作, 11:3軸平行操作, 12:3軸垂直操作 + /// 13:点群名前HM, 14:点群名前SF, 15:ラウエ, 16:結晶系 + /// + public static readonly string[][] StrArray = new string[][] + { + #region StrArray +new[]{"","Unknown","Unknown","Unknown","Unknown","","Unknown","Unknown","Unknown","Unknown","Unknown","Unknown","Unknown","Unknown","Unknown","Unknown","Unknown"}, +new[]{"","C1^1","P1","P1","P1","","P","1","","1","","1","","1","C1","-1",t}, +new[]{"","Ci^1","-P1","P-1","P-1","","P","-1","","1","","1","","-1","Ci","-1",t}, +new[]{"b","C2^1","P2y","P2=P121","P121","b","P","1","","2","","1","","2","C2","2/m",m}, +new[]{"c","C2^1","P2","P2=P112","P112","c","P","1","","1","","2","","2","C2","2/m",m}, +new[]{"a","C2^1","P2x","P2=P211","P211","a","P","2","","1","","1","","2","C2","2/m",m}, +new[]{"b","C2^2","P2yb","P2sub1=P12sub11","P12sub11","b","P","1","","2s1","","1","","2","C2","2/m",m}, +new[]{"c","C2^2","P2c","P2sub1=P112sub1","P112sub1","c","P","1","","1","","2s1","","2","C2","2/m",m}, +new[]{"a","C2^2","P2xa","P2sub1=P2sub111","P2sub111","a","P","2s1","","1","","1","","2","C2","2/m",m}, +new[]{"b1","C2^3","C2y","C2=C121","C121","b","C","1","","2","","1","","2","C2","2/m",m}, +new[]{"b2","C2^3","A2y","C2=A121","A121","b","A","1","","2","","1","","2","C2","2/m",m}, +new[]{"b3","C2^3","I2y","C2=I121","I121","b","I","1","","2","","1","","2","C2","2/m",m}, +new[]{"c1","C2^3","A2","C2=A112","A112","c","A","1","","1","","2","","2","C2","2/m",m}, +new[]{"c2","C2^3","B2","C2=B112=B2","B112","c","B","1","","1","","2","","2","C2","2/m",m}, +new[]{"c3","C2^3","I2","C2=I112","I112","c","I","1","","1","","2","","2","C2","2/m",m}, +new[]{"a1","C2^3","B2x","C2=B211","B211","a","B","2","","1","","1","","2","C2","2/m",m}, +new[]{"a2","C2^3","C2x","C2=C211","C211","a","C","2","","1","","1","","2","C2","2/m",m}, +new[]{"a3","C2^3","I2x","C2=I211","I211","a","I","2","","1","","1","","2","C2","2/m",m}, +new[]{"b","Cs^1","P-2y","Pm=P1m1","P1m1","b","P","1","","1","m","1","","m","Cs","2/m",m}, +new[]{"c","Cs^1","P-2","Pm=P11m","P11m","c","P","1","","1","","1","m","m","Cs","2/m",m}, +new[]{"a","Cs^1","P-2x","Pm=Pm11","Pm11","a","P","","m","1","","1","","m","Cs","2/m",m}, +new[]{"b1","Cs^2","P-2yc","Pc=P1c1","P1c1","b","P","1","","","c","1","","m","Cs","2/m",m}, +new[]{"b2","Cs^2","P-2yac","Pc=P1n1","P1n1","b","P","1","","","n","1","","m","Cs","2/m",m}, +new[]{"b3","Cs^2","P-2ya","Pc=P1a1","P1a1","b","P","1","","","a","1","","m","Cs","2/m",m}, +new[]{"c1","Cs^2","P-2a","Pc=P11a","P11a","c","P","1","","1","","","a","m","Cs","2/m",m}, +new[]{"c2","Cs^2","P-2ab","Pc=P11n","P11n","c","P","1","","1","","","n","m","Cs","2/m",m}, +new[]{"c3","Cs^2","P-2b","Pc=P11b=Pb","P11b","c","P","1","","1","","","b","m","Cs","2/m",m}, +new[]{"a1","Cs^2","P-2xb","Pc=Pb11","Pb11","a","P","","b","1","","1","","m","Cs","2/m",m}, +new[]{"a2","Cs^2","P-2xbc","Pc=Pn11","Pn11","a","P","","n","1","","1","","m","Cs","2/m",m}, +new[]{"a3","Cs^2","P-2xc","Pc=Pc11","Pc11","a","P","","c","1","","1","","m","Cs","2/m",m}, +new[]{"b1","Cs^3","C-2y","Cm=C1m1","C1m1","b","C","1","","","m","1","","m","Cs","2/m",m}, +new[]{"b2","Cs^3","A-2y","Cm=A1m1","A1m1","b","A","1","","","m","1","","m","Cs","2/m",m}, +new[]{"b3","Cs^3","I-2y","Cm=I1m1","I1m1","b","I","1","","","m","1","","m","Cs","2/m",m}, +new[]{"c1","Cs^3","A-2","Cm=A11m","A11m","c","A","1","","1","","","m","m","Cs","2/m",m}, +new[]{"c2","Cs^3","B-2","Cm=B11m=Bm","B11m","c","B","1","","1","","","m","m","Cs","2/m",m}, +new[]{"c3","Cs^3","I-2","Cm=I11m","I11m","c","I","1","","1","","","m","m","Cs","2/m",m}, +new[]{"a1","Cs^3","B-2x","Cm=Bm11","Bm11","a","B","","m","1","","1","","m","Cs","2/m",m}, +new[]{"a2","Cs^3","C-2x","Cm=Cm11","Cm11","a","C","","m","1","","1","","m","Cs","2/m",m}, +new[]{"a3","Cs^3","I-2x","Cm=Im11","Im11","a","I","","m","1","","1","","m","Cs","2/m",m}, +new[]{"b1","Cs^4","C-2yc","Cc=C1c1","C1c1","b","C","1","","","c","1","","m","Cs","2/m",m}, +new[]{"b2","Cs^4","A-2yac","Cc=A1n1","A1n1","b","A","1","","","n","1","","m","Cs","2/m",m}, +new[]{"b3","Cs^4","I-2ya","Cc=I1a1","I1a1","b","I","1","","","a","1","","m","Cs","2/m",m}, +new[]{"-b1","Cs^4","A-2ya","Cc=A1a1","A1a1","b","A","1","","","a","1","","m","Cs","2/m",m}, +new[]{"-b2","Cs^4","C-2ybc","Cc=C1n1","C1n1","b","C","1","","","n","1","","m","Cs","2/m",m}, +new[]{"-b3","Cs^4","I-2yc","Cc=I1c1","I1c1","b","I","1","","","c","1","","m","Cs","2/m",m}, +new[]{"c1","Cs^4","A-2a","Cc=A11a","A11a","c","A","1","","1","","","a","m","Cs","2/m",m}, +new[]{"c2","Cs^4","B-2bc","Cc=B11n","B11n","c","B","1","","1","","","n","m","Cs","2/m",m}, +new[]{"c3","Cs^4","I-2b","Cc=I11b","I11b","c","I","1","","1","","","b","m","Cs","2/m",m}, +new[]{"-c1","Cs^4","B-2b","Cc=B11b=Bb","B11b","c","B","1","","1","","","b","m","Cs","2/m",m}, +new[]{"-c2","Cs^4","A-2ac","Cc=A11n","A11n","c","A","1","","1","","","n","m","Cs","2/m",m}, +new[]{"-c3","Cs^4","I-2a","Cc=I11a","I11a","c","I","1","","1","","","a","m","Cs","2/m",m}, +new[]{"a1","Cs^4","B-2xb","Cc=Bb11","Bb11","a","B","","b","1","","1","","m","Cs","2/m",m}, +new[]{"a2","Cs^4","C-2xbc","Cc=Cn11","Cn11","a","C","","n","1","","1","","m","Cs","2/m",m}, +new[]{"a3","Cs^4","I-2xc","Cc=Ic11","Ic11","a","I","","c","1","","1","","m","Cs","2/m",m}, +new[]{"-a1","Cs^4","C-2xc","Cc=Cc11","Cc11","a","C","","c","1","","1","","m","Cs","2/m",m}, +new[]{"-a2","Cs^4","B-2xbc","Cc=Bn11","Bn11","a","B","","n","1","","1","","m","Cs","2/m",m}, +new[]{"-a3","Cs^4","I-2xb","Cc=Ib11","Ib11","a","I","","b","1","","1","","m","Cs","2/m",m}, +new[]{"b","C2h^1","-P2y","P2/m=P12/m1","P12/m1","b","P","1","","2","m","1","","2/m","C2h","2/m",m}, +new[]{"c","C2h^1","-P2","P2/m=P112/m","P112/m","c","P","1","","1","","2","m","2/m","C2h","2/m",m}, +new[]{"a","C2h^1","-P2x","P2/m=P2/m11","P2/m11","a","P","2","m","1","","1","","2/m","C2h","2/m",m}, +new[]{"b","C2h^2","-P2yb","P2sub1/m=P12sub1/m1","P12sub1/m1","b","P","1","","2s1","m","1","","2/m","C2h","2/m",m}, +new[]{"c","C2h^2","-P2c","P2sub1/m=P112sub1/m","P112sub1/m","c","P","1","","1","","2s1","m","2/m","C2h","2/m",m}, +new[]{"a","C2h^2","-P2xa","P2sub1/m=P2sub1/m11","P2sub1/m11","a","P","2s1","m","1","","1","","2/m","C2h","2/m",m}, +new[]{"b1","C2h^3","-C2y","C2/m=C12/m1","C12/m1","b","C","1","","2","m","1","","2/m","C2h","2/m",m}, +new[]{"b2","C2h^3","-A2y","C2/m=A12/m1","A12/m1","b","A","1","","2","m","1","","2/m","C2h","2/m",m}, +new[]{"b3","C2h^3","-I2y","C2/m=I12/m1","I12/m1","b","I","1","","2","m","1","","2/m","C2h","2/m",m}, +new[]{"c1","C2h^3","-A2","C2/m=A112/m","A112/m","c","A","1","","1","","2","m","2/m","C2h","2/m",m}, +new[]{"c2","C2h^3","-B2","C2/m=B112/m=B2/m","B112/m","c","B","1","","1","","2","m","2/m","C2h","2/m",m}, +new[]{"c3","C2h^3","-I2","C2/m=I112/m","I112/m","c","I","1","","1","","2","m","2/m","C2h","2/m",m}, +new[]{"a1","C2h^3","-B2x","C2/m=B2/m11","B2/m11","a","B","2","m","1","","1","","2/m","C2h","2/m",m}, +new[]{"a2","C2h^3","-C2x","C2/m=C2/m11","C2/m11","a","C","2","m","1","","1","","2/m","C2h","2/m",m}, +new[]{"a3","C2h^3","-I2x","C2/m=I2/m11","I2/m11","a","I","2","m","1","","1","","2/m","C2h","2/m",m}, +new[]{"b1","C2h^4","-P2yc","P2/c=P12/c1","P12/c1","b","P","1","","2","c","1","","2/m","C2h","2/m",m}, +new[]{"b2","C2h^4","-P2yac","P2/c=P12/n1","P12/n1","b","P","1","","2","n","1","","2/m","C2h","2/m",m}, +new[]{"b3","C2h^4","-P2ya","P2/c=P12/a1","P12/a1","b","P","1","","2","a","1","","2/m","C2h","2/m",m}, +new[]{"c1","C2h^4","-P2a","P2/c=P112/a","P112/a","c","P","1","","1","","2","a","2/m","C2h","2/m",m}, +new[]{"c2","C2h^4","-P2ab","P2/c=P112/n","P112/n","c","P","1","","1","","2","n","2/m","C2h","2/m",m}, +new[]{"c3","C2h^4","-P2b","P2/c=P112/b=P2/b","P112/b","c","P","1","","1","","2","b","2/m","C2h","2/m",m}, +new[]{"a1","C2h^4","-P2xb","P2/c=P2/b11","P2/b11","a","P","2","b","1","","1","","2/m","C2h","2/m",m}, +new[]{"a2","C2h^4","-P2xbc","P2/c=P2/n11","P2/n11","a","P","2","n","1","","1","","2/m","C2h","2/m",m}, +new[]{"a3","C2h^4","-P2xc","P2/c=P2/c11","P2/c11","a","P","2","c","1","","1","","2/m","C2h","2/m",m}, +new[]{"b1","C2h^5","-P2ybc","P2sub1/c=P12sub1/c1","P12sub1/c1","b","P","1","","2s1","c","1","","2/m","C2h","2/m",m}, +new[]{"b2","C2h^5","-P2yn","P2sub1/c=P12sub1/n1","P12sub1/n1","b","P","1","","2s1","n","1","","2/m","C2h","2/m",m}, +new[]{"b3","C2h^5","-P2yab","P2sub1/c=P12sub1/a1","P12sub1/a1","b","P","1","","2s1","a","1","","2/m","C2h","2/m",m}, +new[]{"c1","C2h^5","-P2ac","P2sub1/c=P112sub1/a","P112sub1/a","c","P","1","","1","","2s1","a","2/m","C2h","2/m",m}, +new[]{"c2","C2h^5","-P2n","P2sub1/c=P112sub1/n","P112sub1/n","c","P","1","","1","","2s1","n","2/m","C2h","2/m",m}, +new[]{"c3","C2h^5","-P2bc","P2sub1/c=P112sub1/b=P2sub1/b","P112sub1/b","c","P","1","","1","","2s1","b","2/m","C2h","2/m",m}, +new[]{"a1","C2h^5","-P2xab","P2sub1/c=P2sub1/b11","P2sub1/b11","a","P","2s1","b","1","","1","","2/m","C2h","2/m",m}, +new[]{"a2","C2h^5","-P2xn","P2sub1/c=P2sub1/n11","P2sub1/n11","a","P","2s1","n","1","","1","","2/m","C2h","2/m",m}, +new[]{"a3","C2h^5","-P2xac","P2sub1/c=P2sub1/c11","P2sub1/c11","a","P","2s1","c","1","","1","","2/m","C2h","2/m",m}, +new[]{"b1","C2h^6","-C2yc","C2/c=C12/c1","C12/c1","b","C","1","","2","c","1","","2/m","C2h","2/m",m}, +new[]{"b2","C2h^6","-A2yac","C2/c=A12/n1","A12/n1","b","A","1","","2","n","1","","2/m","C2h","2/m",m}, +new[]{"b3","C2h^6","-I2ya","C2/c=I12/a1","I12/a1","b","I","1","","2","a","1","","2/m","C2h","2/m",m}, +new[]{"-b1","C2h^6","-A2ya","C2/c=A12/a1","A12/a1","b","A","1","","2","a","1","","2/m","C2h","2/m",m}, +new[]{"-b2","C2h^6","-C2ybc","C2/c=C12/n1","C12/n1","b","C","1","","2","n","1","","2/m","C2h","2/m",m}, +new[]{"-b3","C2h^6","-I2yc","C2/c=I12/c1","I12/c1","b","I","1","","2","c","1","","2/m","C2h","2/m",m}, +new[]{"c1","C2h^6","-A2a","C2/c=A112/a","A112/a","c","A","1","","1","","2","a","2/m","C2h","2/m",m}, +new[]{"c2","C2h^6","-B2bc","C2/c=B112/n","B112/n","c","B","1","","1","","2","n","2/m","C2h","2/m",m}, +new[]{"c3","C2h^6","-I2b","C2/c=I112/b","I112/b","c","I","1","","1","","2","b","2/m","C2h","2/m",m}, +new[]{"-c1","C2h^6","-B2b","C2/c=B112/b=B2/b","B112/b","c","B","1","","1","","2","b","2/m","C2h","2/m",m}, +new[]{"-c2","C2h^6","-A2ac","C2/c=A112/n","A112/n","c","A","1","","1","","2","n","2/m","C2h","2/m",m}, +new[]{"-c3","C2h^6","-I2a","C2/c=I112/a","I112/a","c","I","1","","1","","2","a","2/m","C2h","2/m",m}, +new[]{"a1","C2h^6","-B2xb","C2/c=B2/b11","B2/b11","a","B","2","b","1","","1","","2/m","C2h","2/m",m}, +new[]{"a2","C2h^6","-C2xbc","C2/c=C2/n11","C2/n11","a","C","2","n","1","","1","","2/m","C2h","2/m",m}, +new[]{"a3","C2h^6","-I2xc","C2/c=I2/c11","I2/c11","a","I","2","c","1","","1","","2/m","C2h","2/m",m}, +new[]{"-a1","C2h^6","-C2xc","C2/c=C2/c11","C2/c11","a","C","2","c","1","","1","","2/m","C2h","2/m",m}, +new[]{"-a2","C2h^6","-B2xbc","C2/c=B2/n11","B2/n11","a","B","2","n","1","","1","","2/m","C2h","2/m",m}, +new[]{"-a3","C2h^6","-I2xb","C2/c=I2/b11","I2/b11","a","I","2","b","1","","1","","2/m","C2h","2/m",m}, +new[]{"","D2^1","P22","P222","P222","","P","2","","2","","2","","222","D2","mmm",o}, +new[]{"","D2^2","P2c2","P222sub1","P222sub1","","P","2","","2","","2s1","","222","D2","mmm",o}, +new[]{"cab","D2^2","P2a2a","P2sub122","P2sub122","","P","2s1","","2","","2","","222","D2","mmm",o}, +new[]{"bca","D2^2","P22b","P22sub12","P22sub12","","P","2","","2s1","","2","","222","D2","mmm",o}, +new[]{"","D2^3","P22ab","P2sub12sub12","P2sub12sub12","","P","2s1","","2s1","","2","","222","D2","mmm",o}, +new[]{"cab","D2^3","P2bc2","P22sub12sub1","P22sub12sub1","","P","2","","2s1","","2s1","","222","D2","mmm",o}, +new[]{"bca","D2^3","P2ac2ac","P2sub122sub1","P2sub122sub1","","P","2s1","","2","","2s1","","222","D2","mmm",o}, +new[]{"","D2^4","P2ac2ab","P2sub12sub12sub1","P2sub12sub12sub1","","P","2s1","","2s1","","2s1","","222","D2","mmm",o}, +new[]{"","D2^5","C2c2","C222sub1","C222sub1","","C","2","","2","","2s1","","222","D2","mmm",o}, +new[]{"cab","D2^5","A2a2a","A2sub122","A2sub122","","A","2s1","","2","","2","","222","D2","mmm",o}, +new[]{"bca","D2^5","B22b","B22sub12","B22sub12","","B","2","","2s1","","2","","222","D2","mmm",o}, +new[]{"","D2^6","C22","C222","C222","","C","2","","2","","2","","222","D2","mmm",o}, +new[]{"cab","D2^6","A22","A222","A222","","A","2","","2","","2","","222","D2","mmm",o}, +new[]{"bca","D2^6","B22","B222","B222","","B","2","","2","","2","","222","D2","mmm",o}, +new[]{"","D2^7","F22","F222","F222","","F","2","","2","","2","","222","D2","mmm",o}, +new[]{"","D2^8","I22","I222","I222","","I","2","","2","","2","","222","D2","mmm",o}, +new[]{"","D2^9","I2b2c","I2sub12sub12sub1","I2sub12sub12sub1","","I","2s1","","2s1","","2s1","","222","D2","mmm",o}, +new[]{"","C2v^1","P2-2","Pmm2","Pmm2","","P","","m","","m","2","","mm2","C2v","mmm",o}, +new[]{"cab","C2v^1","P-22","P2mm","P2mm","","P","2","","","m","","m","mm2","C2v","mmm",o}, +new[]{"bca","C2v^1","P-2-2","Pm2m","Pm2m","","P","","m","2","","","m","mm2","C2v","mmm",o}, +new[]{"","C2v^2","P2c-2","Pmc2sub1","Pmc2sub1","","P","","m","","c","2s1","","mm2","C2v","mmm",o}, +new[]{"ba-c","C2v^2","P2c-2c","Pcm2sub1","Pcm2sub1","","P","","c","","m","2s1","","mm2","C2v","mmm",o}, +new[]{"cab","C2v^2","P-2a2a","P2sub1ma","P2sub1ma","","P","2s1","","","m","","a","mm2","C2v","mmm",o}, +new[]{"-cba","C2v^2","P-22a","P2sub1am","P2sub1am","","P","2s1","","","a","","m","mm2","C2v","mmm",o}, +new[]{"bca","C2v^2","P-2-2b","Pb2sub1m","Pb2sub1m","","P","","b","2s1","","","m","mm2","C2v","mmm",o}, +new[]{"a-cb","C2v^2","P-2b-2","Pm2sub1b","Pm2sub1b","","P","","m","2s1","","","b","mm2","C2v","mmm",o}, +new[]{"","C2v^3","P2-2c","Pcc2","Pcc2","","P","","c","","c","2","","mm2","C2v","mmm",o}, +new[]{"cab","C2v^3","P-2a2","P2aa","P2aa","","P","2","","","a","","a","mm2","C2v","mmm",o}, +new[]{"bca","C2v^3","P-2b-2b","Pb2b","Pb2b","","P","","b","2","","","b","mm2","C2v","mmm",o}, +new[]{"","C2v^4","P2-2a","Pma2","Pma2","","P","","m","","a","2","","mm2","C2v","mmm",o}, +new[]{"ba-c","C2v^4","P2-2b","Pbm2","Pbm2","","P","","b","","m","2","","mm2","C2v","mmm",o}, +new[]{"cab","C2v^4","P-2b2","P2mb","P2mb","","P","2","","","m","","b","mm2","C2v","mmm",o}, +new[]{"-cba","C2v^4","P-2c2","P2cm","P2cm","","P","2","","","c","","m","mm2","C2v","mmm",o}, +new[]{"bca","C2v^4","P-2c-2c","Pc2m","Pc2m","","P","","c","2","","","m","mm2","C2v","mmm",o}, +new[]{"a-cb","C2v^4","P-2a-2a","Pm2a","Pm2a","","P","","m","2","","","a","mm2","C2v","mmm",o}, +new[]{"","C2v^5","P2c-2ac","Pca2sub1","Pca2sub1","","P","","c","","a","2s1","","mm2","C2v","mmm",o}, +new[]{"ba-c","C2v^5","P2c-2b","Pbc2sub1","Pbc2sub1","","P","","b","","c","2s1","","mm2","C2v","mmm",o}, +new[]{"cab","C2v^5","P-2b2a","P2sub1ab","P2sub1ab","","P","2s1","","","a","","b","mm2","C2v","mmm",o}, +new[]{"-cba","C2v^5","P-2ac2a","P2sub1ca","P2sub1ca","","P","2s1","","","c","","a","mm2","C2v","mmm",o}, +new[]{"bca","C2v^5","P-2bc-2c","Pc2sub1b","Pc2sub1b","","P","","c","2s1","","","b","mm2","C2v","mmm",o}, +new[]{"a-cb","C2v^5","P-2a-2ab","Pb2sub1a","Pb2sub1a","","P","","b","2s1","","","a","mm2","C2v","mmm",o}, +new[]{"","C2v^6","P2-2bc","Pnc2","Pnc2","","P","","n","","c","2","","mm2","C2v","mmm",o}, +new[]{"ba-c","C2v^6","P2-2ac","Pcn2","Pcn2","","P","","c","","n","2","","mm2","C2v","mmm",o}, +new[]{"cab","C2v^6","P-2ac2","P2na","P2na","","P","2","","","n","","a","mm2","C2v","mmm",o}, +new[]{"-cba","C2v^6","P-2ab2","P2an","P2an","","P","2","","","a","","n","mm2","C2v","mmm",o}, +new[]{"bca","C2v^6","P-2ab-2ab","Pb2n","Pb2n","","P","","b","2","","","n","mm2","C2v","mmm",o}, +new[]{"a-cb","C2v^6","P-2bc-2bc","Pn2b","Pn2b","","P","","n","2","","","b","mm2","C2v","mmm",o}, +new[]{"","C2v^7","P2ac-2","Pmn2sub1","Pmn2sub1","","P","","m","","n","2s1","","mm2","C2v","mmm",o}, +new[]{"ba-c","C2v^7","P2bc-2bc","Pnm2sub1","Pnm2sub1","","P","","n","","m","2s1","","mm2","C2v","mmm",o}, +new[]{"cab","C2v^7","P-2ab2ab","P2sub1mn","P2sub1mn","","P","2s1","","","m","","n","mm2","C2v","mmm",o}, +new[]{"-cba","C2v^7","P-22ac","P2sub1nm","P2sub1nm","","P","2s1","","","n","","m","mm2","C2v","mmm",o}, +new[]{"bca","C2v^7","P-2-2bc","Pn2sub1m","Pn2sub1m","","P","","n","2s1","","","m","mm2","C2v","mmm",o}, +new[]{"a-cb","C2v^7","P-2ab-2","Pm2sub1n","Pm2sub1n","","P","","m","2s1","","","n","mm2","C2v","mmm",o}, +new[]{"","C2v^8","P2-2ab","Pba2","Pba2","","P","","b","","a","2","","mm2","C2v","mmm",o}, +new[]{"cab","C2v^8","P-2bc2","P2cb","P2cb","","P","2","","","c","","b","mm2","C2v","mmm",o}, +new[]{"bca","C2v^8","P-2ac-2ac","Pc2a","Pc2a","","P","","c","2","","","a","mm2","C2v","mmm",o}, +new[]{"","C2v^9","P2c-2n","Pna2sub1","Pna2sub1","","P","","n","","a","2s1","","mm2","C2v","mmm",o}, +new[]{"ba-c","C2v^9","P2c-2ab","Pbn2sub1","Pbn2sub1","","P","","b","","n","2s1","","mm2","C2v","mmm",o}, +new[]{"cab","C2v^9","P-2bc2a","P2sub1nb","P2sub1nb","","P","2s1","","","n","","b","mm2","C2v","mmm",o}, +new[]{"-cba","C2v^9","P-2n2a","P2sub1cn","P2sub1cn","","P","2s1","","","c","","n","mm2","C2v","mmm",o}, +new[]{"bca","C2v^9","P-2n-2ac","Pc2sub1n","Pc2sub1n","","P","","c","2s1","","","n","mm2","C2v","mmm",o}, +new[]{"a-cb","C2v^9","P-2ac-2n","Pn2sub1a","Pn2sub1a","","P","","n","2s1","","","a","mm2","C2v","mmm",o}, +new[]{"","C2v^10","P2-2n","Pnn2","Pnn2","","P","","n","","n","2","","mm2","C2v","mmm",o}, +new[]{"cab","C2v^10","P-2n2","P2nn","P2nn","","P","2","","","n","","n","mm2","C2v","mmm",o}, +new[]{"bca","C2v^10","P-2n-2n","Pn2n","Pn2n","","P","","n","2","","","n","mm2","C2v","mmm",o}, +new[]{"","C2v^11","C2-2","Cmm2","Cmm2","","C","","m","","m","2","","mm2","C2v","mmm",o}, +new[]{"cab","C2v^11","A-22","A2mm","A2mm","","A","2","","","m","","m","mm2","C2v","mmm",o}, +new[]{"bca","C2v^11","B-2-2","Bm2m","Bm2m","","B","","m","2","","","m","mm2","C2v","mmm",o}, +new[]{"","C2v^12","C2c-2","Cmc2sub1","Cmc2sub1","","C","","m","","c","2s1","","mm2","C2v","mmm",o}, +new[]{"ba-c","C2v^12","C2c-2c","Ccm2sub1","Ccm2sub1","","C","","c","","m","2s1","","mm2","C2v","mmm",o}, +new[]{"cab","C2v^12","A-2a2a","A2sub1ma","A2sub1ma","","A","2s1","","","m","","a","mm2","C2v","mmm",o}, +new[]{"-cba","C2v^12","A-22a","A2sub1am","A2sub1am","","A","2s1","","","a","","m","mm2","C2v","mmm",o}, +new[]{"bca","C2v^12","B-2-2b","Bb2sub1m","Bb2sub1m","","B","","b","2s1","","","m","mm2","C2v","mmm",o}, +new[]{"a-cb","C2v^12","B-2b-2","Bm2sub1b","Bm2sub1b","","B","","m","2s1","","","b","mm2","C2v","mmm",o}, +new[]{"","C2v^13","C2-2c","Ccc2","Ccc2","","C","","c","","c","2","","mm2","C2v","mmm",o}, +new[]{"cab","C2v^13","A-2a2","A2aa","A2aa","","A","2","","","a","","a","mm2","C2v","mmm",o}, +new[]{"bca","C2v^13","B-2b-2b","Bb2b","Bb2b","","B","","b","2","","","b","mm2","C2v","mmm",o}, +new[]{"","C2v^14","A2-2","Amm2","Amm2","","A","","m","","m","2","","mm2","C2v","mmm",o}, +new[]{"ba-c","C2v^14","B2-2","Bmm2","Bmm2","","B","","m","","m","2","","mm2","C2v","mmm",o}, +new[]{"cab","C2v^14","B-22","B2mm","B2mm","","B","2","","","m","","m","mm2","C2v","mmm",o}, +new[]{"-cba","C2v^14","C-22","C2mm","C2mm","","C","2","","","m","","m","mm2","C2v","mmm",o}, +new[]{"bca","C2v^14","C-2-2","Cm2m","Cm2m","","C","","m","2","","","m","mm2","C2v","mmm",o}, +new[]{"a-cb","C2v^14","A-2-2","Am2m","Am2m","","A","","m","2","","","m","mm2","C2v","mmm",o}, +new[]{"","C2v^15","A2-2c","Aem2","Aem2","","A","","b","","m","2","","mm2","C2v","mmm",o}, +new[]{"ba-c","C2v^15","B2-2c","Bme2","Bme2","","B","","m","","a","2","","mm2","C2v","mmm",o}, +new[]{"cab","C2v^15","B-2c2","B2em","B2em","","B","2","","","c","","m","mm2","C2v","mmm",o}, +new[]{"-cba","C2v^15","C-2b2","C2me","C2me","","C","2","","","m","","b","mm2","C2v","mmm",o}, +new[]{"bca","C2v^15","C-2b-2b","Cm2e","Cm2e","","C","","m","2","","","a","mm2","C2v","mmm",o}, +new[]{"a-cb","C2v^15","A-2c-2c","Ae2m","Ae2m","","A","","c","2","","","m","mm2","C2v","mmm",o}, +new[]{"","C2v^16","A2-2a","Ama2","Ama2","","A","","m","","a","2","","mm2","C2v","mmm",o}, +new[]{"ba-c","C2v^16","B2-2b","Bbm2","Bbm2","","B","","b","","m","2","","mm2","C2v","mmm",o}, +new[]{"cab","C2v^16","B-2b2","B2mb","B2mb","","B","2","","","m","","b","mm2","C2v","mmm",o}, +new[]{"-cba","C2v^16","C-2c2","C2cm","C2cm","","C","2","","","c","","m","mm2","C2v","mmm",o}, +new[]{"bca","C2v^16","C-2c-2c","Cc2m","Cc2m","","C","","c","2","","","m","mm2","C2v","mmm",o}, +new[]{"a-cb","C2v^16","A-2a-2a","Am2a","Am2a","","A","","m","2","","","a","mm2","C2v","mmm",o}, +new[]{"","C2v^17","A2-2ac","Aea2","Aea2","","A","","b","","a","2","","mm2","C2v","mmm",o}, +new[]{"ba-c","C2v^17","B2-2bc","Bbe2","Bbe2","","B","","b","","a","2","","mm2","C2v","mmm",o}, +new[]{"cab","C2v^17","B-2bc2","B2eb","B2eb","","B","2","","","c","","b","mm2","C2v","mmm",o}, +new[]{"-cba","C2v^17","C-2bc2","C2ce","C2ce","","C","2","","","c","","b","mm2","C2v","mmm",o}, +new[]{"bca","C2v^17","C-2bc-2bc","Cc2e","Cc2e","","C","","c","2","","","a","mm2","C2v","mmm",o}, +new[]{"a-cb","C2v^17","A-2ac-2ac","Ae2a","Ae2a","","A","","c","2","","","a","mm2","C2v","mmm",o}, +new[]{"","C2v^18","F2-2","Fmm2","Fmm2","","F","","m","","m","2","","mm2","C2v","mmm",o}, +new[]{"cab","C2v^18","F-22","F2mm","F2mm","","F","2","","","m","","m","mm2","C2v","mmm",o}, +new[]{"bca","C2v^18","F-2-2","Fm2m","Fm2m","","F","","m","2","","","m","mm2","C2v","mmm",o}, +new[]{"","C2v^19","F2-2d","Fdd2","Fdd2","","F","","d","","d","2","","mm2","C2v","mmm",o}, +new[]{"cab","C2v^19","F-2d2","F2dd","F2dd","","F","2","","","d","","d","mm2","C2v","mmm",o}, +new[]{"bca","C2v^19","F-2d-2d","Fd2d","Fd2d","","F","","d","2","","","d","mm2","C2v","mmm",o}, +new[]{"","C2v^20","I2-2","Imm2","Imm2","","I","","m","","m","2","","mm2","C2v","mmm",o}, +new[]{"cab","C2v^20","I-22","I2mm","I2mm","","I","2","","","m","","m","mm2","C2v","mmm",o}, +new[]{"bca","C2v^20","I-2-2","Im2m","Im2m","","I","","m","2","","","m","mm2","C2v","mmm",o}, +new[]{"","C2v^21","I2-2c","Iba2","Iba2","","I","","b","","a","2","","mm2","C2v","mmm",o}, +new[]{"cab","C2v^21","I-2a2","I2cb","I2cb","","I","2","","","c","","b","mm2","C2v","mmm",o}, +new[]{"bca","C2v^21","I-2b-2b","Ic2a","Ic2a","","I","","c","2","","","a","mm2","C2v","mmm",o}, +new[]{"","C2v^22","I2-2a","Ima2","Ima2","","I","","m","","a","2","","mm2","C2v","mmm",o}, +new[]{"ba-c","C2v^22","I2-2b","Ibm2","Ibm2","","I","","b","","m","2","","mm2","C2v","mmm",o}, +new[]{"cab","C2v^22","I-2b2","I2mb","I2mb","","I","2","","","m","","b","mm2","C2v","mmm",o}, +new[]{"-cba","C2v^22","I-2c2","I2cm","I2cm","","I","2","","","c","","m","mm2","C2v","mmm",o}, +new[]{"bca","C2v^22","I-2c-2c","Ic2m","Ic2m","","I","","c","2","","","m","mm2","C2v","mmm",o}, +new[]{"a-cb","C2v^22","I-2a-2a","Im2a","Im2a","","I","","m","2","","","a","mm2","C2v","mmm",o}, +new[]{"","D2h^1","-P22","Pmmm","P2/m2/m2/m","","P","2","m","2","m","2","m","mmm","D2h","mmm",o}, +new[]{"1","D2h^2","P22-1n","Pnnn(1)","P2/n2/n2/n","","P","2","n","2","n","2","n","mmm","D2h","mmm",o}, +new[]{"2","D2h^2","-P2ab2bc","Pnnn(2)","P2/n2/n2/n","","P","2","n","2","n","2","n","mmm","D2h","mmm",o}, +new[]{"","D2h^3","-P22c","Pccm","P2/c2/c2/m","","P","2","c","2","c","2","m","mmm","D2h","mmm",o}, +new[]{"cab","D2h^3","-P2a2","Pmaa","P2/m2/a2/a","","P","2","m","2","a","2","a","mmm","D2h","mmm",o}, +new[]{"bca","D2h^3","-P2b2b","Pbmb","P2/b2/m2/b","","P","2","b","2","m","2","b","mmm","D2h","mmm",o}, +new[]{"1","D2h^4","P22-1ab","Pban(1)","P2/b2/a2/n","","P","2","b","2","a","2","n","mmm","D2h","mmm",o}, +new[]{"2","D2h^4","-P2ab2b","Pban(2)","P2/b2/a2/n","","P","2","b","2","a","2","n","mmm","D2h","mmm",o}, +new[]{"1cab","D2h^4","P22-1bc","Pncb(1)","P2/n2/c2/b","","P","2","n","2","c","2","b","mmm","D2h","mmm",o}, +new[]{"2cab","D2h^4","-P2b2bc","Pncb(2)","P2/n2/c2/b","","P","2","n","2","c","2","b","mmm","D2h","mmm",o}, +new[]{"1bca","D2h^4","P22-1ac","Pcna(1)","P2/c2/n2/a","","P","2","c","2","n","2","a","mmm","D2h","mmm",o}, +new[]{"2bca","D2h^4","-P2a2c","Pcna(2)","P2/c2/n2/a","","P","2","c","2","n","2","a","mmm","D2h","mmm",o}, +new[]{"","D2h^5","-P2a2a","Pmma","P2sub1/m2/m2/a","","P","2s1","m","2","m","2","a","mmm","D2h","mmm",o}, +new[]{"ba-c","D2h^5","-P2b2","Pmmb","P2/m2sub1/m2/b","","P","2","m","2s1","m","2","b","mmm","D2h","mmm",o}, +new[]{"cab","D2h^5","-P22b","Pbmm","P2/b2sub1/m2/m","","P","2","b","2s1","m","2","m","mmm","D2h","mmm",o}, +new[]{"-cba","D2h^5","-P2c2c","Pcmm","P2/c2/m2sub1/m","","P","2","c","2","m","2s1","m","mmm","D2h","mmm",o}, +new[]{"bca","D2h^5","-P2c2","Pmcm","P2/m2/c2sub1/m","","P","2","m","2","c","2s1","m","mmm","D2h","mmm",o}, +new[]{"a-cb","D2h^5","-P22a","Pmam","P2sub1/m2/a2/m","","P","2s1","m","2","a","2","m","mmm","D2h","mmm",o}, +new[]{"","D2h^6","-P2a2bc","Pnna","P2/n2sub1/n2/a","","P","2","n","2s1","n","2","a","mmm","D2h","mmm",o}, +new[]{"ba-c","D2h^6","-P2b2n","Pnnb","P2sub1/n2/n2/b","","P","2s1","n","2","n","2","b","mmm","D2h","mmm",o}, +new[]{"cab","D2h^6","-P2n2b","Pbnn","P2/b2/n2sub1/n","","P","2","b","2","n","2s1","n","mmm","D2h","mmm",o}, +new[]{"-cba","D2h^6","-P2ab2c","Pcnn","P2/c2sub1/n2/n","","P","2","c","2s1","n","2","n","mmm","D2h","mmm",o}, +new[]{"bca","D2h^6","-P2ab2n","Pncn","P2sub1/n2/c2/n","","P","2s1","n","2","c","2","n","mmm","D2h","mmm",o}, +new[]{"a-cb","D2h^6","-P2n2bc","Pnan","P2/n2/a2sub1/n","","P","2","n","2","a","2s1","n","mmm","D2h","mmm",o}, +new[]{"","D2h^7","-P2ac2","Pmna","P2/m2/n2sub1/a","","P","2","m","2","n","2s1","a","mmm","D2h","mmm",o}, +new[]{"ba-c","D2h^7","-P2bc2bc","Pnmb","P2/n2/m2sub1/b","","P","2","n","2","m","2s1","b","mmm","D2h","mmm",o}, +new[]{"cab","D2h^7","-P2ab2ab","Pbmn","P2sub1/b2/m2/n","","P","2s1","b","2","m","2","n","mmm","D2h","mmm",o}, +new[]{"-cba","D2h^7","-P22ac","Pcnm","P2sub1/c2/n2/m","","P","2s1","c","2","n","2","m","mmm","D2h","mmm",o}, +new[]{"bca","D2h^7","-P22bc","Pncm","P2/n2sub1/c2/m","","P","2","n","2s1","c","2","m","mmm","D2h","mmm",o}, +new[]{"a-cb","D2h^7","-P2ab2","Pman","P2/m2sub1/a2/n","","P","2","m","2s1","a","2","n","mmm","D2h","mmm",o}, +new[]{"","D2h^8","-P2a2ac","Pcca","P2sub1/c2/c2/a","","P","2s1","c","2","c","2","a","mmm","D2h","mmm",o}, +new[]{"ba-c","D2h^8","-P2b2c","Pccb","P2/c2sub1/c2/b","","P","2","c","2s1","c","2","b","mmm","D2h","mmm",o}, +new[]{"cab","D2h^8","-P2a2b","Pbaa","P2/b2sub1/a2/a","","P","2","b","2s1","a","2","a","mmm","D2h","mmm",o}, +new[]{"-cba","D2h^8","-P2ac2c","Pcaa","P2/c2/a2sub1/a","","P","2","c","2","a","2s1","a","mmm","D2h","mmm",o}, +new[]{"bca","D2h^8","-P2bc2b","Pbcb","P2/b2/c2sub1/b","","P","2","b","2","c","2s1","b","mmm","D2h","mmm",o}, +new[]{"a-cb","D2h^8","-P2b2ab","Pbab","P2sub1/b2/a2/b","","P","2s1","b","2","a","2","b","mmm","D2h","mmm",o}, +new[]{"","D2h^9","-P22ab","Pbam","P2sub1/b2sub1/a2/m","","P","2s1","b","2s1","a","2","m","mmm","D2h","mmm",o}, +new[]{"cab","D2h^9","-P2bc2","Pmcb","P2/m2sub1/c2sub1/b","","P","2","m","2s1","c","2s1","b","mmm","D2h","mmm",o}, +new[]{"bca","D2h^9","-P2ac2ac","Pcma","P2sub1/c2/m2sub1/a","","P","2s1","c","2","m","2s1","a","mmm","D2h","mmm",o}, +new[]{"","D2h^10","-P2ab2ac","Pccn","P2sub1/c2sub1/c2/n","","P","2s1","c","2s1","c","2","n","mmm","D2h","mmm",o}, +new[]{"cab","D2h^10","-P2ac2bc","Pnaa","P2/n2sub1/a2sub1/a","","P","2","n","2s1","a","2s1","a","mmm","D2h","mmm",o}, +new[]{"bca","D2h^10","-P2bc2ab","Pbnb","P2sub1/b2/n2sub1/b","","P","2s1","b","2","n","2s1","b","mmm","D2h","mmm",o}, +new[]{"","D2h^11","-P2c2b","Pbcm","P2/b2sub1/c2sub1/m","","P","2","b","2s1","c","2s1","m","mmm","D2h","mmm",o}, +new[]{"ba-c","D2h^11","-P2c2ac","Pcam","P2sub1/c2/a2sub1/m","","P","2s1","c","2","a","2s1","m","mmm","D2h","mmm",o}, +new[]{"cab","D2h^11","-P2ac2a","Pmca","P2sub1/m2/c2sub1/a","","P","2s1","m","2","c","2s1","a","mmm","D2h","mmm",o}, +new[]{"-cba","D2h^11","-P2b2a","Pmab","P2sub1/m2sub1/a2/b","","P","2s1","m","2s1","a","2","b","mmm","D2h","mmm",o}, +new[]{"bca","D2h^11","-P2a2ab","Pbma","P2sub1/b2sub1/m2/a","","P","2s1","b","2s1","m","2","a","mmm","D2h","mmm",o}, +new[]{"a-cb","D2h^11","-P2bc2c","Pcmb","P2/c2sub1/m2sub1/b","","P","2","c","2s1","m","2s1","b","mmm","D2h","mmm",o}, +new[]{"","D2h^12","-P22n","Pnnm","P2sub1/n2sub1/n2/m","","P","2s1","n","2s1","n","2","m","mmm","D2h","mmm",o}, +new[]{"cab","D2h^12","-P2n2","Pmnn","P2/m2sub1/n2sub1/n","","P","2","m","2s1","n","2s1","n","mmm","D2h","mmm",o}, +new[]{"bca","D2h^12","-P2n2n","Pnmn","P2sub1/n2/m2sub1/n","","P","2s1","n","2","m","2s1","n","mmm","D2h","mmm",o}, +new[]{"1","D2h^13","P22ab-1ab","Pmmn(1)","P2sub1/m2sub1/m2/n","","P","2s1","m","2s1","m","2","n","mmm","D2h","mmm",o}, +new[]{"2","D2h^13","-P2ab2a","Pmmn(2)","P2sub1/m2sub1/m2/n","","P","2s1","m","2s1","m","2","n","mmm","D2h","mmm",o}, +new[]{"1cab","D2h^13","P2bc2-1bc","Pnmm(1)","P2/n2sub1/m2sub1/m","","P","2","n","2s1","m","2s1","m","mmm","D2h","mmm",o}, +new[]{"2cab","D2h^13","-P2c2bc","Pnmm(2)","P2/n2sub1/m2sub1/m","","P","2","n","2s1","m","2s1","m","mmm","D2h","mmm",o}, +new[]{"1bca","D2h^13","P2ac2ac-1ac","Pmnm(1)","P2sub1/m2/n2sub1/m","","P","2s1","m","2","n","2s1","m","mmm","D2h","mmm",o}, +new[]{"2bca","D2h^13","-P2c2a","Pmnm(2)","P2sub1/m2/n2sub1/m","","P","2s1","m","2","n","2s1","m","mmm","D2h","mmm",o}, +new[]{"","D2h^14","-P2n2ab","Pbcn","P2sub1/b2/c2sub1/n","","P","2s1","b","2","c","2s1","n","mmm","D2h","mmm",o}, +new[]{"ba-c","D2h^14","-P2n2c","Pcan","P2/c2sub1/a2sub1/n","","P","2","c","2s1","a","2s1","n","mmm","D2h","mmm",o}, +new[]{"cab","D2h^14","-P2a2n","Pnca","P2sub1/n2sub1/c2/a","","P","2s1","n","2s1","c","2","a","mmm","D2h","mmm",o}, +new[]{"-cba","D2h^14","-P2bc2n","Pnab","P2sub1/n2/a2sub1/b","","P","2s1","n","2","a","2s1","b","mmm","D2h","mmm",o}, +new[]{"bca","D2h^14","-P2ac2b","Pbna","P2/b2sub1/n2sub1/a","","P","2","b","2s1","n","2s1","a","mmm","D2h","mmm",o}, +new[]{"a-cb","D2h^14","-P2b2ac","Pcnb","P2sub1/c2sub1/n2/b","","P","2s1","c","2s1","n","2","b","mmm","D2h","mmm",o}, +new[]{"","D2h^15","-P2ac2ab","Pbca","P2sub1/b2sub1/c2sub1/a","","P","2s1","b","2s1","c","2s1","a","mmm","D2h","mmm",o}, +new[]{"ba-c","D2h^15","-P2bc2ac","Pcab","P2sub1/c2sub1/a2sub1/b","","P","2s1","c","2s1","a","2s1","b","mmm","D2h","mmm",o}, +new[]{"","D2h^16","-P2ac2n","Pnma","P2sub1/n2sub1/m2sub1/a","","P","2s1","n","2s1","m","2s1","a","mmm","D2h","mmm",o}, +new[]{"ba-c","D2h^16","-P2bc2a","Pmnb","P2sub1/m2sub1/n2sub1/b","","P","2s1","m","2s1","n","2s1","b","mmm","D2h","mmm",o}, +new[]{"cab","D2h^16","-P2c2ab","Pbnm","P2sub1/b2sub1/n2sub1/m","","P","2s1","b","2s1","n","2s1","m","mmm","D2h","mmm",o}, +new[]{"-cba","D2h^16","-P2n2ac","Pcmn","P2sub1/c2sub1/m2sub1/n","","P","2s1","c","2s1","m","2s1","n","mmm","D2h","mmm",o}, +new[]{"bca","D2h^16","-P2n2a","Pmcn","P2sub1/m2sub1/c2sub1/n","","P","2s1","m","2s1","c","2s1","n","mmm","D2h","mmm",o}, +new[]{"a-cb","D2h^16","-P2c2n","Pnam","P2sub1/n2sub1/a2sub1/m","","P","2s1","n","2s1","a","2s1","m","mmm","D2h","mmm",o}, +new[]{"","D2h^17","-C2c2","Cmcm","C2/m2/c2sub1/m","","C","2","m","2","c","2s1","m","mmm","D2h","mmm",o}, +new[]{"ba-c","D2h^17","-C2c2c","Ccmm","C2/c2/m2sub1/m","","C","2","c","2","m","2s1","m","mmm","D2h","mmm",o}, +new[]{"cab","D2h^17","-A2a2a","Amma","A2sub1/m2/m2/a","","A","2s1","m","2","m","2","a","mmm","D2h","mmm",o}, +new[]{"-cba","D2h^17","-A22a","Amam","A2sub1/m2/a2/m","","A","2s1","m","2","a","2","m","mmm","D2h","mmm",o}, +new[]{"bca","D2h^17","-B22b","Bbmm","B2/b2sub1/m2/m","","B","2","b","2s1","m","2","m","mmm","D2h","mmm",o}, +new[]{"a-cb","D2h^17","-B2b2","Bmmb","B2/m2sub1/m2/b","","B","2","m","2s1","m","2","b","mmm","D2h","mmm",o}, +new[]{"","D2h^18","-C2bc2","Cmce","C2/m2/c2sub1/e","","C","2","m","2","c","2s1","a","mmm","D2h","mmm",o}, +new[]{"ba-c","D2h^18","-C2bc2bc","Ccme","C2/c2/m2sub1/e","","C","2","c","2","m","2s1","b","mmm","D2h","mmm",o}, +new[]{"cab","D2h^18","-A2ac2ac","Aema","A2sub1/e2/ma","","A","2s1","b","2","m","","a","mmm","D2h","mmm",o}, +new[]{"-cba","D2h^18","-A22ac","Aeam","A2sub1/e2/a2/m","","A","2s1","c","2","a","2","m","mmm","D2h","mmm",o}, +new[]{"bca","D2h^18","-B22bc","Bbem","B2/b2sub1/e2/m","","B","2","b","2s1","c","2","m","mmm","D2h","mmm",o}, +new[]{"a-cb","D2h^18","-B2bc2","Bmeb","B2/m2sub1/e2/b","","B","2","m","2s1","a","2","b","mmm","D2h","mmm",o}, +new[]{"","D2h^19","-C22","Cmmm","C2/m2/m2/m","","C","2","m","2","m","2","m","mmm","D2h","mmm",o}, +new[]{"cab","D2h^19","-A22","Ammm","A2/m2/m2/m","","A","2","m","2","m","2","m","mmm","D2h","mmm",o}, +new[]{"bca","D2h^19","-B22","Bmmm","B2/m2/m2/m","","B","2","m","2","m","2","m","mmm","D2h","mmm",o}, +new[]{"","D2h^20","-C22c","Cccm","C2/c2/c2/m","","C","2","c","2","c","2","m","mmm","D2h","mmm",o}, +new[]{"cab","D2h^20","-A2a2","Amaa","A2/m2/a2/a","","A","2","m","2","a","2","a","mmm","D2h","mmm",o}, +new[]{"bca","D2h^20","-B2b2b","Bbmb","B2/b2/m2/b","","B","2","b","2","m","2","b","mmm","D2h","mmm",o}, +new[]{"","D2h^21","-C2b2","Cmme","C2/m2/m2/e","","C","2","m","2","m","2","a","mmm","D2h","mmm",o}, +new[]{"ba-c","D2h^21","-C2b2b","Cmme","C2/m2/m2/e","","C","2","m","2","m","2","b","mmm","D2h","mmm",o}, +new[]{"cab","D2h^21","-A2c2c","Aemm","A2/e2/m2/m","","A","2","b","2","m","2","m","mmm","D2h","mmm",o}, +new[]{"-cba","D2h^21","-A22c","Aemm","A2/e2/m2/m","","A","2","c","2","m","2","m","mmm","D2h","mmm",o}, +new[]{"bca","D2h^21","-B22c","Bmem","B2/m2/e2/m","","B","2","m","2","c","2","m","mmm","D2h","mmm",o}, +new[]{"a-cb","D2h^21","-B2c2","Bmem","B2/m2/e2/m","","B","2","m","2","a","2","m","mmm","D2h","mmm",o}, +new[]{"1","D2h^22","C22-1bc","Ccce(1)","C2/c2/c2/e","","C","2","c","2","c","2","a","mmm","D2h","mmm",o}, +new[]{"2","D2h^22","-C2b2bc","Ccce(2)","C2/c2/c2/e","","C","2","c","2","c","2","a","mmm","D2h","mmm",o}, +new[]{"1ba-c","D2h^22","C22-1bc","Ccce(1)","C2/c2/c2/e","","C","2","c","2","c","2","b","mmm","D2h","mmm",o}, +new[]{"2ba-c","D2h^22","-C2b2c","Ccce(2)","C2/c2/c2/e","","C","2","c","2","c","2","b","mmm","D2h","mmm",o}, +new[]{"1cab","D2h^22","A22-1ac","Aeaa(1)","A2/e2/a2/a","","A","2","b","2","a","2","a","mmm","D2h","mmm",o}, +new[]{"2cab","D2h^22","-A2a2c","Aeaa(2)","A2/e2/a2/a","","A","2","b","2","a","2","a","mmm","D2h","mmm",o}, +new[]{"1-cba","D2h^22","A22-1ac","Aeaa(1)","A2/e2/a2/a","","A","2","c","2","a","2","a","mmm","D2h","mmm",o}, +new[]{"2-cba","D2h^22","-A2ac2c","Aeaa(2)","A2/e2/a2/a","","A","2","c","2","a","2","a","mmm","D2h","mmm",o}, +new[]{"1bca","D2h^22","B22-1bc","Bbeb(1)","B2/b2/e2/b","","B","2","b","2","c","2","b","mmm","D2h","mmm",o}, +new[]{"2bca","D2h^22","-B2bc2b","Bbeb(2)","B2/b2/e2/b","","B","2","b","2","c","2","b","mmm","D2h","mmm",o}, +new[]{"1a-cb","D2h^22","B22-1bc","Bbeb(1)","B2/b2/e2/b","","B","2","b","2","a","2","b","mmm","D2h","mmm",o}, +new[]{"2a-cb","D2h^22","-B2b2bc","Bbeb(2)","B2/b2/e2/b","","B","2","b","2","a","2","b","mmm","D2h","mmm",o}, +new[]{"","D2h^23","-F22","Fmmm","F2/m2/m2/m","","F","2","m","2","m","2","m","mmm","D2h","mmm",o}, +new[]{"1","D2h^24","F22-1d","Fddd(1)","F2/d2/d2/d","","F","2","d","2","d","2","d","mmm","D2h","mmm",o}, +new[]{"2","D2h^24","-F2uv2vw","Fddd(2)","F2/d2/d2/d","","F","2","d","2","d","2","d","mmm","D2h","mmm",o}, +new[]{"","D2h^25","-I22","Immm","I2/m2/m2/m","","I","2","m","2","m","2","m","mmm","D2h","mmm",o}, +new[]{"","D2h^26","-I22c","Ibam","I2/b2/a2/m","","I","2","b","2","a","2","m","mmm","D2h","mmm",o}, +new[]{"cab","D2h^26","-I2a2","Imcb","I2/m2/c2/b","","I","2","m","2","c","2","b","mmm","D2h","mmm",o}, +new[]{"bca","D2h^26","-I2b2b","Icma","I2/c2/m2/a","","I","2","c","2","m","2","a","mmm","D2h","mmm",o}, +new[]{"","D2h^27","-I2b2c","Ibca","I2/b2/c2/a","","I","2","b","2","c","2","a","mmm","D2h","mmm",o}, +new[]{"ba-c","D2h^27","-I2a2b","Icab","I2/c2/a2/b","","I","2","c","2","a","2","b","mmm","D2h","mmm",o}, +new[]{"","D2h^28","-I2b2","Imma","I2/m2/m2/a","","I","2","m","2","m","2","a","mmm","D2h","mmm",o}, +new[]{"ba-c","D2h^28","-I2a2a","Immb","I2/m2/m2/b","","I","2","m","2","m","2","b","mmm","D2h","mmm",o}, +new[]{"cab","D2h^28","-I2c2c","Ibmm","I2/b2/m2/m","","I","2","b","2","m","2","m","mmm","D2h","mmm",o}, +new[]{"-cba","D2h^28","-I22b","Icmm","I2/c2/m2/m","","I","2","c","2","m","2","m","mmm","D2h","mmm",o}, +new[]{"bca","D2h^28","-I22a","Imcm","I2/m2/c2/m","","I","2","m","2","c","2","m","mmm","D2h","mmm",o}, +new[]{"a-cb","D2h^28","-I2c2","Imam","I2/m2/a2/m","","I","2","m","2","a","2","m","mmm","D2h","mmm",o}, +new[]{"","C4^1","P4","P4","P4","","P","4","","1","","1","","4","C4","4/m",te}, +new[]{"","C4^2","P4w","P4sub1","P4sub1","","P","4s1","","1","","1","","4","C4","4/m",te}, +new[]{"","C4^3","P4c","P4sub2","P4sub2","","P","4s2","","1","","1","","4","C4","4/m",te}, +new[]{"","C4^4","P4cw","P4sub3","P4sub3","","P","4s3","","1","","1","","4","C4","4/m",te}, +new[]{"","C4^5","I4","I4","I4","","I","4","","1","","1","","4","C4","4/m",te}, +new[]{"","C4^6","I4bw","I4sub1","I4sub1","","I","4s1","","1","","1","","4","C4","4/m",te}, +new[]{"","S4^1","P-4","P-4","P-4","","P","-4","","1","","1","","-4","S4","4/m",te}, +new[]{"","S4^2","I-4","I-4","I-4","","I","-4","","1","","1","","-4","S4","4/m",te}, +new[]{"","C4h^1","-P4","P4/m","P4/m","","P","4","m","1","","1","","4/m","C4h","4/m",te}, +new[]{"","C4h^2","-P4c","P4sub2/m","P4sub2/m","","P","4s2","m","1","","1","","4/m","C4h","4/m",te}, +new[]{"1","C4h^3","P4ab-1ab","P4/n(1)","P4/n","","P","4","n","1","","1","","4/m","C4h","4/m",te}, +new[]{"2","C4h^3","-P4a","P4/n(2)","P4/n","","P","4","n","1","","1","","4/m","C4h","4/m",te}, +new[]{"1","C4h^4","P4n-1n","P4sub2/n(1)","P4sub2/n","","P","4s2","n","1","","1","","4/m","C4h","4/m",te}, +new[]{"2","C4h^4","-P4bc","P4sub2/n(2)","P4sub2/n","","P","4s2","n","1","","1","","4/m","C4h","4/m",te}, +new[]{"","C4h^5","-I4","I4/m","I4/m","","I","4","m","1","","1","","4/m","C4h","4/m",te}, +new[]{"1","C4h^6","I4bw-1bw","I4sub1/a(1)","I4sub1/a","","I","4s1","a","1","","1","","4/m","C4h","4/m",te}, +new[]{"2","C4h^6","-I4ad","I4sub1/a(2)","I4sub1/a","","I","4s1","a","1","","1","","4/m","C4h","4/m",te}, +new[]{"","D4^1","P42","P422","P422","","P","4","","2","","2","","422","D4","4/mmm",te}, +new[]{"","D4^2","P4ab2ab","P42sub12","P42sub12","","P","4","","2s1","","2","","422","D4","4/mmm",te}, +new[]{"","D4^3","P4w2c","P4sub122","P4sub122","","P","4s1","","2","","2","","422","D4","4/mmm",te}, +new[]{"","D4^4","P4abw2nw","P4sub12sub12","P4sub12sub12","","P","4s1","","2s1","","2","","422","D4","4/mmm",te}, +new[]{"","D4^5","P4c2","P4sub222","P4sub222","","P","4s2","","2","","2","","422","D4","4/mmm",te}, +new[]{"","D4^6","P4n2n","P4sub22sub12","P4sub22sub12","","P","4s2","","2s1","","2","","422","D4","4/mmm",te}, +new[]{"","D4^7","P4cw2c","P4sub322","P4sub322","","P","4s3","","2","","2","","422","D4","4/mmm",te}, +new[]{"","D4^8","P4nw2abw","P4sub32sub12","P4sub32sub12","","P","4s3","","2s1","","2","","422","D4","4/mmm",te}, +new[]{"","D4^9","I42","I422","I422","","I","4","","2","","2","","422","D4","4/mmm",te}, +new[]{"","D4^10","I4bw2bw","I4sub122","I4sub122","","I","4s1","","2","","2","","422","D4","4/mmm",te}, +new[]{"","C4v^1","P4-2","P4mm","P4mm","","P","4","","","m","","m","4mm","C4v","4/mmm",te}, +new[]{"","C4v^2","P4-2ab","P4bm","P4bm","","P","4","","","b","","m","4mm","C4v","4/mmm",te}, +new[]{"","C4v^3","P4c-2c","P4sub2cm","P4sub2cm","","P","4s2","","","c","","m","4mm","C4v","4/mmm",te}, +new[]{"","C4v^4","P4n-2n","P4sub2nm","P4sub2nm","","P","4s2","","","n","","m","4mm","C4v","4/mmm",te}, +new[]{"","C4v^5","P4-2c","P4cc","P4cc","","P","4","","","c","","c","4mm","C4v","4/mmm",te}, +new[]{"","C4v^6","P4-2n","P4nc","P4nc","","P","4","","","n","","c","4mm","C4v","4/mmm",te}, +new[]{"","C4v^7","P4c-2","P4sub2mc","P4sub2mc","","P","4s2","","","m","","c","4mm","C4v","4/mmm",te}, +new[]{"","C4v^8","P4c-2ab","P4sub2bc","P4sub2bc","","P","4s2","","","b","","c","4mm","C4v","4/mmm",te}, +new[]{"","C4v^9","I4-2","I4mm","I4mm","","I","4","","","m","","m","4mm","C4v","4/mmm",te}, +new[]{"","C4v^10","I4-2c","I4cm","I4cm","","I","4","","","c","","m","4mm","C4v","4/mmm",te}, +new[]{"","C4v^11","I4bw-2","I4sub1md","I4sub1md","","I","4s1","","","m","","d","4mm","C4v","4/mmm",te}, +new[]{"","C4v^12","I4bw-2c","I4sub1cd","I4sub1cd","","I","4s1","","","c","","d","4mm","C4v","4/mmm",te}, +new[]{"","D2d^1","P-42","P-42m","P-42m","","P","-4","","2","","","m","-42m","D2d","4/mmm",te}, +new[]{"","D2d^2","P-42c","P-42c","P-42c","","P","-4","","2","","","c","-42m","D2d","4/mmm",te}, +new[]{"","D2d^3","P-42ab","P-42sub1m","P-42sub1m","","P","-4","","2s1","","","m","-42m","D2d","4/mmm",te}, +new[]{"","D2d^4","P-42n","P-42sub1c","P-42sub1c","","P","-4","","2s1","","","c","-42m","D2d","4/mmm",te}, +new[]{"","D2d^5","P-4-2","P-4m2","P-4m2","","P","-4","","","m","2","","-42m","D2d","4/mmm",te}, +new[]{"","D2d^6","P-4-2c","P-4c2","P-4c2","","P","-4","","","c","2","","-42m","D2d","4/mmm",te}, +new[]{"","D2d^7","P-4-2ab","P-4b2","P-4b2","","P","-4","","","b","2","","-42m","D2d","4/mmm",te}, +new[]{"","D2d^8","P-4-2n","P-4n2","P-4n2","","P","-4","","","n","2","","-42m","D2d","4/mmm",te}, +new[]{"","D2d^9","I-4-2","I-4m2","I-4m2","","I","-4","","","m","2","","-42m","D2d","4/mmm",te}, +new[]{"","D2d^10","I-4-2c","I-4c2","I-4c2","","I","-4","","","c","2","","-42m","D2d","4/mmm",te}, +new[]{"","D2d^11","I-42","I-42m","I-42m","","I","-4","","2","","","m","-42m","D2d","4/mmm",te}, +new[]{"","D2d^12","I-42bw","I-42d","I-42d","","I","-4","","2","","","d","-42m","D2d","4/mmm",te}, +new[]{"","D4h^1","-P42","P4/mmm","P4/m2/m2/m","","P","4","m","2","m","2","m","4/mmm","D4h","4/mmm",te}, +new[]{"","D4h^2","-P42c","P4/mcc","P4/m2/c2/c","","P","4","m","2","c","2","c","4/mmm","D4h","4/mmm",te}, +new[]{"1","D4h^3","P42-1ab","P4/nbm(1)","P4/n2/b2/m","","P","4","n","2","b","2","m","4/mmm","D4h","4/mmm",te}, +new[]{"2","D4h^3","-P4a2b","P4/nbm(2)","P4/n2/b2/m","","P","4","n","2","b","2","m","4/mmm","D4h","4/mmm",te}, +new[]{"1","D4h^4","P42-1n","P4/nnc(1)","P4/n2/n2/c","","P","4","n","2","n","2","c","4/mmm","D4h","4/mmm",te}, +new[]{"2","D4h^4","-P4a2bc","P4/nnc(2)","P4/n2/n2/c","","P","4","n","2","n","2","c","4/mmm","D4h","4/mmm",te}, +new[]{"","D4h^5","-P42ab","P4/mbm","P4/m2sub1/bm","","P","4","m","2s1","b","","m","4/mmm","D4h","4/mmm",te}, +new[]{"","D4h^6","-P42n","P4/mnc","P4/m2sub1/nc","","P","4","m","2s1","n","","c","4/mmm","D4h","4/mmm",te}, +new[]{"1","D4h^7","P4ab2ab-1ab","P4/nmm(1)","P4/n2sub1/mm","","P","4","n","2s1","m","","m","4/mmm","D4h","4/mmm",te}, +new[]{"2","D4h^7","-P4a2a","P4/nmm(2)","P4/n2sub1/mm","","P","4","n","2s1","m","","m","4/mmm","D4h","4/mmm",te}, +new[]{"1","D4h^8","P4ab2n-1ab","P4/ncc(1)","P4/n2sub1/cc","","P","4","n","2s1","c","","c","4/mmm","D4h","4/mmm",te}, +new[]{"2","D4h^8","-P4a2ac","P4/ncc(2)","P4/n2sub1/cc","","P","4","n","2s1","c","","c","4/mmm","D4h","4/mmm",te}, +new[]{"","D4h^9","-P4c2","P4sub2/mmc","P4sub2/m2/m2/c","","P","4s2","m","2","m","2","c","4/mmm","D4h","4/mmm",te}, +new[]{"","D4h^10","-P4c2c","P4sub2/mcm","P4sub2/m2/c2/m","","P","4s2","m","2","c","2","m","4/mmm","D4h","4/mmm",te}, +new[]{"1","D4h^11","P4n2c-1n","P4sub2/nbc(1)","P4sub2/n2/b2/c","","P","4s2","n","2","b","2","c","4/mmm","D4h","4/mmm",te}, +new[]{"2","D4h^11","-P4ac2b","P4sub2/nbc(2)","P4sub2/n2/b2/c","","P","4s2","n","2","b","2","c","4/mmm","D4h","4/mmm",te}, +new[]{"1","D4h^12","P4n2-1n","P4sub2/nnm(1)","P4sub2/n2/n2/m","","P","4s2","n","2","n","2","m","4/mmm","D4h","4/mmm",te}, +new[]{"2","D4h^12","-P4ac2bc","P4sub2/nnm(2)","P4sub2/n2/n2/m","","P","4s2","n","2","n","2","m","4/mmm","D4h","4/mmm",te}, +new[]{"","D4h^13","-P4c2ab","P4sub2/mbc","P4sub2/m2sub1/b2/c","","P","4s2","m","2s1","b","2","c","4/mmm","D4h","4/mmm",te}, +new[]{"","D4h^14","-P4n2n","P4sub2/mnm","P4sub2/m2sub1/n2/m","","P","4s2","m","2s1","n","2","m","4/mmm","D4h","4/mmm",te}, +new[]{"1","D4h^15","P4n2n-1n","P4sub2/nmc(1)","P4sub2/n2sub1/m2/c","","P","4s2","n","2s1","m","2","c","4/mmm","D4h","4/mmm",te}, +new[]{"2","D4h^15","-P4ac2a","P4sub2/nmc(2)","P4sub2/n2sub1/m2/c","","P","4s2","n","2s1","m","2","c","4/mmm","D4h","4/mmm",te}, +new[]{"1","D4h^16","P4n2ab-1n","P4sub2/ncm(1)","P4sub2/n2sub1/c2/m","","P","4s2","n","2s1","c","2","m","4/mmm","D4h","4/mmm",te}, +new[]{"2","D4h^16","-P4ac2ac","P4sub2/ncm(2)","P4sub2/n2sub1/c2/m","","P","4s2","n","2s1","c","2","m","4/mmm","D4h","4/mmm",te}, +new[]{"","D4h^17","-I42","I4/mmm","I4/m2/m2/m","","I","4","m","2","m","2","m","4/mmm","D4h","4/mmm",te}, +new[]{"","D4h^18","-I42c","I4/mcm","I4/m2/c2/m","","I","4","m","2","c","2","m","4/mmm","D4h","4/mmm",te}, +new[]{"1","D4h^19","I4bw2bw-1bw","I4sub1/amd(1)","I4sub1/a2/m2/d","","I","4s1","a","2","m","2","d","4/mmm","D4h","4/mmm",te}, +new[]{"2","D4h^19","-I4bd2","I4sub1/amd(2)","I4sub1/a2/m2/d","","I","4s1","a","2","m","2","d","4/mmm","D4h","4/mmm",te}, +new[]{"1","D4h^20","I4bw2aw-1bw","I4sub1/acd(1)","I4sub1/a2/c2/d","","I","4s1","a","2","c","2","d","4/mmm","D4h","4/mmm",te}, +new[]{"2","D4h^20","-I4bd2c","I4sub1/acd(2)","I4sub1/a2/c2/d","","I","4s1","a","2","c","2","d","4/mmm","D4h","4/mmm",te}, +new[]{"","C3^1","P3","P3","P3","","P","3","","1","","1","","3","C3","-3",tr}, +new[]{"","C3^2","P31","P3sub1","P3sub1","","P","3s1","","1","","1","","3","C3","-3",tr}, +new[]{"","C3^3","P32","P3sub2","P3sub2","","P","3s2","","1","","1","","3","C3","-3",tr}, +new[]{"H","C3^4","R3","R3Hex","R3","","R","3","","1","","1","","3","C3","-3",tr}, +new[]{"R","C3^4","P3*","R3Rho","R3","","R","3","","1","","1","","3","C3","-3",tr}, +new[]{"","C3i^1","-P3","P-3","P-3","","P","-3","","1","","1","","-3","C3i","-3",tr}, +new[]{"H","C3i^2","-R3","R-3Hex","R-3","","R","-3","","1","","1","","-3","C3i","-3",tr}, +new[]{"R","C3i^2","-P3*","R-3Rho","R-3","","R","-3","","1","","1","","-3","C3i","-3",tr}, +new[]{"","D3^1","P32","P312","P312","","P","3","","1","","2","","32","D3","-32m",tr}, +new[]{"","D3^2","P32\"","P321","P321","","P","3","","2","","1","","32","D3","-32m",tr}, +new[]{"","D3^3","P312c(001)","P3sub112","P3sub112","","P","3s1","","1","","2","","32","D3","-32m",tr}, +new[]{"","D3^4","P312\"","P3sub121","P3sub121","","P","3s1","","2","","1","","32","D3","-32m",tr}, +new[]{"","D3^5","P322c(00-1)","P3sub212","P3sub212","","P","3s2","","1","","2","","32","D3","-32m",tr}, +new[]{"","D3^6","P322\"","P3sub221","P3sub221","","P","3s2","","2","","1","","32","D3","-32m",tr}, +new[]{"H","D3^7","R32\"","R32Hex","R32","","R","3","","2","","1","","32","D3","-32m",tr}, +new[]{"R","D3^7","P3*2","R32Rho","R32","","R","3","","2","","1","","32","D3","-32m",tr}, +new[]{"","C3v^1","P3-2\"","P3m1","P3m1","","P","3","","","m","1","","3m","C3v","-32m",tr}, +new[]{"","C3v^2","P3-2","P31m","P31m","","P","3","","1","","","m","3m","C3v","-32m",tr}, +new[]{"","C3v^3","P3-2\"c","P3c1","P3c1","","P","3","","","c","1","","3m","C3v","-32m",tr}, +new[]{"","C3v^4","P3-2c","P31c","P31c","","P","3","","1","","","c","3m","C3v","-32m",tr}, +new[]{"H","C3v^5","R3-2\"","R3mHex","R3m","","R","3","","","m","1","","3m","C3v","-32m",tr}, +new[]{"R","C3v^5","P3*-2","R3mRho","R3m","","R","3","","","m","1","","3m","C3v","-32m",tr}, +new[]{"H","C3v^6","R3-2\"c","R3cHex","R3c","","R","3","","","c","1","","3m","C3v","-32m",tr}, +new[]{"R","C3v^6","P3*-2n","R3cRho","R3c","","R","3","","","c","1","","3m","C3v","-32m",tr}, +new[]{"","D3d^1","-P32","P-31m","P-312/m","","P","-3","","1","","2","m","-3m","D3d","-32m",tr}, +new[]{"","D3d^2","-P32c","P-31c","P-312/c","","P","-3","","1","","2","c","-3m","D3d","-32m",tr}, +new[]{"","D3d^3","-P32\"","P-3m1","P-32/m1","","P","-3","","2","m","1","","-3m","D3d","-32m",tr}, +new[]{"","D3d^4","-P32\"c","P-3c1","P-32/c1","","P","-3","","2","c","1","","-3m","D3d","-32m",tr}, +new[]{"H","D3d^5","-R32\"","R-3mHex","R-32/m","","R","-3","","2","m","1","","-3m","D3d","-32m",tr}, +new[]{"R","D3d^5","-P3*2","R-3mRho","R-32/m","","R","-3","","2","m","1","","-3m","D3d","-32m",tr}, +new[]{"H","D3d^6","-R32\"c","R-3cHex","R-32/c","","R","-3","","2","c","1","","-3m","D3d","-32m",tr}, +new[]{"R","D3d^6","-P3*2n","R-3cRho","R-32/c","","R","-3","","2","c","1","","-3m","D3d","-32m",tr}, +new[]{"","C6^1","P6","P6","P6","","P","6","","1","","1","","6","C6","6/m",h}, +new[]{"","C6^2","P61","P6sub1","P6sub1","","P","6s1","","1","","1","","6","C6","6/m",h}, +new[]{"","C6^3","P65","P6sub5","P6sub5","","P","6s5","","1","","1","","6","C6","6/m",h}, +new[]{"","C6^4","P62","P6sub2","P6sub2","","P","6s2","","1","","1","","6","C6","6/m",h}, +new[]{"","C6^5","P64","P6sub4","P6sub4","","P","6s4","","1","","1","","6","C6","6/m",h}, +new[]{"","C6^6","P6c","P6sub3","P6sub3","","P","6s3","","1","","1","","6","C6","6/m",h}, +new[]{"","C3h^1","P-6","P-6","P-6","","P","-6","","1","","1","","-6","C3h","6/m",h}, +new[]{"","C6h^1","-P6","P6/m","P6/m","","P","6","m","1","","1","","6/m","C6h","6/m",h}, +new[]{"","C6h^2","-P6c","P6sub3/m","P6sub3/m","","P","6s3","m","1","","1","","6/m","C6h","6/m",h}, +new[]{"","D6^1","P62","P622","P622","","P","6","","2","","2","","622","D6","6/mmm",h}, +new[]{"","D6^2","P612(00-1)","P6sub122","P6sub122","","P","6s1","","2","","2","","622","D6","6/mmm",h}, +new[]{"","D6^3","P652(001)","P6sub522","P6sub522","","P","6s5","","2","","2","","622","D6","6/mmm",h}, +new[]{"","D6^4","P622c(001)","P6sub222","P6sub222","","P","6s2","","2","","2","","622","D6","6/mmm",h}, +new[]{"","D6^5","P642c(00-1)","P6sub422","P6sub422","","P","6s4","","2","","2","","622","D6","6/mmm",h}, +new[]{"","D6^6","P6c2c","P6sub322","P6sub322","","P","6s3","","2","","2","","622","D6","6/mmm",h}, +new[]{"","C6v^1","P6-2","P6mm","P6mm","","P","6","","","m","","m","6mm","C6v","6/mmm",h}, +new[]{"","C6v^2","P6-2c","P6cc","P6cc","","P","6","","","c","","c","6mm","C6v","6/mmm",h}, +new[]{"","C6v^3","P6c-2","P6sub3cm","P6sub3cm","","P","6s3","","","c","","m","6mm","C6v","6/mmm",h}, +new[]{"","C6v^4","P6c-2c","P6sub3mc","P6sub3mc","","P","6s3","","","m","","c","6mm","C6v","6/mmm",h}, +new[]{"","D3h^1","P-62","P-6m2","P-6m2","","P","-6","","","m","2","","-6m2","D3h","6/mmm",h}, +new[]{"","D3h^2","P-6c2","P-6c2","P-6c2","","P","-6","","","c","2","","-6m2","D3h","6/mmm",h}, +new[]{"","D3h^3","P-6-2","P-62m","P-62m","","P","-6","","2","","","m","-6m2","D3h","6/mmm",h}, +new[]{"","D3h^4","P-6c-2c","P-62c","P-62c","","P","-6","","2","","","c","-6m2","D3h","6/mmm",h}, +new[]{"","D6h^1","-P62","P6/mmm","P6/m2/m2/m","","P","6","m","2","m","2","m","6/mmm","D6h","6/mmm",h}, +new[]{"","D6h^2","-P62c","P6/mcc","P6/m2/c2/c","","P","6","m","2","c","2","c","6/mmm","D6h","6/mmm",h}, +new[]{"","D6h^3","-P6c2","P6sub3/mcm","P6sub3/m2/c2/m","","P","6s3","m","2","c","2","m","6/mmm","D6h","6/mmm",h}, +new[]{"","D6h^4","-P6c2c","P6sub3/mmc","P6sub3/m2/m2/c","","P","6s3","m","2","m","2","c","6/mmm","D6h","6/mmm",h}, +new[]{"","T^1","P223","P23","P23","","P","2","","3","","1","","23","T","m-3",c}, +new[]{"","T^2","F223","F23","F23","","F","2","","3","","1","","23","T","m-3",c}, +new[]{"","T^3","I223","I23","I23","","I","2","","3","","1","","23","T","m-3",c}, +new[]{"","T^4","P2ac2ab3","P2sub13","P2sub13","","P","2s1","","3","","1","","23","T","m-3",c}, +new[]{"","T^5","I2b2c3","I2sub13","I2sub13","","I","2s1","","3","","1","","23","T","m-3",c}, +new[]{"","Th^1","-P223","Pm-3","P2/m-3","","P","2","m","-3","","1","","m-3","Th","m-3",c}, +new[]{"1","Th^2","P223-1n","Pn-3(1)","P2/n-3","","P","2","n","-3","","1","","m-3","Th","m-3",c}, +new[]{"2","Th^2","-P2ab2bc3","Pn-3(2)","P2/n-3","","P","2","n","-3","","1","","m-3","Th","m-3",c}, +new[]{"","Th^3","-F223","Fm-3","F2/m-3","","F","2","m","-3","","1","","m-3","Th","m-3",c}, +new[]{"1","Th^4","F223-1d","Fd-3(1)","F2/d-3","","F","2","d","-3","","1","","m-3","Th","m-3",c}, +new[]{"2","Th^4","-F2uv2vw3","Fd-3(2)","F2/d-3","","F","2","d","-3","","1","","m-3","Th","m-3",c}, +new[]{"","Th^5","-I223","Im-3","I2/m-3","","I","2","m","-3","","1","","m-3","Th","m-3",c}, +new[]{"","Th^6","-P2ac2ab3","Pa-3","P2sub1/a-3","","P","2s1","a","-3","","1","","m-3","Th","m-3",c}, +new[]{"","Th^7","-I2b2c3","Ia-3","I2sub1/a-3","","I","2s1","a","-3","","1","","m-3","Th","m-3",c}, +new[]{"","O^1","P423","P432","P432","","P","4","","3","","2","","432","O","m-3m",c}, +new[]{"","O^2","P4n23","P4sub232","P4sub232","","P","4s2","","3","","2","","432","O","m-3m",c}, +new[]{"","O^3","F423","F432","F432","","F","4","","3","","2","","432","O","m-3m",c}, +new[]{"","O^4","F4d23","F4sub132","F4sub132","","F","4s1","","3","","2","","432","O","m-3m",c}, +new[]{"","O^5","I423","I432","I432","","I","4","","3","","2","","432","O","m-3m",c}, +new[]{"","O^6","P4acd2ab3","P4sub332","P4sub332","","P","4s3","","3","","2","","432","O","m-3m",c}, +new[]{"","O^7","P4bd2ab3","P4sub132","P4sub132","","P","4s1","","3","","2","","432","O","m-3m",c}, +new[]{"","O^8","I4bd2c3","I4sub132","I4sub132","","I","4s1","","3","","2","","432","O","m-3m",c}, +new[]{"","Td^1","P-423","P-43m","P-43m","","P","-4","","3","","","m","-43m","Td","m-3m",c}, +new[]{"","Td^2","F-423","F-43m","F-43m","","F","-4","","3","","","m","-43m","Td","m-3m",c}, +new[]{"","Td^3","I-423","I-43m","I-43m","","I","-4","","3","","","m","-43m","Td","m-3m",c}, +new[]{"","Td^4","P-4n23","P-43n","P-43n","","P","-4","","3","","","n","-43m","Td","m-3m",c}, +new[]{"","Td^5","F-4c23","F-43c","F-43c","","F","-4","","3","","","c","-43m","Td","m-3m",c}, +new[]{"","Td^6","I-4bd2c3","I-43d","I-43d","","I","-4","","3","","","d","-43m","Td","m-3m",c}, +new[]{"","Oh^1","-P423","Pm-3m","P4/m-32/m","","P","4","m","-3","","2","m","m-3m","Oh","m-3m",c}, +new[]{"1","Oh^2","P423-1n","Pn-3n(1)","P4/n-32/n","","P","4","n","-3","","2","n","m-3m","Oh","m-3m",c}, +new[]{"2","Oh^2","-P4a2bc3","Pn-3n(2)","P4/n-32/n","","P","4","n","-3","","2","n","m-3m","Oh","m-3m",c}, +new[]{"","Oh^3","-P4n23","Pm-3n","P4sub2/m-32/n","","P","4s2","m","-3","","2","n","m-3m","Oh","m-3m",c}, +new[]{"1","Oh^4","P4n23-1n","Pn-3m(1)","P4sub2/n-32/m","","P","4s2","n","-3","","2","m","m-3m","Oh","m-3m",c}, +new[]{"2","Oh^4","-P4bc2bc3","Pn-3m(2)","P4sub2/n-32/m","","P","4s2","n","-3","","2","m","m-3m","Oh","m-3m",c}, +new[]{"","Oh^5","-F423","Fm-3m","F4/m-32/m","","F","4","m","-3","","2","m","m-3m","Oh","m-3m",c}, +new[]{"","Oh^6","-F4c23","Fm-3c","F4/m-32/c","","F","4","m","-3","","2","c","m-3m","Oh","m-3m",c}, +new[]{"1","Oh^7","F4d23-1d","Fd-3m(1)","F4sub1/d-32/m","","F","4s1","d","-3","","2","m","m-3m","Oh","m-3m",c}, +new[]{"2","Oh^7","-F4vw2vw3","Fd-3m(2)","F4sub1/d-32/m","","F","4s1","d","-3","","2","m","m-3m","Oh","m-3m",c}, +new[]{"1","Oh^8","F4d23-1cd","Fd-3c(1)","F4sub1/d-32/c","","F","4s1","d","-3","","2","c","m-3m","Oh","m-3m",c}, +new[]{"2","Oh^8","-F4cvw2vw3","Fd-3c(2)","F4sub1/d-32/c","","F","4s1","d","-3","","2","c","m-3m","Oh","m-3m",c}, +new[]{"","Oh^9","-I423","Im-3m","I4/m-32/m","","I","4","m","-3","","2","m","m-3m","Oh","m-3m",c}, +new[]{"","Oh^10","-I4bd2c3","Ia-3d","I4sub1/a-32/d","","I","4s1","a","-3","","2","d","m-3m","Oh","m-3m",c}, +new[]{"","Ci^1","-C1","C-1","C-1","","C","-1","","1","","1","","-1","Ci","-1",t}, +new[]{"","Ci^1","-I1","I-1","I-1","","I","-1","","1","","1","","-1","Ci","-1",t}, +new[]{"","Ci^1","-A1","A-1","A-1","","A","-1","","1","","1","","-1","Ci","-1",t}, +new[]{"","Ci^1","-B1","B-1","B-1","","B","-1","","1","","1","","-1","Ci","-1",t}, +new[]{"","Ci^1","-F1","F-1","F-1","","F","-1","","1","","1","","-1","Ci","-1",t}, +new[]{"","C1^1","A1","A1","A1","","A","1","","1","","1","","1","Ci","1",t}, +new[]{"","C1^1","B1","B1","B1","","B","1","","1","","1","","1","Ci","1",t}, +new[]{"","C1^1","C1","C1","C1","","C","1","","1","","1","","1","Ci","1",t}, +new[]{"","C1^1","F1","F1","F1","","F","1","","1","","1","","1","Ci","1",t}, + #endregion + }; - Task task9 = Task.Run(() => new ushort[][] + /// + /// 0:通し番号 1:空間群番号 2:空間群のSub番号 3:点群番号 4:ラウエ群番号 5:結晶系番号 + /// + public static readonly ushort[][] NumArray = new ushort[][] { #region numArrayの定義 - new ushort[]{0,0,0,0,0,0}, +new ushort[]{0,0,0,0,0,0}, new ushort[]{1,1,1,1,1,1}, new ushort[]{2,2,1,2,1,1}, new ushort[]{3,3,1,3,2,2}, @@ -12003,104 +12058,21 @@ static SymmetryStatic() ,new ushort[]{538,1,4,1,1,1} ,new ushort[]{539,1,5,1,1,1} #endregion - }); - - Task task7 = Task.Run(() => new string[] - { - #region siteSymmetryList -"1", -"-1", -"2", -"m", -"2/m", -"..2", -".2.", -"2..", -"222", -"m..", -".m.", -"mm2", -"..m", -"m2m", -"2mm", -"mmm", -"..2/m", -".2/m.", -"2/m..", -"4..", -"-4..", -"4/m..", -"222.", -"422", -"2.22", -"2mm.", -"4mm", -"2.mm", -"-42m", -"-4m2", -"m2m.", -"m.2m", -"mmm.", -"4/mmm", -"m.mm", -"3..", -"3.", -"-3..", -"-3.", -"3.2", -"32.", -".2", -"32", -"3m.", -"3.m", -".m", -"3m", -"-3.m", -"-3m.", -".2/m", -"-3m", -"6..", -"-6..", -"6/m..", -"622", -"6mm", -"-6m2", -"-62m", -"6/mmm", -".3.", -"222..", -"23.", -"mm2..", -"mmm..", -"m-3.", -".-3.", -"42.2", -"432", -".32", -".3m", -"-42.m", -"-43m", -"m.m2", -"4m.m", -"4/mm.m", -"m-3m", -"-4m.2", -".-3m" - #endregion - }); + }; - Task.WaitAll(task0, task2, task3, taskOperationList, task6, task7, task8, task9, task4); - SiteSymmetryList = task7.Result; - SiteSymmetryDictionary = task6.Result; - OperationDictionary = task4.Result; - NumArray = task9.Result; + public enum CrystalSystem { Unknown = 0, Triclinic = 1, Monoclinic = 2, Orthorhombic = 3, Tetragonal = 4, Trigonal = 5, Hexagonal = 6, Cubic = 7 }; - PositionsDictionary = task2.Result; - PositionStringList = task3.Result; + public static readonly int TotalSpaceGroupNumber; + public static readonly string[] SpaceGroupListWithoutSpace; + #endregion - StrArray = task8.Result; - OperationList = taskOperationList.Result; - PositionGeneratorList = task0.Result; + #region static コンストラクタ + /// + /// 静的コンストラクタ + /// + static SymmetryStatic() + { + TotalSpaceGroupNumber = BelongingNumberOfSymmetry.Sum(b1 => b1.Sum(b2 => b2.Length)); #region PositionGeneratorListの仲間たちを初期化 var PositionGeneratorListP = PositionGeneratorList.AsParallel(); @@ -12142,12 +12114,10 @@ static SymmetryStatic() for (int i = 0; i < TotalSpaceGroupNumber; i++) { - var wyckoff = new List(); + var wyckoff = new List(PositionsDictionary[i].Length); var lattice = StrArray[i][6]; if (lattice == "R") - { lattice += StrArray[i][0];//extra表記にHがあればRHにする - } for (int j = 0; j < PositionsDictionary[i].Length; j++) { @@ -12192,9 +12162,7 @@ static SymmetryStatic() //Wyckoff Letterをセット char let = (char)(PositionsDictionary[i].Length - j + 96); if (let > 'z') - { let = (char)(let - 58); - } wyckoff.Add(new WyckoffPosition(i, lattice, let.ToString(), j, SiteSymmetryList[SiteSymmetryDictionary[i][j]], posStr.ToArray(), PosGen.ToArray(), j == 0 ? operations.ToArray() : null)); } diff --git a/Crystallography/Symmetry/WyckoffPosition.cs b/Crystallography/Symmetry/WyckoffPosition.cs index fe0438d..b3a0016 100644 --- a/Crystallography/Symmetry/WyckoffPosition.cs +++ b/Crystallography/Symmetry/WyckoffPosition.cs @@ -11,6 +11,11 @@ namespace Crystallography; [Serializable()] public readonly struct WyckoffPosition { + #region 定数 + const double th = 0.00015; + const double one_th = 1 - th * 2; + #endregion + #region フィールド、プロパティ /// /// 空間群の番号 @@ -105,44 +110,26 @@ public WyckoffPosition(int symSeries, string latticeType, string wykLetter, int /// /// /// - public readonly List GeneratePositions(in double x, in double y, in double z) + public readonly Vector3D[] GeneratePositions(in double x, in double y, in double z) { var pos = new List(PositionGenerator.Length); - var th = 0.00015; - var one_th = 1 - th * 2; for (int i = 0; i < PositionGenerator.Length; i++) { var (X, Y, Z) = PositionGenerator[i](x, y, z); - //0~1の範囲に収まるかどうかチェックし、適宜修正 - var v = new Vector3D(X, Y, Z, false); - v.InnerLatticeThis(); - //当たり判定 - bool flag = pos.Count == 0 || pos.All(p => - { - var zMin = Math.Abs(v.Z - p.Z); - if (zMin > one_th) zMin = Math.Abs(zMin - 1); - if (zMin > th) return true; - - var xMin = Math.Abs(v.X - p.X); - if (xMin > one_th) xMin = Math.Abs(xMin - 1); - if (xMin > th) return true; - - var yMin = Math.Abs(v.Y - p.Y); - if (yMin > one_th) yMin = Math.Abs(yMin - 1); - return yMin > th; - }); - - if (flag) + if (pos.Count == 0 || pos.All(p => !chk(Z, p.Z) || !chk(X, p.X) || !chk(Y, p.Y))) { + var v = new Vector3D(X, Y, Z, false); + //0~1の範囲に収まるかどうかチェックし、修正 + v.InnerLatticeThis(); if (PositionOperations != null) v.Operation = new SymmetryOperation(PositionOperations[i], SymmetrySeriesNumber);//PositionOperatorsを格納 pos.Add(v); } } - return pos; + return pos.ToArray(); } /// /// 与えられたposがこのWykoffPositionかどうかを判定する @@ -151,18 +138,14 @@ public readonly List GeneratePositions(in double x, in double y, in do /// public readonly bool CheckPosition(double x, double y, double z) { - foreach (var (X, Y, Z) in PositionGenerator.Select(generator => generator(x, y, z))) + return PositionGenerator.Any(g => { - if (chk(X, x) && chk(Y, y) && chk(Z, z)) - return true; - } - return false; + var (X, Y, Z) = g(x, y, z); + return chk(X, x) && chk(Y, y) && chk(Z, z); + }); } - static bool chk(double d1, double d2) + static bool chk(in double d1, in double d2) { - var th = 0.00015; - var one_th = 1 - th * 2; - var d = Math.Abs(d1 - d2); while (d > one_th) d = Math.Abs(d - 1); return d <= th; @@ -206,7 +189,7 @@ public static Atoms GetEquivalentAtomsPosition(in (double X, double Y, double Z) //2022/06/16 服部さんから、P4_2/nmc(2)でも、(3/4,y,z)が上手く判定できていないとの指摘を受ける // そのため、もっとも低対称性で再生した位置全てに対して判定をおこない、一回でもOKだったらそのワイコフ位置だと判定する - if (wyck[j].Multiplicity == atoms.Atom.Count) + if (wyck[j].Multiplicity == atoms.Atom.Length) foreach (var (X, Y, Z) in atomsTemp) if (wyck[j].CheckPosition(X, Y, Z)) { @@ -223,13 +206,11 @@ public static Atoms GetEquivalentAtomsPosition(in (double X, double Y, double Z) atoms.WyckoffLeter = wyckLet; atoms.SiteSymmetry = siteSym; - atoms.Multiplicity = atoms.Atom.Count; + atoms.Multiplicity = atoms.Atom.Length; atoms.WyckoffNumber = wyckNum; return atoms; } - public static Atoms GetEquivalentAtomsPosition(in Vector3D Pos, in int SymmetrySeriesNumber) - => GetEquivalentAtomsPosition((Pos.X, Pos.Y, Pos.Z), SymmetrySeriesNumber); #endregion }