mirror of
https://github.com/gwm17/SabreCal.git
synced 2024-11-22 10:18:49 -05:00
First commit
This commit is contained in:
commit
87c674d487
7
.gitignore
vendored
Normal file
7
.gitignore
vendored
Normal file
|
@ -0,0 +1,7 @@
|
|||
*.so
|
||||
*.o
|
||||
*.pcm
|
||||
*.cxx
|
||||
SabreCal
|
||||
|
||||
!.gitignore
|
146
etc/ChannelMap_May2022_SABRE.txt
Normal file
146
etc/ChannelMap_May2022_SABRE.txt
Normal file
|
@ -0,0 +1,146 @@
|
|||
Format: global_channel detectorID_number detectorType_identifier detectorPart_identifier
|
||||
NOTE: the focal plane ionchamber is given the UNIQUE detector id of 11. All other detector id ranges should be 0 to nDetectors-1.
|
||||
0 4 SABREWEDGE 0
|
||||
1 4 SABREWEDGE 1
|
||||
2 4 SABREWEDGE 2
|
||||
3 4 SABREWEDGE 3
|
||||
4 4 SABREWEDGE 4
|
||||
5 4 SABREWEDGE 5
|
||||
6 4 SABREWEDGE 6
|
||||
7 4 SABREWEDGE 7
|
||||
8 -1 UNUSED 0
|
||||
9 -1 UNUSED 0
|
||||
10 -1 UNUSED 0
|
||||
11 -1 UNUSED 0
|
||||
12 -1 UNUSED 0
|
||||
13 -1 UNUSED 0
|
||||
14 -1 UNUSED 0
|
||||
15 -1 UNUSED 0
|
||||
16 2 SABREWEDGE 0
|
||||
17 2 SABREWEDGE 1
|
||||
18 2 SABREWEDGE 2
|
||||
19 2 SABREWEDGE 3
|
||||
20 2 SABREWEDGE 4
|
||||
21 2 SABREWEDGE 5
|
||||
22 2 SABREWEDGE 6
|
||||
23 2 SABREWEDGE 7
|
||||
24 3 SABREWEDGE 0
|
||||
25 3 SABREWEDGE 1
|
||||
26 3 SABREWEDGE 2
|
||||
27 3 SABREWEDGE 3
|
||||
28 3 SABREWEDGE 4
|
||||
29 3 SABREWEDGE 5
|
||||
30 3 SABREWEDGE 6
|
||||
31 3 SABREWEDGE 7
|
||||
32 1 SABREWEDGE 0
|
||||
33 1 SABREWEDGE 1
|
||||
34 1 SABREWEDGE 2
|
||||
35 1 SABREWEDGE 3
|
||||
36 1 SABREWEDGE 4
|
||||
37 1 SABREWEDGE 5
|
||||
38 1 SABREWEDGE 6
|
||||
39 1 SABREWEDGE 7
|
||||
40 0 SABREWEDGE 0
|
||||
41 0 SABREWEDGE 1
|
||||
42 0 SABREWEDGE 2
|
||||
43 0 SABREWEDGE 3
|
||||
44 0 SABREWEDGE 4
|
||||
45 0 SABREWEDGE 5
|
||||
46 0 SABREWEDGE 6
|
||||
47 0 SABREWEDGE 7
|
||||
48 4 SABRERING 0
|
||||
49 4 SABRERING 1
|
||||
50 4 SABRERING 2
|
||||
51 4 SABRERING 3
|
||||
52 4 SABRERING 4
|
||||
53 4 SABRERING 5
|
||||
54 4 SABRERING 6
|
||||
55 4 SABRERING 7
|
||||
56 4 SABRERING 8
|
||||
57 4 SABRERING 9
|
||||
58 4 SABRERING 10
|
||||
59 4 SABRERING 11
|
||||
60 4 SABRERING 12
|
||||
61 4 SABRERING 13
|
||||
62 4 SABRERING 14
|
||||
63 4 SABRERING 15
|
||||
64 3 SABRERING 0
|
||||
65 3 SABRERING 1
|
||||
66 3 SABRERING 2
|
||||
67 3 SABRERING 3
|
||||
68 3 SABRERING 4
|
||||
69 3 SABRERING 5
|
||||
70 3 SABRERING 6
|
||||
71 3 SABRERING 7
|
||||
72 3 SABRERING 8
|
||||
73 3 SABRERING 9
|
||||
74 3 SABRERING 10
|
||||
75 3 SABRERING 11
|
||||
76 3 SABRERING 12
|
||||
77 3 SABRERING 13
|
||||
78 3 SABRERING 14
|
||||
79 3 SABRERING 15
|
||||
80 2 SABRERING 0
|
||||
81 2 SABRERING 1
|
||||
82 2 SABRERING 2
|
||||
83 2 SABRERING 3
|
||||
84 2 SABRERING 4
|
||||
85 2 SABRERING 5
|
||||
86 2 SABRERING 6
|
||||
87 2 SABRERING 7
|
||||
88 2 SABRERING 8
|
||||
89 2 SABRERING 9
|
||||
90 2 SABRERING 10
|
||||
91 2 SABRERING 11
|
||||
92 2 SABRERING 12
|
||||
93 2 SABRERING 13
|
||||
94 2 SABRERING 14
|
||||
95 2 SABRERING 15
|
||||
96 1 SABRERING 0
|
||||
97 1 SABRERING 1
|
||||
98 1 SABRERING 2
|
||||
99 1 SABRERING 3
|
||||
100 1 SABRERING 4
|
||||
101 1 SABRERING 5
|
||||
102 1 SABRERING 6
|
||||
103 1 SABRERING 7
|
||||
104 1 SABRERING 8
|
||||
105 1 SABRERING 9
|
||||
106 1 SABRERING 10
|
||||
107 1 SABRERING 11
|
||||
108 1 SABRERING 12
|
||||
109 1 SABRERING 13
|
||||
110 1 SABRERING 14
|
||||
111 1 SABRERING 15
|
||||
112 0 SABRERING 0
|
||||
113 0 SABRERING 1
|
||||
114 0 SABRERING 2
|
||||
115 0 SABRERING 3
|
||||
116 0 SABRERING 4
|
||||
117 0 SABRERING 5
|
||||
118 0 SABRERING 6
|
||||
119 0 SABRERING 7
|
||||
120 0 SABRERING 8
|
||||
121 0 SABRERING 9
|
||||
122 0 SABRERING 10
|
||||
123 0 SABRERING 11
|
||||
124 0 SABRERING 12
|
||||
125 0 SABRERING 13
|
||||
126 0 SABRERING 14
|
||||
127 0 SABRERING 15
|
||||
128 11 FOCALPLANE SCINTRIGHT
|
||||
129 11 FOCALPLANE SCINTLEFT
|
||||
130 -1 UNUSED 0
|
||||
131 11 FOCALPLANE RF
|
||||
132 -1 UNUSED 0
|
||||
133 -1 UNUSED 0
|
||||
134 -1 UNUSED 0
|
||||
135 11 FOCALPLANE CATHODE
|
||||
136 11 FOCALPLANE DELAYFL
|
||||
137 11 FOCALPLANE DELAYFR
|
||||
138 11 FOCALPLANE DELAYBL
|
||||
139 11 FOCALPLANE DELAYBR
|
||||
140 -1 UNUSED 0
|
||||
141 11 FOCALPLANE ANODEFRONT
|
||||
142 -1 UNUSED 0
|
||||
143 11 FOCALPLANE ANODEBACK
|
114
premake5.lua
Normal file
114
premake5.lua
Normal file
|
@ -0,0 +1,114 @@
|
|||
workspace "SabreCal"
|
||||
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 "SabreCal"
|
||||
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"
|
8
scal2.sublime-project
Normal file
8
scal2.sublime-project
Normal file
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"folders":
|
||||
[
|
||||
{
|
||||
"path": "."
|
||||
}
|
||||
]
|
||||
}
|
769
scal2.sublime-workspace
Normal file
769
scal2.sublime-workspace
Normal file
|
@ -0,0 +1,769 @@
|
|||
{
|
||||
"auto_complete":
|
||||
{
|
||||
"selected_items":
|
||||
[
|
||||
[
|
||||
"tar",
|
||||
"targ_z"
|
||||
],
|
||||
[
|
||||
"cin",
|
||||
"cstdint"
|
||||
],
|
||||
[
|
||||
"m_eve",
|
||||
"m_eventInit"
|
||||
],
|
||||
[
|
||||
"resi",
|
||||
"resid_vec"
|
||||
],
|
||||
[
|
||||
"massDec",
|
||||
"massDecayFrag"
|
||||
],
|
||||
[
|
||||
"d",
|
||||
"decayBreak_vec"
|
||||
],
|
||||
[
|
||||
"massD",
|
||||
"massDecayBreak"
|
||||
],
|
||||
[
|
||||
"par",
|
||||
"parent_vec"
|
||||
],
|
||||
[
|
||||
"GetSabre",
|
||||
"GetSabre4VectorEloss"
|
||||
],
|
||||
[
|
||||
"resize",
|
||||
"resizeColumnsToContents"
|
||||
],
|
||||
[
|
||||
"syb",
|
||||
"Symbol"
|
||||
],
|
||||
[
|
||||
"if",
|
||||
"ifmain"
|
||||
],
|
||||
[
|
||||
"QTab",
|
||||
"QTableWidget"
|
||||
],
|
||||
[
|
||||
"fi",
|
||||
"fitCanvas"
|
||||
],
|
||||
[
|
||||
"outpu",
|
||||
"output"
|
||||
],
|
||||
[
|
||||
"Cal",
|
||||
"CalculateRhoUncertainty"
|
||||
],
|
||||
[
|
||||
"KE_eject_at",
|
||||
"KE_eject_at_det"
|
||||
],
|
||||
[
|
||||
"KE",
|
||||
"KE_eject_at_det"
|
||||
],
|
||||
[
|
||||
"myla",
|
||||
"mylar_eff_thickness"
|
||||
],
|
||||
[
|
||||
"e",
|
||||
"mylar_eff_thickness"
|
||||
],
|
||||
[
|
||||
"myl",
|
||||
"mylar_s"
|
||||
],
|
||||
[
|
||||
"MYL",
|
||||
"MYLAR_THICKNESS"
|
||||
],
|
||||
[
|
||||
"mylar",
|
||||
"mylar_density"
|
||||
],
|
||||
[
|
||||
"uex",
|
||||
"uexInput"
|
||||
],
|
||||
[
|
||||
"uxsy",
|
||||
"uxsysInput"
|
||||
],
|
||||
[
|
||||
"peak",
|
||||
"peakKey"
|
||||
],
|
||||
[
|
||||
"Sen",
|
||||
"SendCalibrationPeak"
|
||||
],
|
||||
[
|
||||
"upda",
|
||||
"update_calibration"
|
||||
],
|
||||
[
|
||||
"cali",
|
||||
"calib_peaks"
|
||||
],
|
||||
[
|
||||
"pe",
|
||||
"peakName"
|
||||
],
|
||||
[
|
||||
"Upd",
|
||||
"UpdateReaction"
|
||||
],
|
||||
[
|
||||
"poly",
|
||||
"poly_order"
|
||||
],
|
||||
[
|
||||
"y_",
|
||||
"y_errors"
|
||||
],
|
||||
[
|
||||
"x_",
|
||||
"x_errors"
|
||||
],
|
||||
[
|
||||
"Qu",
|
||||
"QuadraticFit"
|
||||
],
|
||||
[
|
||||
"x",
|
||||
"x_data"
|
||||
],
|
||||
[
|
||||
"y",
|
||||
"y_errors"
|
||||
],
|
||||
[
|
||||
"M",
|
||||
"MAX_ITERS"
|
||||
],
|
||||
[
|
||||
"chi",
|
||||
"chi_lastmain"
|
||||
],
|
||||
[
|
||||
"chisq",
|
||||
"chisq"
|
||||
],
|
||||
[
|
||||
"func",
|
||||
"func_vals"
|
||||
],
|
||||
[
|
||||
"st",
|
||||
"student_resids"
|
||||
],
|
||||
[
|
||||
"s",
|
||||
"student_resids"
|
||||
],
|
||||
[
|
||||
"sq",
|
||||
"sq_diff"
|
||||
],
|
||||
[
|
||||
"ures",
|
||||
"uresid_array"
|
||||
],
|
||||
[
|
||||
"resid",
|
||||
"residualTable"
|
||||
],
|
||||
[
|
||||
"ure",
|
||||
"uresid_array"
|
||||
],
|
||||
[
|
||||
"output",
|
||||
"output"
|
||||
],
|
||||
[
|
||||
"input",
|
||||
"inputGroupBox"
|
||||
],
|
||||
[
|
||||
"key",
|
||||
"key"
|
||||
],
|
||||
[
|
||||
"out",
|
||||
"output_peaks"
|
||||
],
|
||||
[
|
||||
"ft",
|
||||
"fitTypeBox"
|
||||
],
|
||||
[
|
||||
"uxstat",
|
||||
"uxstat"
|
||||
],
|
||||
[
|
||||
"calib",
|
||||
"calib_peaks"
|
||||
],
|
||||
[
|
||||
"reaction",
|
||||
"reactionTable"
|
||||
],
|
||||
[
|
||||
"l",
|
||||
"layered_target"
|
||||
],
|
||||
[
|
||||
"QTable",
|
||||
"QTableWidgetItem"
|
||||
],
|
||||
[
|
||||
"tabl",
|
||||
"tableTab"
|
||||
],
|
||||
[
|
||||
"ftab",
|
||||
"ftableGroup"
|
||||
],
|
||||
[
|
||||
"fitO",
|
||||
"fitOptionLayout"
|
||||
],
|
||||
[
|
||||
"fitOpti",
|
||||
"fitOptionGroup"
|
||||
],
|
||||
[
|
||||
"QD",
|
||||
"QDoubleSpinBox"
|
||||
],
|
||||
[
|
||||
"na",
|
||||
"nameLabel"
|
||||
],
|
||||
[
|
||||
"layer1",
|
||||
"layer1GroupBox"
|
||||
],
|
||||
[
|
||||
"layer1com",
|
||||
"layer1ComponentsBox"
|
||||
],
|
||||
[
|
||||
"layer",
|
||||
"layer1compLayout"
|
||||
],
|
||||
[
|
||||
"layer1comp",
|
||||
"layer1compLayout"
|
||||
],
|
||||
[
|
||||
"targe",
|
||||
"targetNameBox"
|
||||
],
|
||||
[
|
||||
"fwh",
|
||||
"fwhm_x"
|
||||
],
|
||||
[
|
||||
"fw",
|
||||
"fwhm_Ex"
|
||||
],
|
||||
[
|
||||
"Evalu",
|
||||
"EvaluateFunction"
|
||||
],
|
||||
[
|
||||
"Eva",
|
||||
"EvaluateFunction"
|
||||
],
|
||||
[
|
||||
"fit",
|
||||
"fit_name"
|
||||
],
|
||||
[
|
||||
"ux",
|
||||
"ux_sys"
|
||||
],
|
||||
[
|
||||
"cal",
|
||||
"calib_peaks"
|
||||
],
|
||||
[
|
||||
"ca",
|
||||
"calib_peaks"
|
||||
],
|
||||
[
|
||||
"Cu",
|
||||
"CubicFunction"
|
||||
],
|
||||
[
|
||||
"Line",
|
||||
"LinearFunction"
|
||||
],
|
||||
[
|
||||
"uf",
|
||||
"ufwhm_x"
|
||||
],
|
||||
[
|
||||
"Spanc",
|
||||
"SpancFit"
|
||||
],
|
||||
[
|
||||
"lin",
|
||||
"linear_func"
|
||||
],
|
||||
[
|
||||
"p_",
|
||||
"p_project"
|
||||
],
|
||||
[
|
||||
"p_ej",
|
||||
"p_eject_at_rxn"
|
||||
],
|
||||
[
|
||||
"p",
|
||||
"p_project"
|
||||
],
|
||||
[
|
||||
"BK",
|
||||
"BKE_atRxn"
|
||||
],
|
||||
[
|
||||
"GetE",
|
||||
"GetEnergyLoss"
|
||||
],
|
||||
[
|
||||
"B",
|
||||
"BKE"
|
||||
],
|
||||
[
|
||||
"K",
|
||||
"KE_eject_at_det"
|
||||
],
|
||||
[
|
||||
"KE_ej",
|
||||
"KE_eject_at_det"
|
||||
],
|
||||
[
|
||||
"Q",
|
||||
"QBRHO2P"
|
||||
],
|
||||
[
|
||||
"GetEje",
|
||||
"GetEjectileKineticEnergyAtDet"
|
||||
],
|
||||
[
|
||||
"GetRever",
|
||||
"GetReverseEnergyLossTotal"
|
||||
],
|
||||
[
|
||||
"GetEnergy",
|
||||
"GetEnergyLossHalf"
|
||||
],
|
||||
[
|
||||
"targetA",
|
||||
"targetA"
|
||||
],
|
||||
[
|
||||
"Hyd",
|
||||
"HydrogenCoeff"
|
||||
],
|
||||
[
|
||||
"Hy",
|
||||
"HydrogenCoeff"
|
||||
],
|
||||
[
|
||||
"conv",
|
||||
"conversion_factor"
|
||||
],
|
||||
[
|
||||
"i",
|
||||
"i"
|
||||
],
|
||||
[
|
||||
"xerr",
|
||||
"xerr_array"
|
||||
],
|
||||
[
|
||||
"energy",
|
||||
"energyFlag"
|
||||
],
|
||||
[
|
||||
"inp",
|
||||
"inputNumberLayout"
|
||||
],
|
||||
[
|
||||
"Levl",
|
||||
"LevelDialog"
|
||||
],
|
||||
[
|
||||
"re",
|
||||
"reactionList"
|
||||
],
|
||||
[
|
||||
"__",
|
||||
"__init__"
|
||||
],
|
||||
[
|
||||
"QDia",
|
||||
"QDialog"
|
||||
],
|
||||
[
|
||||
"react",
|
||||
"reaction_params"
|
||||
],
|
||||
[
|
||||
"reac",
|
||||
"reaction_params"
|
||||
],
|
||||
[
|
||||
"Reac",
|
||||
"ReactionDialog"
|
||||
],
|
||||
[
|
||||
"Re",
|
||||
"ReadConfig"
|
||||
],
|
||||
[
|
||||
"QDial",
|
||||
"QDialogButtonBox"
|
||||
],
|
||||
[
|
||||
"beam",
|
||||
"beamKE"
|
||||
],
|
||||
[
|
||||
"GetEJe",
|
||||
"GetEjectileKineticEnergy"
|
||||
],
|
||||
[
|
||||
"rho",
|
||||
"rhoMin"
|
||||
]
|
||||
]
|
||||
},
|
||||
"buffers":
|
||||
[
|
||||
],
|
||||
"build_system": "Packages/Python/Python.sublime-build",
|
||||
"build_system_choices":
|
||||
[
|
||||
[
|
||||
[
|
||||
[
|
||||
"Packages/Makefile/Make.sublime-build",
|
||||
""
|
||||
],
|
||||
[
|
||||
"Packages/Makefile/Make.sublime-build",
|
||||
"Clean"
|
||||
]
|
||||
],
|
||||
[
|
||||
"Packages/Makefile/Make.sublime-build",
|
||||
""
|
||||
]
|
||||
],
|
||||
[
|
||||
[
|
||||
[
|
||||
"Packages/Python/Python.sublime-build",
|
||||
""
|
||||
],
|
||||
[
|
||||
"Packages/Python/Python.sublime-build",
|
||||
"Syntax Check"
|
||||
]
|
||||
],
|
||||
[
|
||||
"Packages/Python/Python.sublime-build",
|
||||
"Syntax Check"
|
||||
]
|
||||
]
|
||||
],
|
||||
"build_varint": "",
|
||||
"command_palette":
|
||||
{
|
||||
"height": 0.0,
|
||||
"last_filter": "",
|
||||
"selected_items":
|
||||
[
|
||||
],
|
||||
"width": 0.0
|
||||
},
|
||||
"console":
|
||||
{
|
||||
"height": 200.0,
|
||||
"history":
|
||||
[
|
||||
]
|
||||
},
|
||||
"distraction_free":
|
||||
{
|
||||
"menu_visible": true,
|
||||
"show_minimap": false,
|
||||
"show_open_files": false,
|
||||
"show_tabs": false,
|
||||
"side_bar_visible": false,
|
||||
"status_bar_visible": false
|
||||
},
|
||||
"expanded_folders":
|
||||
[
|
||||
"/home/gwm17/SabreCal2"
|
||||
],
|
||||
"file_history":
|
||||
[
|
||||
"/home/gwm17/SabreRecon2/premake5.lua",
|
||||
"/home/gwm17/SabreRecon2/input.txt",
|
||||
"/home/gwm17/SabreRecon2/src/CalDict/DataStructs.h",
|
||||
"/home/gwm17/SabreRecon2/src/CutHandler.h",
|
||||
"/home/gwm17/SabreRecon2/src/CutHandler.cpp",
|
||||
"/home/gwm17/SabreRecon2/src/Reconstructor.h",
|
||||
"/home/gwm17/SabreRecon2/src/RandomGenerator.cpp",
|
||||
"/home/gwm17/SabreRecon2/src/RandomGenerator.h",
|
||||
"/home/gwm17/SabreRecon2/src/Detectors/SabreDetector.cpp",
|
||||
"/home/gwm17/SabreRecon/input.txt",
|
||||
"/home/gwm17/SabreRecon2/src/Histogrammer.cpp",
|
||||
"/home/gwm17/SabreRecon2/src/Histogrammer.h",
|
||||
"/home/gwm17/SabreRecon2/src/Detectors/FocalPlaneDetector.cpp",
|
||||
"/home/gwm17/SabreRecon2/src/Reconstructor.cpp",
|
||||
"/home/gwm17/SabreRecon2/src/Detectors/FocalPlaneDetector.h",
|
||||
"/home/gwm17/SabreRecon2/src/EnergyLoss/Target.h",
|
||||
"/home/gwm17/SPS_SABRE_EventBuilder/premake5.lua",
|
||||
"/home/gwm17/SabreRecon2/src/EnergyLoss/Target.cpp",
|
||||
"/home/gwm17/SabreRecon2/src/Detectors/SabreDetector.h",
|
||||
"/home/gwm17/SabreRecon2/src/CalDict/LinkDef_CalDict.h",
|
||||
"/home/gwm17/SabreRecon2/src/CalDict/DataStructs.cpp",
|
||||
"/home/gwm17/SabreRecon2/src/DataStructs.h",
|
||||
"/home/gwm17/SabreRecon2/src/main.cpp",
|
||||
"/home/gwm17/SabreRecon2/src/MassLookup.h",
|
||||
"/home/gwm17/SabreRecon2/src/MassLookup.cpp",
|
||||
"/home/gwm17/SabreRecon2/src/EnergyLoss/EnergyLoss.h",
|
||||
"/home/gwm17/SabreRecon2/src/EnergyLoss/EnergyLoss.cpp",
|
||||
"/home/gwm17/SabreRecon2/src/EnergyLoss/EnergyLossConstants.h",
|
||||
"/home/gwm17/NucKage/src/RootPlotter.cpp",
|
||||
"/home/gwm17/NucKage/src/RootPlotter.h",
|
||||
"/home/gwm17/python_scripts/NavServer.py",
|
||||
"/home/gwm17/spspy/fpcheck/NucData.py",
|
||||
"/home/gwm17/spspy/fpcheck/Reaction.py",
|
||||
"/home/gwm17/spspy/fpcheck/FPCheckGUI.py",
|
||||
"/home/gwm17/spspy/spanc/SpancGUI.py",
|
||||
"/home/gwm17/spspy/spsplot/SPSPlotGUI.py",
|
||||
"/home/gwm17/spspy/spanc/Spanc.py",
|
||||
"/home/gwm17/spspy/spanc/Reaction.py",
|
||||
"/home/gwm17/spspy/spsplot/NucData.py",
|
||||
"/home/gwm17/spspy/spanc/IngoFit.py",
|
||||
"/home/gwm17/spspy/spanc/Fitter.py",
|
||||
"/home/gwm17/spspy/README.md",
|
||||
"/home/gwm17/spspy/.gitignore",
|
||||
"/home/gwm17/spspy/spsplot/NuclearRxn.py",
|
||||
"/home/gwm17/spspy/spsplot/SPSPlot.py",
|
||||
"/home/gwm17/spspy/test_config.txt",
|
||||
"/home/gwm17/spspy/spanc/LayeredTarget.py",
|
||||
"/home/gwm17/spspy/spanc/EnergyLoss.py",
|
||||
"/home/gwm17/Spanc_Redux/src/Reaction.cpp",
|
||||
"/home/gwm17/Spanc_Redux/src/IngoFit.cpp",
|
||||
"/home/gwm17/spspy/bin/spsplot",
|
||||
"/home/gwm17/spspy/bin/spanc",
|
||||
"/home/gwm17/Spanc_Redux/src/SpancRedux.cpp",
|
||||
"/home/gwm17/spspy/spanc/EnergyLossData.py",
|
||||
"/home/gwm17/Spanc_Redux/src/EnergyLoss.cpp",
|
||||
"/home/gwm17/Spanc_Redux/include/SpancRedux.h",
|
||||
"/home/gwm17/Spanc_Redux/src/TargetCreationFrame.cpp",
|
||||
"/home/gwm17/Spanc_Redux/include/Reaction.h",
|
||||
"/home/gwm17/Kinematics/src/LayeredTarget.cpp",
|
||||
"/home/gwm17/Kinematics/src/Target.cpp",
|
||||
"/home/gwm17/Kinematics/include/Target.h",
|
||||
"/home/gwm17/Kinematics/include/LayeredTarget.h",
|
||||
"/home/gwm17/Spanc_Redux/src/LayeredTarget.cpp",
|
||||
"/home/gwm17/Spanc_Redux/include/LayeredTarget.h",
|
||||
"/home/gwm17/Spanc_Redux/src/Target.cpp",
|
||||
"/home/gwm17/Spanc_Redux/include/Target.h",
|
||||
"/home/gwm17/Spanc_Redux/include/EnergyLoss.h",
|
||||
"/home/gwm17/Spanc_Redux/tests/unittests.cpp",
|
||||
"/home/gwm17/spspy/spanc/NucData.py",
|
||||
"/home/gwm17/GWM_EventBuilder/etc/ChannelMap_March2020_newFormat_092020.txt",
|
||||
"/home/gwm17/Spanc_Redux/include/Eloss_Tables.h",
|
||||
"/home/gwm17/Spanc_Redux/include/IngoFit.h",
|
||||
"/home/gwm17/spspy/SPSPlotGUI.py",
|
||||
"/home/gwm17/spspy/SPSPlot.py",
|
||||
"/home/gwm17/spspy/NuclearRxn.py",
|
||||
"/home/gwm17/spspy/NucData.py",
|
||||
"/home/gwm17/spspy/etc/mass.txt",
|
||||
"/home/gwm17/Kinematics/src/Reaction.cpp",
|
||||
"/home/gwm17/WiggleKiller/src/WiggleKiller.cpp"
|
||||
],
|
||||
"find":
|
||||
{
|
||||
"height": 70.0
|
||||
},
|
||||
"find_in_files":
|
||||
{
|
||||
"height": 0.0,
|
||||
"where_history":
|
||||
[
|
||||
]
|
||||
},
|
||||
"find_state":
|
||||
{
|
||||
"case_sensitive": false,
|
||||
"find_history":
|
||||
[
|
||||
"Nucleus",
|
||||
"setPrecision",
|
||||
"layer1GroupBox",
|
||||
"targetGroup",
|
||||
"addLayout",
|
||||
"H_RESTMASS",
|
||||
"comp_denom",
|
||||
"}",
|
||||
"{",
|
||||
"/*",
|
||||
"print",
|
||||
"energySwitch"
|
||||
],
|
||||
"highlight": true,
|
||||
"in_selection": false,
|
||||
"preserve_case": false,
|
||||
"regex": false,
|
||||
"replace_history":
|
||||
[
|
||||
"setDecimals",
|
||||
"setLayout",
|
||||
"]",
|
||||
"["
|
||||
],
|
||||
"reverse": false,
|
||||
"scrollbar_highlights": true,
|
||||
"show_context": true,
|
||||
"use_buffer2": true,
|
||||
"use_gitignore": true,
|
||||
"whole_word": false,
|
||||
"wrap": true
|
||||
},
|
||||
"groups":
|
||||
[
|
||||
{
|
||||
"sheets":
|
||||
[
|
||||
]
|
||||
}
|
||||
],
|
||||
"incremental_find":
|
||||
{
|
||||
"height": 29.0
|
||||
},
|
||||
"input":
|
||||
{
|
||||
"height": 67.0
|
||||
},
|
||||
"layout":
|
||||
{
|
||||
"cells":
|
||||
[
|
||||
[
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1
|
||||
]
|
||||
],
|
||||
"cols":
|
||||
[
|
||||
0.0,
|
||||
1.0
|
||||
],
|
||||
"rows":
|
||||
[
|
||||
0.0,
|
||||
1.0
|
||||
]
|
||||
},
|
||||
"menu_visible": true,
|
||||
"output.SublimeLinter":
|
||||
{
|
||||
"height": 138.0
|
||||
},
|
||||
"output.exec":
|
||||
{
|
||||
"height": 126.0
|
||||
},
|
||||
"output.find_results":
|
||||
{
|
||||
"height": 0.0
|
||||
},
|
||||
"output.mdpopups":
|
||||
{
|
||||
"height": 0.0
|
||||
},
|
||||
"output.unsaved_changes":
|
||||
{
|
||||
"height": 126.0
|
||||
},
|
||||
"pinned_build_system": "",
|
||||
"project": "scal2.sublime-project",
|
||||
"replace":
|
||||
{
|
||||
"height": 114.0
|
||||
},
|
||||
"save_all_on_build": true,
|
||||
"select_file":
|
||||
{
|
||||
"height": 0.0,
|
||||
"last_filter": "",
|
||||
"selected_items":
|
||||
[
|
||||
],
|
||||
"width": 0.0
|
||||
},
|
||||
"select_project":
|
||||
{
|
||||
"height": 500.0,
|
||||
"last_filter": "",
|
||||
"selected_items":
|
||||
[
|
||||
[
|
||||
"",
|
||||
"~/SPS_SABRE_EventBuilder/spsevb.sublime-project"
|
||||
]
|
||||
],
|
||||
"width": 380.0
|
||||
},
|
||||
"select_symbol":
|
||||
{
|
||||
"height": 0.0,
|
||||
"last_filter": "",
|
||||
"selected_items":
|
||||
[
|
||||
],
|
||||
"width": 0.0
|
||||
},
|
||||
"selected_group": 0,
|
||||
"settings":
|
||||
{
|
||||
},
|
||||
"show_minimap": true,
|
||||
"show_open_files": false,
|
||||
"show_tabs": true,
|
||||
"side_bar_visible": true,
|
||||
"side_bar_width": 237.0,
|
||||
"status_bar_visible": true,
|
||||
"template_settings":
|
||||
{
|
||||
}
|
||||
}
|
3
src/CalDict/DataStructs.cpp
Normal file
3
src/CalDict/DataStructs.cpp
Normal file
|
@ -0,0 +1,3 @@
|
|||
#include "DataStructs.h"
|
||||
|
||||
bool EnforceDictionaryLinked() { return true; }
|
90
src/CalDict/DataStructs.h
Normal file
90
src/CalDict/DataStructs.h
Normal file
|
@ -0,0 +1,90 @@
|
|||
#ifndef DATA_STRUCTS_H
|
||||
#define DATA_STRUCTS_H
|
||||
|
||||
#include <vector>
|
||||
|
||||
struct DPPChannel
|
||||
{
|
||||
double Timestamp;
|
||||
int Channel, Board, Energy, EnergyShort;
|
||||
int Flags;
|
||||
};
|
||||
|
||||
struct DetectorHit
|
||||
{
|
||||
double Long=-1, Short=-1, Time=-1;
|
||||
int Ch=-1;
|
||||
};
|
||||
|
||||
struct SabreDetector
|
||||
{
|
||||
std::vector<DetectorHit> rings;
|
||||
std::vector<DetectorHit> wedges;
|
||||
};
|
||||
|
||||
struct FPDetector
|
||||
{
|
||||
std::vector<DetectorHit> delayFL, delayFR, delayBL, delayBR;
|
||||
std::vector<DetectorHit> anodeF, anodeB, scintL, scintR, cathode;
|
||||
std::vector<DetectorHit> monitor;
|
||||
};
|
||||
|
||||
struct CoincEvent
|
||||
{
|
||||
FPDetector focalPlane;
|
||||
SabreDetector sabreArray[5]; //index = ChannelMap Id# -1
|
||||
};
|
||||
|
||||
struct ProcessedEvent
|
||||
{
|
||||
double fp1_tdiff = -1e6, fp2_tdiff = -1e6, fp1_tsum = -1, fp2_tsum = -1,
|
||||
fp1_tcheck = -1, fp2_tcheck = -1;
|
||||
double fp1_y=-1, fp2_y=-1;
|
||||
double anodeFront = -1, anodeBack = -1, scintRight = -1, scintLeft = -1;
|
||||
double scintRightShort = -1, scintLeftShort = -1;
|
||||
double cathode = -1;
|
||||
double xavg = -1e6, x1 = -1e6, x2 = -1e6;
|
||||
double theta = -1e6;
|
||||
double sabreRingE[5] = {-1,-1,-1,-1,-1}, sabreWedgeE[5] = {-1,-1,-1,-1,-1};
|
||||
double sabreRingChannel[5] = {-1,-1,-1,-1,-1}, sabreWedgeChannel[5] = {-1,-1,-1,-1,-1};
|
||||
double sabreRingTime[5] = {-1,-1,-1,-1,-1}, sabreWedgeTime[5] = {-1,-1,-1,-1,-1};
|
||||
|
||||
double delayFrontRightE = -1, delayFrontLeftE = -1;
|
||||
double delayBackRightE = -1, delayBackLeftE = -1;
|
||||
double delayFrontRightShort = -1, delayFrontLeftShort = -1;
|
||||
double delayBackRightShort = -1, delayBackLeftShort = -1;
|
||||
double anodeFrontTime = -1, anodeBackTime = -1;
|
||||
double scintRightTime = -1, scintLeftTime = -1;
|
||||
double delayFrontMaxTime = -1, delayBackMaxTime = -1;
|
||||
double delayFrontLeftTime = -1, delayFrontRightTime = -1;
|
||||
double delayBackLeftTime = -1, delayBackRightTime = -1;
|
||||
double cathodeTime = -1;
|
||||
|
||||
double monitorE = -1, monitorShort = -1;
|
||||
double monitorTime = -1;
|
||||
|
||||
|
||||
SabreDetector sabreArray[5]; //index = ChannelMap Id# -1
|
||||
};
|
||||
|
||||
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<SabrePair> sabre;
|
||||
};
|
||||
|
||||
bool EnforceDictionaryLinked();
|
||||
|
||||
#endif
|
13
src/CalDict/LinkDef_CalDict.h
Normal file
13
src/CalDict/LinkDef_CalDict.h
Normal file
|
@ -0,0 +1,13 @@
|
|||
#ifdef __ROOTCLING__
|
||||
|
||||
#pragma link C++ struct DPPChannel+;
|
||||
#pragma link C++ struct DetectorHit+;
|
||||
#pragma link C++ class std::vector<DetectorHit>+;
|
||||
#pragma link C++ struct SabreDetector+;
|
||||
#pragma link C++ struct FPDetector+;
|
||||
#pragma link C++ struct CoincEvent+;
|
||||
#pragma link C++ struct ProcessedEvent+;
|
||||
#pragma link C++ struct SabrePair+;
|
||||
#pragma link C++ struct CalEvent+;
|
||||
|
||||
#endif
|
24
src/CalibrationStructs.h
Normal file
24
src/CalibrationStructs.h
Normal file
|
@ -0,0 +1,24 @@
|
|||
#ifndef CALIBRATION_STRUCTS_H
|
||||
#define CALIBRATION_STRUCTS_H
|
||||
|
||||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
namespace SabreCal {
|
||||
|
||||
struct Parameters
|
||||
{
|
||||
double slope = 0;
|
||||
double offset = 0;
|
||||
};
|
||||
|
||||
struct GraphData
|
||||
{
|
||||
std::vector<double> x;
|
||||
std::vector<double> y;
|
||||
std::string name = "";
|
||||
std::string title = "";
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
83
src/ChannelMap.cpp
Normal file
83
src/ChannelMap.cpp
Normal file
|
@ -0,0 +1,83 @@
|
|||
#include "ChannelMap.h"
|
||||
#include <fstream>
|
||||
|
||||
namespace SabreCal {
|
||||
|
||||
ChannelMap::ChannelMap() :
|
||||
m_isValid(false)
|
||||
{
|
||||
}
|
||||
|
||||
ChannelMap::ChannelMap(const std::string& mapfile) :
|
||||
m_isValid(false)
|
||||
{
|
||||
Init(mapfile);
|
||||
}
|
||||
|
||||
void ChannelMap::Init(const std::string& mapfile)
|
||||
{
|
||||
m_isValid = false;
|
||||
|
||||
std::ifstream input(mapfile);
|
||||
std::string junk;
|
||||
std::string rev_key;
|
||||
Channel this_channel;
|
||||
int gchan;
|
||||
|
||||
if(!input.is_open())
|
||||
return;
|
||||
|
||||
std::getline(input, junk);
|
||||
std::getline(input, junk);
|
||||
|
||||
while(input>>gchan)
|
||||
{
|
||||
input>>this_channel.detID>>junk>>this_channel.localChannel;
|
||||
rev_key = std::to_string(this_channel.detID);
|
||||
if(junk == "SABRERING")
|
||||
{
|
||||
this_channel.isRing = true;
|
||||
this_channel.isWedge = false;
|
||||
rev_key += "ring";
|
||||
}
|
||||
else if (junk == "SABREWEDGE")
|
||||
{
|
||||
this_channel.isRing = false;
|
||||
this_channel.isWedge = true;
|
||||
rev_key += "wedge";
|
||||
}
|
||||
else
|
||||
continue;
|
||||
m_map[gchan] = this_channel;
|
||||
rev_key += std::to_string(this_channel.localChannel);
|
||||
m_revmap[rev_key] = gchan;
|
||||
}
|
||||
|
||||
m_isValid = true;
|
||||
}
|
||||
|
||||
const Channel& ChannelMap::GetChannel(int gchan) const
|
||||
{
|
||||
auto iter = m_map.find(gchan);
|
||||
if(iter != m_map.end())
|
||||
return iter->second;
|
||||
else
|
||||
return m_dummy;
|
||||
}
|
||||
|
||||
int ChannelMap::GetGlobalChannel(const Channel& channel) const
|
||||
{
|
||||
std::string key = std::to_string(channel.detID);
|
||||
if(channel.isRing)
|
||||
key += "ring";
|
||||
else
|
||||
key += "wedge";
|
||||
key += std::to_string(channel.localChannel);
|
||||
|
||||
auto iter = m_revmap.find(key);
|
||||
if(iter != m_revmap.end())
|
||||
return iter->second;
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
}
|
42
src/ChannelMap.h
Normal file
42
src/ChannelMap.h
Normal file
|
@ -0,0 +1,42 @@
|
|||
#ifndef CHANNEL_MAP_H
|
||||
#define CHANNEL_MAP_H
|
||||
|
||||
#include <string>
|
||||
#include <unordered_map>
|
||||
|
||||
namespace SabreCal {
|
||||
|
||||
struct Channel
|
||||
{
|
||||
Channel() {}
|
||||
Channel(int id, bool ring, bool wedge, int local) :
|
||||
detID(id), isRing(ring), isWedge(wedge), localChannel(local)
|
||||
{}
|
||||
int detID = -1;
|
||||
bool isRing = false;
|
||||
bool isWedge = false;
|
||||
int localChannel = -1;
|
||||
};
|
||||
|
||||
class ChannelMap
|
||||
{
|
||||
public:
|
||||
ChannelMap();
|
||||
ChannelMap(const std::string& mapfile);
|
||||
~ChannelMap();
|
||||
|
||||
void Init(const std::string& mapfile);
|
||||
const Channel& GetChannel(int gchan) const;
|
||||
int GetGlobalChannel(const Channel& channel) const;
|
||||
|
||||
inline const bool IsValid() const { return m_isValid; }
|
||||
|
||||
private:
|
||||
bool m_isValid;
|
||||
std::unordered_map<int, Channel> m_map;
|
||||
std::unordered_map<std::string, int> m_revmap; //ReverseMap takes string detID + ring/wedge + localChannel to global channel
|
||||
Channel m_dummy; //for invalid results
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
182
src/GainMatcher.cpp
Normal file
182
src/GainMatcher.cpp
Normal file
|
@ -0,0 +1,182 @@
|
|||
#include "GainMatcher.h"
|
||||
#include "CalDict/DataStructs.h"
|
||||
#include "TFile.h"
|
||||
#include "TTree.h"
|
||||
#include "TF1.h"
|
||||
#include "TFitResult.h"
|
||||
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
|
||||
namespace SabreCal {
|
||||
|
||||
GainMatcher::GainMatcher(const std::string& mapfile, int ring_to_match, int wedge_to_match) :
|
||||
m_map(mapfile), m_ringToFit(ring_to_match), m_wedgeToFit(wedge_to_match)
|
||||
{
|
||||
}
|
||||
|
||||
GainMatcher::~GainMatcher() {}
|
||||
|
||||
void GainMatcher::Run(const std::string& datafile, const std::string& outputfile, const std::string& graphfile)
|
||||
{
|
||||
if(!m_map.IsValid())
|
||||
{
|
||||
std::cerr<<"ERR -- GainMatcher::Run() ChannelMap is invalid."<<std::endl;
|
||||
return;
|
||||
}
|
||||
|
||||
TFile* input = TFile::Open(datafile.c_str(), "READ");
|
||||
if(!input->IsOpen())
|
||||
{
|
||||
std::cerr<<"ERR -- GainMatcher::Run() data file is invalid."<<std::endl;
|
||||
return;
|
||||
}
|
||||
|
||||
ProcessedEvent* eventPtr = new ProcessedEvent();
|
||||
TTree* tree = (TTree*) input->Get("SPSTree");
|
||||
tree->SetBranchAddress("event", &eventPtr);
|
||||
|
||||
uint64_t nentries = tree->GetEntries();
|
||||
uint64_t count=0, flushes=0;
|
||||
float flush_percent = 0.1f;
|
||||
uint64_t flush_val = flush_percent*nentries;
|
||||
|
||||
//start data loop
|
||||
for(uint64_t i=0; i<nentries; i++)
|
||||
{
|
||||
tree->GetEntry(i);
|
||||
count++;
|
||||
if(count == flush_val)
|
||||
{
|
||||
count = 0;
|
||||
flushes++;
|
||||
std::cout<<"\rPercent of data processed: "<<flush_percent*flushes*100.0f<<"%"<<std::endl;
|
||||
}
|
||||
|
||||
for(int j=0; j<5; j++)
|
||||
{
|
||||
SabreDetector& this_detector = eventPtr->sabreArray[j];
|
||||
for(auto& ring : this_detector.rings)
|
||||
{
|
||||
auto& ringChannel = m_map.GetChannel(ring.Ch);
|
||||
for(auto& wedge : this_detector.wedges)
|
||||
{
|
||||
auto& wedgeChannel = m_map.GetChannel(wedge.Ch);
|
||||
|
||||
if(ringChannel.localChannel == m_ringToFit && ring.Long > 200.0 && wedge.Long > 200.0)
|
||||
{
|
||||
m_data[wedge.Ch].x.push_back(wedge.Long);
|
||||
m_data[wedge.Ch].y.push_back(ring.Long);
|
||||
if(m_data[wedge.Ch].name == "")
|
||||
{
|
||||
m_data[wedge.Ch].name = "channel_"+std::to_string(wedge.Ch);
|
||||
m_data[wedge.Ch].title = m_data[wedge.Ch].name + ";" + m_data[wedge.Ch].name + ";channel_"+std::to_string(ring.Ch);
|
||||
}
|
||||
}
|
||||
if(wedgeChannel.localChannel == m_wedgeToFit && ring.Long > 200.0 && wedge.Long > 200.0)
|
||||
{
|
||||
m_data[ring.Ch].x.push_back(ring.Long);
|
||||
m_data[ring.Ch].y.push_back(wedge.Long);
|
||||
if(m_data[ring.Ch].name == "")
|
||||
{
|
||||
m_data[ring.Ch].name = "channel_"+std::to_string(ring.Ch);
|
||||
m_data[ring.Ch].title = m_data[ring.Ch].name + ";" + m_data[ring.Ch].name + ";channel_"+std::to_string(wedge.Ch);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//data loop complete
|
||||
|
||||
std::cout<<std::endl;
|
||||
std::cout<<"Matching..."<<std::endl;
|
||||
DoMatching(graphfile);
|
||||
std::cout<<"Writing results..."<<std::endl;
|
||||
WriteParameters(outputfile);
|
||||
|
||||
input->Close();
|
||||
}
|
||||
|
||||
void GainMatcher::DoMatching(const std::string& graphfile)
|
||||
{
|
||||
std::vector<TGraph*> graph_array;
|
||||
graph_array.resize(m_totalChannels);
|
||||
|
||||
//Make all of the wedge graphs, and get the gain match parameters
|
||||
for(size_t i=0; i<m_firstRing; i++)
|
||||
{
|
||||
if(m_data[i].x.size() != 0)
|
||||
{
|
||||
graph_array[i] = new TGraph(m_data[i].x.size(), &(m_data[i].x[0]), &(m_data[i].y[0]));
|
||||
graph_array[i]->SetName(m_data[i].name.c_str());
|
||||
graph_array[i]->SetTitle(m_data[i].title.c_str());
|
||||
auto result = graph_array[i]->Fit("pol1","R|ROB|Q+");
|
||||
m_params[i].slope = result->Parameter(1);
|
||||
m_params[i].offset = result->Parameter(0);
|
||||
}
|
||||
else
|
||||
graph_array[i] = nullptr;
|
||||
}
|
||||
|
||||
//Now do rings, after applying parameters from wedges
|
||||
for(size_t i=m_firstRing; i<m_totalChannels; i++)
|
||||
{
|
||||
if(m_data[i].x.size() != 0)
|
||||
{
|
||||
auto ringchan = m_map.GetChannel(i);
|
||||
int wedge_gchan = m_map.GetGlobalChannel({ringchan.detID, false, true, m_wedgeToFit});
|
||||
auto& params = m_params[wedge_gchan];
|
||||
for(size_t j=0; j<m_data[i].y.size(); j++) //apply wedge results
|
||||
m_data[i].y[j] = params.slope*m_data[i].y[j] + params.offset;
|
||||
|
||||
graph_array[i] = new TGraph(m_data[i].x.size(), &(m_data[i].x[0]), &(m_data[i].y[0]));
|
||||
graph_array[i]->SetName(m_data[i].name.c_str());
|
||||
graph_array[i]->SetTitle(m_data[i].title.c_str());
|
||||
auto result = graph_array[i]->Fit("pol1","R|ROB|Q+");
|
||||
m_params[i].slope = result->Parameter(1);
|
||||
m_params[i].offset = result->Parameter(0);
|
||||
}
|
||||
else
|
||||
graph_array[i] = nullptr;
|
||||
}
|
||||
|
||||
if(graphfile != "")
|
||||
WriteGraphs(graph_array, graphfile);
|
||||
|
||||
for(size_t i=0; i<graph_array.size(); i++)
|
||||
delete graph_array[i];
|
||||
}
|
||||
|
||||
void GainMatcher::WriteGraphs(const std::vector<TGraph*>& graphs, const std::string& graphfile)
|
||||
{
|
||||
TFile* graphout = TFile::Open(graphfile.c_str(), "RECREATE");
|
||||
if(!graphout->IsOpen())
|
||||
return;
|
||||
|
||||
for(auto graph : graphs)
|
||||
{
|
||||
if(graph)
|
||||
graph->Write();
|
||||
}
|
||||
|
||||
graphout->Close();
|
||||
}
|
||||
|
||||
void GainMatcher::WriteParameters(const std::string& outputfile)
|
||||
{
|
||||
std::ofstream output(outputfile);
|
||||
if(!output.is_open())
|
||||
{
|
||||
std::cerr<<"ERR -- Unable to write results at GainMatcher::WriteParameters() with filename "<<outputfile<<std::endl;
|
||||
return;
|
||||
}
|
||||
|
||||
output<<"Channel Slope Offset"<<std::endl;
|
||||
for(size_t i=0; i<m_params.size(); i++)
|
||||
output<<i<<" "<<m_params[i].slope<<" "<<m_params[i].offset<<std::endl;
|
||||
|
||||
output.close();
|
||||
}
|
||||
|
||||
}
|
38
src/GainMatcher.h
Normal file
38
src/GainMatcher.h
Normal file
|
@ -0,0 +1,38 @@
|
|||
#ifndef GAIN_MATCHER_H
|
||||
#define GAIN_MATCHER_H
|
||||
|
||||
#include <string>
|
||||
#include <array>
|
||||
#include "CalibrationStructs.h"
|
||||
#include "ChannelMap.h"
|
||||
#include "TGraph.h"
|
||||
|
||||
namespace SabreCal {
|
||||
|
||||
class GainMatcher
|
||||
{
|
||||
public:
|
||||
GainMatcher(const std::string& mapfile, int ring_to_match, int wedge_to_match);
|
||||
~GainMatcher();
|
||||
|
||||
void Run(const std::string& datafile, const std::string& outputfile, const std::string& graphfile="");
|
||||
|
||||
private:
|
||||
void DoMatching(const std::string& graphfile);
|
||||
void WriteGraphs(const std::vector<TGraph*>& graphs, const std::string& graphfile);
|
||||
void WriteParameters(const std::string& outputfile);
|
||||
|
||||
ChannelMap m_map;
|
||||
|
||||
static constexpr int m_totalChannels = 128;
|
||||
static constexpr int m_firstRing = 48; //Wedges are 0-47, rings 48-127
|
||||
std::array<GraphData, m_totalChannels> m_data;
|
||||
std::array<Parameters, m_totalChannels> m_params;
|
||||
|
||||
int m_ringToFit;
|
||||
int m_wedgeToFit;
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue
Block a user