From 3e4074051ca0588da3574d8ced5a79b965b8b556 Mon Sep 17 00:00:00 2001 From: Gordon McCann Date: Tue, 24 May 2022 13:12:53 -0400 Subject: [PATCH] First commit --- .gitignore | 9 + CalDict.make | 140 ++ Makefile | 58 + SabreRecon.make | 180 ++ etc/mass.txt | 2501 ++++++++++++++++++++++++++ include/DataStructs.h | 26 + input.txt | 23 + objs/Release/CalDict/DataStructs.d | 4 + premake5.lua | 114 ++ src/CalDict/DataStructs.cpp | 3 + src/CalDict/DataStructs.h | 26 + src/CalDict/LinkDef_CalDict.h | 6 + src/CutHandler.cpp | 103 ++ src/CutHandler.h | 54 + src/Detectors/FocalPlaneDetector.cpp | 30 + src/Detectors/FocalPlaneDetector.h | 38 + src/Detectors/SabreDetector.cpp | 345 ++++ src/Detectors/SabreDetector.h | 203 +++ src/EnergyLoss/EnergyLoss.cpp | 222 +++ src/EnergyLoss/EnergyLoss.h | 47 + src/EnergyLoss/EnergyLossConstants.h | 147 ++ src/EnergyLoss/Target.cpp | 117 ++ src/EnergyLoss/Target.h | 48 + src/Histogrammer.cpp | 160 ++ src/Histogrammer.h | 62 + src/MassLookup.cpp | 73 + src/MassLookup.h | 44 + src/RandomGenerator.cpp | 12 + src/RandomGenerator.h | 28 + src/Reconstructor.cpp | 332 ++++ src/Reconstructor.h | 77 + src/main.cpp | 26 + 32 files changed, 5258 insertions(+) create mode 100644 .gitignore create mode 100644 CalDict.make create mode 100644 Makefile create mode 100644 SabreRecon.make create mode 100644 etc/mass.txt create mode 100644 include/DataStructs.h create mode 100644 input.txt create mode 100644 objs/Release/CalDict/DataStructs.d create mode 100644 premake5.lua create mode 100644 src/CalDict/DataStructs.cpp create mode 100644 src/CalDict/DataStructs.h create mode 100644 src/CalDict/LinkDef_CalDict.h create mode 100644 src/CutHandler.cpp create mode 100644 src/CutHandler.h create mode 100644 src/Detectors/FocalPlaneDetector.cpp create mode 100644 src/Detectors/FocalPlaneDetector.h create mode 100644 src/Detectors/SabreDetector.cpp create mode 100644 src/Detectors/SabreDetector.h create mode 100644 src/EnergyLoss/EnergyLoss.cpp create mode 100644 src/EnergyLoss/EnergyLoss.h create mode 100644 src/EnergyLoss/EnergyLossConstants.h create mode 100644 src/EnergyLoss/Target.cpp create mode 100644 src/EnergyLoss/Target.h create mode 100644 src/Histogrammer.cpp create mode 100644 src/Histogrammer.h create mode 100644 src/MassLookup.cpp create mode 100644 src/MassLookup.h create mode 100644 src/RandomGenerator.cpp create mode 100644 src/RandomGenerator.h create mode 100644 src/Reconstructor.cpp create mode 100644 src/Reconstructor.h create mode 100644 src/main.cpp diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b173d54 --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +*.o +*.so +*.sublime-project +*.sublime-workspace +*.cxx +*.pcm +SabreRecon + +!.gitignore diff --git a/CalDict.make b/CalDict.make new file mode 100644 index 0000000..9803231 --- /dev/null +++ b/CalDict.make @@ -0,0 +1,140 @@ +# Alternative GNU Make project makefile autogenerated by Premake + +ifndef config + config=release +endif + +ifndef verbose + SILENT = @ +endif + +.PHONY: clean prebuild + +SHELLTYPE := posix +ifeq (.exe,$(findstring .exe,$(ComSpec))) + SHELLTYPE := msdos +endif + +# Configurations +# ############################################# + +RESCOMP = windres +TARGETDIR = lib +TARGET = $(TARGETDIR)/libCalDict.so +DEFINES += +INCLUDES += -I. -Isrc/CalDict -isystem /usr/include/root +FORCE_INCLUDE += +ALL_CPPFLAGS += $(CPPFLAGS) -MMD -MP $(DEFINES) $(INCLUDES) +ALL_RESFLAGS += $(RESFLAGS) $(DEFINES) $(INCLUDES) +LIBS += -lGui -lCore -lImt -lRIO -lNet -lHist -lGraf -lGraf3d -lGpad -lROOTDataFrame -lROOTVecOps -lTree -lTreePlayer -lRint -lPostscript -lMatrix -lPhysics -lMathCore -lThread -lMultiProc -lm -ldl +LDDEPS += +LINKCMD = $(CXX) -o "$@" $(OBJECTS) $(RESOURCES) $(ALL_LDFLAGS) $(LIBS) +define PREBUILDCMDS + @echo Running prebuild commands + rootcint -f src/CalDict/cal_dict.cxx src/CalDict/DataStructs.h src/CalDict/LinkDef_CalDict.h + cp -rf src/CalDict/*.pcm lib +endef +define PRELINKCMDS +endef +define POSTBUILDCMDS + @echo Running postbuild commands + cp -rf src/CalDict/DataStructs.h include +endef + +ifeq ($(config),release) +OBJDIR = objs/Release/CalDict +ALL_CFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) -m64 -O2 -fPIC +ALL_CXXFLAGS += $(CXXFLAGS) $(ALL_CPPFLAGS) -m64 -O2 -fPIC -std=c++11 +ALL_LDFLAGS += $(LDFLAGS) -L/usr/lib64/root -L/usr/lib64 -m64 -shared -Wl,-soname=libCalDict.so -s -pthread -rdynamic + +else ifeq ($(config),debug) +OBJDIR = objs/Debug/CalDict +ALL_CFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) -m64 -fPIC -g +ALL_CXXFLAGS += $(CXXFLAGS) $(ALL_CPPFLAGS) -m64 -fPIC -g -std=c++11 +ALL_LDFLAGS += $(LDFLAGS) -L/usr/lib64/root -L/usr/lib64 -m64 -shared -Wl,-soname=libCalDict.so -pthread -rdynamic + +endif + +# Per File Configurations +# ############################################# + + +# File sets +# ############################################# + +GENERATED := +OBJECTS := + +GENERATED += $(OBJDIR)/DataStructs.o +OBJECTS += $(OBJDIR)/DataStructs.o + +# Rules +# ############################################# + +all: $(TARGET) + @: + +$(TARGET): $(GENERATED) $(OBJECTS) $(LDDEPS) | $(TARGETDIR) + $(PRELINKCMDS) + @echo Linking CalDict + $(SILENT) $(LINKCMD) + $(POSTBUILDCMDS) + +$(TARGETDIR): + @echo Creating $(TARGETDIR) +ifeq (posix,$(SHELLTYPE)) + $(SILENT) mkdir -p $(TARGETDIR) +else + $(SILENT) mkdir $(subst /,\\,$(TARGETDIR)) +endif + +$(OBJDIR): + @echo Creating $(OBJDIR) +ifeq (posix,$(SHELLTYPE)) + $(SILENT) mkdir -p $(OBJDIR) +else + $(SILENT) mkdir $(subst /,\\,$(OBJDIR)) +endif + +clean: + @echo Cleaning CalDict +ifeq (posix,$(SHELLTYPE)) + $(SILENT) rm -f $(TARGET) + $(SILENT) rm -rf $(GENERATED) + $(SILENT) rm -rf $(OBJDIR) +else + $(SILENT) if exist $(subst /,\\,$(TARGET)) del $(subst /,\\,$(TARGET)) + $(SILENT) if exist $(subst /,\\,$(GENERATED)) rmdir /s /q $(subst /,\\,$(GENERATED)) + $(SILENT) if exist $(subst /,\\,$(OBJDIR)) rmdir /s /q $(subst /,\\,$(OBJDIR)) +endif + +prebuild: | $(OBJDIR) + $(PREBUILDCMDS) + +ifneq (,$(PCH)) +$(OBJECTS): $(GCH) | $(PCH_PLACEHOLDER) +$(GCH): $(PCH) | prebuild + @echo $(notdir $<) + $(SILENT) $(CXX) -x c++-header $(ALL_CXXFLAGS) -o "$@" -MF "$(@:%.gch=%.d)" -c "$<" +$(PCH_PLACEHOLDER): $(GCH) | $(OBJDIR) +ifeq (posix,$(SHELLTYPE)) + $(SILENT) touch "$@" +else + $(SILENT) echo $null >> "$@" +endif +else +$(OBJECTS): | prebuild +endif + + +# File Rules +# ############################################# + +$(OBJDIR)/DataStructs.o: src/CalDict/DataStructs.cpp + @echo $(notdir $<) + $(SILENT) $(CXX) $(ALL_CXXFLAGS) $(FORCE_INCLUDE) -o "$@" -MF "$(@:%.o=%.d)" -c "$<" + +-include $(OBJECTS:%.o=%.d) +ifneq (,$(PCH)) + -include $(PCH_PLACEHOLDER).d +endif \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..1ba2078 --- /dev/null +++ b/Makefile @@ -0,0 +1,58 @@ +# Alternative GNU Make workspace makefile autogenerated by Premake + +ifndef config + config=release +endif + +ifndef verbose + SILENT = @ +endif + +ifeq ($(config),release) + CalDict_config = release + SabreRecon_config = release + +else ifeq ($(config),debug) + CalDict_config = debug + SabreRecon_config = debug + +else + $(error "invalid configuration $(config)") +endif + +PROJECTS := CalDict SabreRecon + +.PHONY: all clean help $(PROJECTS) + +all: $(PROJECTS) + +CalDict: +ifneq (,$(CalDict_config)) + @echo "==== Building CalDict ($(CalDict_config)) ====" + @${MAKE} --no-print-directory -C . -f CalDict.make config=$(CalDict_config) +endif + +SabreRecon: CalDict +ifneq (,$(SabreRecon_config)) + @echo "==== Building SabreRecon ($(SabreRecon_config)) ====" + @${MAKE} --no-print-directory -C . -f SabreRecon.make config=$(SabreRecon_config) +endif + +clean: + @${MAKE} --no-print-directory -C . -f CalDict.make clean + @${MAKE} --no-print-directory -C . -f SabreRecon.make clean + +help: + @echo "Usage: make [config=name] [target]" + @echo "" + @echo "CONFIGURATIONS:" + @echo " release" + @echo " debug" + @echo "" + @echo "TARGETS:" + @echo " all (default)" + @echo " clean" + @echo " CalDict" + @echo " SabreRecon" + @echo "" + @echo "For more information, see https://github.com/premake/premake-core/wiki" \ No newline at end of file diff --git a/SabreRecon.make b/SabreRecon.make new file mode 100644 index 0000000..5626456 --- /dev/null +++ b/SabreRecon.make @@ -0,0 +1,180 @@ +# Alternative GNU Make project makefile autogenerated by Premake + +ifndef config + config=release +endif + +ifndef verbose + SILENT = @ +endif + +.PHONY: clean prebuild + +SHELLTYPE := posix +ifeq (.exe,$(findstring .exe,$(ComSpec))) + SHELLTYPE := msdos +endif + +# Configurations +# ############################################# + +RESCOMP = windres +TARGETDIR = bin +TARGET = $(TARGETDIR)/SabreRecon +DEFINES += +INCLUDES += -Isrc -Isrc/CalDict -Isrc/Detectors -Isrc/EnergyLoss -isystem /usr/include/root +FORCE_INCLUDE += +ALL_CPPFLAGS += $(CPPFLAGS) -MMD -MP $(DEFINES) $(INCLUDES) +ALL_RESFLAGS += $(RESFLAGS) $(DEFINES) $(INCLUDES) +LIBS += lib/libCalDict.so -lGui -lCore -lImt -lRIO -lNet -lHist -lGraf -lGraf3d -lGpad -lROOTDataFrame -lROOTVecOps -lTree -lTreePlayer -lRint -lPostscript -lMatrix -lPhysics -lMathCore -lThread -lMultiProc -lm -ldl +LDDEPS += lib/libCalDict.so +LINKCMD = $(CXX) -o "$@" $(OBJECTS) $(RESOURCES) $(ALL_LDFLAGS) $(LIBS) +define PREBUILDCMDS +endef +define PRELINKCMDS +endef +define POSTBUILDCMDS +endef + +ifeq ($(config),release) +OBJDIR = objs/Release/SabreRecon +ALL_CFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) -m64 -O2 +ALL_CXXFLAGS += $(CXXFLAGS) $(ALL_CPPFLAGS) -m64 -O2 -std=c++11 +ALL_LDFLAGS += $(LDFLAGS) -L/usr/lib64/root -L/usr/lib64 -Wl,-rpath,'$$ORIGIN/../lib' -m64 -s -pthread -rdynamic + +else ifeq ($(config),debug) +OBJDIR = objs/Debug/SabreRecon +ALL_CFLAGS += $(CFLAGS) $(ALL_CPPFLAGS) -m64 -g +ALL_CXXFLAGS += $(CXXFLAGS) $(ALL_CPPFLAGS) -m64 -g -std=c++11 +ALL_LDFLAGS += $(LDFLAGS) -L/usr/lib64/root -L/usr/lib64 -Wl,-rpath,'$$ORIGIN/../lib' -m64 -pthread -rdynamic + +endif + +# Per File Configurations +# ############################################# + + +# File sets +# ############################################# + +GENERATED := +OBJECTS := + +GENERATED += $(OBJDIR)/CutHandler.o +GENERATED += $(OBJDIR)/EnergyLoss.o +GENERATED += $(OBJDIR)/FocalPlaneDetector.o +GENERATED += $(OBJDIR)/Histogrammer.o +GENERATED += $(OBJDIR)/MassLookup.o +GENERATED += $(OBJDIR)/RandomGenerator.o +GENERATED += $(OBJDIR)/Reconstructor.o +GENERATED += $(OBJDIR)/SabreDetector.o +GENERATED += $(OBJDIR)/Target.o +GENERATED += $(OBJDIR)/main.o +OBJECTS += $(OBJDIR)/CutHandler.o +OBJECTS += $(OBJDIR)/EnergyLoss.o +OBJECTS += $(OBJDIR)/FocalPlaneDetector.o +OBJECTS += $(OBJDIR)/Histogrammer.o +OBJECTS += $(OBJDIR)/MassLookup.o +OBJECTS += $(OBJDIR)/RandomGenerator.o +OBJECTS += $(OBJDIR)/Reconstructor.o +OBJECTS += $(OBJDIR)/SabreDetector.o +OBJECTS += $(OBJDIR)/Target.o +OBJECTS += $(OBJDIR)/main.o + +# Rules +# ############################################# + +all: $(TARGET) + @: + +$(TARGET): $(GENERATED) $(OBJECTS) $(LDDEPS) | $(TARGETDIR) + $(PRELINKCMDS) + @echo Linking SabreRecon + $(SILENT) $(LINKCMD) + $(POSTBUILDCMDS) + +$(TARGETDIR): + @echo Creating $(TARGETDIR) +ifeq (posix,$(SHELLTYPE)) + $(SILENT) mkdir -p $(TARGETDIR) +else + $(SILENT) mkdir $(subst /,\\,$(TARGETDIR)) +endif + +$(OBJDIR): + @echo Creating $(OBJDIR) +ifeq (posix,$(SHELLTYPE)) + $(SILENT) mkdir -p $(OBJDIR) +else + $(SILENT) mkdir $(subst /,\\,$(OBJDIR)) +endif + +clean: + @echo Cleaning SabreRecon +ifeq (posix,$(SHELLTYPE)) + $(SILENT) rm -f $(TARGET) + $(SILENT) rm -rf $(GENERATED) + $(SILENT) rm -rf $(OBJDIR) +else + $(SILENT) if exist $(subst /,\\,$(TARGET)) del $(subst /,\\,$(TARGET)) + $(SILENT) if exist $(subst /,\\,$(GENERATED)) rmdir /s /q $(subst /,\\,$(GENERATED)) + $(SILENT) if exist $(subst /,\\,$(OBJDIR)) rmdir /s /q $(subst /,\\,$(OBJDIR)) +endif + +prebuild: | $(OBJDIR) + $(PREBUILDCMDS) + +ifneq (,$(PCH)) +$(OBJECTS): $(GCH) | $(PCH_PLACEHOLDER) +$(GCH): $(PCH) | prebuild + @echo $(notdir $<) + $(SILENT) $(CXX) -x c++-header $(ALL_CXXFLAGS) -o "$@" -MF "$(@:%.gch=%.d)" -c "$<" +$(PCH_PLACEHOLDER): $(GCH) | $(OBJDIR) +ifeq (posix,$(SHELLTYPE)) + $(SILENT) touch "$@" +else + $(SILENT) echo $null >> "$@" +endif +else +$(OBJECTS): | prebuild +endif + + +# File Rules +# ############################################# + +$(OBJDIR)/CutHandler.o: src/CutHandler.cpp + @echo $(notdir $<) + $(SILENT) $(CXX) $(ALL_CXXFLAGS) $(FORCE_INCLUDE) -o "$@" -MF "$(@:%.o=%.d)" -c "$<" +$(OBJDIR)/FocalPlaneDetector.o: src/Detectors/FocalPlaneDetector.cpp + @echo $(notdir $<) + $(SILENT) $(CXX) $(ALL_CXXFLAGS) $(FORCE_INCLUDE) -o "$@" -MF "$(@:%.o=%.d)" -c "$<" +$(OBJDIR)/SabreDetector.o: src/Detectors/SabreDetector.cpp + @echo $(notdir $<) + $(SILENT) $(CXX) $(ALL_CXXFLAGS) $(FORCE_INCLUDE) -o "$@" -MF "$(@:%.o=%.d)" -c "$<" +$(OBJDIR)/EnergyLoss.o: src/EnergyLoss/EnergyLoss.cpp + @echo $(notdir $<) + $(SILENT) $(CXX) $(ALL_CXXFLAGS) $(FORCE_INCLUDE) -o "$@" -MF "$(@:%.o=%.d)" -c "$<" +$(OBJDIR)/Target.o: src/EnergyLoss/Target.cpp + @echo $(notdir $<) + $(SILENT) $(CXX) $(ALL_CXXFLAGS) $(FORCE_INCLUDE) -o "$@" -MF "$(@:%.o=%.d)" -c "$<" +$(OBJDIR)/Histogrammer.o: src/Histogrammer.cpp + @echo $(notdir $<) + $(SILENT) $(CXX) $(ALL_CXXFLAGS) $(FORCE_INCLUDE) -o "$@" -MF "$(@:%.o=%.d)" -c "$<" +$(OBJDIR)/MassLookup.o: src/MassLookup.cpp + @echo $(notdir $<) + $(SILENT) $(CXX) $(ALL_CXXFLAGS) $(FORCE_INCLUDE) -o "$@" -MF "$(@:%.o=%.d)" -c "$<" +$(OBJDIR)/RandomGenerator.o: src/RandomGenerator.cpp + @echo $(notdir $<) + $(SILENT) $(CXX) $(ALL_CXXFLAGS) $(FORCE_INCLUDE) -o "$@" -MF "$(@:%.o=%.d)" -c "$<" +$(OBJDIR)/Reconstructor.o: src/Reconstructor.cpp + @echo $(notdir $<) + $(SILENT) $(CXX) $(ALL_CXXFLAGS) $(FORCE_INCLUDE) -o "$@" -MF "$(@:%.o=%.d)" -c "$<" +$(OBJDIR)/main.o: src/main.cpp + @echo $(notdir $<) + $(SILENT) $(CXX) $(ALL_CXXFLAGS) $(FORCE_INCLUDE) -o "$@" -MF "$(@:%.o=%.d)" -c "$<" + +-include $(OBJECTS:%.o=%.d) +ifneq (,$(PCH)) + -include $(PCH_PLACEHOLDER).d +endif \ No newline at end of file diff --git a/etc/mass.txt b/etc/mass.txt new file mode 100644 index 0000000..da4e88f --- /dev/null +++ b/etc/mass.txt @@ -0,0 +1,2501 @@ + N Z A EL ATOMIC MASS + (micro-u) + 1 0 1 n 1 008664.91582 + 0 1 1 H 1 007825.03224 + 1 1 2 H 2 014101.77811 + 2 1 3 H 3 016049.28199 + 1 2 3 He 3 016029.32265 + 3 1 4 H 4 026431.868 + 2 2 4 He 4 002603.25413 + 1 3 4 Li 4 027185.562 + 4 1 5 H 5 035311.493 + 3 2 5 He 5 012057.224 + 2 3 5 Li 5 012537.800 + 5 1 6 H 6 044955.437 + 4 2 6 He 6 018885.891 + 3 3 6 Li 6 015122.88742 + 2 4 6 Be 6 019726.409 + 5 2 7 He 7 027990.654 + 4 3 7 Li 7 016003.43666 + 3 4 7 Be 7 016928.717 + 2 5 7 B 7 029712.000 + 6 2 8 He 8 033934.390 + 5 3 8 Li 8 022486.246 + 4 4 8 Be 8 005305.102 + 3 5 8 B 8 024607.316 + 2 6 8 C 8 037643.042 + 7 2 9 He 9 043946.419 + 6 3 9 Li 9 026790.191 + 5 4 9 Be 9 012183.066 + 4 5 9 B 9 013329.649 + 3 6 9 C 9 031037.207 + 8 2 10 He 10 052815.308 + 7 3 10 Li 10 035483.453 + 6 4 10 Be 10 013534.695 + 5 5 10 B 10 012936.862 + 4 6 10 C 10 016853.218 + 3 7 10 N 10 041653.543 + 8 3 11 Li 11 043723.581 + 7 4 11 Be 11 021661.081 + 6 5 11 B 11 009305.166 + 5 6 11 C 11 011432.597 + 4 7 11 N 11 026090.945 + 9 3 12 Li 12 052613.941 + 8 4 12 Be 12 026922.083 + 7 5 12 B 12 014352.638 + 6 6 12 C 12 000000.0 + 5 7 12 N 12 018613.182 + 4 8 12 O 12 034261.747 + 10 3 13 Li 13 061171.503 + 9 4 13 Be 13 036134.507 + 8 5 13 B 13 017779.981 + 7 6 13 C 13 003354.83521 + 6 7 13 N 13 005738.609 + 5 8 13 O 13 024815.437 + 10 4 14 Be 14 042892.920 + 9 5 14 B 14 025404.012 + 8 6 14 C 14 003241.98843 + 7 7 14 N 14 003074.00446 + 6 8 14 O 14 008596.706 + 5 9 14 F 14 034315.199 + 11 4 15 Be 15 053490.215 + 10 5 15 B 15 031087.953 + 9 6 15 C 15 010599.256 + 8 7 15 N 15 000108.89894 + 7 8 15 O 15 003065.618 + 6 9 15 F 15 017785.139 + 5 10 15 Ne 15 043172.980 + 12 4 16 Be 16 061672.036 + 11 5 16 B 16 039841.920 + 10 6 16 C 16 014701.256 + 9 7 16 N 16 006101.925 + 8 8 16 O 15 994914.61960 + 7 9 16 F 16 011465.723 + 6 10 16 Ne 16 025750.864 + 12 5 17 B 17 046931.399 + 11 6 17 C 17 022578.672 + 10 7 17 N 17 008448.877 + 9 8 17 O 16 999131.75664 + 8 9 17 F 17 002095.238 + 7 10 17 Ne 17 017713.959 + 6 11 17 Na 17 037760.000 + 13 5 18 B 18 055601.682 + 12 6 18 C 18 026751.932 + 11 7 18 N 18 014077.565 + 10 8 18 O 17 999159.61284 + 9 9 18 F 18 000937.325 + 8 10 18 Ne 18 005708.693 + 7 11 18 Na 18 026879.386 + 14 5 19 B 19 064166.000 + 13 6 19 C 19 034797.596 + 12 7 19 N 19 017022.419 + 11 8 19 O 19 003577.970 + 10 9 19 F 18 998403.16288 + 9 10 19 Ne 19 001880.903 + 8 11 19 Na 19 013880.272 + 7 12 19 Mg 19 034169.182 + 14 6 20 C 20 040261.732 + 13 7 20 N 20 023367.295 + 12 8 20 O 20 004075.358 + 11 9 20 F 19 999981.252 + 10 10 20 Ne 19 992440.17619 + 9 11 20 Na 20 007354.426 + 8 12 20 Mg 20 018763.075 + 14 7 21 N 21 027087.573 + 13 8 21 O 21 008654.950 + 12 9 21 F 20 999948.894 + 11 10 21 Ne 20 993846.685 + 10 11 21 Na 20 997654.702 + 9 12 21 Mg 21 011705.764 + 16 6 22 C 22 057553.990 + 15 7 22 N 22 034100.918 + 14 8 22 O 22 009965.746 + 13 9 22 F 22 002998.809 + 12 10 22 Ne 21 991385.109 + 11 11 22 Na 21 994437.418 + 10 12 22 Mg 21 999570.654 + 16 7 23 N 23 039421.000 + 15 8 23 O 23 015696.686 + 14 9 23 F 23 003526.874 + 13 10 23 Ne 22 994466.900 + 12 11 23 Na 22 989769.28199 + 11 12 23 Mg 22 994123.941 + 10 13 23 Al 23 007244.351 + 16 8 24 O 24 019861.000 + 15 9 24 F 24 008099.370 + 14 10 24 Ne 23 993610.645 + 13 11 24 Na 23 990963.011 + 12 12 24 Mg 23 985041.697 + 11 13 24 Al 23 999947.541 + 10 14 24 Si 24 011535.441 + 17 8 25 O 25 029338.919 + 16 9 25 F 25 012167.727 + 15 10 25 Ne 24 997814.799 + 14 11 25 Na 24 989953.973 + 13 12 25 Mg 24 985836.964 + 12 13 25 Al 24 990428.306 + 11 14 25 Si 25 004108.801 + 18 8 26 O 26 037210.155 + 17 9 26 F 26 020020.392 + 16 10 26 Ne 26 000516.496 + 15 11 26 Na 25 992634.649 + 14 12 26 Mg 25 982592.971 + 13 13 26 Al 25 986891.863 + 12 14 26 Si 25 992333.804 + 18 9 27 F 27 027322.000 + 17 10 27 Ne 27 007569.462 + 16 11 27 Na 26 994076.408 + 15 12 27 Mg 26 984340.628 + 14 13 27 Al 26 981538.408 + 13 14 27 Si 26 986704.688 + 12 15 27 P 26 999224.409 + 19 9 28 F 28 036223.095 + 18 10 28 Ne 28 012130.767 + 17 11 28 Na 27 998939.000 + 16 12 28 Mg 27 983876.606 + 15 13 28 Al 27 981910.087 + 14 14 28 Si 27 976926.53499 + 13 15 28 P 27 992326.585 + 12 16 28 S 28 004372.766 + 20 9 29 F 29 043103.000 + 19 10 29 Ne 29 019753.000 + 18 11 29 Na 29 002877.092 + 17 12 29 Mg 28 988617.393 + 16 13 29 Al 28 980453.164 + 15 14 29 Si 28 976494.66525 + 14 15 29 P 28 981800.368 + 13 16 29 S 28 996611.448 + 12 17 29 Cl 29 014130.178 + 20 10 30 Ne 30 024992.235 + 19 11 30 Na 30 009097.932 + 18 12 30 Mg 29 990462.826 + 17 13 30 Al 29 982968.388 + 16 14 30 Si 29 973770.136 + 15 15 30 P 29 978313.489 + 14 16 30 S 29 984906.769 + 12 18 30 Ar 30 022470.511 + 21 10 31 Ne 31 033474.816 + 20 11 31 Na 31 013146.656 + 19 12 31 Mg 30 996648.232 + 18 13 31 Al 30 983949.756 + 17 14 31 Si 30 975363.194 + 16 15 31 P 30 973761.99863 + 15 16 31 S 30 979557.007 + 14 17 31 Cl 30 992448.098 + 21 11 32 Na 32 020011.026 + 20 12 32 Mg 31 999110.139 + 19 13 32 Al 31 988084.339 + 18 14 32 Si 31 974151.539 + 17 15 32 P 31 973907.643 + 16 16 32 S 31 972071.17443 + 15 17 32 Cl 31 985684.637 + 14 18 32 Ar 31 997637.826 + 22 11 33 Na 33 025529.000 + 21 12 33 Mg 33 005327.245 + 20 13 33 Al 32 990877.687 + 19 14 33 Si 32 977976.964 + 18 15 33 P 32 971725.694 + 17 16 33 S 32 971458.90985 + 16 17 33 Cl 32 977451.989 + 15 18 33 Ar 32 989925.547 + 23 11 34 Na 34 034010.000 + 22 12 34 Mg 34 008935.481 + 21 13 34 Al 33 996779.057 + 20 14 34 Si 33 978575.437 + 19 15 34 P 33 973645.887 + 18 16 34 S 33 967867.012 + 17 17 34 Cl 33 973762.491 + 16 18 34 Ar 33 980270.093 + 23 12 35 Mg 35 016790.000 + 22 13 35 Al 34 999759.817 + 21 14 35 Si 34 984550.134 + 20 15 35 P 34 973314.053 + 19 16 35 S 34 969032.322 + 18 17 35 Cl 34 968852.694 + 17 18 35 Ar 34 975257.721 + 16 19 35 K 34 988005.407 + 24 12 36 Mg 36 021879.000 + 23 13 36 Al 36 006388.000 + 22 14 36 Si 35 986649.271 + 21 15 36 P 35 978259.619 + 20 16 36 S 35 967080.699 + 19 17 36 Cl 35 968306.822 + 18 18 36 Ar 35 967545.105 + 17 19 36 K 35 981302.010 + 16 20 36 Ca 35 993074.406 + 25 12 37 Mg 37 030286.265 + 24 13 37 Al 37 010531.000 + 23 14 37 Si 36 992945.191 + 22 15 37 P 36 979606.956 + 21 16 37 S 36 971125.507 + 20 17 37 Cl 36 965902.584 + 19 18 37 Ar 36 966776.314 + 18 19 37 K 36 973375.889 + 17 20 37 Ca 36 985897.852 + 25 13 38 Al 38 017402.000 + 24 14 38 Si 37 995523.000 + 23 15 38 P 37 984303.105 + 22 16 38 S 37 971163.310 + 21 17 38 Cl 37 968010.418 + 20 18 38 Ar 37 962732.104 + 19 19 38 K 37 969081.116 + 18 20 38 Ca 37 976319.226 + 25 14 39 Si 39 002491.000 + 24 15 39 P 38 986285.865 + 23 16 39 S 38 975133.852 + 22 17 39 Cl 38 968008.162 + 21 18 39 Ar 38 964313.039 + 20 19 39 K 38 963706.48661 + 19 20 39 Ca 38 970710.813 + 18 21 39 Sc 38 984784.970 + 26 14 40 Si 40 005829.000 + 25 15 40 P 39 991288.865 + 24 16 40 S 39 975482.562 + 23 17 40 Cl 39 970415.469 + 22 18 40 Ar 39 962383.12378 + 21 19 40 K 39 963998.166 + 20 20 40 Ca 39 962590.865 + 19 21 40 Sc 39 977967.292 + 18 22 40 Ti 39 990498.721 + 27 14 41 Si 41 013011.000 + 26 15 41 P 40 994654.000 + 25 16 41 S 40 979593.451 + 24 17 41 Cl 40 970684.525 + 23 18 41 Ar 40 964500.571 + 22 19 41 K 40 961825.25796 + 21 20 41 Ca 40 962277.921 + 20 21 41 Sc 40 969251.104 + 19 22 41 Ti 40 983148.000 + 27 15 42 P 42 001084.000 + 26 16 42 S 41 981065.100 + 25 17 42 Cl 41 973342.000 + 24 18 42 Ar 41 963045.736 + 23 19 42 K 41 962402.306 + 22 20 42 Ca 41 958617.828 + 21 21 42 Sc 41 965516.522 + 20 22 42 Ti 41 973049.022 + 28 15 43 P 43 005024.000 + 27 16 43 S 42 986907.635 + 26 17 43 Cl 42 974063.700 + 25 18 43 Ar 42 965636.055 + 24 19 43 K 42 960734.703 + 23 20 43 Ca 42 958766.430 + 22 21 43 Sc 42 961150.472 + 21 22 43 Ti 42 968522.521 + 20 23 43 V 42 980766.000 + 28 16 44 S 43 990118.848 + 27 17 44 Cl 43 978116.312 + 26 18 44 Ar 43 964923.816 + 25 19 44 K 43 961586.986 + 24 20 44 Ca 43 955481.543 + 23 21 44 Sc 43 959402.867 + 22 22 44 Ti 43 959689.951 + 21 23 44 V 43 974110.000 + 29 16 45 S 44 995717.000 + 28 17 45 Cl 44 980394.353 + 27 18 45 Ar 44 968039.733 + 26 19 45 K 44 960691.493 + 25 20 45 Ca 44 956186.326 + 24 21 45 Sc 44 955907.503 + 23 22 45 Ti 44 958121.211 + 22 23 45 V 44 965768.951 + 21 24 45 Cr 44 979050.000 + 29 17 46 Cl 45 985121.323 + 28 18 46 Ar 45 968037.446 + 27 19 46 K 45 961981.586 + 26 20 46 Ca 45 953687.988 + 25 21 46 Sc 45 955167.485 + 24 22 46 Ti 45 952626.856 + 23 23 46 V 45 960197.971 + 22 24 46 Cr 45 968360.970 + 29 18 47 Ar 46 972768.114 + 28 19 47 K 46 961661.614 + 27 20 47 Ca 46 954541.394 + 26 21 47 Sc 46 952402.704 + 25 22 47 Ti 46 951757.752 + 24 23 47 V 46 954904.038 + 23 24 47 Cr 46 962895.544 + 22 25 47 Mn 46 975774.000 + 30 18 48 Ar 47 976080.000 + 29 19 48 K 47 965341.186 + 28 20 48 Ca 47 952522.904 + 27 21 48 Sc 47 952223.157 + 26 22 48 Ti 47 947940.932 + 25 23 48 V 47 952251.229 + 24 24 48 Cr 47 954028.667 + 23 25 48 Mn 47 968549.085 + 30 19 49 K 48 968210.755 + 29 20 49 Ca 48 955662.875 + 28 21 49 Sc 48 950014.423 + 27 22 49 Ti 48 947864.627 + 26 23 49 V 48 948510.746 + 25 24 49 Cr 48 951332.955 + 24 25 49 Mn 48 959612.585 + 23 26 49 Fe 48 973429.000 + 31 19 50 K 49 972380.017 + 30 20 50 Ca 49 957499.217 + 29 21 50 Sc 49 952176.415 + 28 22 50 Ti 49 944785.839 + 27 23 50 V 49 947155.845 + 26 24 50 Cr 49 946041.443 + 25 25 50 Mn 49 954237.391 + 24 26 50 Fe 49 962988.000 + 32 19 51 K 50 975827.867 + 31 20 51 Ca 50 960995.665 + 30 21 51 Sc 50 953592.095 + 29 22 51 Ti 50 946609.600 + 28 23 51 V 50 943956.867 + 27 24 51 Cr 50 944764.652 + 26 25 51 Mn 50 948208.065 + 25 26 51 Fe 50 956840.779 + 24 27 51 Co 50 970647.000 + 33 19 52 K 51 981602.000 + 32 20 52 Ca 51 963213.648 + 31 21 52 Sc 51 956582.351 + 30 22 52 Ti 51 946891.960 + 29 23 52 V 51 944772.839 + 28 24 52 Cr 51 940504.992 + 27 25 52 Mn 51 945563.488 + 26 26 52 Fe 51 948115.217 + 25 27 52 Co 51 963112.000 + 34 19 53 K 52 986800.000 + 33 20 53 Ca 52 968451.000 + 32 21 53 Sc 52 958231.821 + 31 22 53 Ti 52 949724.785 + 30 23 53 V 52 944335.593 + 29 24 53 Cr 52 940646.961 + 28 25 53 Mn 52 941287.742 + 27 26 53 Fe 52 945305.574 + 26 27 53 Co 52 954203.217 + 25 28 53 Ni 52 968190.000 + 34 20 54 Ca 53 972989.000 + 33 21 54 Sc 53 963616.620 + 32 22 54 Ti 53 951022.786 + 31 23 54 V 53 946437.472 + 30 24 54 Cr 53 938878.012 + 29 25 54 Mn 53 940356.429 + 28 26 54 Fe 53 939608.306 + 27 27 54 Co 53 948459.192 + 26 28 54 Ni 53 957833.000 + 34 21 55 Sc 54 967622.601 + 33 22 55 Ti 54 955267.465 + 32 23 55 V 54 947241.114 + 31 24 55 Cr 54 940837.289 + 30 25 55 Mn 54 938043.172 + 29 26 55 Fe 54 938291.283 + 28 27 55 Co 54 941996.531 + 27 28 55 Ni 54 951329.961 + 26 29 55 Cu 54 966038.000 + 35 21 56 Sc 55 973320.000 + 34 22 56 Ti 55 957788.190 + 33 23 56 V 55 950450.694 + 32 24 56 Cr 55 940649.107 + 31 25 56 Mn 55 938902.947 + 30 26 56 Fe 55 934935.617 + 29 27 56 Co 55 939838.150 + 28 28 56 Ni 55 942127.872 + 27 29 56 Cu 55 958515.000 + 36 21 57 Sc 56 977460.000 + 35 22 57 Ti 56 963590.068 + 34 23 57 V 56 952320.197 + 33 24 57 Cr 56 943612.409 + 32 25 57 Mn 56 938285.968 + 31 26 57 Fe 56 935392.134 + 30 27 57 Co 56 936289.913 + 29 28 57 Ni 56 939791.525 + 28 29 57 Cu 56 949211.819 + 35 23 58 V 57 956626.932 + 34 24 58 Cr 57 944184.502 + 33 25 58 Mn 57 940066.646 + 32 26 58 Fe 57 933273.738 + 31 27 58 Co 57 935751.429 + 30 28 58 Ni 57 935341.780 + 29 29 58 Cu 57 944532.413 + 28 30 58 Zn 57 954590.428 + 36 23 59 V 58 959385.659 + 35 24 59 Cr 58 948377.810 + 34 25 59 Mn 58 940391.113 + 33 26 59 Fe 58 934873.649 + 32 27 59 Co 58 933193.656 + 31 28 59 Ni 58 934345.571 + 30 29 59 Cu 58 939496.844 + 29 30 59 Zn 58 949312.017 + 37 23 60 V 59 964313.290 + 36 24 60 Cr 59 949898.146 + 35 25 60 Mn 59 943136.576 + 34 26 60 Fe 59 934070.411 + 33 27 60 Co 59 933815.667 + 32 28 60 Ni 59 930785.256 + 31 29 60 Cu 59 937363.916 + 30 30 60 Zn 59 941841.450 + 38 23 61 V 60 967250.000 + 37 24 61 Cr 60 954400.963 + 36 25 61 Mn 60 944452.544 + 35 26 61 Fe 60 936746.244 + 34 27 61 Co 60 932476.145 + 33 28 61 Ni 60 931054.945 + 32 29 61 Cu 60 933457.371 + 31 30 61 Zn 60 939506.960 + 30 31 61 Ga 60 949398.859 + 38 24 62 Cr 61 956097.451 + 37 25 62 Mn 61 947907.386 + 36 26 62 Fe 61 936791.812 + 35 27 62 Co 61 934058.317 + 34 28 62 Ni 61 928344.871 + 33 29 62 Cu 61 932594.921 + 32 30 62 Zn 61 934333.477 + 31 31 62 Ga 61 944189.757 + 39 24 63 Cr 62 961344.384 + 38 25 63 Mn 62 949664.675 + 37 26 63 Fe 62 940272.700 + 36 27 63 Co 62 933599.744 + 35 28 63 Ni 62 929669.139 + 34 29 63 Cu 62 929597.236 + 33 30 63 Zn 62 933211.167 + 32 31 63 Ga 62 939294.195 + 31 32 63 Ge 62 949628.000 + 40 24 64 Cr 63 964058.000 + 39 25 64 Mn 63 953849.370 + 38 26 64 Fe 63 940987.763 + 37 27 64 Co 63 935810.291 + 36 28 64 Ni 63 927966.341 + 35 29 64 Cu 63 929763.857 + 34 30 64 Zn 63 929141.772 + 33 31 64 Ga 63 936840.365 + 32 32 64 Ge 63 941689.913 + 40 25 65 Mn 64 956019.750 + 39 26 65 Fe 64 945015.324 + 38 27 65 Co 64 936462.073 + 37 28 65 Ni 64 930084.697 + 36 29 65 Cu 64 927789.487 + 35 30 65 Zn 64 929240.532 + 34 31 65 Ga 64 932734.395 + 33 32 65 Ge 64 939368.137 + 32 33 65 As 64 949611.000 + 41 25 66 Mn 65 960546.834 + 40 26 66 Fe 65 946249.960 + 39 27 66 Co 65 939442.945 + 38 28 66 Ni 65 929139.334 + 37 29 66 Cu 65 928868.814 + 36 30 66 Zn 65 926033.704 + 35 31 66 Ga 65 931589.832 + 34 32 66 Ge 65 933862.126 + 33 33 66 As 65 944148.779 + 41 26 67 Fe 66 951035.482 + 40 27 67 Co 66 940609.628 + 39 28 67 Ni 66 931569.414 + 38 29 67 Cu 66 927729.526 + 37 30 67 Zn 66 927127.482 + 36 31 67 Ga 66 928202.384 + 35 32 67 Ge 66 932733.620 + 34 33 67 As 66 939251.111 + 33 34 67 Se 66 949994.000 + 42 26 68 Fe 67 953314.875 + 41 27 68 Co 67 944250.135 + 40 28 68 Ni 67 931868.789 + 39 29 68 Cu 67 929610.889 + 38 30 68 Zn 67 924844.291 + 37 31 68 Ga 67 927980.221 + 36 32 68 Ge 67 928095.308 + 35 33 68 As 67 936774.130 + 34 34 68 Se 67 941825.239 + 42 27 69 Co 68 946023.102 + 41 28 69 Ni 68 935610.268 + 40 29 69 Cu 68 929429.268 + 39 30 69 Zn 68 926550.418 + 38 31 69 Ga 68 925573.531 + 37 32 69 Ge 68 927964.471 + 36 33 69 As 68 932246.294 + 35 34 69 Se 68 939414.847 + 34 35 69 Br 68 950338.413 + 42 28 70 Ni 69 936431.303 + 41 29 70 Cu 69 932392.079 + 40 30 70 Zn 69 925319.181 + 39 31 70 Ga 69 926021.917 + 38 32 70 Ge 69 924248.706 + 37 33 70 As 69 930926.151 + 36 34 70 Se 69 933515.523 + 35 35 70 Br 69 944792.323 + 44 27 71 Co 70 952366.923 + 43 28 71 Ni 70 940518.964 + 42 29 71 Cu 70 932676.832 + 41 30 71 Zn 70 927719.580 + 40 31 71 Ga 70 924702.536 + 39 32 71 Ge 70 924952.284 + 38 33 71 As 70 927113.758 + 37 34 71 Se 70 932209.432 + 36 35 71 Br 70 939342.156 + 35 36 71 Kr 70 950265.696 + 44 28 72 Ni 71 941785.926 + 43 29 72 Cu 71 935820.307 + 42 30 72 Zn 71 926842.807 + 41 31 72 Ga 71 926367.434 + 40 32 72 Ge 71 922075.826 + 39 33 72 As 71 926752.295 + 38 34 72 Se 71 927140.507 + 37 35 72 Br 71 936594.607 + 36 36 72 Kr 71 942092.407 + 45 28 73 Ni 72 946206.683 + 44 29 73 Cu 72 936674.378 + 43 30 73 Zn 72 929582.582 + 42 31 73 Ga 72 925174.682 + 41 32 73 Ge 72 923458.956 + 40 33 73 As 72 923829.089 + 39 34 73 Se 72 926754.883 + 38 35 73 Br 72 931671.621 + 37 36 73 Kr 72 939289.195 + 45 29 74 Cu 73 939874.862 + 44 30 74 Zn 73 929407.262 + 43 31 74 Ga 73 926945.726 + 42 32 74 Ge 73 921177.762 + 41 33 74 As 73 923928.598 + 40 34 74 Se 73 922475.935 + 39 35 74 Br 73 929910.281 + 38 36 74 Kr 73 933084.017 + 37 37 74 Rb 73 944265.868 + 46 29 75 Cu 74 941522.606 + 45 30 75 Zn 74 932840.246 + 44 31 75 Ga 74 926500.246 + 43 32 75 Ge 74 922858.371 + 42 33 75 As 74 921594.562 + 41 34 75 Se 74 922522.871 + 40 35 75 Br 74 925810.570 + 39 36 75 Kr 74 930945.746 + 38 37 75 Rb 74 938573.201 + 37 38 75 Sr 74 949952.770 + 47 29 76 Cu 75 945275.025 + 46 30 76 Zn 75 933114.957 + 45 31 76 Ga 75 928827.625 + 44 32 76 Ge 75 921402.726 + 43 33 76 As 75 922392.010 + 42 34 76 Se 75 919213.704 + 41 35 76 Br 75 924541.577 + 40 36 76 Kr 75 925910.726 + 39 37 76 Rb 75 935073.032 + 38 38 76 Sr 75 941762.761 + 47 30 77 Zn 76 936887.199 + 46 31 77 Ga 76 929154.300 + 45 32 77 Ge 76 923549.844 + 44 33 77 As 76 920647.564 + 43 34 77 Se 76 919914.150 + 42 35 77 Br 76 921379.194 + 41 36 77 Kr 76 924670.000 + 40 37 77 Rb 76 930401.600 + 39 38 77 Sr 76 937945.455 + 49 29 78 Cu 77 952230.000 + 48 30 78 Zn 77 938289.205 + 47 31 78 Ga 77 931608.845 + 46 32 78 Ge 77 922852.912 + 45 33 78 As 77 921827.795 + 44 34 78 Se 77 917309.243 + 43 35 78 Br 77 921145.859 + 42 36 78 Kr 77 920366.341 + 41 37 78 Rb 77 928141.868 + 40 38 78 Sr 77 932179.980 + 49 30 79 Zn 78 942638.068 + 48 31 79 Ga 78 932852.301 + 47 32 79 Ge 78 925360.129 + 46 33 79 As 78 920948.445 + 45 34 79 Se 78 918499.251 + 44 35 79 Br 78 918337.601 + 43 36 79 Kr 78 920082.945 + 42 37 79 Rb 78 923989.864 + 41 38 79 Sr 78 929707.664 + 40 39 79 Y 78 937930.000 + 50 30 80 Zn 79 944552.930 + 49 31 80 Ga 79 936420.774 + 48 32 80 Ge 79 925350.774 + 47 33 80 As 79 922474.548 + 46 34 80 Se 79 916521.785 + 45 35 80 Br 79 918529.810 + 44 36 80 Kr 79 916378.048 + 43 37 80 Rb 79 922516.444 + 42 38 80 Sr 79 924517.540 + 41 39 80 Y 79 934354.755 + 51 30 81 Zn 80 950402.619 + 50 31 81 Ga 80 938133.842 + 49 32 81 Ge 80 928832.942 + 48 33 81 As 80 922132.290 + 47 34 81 Se 80 917993.044 + 46 35 81 Br 80 916288.206 + 45 36 81 Kr 80 916589.714 + 44 37 81 Rb 80 918993.927 + 43 38 81 Sr 80 923211.394 + 42 39 81 Y 80 929454.283 + 41 40 81 Zr 80 938314.000 + 52 30 82 Zn 81 954574.099 + 51 31 82 Ga 81 943176.533 + 50 32 82 Ge 81 929774.033 + 49 33 82 As 81 924738.733 + 48 34 82 Se 81 916699.537 + 47 35 82 Br 81 916801.760 + 46 36 82 Kr 81 913481.15520 + 45 37 82 Rb 81 918209.024 + 44 38 82 Sr 81 918399.847 + 43 39 82 Y 81 926930.188 + 42 40 82 Zr 81 931689.000 + 52 31 83 Ga 82 947120.301 + 51 32 83 Ge 82 934539.101 + 50 33 83 As 82 925206.901 + 49 34 83 Se 82 919118.609 + 48 35 83 Br 82 915175.289 + 47 36 83 Kr 82 914126.518 + 46 37 83 Rb 82 915114.182 + 45 38 83 Sr 82 917554.374 + 44 39 83 Y 82 922484.025 + 43 40 83 Zr 82 929240.925 + 42 41 83 Nb 82 938211.000 + 52 32 84 Ge 83 937575.091 + 51 33 84 As 83 929303.291 + 50 34 84 Se 83 918466.762 + 49 35 84 Br 83 916496.419 + 48 36 84 Kr 83 911497.72863 + 47 37 84 Rb 83 914375.225 + 46 38 84 Sr 83 913419.120 + 45 39 84 Y 83 920671.061 + 44 40 84 Zr 83 923325.662 + 43 41 84 Nb 83 934279.000 + 53 32 85 Ge 84 942969.659 + 52 33 85 As 84 932163.659 + 51 34 85 Se 84 922260.759 + 50 35 85 Br 84 915645.759 + 49 36 85 Kr 84 912527.262 + 48 37 85 Rb 84 911789.73760 + 47 38 85 Sr 84 912932.043 + 46 39 85 Y 84 916433.039 + 45 40 85 Zr 84 921443.198 + 44 41 85 Nb 84 928845.837 + 43 42 85 Mo 84 938260.737 + 54 32 86 Ge 85 946967.000 + 53 33 86 As 85 936701.533 + 52 34 86 Se 85 924311.733 + 51 35 86 Br 85 918805.433 + 50 36 86 Kr 85 910610.62627 + 49 37 86 Rb 85 911167.443 + 48 38 86 Sr 85 909260.72631 + 47 39 86 Y 85 914886.098 + 46 40 86 Zr 85 916296.815 + 45 41 86 Nb 85 925781.535 + 44 42 86 Mo 85 931174.817 + 54 33 87 As 86 940291.718 + 53 34 87 Se 86 928688.618 + 52 35 87 Br 86 920674.018 + 51 36 87 Kr 86 913354.759 + 50 37 87 Rb 86 909180.531 + 49 38 87 Sr 86 908877.49615 + 48 39 87 Y 86 910876.102 + 47 40 87 Zr 86 914817.339 + 46 41 87 Nb 86 920692.472 + 45 42 87 Mo 86 928196.201 + 44 43 87 Tc 86 938067.187 + 54 34 88 Se 87 931417.491 + 53 35 88 Br 87 924083.291 + 52 36 88 Kr 87 914447.881 + 51 37 88 Rb 87 911315.591 + 50 38 88 Sr 87 905612.25561 + 49 39 88 Y 87 909501.276 + 48 40 88 Zr 87 910220.709 + 47 41 88 Nb 87 918224.287 + 46 42 88 Mo 87 921967.781 + 45 43 88 Tc 87 933782.381 + 55 34 89 Se 88 936669.059 + 54 35 89 Br 88 926704.559 + 53 36 89 Kr 88 917835.450 + 52 37 89 Rb 88 912278.137 + 51 38 89 Sr 88 907450.808 + 50 39 89 Y 88 905841.205 + 49 40 89 Zr 88 908882.332 + 48 41 89 Nb 88 913445.272 + 47 42 89 Mo 88 919468.150 + 46 43 89 Tc 88 927648.650 + 56 34 90 Se 89 940096.000 + 55 35 90 Br 89 931292.850 + 54 36 90 Kr 89 919527.930 + 53 37 90 Rb 89 914798.803 + 52 38 90 Sr 89 907730.885 + 51 39 90 Y 89 907144.800 + 50 40 90 Zr 89 904698.758 + 49 41 90 Nb 89 911259.204 + 48 42 90 Mo 89 913931.272 + 47 43 90 Tc 89 924073.921 + 46 44 90 Ru 89 930344.379 + 57 34 91 Se 90 945700.000 + 56 35 91 Br 90 934398.618 + 55 36 91 Kr 90 923806.310 + 54 37 91 Rb 90 916537.265 + 53 38 91 Sr 90 910195.958 + 52 39 91 Y 90 907298.066 + 51 40 91 Zr 90 905640.223 + 50 41 91 Nb 90 906990.274 + 49 42 91 Mo 90 911745.195 + 48 43 91 Tc 90 918424.975 + 47 44 91 Ru 90 926741.532 + 57 35 92 Br 91 939631.597 + 56 36 92 Kr 91 926173.094 + 55 37 92 Rb 91 919728.481 + 54 38 92 Sr 91 911038.224 + 53 39 92 Y 91 908945.745 + 52 40 92 Zr 91 905035.322 + 51 41 92 Nb 91 907188.568 + 50 42 92 Mo 91 906807.155 + 49 43 92 Tc 91 915269.779 + 48 44 92 Ru 91 920234.375 + 47 45 92 Rh 91 932367.694 + 58 35 93 Br 92 943220.000 + 57 36 93 Kr 92 931147.174 + 56 37 93 Rb 92 922039.325 + 55 38 93 Sr 92 914024.311 + 54 39 93 Y 92 909578.422 + 53 40 93 Zr 92 906470.646 + 52 41 93 Nb 92 906373.161 + 51 42 93 Mo 92 906808.773 + 50 43 93 Tc 92 910245.149 + 49 44 93 Ru 92 917104.444 + 48 45 93 Rh 92 925912.781 + 58 36 94 Kr 93 934140.454 + 57 37 94 Rb 93 926394.818 + 56 38 94 Sr 93 915355.643 + 55 39 94 Y 93 911592.063 + 54 40 94 Zr 93 906312.524 + 53 41 94 Nb 93 907278.992 + 52 42 94 Mo 93 905083.592 + 51 43 94 Tc 93 909652.325 + 50 44 94 Ru 93 911342.863 + 49 45 94 Rh 93 921730.453 + 48 46 94 Pd 93 929036.292 + 59 36 95 Kr 94 939710.923 + 58 37 95 Rb 94 929262.568 + 57 38 95 Sr 94 919355.840 + 56 39 95 Y 94 912818.711 + 55 40 95 Zr 94 908040.267 + 54 41 95 Nb 94 906831.115 + 53 42 95 Mo 94 905837.442 + 52 43 95 Tc 94 907652.287 + 51 44 95 Ru 94 910404.420 + 50 45 95 Rh 94 915897.895 + 49 46 95 Pd 94 924888.512 + 60 36 96 Kr 95 943016.618 + 59 37 96 Rb 95 934133.393 + 58 38 96 Sr 95 921712.692 + 57 39 96 Y 95 915902.953 + 56 40 96 Zr 95 908277.621 + 55 41 96 Nb 95 908101.591 + 54 42 96 Mo 95 904674.774 + 53 43 96 Tc 95 907866.681 + 52 44 96 Ru 95 907588.914 + 51 45 96 Rh 95 914451.710 + 50 46 96 Pd 95 918213.744 + 49 47 96 Ag 95 930743.906 + 61 36 97 Kr 96 949088.784 + 60 37 97 Rb 96 937177.118 + 59 38 97 Sr 96 926374.776 + 58 39 97 Y 96 918280.286 + 57 40 97 Zr 96 910957.386 + 56 41 97 Nb 96 908098.414 + 55 42 97 Mo 96 906016.903 + 54 43 97 Tc 96 906360.723 + 53 44 97 Ru 96 907545.779 + 52 45 97 Rh 96 911327.876 + 51 46 97 Pd 96 916471.987 + 50 47 97 Ag 96 923965.326 + 61 37 98 Rb 97 941632.317 + 60 38 98 Sr 97 928691.860 + 59 39 98 Y 97 922388.360 + 58 40 98 Zr 97 912735.124 + 57 41 98 Nb 97 910332.650 + 56 42 98 Mo 97 905403.608 + 55 43 98 Tc 97 907211.205 + 54 44 98 Ru 97 905286.713 + 53 45 98 Rh 97 910707.740 + 52 46 98 Pd 97 912698.337 + 51 47 98 Ag 97 921559.972 + 50 48 98 Cd 97 927389.317 + 62 37 99 Rb 98 945119.192 + 61 38 99 Sr 98 932880.511 + 60 39 99 Y 98 924154.288 + 59 40 99 Zr 98 916670.835 + 58 41 99 Nb 98 911609.371 + 57 42 99 Mo 98 907707.298 + 56 43 99 Tc 98 906249.678 + 55 44 99 Ru 98 905930.278 + 54 45 99 Rh 98 908124.690 + 53 46 99 Pd 98 911773.290 + 52 47 99 Ag 98 917645.768 + 51 48 99 Cd 98 924925.847 + 63 37 100 Rb 99 950351.731 + 62 38 100 Sr 99 935779.615 + 61 39 100 Y 99 927721.063 + 60 40 100 Zr 99 918005.444 + 59 41 100 Nb 99 914333.963 + 58 42 100 Mo 99 907467.976 + 57 43 100 Tc 99 907652.711 + 56 44 100 Ru 99 904210.452 + 55 45 100 Rh 99 908114.141 + 54 46 100 Pd 99 908520.315 + 53 47 100 Ag 99 916115.445 + 52 48 100 Cd 99 920348.820 + 51 49 100 In 99 930957.180 + 50 50 100 Sn 99 938504.196 + 63 38 101 Sr 100 940606.266 + 62 39 101 Y 100 930154.138 + 61 40 101 Zr 100 921453.110 + 60 41 101 Nb 100 915306.496 + 59 42 101 Mo 100 910337.641 + 58 43 101 Tc 100 907305.260 + 57 44 101 Ru 100 905573.075 + 56 45 101 Rh 100 906158.905 + 55 46 101 Pd 100 908284.828 + 54 47 101 Ag 100 912683.953 + 53 48 101 Cd 100 918586.211 + 51 50 101 Sn 100 935259.244 + 64 38 102 Sr 101 944004.680 + 63 39 102 Y 101 934327.889 + 62 40 102 Zr 101 923147.431 + 61 41 102 Nb 101 918083.697 + 60 42 102 Mo 101 910288.138 + 59 43 102 Tc 101 909207.275 + 58 44 102 Ru 101 904340.300 + 57 45 102 Rh 101 906834.270 + 56 46 102 Pd 101 905632.058 + 55 47 102 Ag 101 911704.540 + 54 48 102 Cd 101 914481.799 + 53 49 102 In 101 924105.916 + 52 50 102 Sn 101 930289.530 + 64 39 103 Y 102 937243.208 + 63 40 103 Zr 102 927197.240 + 62 41 103 Nb 102 919453.403 + 61 42 103 Mo 102 913085.140 + 60 43 103 Tc 102 909174.008 + 59 44 103 Ru 102 906314.833 + 58 45 103 Rh 102 905494.068 + 57 46 103 Pd 102 906110.840 + 56 47 103 Ag 102 908960.560 + 55 48 103 Cd 102 913416.923 + 54 49 103 In 102 919878.613 + 53 50 103 Sn 102 928101.962 + 64 40 104 Zr 103 929442.315 + 63 41 104 Nb 103 922899.115 + 62 42 104 Mo 103 913740.756 + 61 43 104 Tc 103 911428.905 + 60 44 104 Ru 103 905425.360 + 59 45 104 Rh 103 906645.295 + 58 46 104 Pd 103 904030.401 + 57 47 104 Ag 103 908623.725 + 56 48 104 Cd 103 909856.230 + 55 49 104 In 103 918214.540 + 54 50 104 Sn 103 923105.197 + 53 51 104 Sb 103 936474.502 + 66 39 105 Y 104 944959.000 + 65 40 105 Zr 104 934014.890 + 64 41 105 Nb 104 924942.564 + 63 42 105 Mo 104 916975.159 + 62 43 105 Tc 104 911657.952 + 61 44 105 Ru 104 907745.525 + 60 45 105 Rh 104 905687.806 + 59 46 105 Pd 104 905079.487 + 58 47 105 Ag 104 906525.607 + 57 48 105 Cd 104 909463.895 + 56 49 105 In 104 914502.324 + 55 50 105 Sn 104 921268.423 + 54 51 105 Sb 104 931276.549 + 53 52 105 Te 104 943304.508 + 66 40 106 Zr 105 937144.000 + 65 41 106 Nb 105 928927.768 + 64 42 106 Mo 105 918266.218 + 63 43 106 Tc 105 914356.697 + 62 44 106 Ru 105 907328.203 + 61 45 106 Rh 105 907285.901 + 60 46 106 Pd 105 903480.293 + 59 47 106 Ag 105 906663.507 + 58 48 106 Cd 105 906459.797 + 57 49 106 In 105 913463.603 + 56 50 106 Sn 105 916957.396 + 55 51 106 Sb 105 928637.982 + 54 52 106 Te 105 937498.526 + 67 40 107 Zr 106 941621.000 + 66 41 107 Nb 106 931589.672 + 65 42 107 Mo 106 922112.692 + 64 43 107 Tc 106 915458.485 + 63 44 107 Ru 106 909969.885 + 62 45 107 Rh 106 906747.974 + 61 46 107 Pd 106 905128.064 + 60 47 107 Ag 106 905091.531 + 59 48 107 Cd 106 906612.108 + 58 49 107 In 106 910290.071 + 57 50 107 Sn 106 915713.651 + 56 51 107 Sb 106 924150.624 + 55 52 107 Te 106 935008.356 + 67 41 108 Nb 107 936074.988 + 66 42 108 Mo 107 924040.367 + 65 43 108 Tc 107 918493.541 + 64 44 108 Ru 107 910185.841 + 63 45 108 Rh 107 908714.688 + 62 46 108 Pd 107 903891.805 + 61 47 108 Ag 107 905950.266 + 60 48 108 Cd 107 904183.587 + 59 49 108 In 107 909693.655 + 58 50 108 Sn 107 911894.292 + 57 51 108 Sb 107 922226.734 + 56 52 108 Te 107 929380.471 + 55 53 108 I 107 943478.321 + 68 41 109 Nb 108 939141.000 + 67 42 109 Mo 108 928431.106 + 66 43 109 Tc 108 920254.156 + 65 44 109 Ru 108 913323.756 + 64 45 109 Rh 108 908749.326 + 63 46 109 Pd 108 905950.574 + 62 47 109 Ag 108 904755.773 + 61 48 109 Cd 108 904986.698 + 60 49 109 In 108 907149.685 + 59 50 109 Sn 108 911292.843 + 58 51 109 Sb 108 918141.204 + 57 52 109 Te 108 927304.534 + 56 53 109 I 108 938086.025 + 55 54 109 Xe 108 950434.948 + 69 41 110 Nb 109 943843.000 + 68 42 110 Mo 109 930710.680 + 67 43 110 Tc 109 923741.312 + 66 44 110 Ru 109 914038.548 + 65 45 110 Rh 109 911079.742 + 64 46 110 Pd 109 905172.868 + 63 47 110 Ag 109 906110.719 + 62 48 110 Cd 109 903007.460 + 61 49 110 In 109 907170.665 + 60 50 110 Sn 109 907844.835 + 59 51 110 Sb 109 916854.286 + 58 52 110 Te 109 922458.104 + 57 53 110 I 109 935089.033 + 56 54 110 Xe 109 944258.765 + 69 42 111 Mo 110 935652.016 + 68 43 111 Tc 110 925899.016 + 67 44 111 Ru 110 917567.616 + 66 45 111 Rh 110 911642.531 + 65 46 111 Pd 110 907690.347 + 64 47 111 Ag 110 905296.816 + 63 48 111 Cd 110 904183.766 + 62 49 111 In 110 905107.233 + 61 50 111 Sn 110 907741.126 + 60 51 111 Sb 110 913218.189 + 59 52 111 Te 110 921000.589 + 58 53 111 I 110 930269.239 + 57 54 111 Xe 110 941603.989 + 69 43 112 Tc 111 929941.644 + 68 44 112 Ru 111 918806.972 + 67 45 112 Rh 111 914404.705 + 66 46 112 Pd 111 907329.986 + 65 47 112 Ag 111 907048.550 + 64 48 112 Cd 111 902763.883 + 63 49 112 In 111 905538.704 + 62 50 112 Sn 111 904824.877 + 61 51 112 Sb 111 912399.903 + 60 52 112 Te 111 916727.850 + 59 53 112 I 111 928004.550 + 58 54 112 Xe 111 935559.071 + 57 55 112 Cs 111 950305.341 + 70 43 113 Tc 112 932569.033 + 69 44 113 Ru 112 922846.396 + 68 45 113 Rh 112 915439.567 + 67 46 113 Pd 112 910261.267 + 66 47 113 Ag 112 906572.858 + 65 48 113 Cd 112 904408.097 + 64 49 113 In 112 904060.448 + 63 50 113 Sn 112 905175.845 + 62 51 113 Sb 112 909374.652 + 61 52 113 Te 112 915891.000 + 60 53 113 I 112 923650.064 + 59 54 113 Xe 112 933221.666 + 58 55 113 Cs 112 944428.488 + 71 43 114 Tc 113 937090.000 + 70 44 114 Ru 113 924613.780 + 69 45 114 Rh 113 918721.296 + 68 46 114 Pd 113 910368.780 + 67 47 114 Ag 113 908823.031 + 66 48 114 Cd 113 903364.990 + 65 49 114 In 113 904916.402 + 64 50 114 Sn 113 902780.132 + 63 51 114 Sb 113 909289.191 + 62 52 114 Te 113 912089.000 + 60 54 114 Xe 113 927980.331 + 59 55 114 Cs 113 941296.175 + 58 56 114 Ba 113 950718.495 + 72 43 115 Tc 114 939538.000 + 71 44 115 Ru 114 928942.393 + 70 45 115 Rh 114 920310.993 + 69 46 115 Pd 114 913658.718 + 68 47 115 Ag 114 908767.363 + 67 48 115 Cd 114 905437.417 + 66 49 115 In 114 903878.773 + 65 50 115 Sn 114 903344.697 + 64 51 115 Sb 114 906598.000 + 63 52 115 Te 114 911902.000 + 62 53 115 I 114 918048.000 + 61 54 115 Xe 114 926293.945 + 72 44 116 Ru 115 931219.193 + 71 45 116 Rh 115 924061.645 + 70 46 116 Pd 115 914297.210 + 69 47 116 Ag 115 911386.812 + 68 48 116 Cd 115 904763.230 + 67 49 116 In 115 905259.992 + 66 50 116 Sn 115 901742.824 + 65 51 116 Sb 115 906792.583 + 64 52 116 Te 115 908460.000 + 63 53 116 I 115 916808.658 + 62 54 116 Xe 115 921581.112 + 73 44 117 Ru 116 936135.000 + 72 45 117 Rh 116 926035.623 + 71 46 117 Pd 116 917954.944 + 70 47 117 Ag 116 911773.974 + 69 48 117 Cd 116 907226.038 + 68 49 117 In 116 904515.712 + 67 50 117 Sn 116 902954.017 + 66 51 117 Sb 116 904841.535 + 65 52 117 Te 116 908646.313 + 64 53 117 I 116 913648.314 + 63 54 117 Xe 116 920358.760 + 62 55 117 Cs 116 928616.726 + 61 56 117 Ba 116 938316.561 + 73 45 118 Rh 117 930340.443 + 72 46 118 Pd 117 919066.847 + 71 47 118 Ag 117 914595.487 + 70 48 118 Cd 117 906921.955 + 69 49 118 In 117 906356.659 + 68 50 118 Sn 117 901606.609 + 67 51 118 Sb 117 905532.174 + 66 52 118 Te 117 905853.839 + 65 53 118 I 117 913074.000 + 64 54 118 Xe 117 916178.680 + 63 55 118 Cs 117 926559.519 + 74 45 119 Rh 118 932556.952 + 73 46 119 Pd 118 923340.459 + 72 47 119 Ag 118 915570.293 + 71 48 119 Cd 118 909846.903 + 70 49 119 In 118 905850.944 + 69 50 119 Sn 118 903311.216 + 68 51 119 Sb 118 903945.512 + 67 52 119 Te 118 906407.148 + 66 53 119 I 118 910074.000 + 65 54 119 Xe 118 915410.713 + 64 55 119 Cs 118 922377.330 + 63 56 119 Ba 118 930659.686 + 74 46 120 Pd 119 924551.258 + 73 47 120 Ag 119 918784.767 + 72 48 120 Cd 119 909868.067 + 71 49 120 In 119 907966.805 + 70 50 120 Sn 119 902201.873 + 69 51 120 Sb 119 905079.624 + 68 52 120 Te 119 904059.514 + 67 53 120 I 119 910087.465 + 66 54 120 Xe 119 911784.270 + 65 55 120 Cs 119 920677.279 + 64 56 120 Ba 119 926045.000 + 76 45 121 Rh 120 939613.000 + 75 46 121 Pd 120 928950.343 + 74 47 121 Ag 120 920125.282 + 73 48 121 Cd 120 912963.663 + 72 49 121 In 120 907851.286 + 71 50 121 Sn 120 904242.792 + 70 51 121 Sb 120 903810.093 + 69 52 121 Te 120 904942.488 + 68 53 121 I 120 907405.255 + 67 54 121 Xe 120 911453.014 + 66 55 121 Cs 120 917227.238 + 65 56 121 Ba 120 924052.289 + 76 46 122 Pd 121 930631.694 + 75 47 122 Ag 121 923664.448 + 74 48 122 Cd 121 913459.052 + 73 49 122 In 121 910280.966 + 72 50 122 Sn 121 903444.001 + 71 51 122 Sb 121 905168.074 + 70 52 122 Te 121 903043.434 + 69 53 122 I 121 907588.820 + 68 54 122 Xe 121 908367.658 + 67 55 122 Cs 121 916108.145 + 66 56 122 Ba 121 919904.000 + 77 46 123 Pd 122 935126.000 + 76 47 123 Ag 122 925337.062 + 75 48 123 Cd 122 916892.453 + 74 49 123 In 122 910433.826 + 73 50 123 Sn 122 905725.446 + 72 51 123 Sb 122 904214.016 + 71 52 123 Te 122 904269.747 + 70 53 123 I 122 905588.520 + 69 54 123 Xe 122 908481.750 + 68 55 123 Cs 122 912996.062 + 67 56 123 Ba 122 918781.062 + 77 47 124 Ag 123 928931.229 + 76 48 124 Cd 123 917657.363 + 75 49 124 In 123 913182.263 + 74 50 124 Sn 123 905276.692 + 73 51 124 Sb 123 905935.789 + 72 52 124 Te 123 902817.064 + 71 53 124 I 123 906209.021 + 70 54 124 Xe 123 905891.588 + 69 55 124 Cs 123 912257.798 + 68 56 124 Ba 123 915093.629 + 67 57 124 La 123 924574.275 + 78 47 125 Ag 124 930735.000 + 77 48 125 Cd 124 921257.577 + 76 49 125 In 124 913604.591 + 75 50 125 Sn 124 907786.442 + 74 51 125 Sb 124 905252.987 + 73 52 125 Te 124 904429.900 + 72 53 125 I 124 904629.333 + 71 54 125 Xe 124 906394.050 + 70 55 125 Cs 124 909727.867 + 69 56 125 Ba 124 914471.843 + 68 57 125 La 124 920815.932 + 78 48 126 Cd 125 922429.127 + 77 49 126 In 125 916507.344 + 76 50 126 Sn 125 907658.836 + 75 51 126 Sb 125 907253.036 + 74 52 126 Te 125 903310.866 + 73 53 126 I 125 905623.313 + 72 54 126 Xe 125 904296.794 + 71 55 126 Cs 125 909445.655 + 70 56 126 Ba 125 911250.204 + 69 57 126 La 125 919512.667 + 68 58 126 Ce 125 923971.000 + 79 48 127 Cd 126 926196.624 + 78 49 127 In 126 917448.546 + 77 50 127 Sn 126 910390.401 + 76 51 127 Sb 126 906924.277 + 75 52 127 Te 126 905225.714 + 74 53 127 I 126 904471.838 + 73 54 127 Xe 126 905182.899 + 72 55 127 Cs 126 907417.381 + 71 56 127 Ba 126 911091.275 + 70 57 127 La 126 916375.084 + 69 58 127 Ce 126 922727.000 + 80 48 128 Cd 127 927812.857 + 79 49 128 In 127 920401.053 + 78 50 128 Sn 127 910507.197 + 77 51 128 Sb 127 909145.645 + 76 52 128 Te 127 904461.311 + 75 53 128 I 127 905808.600 + 74 54 128 Xe 127 903530.996 + 73 55 128 Cs 127 907748.648 + 72 56 128 Ba 127 908342.408 + 71 57 128 La 127 915592.123 + 70 58 128 Ce 127 918911.000 + 69 59 128 Pr 127 928791.000 + 81 48 129 Cd 128 932304.399 + 80 49 129 In 128 921805.486 + 79 50 129 Sn 128 913482.102 + 78 51 129 Sb 128 909146.696 + 77 52 129 Te 128 906596.492 + 76 53 129 I 128 904983.687 + 75 54 129 Xe 128 904780.85892 + 74 55 129 Cs 128 906065.690 + 73 56 129 Ba 128 908680.896 + 72 57 129 La 128 912694.475 + 71 58 129 Ce 128 918102.000 + 70 59 129 Pr 128 925095.000 + 82 48 130 Cd 129 934387.566 + 81 49 130 In 129 924977.288 + 80 50 130 Sn 129 913974.533 + 79 51 130 Sb 129 911662.688 + 78 52 130 Te 129 906222.747 + 77 53 130 I 129 906670.211 + 76 54 130 Xe 129 903509.349 + 75 55 130 Cs 129 906709.283 + 74 56 130 Ba 129 906320.874 + 73 57 130 La 129 912369.413 + 72 58 130 Ce 129 914736.000 + 71 59 130 Pr 129 923590.000 + 70 60 130 Nd 129 928506.000 + 83 48 131 Cd 130 940720.000 + 82 49 131 In 130 926972.122 + 81 50 131 Sn 130 917053.066 + 80 51 131 Sb 130 911989.341 + 79 52 131 Te 130 908522.211 + 78 53 131 I 130 906126.384 + 77 54 131 Xe 130 905084.136 + 76 55 131 Cs 130 905464.999 + 75 56 131 Ba 130 906941.181 + 74 57 131 La 130 910070.000 + 73 58 131 Ce 130 914429.465 + 72 59 131 Pr 130 920234.960 + 71 60 131 Nd 130 927248.020 + 83 49 132 In 131 932998.449 + 82 50 132 Sn 131 917823.902 + 81 51 132 Sb 131 914508.015 + 80 52 132 Te 131 908546.716 + 79 53 132 I 131 907993.514 + 78 54 132 Xe 131 904155.08697 + 77 55 132 Cs 131 906437.743 + 76 56 132 Ba 131 905061.098 + 75 57 132 La 131 910118.959 + 74 58 132 Ce 131 911463.846 + 73 59 132 Pr 131 919240.000 + 72 60 132 Nd 131 923321.237 + 83 50 133 Sn 132 923913.756 + 82 51 133 Sb 132 915272.130 + 81 52 133 Te 132 910963.332 + 80 53 133 I 132 907827.361 + 79 54 133 Xe 132 905910.750 + 78 55 133 Cs 132 905451.961 + 77 56 133 Ba 132 906007.325 + 76 57 133 La 132 908218.000 + 75 58 133 Ce 132 911520.402 + 74 59 133 Pr 132 916330.561 + 73 60 133 Nd 132 922348.000 + 72 61 133 Pm 132 929782.000 + 84 50 134 Sn 133 928680.433 + 83 51 134 Sb 133 920535.675 + 82 52 134 Te 133 911396.379 + 81 53 134 I 133 909775.663 + 80 54 134 Xe 133 905393.033 + 79 55 134 Cs 133 906718.503 + 78 56 134 Ba 133 904508.399 + 77 57 134 La 133 908514.011 + 76 58 134 Ce 133 908928.142 + 75 59 134 Pr 133 915696.729 + 74 60 134 Nd 133 918790.210 + 73 61 134 Pm 133 928353.000 + 85 50 135 Sn 134 934908.605 + 84 51 135 Sb 134 925184.357 + 83 52 135 Te 134 916554.718 + 82 53 135 I 134 910059.382 + 81 54 135 Xe 134 907231.661 + 80 55 135 Cs 134 905977.234 + 79 56 135 Ba 134 905688.606 + 78 57 135 La 134 906984.568 + 77 58 135 Ce 134 909160.799 + 76 59 135 Pr 134 913111.774 + 75 60 135 Nd 134 918181.320 + 74 61 135 Pm 134 924796.000 + 73 62 135 Sm 134 932520.000 + 85 51 136 Sb 135 930749.011 + 84 52 136 Te 135 920101.182 + 83 53 136 I 135 914604.695 + 82 54 136 Xe 135 907214.476 + 81 55 136 Cs 135 907311.590 + 80 56 136 Ba 135 904575.959 + 79 57 136 La 135 907634.962 + 78 58 136 Ce 135 907129.438 + 77 59 136 Pr 135 912677.532 + 76 60 136 Nd 135 914976.064 + 75 61 136 Pm 135 923595.949 + 74 62 136 Sm 135 928275.555 + 86 51 137 Sb 136 935522.522 + 85 52 137 Te 136 925599.357 + 84 53 137 I 136 918028.180 + 83 54 137 Xe 136 911557.773 + 82 55 137 Cs 136 907089.464 + 81 56 137 Ba 136 905827.375 + 80 57 137 La 136 906450.618 + 79 58 137 Ce 136 907762.596 + 78 59 137 Pr 136 910679.304 + 77 60 137 Nd 136 914562.448 + 76 61 137 Pm 136 920479.522 + 75 62 137 Sm 136 926970.517 + 74 63 137 Eu 136 935430.722 + 87 51 138 Sb 137 941792.000 + 86 52 138 Te 137 929472.454 + 85 53 138 I 137 922726.394 + 84 54 138 Xe 137 914146.271 + 83 55 138 Cs 137 911017.207 + 82 56 138 Ba 137 905247.229 + 81 57 138 La 137 907117.834 + 80 58 138 Ce 137 905988.743 + 79 59 138 Pr 137 910752.059 + 78 60 138 Nd 137 911949.717 + 77 61 138 Pm 137 919548.077 + 76 62 138 Sm 137 923243.990 + 75 63 138 Eu 137 933709.000 + 87 52 139 Te 138 935367.193 + 86 53 139 I 138 926493.403 + 85 54 139 Xe 138 918792.203 + 84 55 139 Cs 138 913363.992 + 83 56 139 Ba 138 908841.334 + 82 57 139 La 138 906358.804 + 81 58 139 Ce 138 906657.625 + 80 59 139 Pr 138 908943.270 + 79 60 139 Nd 138 911954.407 + 78 61 139 Pm 138 916799.806 + 77 62 139 Sm 138 922296.634 + 76 63 139 Eu 138 929792.310 + 88 52 140 Te 139 939262.917 + 87 53 140 I 139 931715.917 + 86 54 140 Xe 139 921645.817 + 85 55 140 Cs 139 917283.305 + 84 56 140 Ba 139 910606.666 + 83 57 140 La 139 909483.184 + 82 58 140 Ce 139 905446.424 + 81 59 140 Pr 139 909083.592 + 80 60 140 Nd 139 909544.332 + 79 61 140 Pm 139 916034.122 + 78 62 140 Sm 139 918994.717 + 77 63 140 Eu 139 928087.637 + 76 64 140 Gd 139 933674.000 + 75 65 140 Tb 139 945805.049 + 88 53 141 I 140 935666.084 + 87 54 141 Xe 140 926787.184 + 86 55 141 Cs 140 920045.086 + 85 56 141 Ba 140 914403.500 + 84 57 141 La 140 910969.222 + 83 58 141 Ce 140 908283.987 + 82 59 141 Pr 140 907658.403 + 81 60 141 Nd 140 909615.488 + 80 61 141 Pm 140 913555.084 + 79 62 141 Sm 140 918481.591 + 78 63 141 Eu 140 924931.745 + 77 64 141 Gd 140 932126.000 + 76 65 141 Tb 140 941448.000 + 89 53 142 I 141 941202.000 + 88 54 142 Xe 141 929973.098 + 87 55 142 Cs 141 924299.512 + 86 56 142 Ba 141 916432.888 + 85 57 142 La 141 914090.454 + 84 58 142 Ce 141 909249.884 + 83 59 142 Pr 141 910050.440 + 82 60 142 Nd 141 907728.895 + 81 61 142 Pm 141 912890.428 + 80 62 142 Sm 141 915204.532 + 79 63 142 Eu 141 923441.836 + 78 64 142 Gd 141 928116.000 + 77 65 142 Tb 141 939280.859 + 89 54 143 Xe 142 935369.553 + 88 55 143 Cs 142 927347.348 + 87 56 143 Ba 142 920625.150 + 86 57 143 La 142 916079.422 + 85 58 143 Ce 142 912391.630 + 84 59 143 Pr 142 910822.564 + 83 60 143 Nd 142 909819.887 + 82 61 143 Pm 142 910938.073 + 81 62 143 Sm 142 914634.821 + 80 63 143 Eu 142 920298.681 + 79 64 143 Gd 142 926750.682 + 78 65 143 Tb 142 935137.335 + 77 66 143 Dy 142 943994.335 + 90 54 144 Xe 143 938945.079 + 89 55 144 Cs 143 932075.404 + 88 56 144 Ba 143 922954.821 + 87 57 144 La 143 919645.589 + 86 58 144 Ce 143 913652.830 + 85 59 144 Pr 143 913310.750 + 84 60 144 Nd 143 910092.865 + 83 61 144 Pm 143 912596.224 + 82 62 144 Sm 143 912006.373 + 81 63 144 Eu 143 918819.517 + 80 64 144 Gd 143 922963.000 + 79 65 144 Tb 143 933045.000 + 78 66 144 Dy 143 939269.514 + 77 67 144 Ho 143 952109.714 + 91 54 145 Xe 144 944719.634 + 90 55 145 Cs 144 935528.930 + 89 56 145 Ba 144 927518.400 + 88 57 145 La 144 921808.066 + 87 58 145 Ce 144 917265.144 + 86 59 145 Pr 144 914518.033 + 85 60 145 Nd 144 912579.199 + 84 61 145 Pm 144 912755.773 + 83 62 145 Sm 144 913417.244 + 82 63 145 Eu 144 916272.668 + 81 64 145 Gd 144 921710.370 + 80 65 145 Tb 144 928729.105 + 79 66 145 Dy 144 937473.994 + 78 67 145 Ho 144 947267.394 + 92 54 146 Xe 145 948518.248 + 91 55 146 Cs 145 940621.870 + 90 56 146 Ba 145 930276.431 + 89 57 146 La 145 925871.468 + 88 58 146 Ce 145 918802.065 + 87 59 146 Pr 145 917679.549 + 86 60 146 Nd 145 913122.503 + 85 61 146 Pm 145 914702.286 + 84 62 146 Sm 145 913046.881 + 83 63 146 Eu 145 917210.909 + 82 64 146 Gd 145 918318.548 + 81 65 146 Tb 145 927252.768 + 80 66 146 Dy 145 932844.529 + 79 67 146 Ho 145 944993.506 + 78 68 146 Er 145 952418.359 + 92 55 147 Cs 146 944261.515 + 91 56 147 Ba 146 935303.900 + 90 57 147 La 146 928417.800 + 89 58 147 Ce 146 922689.903 + 88 59 147 Pr 146 919007.458 + 87 60 147 Nd 146 916106.010 + 86 61 147 Pm 146 915144.638 + 85 62 147 Sm 146 914904.064 + 84 63 147 Eu 146 916752.276 + 83 64 147 Gd 146 919100.987 + 82 65 147 Tb 146 924054.620 + 81 66 147 Dy 146 931082.715 + 80 67 147 Ho 146 940142.295 + 79 68 147 Er 146 949964.458 + 78 69 147 Tm 146 961379.890 + 93 55 148 Cs 147 949639.029 + 92 56 148 Ba 147 938170.578 + 91 57 148 La 147 932679.400 + 90 58 148 Ce 147 924424.196 + 89 59 148 Pr 147 922130.015 + 88 60 148 Nd 147 916899.093 + 87 61 148 Pm 147 917481.255 + 86 62 148 Sm 147 914829.012 + 85 63 148 Eu 147 918089.294 + 84 64 148 Gd 147 918121.503 + 83 65 148 Tb 147 924275.323 + 82 66 148 Dy 147 927149.772 + 81 67 148 Ho 147 937743.928 + 80 68 148 Er 147 944735.029 + 79 69 148 Tm 147 958384.029 + 93 56 149 Ba 148 942973.000 + 92 57 149 La 148 935351.260 + 91 58 149 Ce 148 928426.900 + 90 59 149 Pr 148 923736.100 + 89 60 149 Nd 148 920154.648 + 88 61 149 Pm 148 918341.658 + 87 62 149 Sm 148 917191.375 + 86 63 149 Eu 148 917937.086 + 85 64 149 Gd 148 919347.831 + 84 65 149 Tb 148 923253.753 + 83 66 149 Dy 148 927325.448 + 82 67 149 Ho 148 933819.672 + 81 68 149 Er 148 942306.000 + 93 57 150 La 149 939742.000 + 92 58 150 Ce 149 930384.035 + 91 59 150 Pr 149 926676.415 + 90 60 150 Nd 149 920901.525 + 89 61 150 Pm 149 920990.217 + 88 62 150 Sm 149 917282.195 + 87 63 150 Eu 149 919707.229 + 86 64 150 Gd 149 918664.066 + 85 65 150 Tb 149 923664.864 + 84 66 150 Dy 149 925593.080 + 83 67 150 Ho 149 933498.358 + 82 68 150 Er 149 937915.528 + 94 57 151 La 150 942769.000 + 93 58 151 Ce 150 934272.200 + 92 59 151 Pr 150 928309.114 + 91 60 151 Nd 150 923839.565 + 90 61 151 Pm 150 921216.817 + 89 62 151 Sm 150 919939.066 + 88 63 151 Eu 150 919856.860 + 87 64 151 Gd 150 920355.109 + 86 65 151 Tb 150 923109.001 + 85 66 151 Dy 150 926191.253 + 84 67 151 Ho 150 931698.177 + 83 68 151 Er 150 937448.567 + 82 69 151 Tm 150 945493.201 + 81 70 151 Yb 150 955402.458 + 93 59 152 Pr 151 931552.900 + 92 60 152 Nd 151 924691.509 + 91 61 152 Pm 151 923505.481 + 90 62 152 Sm 151 919739.040 + 89 63 152 Eu 151 921751.235 + 88 64 152 Gd 151 919798.822 + 87 65 152 Tb 151 924082.263 + 86 66 152 Dy 151 924725.363 + 85 67 152 Ho 151 931717.465 + 84 68 152 Er 151 935050.169 + 83 69 152 Tm 151 944476.000 + 82 70 152 Yb 151 950326.700 + 94 59 153 Pr 152 933903.532 + 93 60 153 Nd 152 927717.949 + 92 61 153 Pm 152 924156.436 + 91 62 153 Sm 152 922103.969 + 90 63 153 Eu 152 921237.043 + 89 64 153 Gd 152 921757.359 + 88 65 153 Tb 152 923441.978 + 87 66 153 Dy 152 925771.992 + 86 67 153 Ho 152 930206.632 + 85 68 153 Er 152 935084.279 + 84 69 153 Tm 152 942057.244 + 82 71 153 Lu 152 958805.054 + 95 59 154 Pr 153 937621.738 + 94 60 154 Nd 153 929333.977 + 93 61 154 Pm 153 926449.364 + 92 62 154 Sm 153 922216.164 + 91 63 154 Eu 153 922985.955 + 90 64 154 Gd 153 920873.398 + 89 65 154 Tb 153 924684.106 + 88 66 154 Dy 153 924429.028 + 87 67 154 Ho 153 930606.841 + 86 68 154 Er 153 932790.743 + 85 69 154 Tm 153 941570.067 + 84 70 154 Yb 153 946395.701 + 96 59 155 Pr 154 940509.259 + 95 60 155 Nd 154 933135.668 + 94 61 155 Pm 154 928137.024 + 93 62 155 Sm 154 924647.051 + 92 63 155 Eu 154 922900.102 + 91 64 155 Gd 154 922629.796 + 90 65 155 Tb 154 923509.921 + 89 66 155 Dy 154 925758.459 + 88 67 155 Ho 154 929103.634 + 87 68 155 Er 154 933215.684 + 86 69 155 Tm 154 939209.578 + 85 70 155 Yb 154 945783.217 + 84 71 155 Lu 154 954326.011 + 96 60 156 Nd 155 935078.868 + 95 61 156 Pm 155 931117.490 + 94 62 156 Sm 155 925538.511 + 93 63 156 Eu 155 924763.285 + 92 64 156 Gd 155 922130.562 + 91 65 156 Tb 155 924754.430 + 90 66 156 Dy 155 924284.038 + 89 67 156 Ho 155 929705.436 + 88 68 156 Er 155 931065.890 + 87 69 156 Tm 155 938985.597 + 86 70 156 Yb 155 942816.893 + 85 71 156 Lu 155 953086.606 + 84 72 156 Hf 155 959401.889 + 97 60 157 Nd 156 939386.037 + 96 61 157 Pm 156 933121.370 + 95 62 157 Sm 156 928418.673 + 94 63 157 Eu 156 925432.791 + 93 64 157 Gd 156 923967.870 + 92 65 157 Tb 156 924032.328 + 91 66 157 Dy 156 925469.667 + 90 67 157 Ho 156 928251.999 + 89 68 157 Er 156 931922.655 + 88 69 157 Tm 156 936973.000 + 87 70 157 Yb 156 942649.230 + 86 71 157 Lu 156 950144.045 + 84 73 157 Ta 156 968230.251 + 97 61 158 Pm 157 936565.121 + 96 62 158 Sm 157 929950.979 + 95 63 158 Eu 157 927798.581 + 94 64 158 Gd 157 924111.646 + 93 65 158 Tb 157 925420.166 + 92 66 158 Dy 157 924414.597 + 91 67 158 Ho 157 928944.692 + 90 68 158 Er 157 929893.474 + 89 69 158 Tm 157 936979.525 + 88 70 158 Yb 157 939870.534 + 87 71 158 Lu 157 949315.626 + 86 72 158 Hf 157 954801.222 + 98 61 159 Pm 158 939286.479 + 97 62 159 Sm 158 933217.202 + 96 63 159 Eu 158 929099.612 + 95 64 159 Gd 158 926396.267 + 94 65 159 Tb 158 925353.933 + 93 66 159 Dy 158 925746.023 + 92 67 159 Ho 158 927718.768 + 91 68 159 Er 158 930690.875 + 90 69 159 Tm 158 934975.000 + 89 70 159 Yb 158 940054.787 + 88 71 159 Lu 158 946635.615 + 87 72 159 Hf 158 953995.838 + 86 73 159 Ta 158 963028.052 + 98 62 160 Sm 159 935335.286 + 97 63 160 Eu 159 931850.916 + 96 64 160 Gd 159 927061.537 + 95 65 160 Tb 159 927174.778 + 94 66 160 Dy 159 925203.244 + 93 67 160 Ho 159 928735.204 + 92 68 160 Er 159 929077.130 + 91 69 160 Tm 159 935263.106 + 90 70 160 Yb 159 937559.763 + 89 71 160 Lu 159 946033.000 + 88 72 160 Hf 159 950682.513 + 87 73 160 Ta 159 961541.679 + 86 74 160 W 159 968516.753 + 99 62 161 Sm 160 939160.143 + 98 63 161 Eu 160 933664.066 + 97 64 161 Gd 160 929676.602 + 96 65 161 Tb 160 927577.001 + 95 66 161 Dy 160 926939.088 + 94 67 161 Ho 160 927860.759 + 93 68 161 Er 160 930003.191 + 92 69 161 Tm 160 933549.000 + 91 70 161 Yb 160 937906.846 + 90 71 161 Lu 160 943572.000 + 89 72 161 Hf 160 950279.151 + 88 73 161 Ta 160 958369.031 + 86 75 161 Re 160 977627.121 + 99 63 162 Eu 161 936979.303 + 98 64 162 Gd 161 930992.146 + 97 65 162 Tb 161 929493.955 + 96 66 162 Dy 161 926804.168 + 95 67 162 Ho 161 929101.485 + 94 68 162 Er 161 928786.960 + 93 69 162 Tm 161 934000.872 + 92 70 162 Yb 161 935773.771 + 91 71 162 Lu 161 943282.776 + 90 72 162 Hf 161 947214.896 + 89 73 162 Ta 161 957294.202 + 88 74 162 W 161 963500.347 + 100 63 163 Eu 162 939360.977 + 99 64 163 Gd 162 934176.832 + 98 65 163 Tb 162 930653.261 + 97 66 163 Dy 162 928736.879 + 96 67 163 Ho 162 928739.921 + 95 68 163 Er 162 930039.567 + 94 69 163 Tm 162 932657.941 + 93 70 163 Yb 162 936339.800 + 92 71 163 Lu 162 941179.000 + 91 72 163 Hf 162 947113.258 + 90 73 163 Ta 162 954337.195 + 89 74 163 W 162 962524.511 + 88 75 163 Re 162 972085.441 + 99 65 164 Tb 163 933356.559 + 98 66 164 Dy 163 929180.472 + 97 67 164 Ho 163 930239.483 + 96 68 164 Er 163 929207.392 + 95 69 164 Tm 163 933543.281 + 94 70 164 Yb 163 934495.103 + 93 71 164 Lu 163 941339.000 + 92 72 164 Hf 163 944370.544 + 91 73 164 Ta 163 953534.000 + 90 74 164 W 163 958952.222 + 89 75 164 Re 163 970507.124 + 88 76 164 Os 163 978075.966 + 99 66 165 Dy 164 931709.054 + 98 67 165 Ho 164 930328.047 + 97 68 165 Er 164 930733.198 + 96 69 165 Tm 164 932442.269 + 95 70 165 Yb 164 935270.241 + 94 71 165 Lu 164 939406.758 + 93 72 165 Hf 164 944567.000 + 92 73 165 Ta 164 950780.303 + 91 74 165 W 164 958280.974 + 90 75 165 Re 164 967085.375 + 101 65 166 Tb 165 937858.119 + 100 66 166 Dy 165 932812.461 + 99 67 166 Ho 165 932290.139 + 98 68 166 Er 165 930299.023 + 97 69 166 Tm 165 933560.092 + 96 70 166 Yb 165 933874.249 + 95 71 166 Lu 165 939859.000 + 94 72 166 Hf 165 942180.000 + 93 73 166 Ta 165 950512.000 + 92 74 166 W 165 955031.346 + 91 75 166 Re 165 965760.940 + 90 76 166 Os 165 972698.141 + 101 66 167 Dy 166 935661.823 + 100 67 167 Ho 166 933138.994 + 99 68 167 Er 166 932054.119 + 98 69 167 Tm 166 932856.635 + 97 70 167 Yb 166 934953.337 + 96 71 167 Lu 166 938270.000 + 95 72 167 Hf 166 942600.000 + 94 73 167 Ta 166 948093.000 + 93 74 167 W 166 954805.873 + 91 76 167 Os 166 971548.938 + 90 77 167 Ir 166 981671.981 + 102 66 168 Dy 167 937133.716 + 101 67 168 Ho 167 935521.676 + 100 68 168 Er 167 932376.192 + 99 69 168 Tm 167 934177.868 + 98 70 168 Yb 167 933889.106 + 97 71 168 Lu 167 938735.139 + 96 72 168 Hf 167 940568.000 + 95 73 168 Ta 167 948047.000 + 94 74 168 W 167 951805.262 + 93 75 168 Re 167 961572.608 + 92 76 168 Os 167 967798.812 + 91 77 168 Ir 167 979960.981 + 90 78 168 Pt 167 988183.004 + 103 66 169 Dy 168 940313.971 + 102 67 169 Ho 168 936878.630 + 101 68 169 Er 168 934596.353 + 100 69 169 Tm 168 934218.350 + 99 70 169 Yb 168 935182.016 + 98 71 169 Lu 168 937643.653 + 97 72 169 Hf 168 941259.000 + 96 73 169 Ta 168 946011.000 + 95 74 169 W 168 951778.677 + 94 75 169 Re 168 958765.991 + 93 76 169 Os 168 967017.833 + 92 77 169 Ir 168 976281.287 + 103 67 170 Ho 169 939625.289 + 102 68 170 Er 169 935470.673 + 101 69 170 Tm 169 935806.507 + 100 70 170 Yb 169 934767.245 + 99 71 170 Lu 169 938479.234 + 98 72 170 Hf 169 939609.000 + 97 73 170 Ta 169 946175.000 + 96 74 170 W 169 949231.200 + 95 75 170 Re 169 958224.966 + 94 76 170 Os 169 963578.673 + 92 78 170 Pt 169 982502.095 + 104 67 171 Ho 170 941471.490 + 103 68 171 Er 170 938036.148 + 102 69 171 Tm 170 936435.126 + 101 70 171 Yb 170 936331.517 + 100 71 171 Lu 170 937918.660 + 99 72 171 Hf 170 940492.000 + 98 73 171 Ta 170 944476.000 + 97 74 171 W 170 949451.000 + 96 75 171 Re 170 955716.000 + 95 76 171 Os 170 963175.348 + 94 77 171 Ir 170 971645.522 + 93 78 171 Pt 170 981245.502 + 92 79 171 Au 170 991881.542 + 104 68 172 Er 171 939362.344 + 103 69 172 Tm 171 938406.067 + 102 70 172 Yb 171 936386.658 + 101 71 172 Lu 171 939091.417 + 100 72 172 Hf 171 939449.716 + 99 73 172 Ta 171 944895.000 + 98 74 172 W 171 947292.000 + 97 75 172 Re 171 955408.079 + 96 76 172 Os 171 960017.088 + 95 77 172 Ir 171 970607.036 + 94 78 172 Pt 171 977340.788 + 93 79 172 Au 171 989996.708 + 92 80 172 Hg 171 998863.391 + 104 69 173 Tm 172 939606.632 + 103 70 173 Yb 172 938216.215 + 102 71 173 Lu 172 938935.822 + 101 72 173 Hf 172 940513.000 + 100 73 173 Ta 172 943750.000 + 99 74 173 W 172 947689.000 + 98 75 173 Re 172 953243.000 + 97 76 173 Os 172 959808.375 + 96 77 173 Ir 172 967505.496 + 95 78 173 Pt 172 976443.315 + 94 79 173 Au 172 986223.808 + 105 69 174 Tm 173 942174.064 + 104 70 174 Yb 173 938867.548 + 103 71 174 Lu 173 940342.938 + 102 72 174 Hf 173 940048.480 + 101 73 174 Ta 173 944454.000 + 100 74 174 W 173 946079.000 + 99 75 174 Re 173 953115.000 + 98 76 174 Os 173 957063.152 + 97 77 174 Ir 173 966866.676 + 96 78 174 Pt 173 972819.832 + 94 80 174 Hg 173 992870.583 + 106 69 175 Tm 174 943842.313 + 105 70 175 Yb 174 941281.910 + 104 71 175 Lu 174 940777.308 + 103 72 175 Hf 174 941511.527 + 102 73 175 Ta 174 943737.000 + 101 74 175 W 174 946717.000 + 100 75 175 Re 174 951381.000 + 99 76 175 Os 174 956945.105 + 98 77 175 Ir 174 964149.521 + 97 78 175 Pt 174 972395.457 + 96 79 175 Au 174 981316.085 + 95 80 175 Hg 174 991441.086 + 107 69 176 Tm 175 946997.711 + 106 70 176 Yb 175 942574.708 + 105 71 176 Lu 175 942691.809 + 104 72 176 Hf 175 941409.905 + 103 73 176 Ta 175 944857.000 + 102 74 176 W 175 945634.000 + 101 75 176 Re 175 951623.000 + 100 76 176 Os 175 954806.000 + 99 77 176 Ir 175 963630.119 + 98 78 176 Pt 175 968938.214 + 97 79 176 Au 175 980116.927 + 96 80 176 Hg 175 987348.335 + 95 81 176 Tl 176 000624.367 + 107 70 177 Yb 176 945263.848 + 106 71 177 Lu 176 943763.668 + 105 72 177 Hf 176 943230.320 + 104 73 177 Ta 176 944482.073 + 103 74 177 W 176 946643.000 + 102 75 177 Re 176 950328.000 + 101 76 177 Os 176 954957.882 + 100 77 177 Ir 176 961301.500 + 99 78 177 Pt 176 968469.529 + 98 79 177 Au 176 976870.379 + 97 80 177 Hg 176 986277.376 + 96 81 177 Tl 176 996413.797 + 108 70 178 Yb 177 946649.710 + 107 71 178 Lu 177 945960.162 + 106 72 178 Hf 177 943708.456 + 104 74 178 W 177 945885.925 + 103 75 178 Re 177 950989.000 + 102 76 178 Os 177 953253.300 + 101 77 178 Ir 177 961082.000 + 100 78 178 Pt 177 965649.248 + 99 79 178 Au 177 976055.945 + 98 80 178 Hg 177 982484.158 + 96 82 178 Pb 178 003837.163 + 108 71 179 Lu 178 947333.082 + 107 72 179 Hf 178 945825.838 + 106 73 179 Ta 178 945939.187 + 105 74 179 W 178 947079.501 + 104 75 179 Re 178 949989.715 + 103 76 179 Os 178 953816.669 + 102 77 179 Ir 178 959117.596 + 101 78 179 Pt 178 965358.719 + 100 79 179 Au 178 973173.668 + 99 80 179 Hg 178 981826.899 + 98 81 179 Tl 178 991123.405 + 97 82 179 Pb 179 002201.452 + 109 71 180 Lu 179 949890.876 + 108 72 180 Hf 179 946559.669 + 107 73 180 Ta 179 947468.392 + 106 74 180 W 179 946713.435 + 105 75 180 Re 179 950791.568 + 104 76 180 Os 179 952379.930 + 103 77 180 Ir 179 959229.446 + 102 78 180 Pt 179 963031.563 + 101 79 180 Au 179 972489.883 + 100 80 180 Hg 179 978260.249 + 99 81 180 Tl 179 989923.019 + 98 82 180 Pb 179 997915.842 + 110 71 181 Lu 180 951908.000 + 109 72 181 Hf 180 949110.965 + 108 73 181 Ta 180 947999.331 + 107 74 181 W 180 948218.863 + 106 75 181 Re 180 950061.523 + 105 76 181 Os 180 953247.188 + 104 77 181 Ir 180 957634.694 + 103 78 181 Pt 180 963089.927 + 102 79 181 Au 180 970079.103 + 101 80 181 Hg 180 977819.357 + 100 81 181 Tl 180 986259.992 + 99 82 181 Pb 180 996653.386 + 110 72 182 Hf 181 950563.816 + 109 73 182 Ta 181 950155.413 + 108 74 182 W 181 948205.721 + 107 75 182 Re 181 951211.645 + 106 76 182 Os 181 952110.153 + 105 77 182 Ir 181 958076.296 + 104 78 182 Pt 181 961171.571 + 103 79 182 Au 181 969617.874 + 102 80 182 Hg 181 974689.132 + 101 81 182 Tl 181 985691.880 + 100 82 182 Pb 181 992672.940 + 112 71 183 Lu 182 957363.000 + 111 72 183 Hf 182 953534.004 + 110 73 183 Ta 182 951376.180 + 109 74 183 W 182 950224.500 + 108 75 183 Re 182 950821.390 + 107 76 183 Os 182 953124.719 + 106 77 183 Ir 182 956839.968 + 105 78 183 Pt 182 961596.653 + 104 79 183 Au 182 967588.108 + 103 80 183 Hg 182 974444.629 + 102 81 183 Tl 182 982192.846 + 101 82 183 Pb 182 991867.668 + 112 72 184 Hf 183 955448.587 + 111 73 184 Ta 183 954010.038 + 110 74 184 W 183 950933.260 + 109 75 184 Re 183 952528.267 + 108 76 184 Os 183 952492.949 + 107 77 184 Ir 183 957476.000 + 106 78 184 Pt 183 959920.039 + 105 79 184 Au 183 967451.524 + 104 80 184 Hg 183 971713.221 + 103 81 184 Tl 183 981875.093 + 102 82 184 Pb 183 988135.702 + 101 83 184 Bi 184 001141.250 + 113 72 185 Hf 184 958862.000 + 112 73 185 Ta 184 955561.396 + 111 74 185 W 184 953421.286 + 110 75 185 Re 184 952958.337 + 109 76 185 Os 184 954045.995 + 108 77 185 Ir 184 956698.000 + 107 78 185 Pt 184 960613.659 + 106 79 185 Au 184 965798.874 + 105 80 185 Hg 184 971890.676 + 104 81 185 Tl 184 978789.191 + 103 82 185 Pb 184 987609.989 + 114 72 186 Hf 185 960897.000 + 113 73 186 Ta 185 958553.111 + 112 74 186 W 185 954365.215 + 111 75 186 Re 185 954989.419 + 110 76 186 Os 185 953837.660 + 109 77 186 Ir 185 957946.754 + 108 78 186 Pt 185 959350.846 + 107 79 186 Au 185 965952.703 + 106 80 186 Hg 185 969362.017 + 105 81 186 Tl 185 978650.841 + 104 82 186 Pb 185 984238.196 + 103 83 186 Bi 185 996622.402 + 102 84 186 Po 186 004402.577 + 114 73 187 Ta 186 960391.000 + 113 74 187 W 186 957161.323 + 112 75 187 Re 186 955752.288 + 111 76 187 Os 186 955749.640 + 110 77 187 Ir 186 957542.000 + 109 78 187 Pt 186 960616.976 + 108 79 187 Au 186 964543.155 + 107 80 187 Hg 186 969814.158 + 106 81 187 Tl 186 975904.743 + 105 82 187 Pb 186 983910.836 + 104 83 187 Bi 186 993147.276 + 103 84 187 Po 187 003036.624 + 115 73 188 Ta 187 963916.000 + 114 74 188 W 187 958488.395 + 113 75 188 Re 187 958113.728 + 112 76 188 Os 187 955837.361 + 111 77 188 Ir 187 958835.046 + 110 78 188 Pt 187 959397.560 + 109 79 188 Au 187 965247.969 + 108 80 188 Hg 187 967576.910 + 107 81 188 Tl 187 976020.886 + 106 82 188 Pb 187 980874.592 + 105 83 188 Bi 187 992276.184 + 104 84 188 Po 187 999415.655 + 115 74 189 W 188 961763.000 + 114 75 189 Re 188 959227.817 + 113 76 189 Os 188 958146.005 + 112 77 189 Ir 188 958722.669 + 111 78 189 Pt 188 960848.542 + 110 79 189 Au 188 963948.286 + 109 80 189 Hg 188 968194.748 + 108 81 189 Tl 188 973573.527 + 107 82 189 Pb 188 980843.639 + 106 83 189 Bi 188 989195.141 + 105 84 189 Po 188 998473.415 + 116 74 190 W 189 963089.066 + 115 75 190 Re 189 961743.360 + 114 76 190 Os 189 958445.496 + 113 77 190 Ir 189 960543.445 + 112 78 190 Pt 189 959949.876 + 111 79 190 Au 189 964751.750 + 110 80 190 Hg 189 966322.169 + 109 81 190 Tl 189 973835.551 + 108 82 190 Pb 189 978081.828 + 107 83 190 Bi 189 988620.883 + 106 84 190 Po 189 995100.519 + 117 74 191 W 190 966531.000 + 116 75 191 Re 190 963123.437 + 115 76 191 Os 190 960928.159 + 114 77 191 Ir 190 960591.527 + 113 78 191 Pt 190 961676.363 + 112 79 191 Au 190 963716.455 + 111 80 191 Hg 190 967158.247 + 110 81 191 Tl 190 971784.096 + 109 82 191 Pb 190 978281.000 + 108 83 191 Bi 190 985786.975 + 107 84 191 Po 190 994558.488 + 106 85 191 At 191 004148.086 + 117 75 192 Re 191 966088.000 + 116 76 192 Os 191 961478.881 + 115 77 192 Ir 191 962602.485 + 114 78 192 Pt 191 961042.736 + 113 79 192 Au 191 964817.684 + 112 80 192 Hg 191 965634.182 + 111 81 192 Tl 191 972225.000 + 110 82 192 Pb 191 975785.115 + 109 83 192 Bi 191 985470.078 + 108 84 192 Po 191 991335.788 + 107 85 192 At 192 003141.034 + 118 75 193 Re 192 967545.000 + 117 76 193 Os 192 964149.753 + 116 77 193 Ir 192 962923.824 + 115 78 193 Pt 192 962984.616 + 114 79 193 Au 192 964138.447 + 113 80 193 Hg 192 966653.377 + 112 81 193 Tl 192 970501.997 + 111 82 193 Pb 192 976173.234 + 110 83 193 Bi 192 982947.223 + 109 84 193 Po 192 991062.403 + 108 85 193 At 192 999927.728 + 107 86 193 Rn 193 009707.964 + 118 76 194 Os 193 965179.477 + 117 77 194 Ir 193 965075.773 + 116 78 194 Pt 193 962683.527 + 115 79 194 Au 193 965419.062 + 114 80 194 Hg 193 965449.111 + 113 81 194 Tl 193 971081.411 + 112 82 194 Pb 193 974011.706 + 111 83 194 Bi 193 982792.362 + 110 84 194 Po 193 988186.015 + 109 85 194 At 193 999226.872 + 108 86 194 Rn 194 006144.424 + 119 76 195 Os 194 968318.000 + 118 77 195 Ir 194 965976.967 + 117 78 195 Pt 194 964794.353 + 116 79 195 Au 194 965037.851 + 115 80 195 Hg 194 966705.751 + 114 81 195 Tl 194 969774.096 + 113 82 195 Pb 194 974548.743 + 112 83 195 Bi 194 980648.762 + 111 84 195 Po 194 988130.617 + 110 85 195 At 194 996274.485 + 109 86 195 Rn 195 005421.699 + 120 76 196 Os 195 969643.277 + 119 77 196 Ir 195 968399.696 + 118 78 196 Pt 195 964954.675 + 117 79 196 Au 195 966571.221 + 116 80 196 Hg 195 965833.444 + 115 81 196 Tl 195 970481.192 + 114 82 196 Pb 195 972787.466 + 113 83 196 Bi 195 980666.509 + 112 84 196 Po 195 985536.094 + 111 85 196 At 195 995797.421 + 110 86 196 Rn 196 002115.945 + 120 77 197 Ir 196 969657.233 + 119 78 197 Pt 196 967343.053 + 118 79 197 Au 196 966570.114 + 117 80 197 Hg 196 967213.713 + 116 81 197 Tl 196 969573.986 + 115 82 197 Pb 196 973434.717 + 114 83 197 Bi 196 978864.929 + 113 84 197 Po 196 985659.607 + 112 85 197 At 196 993177.357 + 111 86 197 Rn 197 001621.430 + 110 87 197 Fr 197 011008.090 + 120 78 198 Pt 197 967896.734 + 119 79 198 Au 197 968243.724 + 118 80 198 Hg 197 966769.179 + 117 81 198 Tl 197 970446.673 + 116 82 198 Pb 197 972015.397 + 115 83 198 Bi 197 979206.000 + 114 84 198 Po 197 983388.672 + 113 85 198 At 197 992791.673 + 112 86 198 Rn 197 998679.156 + 111 87 198 Fr 198 010278.138 + 122 77 199 Ir 198 973807.115 + 121 78 199 Pt 198 970597.038 + 120 79 199 Au 198 968766.582 + 119 80 199 Hg 198 968280.989 + 118 81 199 Tl 198 969877.000 + 117 82 199 Pb 198 972912.542 + 116 83 199 Bi 198 977672.893 + 115 84 199 Po 198 983673.021 + 114 85 199 At 198 990527.719 + 113 86 199 Rn 198 998390.273 + 112 87 199 Fr 199 007269.389 + 122 78 200 Pt 199 971444.625 + 121 79 200 Au 199 970756.556 + 120 80 200 Hg 199 968326.934 + 119 81 200 Tl 199 970963.602 + 118 82 200 Pb 199 971818.332 + 117 83 200 Bi 199 978131.093 + 116 84 200 Po 199 981812.270 + 115 85 200 At 199 990351.100 + 114 86 200 Rn 199 995700.707 + 113 87 200 Fr 200 006583.507 + 123 78 201 Pt 200 974513.293 + 122 79 201 Au 200 971657.665 + 121 80 201 Hg 200 970303.038 + 120 81 201 Tl 200 970820.168 + 119 82 201 Pb 200 972870.425 + 118 83 201 Bi 200 977008.512 + 117 84 201 Po 200 982263.777 + 116 85 201 At 200 988417.061 + 115 86 201 Rn 200 995628.179 + 114 87 201 Fr 201 003852.496 + 113 88 201 Ra 201 012814.683 + 124 78 202 Pt 201 975639.000 + 123 79 202 Au 201 973856.000 + 122 80 202 Hg 201 970643.585 + 121 81 202 Tl 201 972109.089 + 120 82 202 Pb 201 972151.604 + 119 83 202 Bi 201 977733.100 + 118 84 202 Po 201 980738.881 + 117 85 202 At 201 988630.380 + 116 86 202 Rn 201 993263.902 + 115 87 202 Fr 202 003323.946 + 114 88 202 Ra 202 009742.264 + 124 79 203 Au 202 975154.498 + 123 80 203 Hg 202 972872.326 + 122 81 203 Tl 202 972344.022 + 121 82 203 Pb 202 973390.535 + 120 83 203 Bi 202 976892.145 + 119 84 203 Po 202 981415.995 + 118 85 203 At 202 986942.957 + 117 86 203 Rn 202 993393.732 + 116 87 203 Fr 203 000940.872 + 115 88 203 Ra 203 009298.745 + 124 80 204 Hg 203 973494.037 + 123 81 204 Tl 203 973863.337 + 122 82 204 Pb 203 973043.420 + 121 83 204 Bi 203 977835.717 + 120 84 204 Po 203 980309.863 + 119 85 204 At 203 987251.197 + 118 86 204 Rn 203 991443.644 + 117 87 204 Fr 204 000651.974 + 116 88 204 Ra 204 006502.228 + 125 80 205 Hg 204 976073.125 + 124 81 205 Tl 204 974427.237 + 123 82 205 Pb 204 974481.597 + 122 83 205 Bi 204 977386.323 + 121 84 205 Po 204 981190.004 + 120 85 205 At 204 986074.041 + 119 86 205 Rn 204 991723.204 + 118 87 205 Fr 204 998593.858 + 117 88 205 Ra 205 006268.415 + 116 89 205 Ac 205 015144.158 + 126 80 206 Hg 205 977513.756 + 125 81 206 Tl 205 976110.026 + 124 82 206 Pb 205 974465.124 + 123 83 206 Bi 205 978498.757 + 122 84 206 Po 205 980473.654 + 121 85 206 At 205 986656.148 + 120 86 206 Rn 205 990195.358 + 119 87 206 Fr 205 998666.211 + 118 88 206 Ra 206 003827.763 + 117 89 206 Ac 206 014470.787 + 127 80 207 Hg 206 982300.000 + 126 81 207 Tl 206 977418.586 + 125 82 207 Pb 206 975896.735 + 124 83 207 Bi 206 978470.471 + 123 84 207 Po 206 981593.252 + 122 85 207 At 206 985799.783 + 121 86 207 Rn 206 990730.200 + 120 87 207 Fr 206 996946.474 + 119 88 207 Ra 207 003805.161 + 118 89 207 Ac 207 011965.973 + 128 80 208 Hg 207 985759.000 + 127 81 208 Tl 207 982017.992 + 126 82 208 Pb 207 976651.918 + 125 83 208 Bi 207 979741.981 + 124 84 208 Po 207 981245.616 + 123 85 208 At 207 986613.042 + 122 86 208 Rn 207 989634.295 + 121 87 208 Fr 207 997138.018 + 120 88 208 Ra 208 001854.929 + 119 89 208 Ac 208 011544.073 + 118 90 208 Th 208 017910.722 + 128 81 209 Tl 208 985351.750 + 127 82 209 Pb 208 981089.898 + 126 83 209 Bi 208 980398.519 + 125 84 209 Po 208 982430.276 + 124 85 209 At 208 986169.944 + 123 86 209 Rn 208 990401.388 + 122 87 209 Fr 208 995953.197 + 121 88 209 Ra 209 001994.879 + 120 89 209 Ac 209 009494.220 + 129 81 210 Tl 209 990072.970 + 128 82 210 Pb 209 984188.301 + 127 83 210 Bi 209 984120.156 + 126 84 210 Po 209 982873.601 + 125 85 210 At 209 987147.338 + 124 86 210 Rn 209 989688.854 + 123 87 210 Fr 209 996421.657 + 122 88 210 Ra 210 000475.356 + 121 89 210 Ac 210 009436.130 + 120 90 210 Th 210 015093.437 + 130 81 211 Tl 210 993475.000 + 129 82 211 Pb 210 988735.356 + 128 83 211 Bi 210 987268.698 + 127 84 211 Po 210 986653.085 + 126 85 211 At 210 987496.147 + 125 86 211 Rn 210 990600.686 + 124 87 211 Fr 210 995555.259 + 123 88 211 Ra 211 000893.213 + 122 89 211 Ac 211 007731.894 + 121 90 211 Th 211 014933.183 + 130 82 212 Pb 211 991895.975 + 129 83 212 Bi 211 991285.016 + 128 84 212 Po 211 988867.896 + 127 85 212 At 211 990737.223 + 126 86 212 Rn 211 990703.528 + 125 87 212 Fr 211 996225.453 + 124 88 212 Ra 211 999786.399 + 123 89 212 Ac 212 007812.501 + 122 90 212 Th 212 013001.487 + 121 91 212 Pa 212 023181.425 + 132 81 213 Tl 213 001915.000 + 131 82 213 Pb 212 996560.867 + 130 83 213 Bi 212 994383.608 + 129 84 213 Po 212 992857.083 + 128 85 213 At 212 992936.514 + 127 86 213 Rn 212 993885.064 + 126 87 213 Fr 212 996185.861 + 125 88 213 Ra 213 000370.970 + 124 89 213 Ac 213 006607.333 + 123 90 213 Th 213 013011.447 + 122 91 213 Pa 213 021108.697 + 132 82 214 Pb 213 999803.788 + 131 83 214 Bi 213 998710.938 + 130 84 214 Po 213 995201.208 + 129 85 214 At 213 996371.601 + 128 86 214 Rn 213 995362.566 + 127 87 214 Fr 213 998970.785 + 126 88 214 Ra 214 000099.554 + 125 89 214 Ac 214 006917.762 + 124 90 214 Th 214 011481.431 + 123 91 214 Pa 214 020918.561 + 133 82 215 Pb 215 004661.590 + 132 83 215 Bi 215 001749.149 + 131 84 215 Po 214 999418.454 + 130 85 215 At 214 998651.890 + 129 86 215 Rn 214 998745.498 + 128 87 215 Fr 215 000341.456 + 127 88 215 Ra 215 002720.080 + 126 89 215 Ac 215 006474.132 + 125 90 215 Th 215 011724.805 + 124 91 215 Pa 215 019177.728 + 123 92 215 U 215 026756.035 + 133 83 216 Bi 216 006305.989 + 132 84 216 Po 216 001913.506 + 131 85 216 At 216 002422.631 + 130 86 216 Rn 216 000271.464 + 129 87 216 Fr 216 003189.445 + 128 88 216 Ra 216 003533.117 + 127 89 216 Ac 216 008743.367 + 126 90 216 Th 216 011055.714 + 125 91 216 Pa 216 019108.242 + 124 92 216 U 216 024762.747 + 134 83 217 Bi 217 009372.000 + 133 84 217 Po 217 006316.216 + 132 85 217 At 217 004717.835 + 131 86 217 Rn 217 003927.562 + 130 87 217 Fr 217 004631.902 + 129 88 217 Ra 217 006322.806 + 128 89 217 Ac 217 009343.777 + 127 90 217 Th 217 013103.444 + 126 91 217 Pa 217 018323.692 + 135 83 218 Bi 218 014188.000 + 134 84 218 Po 218 008971.502 + 133 85 218 At 218 008693.735 + 132 86 218 Rn 218 005601.052 + 131 87 218 Fr 218 007578.274 + 130 88 218 Ra 218 007140.325 + 129 89 218 Ac 218 011641.093 + 128 90 218 Th 218 013276.242 + 127 91 218 Pa 218 020057.853 + 126 92 218 U 218 023504.829 + 135 84 219 Po 219 013614.000 + 134 85 219 At 219 011160.647 + 133 86 219 Rn 219 009478.753 + 132 87 219 Fr 219 009251.553 + 131 88 219 Ra 219 010085.176 + 130 89 219 Ac 219 012420.348 + 129 90 219 Th 219 015535.677 + 128 91 219 Pa 219 019903.650 + 127 92 219 U 219 024999.161 + 126 93 219 Np 219 031623.021 + 136 84 220 Po 220 016386.000 + 135 85 220 At 220 015433.000 + 134 86 220 Rn 220 011392.534 + 133 87 220 Fr 220 012326.778 + 132 88 220 Ra 220 011025.562 + 131 89 220 Ac 220 014754.450 + 130 90 220 Th 220 015747.926 + 137 84 221 Po 221 021228.000 + 136 85 221 At 221 018017.000 + 135 86 221 Rn 221 015535.709 + 134 87 221 Fr 221 014253.757 + 133 88 221 Ra 221 013917.224 + 132 89 221 Ac 221 015591.199 + 131 90 221 Th 221 018186.236 + 130 91 221 Pa 221 021874.846 + 129 92 221 U 221 026323.299 + 138 84 222 Po 222 024140.000 + 137 85 222 At 222 022494.000 + 136 86 222 Rn 222 017576.286 + 135 87 222 Fr 222 017582.620 + 134 88 222 Ra 222 015373.355 + 133 89 222 Ac 222 017843.887 + 132 90 222 Th 222 018468.300 + 130 92 222 U 222 026057.953 + 138 85 223 At 223 025151.000 + 137 86 223 Rn 223 021889.285 + 136 87 223 Fr 223 019734.313 + 135 88 223 Ra 223 018500.719 + 134 89 223 Ac 223 019136.872 + 133 90 223 Th 223 020811.546 + 132 91 223 Pa 223 023962.232 + 131 92 223 U 223 027737.168 + 139 85 224 At 224 029749.000 + 138 86 224 Rn 224 024095.804 + 137 87 224 Fr 224 023348.100 + 136 88 224 Ra 224 020210.453 + 135 89 224 Ac 224 021722.239 + 134 90 224 Th 224 021464.157 + 133 91 224 Pa 224 025617.210 + 132 92 224 U 224 027613.974 + 139 86 225 Rn 225 028485.574 + 138 87 225 Fr 225 025572.478 + 137 88 225 Ra 225 023610.574 + 136 89 225 Ac 225 023228.647 + 135 90 225 Th 225 023950.907 + 134 91 225 Pa 225 026130.844 + 133 92 225 U 225 029393.555 + 132 93 225 Np 225 033910.797 + 140 86 226 Rn 226 030861.382 + 139 87 226 Fr 226 029544.515 + 138 88 226 Ra 226 025408.455 + 137 89 226 Ac 226 026097.069 + 136 90 226 Th 226 024903.686 + 135 91 226 Pa 226 027947.872 + 134 92 226 U 226 029338.749 + 141 86 227 Rn 227 035304.396 + 140 87 227 Fr 227 031865.417 + 139 88 227 Ra 227 029176.474 + 138 89 227 Ac 227 027750.666 + 137 90 227 Th 227 027702.618 + 136 91 227 Pa 227 028804.477 + 135 92 227 U 227 031181.587 + 134 93 227 Np 227 034956.832 + 142 86 228 Rn 228 037835.418 + 141 87 228 Fr 228 035839.437 + 140 88 228 Ra 228 031068.657 + 139 89 228 Ac 228 031019.767 + 138 90 228 Th 228 028739.835 + 137 91 228 Pa 228 031050.748 + 136 92 228 U 228 031371.351 + 135 93 228 Np 228 036066.462 + 134 94 228 Pu 228 038741.387 + 143 86 229 Rn 229 042257.276 + 142 87 229 Fr 229 038291.455 + 141 88 229 Ra 229 034956.707 + 140 89 229 Ac 229 032947.000 + 139 90 229 Th 229 031761.431 + 138 91 229 Pa 229 032095.652 + 137 92 229 U 229 033505.909 + 136 93 229 Np 229 036263.974 + 135 94 229 Pu 229 040145.819 + 134 95 229 Am 229 045249.909 + 143 87 230 Fr 230 042390.791 + 142 88 230 Ra 230 037054.780 + 141 89 230 Ac 230 036327.000 + 140 90 230 Th 230 033132.358 + 139 91 230 Pa 230 034539.789 + 138 92 230 U 230 033940.102 + 137 93 230 Np 230 037827.716 + 136 94 230 Pu 230 039650.703 + 144 87 231 Fr 231 045175.357 + 143 88 231 Ra 231 041027.086 + 142 89 231 Ac 231 038393.000 + 141 90 231 Th 231 036302.853 + 140 91 231 Pa 231 035882.575 + 139 92 231 U 231 036292.252 + 138 93 231 Np 231 038244.490 + 137 94 231 Pu 231 041126.410 + 145 87 232 Fr 232 049461.224 + 144 88 232 Ra 232 043475.270 + 143 89 232 Ac 232 042034.000 + 142 90 232 Th 232 038053.689 + 141 91 232 Pa 232 038590.300 + 140 92 232 U 232 037154.860 + 138 94 232 Pu 232 041184.526 + 146 87 233 Fr 233 052517.838 + 145 88 233 Ra 233 047594.573 + 144 89 233 Ac 233 044346.000 + 143 90 233 Th 233 041580.208 + 142 91 233 Pa 233 040246.605 + 141 92 233 U 233 039634.367 + 140 93 233 Np 233 040739.489 + 139 94 233 Pu 233 042997.345 + 137 96 233 Cm 233 050772.206 + 146 88 234 Ra 234 050382.104 + 145 89 234 Ac 234 048139.000 + 144 90 234 Th 234 043599.860 + 143 91 234 Pa 234 043305.615 + 142 92 234 U 234 040950.370 + 141 93 234 Np 234 042893.320 + 140 94 234 Pu 234 043317.478 + 138 96 234 Cm 234 050160.959 + 146 89 235 Ac 235 050840.000 + 145 90 235 Th 235 047255.000 + 144 91 235 Pa 235 045399.000 + 143 92 235 U 235 043928.190 + 142 93 235 Np 235 044061.591 + 141 94 235 Pu 235 045284.682 + 140 95 235 Am 235 047907.371 + 147 89 236 Ac 236 054988.000 + 146 90 236 Th 236 049657.000 + 145 91 236 Pa 236 048668.000 + 144 92 236 U 236 045566.201 + 143 93 236 Np 236 046568.392 + 142 94 236 Pu 236 046056.756 + 140 96 236 Cm 236 051374.506 + 147 90 237 Th 237 053629.000 + 146 91 237 Pa 237 051023.000 + 145 92 237 U 237 048728.380 + 144 93 237 Np 237 048171.710 + 143 94 237 Pu 237 048407.957 + 141 96 237 Cm 237 052868.923 + 139 98 237 Cf 237 062199.993 + 147 91 238 Pa 238 054637.000 + 146 92 238 U 238 050786.996 + 145 93 238 Np 238 050944.671 + 144 94 238 Pu 238 049558.250 + 143 95 238 Am 238 051982.607 + 142 96 238 Cm 238 053081.595 + 147 92 239 U 239 054292.048 + 146 93 239 Np 239 052937.599 + 145 94 239 Pu 239 052161.669 + 144 95 239 Am 239 053022.803 + 143 96 239 Cm 239 054908.593 + 148 92 240 U 240 056592.425 + 147 93 240 Np 240 056163.830 + 146 94 240 Pu 240 053811.812 + 145 95 240 Am 240 055298.444 + 144 96 240 Cm 240 055528.329 + 142 98 240 Cf 240 062255.842 + 148 93 241 Np 241 058250.697 + 147 94 241 Pu 241 056849.722 + 146 95 241 Am 241 056827.413 + 145 96 241 Cm 241 057651.288 + 149 93 242 Np 242 061639.615 + 148 94 242 Pu 242 058741.045 + 147 95 242 Am 242 059547.428 + 146 96 242 Cm 242 058834.263 + 144 98 242 Cf 242 063754.533 + 149 94 243 Pu 243 062002.119 + 148 95 243 Am 243 061379.940 + 147 96 243 Cm 243 061387.403 + 146 97 243 Bk 243 063005.980 + 150 94 244 Pu 244 064204.415 + 149 95 244 Am 244 064282.964 + 148 96 244 Cm 244 062750.694 + 147 97 244 Bk 244 065179.039 + 146 98 244 Cf 244 065999.543 + 151 94 245 Pu 245 067824.568 + 150 95 245 Am 245 066452.890 + 149 96 245 Cm 245 065491.113 + 148 97 245 Bk 245 066359.885 + 147 98 245 Cf 245 068046.825 + 152 94 246 Pu 246 070204.209 + 150 96 246 Cm 246 067222.082 + 149 97 246 Bk 246 068671.367 + 148 98 246 Cf 246 068803.762 + 146 100 246 Fm 246 075350.815 + 151 96 247 Cm 247 070352.726 + 150 97 247 Bk 247 070305.940 + 149 98 247 Cf 247 070965.462 + 148 99 247 Es 247 073621.932 + 152 96 248 Cm 248 072349.101 + 150 98 248 Cf 248 072182.978 + 148 100 248 Fm 248 077185.528 + 153 96 249 Cm 249 075954.006 + 152 97 249 Bk 249 074983.182 + 151 98 249 Cf 249 074850.491 + 149 100 249 Fm 249 078926.098 + 154 96 250 Cm 250 078357.556 + 153 97 250 Bk 250 078315.027 + 152 98 250 Cf 250 076404.561 + 150 100 250 Fm 250 079519.828 + 155 96 251 Cm 251 082285.036 + 154 97 251 Bk 251 080760.603 + 153 98 251 Cf 251 079587.219 + 152 99 251 Es 251 079992.224 + 151 100 251 Fm 251 081539.889 + 150 101 251 Md 251 084774.291 + 154 98 252 Cf 252 081626.523 + 153 99 252 Es 252 082979.189 + 152 100 252 Fm 252 082464.972 + 150 102 252 No 252 088966.141 + 155 98 253 Cf 253 085133.738 + 154 99 253 Es 253 084821.305 + 153 100 253 Fm 253 085181.160 + 151 102 253 No 253 090562.831 + 156 98 254 Cf 254 087323.590 + 155 99 254 Es 254 088020.527 + 154 100 254 Fm 254 086852.726 + 152 102 254 No 254 090954.259 + 156 99 255 Es 255 090273.553 + 155 100 255 Fm 255 089962.633 + 154 101 255 Md 255 091082.787 + 153 102 255 No 255 093191.404 + 152 103 255 Lr 255 096562.404 + 156 100 256 Fm 256 091773.878 + 154 102 256 No 256 094280.866 + 153 103 256 Lr 256 098494.029 + 152 104 256 Rf 256 101151.535 + 157 100 257 Fm 257 095105.317 + 156 101 257 Md 257 095537.977 + 155 102 257 No 257 096884.419 + 153 104 257 Rf 257 102916.848 + 157 101 258 Md 258 098429.825 + 154 104 258 Rf 258 103426.362 + 157 102 259 No 259 100997.503 + 154 105 259 Db 259 109491.865 + 154 106 260 Sg 260 114383.508 + 157 104 261 Rf 261 108769.990 + 155 106 261 Sg 261 115948.188 + 156 106 262 Sg 262 116335.446 + 156 108 264 Hs 264 128356.405 + 157 108 265 Hs 265 129791.799 + 158 108 266 Hs 266 130045.252 + 159 110 269 Ds 269 144751.021 + 160 110 270 Ds 270 144583.090 + diff --git a/include/DataStructs.h b/include/DataStructs.h new file mode 100644 index 0000000..a578791 --- /dev/null +++ b/include/DataStructs.h @@ -0,0 +1,26 @@ +#ifndef DATA_STRUCTS_H +#define DATA_STRUCTS_H + +#include + +struct SabrePair +{ + int ringch, wedgech; //global + int detID; + int local_ring, local_wedge; //local (obv.) + double ringE, wedgeE; + double ringT, wedgeT; +}; + +struct CalEvent +{ + double xavg = -1e6, x1 = -1e6, x2 = -1e6; + double theta = -1, cathodeE = -1, scintE = -1; + double anodeFrontE = -1, anodeBackE = -1; + double scintT = -1; + std::vector sabre; +}; + +bool EnforceDictionaryLinked(); + +#endif \ No newline at end of file diff --git a/input.txt b/input.txt new file mode 100644 index 0000000..6efd7fc --- /dev/null +++ b/input.txt @@ -0,0 +1,23 @@ +begin_data + input /data1/gwm17/10B3He/May2022/calibrated/runs_53_89.root + output /data1/gwm17/10B3He/May2022/histograms/calHistograms_53_89_newRecon.root +end_data +begin_reconstructor + begin_focalplane + B 8.759 + theta 15.0 + begin_fpcal + 78.5352 + 0.038 + end_fpcal + end_focalplane + begin_target + thickness 74.0 + begin_elements + 5 1 + end_elements + end_target +end_reconstructor +begin_cuts + ede_alphas /data1/gwm17/10B3He/May2022/cuts/edeAlphas.root scintE cathodeE +end_cuts \ No newline at end of file diff --git a/objs/Release/CalDict/DataStructs.d b/objs/Release/CalDict/DataStructs.d new file mode 100644 index 0000000..78b3383 --- /dev/null +++ b/objs/Release/CalDict/DataStructs.d @@ -0,0 +1,4 @@ +objs/Release/CalDict/DataStructs.o: src/CalDict/DataStructs.cpp \ + src/CalDict/DataStructs.h + +src/CalDict/DataStructs.h: diff --git a/premake5.lua b/premake5.lua new file mode 100644 index 0000000..a0ce4be --- /dev/null +++ b/premake5.lua @@ -0,0 +1,114 @@ +workspace "SabreRecon" + architecture "x64" + configurations { + "Release", + "Debug" + } + +ROOTIncludeDir = "/usr/include/root/" +ROOTLibDir = "/usr/lib64/root/" + +project "CalDict" + kind "SharedLib" + language "C++" + cppdialect "c++11" + targetdir "./lib/" + objdir "./objs/" + + prebuildcommands { + "rootcint -f src/CalDict/cal_dict.cxx src/CalDict/DataStructs.h src/CalDict/LinkDef_CalDict.h", + "{COPY} src/CalDict/*.pcm ./lib/" + } + + postbuildcommands { + "{COPY} src/CalDict/DataStructs.h ./include/" + } + + files { + "src/CalDict/DataStructs.h", + "src/CalDict/*.cpp", + "src/CalDict/*.cxx" + } + + includedirs { + "./", + "src/CalDict", + } + + sysincludedirs { + ROOTIncludeDir + } + + libdirs { + ROOTLibDir + } + + links { + "Gui", "Core", "Imt", "RIO", "Net", "Hist", + "Graf", "Graf3d", "Gpad", "ROOTDataFrame", "ROOTVecOps", + "Tree", "TreePlayer", "Rint", "Postscript", "Matrix", + "Physics", "MathCore", "Thread", "MultiProc", "m", "dl" + } + + filter "system:macosx or linux" + linkoptions { + "-pthread", + "-rdynamic" + } + + filter "configurations:Debug" + symbols "On" + + filter "configurations:Release" + optimize "On" + +project "SabreRecon" + kind "ConsoleApp" + language "C++" + cppdialect "c++11" + targetdir "./bin/" + objdir "./objs/" + + files { + "src/*.cpp", + "src/*.h", + "src/Detectors/*.cpp", + "src/Detectors/*.h", + "src/EnergyLoss/*.cpp", + "src/EnergyLoss/*.h", + "src/CalDict/*.h" + } + + includedirs { + "src/", + "src/CalDict", + "src/Detectors", + "src/EnergyLoss" + } + + sysincludedirs { + ROOTIncludeDir + } + + libdirs { + ROOTLibDir, + } + + links { + "CalDict", "Gui", "Core", "Imt", "RIO", "Net", "Hist", + "Graf", "Graf3d", "Gpad", "ROOTDataFrame", "ROOTVecOps", + "Tree", "TreePlayer", "Rint", "Postscript", "Matrix", + "Physics", "MathCore", "Thread", "MultiProc", "m", "dl" + } + + filter "system:macosx or linux" + linkoptions { + "-pthread", + "-rdynamic" + } + + filter "configurations:Debug" + symbols "On" + + filter "configurations:Release" + optimize "On" \ No newline at end of file diff --git a/src/CalDict/DataStructs.cpp b/src/CalDict/DataStructs.cpp new file mode 100644 index 0000000..116c55a --- /dev/null +++ b/src/CalDict/DataStructs.cpp @@ -0,0 +1,3 @@ +#include "DataStructs.h" + +bool EnforceDictionaryLinked() { return true; } \ No newline at end of file diff --git a/src/CalDict/DataStructs.h b/src/CalDict/DataStructs.h new file mode 100644 index 0000000..a578791 --- /dev/null +++ b/src/CalDict/DataStructs.h @@ -0,0 +1,26 @@ +#ifndef DATA_STRUCTS_H +#define DATA_STRUCTS_H + +#include + +struct SabrePair +{ + int ringch, wedgech; //global + int detID; + int local_ring, local_wedge; //local (obv.) + double ringE, wedgeE; + double ringT, wedgeT; +}; + +struct CalEvent +{ + double xavg = -1e6, x1 = -1e6, x2 = -1e6; + double theta = -1, cathodeE = -1, scintE = -1; + double anodeFrontE = -1, anodeBackE = -1; + double scintT = -1; + std::vector sabre; +}; + +bool EnforceDictionaryLinked(); + +#endif \ No newline at end of file diff --git a/src/CalDict/LinkDef_CalDict.h b/src/CalDict/LinkDef_CalDict.h new file mode 100644 index 0000000..b71178e --- /dev/null +++ b/src/CalDict/LinkDef_CalDict.h @@ -0,0 +1,6 @@ +#ifdef __ROOTCLING__ + +#pragma link C++ struct SabrePair+; +#pragma link C++ struct CalEvent+; + +#endif \ No newline at end of file diff --git a/src/CutHandler.cpp b/src/CutHandler.cpp new file mode 100644 index 0000000..5f66cec --- /dev/null +++ b/src/CutHandler.cpp @@ -0,0 +1,103 @@ +#include "CutHandler.h" +#include + +namespace SabreRecon { + + CutHandler::CutHandler() : + m_eventPtr(nullptr), m_isValid(false), m_eventInit(false), m_cutInit(false) + { + } + + CutHandler::CutHandler(const std::vector& cuts, CalEvent* event) : + m_eventPtr(nullptr), m_isValid(false), m_eventInit(false), m_cutInit(false) + { + InitCuts(cuts); + InitEvent(event); + } + + CutHandler::~CutHandler() + { + for(auto& cut : m_cuts) + { + if(cut.file_ptr->IsOpen()) + cut.file_ptr->Close(); + } + } + + void CutHandler::InitCuts(const std::vector& cuts) + { + m_cuts = cuts; + + for(auto& cut : m_cuts) + { + cut.file_ptr = TFile::Open(cut.filename.c_str(), "READ"); + if(!cut.file_ptr->IsOpen()) + { + std::cerr<<"Unable to open cutfile "<Get("CUTG"); + if(cut.cut_ptr == nullptr) + { + std::cerr<<"Unable to get CUTG from cutfile "<SetName(cut.cutname.c_str()); + } + + m_cutInit = true; + if(m_eventInit) + m_isValid = true; + } + + void CutHandler::InitEvent(CalEvent* event) + { + m_eventPtr = event; + + if(m_eventPtr == nullptr) + { + std::cerr<<"Invalid event pointer given to CutHandler::InitEvent!"<xavg; + m_varMap["x1"] = &m_eventPtr->x1; + m_varMap["x2"] = &m_eventPtr->x2; + m_varMap["scintE"] = &m_eventPtr->scintE; + m_varMap["cathodeE"] = &m_eventPtr->cathodeE; + m_varMap["anodeFrontE"] = &m_eventPtr->anodeFrontE; + m_varMap["anodeBackE"] = &m_eventPtr->anodeBackE; + m_varMap["theta"] = &m_eventPtr->theta; + m_varMap["scintT"] = &m_eventPtr->scintT; + + m_eventInit = true; + if(m_cutInit) + m_isValid = true; + } + + bool CutHandler::IsInside() + { + for(auto& cut : m_cuts) + { + auto iterX = m_varMap.find(cut.xparam); + auto iterY = m_varMap.find(cut.yparam); + if(iterX == m_varMap.end() || iterY == m_varMap.end()) + { + std::cerr<<"Bad variables at CutHandler::IsInside for cut "<IsInside(*(iterX->second), *(iterY->second))) + return false; + } + + return true; + } +} \ No newline at end of file diff --git a/src/CutHandler.h b/src/CutHandler.h new file mode 100644 index 0000000..fa26097 --- /dev/null +++ b/src/CutHandler.h @@ -0,0 +1,54 @@ +#ifndef CUT_HANDLER_H +#define CUT_HANDLER_H + +#include +#include +#include +#include "TFile.h" +#include "TCutG.h" +#include "CalDict/DataStructs.h" + +namespace SabreRecon { + + struct ReconCut + { + ReconCut() {} + ReconCut(const std::string& file, const std::string& cut, const std::string& x, const std::string& y) : + xparam(x), yparam(y), filename(file), cutname(cut) + { + } + + TFile* file_ptr = nullptr; + TCutG* cut_ptr = nullptr; + std::string xparam = ""; + std::string yparam = ""; + std::string filename = ""; + std::string cutname = ""; + }; + + class CutHandler + { + public: + CutHandler(); + CutHandler(const std::vector& cuts, CalEvent* event); + ~CutHandler(); + + void InitCuts(const std::vector& cuts); + void InitEvent(CalEvent* event); + inline const bool IsValid() const { return m_isValid; } + + bool IsInside(); + + private: + std::vector m_cuts; + CalEvent* m_eventPtr; + bool m_isValid; + + bool m_eventInit; + bool m_cutInit; + + std::unordered_map m_varMap; + }; +} + +#endif \ No newline at end of file diff --git a/src/Detectors/FocalPlaneDetector.cpp b/src/Detectors/FocalPlaneDetector.cpp new file mode 100644 index 0000000..38d1882 --- /dev/null +++ b/src/Detectors/FocalPlaneDetector.cpp @@ -0,0 +1,30 @@ +#include "FocalPlaneDetector.h" +#include + +namespace SabreRecon { + + FocalPlaneDetector::FocalPlaneDetector() {} + + FocalPlaneDetector::FocalPlaneDetector(const Parameters& params) : + m_params(params) + { + } + + FocalPlaneDetector::~FocalPlaneDetector() {} + + double FocalPlaneDetector::GetRho(double xavg) + { + double rho = 0.0; + for(size_t i=0; i< m_params.calParams.size(); i++) + { + rho += m_params.calParams[i]*std::pow(xavg, i); + } + return rho; + } + + double FocalPlaneDetector::GetP(double xavg, int Z) + { + double rho = GetRho(xavg); + return Z*rho*m_params.B*s_qbrho2p; + } +} \ No newline at end of file diff --git a/src/Detectors/FocalPlaneDetector.h b/src/Detectors/FocalPlaneDetector.h new file mode 100644 index 0000000..5afac52 --- /dev/null +++ b/src/Detectors/FocalPlaneDetector.h @@ -0,0 +1,38 @@ +#ifndef FOCAL_PLANE_DETECTOR_H +#define FOCAL_PLANE_DETECTOR_H + +#include +#include + +namespace SabreRecon { + + class FocalPlaneDetector + { + public: + struct Parameters + { + double B; + double angle; + std::vector calParams; + }; + + FocalPlaneDetector(); + FocalPlaneDetector(const Parameters& params); + ~FocalPlaneDetector(); + + void Init(const Parameters& params) { m_params = params; } + double GetRho(double xavg); + double GetP(double xavg, int Z); + inline double GetFPTheta() const { return m_params.angle*s_deg2rad; } + + private: + Parameters m_params; + + //Constants + static constexpr double s_lightspeed = 299792458.0; //1/s + static constexpr double s_qbrho2p = 1.0e-9 * s_lightspeed; //MeV/(cm*kG) + static constexpr double s_deg2rad = M_PI/180.0; //rad/deg + }; +} + +#endif \ No newline at end of file diff --git a/src/Detectors/SabreDetector.cpp b/src/Detectors/SabreDetector.cpp new file mode 100644 index 0000000..918bbf6 --- /dev/null +++ b/src/Detectors/SabreDetector.cpp @@ -0,0 +1,345 @@ +/* + + Class which represents a single MMM detector in the SABRE array at FSU. Origial code by KGH, re-written by + GWM. + + Distances in meters, angles in radians. + + The channel arrays have four points, one for each corner. The corners are + as follows, as if looking BACK along beam (i.e. from the target's pov): + + 0---------------------1 + | | + | | x + | | <----- + | | | + | | | + 3---------------------2 y + (z is hence positive along beam direction) + + The channel numbers, also as looking back from target pov, are: + + >> rings are 0 -- 15 from inner to outer: + + 15 ------------------- + 14 ------------------- + 13 ------------------- + . + . + . + 2 ------------------- + 1 ------------------- + 0 ------------------- + + >> wedges are 0 -- 7 moving counterclockwise: + + 7 6 ... 1 0 + | | | | | | + | | | | | | + | | | | | | + | | | | | | + | | | | | | + | | | | | | + + + >> Note that the detector starts centered on the x-axis (central phi = 0) untilted, and then is rotated to wherever the frick + it is supposed to go; phi = 90 is centered on y axis, pointing down towards the bottom of the scattering chamber + + -- gwm, Dec 2020; based on the og code from kgh + +*/ + + +#include "SabreDetector.h" +#include + +namespace SabreRecon { + + void PrintMatrix(TRotation& mat) + { + std::cout<<"XX: "< SabreDetector::GetTrajectoryRingWedge(double theta, double phi) + { + phi = phi < 0 ? 2.0*M_PI + phi : phi; + if(m_translation.X() != 0.0 || m_translation.Y() != 0.0) + return std::make_pair(-1, -1); + + //Calculate the *potential* phi in the flat detector + double phi_numerator = std::cos(m_tilt)*(std::sin(phi)*std::cos(m_phiCentral) - std::sin(m_phiCentral)*std::cos(phi)); + double phi_denominator = std::cos(m_phiCentral)*std::cos(phi) + std::sin(m_phiCentral)*std::sin(phi); + double phi_flat = std::atan2(phi_numerator, phi_denominator); + if(phi_flat < 0) phi_flat += M_PI*2.0; + + //Calculate the *potential* R in the flat detector + double r_numerator = m_translation.Z()*std::cos(phi)*std::sin(theta); + double r_denominator = std::cos(phi_flat)*std::cos(m_phiCentral)*std::cos(m_tilt)*std::cos(theta) - std::sin(phi_flat)*std::sin(m_phiCentral)*std::cos(theta) - std::cos(phi_flat)*std::sin(m_tilt)*std::cos(phi)*std::sin(theta); + double r_flat = r_numerator/r_denominator; + + //Calculate the distance from the origin to the hit on the detector + //double R_to_detector = (r_flat*std::cos(phi_flat)*std::sin(m_tilt) + m_translation.GetZ())/std::cos(theta); + + //Check to see if our flat coords fall inside the flat detector + if(IsInside(r_flat, phi_flat)) + { + int ringch, wedgech; + if(phi_flat > M_PI) phi_flat -= 2.0*M_PI; //Need phi in terms of [-deltaPhi_flat/2, deltaPhi_flat/2] + for(int i=0; i> rings are 0 -- 15 from inner to outer: + + 15 ------------------- + 14 ------------------- + 13 ------------------- + . + . + . + 2 ------------------- + 1 ------------------- + 0 ------------------- + + >> wedges are 0 -- 7 moving counterclockwise: + + 7 6 ... 1 0 + | | | | | | + | | | | | | + | | | | | | + | | | | | | + | | | | | | + | | | | | | + + + >> Note that the detector starts centered on the x-axis (central phi = 0) untilted, and then is rotated to wherever the frick + it is supposed to go; phi = 90 is centered on y axis, pointing down towards the bottom of the scattering chamber + + -- GWM, Dec 2020; based on the og code from kgh + +*/ + +#ifndef SABREDETECTOR_H +#define SABREDETECTOR_H + +#include +#include + +#include "TVector3.h" +#include "TRotation.h" + +#include "RandomGenerator.h" + +namespace SabreRecon { + + class SabreDetector + { + public: + struct Parameters + { + Parameters(double phi, double tilt, double z, bool draw, int id) : + phiCenter(phi*M_PI/180.0), tilt(tilt*M_PI/180.0), zOffset(z), drawing(draw), detID(id) + { + } + double phiCenter=0.0; + double tilt=0.0; + double zOffset=0.0; + bool drawing=false; + int detID=-1; + }; + + SabreDetector(); + SabreDetector(const Parameters& params); + ~SabreDetector(); + + /*Return coordinates of the corners of each ring/wedge in SABRE*/ + inline TVector3 GetRingFlatCoords(int ch, int corner) { return m_drawingFlag && CheckRingLocation(ch, corner) ? m_ringCoords_flat[ch][corner] : TVector3(); } + inline TVector3 GetWedgeFlatCoords(int ch, int corner) { return m_drawingFlag && CheckWedgeLocation(ch, corner) ? m_wedgeCoords_flat[ch][corner] : TVector3(); } + inline TVector3 GetRingTiltCoords(int ch, int corner) { return m_drawingFlag && CheckRingLocation(ch, corner) ? m_ringCoords_tilt[ch][corner] : TVector3(); } + inline TVector3 GetWedgeTiltCoords(int ch, int corner) { return m_drawingFlag && CheckWedgeLocation(ch, corner) ? m_wedgeCoords_tilt[ch][corner] : TVector3(); } + + TVector3 GetTrajectoryCoordinates(double theta, double phi); + std::pair GetTrajectoryRingWedge(double theta, double phi); + TVector3 GetHitCoordinates(int ringch, int wedgech); + + inline const int GetDetectorID() const { return m_detectorID; } + + /*Basic getters*/ + inline TVector3 GetNormTilted() { return TransformToTiltedFrame(m_norm_flat); } + + + private: + + /*Class constants*/ + static constexpr int s_nRings = 16; + static constexpr int s_nWedges = 8; + static constexpr double s_deg2rad = M_PI/180.0; + static constexpr double s_Rinner = 0.0326; + static constexpr double s_Router = 0.1351; + static constexpr double s_deltaPhi_flat = 54.4 * M_PI/180.0; + /*These are implicitly the width of the spacing between detector active strips*/ + static constexpr double position_tol = 0.0001; //0.1 mm position tolerance + static constexpr double angular_tol = 0.1*M_PI/180.0; // 0.1 degree angular tolerance + + void CalculateCorners(); + + /*Performs the transformation to the tilted,rotated,translated frame of the SABRE detector*/ + inline TVector3 TransformToTiltedFrame(TVector3& vector) { return (vector.Transform(m_YRot)).Transform(m_ZRot) + m_translation; } + + /*Determine if a given channel/corner combo is valid*/ + inline bool CheckRingChannel(int ch) { return (ch=0) ? true : false; } + inline bool CheckWedgeChannel(int ch) { return (ch=0) ? true : false; } + inline bool CheckCorner(int corner) { return (corner < 4 && corner >=0) ? true : false; } + inline bool CheckRingLocation(int ch, int corner) { return CheckRingChannel(ch) && CheckCorner(corner); } + inline bool CheckWedgeLocation(int ch, int corner) { return CheckWedgeChannel(ch) && CheckCorner(corner); } + + /* + For all of the calculations, need a limit precision to determine if values are actually equal or not + Here the approx. size of the strip spacing is used as the precision. + */ + inline bool CheckPositionEqual(double val1,double val2) { return fabs(val1-val2) > position_tol ? false : true; } + inline bool CheckAngleEqual(double val1,double val2) { return fabs(val1-val2) > angular_tol ? false : true; } + + /*Determine if a hit is within the bulk detector*/ + inline bool IsInside(double r, double phi) + { + double phi_1 = s_deltaPhi_flat/2.0; + double phi_2 = M_PI*2.0 - s_deltaPhi_flat/2.0; + return (((r > s_Rinner && r < s_Router) || CheckPositionEqual(r, s_Rinner) || CheckPositionEqual(r, s_Router)) + && (phi > phi_2 || phi < phi_1 || CheckAngleEqual(phi, phi_1) || CheckAngleEqual(phi, phi_2))); + } + + /* + For a given radius/phi are you inside of a given ring/wedge channel, + or are you on the spacing between these channels + */ + inline bool IsRing(double r, int ringch) + { + double ringtop = s_Rinner + m_deltaR_flat_ring*(ringch + 1); + double ringbottom = s_Rinner + m_deltaR_flat_ring*(ringch); + return (r>ringbottom && rwedgebottom && phi m_channelSmear; + + std::vector> m_ringCoords_flat, m_wedgeCoords_flat; + std::vector> m_ringCoords_tilt, m_wedgeCoords_tilt; + + }; +} + +#endif diff --git a/src/EnergyLoss/EnergyLoss.cpp b/src/EnergyLoss/EnergyLoss.cpp new file mode 100644 index 0000000..7ccc155 --- /dev/null +++ b/src/EnergyLoss/EnergyLoss.cpp @@ -0,0 +1,222 @@ +#include "EnergyLoss.h" +#include "EnergyLossConstants.h" +#include +#include + +namespace SabreRecon { + + namespace EnergyLoss { + + double GetEnergyLoss(const Parameters& params) + { + + if(params.thickness == 0.0 || params.energy == 0.0 || params.ZP == 0) + return 0.0; + + + double energyFinal = params.energy; + double xTraversed = 0; + double xStep = 0.25*params.thickness; //initial step in x + double energyStep = GetTotalStoppingPower(params, energyFinal)*xStep/1000.0; //initial step in e + double energyThreshold = 0.05*params.energy; + + int depth=0; + + while(true) + { + //If intial guess of step size is too large, shrink until in range + if(energyStep/energyFinal > maxFracStep && depth < maxDepth) + { + depth++; + xStep *= 0.5; + energyStep = GetTotalStoppingPower(params, energyFinal)*xStep/1000.0; + } + else if((xStep + xTraversed) >= params.thickness) + { //last chunk + xStep = params.thickness - xTraversed; //get valid portion of last chunk + energyFinal -= GetTotalStoppingPower(params, energyFinal)*xStep/1000.0; + if(energyFinal <= energyThreshold) + return params.energy; + else + break; + } + else if(depth == maxDepth) + { + return params.energy; + } + else + { + xTraversed += xStep; + energyStep = GetTotalStoppingPower(params, energyFinal)*xStep/1000.0; + energyFinal -= energyStep; + if(energyFinal <= energyThreshold) + return params.energy; + } + } + return params.energy - energyFinal; + } + + double GetReverseEnergyLoss(const Parameters& params) + { + double energyInitial = params.energy; + double xTraversed = 0.0; + double xStep = 0.25*params.thickness; //initial step in x + double energyStep = GetTotalStoppingPower(params, energyInitial)*xStep/1000.0; //initial step in E + + while(true) + { + if(energyStep/energyInitial > maxFracStep) + { + xStep *= 0.5; + energyStep = GetTotalStoppingPower(params, energyInitial)*xStep/1000.0; + } + else if (xTraversed+xStep > params.thickness) + { + xStep = params.thickness - xTraversed; + energyInitial += GetTotalStoppingPower(params, energyInitial)*xStep/1000.0; + break; + } + else + { + xTraversed += xStep; + energyStep = GetTotalStoppingPower(params, energyInitial)*xStep/1000.0; + energyInitial += energyStep; + } + } + + return energyInitial-params.energy; + } + + /*Wrapper function for aquiring total stopping (elec + nuc)*/ + double GetTotalStoppingPower(const Parameters& params, double current_energy) + { + if(params.ZP == 0) + return GetNuclearStoppingPower(params, current_energy); + + return GetElectronicStoppingPower(params, current_energy)+GetNuclearStoppingPower(params, current_energy); + } + + /*Charge rel to H*/ + double GetElectronicStoppingPower(const Parameters& params, double current_energy) + { + //Wants in units of keV + current_energy *= 1000.0; + double ePerU = current_energy/params.massP; + std::vector values; + if(ePerU > maxHEperU) + { + return 0.0; + } + else if (ePerU > 1000.0) + { + for(auto& z: params.ZT) + values.push_back(Hydrogen_dEdx_High(ePerU, params.massP, current_energy, z)); + } + else if (ePerU > 10.0) + { + for(auto& z: params.ZT) + values.push_back(Hydrogen_dEdx_Med(ePerU, z)); + } + else if (ePerU > 0.0) + { + for(auto& z: params.ZT) + values.push_back(Hydrogen_dEdx_Low(ePerU, z)); + } + else + { + return 0.0; + } + + if(values.size() == 0) + return 0.0; //bad + + if(params.ZP > 1) + { //not hydrogen, need to account for effective charge + for(unsigned int i=0; i + +namespace SabreRecon { + + namespace EnergyLoss { + + struct Parameters + { + int ZP; + double massP; + std::vector ZT; + std::vector composition; //percent composition + double energy; + double thickness; + }; + + //Main integration functions + double GetEnergyLoss(const Parameters& params); + double GetReverseEnergyLoss(const Parameters& params); + + //Helpers + double GetTotalStoppingPower(const Parameters& params, double current_energy); + double GetElectronicStoppingPower(const Parameters& params, double current_energy); + double GetNuclearStoppingPower(const Parameters& params, double current_energy); + double Hydrogen_dEdx_Low(double ePerU, int z); + double Hydrogen_dEdx_Med(double ePerU, int z); + double Hydrogen_dEdx_High(double ePerU, double massP, double energy, int z); + double CalculateEffectiveChargeRatio(double ePerU, int zp, int z); + + } +} + +#endif diff --git a/src/EnergyLoss/EnergyLossConstants.h b/src/EnergyLoss/EnergyLossConstants.h new file mode 100644 index 0000000..fcf1d78 --- /dev/null +++ b/src/EnergyLoss/EnergyLossConstants.h @@ -0,0 +1,147 @@ +#ifndef ELOSS_TABLES_H +#define ELOSS_TABLES_H + +namespace SabreRecon { + + namespace EnergyLoss { + + static constexpr double maxFracStep = 0.001; + static constexpr int maxDepth = 50; + static constexpr double maxHEperU = 100000.0; + static constexpr double avogadro = 0.60221367; //N_A times 10^(-24) for converting + static constexpr double mev2u = 1.0/931.4940954; + static constexpr double HMass = 938.27231; //MeV, for beta calc + + #define MAX_Z 93 //Maximum number of elements for which we have hydrogen coefficients + + /*Atomic Masses for elements H through U. Taken from ELAST data*/ + static constexpr double naturalMassList[MAX_Z] = + { + 0, + 1.00797, 4.0026, 6.939, 9.0122, 10.818, + 12.01115, 14.0067, 15.9994, 18.99984, 20.183, + 22.9898, 24.312, 26.9815, 28.086, 30.9738, + 32.064, 35.453, 39.948, 39.102, 40.08, + 44.956, 47.90, 50.942, 51.996, 54.938, + 55.847, 58.933, 58.71, 63.54, 65.37, + 69.72, 72.59, 74.922, 78.96, 79.909, + 83.80, 85.47, 87.62, 88.909, 91.22, + 92.906, 95.94, 98., 101.07, 102.905, + 106.4, 107.87, 112.4, 114.82, 118.69, + 121.75, 127.60, 126.904, 131.3, 132.905, + 137.34, 138.91, 140.12, 140.907, 144.24, + 146., 150.35, 151.96, 157.25, 158.924, + 162.50, 164.93, 167.26, 168.934, 173.04, + 174.97, 178.49, 180.948, 183.85, 186.2, + 190.2, 192.2, 195.09, 196.967, 200.59, + 204.37, 207.19, 208.98, 209., 210., + 222., 223., 226., 227., 232.038, + 231., 238.03 + }; + + /*Stopping power coefficients for hydrogen into Z + *Taken from Ziegler, Hydrogen Stopping Powers and Ranges in All Elements, Volume 3 of + *The Stopping and Ranges of Ions in Matter, 1977, Pergamon Press Inc. + *Expanded table for method given in O.G. Spanc + *Note: some elements represent extrapolations when there was no data to fit + */ + static constexpr double hydrogenCoefficients[MAX_Z][12] = + { + /*Blank*/{0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.,0.}, + /*H*/{1.262,1.44,242.6,1.2E4,0.1159,0.0005099,5.436E4,-5.052,2.049,-0.3044,0.01966,-0.0004659}, + /*He*/{1.229,1.397,484.5,5873,0.05225,0.00102,2.451E4,-2.158,0.8278,-0.1172,0.007259,-0.000166}, + /*Li*/{1.411,1.6,725.6,3013,0.04578,0.00153,2.147E4,-0.5831,0.562,-0.1183,0.009298,-0.0002498}, + /*Be*/{2.248,2.59,966,153.8,0.03475,0.002039,1.63E4,0.2779,0.1745,-0.05684,0.005155,-0.0001488}, + /*B*/{2.474,2.815,1206,1060,0.02855,0.002549,1.345E4,-2.445,1.283,-0.2205,0.0156,-0.000393}, + /*C*/{2.631,2.989,1445,957.2,0.02819,0.003059,1.322E4,-4.38,2.044,-0.3283,0.02221,-0.0005417}, + /*N*/{2.954,3.35,1683,1900,0.02513,0.003569,1.179E4,-5.054,2.325,-0.3713,0.02506,-0.0006109}, + /*O*/{2.652,3,1920,2000,0.0223,0.004079,1.046E4,-6.734,3.019,-0.4748,0.03171,-0.0007669}, + /*F*/{2.085,2.352,2157,2634,0.01816,0.004589,8517,-5.571,2.449,-0.3781,0.02483,-0.0005919}, + /*Ne*/{1.951,2.199,2393,2699,0.01568,0.005099,7353,-4.408,1.879,-0.2814,0.01796,-0.0004168}, + /*Na*/{2.542,2.869,2628,1854,0.01472,0.005609,6905,-4.959,2.073,-0.3054,0.01921,-0.0004403}, + /*Mg*/{3.792,4.293,2862,1009,0.01397,0.006118,6551,-5.51,2.266,-0.3295,0.02047,-0.0004637}, + /*Al*/{4.154,4.739,2766,164.5,0.02023,0.006628,6309,-6.061,2.46,-0.3535,0.02173,-0.0004871}, + /*Si*/{4.15,4.7,3329,550,0.01321,0.007138,6194,-6.294,2.538,-0.3628,0.0222,-0.0004956}, + /*P*/{3.232,3.647,3561,1560,0.01267,0.007648,5942,-6.527,2.616,-0.3721,0.02267,-0.000504}, + /*S*/{3.447,3.891,3792,1219,0.01211,0.008158,5678,-6.761,2.694,-0.3814,0.02314,-0.0005125}, + /*Cl*/{5.047,5.714,4023,878.6,0.01178,0.008668,5524,-6.994,2.773,-0.3907,0.02361,-0.0005209}, + /*Ar*/{5.731,6.5,4253,530,0.01123,0.009178,5268,-7.227,2.851,-0.4,0.02407,-0.0005294}, + /*K*/{5.151,5.833,4482,545.7,0.01129,0.009687,5295,-7.44,2.923,-0.4094,0.02462,-0.0005411}, + /*Ca*/{5.521,6.252,4710,553.3,0.01112,0.0102,5214,-7.653,2.995,-0.4187,0.02516,-0.0005529}, + /*Sc*/{5.201,5.884,4938,560.9,0.009995,0.01071,4688,-8.012,3.123,-0.435,0.02605,-0.0005707}, + /*Ti*/{4.862,5.496,5165,568.5,0.009474,0.01122,4443,-8.371,3.251,-0.4513,0.02694,-0.0005886}, + /*V*/{4.48,5.055,5391,952.3,0.009117,0.01173,4276,-8.731,3.379,-0.4676,0.02783,-0.0006064}, + /*Cr*/{3.983,4.489,5616,1336,0.008413,0.01224,3946,-9.09,3.507,-0.4838,0.02872,-0.0006243}, + /*Mn*/{3.469,3.907,5725,1461,0.008829,0.01275,3785,-9.449,3.635,-0.5001,0.02961,-0.0006421}, + /*Fe*/{3.519,3.963,6065,1243,0.007782,0.01326,3650,-9.809,3.763,-0.5164,0.0305,-0.00066}, + /*Co*/{3.14,3.535,6288,1372,0.007361,0.01377,3453,-10.17,3.891,-0.5327,0.03139,-0.0006779}, + /*Ni*/{3.553,4.004,6205,555.1,0.008763,0.01428,3297,-10.53,4.019,-0.549,0.03229,-0.0006957}, + /*Cu*/{3.696,4.175,4673,387.8,0.02188,0.01479,3174,-11.18,4.252,-0.5791,0.03399,-0.0007314}, + /*Zn*/{4.21,4.75,6953,295.2,0.006809,0.0153,3194,-11.57,4.394,-0.598,0.03506,-0.0007537}, + /*Ga*/{5.041,5.697,7173,202.6,0.006725,0.01581,3154,-11.95,4.537,-0.6169,0.03613,-0.0007759}, + /*Ge*/{5.554,6.3,6496,110,0.009689,0.01632,3097,-12.34,4.68,-0.6358,0.03721,-0.0007981}, + /*As*/{5.323,6.012,7611,292.5,0.006447,0.01683,3024,-12.72,4.823,-0.6547,0.03828,-0.0008203}, + /*Se*/{5.874,6.656,7395,117.5,0.007684,0.01734,3006,-13.11,4.965,-0.6735,0.03935,-0.0008425}, + /*Br*/{5.611,6.335,8046,365.2,0.006244,0.01785,2928,-13.4,5.083,-0.6906,0.04042,-0.0008675}, + /*Kr*/{6.411,7.25,8262,220,0.006087,0.01836,2855,-13.69,5.2,-0.7076,0.0415,-0.0008925}, + /*Rb*/{5.694,6.429,8478,292.9,0.006087,0.01886,2855,-13.92,5.266,-0.714,0.04173,-0.0008943}, + /*Sr*/{6.339,7.159,8693,330.3,0.006003,0.01937,2815,-14.14,5.331,-0.7205,0.04196,-0.0008962}, + /*Y*/{6.407,7.234,8907,367.8,0.005889,0.01988,2762,-14.36,5.397,-0.7269,0.04219,-0.000898}, + /*Zr*/{6.734,7.603,9120,405.2,0.005765,0.02039,2704,-14.59,5.463,-0.7333,0.04242,-0.0008998}, + /*Nb*/{6.902,7.791,9333,442.7,0.005587,0.0209,2621,-16.22,6.094,-0.8225,0.04791,-0.001024}, + /*Mo*/{6.425,7.248,9545,480.2,0.005367,0.02141,2517,-17.85,6.725,-0.9116,0.05339,-0.001148}, + /*Tc*/{6.799,7.671,9756,517.6,0.005315,0.02192,2493,-17.96,6.752,-0.9135,0.05341,-0.001147}, + /*Ru*/{6.108,6.887,9966,555.1,0.005151,0.02243,2416,-18.07,6.779,-0.9154,0.05342,-0.001145}, + /*Rh*/{5.924,6.677,1.018E4,592.5,0.004919,0.02294,2307,-18.18,6.806,-0.9173,0.05343,-0.001143}, + /*Pd*/{5.238,5.9,1.038E4,630,0.004758,0.02345,2231,-18.28,6.833,-0.9192,0.05345,-0.001142}, + /*Ag*/{5.623,6.354,7160,337.6,0.01394,0.02396,2193,-18.39,6.86,-0.9211,0.05346,-0.00114}, + /*Cd*/{5.814,6.554,1.08E4,355.5,0.004626,0.02447,2170,-18.62,6.915,-0.9243,0.0534,-0.001134}, + /*In*/{6.23,7.024,1.101E4,370.9,0.00454,0.02498,2129,-18.85,6.969,-0.9275,0.05335,-0.001127}, + /*Sn*/{6.41,7.227,1.121E4,386.4,0.004474,0.02549,2099,-19.07,7.024,-0.9308,0.05329,-0.001121}, + /*Sb*/{7.5,8.48,8608,348,0.009074,0.026,2069,-19.57,7.225,-0.9603,0.05518,-0.001165}, + /*Te*/{6.979,7.871,1.162E4,392.4,0.004402,0.02651,2065,-20.07,7.426,-0.9899,0.05707,-0.001209}, + /*I*/{7.725,8.716,1.183E4,394.8,0.004376,0.02702,2052,-20.56,7.627,-1.019,0.05896,-0.001254}, + /*Xe*/{8.231,9.289,1.203E4,397.3,0.004384,0.02753,2056,-21.06,7.828,-1.049,0.06085,-0.001298}, + /*Cs*/{7.287,8.218,1.223E4,399.7,0.004447,0.02804,2086,-20.4,7.54,-1.004,0.05782,-0.001224}, + /*Ba*/{7.899,8.911,1.243E4,402.1,0.004511,0.02855,2116,-19.74,7.252,-0.9588,0.05479,-0.001151}, + /*La*/{8.041,9.071,1.263E4,404.5,0.00454,0.02906,2129,-19.08,6.964,-0.9136,0.05176,-0.001077}, + /*Ce*/{7.489,8.444,1.283E4,406.9,0.00442,0.02957,2073,-18.43,6.677,-0.8684,0.04872,-0.001003}, + /*Pr*/{7.291,8.219,1.303E4,409.3,0.004298,0.03008,2016,-17.77,6.389,-0.8233,0.04569,-0.0009292}, + /*Nd*/{7.098,8,1.323E4,411.8,0.004182,0.03059,1962,-17.11,6.101,-0.7781,0.04266,-0.0008553}, + /*Pm*/{6.91,7.786,1.343E4,414.2,0.00405,0.0311,1903,-16.45,5.813,-0.733,0.03963,-0.0007815}, + /*Sm*/{6.728,7.58,1.362E4,416.6,0.003976,0.03161,1865,-15.79,5.526,-0.6878,0.0366,-0.0007077}, + /*Eu*/{6.551,7.38,1.382E4,419,0.003877,0.03212,1819,-15.13,5.238,-0.6426,0.03357,-0.0006339}, + /*Gd*/{6.739,7.592,1.402E4,421.4,0.003863,0.03263,1812,-14.47,4.95,-0.5975,0.03053,-0.0005601}, + /*Tb*/{6.212,6.996,1.421E4,423.9,0.003725,0.03314,1747,-14.56,4.984,-0.6022,0.03082,-0.0005668}, + /*Dy*/{5.517,6.21,1.44E4,426.3,0.003632,0.03365,1703,-14.65,5.018,-0.6069,0.03111,-0.0005734}, + /*Ho*/{5.219,5.874,1.46E4,428.7,0.003498,0.03416,1640,-14.74,5.051,-0.6117,0.03141,-0.0005801}, + /*Er*/{5.071,5.706,1.479E4,433,0.003405,0.03467,1597,-14.83,5.085,-0.6164,0.0317,-0.0005867}, + /*Tm*/{4.926,5.542,1.498E4,433.5,0.003342,0.03518,1567,-14.91,5.119,-0.6211,0.03199,-0.0005933}, + /*Yb*/{4.787, 5.386,1.517E4,435.9,0.003292,0.03569,1544,-15,5.153,-0.6258,0.03228,-0.0006}, + /*Lu*/{4.893, 5.505,1.536E4,438.4,0.003243,0.0362,1521,-15.09,5.186,-0.6305,0.03257,-0.0006066}, + /*Hf*/{5.028, 5.657,1.555E4,440.8,0.003195,0.03671,1499,-15.18,5.22,-0.6353,0.03286,-0.0006133}, + /*Ta*/{4.738, 5.329,1.574E4,443.2,0.003186,0.03722,1494,-15.27,5.254,-0.64,0.03315,-0.0006199}, + /*W*/{4.574, 5.144,1.593E4,442.4,0.003144,0.03773,1475,-15.67,5.392,-0.6577,0.03418,-0.0006426}, + /*Re*/{5.2, 5.851,1.612E4,441.6,0.003122,0.03824,1464,-16.07,5.529,-0.6755,0.03521,-0.0006654}, + /*Os*/{5.07, 5.704,1.63E4,440.9,0.003082,0.03875,1446,-16.47,5.667,-0.6932,0.03624,-0.0006881}, + /*Ir*/{4.945, 5.563,1.649E4,440.1,0.002965,0.03926,1390,-16.88,5.804,-0.711,0.03727,-0.0007109}, + /*Pt*/{4.476, 5.034,1.667E4,439.3,0.002871,0.03977,1347,-17.28,5.942,-0.7287,0.0383,-0.0007336}, + /*Au*/{4.856, 5.46,1.832E4,438.5,0.002542,0.04028,1354,-17.02,5.846,-0.7149,0.0374,-0.0007114}, + /*Hg*/{4.308, 4.843,1.704E4,487.8,0.002882,0.04079,1352,-17.84,6.183,-0.7659,0.04076,-0.0007925}, + /*Tl*/{4.723, 5.311,1.722E4,537,0.002913,0.0413,1366,-18.66,6.52,-0.8169,0.04411,-0.0008737}, + /*Pb*/{5.319, 5.982,1.74E4,586.3,0.002871,0.04181,1347,-19.48,6.857,-0.8678,0.04747,-0.0009548}, + /*Bi*/{5.956, 6.7,1.78E4,677,0.00266,0.04232,1336,-19.55,6.871,-0.8686,0.04748,-0.0009544}, + /*Po*/{6.158, 6.928,1.777E4,586.3,0.002812,0.04283,1319,-19.62,6.884,-0.8694,0.04748,-0.000954}, + /*At*/{6.204, 6.979,1.795E4,586.3,0.002776,0.04334,1302,-19.69,6.898,-0.8702,0.04749,-0.0009536}, + /*Rn*/{6.181, 6.954,1.812E4,586.3,0.002748,0.04385,1289,-19.76,6.912,-0.871,0.04749,-0.0009532}, + /*Fr*/{6.949, 7.82,1.83E4,586.3,0.002737,0.04436,1284,-19.83,6.926,-0.8718,0.0475,-0.0009528}, + /*Ra*/{7.506, 8.448,1.848E4,586.3,0.002727,0.04487,1279,-19.9,6.94,-0.8726,0.04751,-0.0009524}, + /*Ac*/{7.649, 8.609,1.866E4,586.3,0.002697,0.04538,1265,-19.97,6.953,-0.8733,0.04751,-0.000952}, + /*Th*/{7.71, 8.679,1.883E4,586.3,0.002641,0.04589,1239,-20.04,6.967,-0.8741,0.04752,-0.0009516}, + /*Pa*/{7.407, 8.336,1.901E4,586.3,0.002603,0.0464,1221,-20.11,6.981,-0.8749,0.04752,-0.0009512}, + /*U*/{7.29, 8.204,1.918E4,586.3,0.002573,0.04691,1207,-20.18,6.995,-0.8757,0.04753,-0.0009508} + }; + + } +} +#endif diff --git a/src/EnergyLoss/Target.cpp b/src/EnergyLoss/Target.cpp new file mode 100644 index 0000000..9132ac8 --- /dev/null +++ b/src/EnergyLoss/Target.cpp @@ -0,0 +1,117 @@ +/* + +Target.cpp +A basic target unit for use in the SPANCRedux environment. A target +is defined as a single compound with elements Z,A of a given stoichiometry +Holds an energy loss class + +Based on code by D.W. Visser written at Yale for the original SPANC + +Written by G.W. McCann Aug. 2020 + +*/ +#include "Target.h" +#include "EnergyLossConstants.h" +#include "MassLookup.h" +#include + +namespace SabreRecon { + + Target::Target() : + m_totalThickness(0.0), m_isValid(false) + { + } + + /*Targets must be of known thickness*/ + Target::Target(const std::vector& z, const std::vector& stoich, double thick) : + m_isValid(false) + { + SetParameters(z, stoich, thick); + } + + Target::~Target() + { + } + + /*Set target elements of given Z, A, S*/ + void Target::SetParameters(const std::vector& z, const std::vector& stoich, double thick) + { + m_params.ZT = z; + double denom = 0; + for(auto& s : stoich) + denom += s; + for(auto& s : stoich) + m_params.composition.push_back(s/denom); + m_totalThickness = thick; + m_isValid = true; + } + + /*Calculates energy loss for travelling all the way through the target*/ + double Target::GetEnergyLossTotal(int zp, int ap, double startEnergy, double theta) + { + m_params.ZP = zp; + m_params.massP = MassLookup::GetInstance().FindMass(zp, ap)*EnergyLoss::mev2u; + + if(theta == M_PI/2.) + return startEnergy; + else if (theta > M_PI/2.) + theta = M_PI - theta; + + m_params.energy = startEnergy; + m_params.thickness = m_totalThickness/(std::fabs(std::cos(theta))); + + return EnergyLoss::GetEnergyLoss(m_params); + } + + /*Calculates the energy loss for traveling some fraction through the target*/ + double Target::GetEnergyLossFractionalDepth(int zp, int ap, double startEnergy, double theta, double percent_depth) + { + m_params.ZP = zp; + m_params.massP = MassLookup::GetInstance().FindMass(zp, ap)*EnergyLoss::mev2u; + + if(theta == M_PI/2.) + return startEnergy; + else if (theta > M_PI/2.) + theta = M_PI-theta; + + m_params.energy = startEnergy; + m_params.thickness = m_totalThickness*percent_depth/(std::fabs(std::cos(theta))); + + return EnergyLoss::GetEnergyLoss(m_params); + } + + /*Calculates reverse energy loss for travelling all the way through the target*/ + double Target::GetReverseEnergyLossTotal(int zp, int ap, double finalEnergy, double theta) + { + m_params.ZP = zp; + m_params.massP = MassLookup::GetInstance().FindMass(zp, ap)*EnergyLoss::mev2u; + + if(theta == M_PI/2.) + return finalEnergy; + else if (theta > M_PI/2.) + theta = M_PI - theta; + + m_params.energy = finalEnergy; + m_params.thickness = m_totalThickness/(std::fabs(std::cos(theta))); + + return EnergyLoss::GetReverseEnergyLoss(m_params); + } + + /*Calculates the reverse energy loss for traveling some fraction through the target*/ + double Target::GetReverseEnergyLossFractionalDepth(int zp, int ap, double finalEnergy, double theta, double percent_depth) + { + m_params.ZP = zp; + m_params.massP = MassLookup::GetInstance().FindMass(zp, ap)*EnergyLoss::mev2u; + + if(theta == M_PI/2.) + return finalEnergy; + else if (theta > M_PI/2.) + theta = M_PI-theta; + + m_params.energy = finalEnergy; + m_params.thickness = m_totalThickness*percent_depth/(std::fabs(std::cos(theta))); + + return EnergyLoss::GetReverseEnergyLoss(m_params); + } + +} diff --git a/src/EnergyLoss/Target.h b/src/EnergyLoss/Target.h new file mode 100644 index 0000000..b67ba2c --- /dev/null +++ b/src/EnergyLoss/Target.h @@ -0,0 +1,48 @@ +/* + +Target.h +A basic target unit for use in the Mask environment. A target +is defined as a single compound with elements Z,A of a given stoichiometry +Holds an energy loss class + +Based on code by D.W. Visser written at Yale for the original SPANC + +Written by G.W. McCann Aug. 2020 + +*/ +#ifndef TARGET_H +#define TARGET_H + +#include +#include +#include "EnergyLoss.h" + +namespace SabreRecon { + + class Target + { + + public: + Target(); + Target(const std::vector& z, const std::vector& stoich, double thick); + ~Target(); + + void SetParameters(const std::vector& z, const std::vector& stoich, double thick); + double GetEnergyLossTotal(int zp, int ap, double startEnergy, double angle); + double GetReverseEnergyLossTotal(int zp, int ap, double finalEnergy, double angle); + double GetEnergyLossFractionalDepth(int zp, int ap, double startEnergy, double angle, double percent_depth); + double GetReverseEnergyLossFractionalDepth(int zp, int ap, double finalEnergy, double angle, double percent_depth); + + inline const EnergyLoss::Parameters& GetParameters() const { return m_params; } + inline const double GetTotalThickness() const { return m_totalThickness; } + inline const bool IsValid() { return m_isValid; } + + private: + EnergyLoss::Parameters m_params; + double m_totalThickness; + bool m_isValid; + }; + +} + +#endif diff --git a/src/Histogrammer.cpp b/src/Histogrammer.cpp new file mode 100644 index 0000000..669e81e --- /dev/null +++ b/src/Histogrammer.cpp @@ -0,0 +1,160 @@ +#include "Histogrammer.h" +#include "CalDict/DataStructs.h" +#include +#include +#include +#include + + +namespace SabreRecon { + + Histogrammer::Histogrammer(const std::string& input) : + m_inputData(""), m_outputData(""), m_eventPtr(new CalEvent), m_isValid(false) + { + TH1::AddDirectory(kFALSE); + ParseConfig(input); + } + + Histogrammer::~Histogrammer() {} + + void Histogrammer::ParseConfig(const std::string& name) + { + std::ifstream input(name); + if(!input.is_open()) + { + m_isValid = false; + return; + } + + std::string junk; + + double B, theta; + std::vector fpCal; + + double thickness; + std::vector targ_z; + std::vector targ_s; + + std::vector cuts; + ReconCut this_cut; + + input>>junk; + if(junk == "begin_data") + { + input>>junk>>m_inputData; + input>>junk>>m_outputData; + input>>junk; + } + else + { + m_isValid = false; + return; + } + + input>>junk; + if(junk == "begin_reconstructor") + { + while(input>>junk) + { + if(junk == "begin_focalplane") + { + input>>junk>>B; + input>>junk>>theta; + input>>junk; + if(junk == "begin_fpcal") + { + while(input>>junk) + { + if(junk == "end_fpcal") + break; + else + fpCal.push_back(std::stod(junk)); + } + } + } + else if(junk == "begin_target") + { + input>>junk>>thickness; + input>>junk; + if(junk == "begin_elements") + { + while(input>>junk) + { + if(junk == "end_elements") + break; + else + { + targ_z.push_back(std::stoi(junk)); + input>>junk; + targ_s.push_back(std::stoi(junk)); + } + } + } + } + else if(junk == "end_fpcal") + continue; + else if(junk == "end_target") + continue; + else + break; + } + } + + input>>junk; + if(junk == "begin_cuts") + { + while(input>>junk) + { + if(junk == "end_cuts") + break; + else + { + this_cut.cutname = junk; + input>>this_cut.filename; + input>>this_cut.xparam; + input>>this_cut.yparam; + cuts.push_back(this_cut); + } + } + } + + //init resources + Target target(targ_z, targ_s, thickness); + m_recon.Init(target, theta, B, fpCal); + m_cuts.InitCuts(cuts); + m_cuts.InitEvent(m_eventPtr); + + } + + void Histogrammer::FillHistogram1D(const Histogram1DParams& params, double value) + { + auto h = std::static_pointer_cast(m_histoMap[params.name]); + if(h) + h->Fill(value); + else + { + h = std::make_shared(params.name.c_str(), params.title.c_str(), params.bins, params.min, params.max); + h->Fill(value); + m_histoMap[params.name] = h; + } + } + + void Histogrammer::FillHistogram2D(const Histogram2DParams& params, double valueX, double valueY) + { + auto h = std::static_pointer_cast(m_histoMap[params.name]); + if(h) + h->Fill(valueX, valueY); + else + { + h = std::make_shared(params.name.c_str(), params.title.c_str(), params.binsX, params.minX, params.maxX, params.binsY, params.minY, params.maxY); + h->Fill(valueX, valueY); + m_histoMap[params.name] = h; + } + } + + + void Histogrammer::Run() + { + + } +} \ No newline at end of file diff --git a/src/Histogrammer.h b/src/Histogrammer.h new file mode 100644 index 0000000..22c092d --- /dev/null +++ b/src/Histogrammer.h @@ -0,0 +1,62 @@ +#ifndef HISTOGRAMMER_H +#define HISTOGRAMMER_H + +#include +#include +#include +#include +#include "CutHandler.h" +#include "Reconstructor.h" + +namespace SabreRecon { + + struct Histogram1DParams + { + std::string name; + std::string title; + int bins; + double min; + double max; + }; + + struct Histogram2DParams + { + std::string name; + std::string title; + int binsX; + double minX; + double maxX; + int binsY; + double minY; + double maxY; + }; + + class Histogrammer + { + public: + Histogrammer(const std::string& input); + ~Histogrammer(); + + inline const bool IsValid() const { return m_isValid; } + void Run(); + + private: + void ParseConfig(const std::string& name); + void FillHistogram1D(const Histogram1DParams& params, double value); + void FillHistogram2D(const Histogram2DParams& params, double valueX, double valueY); + + std::string m_inputData; + std::string m_outputData; + + CalEvent* m_eventPtr; + + Reconstructor m_recon; + CutHandler m_cuts; + + bool m_isValid; + + std::unordered_map> m_histoMap; + }; +} + +#endif \ No newline at end of file diff --git a/src/MassLookup.cpp b/src/MassLookup.cpp new file mode 100644 index 0000000..7ed496d --- /dev/null +++ b/src/MassLookup.cpp @@ -0,0 +1,73 @@ +/* + +MassLookup.h +Generates a map for isotopic masses using AMDC data; subtracts away +electron mass from the atomic mass by default. Creates a static global instance +of this map (MASS) for use throughout code it is included into. + +Written by G.W. McCann Aug. 2020 + +*/ +#include "MassLookup.h" +#include + +namespace SabreRecon { + + MassLookup* MassLookup::s_instance = new MassLookup(); + + MassLookup::MassLookup() + { + std::ifstream massfile("etc/mass.txt"); + if(massfile.is_open()) + { + std::string junk, A, element; + int Z; + double atomicMassBig, atomicMassSmall, isotopicMass; + getline(massfile,junk); + getline(massfile,junk); + while(massfile>>junk) + { + massfile>>Z>>A>>element>>atomicMassBig>>atomicMassSmall; + isotopicMass = (atomicMassBig + atomicMassSmall*1e-6 - Z*electron_mass)*u_to_mev; + std::string key = "("+std::to_string(Z)+","+A+")"; + massTable[key] = isotopicMass; + elementTable[Z] = element; + } + } + else + { + std::cerr<<"ERR -- Unable to open mass file, check etc directory"<second; + } + + //returns element symbol + std::string MassLookup::FindSymbol(int Z, int A) + { + auto data = elementTable.find(Z); + if(data == elementTable.end()) + { + std::cerr<<"WARN -- Unable to find symbol of (Z,A)=("<second; + return fullsymbol; + } + +} \ No newline at end of file diff --git a/src/MassLookup.h b/src/MassLookup.h new file mode 100644 index 0000000..53b11c0 --- /dev/null +++ b/src/MassLookup.h @@ -0,0 +1,44 @@ +/* + +MassLookup.h +Generates a map for isotopic masses using AMDC data; subtracts away +electron mass from the atomic mass by default. Creates a static global instance +of this map (MASS) for use throughout code it is included into. + +Written by G.W. McCann Aug. 2020 + +Converted to true singleton to simplify usage -- Aug. 2021 GWM +*/ +#ifndef MASS_LOOKUP_H +#define MASS_LOOKUP_H + +#include +#include +#include + +namespace SabreRecon { + + class MassLookup + { + public: + MassLookup(); + ~MassLookup(); + double FindMass(int Z, int A); + std::string FindSymbol(int Z, int A); + + inline static MassLookup& GetInstance() { return *s_instance; } + + private: + static MassLookup* s_instance; + std::unordered_map massTable; + std::unordered_map elementTable; + + //constants + static constexpr double u_to_mev = 931.4940954; + static constexpr double electron_mass = 0.000548579909; + + }; + +} + +#endif diff --git a/src/RandomGenerator.cpp b/src/RandomGenerator.cpp new file mode 100644 index 0000000..12430fe --- /dev/null +++ b/src/RandomGenerator.cpp @@ -0,0 +1,12 @@ +#include "RandomGenerator.h" + +namespace SabreRecon { + + RandomGenerator::RandomGenerator() + { + std::random_device rd; + rng.seed(rd()); + } + + RandomGenerator::~RandomGenerator() {} +} \ No newline at end of file diff --git a/src/RandomGenerator.h b/src/RandomGenerator.h new file mode 100644 index 0000000..2542d87 --- /dev/null +++ b/src/RandomGenerator.h @@ -0,0 +1,28 @@ +#ifndef RANDOMGENERATOR_H +#define RANDOMGENERATOR_H + +#include +#include +#include + +namespace SabreRecon { + + class RandomGenerator { + public: + RandomGenerator(); + ~RandomGenerator(); + + inline std::mt19937& GetGenerator() { return rng; } + inline static RandomGenerator& GetInstance() + { + static RandomGenerator s_generator; + return s_generator; + } + + private: + std::mt19937 rng; + }; + +} + +#endif \ No newline at end of file diff --git a/src/Reconstructor.cpp b/src/Reconstructor.cpp new file mode 100644 index 0000000..699b2b7 --- /dev/null +++ b/src/Reconstructor.cpp @@ -0,0 +1,332 @@ +#include "Reconstructor.h" +#include "MassLookup.h" +#include + +namespace SabreRecon { + + constexpr double Reconstructor::s_phiDet[5]; //C++11 weirdness with static constexpr + + Reconstructor::Reconstructor() + { + } + + Reconstructor::Reconstructor(const Target& target, double spsTheta, double spsB, const std::vector& spsCal) + { + Init(target, spsTheta, spsB, spsCal); + } + + Reconstructor::~Reconstructor() {} + + void Reconstructor::Init(const Target& target, double spsTheta, double spsB, const std::vector& spsCal) + { + m_target = target; + m_focalPlane.Init({spsB, spsTheta, spsCal}); + for(int i=0; i<5; i++) + m_sabreArray.emplace_back(SabreDetector::Parameters(s_phiDet[i], s_tiltAngle, s_zOffset, false, i)); + } + + TLorentzVector Reconstructor::GetSabre4Vector(const SabrePair& pair, double mass) + { + TVector3 coords; + TLorentzVector result; + double p, E; + if(pair.detID == 4) + coords = m_sabreArray[4].GetHitCoordinates(15-pair.local_ring, pair.local_wedge); + else + coords = m_sabreArray[pair.detID].GetHitCoordinates(pair.local_ring, pair.local_wedge); + p = std::sqrt(pair.ringE*(pair.ringE + 2.0*mass)); + E = pair.ringE + mass; + result.SetPxPyPzE(p*std::sin(coords.Theta())*std::cos(coords.Phi()), + p*std::sin(coords.Theta())*std::sin(coords.Phi()), + p*std::cos(coords.Theta()), + E); + return result; + } + + TLorentzVector Reconstructor::GetSabre4VectorEloss(const SabrePair& pair, double mass, const NucID& id) + { + TVector3 coords; + TLorentzVector result; + double p, E, rxnKE; + if(pair.detID == 4) + coords = m_sabreArray[4].GetHitCoordinates(15-pair.local_ring, pair.local_wedge); + else + coords = m_sabreArray[pair.detID].GetHitCoordinates(pair.local_ring, pair.local_wedge); + rxnKE = pair.ringE + m_target.GetReverseEnergyLossFractionalDepth(id.Z, id.A, pair.ringE, coords.Theta(), 0.5); + p = std::sqrt(pair.ringE*(pair.ringE + 2.0*mass)); + E = pair.ringE + mass; + result.SetPxPyPzE(p*std::sin(coords.Theta())*std::cos(coords.Phi()), + p*std::sin(coords.Theta())*std::sin(coords.Phi()), + p*std::cos(coords.Theta()), + E); + return result; + } + + TLorentzVector Reconstructor::GetFP4VectorEloss(double xavg, double mass, const NucID& id) + { + TLorentzVector result; + double p = m_focalPlane.GetP(xavg, id.Z); + double theta = m_focalPlane.GetFPTheta(); + double KE = std::sqrt(p*p + mass*mass) - mass; + double rxnKE = KE + m_target.GetReverseEnergyLossFractionalDepth(id.Z, id.A, KE, theta, 0.5); + double rxnP = sqrt(rxnKE*(rxnKE + 2.0*mass)); + double rxnE = rxnKE + mass; + result.SetPxPyPzE(rxnP*std::sin(theta), 0.0, rxnP*std::cos(theta), rxnE); + return result; + } + + TLorentzVector Reconstructor::GetProj4VectorEloss(double beamKE, double mass, const NucID& id) + { + TLorentzVector result; + double rxnKE = beamKE + m_target.GetReverseEnergyLossFractionalDepth(id.Z, id.A, beamKE, 0.0, 0.5); + result.SetPxPyPzE(0.0,0.0,std::sqrt(rxnKE*(rxnKE+2.0*mass)),rxnKE+mass); + return result; + } + + ReconResult Reconstructor::RunThreeParticleExcitation(const SabrePair& p1, const SabrePair& p2, const SabrePair& p3, const std::vector& nuclei) + { + ReconResult result; + + NucID parent; + parent.Z = nuclei[0].Z + nuclei[1].Z + nuclei[2].Z; + parent.A = nuclei[0].A + nuclei[1].A + nuclei[2].A; + + if(parent.Z > parent.A || parent.A <= 0 || parent.Z < 0) + { + std::cerr<<"Invalid parent nucleus at Reconstructor::RunThreeParticleExcitation with Z: "<& nuclei) + { + ReconResult result; + + NucID parent; + parent.Z = nuclei[0].Z + nuclei[1].Z; + parent.A = nuclei[0].A + nuclei[1].A; + + if(parent.Z > parent.A || parent.A <= 0 || parent.Z < 0) + { + std::cerr<<"Invalid parent nucleus at Reconstructor::RunTwoParticleExcitation with Z: "<& nuclei) + { + ReconResult result; + + NucID resid; + resid.Z = nuclei[0].Z + nuclei[1].Z - nuclei[2].Z; + resid.A = nuclei[0].A + nuclei[1].A - nuclei[2].A; + + if(resid.Z > resid.A || resid.A <= 0 || resid.Z < 0) + { + std::cerr<<"Invalid reisdual nucleus at Reconstructor::RunFPResidExcitation with Z: "<& nuclei) + { + ReconResult result; + + NucID resid; + resid.Z = nuclei[0].Z + nuclei[1].Z - nuclei[2].Z; + resid.A = nuclei[0].A + nuclei[1].A - nuclei[2].A; + + if(resid.Z > resid.A || resid.A <= 0 || resid.Z < 0) + { + std::cerr<<"Invalid reisdual nucleus at Reconstructor::RunFPResidExcitation with Z: "<& nuclei) + { + ReconResult result; + + NucID decayFrag; + decayFrag.Z = nuclei[0].Z + nuclei[1].Z - nuclei[2].Z - nuclei[3].Z; + decayFrag.A = nuclei[0].A + nuclei[1].A - nuclei[2].A - nuclei[3].A; + + if(decayFrag.Z > decayFrag.A || decayFrag.A <= 0 || decayFrag.Z < 0) + { + std::cerr<<"Invalid reisdual nucleus at Reconstructor::RunSabreExcitation with Z: "<& nuclei) + { + ReconResult result; + + NucID decayFrag; + decayFrag.Z = nuclei[0].Z + nuclei[1].Z - nuclei[2].Z - nuclei[3].Z; + decayFrag.A = nuclei[0].A + nuclei[1].A - nuclei[2].A - nuclei[3].A; + + if(decayFrag.Z > decayFrag.A || decayFrag.A <= 0 || decayFrag.Z < 0) + { + std::cerr<<"Invalid reisdual nucleus at Reconstructor::RunSabreExcitation with Z: "< +#include +#include "EnergyLoss/Target.h" +#include "CalDict/DataStructs.h" +#include "TLorentzVector.h" +#include "Detectors/SabreDetector.h" +#include "Detectors/FocalPlaneDetector.h" + +namespace SabreRecon { + + struct ReconResult + { + double excitation; + double theta_cm; + double phi_cm; + }; + + struct NucID + { + int Z, A; + + NucID() : + Z(0), A(0) + { + } + + NucID(int z, int a) : + Z(z), A(a) + { + } + }; + + class Reconstructor + { + public: + Reconstructor(); + Reconstructor(const Target& target, double spsTheta, double spsB, const std::vector& spsCal); + ~Reconstructor(); + + void Init(const Target& target, double spsTheta, double spsB, const std::vector& spsCal); + + ReconResult RunThreeParticleExcitation(const SabrePair& p1, const SabrePair& p2, const SabrePair& p3, const std::vector& nuclei); + ReconResult RunTwoParticleExcitation(const SabrePair& p1, const SabrePair& p2, const std::vector& nuclei); + //nuclei: target, projectile, ejectile + ReconResult RunFPResidExcitation(double xavg, double beamKE, const std::vector& nuclei); + //nuclei: target, projectile, ejectile + ReconResult RunSabreResidExcitationDetEject(double beamKE, const SabrePair& sabre, const std::vector& nuclei); + //nuclei: target, projectile, ejectile, decaySabre + ReconResult RunSabreExcitation(double xavg, double beamKE, const SabrePair& sabre, const std::vector& nuclei); + //nuclei: target, projectile, ejectile, decayFP + ReconResult RunSabreExcitationDetEject(double xavg, double beamKE, const SabrePair& sabre, const std::vector& nuclei); + + + private: + TLorentzVector GetSabre4Vector(const SabrePair& pair, double mass); + TLorentzVector GetSabre4VectorEloss(const SabrePair& pair, double mass, const NucID& id); + TLorentzVector GetFP4VectorEloss(double xavg, double mass, const NucID& id); + TLorentzVector GetProj4VectorEloss(double beamKE, double mass, const NucID& id); + + std::vector m_sabreArray; + FocalPlaneDetector m_focalPlane; + Target m_target; + + //SABRE constants + static constexpr double s_phiDet[5] = { 306.0, 18.0, 234.0, 162.0, 90.0 }; + static constexpr double s_tiltAngle = 40.0; + static constexpr double s_zOffset = -0.1245; + + //Kinematics constants + static constexpr double s_deg2rad = M_PI/180.0; //rad/deg + }; +} + +#endif \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000..802e5a6 --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,26 @@ +#include "Histogrammer.h" +#include +#include + + +int main(int argc, const char** argv) +{ + if(argc != 2) + { + std::cerr<<"SabreRecon requires an input config file! Unable to run."<