deleted: Armory/mass20.txt
modified: TrackRecon.C paap gating modified: run_17F.sh modified: run_27Al.sh modified: run_tr.sh modified: scratch/overlay_2d.C
This commit is contained in:
parent
78add5432a
commit
80b079b81d
3594
Armory/mass20.txt
3594
Armory/mass20.txt
File diff suppressed because it is too large
Load Diff
41
TrackRecon.C
41
TrackRecon.C
|
|
@ -45,7 +45,7 @@ bool process_alpha_proton_scattering = false,
|
||||||
doPCSX3ClusterAnalysis = true,
|
doPCSX3ClusterAnalysis = true,
|
||||||
doPCQQQClusterAnalysis = true,
|
doPCQQQClusterAnalysis = true,
|
||||||
doOldAnalysis = false,
|
doOldAnalysis = false,
|
||||||
BenchMark = false,
|
BenchMark = true,
|
||||||
onewire_analysis = true,
|
onewire_analysis = true,
|
||||||
diagnostic_eplots = false,
|
diagnostic_eplots = false,
|
||||||
diagnostic_tplots = true,
|
diagnostic_tplots = true,
|
||||||
|
|
@ -3605,7 +3605,15 @@ void protonAlphaElastic_core(HistPlotter *plotter, const std::vector<Event> &Si_
|
||||||
|
|
||||||
auto fillHypothesis = [&](bool alphaHyp)
|
auto fillHypothesis = [&](bool alphaHyp)
|
||||||
{
|
{
|
||||||
const std::string ejtag = (alphaHyp && sievent.Energy1 < 5) ? "_a" : "_p";
|
// const std::string ejtag = (alphaHyp && sievent.Energy1 < 5) ? "_a" : "_p";
|
||||||
|
std::string ejtag;
|
||||||
|
if (alphaHyp && sievent.Energy1 < 5)
|
||||||
|
ejtag = "_a";
|
||||||
|
else if (sievent.Energy1 >= 6.4 && sievent.Energy1 < 7.0)
|
||||||
|
ejtag = "_p";
|
||||||
|
else
|
||||||
|
ejtag = "_maybep";
|
||||||
|
|
||||||
std::string pmlabel = misclabel + ejtag;
|
std::string pmlabel = misclabel + ejtag;
|
||||||
TSpline3 *ej_fwd = alphaHyp ? MeV_to_cm_spl : MeV_to_cm_p_spl;
|
TSpline3 *ej_fwd = alphaHyp ? MeV_to_cm_spl : MeV_to_cm_p_spl;
|
||||||
TSpline3 *ej_inv = alphaHyp ? cm_to_MeV_spl : cm_to_MeVp_spl;
|
TSpline3 *ej_inv = alphaHyp ? cm_to_MeV_spl : cm_to_MeVp_spl;
|
||||||
|
|
@ -3684,9 +3692,9 @@ void protonAlphaElastic_core(HistPlotter *plotter, const std::vector<Event> &Si_
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
if (pid != SiPcPid::kAlpha)
|
if (pid != SiPcPid::kAlpha && sievent.Energy1 >= 6.4 && sievent.Energy1 < 7.0)
|
||||||
fillHypothesis(false); // proton, or PID unavailable (legacy default)
|
fillHypothesis(false); // proton, or PID unavailable (legacy default)
|
||||||
if (pid == SiPcPid::kAlpha)
|
if (pid == SiPcPid::kAlpha && sievent.Energy1 < 6.2)
|
||||||
fillHypothesis(true);
|
fillHypothesis(true);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -3964,8 +3972,6 @@ static void reaction_ax_core(HistPlotter *plotter, const std::vector<Event> &Si_
|
||||||
|
|
||||||
plotter->Fill2D(rx + "_BeamEnergy_vs_VertexZ" + sfx, 800, -400, 400, 400, 0, beamE0, vertex_z, beam_energy_at_vertex, folderPrefix + globaltag + "_" + rx + "+misc_" + det);
|
plotter->Fill2D(rx + "_BeamEnergy_vs_VertexZ" + sfx, 800, -400, 400, 400, 0, beamE0, vertex_z, beam_energy_at_vertex, folderPrefix + globaltag + "_" + rx + "+misc_" + det);
|
||||||
|
|
||||||
bool trueProton = (beam_energy_at_vertex < 10.0);
|
|
||||||
|
|
||||||
double ex_as_proton = 0.0, ex_as_alpha = 0.0;
|
double ex_as_proton = 0.0, ex_as_alpha = 0.0;
|
||||||
auto fillHypothesis = [&](double m3, double m4, TSpline3 *ej_fwd, TSpline3 *ej_inv, const std::string &ejtag)
|
auto fillHypothesis = [&](double m3, double m4, TSpline3 *ej_fwd, TSpline3 *ej_inv, const std::string &ejtag)
|
||||||
{
|
{
|
||||||
|
|
@ -4016,28 +4022,25 @@ static void reaction_ax_core(HistPlotter *plotter, const std::vector<Event> &Si_
|
||||||
if (ebeam_kin_MeV > 0.0)
|
if (ebeam_kin_MeV > 0.0)
|
||||||
plotter->Fill2D(rx + "_BeamEnergy_ETrack_vs_EKin" + ejtag + t + sfx, 400, 0, beamE0 * 1.5, 400, 0, beamE0 * 1.5,
|
plotter->Fill2D(rx + "_BeamEnergy_ETrack_vs_EKin" + ejtag + t + sfx, 400, 0, beamE0 * 1.5, 400, 0, beamE0 * 1.5,
|
||||||
beam_energy_at_vertex, ebeam_kin_MeV, pmlabel);
|
beam_energy_at_vertex, ebeam_kin_MeV, pmlabel);
|
||||||
if (ejtag == "_p")
|
|
||||||
|
if (beam_energy_at_vertex > 4.0 && beam_energy_at_vertex <= 12.0)
|
||||||
|
{
|
||||||
|
plotter->Fill2D(rx + "_EKin-ETrack2235keV_vs_phi" + ejtag + t + sfx, 45, -180, 180, 600, -20, 40, phi * 180 / M_PI, ebeam_kin_2235keV - beam_energy_at_vertex, pmlabel);
|
||||||
|
}
|
||||||
|
if (ejtag == "_p" && rx == "m27Alax")
|
||||||
{
|
{
|
||||||
// if (beam_energy_at_vertex < 4.0 && beam_energy_at_vertex > 0.1)
|
|
||||||
plotter->Fill2D(rx + "_ETrack_vs_EKinGS" + ejtag + t + sfx, 400, 0, beamE0 * 1.5, 400, 0, beamE0 * 1.5,
|
plotter->Fill2D(rx + "_ETrack_vs_EKinGS" + ejtag + t + sfx, 400, 0, beamE0 * 1.5, 400, 0, beamE0 * 1.5,
|
||||||
beam_energy_at_vertex, ebeam_kin_GS, folderPrefix + "ETrackvsKin_assumed");
|
beam_energy_at_vertex, ebeam_kin_GS, folderPrefix + "ETrackvsKin_assumed");
|
||||||
// else if (beam_energy_at_vertex <= 12.0)
|
|
||||||
plotter->Fill2D(rx + "_ETrack_vs_EKin2235keV" + ejtag + t + sfx, 400, 0, beamE0 * 1.5, 400, 0, beamE0 * 1.5,
|
plotter->Fill2D(rx + "_ETrack_vs_EKin2235keV" + ejtag + t + sfx, 400, 0, beamE0 * 1.5, 400, 0, beamE0 * 1.5,
|
||||||
beam_energy_at_vertex, ebeam_kin_2235keV, folderPrefix + "ETrackvsKin_assumed");
|
beam_energy_at_vertex, ebeam_kin_2235keV, folderPrefix + "ETrackvsKin_assumed");
|
||||||
// else if (beam_energy_at_vertex < 24.0)
|
|
||||||
{
|
|
||||||
plotter->Fill2D(rx + "_ETrack_vs_EKin3498keV" + ejtag + t + sfx, 400, 0, beamE0 * 1.5, 400, 0, beamE0 * 1.5,
|
plotter->Fill2D(rx + "_ETrack_vs_EKin3498keV" + ejtag + t + sfx, 400, 0, beamE0 * 1.5, 400, 0, beamE0 * 1.5,
|
||||||
beam_energy_at_vertex, ebeam_kin_3498keV, folderPrefix + "ETrackvsKin_assumed");
|
beam_energy_at_vertex, ebeam_kin_3498keV, folderPrefix + "ETrackvsKin_assumed");
|
||||||
plotter->Fill2D(rx + "_ETrack_vs_EKin3774keV" + ejtag + t + sfx, 400, 0, beamE0 * 1.5, 400, 0, beamE0 * 1.5,
|
plotter->Fill2D(rx + "_ETrack_vs_EKin3774keV" + ejtag + t + sfx, 400, 0, beamE0 * 1.5, 400, 0, beamE0 * 1.5,
|
||||||
beam_energy_at_vertex, ebeam_kin_3774keV, folderPrefix + "ETrackvsKin_assumed");
|
beam_energy_at_vertex, ebeam_kin_3774keV, folderPrefix + "ETrackvsKin_assumed");
|
||||||
}
|
|
||||||
// else if (beam_energy_at_vertex <= 36.00)
|
|
||||||
plotter->Fill2D(rx + "_ETrack_vs_EKin4809keV" + ejtag + t + sfx, 400, 0, beamE0 * 1.5, 400, 0, beamE0 * 1.5,
|
plotter->Fill2D(rx + "_ETrack_vs_EKin4809keV" + ejtag + t + sfx, 400, 0, beamE0 * 1.5, 400, 0, beamE0 * 1.5,
|
||||||
beam_energy_at_vertex, ebeam_kin_4809keV, folderPrefix + "ETrackvsKin_assumed");
|
beam_energy_at_vertex, ebeam_kin_4809keV, folderPrefix + "ETrackvsKin_assumed");
|
||||||
// else if (beam_energy_at_vertex < 42.0)
|
|
||||||
plotter->Fill2D(rx + "_ETrack_vs_EKin5614keV" + ejtag + t + sfx, 400, 0, beamE0 * 1.5, 400, 0, beamE0 * 1.5,
|
plotter->Fill2D(rx + "_ETrack_vs_EKin5614keV" + ejtag + t + sfx, 400, 0, beamE0 * 1.5, 400, 0, beamE0 * 1.5,
|
||||||
beam_energy_at_vertex, ebeam_kin_5614keV, folderPrefix + "ETrackvsKin_assumed");
|
beam_energy_at_vertex, ebeam_kin_5614keV, folderPrefix + "ETrackvsKin_assumed");
|
||||||
// else
|
|
||||||
plotter->Fill2D(rx + "_ETrack_vs_EKin6550keV" + ejtag + t + sfx, 400, 0, beamE0 * 1.5, 400, 0, beamE0 * 1.5,
|
plotter->Fill2D(rx + "_ETrack_vs_EKin6550keV" + ejtag + t + sfx, 400, 0, beamE0 * 1.5, 400, 0, beamE0 * 1.5,
|
||||||
beam_energy_at_vertex, ebeam_kin_6550keV, folderPrefix + "ETrackvsKin_assumed");
|
beam_energy_at_vertex, ebeam_kin_6550keV, folderPrefix + "ETrackvsKin_assumed");
|
||||||
}
|
}
|
||||||
|
|
@ -4045,7 +4048,6 @@ static void reaction_ax_core(HistPlotter *plotter, const std::vector<Event> &Si_
|
||||||
|
|
||||||
plotter->Fill2D(rx + "_dE_E_Anode" + sfx, 400, 0, dEa_max, 800, 0, 40000, sievent.Energy1, anodeE, pmlabel);
|
plotter->Fill2D(rx + "_dE_E_Anode" + sfx, 400, 0, dEa_max, 800, 0, 40000, sievent.Energy1, anodeE, pmlabel);
|
||||||
|
|
||||||
plotter->Fill2D(rx + "_dE_E_Anode" + sfx + "_E<10MeV" + std::to_string(beam_energy_at_vertex < 10), 400, 0, dEa_max, 800, 0, 40000, sievent.Energy1, anodeE, pmlabel);
|
|
||||||
if (cathodeE >= 0.0)
|
if (cathodeE >= 0.0)
|
||||||
{
|
{
|
||||||
plotter->Fill2D(rx + "_dE_E_Cathode" + sfx, 400, 0, dEa_max, 800, 0, dEc_max, sievent.Energy1, cathodeE, pmlabel);
|
plotter->Fill2D(rx + "_dE_E_Cathode" + sfx, 400, 0, dEa_max, 800, 0, dEc_max, sievent.Energy1, cathodeE, pmlabel);
|
||||||
|
|
@ -4055,7 +4057,7 @@ static void reaction_ax_core(HistPlotter *plotter, const std::vector<Event> &Si_
|
||||||
}
|
}
|
||||||
plotter->Fill1D(rx + "_pczfix" + sfx, 600, -300, 300, pcz_fix, pmlabel);
|
plotter->Fill1D(rx + "_pczfix" + sfx, 600, -300, 300, pcz_fix, pmlabel);
|
||||||
plotter->Fill2D(rx + "_Ef_vs_theta" + ejtag + sfx, 100, 0, 180, 800, 0, ef_max, theta * 180 / M_PI, Efix, pmlabel);
|
plotter->Fill2D(rx + "_Ef_vs_theta" + ejtag + sfx, 100, 0, 180, 800, 0, ef_max, theta * 180 / M_PI, Efix, pmlabel);
|
||||||
plotter->Fill2D(rx + "_Ex_vs_phi" + ejtag + sfx, 180, -180, 180, 600, -10, 20, phi * 180 / M_PI, Ex, pmlabel);
|
plotter->Fill2D(rx + "_Ex_vs_phi" + ejtag + sfx, 45, -180, 180, 600, -10, 20, phi * 180 / M_PI, Ex, pmlabel);
|
||||||
|
|
||||||
for (const auto &pcevent : PC_Events)
|
for (const auto &pcevent : PC_Events)
|
||||||
{
|
{
|
||||||
|
|
@ -4065,6 +4067,7 @@ static void reaction_ax_core(HistPlotter *plotter, const std::vector<Event> &Si_
|
||||||
continue;
|
continue;
|
||||||
plotter->Fill2D(rx + "_Ex_vs_dT" + ejtag + sfx, 500, -2000, 2000, 600, -10, 20, (sievent.Time1 - pcevent.Time1), Ex, pmlabel);
|
plotter->Fill2D(rx + "_Ex_vs_dT" + ejtag + sfx, 500, -2000, 2000, 600, -10, 20, (sievent.Time1 - pcevent.Time1), Ex, pmlabel);
|
||||||
plotter->Fill2D(rx + "_dEgasCalib_vs_dT" + ejtag + sfx, 500, -2000, 2000, 800, 0, 0.6, (sievent.Time1 - pcevent.Time1), anodeE_MeV, pmlabel);
|
plotter->Fill2D(rx + "_dEgasCalib_vs_dT" + ejtag + sfx, 500, -2000, 2000, 800, 0, 0.6, (sievent.Time1 - pcevent.Time1), anodeE_MeV, pmlabel);
|
||||||
|
plotter->Fill2D(rx + "_dEgasCalibCathode_vs_dT" + ejtag + sfx, 500, -2000, 2000, 800, 0, 0.6, (sievent.Time1 - pcevent.Time1), cathodeE_MeV, pmlabel);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dt_rf_mcp > -900000000)
|
if (dt_rf_mcp > -900000000)
|
||||||
|
|
@ -4072,8 +4075,6 @@ static void reaction_ax_core(HistPlotter *plotter, const std::vector<Event> &Si_
|
||||||
plotter->Fill1D(rx + "_VertexReconZ" + sfx, 800, -400, 400, vertex_z, pmlabel);
|
plotter->Fill1D(rx + "_VertexReconZ" + sfx, 800, -400, 400, vertex_z, pmlabel);
|
||||||
|
|
||||||
forEachTier(topo1, topo2, methodGroup, plot_with_tag);
|
forEachTier(topo1, topo2, methodGroup, plot_with_tag);
|
||||||
if (trueProton)
|
|
||||||
plot_with_tag("trueProton"); // clean, alpha-free proton sub-sample
|
|
||||||
|
|
||||||
// Gas segmentation validation
|
// Gas segmentation validation
|
||||||
PCCollect pcc = pcCollectionPath(r_rhoMin_fix, sievent.pos);
|
PCCollect pcc = pcCollectionPath(r_rhoMin_fix, sievent.pos);
|
||||||
|
|
@ -4095,7 +4096,7 @@ static void reaction_ax_core(HistPlotter *plotter, const std::vector<Event> &Si_
|
||||||
plotter->Fill2D(rx + "_dEgasRaw_vs_VertexZ" + ejtag + sfx, 800, -400, 400, 800, 0, 20000, vertex_z, anodeE, pmlabel);
|
plotter->Fill2D(rx + "_dEgasRaw_vs_VertexZ" + ejtag + sfx, 800, -400, 400, 800, 0, 20000, vertex_z, anodeE, pmlabel);
|
||||||
plotter->Fill2D(rx + "_dEgasRaw_vs_theta" + ejtag + sfx, 180, 0, 180, 800, 0, 20000, theta * 180 / M_PI, anodeE, pmlabel);
|
plotter->Fill2D(rx + "_dEgasRaw_vs_theta" + ejtag + sfx, 180, 0, 180, 800, 0, 20000, theta * 180 / M_PI, anodeE, pmlabel);
|
||||||
plotter->Fill2D(rx + "_dEgasCalib_vs_theta" + ejtag + sfx, 360, 0, 180, 800, 0, 0.6, theta * 180 / M_PI, anodeE_MeV, pmlabel);
|
plotter->Fill2D(rx + "_dEgasCalib_vs_theta" + ejtag + sfx, 360, 0, 180, 800, 0, 0.6, theta * 180 / M_PI, anodeE_MeV, pmlabel);
|
||||||
plotter->Fill2D(rx + "_dEgasCalib_vs_phi" + ejtag + sfx, 90, -200, 200, 800, 0, 0.6, phi * 180 / M_PI, anodeE_MeV, pmlabel);
|
plotter->Fill2D(rx + "_dEgasCalib_vs_phi" + ejtag + sfx, 90, -180, 180, 800, 0, 0.6, phi * 180 / M_PI, anodeE_MeV, pmlabel);
|
||||||
// if (anodeCh >= 0)
|
// if (anodeCh >= 0)
|
||||||
// plotter->Fill2D(rx + "_dEgasCalib_vs_E" + ejtag + sfx + "_anode" + pad2(anodeCh), 400, 0, ef_max, 800, 0, 0.6, sievent.Energy1, anodeE_MeV, pmlabel);
|
// plotter->Fill2D(rx + "_dEgasCalib_vs_E" + ejtag + sfx + "_anode" + pad2(anodeCh), 400, 0, ef_max, 800, 0, 0.6, sievent.Energy1, anodeE_MeV, pmlabel);
|
||||||
plotter->Fill2D(rx + "_dEgasCalib_vs_Ex" + ejtag + sfx, 600, -10, 20, 800, 0, 0.6, Ex, anodeE_MeV, pmlabel);
|
plotter->Fill2D(rx + "_dEgasCalib_vs_Ex" + ejtag + sfx, 600, -10, 20, 800, 0, 0.6, Ex, anodeE_MeV, pmlabel);
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ export -f run_once
|
||||||
export DATASET="17F"
|
export DATASET="17F"
|
||||||
export PREFIX="Run_"
|
export PREFIX="Run_"
|
||||||
export OUT_DIR="Output_17F"
|
export OUT_DIR="Output_17F"
|
||||||
export source_vertex=-57.28
|
export source_vertex=-200.0
|
||||||
export CATHODE_GAIN=1
|
export CATHODE_GAIN=1
|
||||||
# A1C1 cfrac low-band fold + z autocal (see TrackRecon.C Begin()). Defaults are the
|
# A1C1 cfrac low-band fold + z autocal (see TrackRecon.C Begin()). Defaults are the
|
||||||
# 17F values; override here to re-tune without recompiling.
|
# 17F values; override here to re-tune without recompiling.
|
||||||
|
|
|
||||||
16
run_27Al.sh
16
run_27Al.sh
|
|
@ -23,8 +23,8 @@ process_run() {
|
||||||
local infile="../ANASEN_analysis/data/${DATASET}_Data/${prefix}${wrun}_mapped.root"
|
local infile="../ANASEN_analysis/data/${DATASET}_Data/${prefix}${wrun}_mapped.root"
|
||||||
|
|
||||||
# Dynamically point to the correct output directory for this X/Y iteration
|
# Dynamically point to the correct output directory for this X/Y iteration
|
||||||
# local current_out_dir="Output_27Al_X${BEAM_AXIS_X}_Y${BEAM_AXIS_Y}"
|
|
||||||
local current_out_dir="Output_27Al"
|
local current_out_dir="Output_27Al"
|
||||||
|
# local current_out_dir="Output_27Al_X${BEAM_AXIS_X}_Y${BEAM_AXIS_Y}"
|
||||||
local out="${current_out_dir}/results_run${wrun}.root"
|
local out="${current_out_dir}/results_run${wrun}.root"
|
||||||
|
|
||||||
root -q -l -b -x "$infile" \
|
root -q -l -b -x "$infile" \
|
||||||
|
|
@ -47,9 +47,9 @@ export -f process_run
|
||||||
# BEAM_AXIS_Y=$y
|
# BEAM_AXIS_Y=$y
|
||||||
|
|
||||||
# Define and create a clean directory name BEFORE running parallel tasks
|
# Define and create a clean directory name BEFORE running parallel tasks
|
||||||
# CURRENT_OUT_DIR="Output_27Al_X${BEAM_AXIS_X}_Y${BEAM_AXIS_Y}"
|
|
||||||
CURRENT_OUT_DIR="Output_27Al"
|
CURRENT_OUT_DIR="Output_27Al"
|
||||||
# CURRENT_OUT_DIR="Output_27Al_run_48"
|
# CURRENT_OUT_DIR="Output_27Al_X${BEAM_AXIS_X}_Y${BEAM_AXIS_Y}"
|
||||||
|
rm -f ${OUT_DIR}/*.root
|
||||||
mkdir -p "$CURRENT_OUT_DIR"
|
mkdir -p "$CURRENT_OUT_DIR"
|
||||||
|
|
||||||
echo "Running Eloss.py with a scaling parameter of $DEDX_SCALE"
|
echo "Running Eloss.py with a scaling parameter of $DEDX_SCALE"
|
||||||
|
|
@ -57,9 +57,11 @@ export -f process_run
|
||||||
python3 eloss_calculations/Eloss.py
|
python3 eloss_calculations/Eloss.py
|
||||||
|
|
||||||
echo "Starting parallel processing..."
|
echo "Starting parallel processing..."
|
||||||
time parallel --bar -j 10 process_run ::: {24..41}
|
time parallel --bar -j 12 process_run ::: {24..41} 44 45 46 {50..59}
|
||||||
time parallel --bar -j 10 process_run ::: 44 45 46 {50..59}
|
# time parallel --bar -j 10 process_run ::: {24..41}
|
||||||
# time parallel --bar -j 10 process_run ::: 48 # pc without coincidence
|
# time parallel --bar -j 10 process_run ::: 44 45 46 {50..59}
|
||||||
|
time parallel --bar -j 1 process_run ::: 48 # pc without coincidence
|
||||||
|
mv "${CURRENT_OUT_DIR}/results_run048.root" "Output_27Al_run48/."
|
||||||
# time parallel --bar -j 4 process_run ::: 62 63 66 67 68
|
# time parallel --bar -j 4 process_run ::: 62 63 66 67 68
|
||||||
# time parallel --bar -j 1 process_run ::: 73
|
# time parallel --bar -j 1 process_run ::: 73
|
||||||
# time parallel --bar -j 1 process_run ::: 74
|
# time parallel --bar -j 1 process_run ::: 74
|
||||||
|
|
@ -67,7 +69,7 @@ export -f process_run
|
||||||
|
|
||||||
echo "Merging files..."
|
echo "Merging files..."
|
||||||
# Fixed: Safely merge using the clean directory variable (added -f to overwrite if re-running)
|
# Fixed: Safely merge using the clean directory variable (added -f to overwrite if re-running)
|
||||||
hadd -k -f -j 4 "${CURRENT_OUT_DIR}/output_27Al.root" "${CURRENT_OUT_DIR}/results_run"*.root
|
hadd -k -f -j 4 "${CURRENT_OUT_DIR}/Output_27Al.root" "${CURRENT_OUT_DIR}/results_run"*.root
|
||||||
# done
|
# done
|
||||||
# done
|
# done
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -70,7 +70,7 @@ if [[ 1 -eq 1 ]]; then
|
||||||
unset CATHODE_GAIN
|
unset CATHODE_GAIN
|
||||||
unset timecut_low
|
unset timecut_low
|
||||||
unset pressure_in_torr
|
unset pressure_in_torr
|
||||||
exit
|
# exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# --- Block 4: 17F Alpha+Gas Runs (18-21) ---
|
# --- Block 4: 17F Alpha+Gas Runs (18-21) ---
|
||||||
|
|
@ -102,8 +102,8 @@ if [[ 1 -eq 1 ]]; then
|
||||||
echo "Starting parallel processing for 27Al proton runs..."
|
echo "Starting parallel processing for 27Al proton runs..."
|
||||||
|
|
||||||
# process_run 18
|
# process_run 18
|
||||||
parallel --bar -j 8 process_run ::: 15 {17..22}
|
# parallel --bar -j 8 process_run ::: 15 {17..22}
|
||||||
# parallel --bar -j 8 process_run ::: {17..22}
|
parallel --bar -j 8 process_run ::: {17..22}
|
||||||
hadd -j 4 -k ${OUT_DIR}/Al_protons.root ${OUT_DIR}/results_run0{15..22}.root
|
hadd -j 4 -k ${OUT_DIR}/Al_protons.root ${OUT_DIR}/results_run0{15..22}.root
|
||||||
unset CATHODE_GAIN
|
unset CATHODE_GAIN
|
||||||
# exit
|
# exit
|
||||||
|
|
|
||||||
|
|
@ -48,6 +48,7 @@
|
||||||
// Call, now just: rootFile, axis labels, and the drawing knobs --
|
// Call, now just: rootFile, axis labels, and the drawing knobs --
|
||||||
//
|
//
|
||||||
// root -l -b -q 'scratch/overlay_2d.C("Output_27Al/output_27Al.root", "Tracked Beam Energy (MeV)", "Kinematic Energy (MeV)", 2, 2, 2.0)'
|
// root -l -b -q 'scratch/overlay_2d.C("Output_27Al/output_27Al.root", "Tracked Beam Energy (MeV)", "Kinematic Energy (MeV)", 2, 2, 2.0)'
|
||||||
|
// root -l -b -q 'scratch/overlay_2d.C("Output_27Al/output_27Al.root", "Tracked Beam Energy (MeV)", "Kinematic Energy (MeV)")'
|
||||||
|
|
||||||
#include "TFile.h"
|
#include "TFile.h"
|
||||||
#include "TH2.h"
|
#include "TH2.h"
|
||||||
|
|
@ -59,7 +60,7 @@
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
void overlay_2d(TString rootFile, TString xAxisLabel, TString yAxisLabel,
|
void overlay_2d(TString rootFile, TString xAxisLabel, TString yAxisLabel,
|
||||||
int rebinX = 8, int rebinY = 8, double minz = 5.0)
|
int rebinX = 4, int rebinY = 4, double minz = 8.0)
|
||||||
{
|
{
|
||||||
gROOT->SetStyle("Plain");
|
gROOT->SetStyle("Plain");
|
||||||
gStyle->SetOptStat(0);
|
gStyle->SetOptStat(0);
|
||||||
|
|
@ -67,7 +68,7 @@ void overlay_2d(TString rootFile, TString xAxisLabel, TString yAxisLabel,
|
||||||
// ---- Hardcoded selection: edit these to choose what to plot ----
|
// ---- Hardcoded selection: edit these to choose what to plot ----
|
||||||
TString reaction = "m27Alax"; // reaction tag, e.g. "m27Alax", "m17Fax"
|
TString reaction = "m27Alax"; // reaction tag, e.g. "m27Alax", "m17Fax"
|
||||||
TString ejtag = "p"; // ejectile: "p" (proton) or "a" (alpha)
|
TString ejtag = "p"; // ejectile: "p" (proton) or "a" (alpha)
|
||||||
TString topology = "a2c0"; // e.g. "a1c0", "a1c1", "a1c2fix", "a2c0", "a1c1c2"
|
TString topology = "a1c1_inband"; // e.g. "a1c0", "a1c1", "a1c2fix", "a2c0", "a1c1c2"
|
||||||
TString detector = "sx3"; // "sx3" or "qqq"
|
TString detector = "sx3"; // "sx3" or "qqq"
|
||||||
|
|
||||||
// Excited states to overlay, in the same order as labels[]/xlo[]/xhi[]
|
// Excited states to overlay, in the same order as labels[]/xlo[]/xhi[]
|
||||||
|
|
@ -75,14 +76,16 @@ void overlay_2d(TString rootFile, TString xAxisLabel, TString yAxisLabel,
|
||||||
// note 3498's tag is lowercase "kev" (TrackRecon.C:4028), unlike every
|
// note 3498's tag is lowercase "kev" (TrackRecon.C:4028), unlike every
|
||||||
// other state's "keV". 3774 keV is deliberately left out (too close
|
// other state's "keV". 3774 keV is deliberately left out (too close
|
||||||
// to 3498, spin-parity predicts it's weaker anyway).
|
// to 3498, spin-parity predicts it's weaker anyway).
|
||||||
TString states[] = {"GS", "2235keV", "3498kev", "4809keV", "5614keV", "6550keV"};
|
TString states[] = {"GS", "2235keV", "3498keV", "4810keV", "6550keV"};
|
||||||
TString labels[] = {"Ground State", "2.235 MeV", "3.498 MeV",
|
TString labels[] = {"Ground State", "2.235 MeV", "3.498 MeV",
|
||||||
"4.809 MeV", "5.614 MeV", "6.550 MeV"};
|
"4.810 MeV", "6.550 MeV"};
|
||||||
|
|
||||||
// Per-state display window (MeV), same order as states[] above.
|
// Per-state display window (MeV), same order as states[] above.
|
||||||
// See the header comment for why these are currently a no-op.
|
// See the header comment for why these are currently a no-op.
|
||||||
double xlo[] = {0, 4, 12, 24, 36, 42};
|
// double xlo[] = {0, 4, 12, 24, 36};
|
||||||
double xhi[] = {4, 12, 24, 36, 42, 90};
|
// double xhi[] = {4, 12, 24, 36, 90};
|
||||||
|
double xlo[] = {0, 4, 16, 28, 36};
|
||||||
|
double xhi[] = {4, 16, 28, 36, 90};
|
||||||
|
|
||||||
const size_t nStates = sizeof(states) / sizeof(states[0]);
|
const size_t nStates = sizeof(states) / sizeof(states[0]);
|
||||||
if (sizeof(labels) / sizeof(labels[0]) != nStates ||
|
if (sizeof(labels) / sizeof(labels[0]) != nStates ||
|
||||||
|
|
@ -94,8 +97,18 @@ void overlay_2d(TString rootFile, TString xAxisLabel, TString yAxisLabel,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Standard ANASEN color sequence
|
// Custom 12-color set (named ROOT colors + hex via TColor::GetColor), not the
|
||||||
int colors[] = {kBlack, kRed + 1, kAzure + 2, kGreen + 2, kMagenta + 1};
|
// ANASEN colors[40] sequence in TrackRecon.C -- 12 distinct colors is plenty of
|
||||||
|
// headroom for however many states get overlaid here without collisions.
|
||||||
|
int colors[] = {kBlack, kRed + 1, kAzure + 2, kGreen + 2, kMagenta + 1,
|
||||||
|
TColor::GetColor("#3f90da"),
|
||||||
|
TColor::GetColor("#bc1e00"),
|
||||||
|
kGreen + 2,
|
||||||
|
TColor::GetColor("#832db5"),
|
||||||
|
kPink - 7,
|
||||||
|
TColor::GetColor("#e76300"),
|
||||||
|
TColor::GetColor("#b8ab6f")};
|
||||||
|
const int nColors = sizeof(colors) / sizeof(colors[0]);
|
||||||
std::vector<TH2 *> hists;
|
std::vector<TH2 *> hists;
|
||||||
std::vector<TString> usedLabels;
|
std::vector<TString> usedLabels;
|
||||||
|
|
||||||
|
|
@ -144,6 +157,12 @@ void overlay_2d(TString rootFile, TString xAxisLabel, TString yAxisLabel,
|
||||||
hists[i]->SetMinimum(minz);
|
hists[i]->SetMinimum(minz);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
double globalMax = 0;
|
||||||
|
for (size_t i = 0; i < hists.size(); i++)
|
||||||
|
globalMax = std::max(globalMax, hists[i]->GetMaximum());
|
||||||
|
for (size_t i = 0; i < hists.size(); i++)
|
||||||
|
hists[i]->SetMaximum(globalMax);
|
||||||
|
|
||||||
TCanvas *c = new TCanvas("c", "", 1800, 1800);
|
TCanvas *c = new TCanvas("c", "", 1800, 1800);
|
||||||
c->SetLeftMargin(0.15);
|
c->SetLeftMargin(0.15);
|
||||||
c->SetBottomMargin(0.15);
|
c->SetBottomMargin(0.15);
|
||||||
|
|
@ -152,7 +171,15 @@ void overlay_2d(TString rootFile, TString xAxisLabel, TString yAxisLabel,
|
||||||
c->SetGridx(1);
|
c->SetGridx(1);
|
||||||
c->SetGridy(1);
|
c->SetGridy(1);
|
||||||
|
|
||||||
TLegend *leg = new TLegend(0.65, 0.75, 0.9, 0.9);
|
// Box height scales with the number of series instead of a fixed constant --
|
||||||
|
// at SetTextSize(0.03) a fixed 0.15 NDC-tall box only gives each of 6 rows
|
||||||
|
// 0.025 NDC, less than the text height itself, which is what made the legend
|
||||||
|
// look crowded. 0.045 NDC/row leaves real padding and stays correctly sized
|
||||||
|
// for however many states are overlaid.
|
||||||
|
const double legEntryHeight = 0.045;
|
||||||
|
const double legY2 = 0.9;
|
||||||
|
double legY1 = legY2 - legEntryHeight * hists.size();
|
||||||
|
TLegend *leg = new TLegend(0.65, legY1, 0.9, legY2);
|
||||||
leg->SetBorderSize(1);
|
leg->SetBorderSize(1);
|
||||||
leg->SetFillStyle(1001); // Solid background so grid doesn't bleed through
|
leg->SetFillStyle(1001); // Solid background so grid doesn't bleed through
|
||||||
leg->SetFillColor(kWhite);
|
leg->SetFillColor(kWhite);
|
||||||
|
|
@ -160,7 +187,12 @@ void overlay_2d(TString rootFile, TString xAxisLabel, TString yAxisLabel,
|
||||||
|
|
||||||
for (size_t i = 0; i < hists.size(); i++)
|
for (size_t i = 0; i < hists.size(); i++)
|
||||||
{
|
{
|
||||||
hists[i]->SetFillColor(colors[i % 5]);
|
int color = colors[i % nColors];
|
||||||
|
hists[i]->SetMarkerColor(color);
|
||||||
|
hists[i]->SetLineColor(color);
|
||||||
|
hists[i]->SetFillColor(color);
|
||||||
|
hists[i]->SetFillStyle(1001); // solid fill for the "box" boxes below --
|
||||||
|
// "Plain" style's default fill is hollow
|
||||||
if (i == 0)
|
if (i == 0)
|
||||||
{
|
{
|
||||||
hists[i]->SetTitle("");
|
hists[i]->SetTitle("");
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user