nuclearmasses 0.0.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
File without changes
@@ -0,0 +1,56 @@
1
+ """Storage for variable line positions."""
2
+ from nuclearmasses.parse import Parse
3
+
4
+
5
+ class AMEMassFile(Parse):
6
+ """Easy access to where the variables are in the AME mass file."""
7
+
8
+ def __init__(self, year: int):
9
+ """Setup up the values."""
10
+ super().__init__()
11
+ if year < 2020:
12
+ self.HEADER = 39
13
+ self.FOOTER = None
14
+ self.START_A = 16
15
+ self.END_A = 19
16
+ self.START_Z = 11
17
+ self.END_Z = 14
18
+ self.START_ME = 29
19
+ self.END_ME = 41
20
+ self.START_DME = 42
21
+ self.END_DME = 53
22
+ self.START_BE_PER_A = 54
23
+ self.END_BE_PER_A = 64
24
+ self.START_DBE_PER_A = 65
25
+ self.END_DBE_PER_A = 72
26
+ self.START_BETA_DECAY_ENERGY = 76
27
+ self.END_BETA_DECAY_ENERGY = 86
28
+ self.START_DBETA_DECAY_ENERGY = 87
29
+ self.END_DBETA_DECAY_ENERGY = 95
30
+ self.START_MICRO_U = 100
31
+ self.END_MICRO_U = 112
32
+ self.START_MICRO_DU = 113
33
+ self.END_MICRO_DU = 125
34
+ else:
35
+ self.HEADER = 36
36
+ self.FOOTER = None
37
+ self.START_A = 16
38
+ self.END_A = 19
39
+ self.START_Z = 11
40
+ self.END_Z = 14
41
+ self.START_ME = 29
42
+ self.END_ME = 42
43
+ self.START_DME = 43
44
+ self.END_DME = 53
45
+ self.START_BE_PER_A = 56
46
+ self.END_BE_PER_A = 66
47
+ self.START_DBE_PER_A = 69
48
+ self.END_DBE_PER_A = 77
49
+ self.START_BETA_DECAY_ENERGY = 82
50
+ self.END_BETA_DECAY_ENERGY = 93
51
+ self.START_DBETA_DECAY_ENERGY = 95
52
+ self.END_DBETA_DECAY_ENERGY = 104
53
+ self.START_MICRO_U = 110
54
+ self.END_MICRO_U = 120
55
+ self.START_MICRO_DU = 124
56
+ self.END_MICRO_DU = 135
@@ -0,0 +1,55 @@
1
+ """Extract the data from the AME mass file."""
2
+ import logging
3
+ import pathlib
4
+
5
+ import pandas as pd
6
+
7
+ from nuclearmasses.ame_mass_file import AMEMassFile
8
+
9
+
10
+ class AMEMassParser(AMEMassFile):
11
+ """Parse the AME mass file.
12
+
13
+ The format is known but I don't think python can easily parse it.
14
+ """
15
+
16
+ def __init__(self, filename: pathlib.Path, year: int):
17
+ """Set the file to read and table year."""
18
+ self.filename = filename
19
+ self.year = year
20
+ super().__init__(self.year)
21
+ logging.info(f"Reading {self.filename} from {self.year}")
22
+
23
+ def _read_line(self, line: str) -> dict:
24
+ """Read a line from the file."""
25
+ if line.find("#") != -1:
26
+ line = line.replace("#", " ")
27
+
28
+ data = {
29
+ "TableYear": self.year,
30
+ "A": self._read_as_int(line, self.START_A, self.END_A),
31
+ "Z": self._read_as_int(line, self.START_Z, self.END_Z),
32
+ "AMEMassExcess": self._read_as_float(line, self.START_ME, self.END_ME),
33
+ "AMEMassExcessError": self._read_as_float(line, self.START_DME, self.END_DME),
34
+ "BindingEnergyPerA": self._read_as_float(line, self.START_BE_PER_A, self.END_BE_PER_A),
35
+ "BindingEnergyPerAError": self._read_as_float(line, self.START_DBE_PER_A, self.END_DBE_PER_A),
36
+ "BetaDecayEnergy": self._read_as_float(line, self.START_BETA_DECAY_ENERGY, self.END_BETA_DECAY_ENERGY),
37
+ "BetaDecayEnergyError": self._read_as_float(line, self.START_DBETA_DECAY_ENERGY, self.END_DBETA_DECAY_ENERGY),
38
+ "AtomicMass": self._read_as_float(line, self.START_MICRO_U, self.END_MICRO_U),
39
+ "AtomicMassError": self._read_as_float(line, self.START_MICRO_DU, self.END_MICRO_DU),
40
+ }
41
+
42
+ data["N"] = data["A"] - data["Z"]
43
+ data["Symbol"] = self.z_to_symbol[data["Z"]]
44
+
45
+ return data
46
+
47
+ def read_file(self) -> pd.DataFrame:
48
+ """Read the file."""
49
+ with open(self.filename, "r") as f:
50
+ lines = [line.rstrip() for line in f]
51
+
52
+ # Remove the header lines
53
+ lines = lines[self.HEADER: self.FOOTER]
54
+
55
+ return pd.DataFrame([self._read_line(line) for line in lines])
@@ -0,0 +1,72 @@
1
+ """Storage for the variable line positions."""
2
+ from nuclearmasses.parse import Parse
3
+
4
+
5
+ class AMEReactionFileOne(Parse):
6
+ """Easy access to where the variables are in the first AME reaction file."""
7
+
8
+ def __init__(self, year: int):
9
+ """Setup the values that locate the variable."""
10
+ super().__init__()
11
+ if year < 2020:
12
+ self.HEADER = 39
13
+ self.FOOTER = None
14
+ self.START_R1_A = 1
15
+ self.END_R1_A = 4
16
+ self.START_R1_Z = 8
17
+ self.END_R1_Z = 11
18
+ self.START_S2N = 14
19
+ self.END_S2N = 22
20
+ self.START_DS2N = 23
21
+ self.END_DS2N = 30
22
+ self.START_S2P = 32
23
+ self.END_S2P = 40
24
+ self.START_DS2P = 41
25
+ self.END_DS2P = 48
26
+ self.START_QA = 50
27
+ self.END_QA = 58
28
+ self.START_DQA = 59
29
+ self.END_DQA = 66
30
+ self.START_Q2B = 67
31
+ self.END_Q2B = 76
32
+ self.START_DQ2B = 77
33
+ self.END_DQ2B = 84
34
+ self.START_QEP = 85
35
+ self.END_QEP = 94
36
+ self.START_DQEP = 95
37
+ self.END_DQEP = 102
38
+ self.START_QBN = 103
39
+ self.END_QBN = 112
40
+ self.START_DQBN = 113
41
+ self.END_DQBN = 125
42
+ else:
43
+ self.HEADER = 35
44
+ self.FOOTER = None
45
+ self.START_R1_A = 1
46
+ self.END_R1_A = 4
47
+ self.START_R1_Z = 8
48
+ self.END_R1_Z = 11
49
+ self.START_S2N = 14
50
+ self.END_S2N = 24
51
+ self.START_DS2N = 25
52
+ self.END_DS2N = 34
53
+ self.START_S2P = 36
54
+ self.END_S2P = 46
55
+ self.START_DS2P = 47
56
+ self.END_DS2P = 56
57
+ self.START_QA = 58
58
+ self.END_QA = 68
59
+ self.START_DQA = 69
60
+ self.END_DQA = 78
61
+ self.START_Q2B = 79
62
+ self.END_Q2B = 90
63
+ self.START_DQ2B = 91
64
+ self.END_DQ2B = 100
65
+ self.START_QEP = 101
66
+ self.END_QEP = 112
67
+ self.START_DQEP = 113
68
+ self.END_DQEP = 122
69
+ self.START_QBN = 123
70
+ self.END_QBN = 134
71
+ self.START_DQBN = 135
72
+ self.END_DQBN = 144
@@ -0,0 +1,61 @@
1
+ """Extract the data from the first reaction file."""
2
+ import logging
3
+ import pathlib
4
+
5
+ import pandas as pd
6
+
7
+ from nuclearmasses.ame_reaction_1_file import AMEReactionFileOne
8
+
9
+
10
+ class AMEReactionParserOne(AMEReactionFileOne):
11
+ """Parse the first AME reaction file.
12
+
13
+ The format is known but I don't think python can easily parse it.
14
+ """
15
+
16
+ def __init__(self, filename: pathlib.Path, year: int):
17
+ """Set the file to read and table year."""
18
+ self.filename = filename
19
+ self.year = year
20
+ super().__init__(self.year)
21
+ logging.info(f"Reading {self.filename} from {self.year}")
22
+
23
+ def _read_line(self, line: str) -> dict:
24
+ """Read a line from the file."""
25
+ # Don't use a '#' as an experimental marker in this file
26
+ # but still need to remove it
27
+ if line.find("#") != -1:
28
+ line = line.replace("#", " ")
29
+
30
+ data = {
31
+ "TableYear": self.year,
32
+ "A": self._read_as_int(line, self.START_R1_A, self.END_R1_A),
33
+ "Z": self._read_as_int(line, self.START_R1_Z, self.END_R1_Z),
34
+ "TwoNeutronSeparationEnergy": self._read_as_float(line, self.START_S2N, self.END_S2N),
35
+ "TwoNeutronSeparationEnergyError": self._read_as_float(line, self.START_DS2N, self.END_DS2N),
36
+ "TwoProtonSeparationEnergy": self._read_as_float(line, self.START_S2P, self.END_S2P),
37
+ "TwoProtonSeparationEnergyError": self._read_as_float(line, self.START_DS2P, self.END_DS2P),
38
+ "QAlpha": self._read_as_float(line, self.START_QA, self.END_QA),
39
+ "QAlphaError": self._read_as_float(line, self.START_DQA, self.END_DQA),
40
+ "QTwoBeta": self._read_as_float(line, self.START_Q2B, self.END_Q2B),
41
+ "QTwoBetaError": self._read_as_float(line, self.START_DQ2B, self.END_DQ2B),
42
+ "QEpsilon": self._read_as_float(line, self.START_QEP, self.END_QEP),
43
+ "QEpsilonError": self._read_as_float(line, self.START_DQEP, self.END_DQEP),
44
+ "QBetaNeutron": self._read_as_float(line, self.START_QBN, self.END_QBN),
45
+ "QBetaNeutronError": self._read_as_float(line, self.START_DQBN, self.END_DQBN),
46
+ }
47
+
48
+ data["N"] = data["A"] - data["Z"]
49
+ data["Symbol"] = self.z_to_symbol[data["Z"]]
50
+
51
+ return data
52
+
53
+ def read_file(self) -> pd.DataFrame:
54
+ """Read the file."""
55
+ with open(self.filename, "r") as f:
56
+ lines = [line.rstrip() for line in f]
57
+
58
+ # Remove the header lines
59
+ lines = lines[self.HEADER: self.FOOTER]
60
+
61
+ return pd.DataFrame([self._read_line(line) for line in lines])
@@ -0,0 +1,72 @@
1
+ """Storage for the variable line positions."""
2
+ from nuclearmasses.parse import Parse
3
+
4
+
5
+ class AMEReactionFileTwo(Parse):
6
+ """Easy access to where the variables are in the second AME reaction file."""
7
+
8
+ def __init__(self, year: int):
9
+ """Setup the values that locate the variables."""
10
+ super().__init__()
11
+ if year < 2020:
12
+ self.HEADER = 39
13
+ self.FOOTER = None
14
+ self.START_R2_A = 1
15
+ self.END_R2_A = 4
16
+ self.START_R2_Z = 8
17
+ self.END_R2_Z = 11
18
+ self.START_SN = 14
19
+ self.END_SN = 22
20
+ self.START_DSN = 23
21
+ self.END_DSN = 30
22
+ self.START_SP = 32
23
+ self.END_SP = 40
24
+ self.START_DSP = 41
25
+ self.END_DSP = 48
26
+ self.START_Q4B = 49
27
+ self.END_Q4B = 58
28
+ self.START_DQ4B = 59
29
+ self.END_DQ4B = 66
30
+ self.START_QDA = 67
31
+ self.END_QDA = 76
32
+ self.START_DQDA = 77
33
+ self.END_DQDA = 84
34
+ self.START_QPA = 85
35
+ self.END_QPA = 94
36
+ self.START_DQPA = 95
37
+ self.END_DQPA = 102
38
+ self.START_QNA = 103
39
+ self.END_QNA = 112
40
+ self.START_DQNA = 113
41
+ self.END_DQNA = 125
42
+ else:
43
+ self.HEADER = 37
44
+ self.FOOTER = 3645
45
+ self.START_R2_A = 1
46
+ self.END_R2_A = 4
47
+ self.START_R2_Z = 8
48
+ self.END_R2_Z = 11
49
+ self.START_SN = 14
50
+ self.END_SN = 24
51
+ self.START_DSN = 25
52
+ self.END_DSN = 34
53
+ self.START_SP = 36
54
+ self.END_SP = 46
55
+ self.START_DSP = 47
56
+ self.END_DSP = 56
57
+ self.START_Q4B = 57
58
+ self.END_Q4B = 68
59
+ self.START_DQ4B = 69
60
+ self.END_DQ4B = 78
61
+ self.START_QDA = 79
62
+ self.END_QDA = 90
63
+ self.START_DQDA = 91
64
+ self.END_DQDA = 100
65
+ self.START_QPA = 101
66
+ self.END_QPA = 112
67
+ self.START_DQPA = 113
68
+ self.END_DQPA = 122
69
+ self.START_QNA = 123
70
+ self.END_QNA = 134
71
+ self.START_DQNA = 135
72
+ self.END_DQNA = 144
@@ -0,0 +1,64 @@
1
+ """Extract the date from the second reaction file."""
2
+ import logging
3
+ import pathlib
4
+
5
+ import pandas as pd
6
+
7
+ from nuclearmasses.ame_reaction_2_file import AMEReactionFileTwo
8
+
9
+
10
+ class AMEReactionParserTwo(AMEReactionFileTwo):
11
+ """Parse the second AME reaction file.
12
+
13
+ The format is known but I don't think python can easily parse it.
14
+ """
15
+
16
+ def __init__(self, filename: pathlib.Path, year: int):
17
+ """Set the file to read and table year."""
18
+ self.filename = filename
19
+ self.year = year
20
+ super().__init__(self.year)
21
+ logging.info(f"Reading {self.filename} from {self.year}")
22
+
23
+ def _read_line(self, line: str) -> dict:
24
+ """Read a line from the file."""
25
+ # Don't use a '#' as an experimental marker in this file
26
+ # but still need to remove it
27
+ if line.find("#") != -1:
28
+ line = line.replace("#", " ")
29
+
30
+ data = {
31
+ "TableYear": self.year,
32
+ "A": self._read_as_int(line, self.START_R2_A, self.END_R2_A),
33
+ "Z": self._read_as_int(line, self.START_R2_Z, self.END_R2_Z),
34
+ "OneNeutronSeparationEnergy": self._read_as_float(line, self.START_SN, self.END_SN),
35
+ "OneNeutronSeparationEnergyError": self._read_as_float(line, self.START_DSN, self.END_DSN),
36
+ "OneProtonSeparationEnergy": self._read_as_float(line, self.START_SP, self.END_SP),
37
+ "OneProtonSeparationEnergyError": self._read_as_float(line, self.START_DSP, self.END_DSP),
38
+ "QFourBeta": self._read_as_float(line, self.START_Q4B, self.END_Q4B),
39
+ "QFourBetaError": self._read_as_float(line, self.START_DQ4B, self.END_DQ4B),
40
+ "QDeuteronAlpha": self._read_as_float(line, self.START_QDA, self.END_QDA),
41
+ "QDeuteronAlphaError": self._read_as_float(line, self.START_DQDA, self.END_DQDA),
42
+ "QProtonAlpha": self._read_as_float(line, self.START_QPA, self.END_QPA),
43
+ "QProtonAlphaError": self._read_as_float(line, self.START_DQPA, self.END_DQPA),
44
+ "QNeutronAlpha": self._read_as_float(line, self.START_QNA, self.END_QNA),
45
+ "QNeutronAlphaError": self._read_as_float(line, self.START_DQNA, self.END_DQNA),
46
+ }
47
+
48
+ data["N"] = data["A"] - data["Z"]
49
+ data["Symbol"] = self.z_to_symbol[data["Z"]]
50
+
51
+ return data
52
+
53
+ def read_file(self) -> pd.DataFrame:
54
+ """Read the file."""
55
+ with open(self.filename, "r") as f:
56
+ lines = [line.rstrip() for line in f]
57
+
58
+ # Remove the header lines and the footer for the 2020 table
59
+ lines = lines[self.HEADER: self.FOOTER]
60
+
61
+ # The 2020 rct2 file has additional lines feeds not present in any other file
62
+ the_lines = [line for line in lines if line[:1] != "1"]
63
+
64
+ return pd.DataFrame([self._read_line(line) for line in the_lines])