modified: TrackRecon.C implemented new energy calibration paradigm for the PC and some other minor changes
modified: pc_energy_calibration.dat modified: pccal/fit_pc_energy_calibration.C modified: run_27Al.sh
This commit is contained in:
parent
00c507e0ac
commit
07e30a5ddd
78
TrackRecon.C
78
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,
|
||||||
onwire_analysis = true,
|
onwire_analysis = true,
|
||||||
diagnostic_eplots = false,
|
diagnostic_eplots = false,
|
||||||
diagnostic_tplots = true,
|
diagnostic_tplots = true,
|
||||||
|
|
@ -55,11 +55,12 @@ bool process_alpha_proton_scattering = false,
|
||||||
source_run = false;
|
source_run = false;
|
||||||
|
|
||||||
// --- Geometry, Calibration, & Model Variables ---
|
// --- Geometry, Calibration, & Model Variables ---
|
||||||
|
// z_entrance = -174.3 - 9.7 - 100.0,
|
||||||
|
// new measurement of the chamber length puts the chamber at
|
||||||
|
// 1175mm instead of 1105, plus some part of the window actually lies outside the chamber
|
||||||
double source_vertex = 53.0,
|
double source_vertex = 53.0,
|
||||||
// z_entrance = -174.3 - 9.7 - 100.0,
|
z_entrance = -174.3 - 9.7 - 270.0,
|
||||||
z_entrance = -174.3 - 9.7 - 270.0, // new measurement of the chamber length puts the chamber at
|
dither_sigma = 8.0,
|
||||||
// 1175mm instead of 1105, plus some part of the window actually lies outside the chamber
|
|
||||||
dither_sigma = 8.0,
|
|
||||||
dither_sigma_c0 = 16.0,
|
dither_sigma_c0 = 16.0,
|
||||||
cathode_gain = 1.0,
|
cathode_gain = 1.0,
|
||||||
a1c1_cfrac_split = 0.0,
|
a1c1_cfrac_split = 0.0,
|
||||||
|
|
@ -114,9 +115,6 @@ inline PCPath pcPath(const TVector3 &vtx, const TVector3 &si)
|
||||||
return {true, dl, a, a - dl};
|
return {true, dl, a, a - dl};
|
||||||
}
|
}
|
||||||
|
|
||||||
// Charge-collection region, guard wires -> cathode. The track crosses these outward-bound
|
|
||||||
// (vtx -> guard -> anode -> cathode -> si), so measured back from the Si end the guard is
|
|
||||||
// the farther surface: guard_cm > cathode_cm and thick_cm = guard_cm - cathode_cm.
|
|
||||||
struct PCCollect
|
struct PCCollect
|
||||||
{
|
{
|
||||||
bool ok;
|
bool ok;
|
||||||
|
|
@ -133,10 +131,6 @@ inline PCCollect pcCollectionPath(const TVector3 &vtx, const TVector3 &si)
|
||||||
return {true, dl, g, g - dl};
|
return {true, dl, g, g - dl};
|
||||||
}
|
}
|
||||||
|
|
||||||
double ejectile_z_deut = -220.0; // vertex_z below this -> deuteron
|
|
||||||
double ejectile_e_alpha = 2000.0; // PC anode energy above this -> alpha
|
|
||||||
// Per-ejectile (ejectile mass, recoil mass) for a reaction's (a,a)/(a,d)/(a,p)
|
|
||||||
// channels, passed into reaction_aa_core so the right Kinematics is built.
|
|
||||||
struct AAEjectileMasses
|
struct AAEjectileMasses
|
||||||
{
|
{
|
||||||
double m_a, m_ra; // alpha ejectile, recoil
|
double m_a, m_ra; // alpha ejectile, recoil
|
||||||
|
|
@ -471,7 +465,6 @@ double sx3RightGain[24][4] = {{1.}};
|
||||||
double pcSlope[48];
|
double pcSlope[48];
|
||||||
double pcIntercept[48];
|
double pcIntercept[48];
|
||||||
double pcEnergySlope[48];
|
double pcEnergySlope[48];
|
||||||
double pcEnergyIntercept[48];
|
|
||||||
bool pcEnergyCalibLoaded = false;
|
bool pcEnergyCalibLoaded = false;
|
||||||
|
|
||||||
HistPlotter *plotter;
|
HistPlotter *plotter;
|
||||||
|
|
@ -664,7 +657,6 @@ void TrackRecon::Begin(TTree * /*tree*/)
|
||||||
for (int i = 0; i < 48; i++)
|
for (int i = 0; i < 48; i++)
|
||||||
{
|
{
|
||||||
pcEnergySlope[i] = 1.0;
|
pcEnergySlope[i] = 1.0;
|
||||||
pcEnergyIntercept[i] = 0.0;
|
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
std::ifstream pcEnergyFile("pc_energy_calibration.dat");
|
std::ifstream pcEnergyFile("pc_energy_calibration.dat");
|
||||||
|
|
@ -680,7 +672,6 @@ void TrackRecon::Begin(TTree * /*tree*/)
|
||||||
if (index >= 0 && index <= 47)
|
if (index >= 0 && index <= 47)
|
||||||
{
|
{
|
||||||
pcEnergySlope[index] = slope;
|
pcEnergySlope[index] = slope;
|
||||||
pcEnergyIntercept[index] = intercept;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
pcEnergyFile.close();
|
pcEnergyFile.close();
|
||||||
|
|
@ -853,9 +844,11 @@ inline void pcEnergyCalibrationAccumulate(const std::vector<Event> &PC_Events,
|
||||||
if (!std::isfinite(E_entry) || E_entry <= 0.0 ||
|
if (!std::isfinite(E_entry) || E_entry <= 0.0 ||
|
||||||
!std::isfinite(E_exit) || E_exit < 0.0 || E_entry <= E_exit)
|
!std::isfinite(E_exit) || E_exit < 0.0 || E_entry <= E_exit)
|
||||||
continue;
|
continue;
|
||||||
if (pcevent.Anodech >= 0 && pcevent.Anodech < 24)
|
if (pcevent.multi2 >= 1 && pcevent.Anodech >= 0 && pcevent.Anodech < 24)
|
||||||
pcCalibData[pcevent.Anodech].push_back({pcevent.Energy1, E_entry - E_exit});
|
pcCalibData[pcevent.Anodech].push_back({pcevent.Energy1, E_entry - E_exit});
|
||||||
|
// cathodes are only there to be a relative gain match as opposed to a "true" calibration
|
||||||
|
if (pcevent.multi2 == 1 && pcevent.Cathodech >= 0 && pcevent.Cathodech < 24)
|
||||||
|
pcCalibData[24 + pcevent.Cathodech].push_back({pcevent.Energy2, E_entry - E_exit});
|
||||||
// Si-coincidence supplement: for each matching Si event, project the pcz using the
|
// Si-coincidence supplement: for each matching Si event, project the pcz using the
|
||||||
// z-dependent anode radius (FIX 2: z_to_crossover_rho, not a flat 37 mm) as a sanity
|
// z-dependent anode radius (FIX 2: z_to_crossover_rho, not a flat 37 mm) as a sanity
|
||||||
// gate, then take the collection-region dE via pcCollectionPath(source, si).
|
// gate, then take the collection-region dE via pcCollectionPath(source, si).
|
||||||
|
|
@ -886,8 +879,10 @@ inline void pcEnergyCalibrationAccumulate(const std::vector<Event> &PC_Events,
|
||||||
double Ex = evalElossForward(MeV_to_cm_spl, cm_to_MeV_spl, pc_calib_alpha_source_mev, d_ex);
|
double Ex = evalElossForward(MeV_to_cm_spl, cm_to_MeV_spl, pc_calib_alpha_source_mev, d_ex);
|
||||||
if (!std::isfinite(Ee) || Ee <= 0.0 || !std::isfinite(Ex) || Ex < 0.0 || Ee <= Ex)
|
if (!std::isfinite(Ee) || Ee <= 0.0 || !std::isfinite(Ex) || Ex < 0.0 || Ee <= Ex)
|
||||||
return;
|
return;
|
||||||
if (pcevent.Anodech >= 0 && pcevent.Anodech < 24)
|
if (pcevent.multi2 >= 1 && pcevent.Anodech >= 0 && pcevent.Anodech < 24)
|
||||||
pcCalibData[pcevent.Anodech].push_back({pcevent.Energy1, Ee - Ex});
|
pcCalibData[pcevent.Anodech].push_back({pcevent.Energy1, Ee - Ex});
|
||||||
|
if (pcevent.multi2 == 1 && pcevent.Cathodech >= 0 && pcevent.Cathodech < 24)
|
||||||
|
pcCalibData[24 + pcevent.Cathodech].push_back({pcevent.Energy2, Ee - Ex});
|
||||||
};
|
};
|
||||||
for (const auto &qqqevent : QQQ_Events)
|
for (const auto &qqqevent : QQQ_Events)
|
||||||
considerSi(qqqevent, TMath::Pi() / 4.0);
|
considerSi(qqqevent, TMath::Pi() / 4.0);
|
||||||
|
|
@ -1007,7 +1002,7 @@ inline void pcEnergyCalibrationAccumulateProton(const std::vector<Event> &PC_Eve
|
||||||
beam_energy_at_vertex = applyTaFoilEloss(beam_energy_at_vertex, vertex.Z());
|
beam_energy_at_vertex = applyTaFoilEloss(beam_energy_at_vertex, vertex.Z());
|
||||||
if (beam_energy_at_vertex <= 0.0)
|
if (beam_energy_at_vertex <= 0.0)
|
||||||
return;
|
return;
|
||||||
apkin_a.setValues(mass_1H, mass_4He, mass_4He, mass_1H, beam_energy_at_vertex);
|
apkin_a.setValues(mass_1H, mass_4He, mass_4He, mass_1H, beam_energy_at_vertex / mass_1H);
|
||||||
|
|
||||||
double predicted_alpha_E = predictElasticEnergy(apkin_a, theta * 180.0 / M_PI);
|
double predicted_alpha_E = predictElasticEnergy(apkin_a, theta * 180.0 / M_PI);
|
||||||
if (predicted_alpha_E <= 0.0)
|
if (predicted_alpha_E <= 0.0)
|
||||||
|
|
@ -1033,6 +1028,8 @@ inline void pcEnergyCalibrationAccumulateProton(const std::vector<Event> &PC_Eve
|
||||||
return;
|
return;
|
||||||
if (pcevent.multi1 == 1 && pcevent.Anodech >= 0 && pcevent.Anodech < 24)
|
if (pcevent.multi1 == 1 && pcevent.Anodech >= 0 && pcevent.Anodech < 24)
|
||||||
pcCalibData[pcevent.Anodech].push_back({pcevent.Energy1, E_entry - E_exit});
|
pcCalibData[pcevent.Anodech].push_back({pcevent.Energy1, E_entry - E_exit});
|
||||||
|
if (pcevent.multi2 == 1 && pcevent.Cathodech >= 0 && pcevent.Cathodech < 24)
|
||||||
|
pcCalibData[24 + pcevent.Cathodech].push_back({pcevent.Energy2, E_entry - E_exit});
|
||||||
};
|
};
|
||||||
|
|
||||||
for (const auto &pcevent : PC_Events)
|
for (const auto &pcevent : PC_Events)
|
||||||
|
|
@ -1624,12 +1621,12 @@ Bool_t TrackRecon::Process(Long64_t entry)
|
||||||
{
|
{
|
||||||
int wi = std::get<0>(w);
|
int wi = std::get<0>(w);
|
||||||
if (wi >= 0 && wi < 24)
|
if (wi >= 0 && wi < 24)
|
||||||
anodeCalibSum += pcEnergySlope[wi] * std::get<1>(w) + pcEnergyIntercept[wi];
|
anodeCalibSum += pcEnergySlope[wi] * std::get<1>(w);
|
||||||
}
|
}
|
||||||
PCEventCalibrated.Energy1 = anodeCalibSum;
|
PCEventCalibrated.Energy1 = anodeCalibSum;
|
||||||
// Cathode uses the single max wire (cpMaxE) -- indexed by z, so it's
|
// Cathode uses the single max wire (cpMaxE) -- indexed by z, so it's
|
||||||
// already phi-consistent; leave it as-is.
|
// already phi-consistent; leave it as-is.
|
||||||
PCEventCalibrated.Energy2 = pcEnergySlope[24 + PCEvent.Cathodech] * cpMaxE + pcEnergyIntercept[24 + PCEvent.Cathodech];
|
PCEventCalibrated.Energy2 = pcEnergySlope[24 + PCEvent.Cathodech] * cpMaxE;
|
||||||
PC_Events_calibrated.push_back(PCEventCalibrated);
|
PC_Events_calibrated.push_back(PCEventCalibrated);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1689,7 +1686,7 @@ Bool_t TrackRecon::Process(Long64_t entry)
|
||||||
{
|
{
|
||||||
int wi = std::get<0>(w);
|
int wi = std::get<0>(w);
|
||||||
if (wi >= 0 && wi < 24)
|
if (wi >= 0 && wi < 24)
|
||||||
anodeCalibSum += pcEnergySlope[wi] * std::get<1>(w) + pcEnergyIntercept[wi];
|
anodeCalibSum += pcEnergySlope[wi] * std::get<1>(w);
|
||||||
}
|
}
|
||||||
Event ev(pc, anodeCalibSum, -1.0, apTSMaxE, -1.0);
|
Event ev(pc, anodeCalibSum, -1.0, apTSMaxE, -1.0);
|
||||||
ev.multi1 = static_cast<int>(aCl.size());
|
ev.multi1 = static_cast<int>(aCl.size());
|
||||||
|
|
@ -1702,10 +1699,10 @@ Bool_t TrackRecon::Process(Long64_t entry)
|
||||||
// Anode-wire calibration point -- source runs only. The fixed alpha-source
|
// Anode-wire calibration point -- source runs only. The fixed alpha-source
|
||||||
// energy is only valid there; proton-run A1C0 has no elastic tag to predict
|
// energy is only valid there; proton-run A1C0 has no elastic tag to predict
|
||||||
// its energy, so it contributes to the display but not the fit.
|
// its energy, so it contributes to the display but not the fit.
|
||||||
if (doPCEnergyCalibration && !ta_foil_run)
|
if (doPCEnergyCalibration && source_run)
|
||||||
{
|
{
|
||||||
TVector3 ray_dir = (pc - source_pos_a1c0).Unit();
|
TVector3 ray_dir = (pc - source_pos_a1c0).Unit();
|
||||||
TVector3 virt_out = source_pos_a1c0 + ray_dir * 120.0;
|
TVector3 virt_out = source_pos_a1c0 + ray_dir * 2000.0;
|
||||||
PCCollect pcc = pcCollectionPath(source_pos_a1c0, virt_out);
|
PCCollect pcc = pcCollectionPath(source_pos_a1c0, virt_out);
|
||||||
if (pcc.ok)
|
if (pcc.ok)
|
||||||
{
|
{
|
||||||
|
|
@ -1920,8 +1917,9 @@ void TrackRecon::Terminate()
|
||||||
if (doPCEnergyCalibration)
|
if (doPCEnergyCalibration)
|
||||||
{
|
{
|
||||||
gSystem->mkdir("pc_calib_raw", kTRUE);
|
gSystem->mkdir("pc_calib_raw", kTRUE);
|
||||||
std::string tag = getenv("RUN_NUMBER") ? std::string("run") + getenv("RUN_NUMBER")
|
std::string runTypeTag = source_run ? "src_" : (ta_foil_run ? "ap_" : "other_");
|
||||||
: dataset + "_pid" + std::to_string(getpid());
|
std::string tag = runTypeTag + (getenv("RUN_NUMBER") ? std::string("run") + getenv("RUN_NUMBER")
|
||||||
|
: dataset + "_pid" + std::to_string(getpid()));
|
||||||
std::string outname = "pc_calib_raw/points_" + tag + ".dat";
|
std::string outname = "pc_calib_raw/points_" + tag + ".dat";
|
||||||
std::ofstream outfile(outname);
|
std::ofstream outfile(outname);
|
||||||
outfile << std::scientific << std::setprecision(6);
|
outfile << std::scientific << std::setprecision(6);
|
||||||
|
|
@ -2054,7 +2052,7 @@ void pcCalibratedHistograms(HistPlotter *plotter, const std::vector<Event> &QQQ_
|
||||||
{
|
{
|
||||||
const std::string topo = "_a" + std::to_string(pcevent.multi1) + "c" + std::to_string(pcevent.multi2);
|
const std::string topo = "_a" + std::to_string(pcevent.multi1) + "c" + std::to_string(pcevent.multi2);
|
||||||
const bool hasCathode = (pcevent.Cathodech >= 0);
|
const bool hasCathode = (pcevent.Cathodech >= 0);
|
||||||
if (hasCathode)
|
if (hasCathode)
|
||||||
plotter->Fill2D("Calib_AnodeE_vs_CathodeE_a1c1andup", 800, 0, 3, 800, 0, 3, pcevent.Energy1, pcevent.Energy2, "hCalibPC");
|
plotter->Fill2D("Calib_AnodeE_vs_CathodeE_a1c1andup", 800, 0, 3, 800, 0, 3, pcevent.Energy1, pcevent.Energy2, "hCalibPC");
|
||||||
for (const std::string &t : {std::string(""), topo})
|
for (const std::string &t : {std::string(""), topo})
|
||||||
{
|
{
|
||||||
|
|
@ -2070,7 +2068,7 @@ void pcCalibratedHistograms(HistPlotter *plotter, const std::vector<Event> &QQQ_
|
||||||
for (const auto &qqqevent : QQQ_Events)
|
for (const auto &qqqevent : QQQ_Events)
|
||||||
{
|
{
|
||||||
plotter->Fill2D("Calib_dE_AnodeE_vs_QQQE" + t, 400, 0, 10, 800, 0, 3, qqqevent.Energy1, pcevent.Energy1, "hCalibPC");
|
plotter->Fill2D("Calib_dE_AnodeE_vs_QQQE" + t, 400, 0, 10, 800, 0, 3, qqqevent.Energy1, pcevent.Energy1, "hCalibPC");
|
||||||
if (hasCathode)
|
if (hasCathode)
|
||||||
plotter->Fill2D("Calib_dE_CathodeE_vs_QQQE" + t, 400, 0, 10, 800, 0, 3, qqqevent.Energy1, pcevent.Energy2, "hCalibPC");
|
plotter->Fill2D("Calib_dE_CathodeE_vs_QQQE" + t, 400, 0, 10, 800, 0, 3, qqqevent.Energy1, pcevent.Energy2, "hCalibPC");
|
||||||
}
|
}
|
||||||
for (const auto &sx3event : SX3_Events)
|
for (const auto &sx3event : SX3_Events)
|
||||||
|
|
@ -4016,17 +4014,19 @@ static void reaction_ax_core(HistPlotter *plotter, const std::vector<Event> &Si_
|
||||||
plot_with_tag("trueProton"); // clean, alpha-free proton sub-sample
|
plot_with_tag("trueProton"); // clean, alpha-free proton sub-sample
|
||||||
|
|
||||||
// Gas segmentation validation
|
// Gas segmentation validation
|
||||||
PCPath pp = pcPath(r_rhoMin_fix, sievent.pos);
|
PCCollect pcc = pcCollectionPath(r_rhoMin_fix, sievent.pos);
|
||||||
if (pp.ok)
|
if (pcc.ok)
|
||||||
{
|
{
|
||||||
double E_an = evalEloss(ej_fwd, ej_inv, sievent.Energy1, pp.anode_cm);
|
double E_gu = evalEloss(ej_fwd, ej_inv, sievent.Energy1, pcc.guard_cm);
|
||||||
double E_ca = evalEloss(ej_fwd, ej_inv, sievent.Energy1, pp.cathode_cm);
|
double E_ca = evalEloss(ej_fwd, ej_inv, sievent.Energy1, pcc.cathode_cm);
|
||||||
plotter->Fill2D(rx + "_dEgas_vs_Ef" + ejtag + sfx, 400, 0, ef_max, 400, 0, 1, Efix, E_an - E_ca, pmlabel);
|
double dE_pred = E_ca - E_gu;
|
||||||
if (anodeE_MeV >= 0.0 && cathodeE_MeV >= 0.0)
|
plotter->Fill2D(rx + "_dEgas_vs_Ef" + ejtag + sfx, 400, 0, ef_max, 400, 0, 2, Efix, dE_pred, pmlabel);
|
||||||
|
if (anodeE_MeV >= 0.0)
|
||||||
|
|
||||||
{
|
{
|
||||||
plotter->Fill2D(rx + "_dEgasCalib_vs_Ef" + ejtag + sfx, 400, 0, ef_max, 800, -2, 2, Efix, anodeE_MeV , pmlabel);
|
plotter->Fill2D(rx + "_dEgasCalib_vs_Ef" + ejtag + sfx, 400, 0, ef_max, 800, 0, 2, Efix, anodeE_MeV, pmlabel);
|
||||||
plotter->Fill2D(rx + "_dEgasCalib_vs_E" + ejtag + sfx, 400, 0, ef_max, 800, -2, 2, sievent.Energy1, anodeE_MeV , pmlabel);
|
plotter->Fill2D(rx + "_dEgasCalib_vs_E" + ejtag + sfx, 400, 0, ef_max, 800, 0, 2, sievent.Energy1, anodeE_MeV, pmlabel);
|
||||||
plotter->Fill2D(rx + "_dEgasPred_vs_dEgasCalib" + ejtag + sfx, 800, -2, 2, 400, 0, 2, anodeE_MeV , E_an - E_ca, pmlabel);
|
plotter->Fill2D(rx + "_dEgasPred_vs_dEgasCalib" + ejtag + sfx, 800, -2, 2, 400, 0, 2, anodeE_MeV, dE_pred, pmlabel);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
@ -4038,10 +4038,10 @@ static void reaction_ax_core(HistPlotter *plotter, const std::vector<Event> &Si_
|
||||||
if (TMath::Abs(sievent.pos.DeltaPhi(pcevent.pos)) > phi_win)
|
if (TMath::Abs(sievent.pos.DeltaPhi(pcevent.pos)) > phi_win)
|
||||||
continue;
|
continue;
|
||||||
double anodeE_MeV = (pcevent.Anodech >= 0 && pcevent.Anodech < 24)
|
double anodeE_MeV = (pcevent.Anodech >= 0 && pcevent.Anodech < 24)
|
||||||
? pcEnergySlope[pcevent.Anodech] * pcevent.Energy1 + pcEnergyIntercept[pcevent.Anodech]
|
? pcEnergySlope[pcevent.Anodech] * pcevent.Energy1
|
||||||
: -1.0;
|
: -1.0;
|
||||||
double cathodeE_MeV = (pcevent.Cathodech >= 0 && pcevent.Cathodech < 24)
|
double cathodeE_MeV = (pcevent.Cathodech >= 0 && pcevent.Cathodech < 24)
|
||||||
? pcEnergySlope[24 + pcevent.Cathodech] * pcevent.Energy2 + pcEnergyIntercept[24 + pcevent.Cathodech]
|
? pcEnergySlope[24 + pcevent.Cathodech] * pcevent.Energy2
|
||||||
: -1.0;
|
: -1.0;
|
||||||
|
|
||||||
if (pcevent.multi2 == 1) // A1C1
|
if (pcevent.multi2 == 1) // A1C1
|
||||||
|
|
|
||||||
|
|
@ -1,48 +1,48 @@
|
||||||
0 1.181280e-04 0.000000e+00
|
0 4.535522e-05 0.000000e+00
|
||||||
1 7.019636e-05 0.000000e+00
|
1 5.025298e-05 0.000000e+00
|
||||||
2 7.051555e-05 0.000000e+00
|
2 6.130634e-05 0.000000e+00
|
||||||
3 7.969780e-05 0.000000e+00
|
3 8.023935e-05 0.000000e+00
|
||||||
4 9.630606e-05 0.000000e+00
|
4 1.042964e-04 0.000000e+00
|
||||||
5 1.113250e-04 0.000000e+00
|
5 1.200345e-04 0.000000e+00
|
||||||
6 6.266591e-05 0.000000e+00
|
6 5.135667e-05 0.000000e+00
|
||||||
7 7.560064e-05 0.000000e+00
|
7 8.180287e-05 0.000000e+00
|
||||||
8 7.904770e-05 0.000000e+00
|
8 1.154879e-04 0.000000e+00
|
||||||
9 1.866785e-05 0.000000e+00
|
9 1.300017e-04 0.000000e+00
|
||||||
10 5.270549e-05 0.000000e+00
|
10 5.827105e-05 0.000000e+00
|
||||||
11 5.115143e-05 0.000000e+00
|
11 5.111969e-05 0.000000e+00
|
||||||
12 3.754198e-05 0.000000e+00
|
12 1.240347e-04 0.000000e+00
|
||||||
13 3.747917e-05 0.000000e+00
|
13 4.269324e-05 0.000000e+00
|
||||||
14 3.904528e-05 0.000000e+00
|
14 4.180434e-05 0.000000e+00
|
||||||
15 3.785797e-05 0.000000e+00
|
15 4.328295e-05 0.000000e+00
|
||||||
16 3.558300e-05 0.000000e+00
|
16 4.171494e-05 0.000000e+00
|
||||||
17 4.164502e-05 0.000000e+00
|
17 4.219351e-05 0.000000e+00
|
||||||
18 5.033098e-05 0.000000e+00
|
18 3.727863e-05 0.000000e+00
|
||||||
19 1.346289e-04 0.000000e+00
|
19 4.998617e-05 0.000000e+00
|
||||||
20 4.098874e-05 0.000000e+00
|
20 4.536467e-05 0.000000e+00
|
||||||
21 3.182742e-05 0.000000e+00
|
21 3.874801e-05 0.000000e+00
|
||||||
22 2.725084e-05 0.000000e+00
|
22 4.024287e-05 0.000000e+00
|
||||||
23 3.143861e-05 0.000000e+00
|
23 4.887808e-05 0.000000e+00
|
||||||
24 7.364520e-05 0.000000e+00
|
24 1.046934e-04 0.000000e+00
|
||||||
25 9.343009e-05 0.000000e+00
|
25 7.684115e-05 0.000000e+00
|
||||||
26 1.013807e-04 0.000000e+00
|
26 6.043595e-05 0.000000e+00
|
||||||
27 1.495574e-04 0.000000e+00
|
27 7.994781e-05 0.000000e+00
|
||||||
28 1.166817e-04 0.000000e+00
|
28 8.082577e-05 0.000000e+00
|
||||||
29 9.196472e-05 0.000000e+00
|
29 6.898208e-05 0.000000e+00
|
||||||
30 1.030198e-04 0.000000e+00
|
30 5.679838e-05 0.000000e+00
|
||||||
31 1.007519e-04 0.000000e+00
|
31 4.793142e-05 0.000000e+00
|
||||||
32 1.026175e-04 0.000000e+00
|
32 4.527797e-05 0.000000e+00
|
||||||
33 8.109499e-05 0.000000e+00
|
33 4.372724e-05 0.000000e+00
|
||||||
34 8.137172e-05 0.000000e+00
|
34 5.379249e-05 0.000000e+00
|
||||||
35 8.502646e-05 0.000000e+00
|
35 6.436627e-05 0.000000e+00
|
||||||
36 1.042813e-04 0.000000e+00
|
36 8.484992e-05 0.000000e+00
|
||||||
37 3.213148e-04 0.000000e+00
|
37 2.910059e-04 0.000000e+00
|
||||||
38 9.069578e-05 0.000000e+00
|
38 8.579354e-05 0.000000e+00
|
||||||
39 1.600775e-04 0.000000e+00
|
39 1.813321e-04 0.000000e+00
|
||||||
40 1.357355e-04 0.000000e+00
|
40 1.334701e-04 0.000000e+00
|
||||||
41 1.812490e-04 0.000000e+00
|
41 1.377625e-04 0.000000e+00
|
||||||
42 1.186314e-04 0.000000e+00
|
42 1.388981e-04 0.000000e+00
|
||||||
43 1.196526e-04 0.000000e+00
|
43 1.036435e-04 0.000000e+00
|
||||||
44 2.486180e-04 0.000000e+00
|
44 2.112629e-04 0.000000e+00
|
||||||
45 8.347962e-05 0.000000e+00
|
45 8.738686e-05 0.000000e+00
|
||||||
46 7.408129e-05 0.000000e+00
|
46 1.238925e-04 0.000000e+00
|
||||||
47 8.388388e-05 0.000000e+00
|
47 1.019485e-04 0.000000e+00
|
||||||
|
|
|
||||||
|
|
@ -209,5 +209,4 @@ void fit_pc_energy_calibration(const std::string& dataset_filter = "")
|
||||||
|
|
||||||
std::cout << "fit_pc_energy_calibration: wrote pc_energy_calibration.dat" << std::endl;
|
std::cout << "fit_pc_energy_calibration: wrote pc_energy_calibration.dat" << std::endl;
|
||||||
std::cout << "fit_pc_energy_calibration: individual high-res PNGs saved to pc_calib_plots/" << std::endl;
|
std::cout << "fit_pc_energy_calibration: individual high-res PNGs saved to pc_calib_plots/" << std::endl;
|
||||||
std::cout << "fit_pc_energy_calibration: global contact sheets saved to pc_calib_anodes.pdf and pc_calib_cathodes.pdf" << std::endl;
|
|
||||||
}
|
}
|
||||||
|
|
@ -40,10 +40,10 @@ export -f process_run
|
||||||
echo "Starting parallel processing..."
|
echo "Starting parallel processing..."
|
||||||
time parallel --bar -j 6 process_run ::: {24..41}
|
time parallel --bar -j 6 process_run ::: {24..41}
|
||||||
time parallel --bar -j 8 process_run ::: {50..59}
|
time parallel --bar -j 8 process_run ::: {50..59}
|
||||||
# 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
|
||||||
# time parallel --bar -j 4 process_run ::: {78..89}
|
time parallel --bar -j 4 process_run ::: {78..89}
|
||||||
|
|
||||||
echo "Merging files..."
|
echo "Merging files..."
|
||||||
hadd -k -j 4 Output_27Al/output_27Al.root Output_27Al/results_run*.root
|
hadd -k -j 4 Output_27Al/output_27Al.root Output_27Al/results_run*.root
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user