From cf263190b7eae84baf76ef1a81e76d706f6dc4de Mon Sep 17 00:00:00 2001 From: Zaher Salman Date: Fri, 17 May 2013 13:24:38 +0000 Subject: [PATCH] Changed Chem.pm to link --- trimsp/src/TrimSPGUI4/Chem.pm | 664 +--------------------------- trimsp/src/TrimSPGUI4/TrimSPGUI4.pm | 2 +- 2 files changed, 2 insertions(+), 664 deletions(-) mode change 100644 => 120000 trimsp/src/TrimSPGUI4/Chem.pm diff --git a/trimsp/src/TrimSPGUI4/Chem.pm b/trimsp/src/TrimSPGUI4/Chem.pm deleted file mode 100644 index 7586837..0000000 --- a/trimsp/src/TrimSPGUI4/Chem.pm +++ /dev/null @@ -1,663 +0,0 @@ -# This file is part of TrimSPGUI. -# -# TrimSPGUI is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# TrimSPGUI is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with Foobar. If not, see . -# -# Copyright 2009 by Zaher Salman and the LEM Group. - -package Chem; - -sub parse_formula { - my ($formula) = @_; -# print STDOUT "formula=$formula\n"; - my (%elements); - - #check balancing - return %elements if (!ParensBalanced($formula)); - - # replace other grouping with normal parens - $formula =~ tr/<>{}[]/()()()/; - - # get rid of any spaces - $formula =~ s/\s+//g; - - # perform macro expansion - foreach (keys(%macros)) { - $formula =~ s/$_/$macros{$_}/g; - } - - # determine initial compound coeficent - my $coef = ($formula =~ s/^(\d+\.?\d*)//) ? $1 : 1.0; - - # recursively process rest of formula - return internal_formula_parser($formula, $coef, %elements); -} - - -sub internal_formula_parser { - use Text::Balanced qw(extract_bracketed); - - my ($formula, $coef, %form) = @_; - my $tmp_coef; - - my ($extract, $remainder, $prefix) = - extract_bracketed($formula, '()', '[^(]*'); - - if (defined($extract) and $extract ne '') { - $extract =~ s/^\((.*)\)$/$1/; - if ($remainder =~ s/^(\d+\.?\d*)(.*)$/$2/) { - $tmp_coef = $1 * $coef; - } else { - $tmp_coef = $coef; - } - - # get formula of prefix ( it has no parens) - %form = add_formula_strings($prefix, $coef, %form) if ($prefix ne ''); - - # check remainder for more parens - %form = internal_formula_parser($remainder, $coef, %form) - if ($remainder ne ''); - - # check extract for more parens - %form = - internal_formula_parser($extract, $tmp_coef, %form); - ## we already know this is ne '' - } else { # get formula of complete string - %form = add_formula_strings($remainder, $coef, %form) - if ($remainder ne ''); - } - return %form; -} - - -sub add_formula_strings { - my ($formula, $coef, %elements) = @_; - -# print "Getting Formula of $formula\n"; - $formula =~ /^(?:([A-Z][a-z]*)(\d+\.?\d*)?)+$/o # XXX new - or die "Invalid Portion of Formula $formula"; - while ($formula =~ m/([A-Z][a-z]*)(\d+\.?\d*)?/go) { # XXX new - my ($elm, $count) = ($1, $2); - $count = 1 unless defined $count; - if (defined $elements{$elm}) { - $elements{$elm} += $count * $coef; - } else { - $elements{$elm} = $count * $coef; - } - } - return %elements; -} - -sub ParensBalanced { - my ($form) = @_; - my @stack = (); - my %pairs = ( - '<' => '>', - '{' => '}', - '[' => ']', - '(' => ')' - ); - - while ($form =~ m/([<>(){}\]\[])/go) { - my $current = $1; - if ($current =~ /[<({\[]/) { - push(@stack, $current); - next; - } - return 0 if (scalar(@stack) == 0); - return 0 if ($current ne $pairs{ pop @stack}); - } - return @stack ? 0 : 1; -} - -sub Zof { - my ($El) = @_; - - my %ElementsZ = ( - "Muon",1, - "Li8", 3, - "B12", 5, - "H",1, - "He", 2, - "Li", 3, - "Be", 4, - "B", 5, - "C", 6, - "N", 7, - "O", 8, - "F", 9, - "Ne", 10, - "Na", 11, - "Mg", 12, - "Al", 13, - "Si", 14, - "P", 15, - "S", 16, - "Cl", 17, - "Ar", 18, - "K", 19, - "Ca", 20, - "Sc", 21, - "Ti", 22, - "V", 23, - "Cr", 24, - "Mn", 25, - "Fe", 26, - "Co", 27, - "Ni", 28, - "Cu", 29, - "Zn", 30, - "Ga", 31, - "Ge", 32, - "As", 33, - "Se", 34, - "Br", 35, - "Kr", 36, - "Rb", 37, - "Sr", 38, - "Y", 39, - "Zr", 40, - "Nb", 41, - "Mo", 42, - "Tc", 43, - "Ru", 44, - "Rh", 45, - "Pd", 46, - "Ag", 47, - "Cd", 48, - "In", 49, - "Sn", 50, - "Sb", 51, - "Te", 52, - "I", 53, - "Xe", 54, - "Cs", 55, - "Ba", 56, - "La", 57, - "Ce", 58, - "Pr", 59, - "Nd", 60, - "Pm", 61, - "Sm", 62, - "Eu", 63, - "Gd", 64, - "Tb", 65, - "Dy", 66, - "Ho", 67, - "Er", 68, - "Tm", 69, - "Yb", 70, - "Lu", 71, - "Hf", 72, - "Ta", 73, - "W", 74, - "Re", 75, - "Os", 76, - "Ir", 77, - "Pt", 78, - "Au", 79, - "Hg", 80, - "Tl", 81, - "Pb", 82, - "Bi", 83, - "Po", 84, - "At", 85, - "Rn", 86, - "Fr", 87, - "Ra", 88, - "Ac", 89, - "Th", 90, - "Pa", 91, - "U", 92, - "", 0.0000 - ); - return $ElementsZ{$El}; -} - -sub Massof { - my ($El) = @_; - - my %ElementsA = ( - "Muon",0.113, - "Li8", 8.0, - "B12", 12.0, - "H", 1.00800, - "He", 4.00300, - "Li", 6.93900, - "Be", 9.01200, - "B", 10.81100, - "C", 12.01100, - "N", 14.00700, - "O", 15.99900, - "F", 18.99800, - "Ne", 20.18300, - "Na", 22.99000, - "Mg", 24.31200, - "Al", 26.98200, - "Si", 28.08600, - "P", 30.97400, - "S", 32.06400, - "Cl", 35.45300, - "Ar", 39.94800, - "K", 39.10200, - "Ca", 40.08000, - "Sc", 44.95600, - "Ti", 47.90000, - "V", 50.94200, - "Cr", 51.99600, - "Mn", 54.93800, - "Fe", 55.84700, - "Co", 58.93300, - "Ni", 58.71000, - "Cu", 63.54000, - "Zn", 65.37000, - "Ga", 69.72000, - "Ge", 72.59000, - "As", 74.92200, - "Se", 78.96000, - "Br", 79.90900, - "Kr", 83.80000, - "Rb", 85.47000, - "Sr", 87.62000, - "Y", 88.90500, - "Zr", 91.22000, - "Nb", 92.90600, - "Mo", 95.94000, - "Tc", 98.00000, - "Ru", 101.07000, - "Rh", 102.90500, - "Pd", 106.40000, - "Ag", 107.87000, - "Cd", 112.40000, - "In", 114.82000, - "Sn", 118.69000, - "Sb", 121.75000, - "Te", 127.60000, - "I", 126.90400, - "Xe", 131.30000, - "Cs", 132.90500, - "Ba", 137.34000, - "La", 138.91000, - "Ce", 140.12000, - "Pr", 140.90700, - "Nd", 144.24001, - "Pm", 147.00000, - "Sm", 150.35001, - "Eu", 151.96001, - "Gd", 157.25000, - "Tb", 158.92400, - "Dy", 162.50000, - "Ho", 164.92999, - "Er", 167.25999, - "Tm", 168.93401, - "Yb", 173.03999, - "Lu", 174.97000, - "Hf", 178.49001, - "Ta", 180.94800, - "W", 183.85001, - "Re", 186.20000, - "Os", 190.20000, - "Ir", 192.20000, - "Pt", 195.09000, - "Au", 196.96700, - "Hg", 200.59000, - "Tl", 204.37000, - "Pb", 207.19000, - "Bi", 208.98000, - "Po", 210.00000, - "At", 210.00000, - "Rn", 222.00000, - "Fr", 223.00000, - "Ra", 226.00000, - "Ac", 227.00000, - "Th", 232.03799, - "Pa", 231.00000, - "U", 238.03000, - "", 0.0000 - ); - return $ElementsA{$El}; - -} - -sub Elastof { - my ($El) = @_; - - my %Elast = ( - "H", 0.10000, - "He", 0.10000, - "Li", 1.63000, - "Be", 3.32000, - "B", 5.77000, - "C", 7.37000, - "N", 4.92000, - "O", 2.60000, - "F", 0.84000, - "Ne", 0.02000, - "Na", 1.11000, - "Mg", 1.51000, - "Al", 3.39000, - "Si", 4.63000, - "P", 3.43000, - "S", 2.85000, - "Cl", 1.40000, - "Ar", 0.08000, - "K", 0.93000, - "Ca", 1.84000, - "Sc", 3.90000, - "Ti", 4.85000, - "V", 5.31000, - "Cr", 4.10000, - "Mn", 2.92000, - "Fe", 4.28000, - "Co", 4.39000, - "Ni", 4.44000, - "Cu", 3.49000, - "Zn", 1.35000, - "Ga", 2.81000, - "Ge", 3.85000, - "As", 2.96000, - "Se", 2.25000, - "Br", 1.22000, - "Kr", 0.12000, - "Rb", 0.85000, - "Sr", 1.72000, - "Y", 4.37000, - "Zr", 6.25000, - "Nb", 7.57000, - "Mo", 6.82000, - "Tc", 6.85000, - "Ru", 6.74000, - "Rh", 5.75000, - "Pd", 3.89000, - "Ag", 2.95000, - "Cd", 1.16000, - "In", 2.52000, - "Sn", 3.14000, - "Sb", 2.75000, - "Te", 2.23000, - "I", 1.11000, - "Xe", 0.16000, - "Cs", 0.80000, - "Ba", 1.90000, - "La", 4.47000, - "Ce", 4.32000, - "Pr", 3.70000, - "Nd", 3.40000, - "Pm", 0.10000, - "Sm", 2.14000, - "Eu", 1.86000, - "Gd", 4.14000, - "Tb", 4.05000, - "Dy", 3.04000, - "Ho", 3.14000, - "Er", 3.29000, - "Tm", 2.42000, - "Yb", 1.60000, - "Lu", 4.43000, - "Hf", 6.44000, - "Ta", 8.10000, - "W", 8.90000, - "Re", 8.03000, - "Os", 8.17000, - "Ir", 6.94000, - "Pt", 5.84000, - "Au", 3.81000, - "Hg", 0.67000, - "Tl", 1.88000, - "Pb", 2.03000, - "Bi", 2.18000, - "Po", 1.50000, - "At", 0.10000, - "Rn", 0.20000, - "Fr", 0.10000, - "Ra", 1.66000, - "Ac", 4.25000, - "Th", 6.20000, - "Pa", 0.10000, - "U", 5.55000, - "", 0.00000 - ); - return $Elast{$El}; -} - -sub Stopicru { -# Given the element it returns "A-1, A-2, A-3, A-4, A-5" of the ziegler tables - my ($El) = @_; - - my %Stopicru = ( - "H", "1.25400,1.44000,242.60001,12000.00000,0.11590", - "He", "1.22900,1.39700,484.50000,5873.00000,0.05225", - "Li", "1.41100,1.60000,725.59998,3013.00000,0.04578", - "Be", "2.24800,2.59000,966.00000,153.80000,0.03475", - "B", "2.47400,2.81500,1206.00000,1060.00000,0.02855", - "C", "2.60100,2.60100,1701.00000,1279.00000,0.01638", - "N", "2.95400,3.35000,1683.00000,1900.00000,0.02513", - "O", "2.65200,3.00000,1920.00000,2000.00000,0.02230", - "F", "2.08500,2.35200,2157.00000,2634.00000,0.01816", - "Ne", "1.95100,2.19900,2393.00000,2699.00000,0.01568", - "Na", "2.54200,2.86900,2628.00000,1854.00000,0.01472", - "Mg", "3.79100,4.29300,2862.00000,1009.00000,0.01397", - "Al", "4.15400,4.73900,2766.00000,164.50000,0.02023", - "Si", "4.91400,5.59800,3193.00000,232.70000,0.01419", - "P", "3.23200,3.64700,3561.00000,1560.00000,0.01267", - "S", "3.44700,3.89100,3792.00000,1219.00000,0.01211", - "Cl", "5.30100,6.00800,3969.00000,645.09998,0.01183", - "Ar", "5.73100,6.50000,4253.00000,530.00000,0.01123", - "K", "5.15200,5.83300,4482.00000,545.70001,0.01129", - "Ca", "5.52100,6.25200,4710.00000,553.29999,0.01120", - "Sc", "5.20100,5.88400,4938.00000,560.90002,0.01000", - "Ti", "4.85800,5.48900,5260.00000,651.09998,0.00893", - "V", "4.47900,5.05500,5391.00000,952.29999,0.00912", - "Cr", "3.98300,4.48900,5616.00000,1336.00000,0.00841", - "Mn", "3.46900,3.90700,5725.00000,1461.00000,0.00883", - "Fe", "3.51900,3.96300,6065.00000,1243.00000,0.00778", - "Co", "3.14000,3.53500,6288.00000,1372.00000,0.00736", - "Ni", "3.55300,4.00400,6205.00000,555.09998,0.00876", - "Cu", "3.69600,4.19400,4649.00000,81.13000,0.02242", - "Zn", "4.21000,4.75000,6953.00000,295.20001,0.00681", - "Ga", "5.04100,5.69700,7137.00000,202.60001,0.00673", - "Ge", "5.55400,6.30000,6496.00000,110.00000,0.00969", - "As", "5.32300,6.01200,7611.00000,292.50000,0.00645", - "Se", "5.87400,6.65600,7395.00000,117.50000,0.00768", - "Br", "6.65800,7.53600,7694.00000,222.30000,0.00651", - "Kr", "6.41300,7.24000,11850.00000,153.70000,0.00288", - "Rb", "5.69400,6.42900,8478.00000,292.89999,0.00609", - "Sr", "6.33900,7.15900,8693.00000,330.29999,0.00600", - "Y", "6.40700,7.23400,8907.00000,367.79999,0.00589", - "Zr", "6.73400,7.60300,9120.00000,405.20001,0.00576", - "Nb", "6.90100,7.79100,9333.00000,442.70001,0.00559", - "Mo", "6.42400,7.24800,9545.00000,480.20001,0.00538", - "Tc", "6.79900,7.67100,9756.00000,517.59998,0.00532", - "Ru", "6.10900,6.88700,9966.00000,555.09998,0.00515", - "Rh", "5.92400,6.67700,10180.00000,592.50000,0.00492", - "Pd", "5.23800,5.90000,10380.00000,630.00000,0.00476", - "Ag", "5.34500,6.03800,6790.00000,397.79999,0.01676", - "Cd", "5.81400,6.55400,10800.00000,355.50000,0.00463", - "In", "6.22900,7.02400,11010.00000,370.89999,0.00454", - "Sn", "6.40900,7.22700,11210.00000,386.39999,0.00447", - "Sb", "7.50000,8.48000,8608.00000,348.00000,0.00907", - "Te", "6.97900,7.87100,11620.00000,392.39999,0.00440", - "I", "7.72500,8.71600,11830.00000,394.79999,0.00438", - "Xe", "8.33700,9.42500,10510.00000,269.60001,0.00621", - "Cs", "7.28700,8.21800,12230.00000,399.70001,0.00445", - "Ba", "7.89900,8.91100,12430.00000,402.10001,0.00451", - "La", "8.04100,9.07100,12630.00000,404.50000,0.00454", - "Ce", "7.48800,8.44400,12830.00000,406.89999,0.00442", - "Pr", "7.29100,8.21900,13030.00000,409.29999,0.00430", - "Nd", "7.09800,8.00000,13230.00000,411.79999,0.00418", - "Pm", "6.90900,7.78600,13430.00000,414.20001,0.00406", - "Sm", "6.72800,7.58000,13620.00000,416.60001,0.00398", - "Eu", "6.55100,7.38000,13820.00000,419.00000,0.00388", - "Gd", "6.73900,7.59200,14020.00000,421.39999,0.00386", - "Tb", "6.21200,6.99600,14210.00000,423.89999,0.00372", - "Dy", "5.51700,6.21000,14400.00000,426.29999,0.00363", - "Ho", "5.22000,5.87400,14600.00000,428.70001,0.00350", - "Er", "5.07100,5.70600,14790.00000,433.00000,0.00341", - "Tm", "4.92600,5.54200,14980.00000,433.50000,0.00334", - "Yb", "4.78800,5.38600,15170.00000,435.89999,0.00329", - "Lu", "4.89300,5.50500,15360.00000,438.29999,0.00324", - "Hf", "5.02800,5.65700,15550.00000,440.79999,0.00320", - "Ta", "4.73800,5.32900,15740.00000,443.20001,0.00319", - "W", "4.58700,5.16000,15410.00000,415.29999,0.00341", - "Re", "5.20100,5.85100,16120.00000,441.60001,0.00312", - "Os", "5.07100,5.70400,16300.00000,440.89999,0.00308", - "Ir", "4.94600,5.56300,16490.00000,440.10001,0.00296", - "Pt", "4.47700,5.03400,16670.00000,439.29999,0.00287", - "Au", "4.84400,5.45800,7852.00000,975.79999,0.02077", - "Hg", "4.30700,4.84300,17040.00000,487.79999,0.00288", - "Tl", "4.72300,5.31100,17220.00000,537.00000,0.00291", - "Pb", "5.31900,5.98200,17400.00000,586.29999,0.00287", - "Bi", "5.95600,6.70000,17800.00000,677.00000,0.00266", - "Po", "6.15800,6.92800,17770.00000,586.29999,0.00281", - "At", "6.20300,6.97900,17950.00000,586.29999,0.00278", - "Rn", "6.18100,6.95400,18120.00000,586.29999,0.00275", - "Fr", "6.94900,7.82000,18300.00000,586.29999,0.00274", - "Ra", "7.50600,8.44800,18480.00000,586.29999,0.00273", - "Ac", "7.64800,8.60900,18660.00000,586.29999,0.00270", - "Th", "7.71100,8.67900,18830.00000,586.29999,0.00264", - "Pa", "7.40700,8.33600,19010.00000,586.29999,0.00260", - "U", "7.29000,8.20400,19180.00000,586.29999,0.00267", - "", "0.00000,0.00000,0.00000,0.00000,0.00000" - ); - return $Stopicru{$El}; -} - -sub Densities { -# Database of densities for different compounds and elements - my ($Compound) = @_; - - my %Densities = ( - "NbN",8.47, - "Bi2Se3",7.51, - "N2",1.145, - "ZnO",5.61, - "ZnSe",5.26, - "ZnS",4.09, - "ZrO",6.0, - "Gd3Ga5O12",7.08, - "MgAl2O4",3.60, - "NdGaO3",7.57, - "YAlO3",4.88, - "Y3Al5O12",4.55, - "LiF",2.60, - "CaF2",3.18, - "BaFe",4.83, - "MgF2",3.18, - "SiO2",2.65, - "TiO2",4.26, - "KTaO3",6.967, - "LaAlO3",6.70, - "Al2O3",3.98, - "SrTiO3",5.12, - "SrLaGaO4",6.389, - "SrLaAlO4",5.924, - "NbSe2",6.30, - "MgO",3.58, - "YBa2Cu3O7",6.54, - "GaAs",5.32, - "Mn12-Acetate",1.65, - "C60",1.65, - "H",0.08, - "He",0.12, - "Li",0.53, - "Be",1.85, - "B",2.34, - "C",2.26, - "N",1.03, - "O",2.00, - "F",1.11, - "Ne",1.50, - "Na",0.97, - "Mg",1.74, - "Al",2.7, - "Si",2.33, - "P",1.00, - "S",2.07, - "Cl",2.03, - "Ar",1.77, - "K",0.86, - "Ca",1.55, - "Sc",2.99, - "Ti",4.54, - "V",6.11, - "Cr",7.19, - "Mn",7.43, - "Fe",7.87, - "Co",8.9, - "Ni",8.9, - "Cu",8.96, - "Zn",7.13, - "Ga",5.91, - "Ge",5.32, - "As",5.72, - "Se",4.79, - "Br",3.14, - "Kr",3.10, - "Rb",1.53, - "Sr",2.54, - "Y",4.47, - "Zr",6.51, - "Nb",8.57, - "Mo",10.22, - "Tc",11.5, - "Ru",12.37, - "Rh",12.41, - "Pd",12.02, - "Ag",10.5, - "Cd",8.65, - "In",7.31, - "Sn",7.31, - "Sb",6.68, - "Te",6.24, - "I",4.93, - "Xe",3.80, - "Cs",1.90, - "Ba",3.59, - "La",6.15, - "Ce",6.77, - "Pr",6.77, - "Nd",7.01, - "Pm",7.22, - "Sm",7.52, - "Eu",5.24, - "Gd",7.9, - "Tb",8.23, - "Dy",8.55, - "Ho",8.8, - "Er",9.07, - "Tm",9.32, - "Yb",6.9, - "Lu",9.84, - "Hf",13.31, - "Ta",16.65, - "W",19.35, - "Re",21.04, - "Os",22.6, - "Ir",22.4, - "Pt",21.45, - "Au",19.32, - "Hg",13.55, - "Tl",11.85, - "Pb",11.35, - "Bi",9.75, - "Po",9.3, - "Th",11.72, - "Pa",15.4, - "U",18.95, - "","" - ); - return $Densities{$Compound}; -} - -1; - diff --git a/trimsp/src/TrimSPGUI4/Chem.pm b/trimsp/src/TrimSPGUI4/Chem.pm new file mode 120000 index 0000000..3c8897e --- /dev/null +++ b/trimsp/src/TrimSPGUI4/Chem.pm @@ -0,0 +1 @@ +../TrimSPGUI/Chem.pm \ No newline at end of file diff --git a/trimsp/src/TrimSPGUI4/TrimSPGUI4.pm b/trimsp/src/TrimSPGUI4/TrimSPGUI4.pm index ca751ae..efda7ff 100644 --- a/trimsp/src/TrimSPGUI4/TrimSPGUI4.pm +++ b/trimsp/src/TrimSPGUI4/TrimSPGUI4.pm @@ -592,7 +592,7 @@ sub StartSequenceOne() my $iScan=0; foreach (@SValues) { if ($All{"comboScan"}==5) { - layerTable->setText($All{"ScandL"},2,$_); + layerTable->setText($All{"ScandL"}-1,2,$_); } else { $ScanAttrib->setText($_); }