1 #include <ecl/calibration/eclMergingCrystalEAlgorithm.h>
2 #include <ecl/dbobjects/ECLCrystalCalib.h>
6 #include "TDirectory.h"
11 using namespace Calibration;
15 m_existingGammaGamma(
"ECLCrystalEnergyGammaGamma"), m_existingMuMu(
"ECLCrystalEnergyMuMu"),
16 m_existing5x5(
"ECLCrystalEnergyee5x5"), m_existing(m_payloadName)
19 "Perform energy calibration of ecl crystals by combining previous values from the DB for different calibrations."
29 ExpRun chosenRun = runs.front();
30 B2INFO(
"merging using the ExpRun (" << chosenRun.second <<
"," << chosenRun.first <<
")");
36 bool allObjectsFound =
true;
39 allObjectsFound =
false;
40 B2ERROR(
"No valid DBObject found for 'ECLCrystalEnergyGammaGamma'");
43 allObjectsFound =
false;
44 B2ERROR(
"No valid DBObject found for 'ECLCrystalEnergyMuMu'");
47 allObjectsFound =
false;
48 B2ERROR(
"No valid DBObject found for 'ECLCrystalEnergyee5x5'");
51 allObjectsFound =
false;
52 B2ERROR(
"No valid DBObject found for 'ECLCrystalEnergy'");
55 if (allObjectsFound) {
56 B2INFO(
"Valid objects found for both 'ECLCrystalEnergy' and 'ECLCrystalEnergyGammaGamma'");
58 B2INFO(
"Exiting with failure");
67 vector<float> existingCalib =
m_existing->getCalibVector();
68 vector<float> existingCalibUnc =
m_existing->getCalibUncVector();
77 if (gammaGammaCalib[ic] > 0.) {
78 newCalib[ic] = gammaGammaCalib[ic];
79 newCalibUnc[ic] = gammaGammaCalibUnc[ic];
81 newCalib[ic] = existingCalib[ic];
82 newCalibUnc[ic] = existingCalibUnc[ic];
88 for (
int ic = 0; ic < 9000; ic += 1000) {
89 B2INFO(ic + 1 <<
" " << existingCalib[ic] <<
" " << existingCalibUnc[ic] <<
" "
90 << gammaGammaCalib[ic] <<
" " << gammaGammaCalibUnc[ic] <<
" "
91 << newCalib[ic] <<
" " << newCalibUnc[ic]);
98 TDirectory* executeDir = gDirectory;
102 TFile hfile(fname,
"recreate");
105 htitle +=
" existing values;cellID";
106 TH1F* existingPayload =
new TH1F(
"existingPayload", htitle,
m_numCrystals, 1, 8737);
109 htitle +=
" new values;cellID";
110 TH1F* newPayload =
new TH1F(
"newPayload", htitle,
m_numCrystals, 1, 8737);
113 htitle +=
" ratio new/old;cellID";
114 TH1F* payloadRatioVsCellID =
new TH1F(
"payloadRatioVsCellID", htitle,
m_numCrystals, 1, 8737);
117 htitle +=
" ratio new/old";
118 TH1F* payloadRatio =
new TH1F(
"payloadRatio", htitle, 200, 0.95, 1.05);
121 existingPayload->SetBinContent(cellID, existingCalib[cellID - 1]);
122 existingPayload->SetBinError(cellID, existingCalibUnc[cellID - 1]);
124 newPayload->SetBinContent(cellID, newCalib[cellID - 1]);
125 newPayload->SetBinError(cellID, newCalibUnc[cellID - 1]);
129 if (abs(existingCalib[cellID - 1]) > 1.0e-12) {
130 ratio = newCalib[cellID - 1] / existingCalib[cellID - 1];
131 float rUnc0 = existingCalibUnc[cellID - 1] / existingCalib[cellID - 1];
133 if (abs(newCalib[cellID - 1]) > 1.0e-12) {rUnc1 = newCalibUnc[cellID - 1] / newCalib[cellID - 1];}
134 ratioUnc = ratio * sqrt(rUnc0 * rUnc0 + rUnc1 * rUnc1);
137 payloadRatioVsCellID->SetBinContent(cellID, ratio);
138 payloadRatioVsCellID->SetBinError(cellID, ratioUnc);
140 payloadRatio->Fill(ratio);
145 B2INFO(
"Debugging histograms written to " << fname);