54 ExpRun chosenRun = runs.front();
55 B2INFO(
"merging using the ExpRun (" << chosenRun.second <<
"," << chosenRun.first <<
")");
64 crystalMapper->initFromDB();
68 bool allObjectsFound =
true;
73 allObjectsFound =
false;
74 B2ERROR(
"No valid DBObject found for 'ECLCrystalTimeOffsetBhabha'");
77 allObjectsFound =
false;
78 B2ERROR(
"No valid DBObject found for 'ECLCrystalTimeOffsetBhabhaGamma'");
81 allObjectsFound =
false;
82 B2ERROR(
"No valid DBObject found for 'ECLCrystalTimeOffsetCosmic'");
87 allObjectsFound =
false;
88 B2ERROR(
"No valid DBObject found for 'ECLReferenceCrystalPerCrateCalib'");
93 allObjectsFound =
false;
94 B2ERROR(
"No valid DBObject found for 'ECLCrateTimeOffset'");
98 if (allObjectsFound) {
99 B2INFO(
"Valid objects found for 'ECLCrystalTimeOffsetBhabha', 'ECLCrystalTimeOffsetBhabhaGamma' and 'ECLCrystalTimeOffsetCosmic')");
100 B2INFO(
"Valid object found for 'ECLReferenceCrystalPerCrateCalib'");
101 B2INFO(
"Valid object found for 'ECLCrateTimeOffset'");
103 B2INFO(
"Exiting with failure");
115 bool minRunNumBool =
false;
116 bool maxRunNumBool =
false;
122 int expNumber = expRun.first;
123 int runNumber = expRun.second;
124 if (!minRunNumBool) {
125 minExpNum = expNumber;
126 minRunNum = runNumber;
127 minRunNumBool =
true;
129 if (!maxRunNumBool) {
130 maxExpNum = expNumber;
131 maxRunNum = runNumber;
132 maxRunNumBool =
true;
134 if (((minRunNum > runNumber) && (minExpNum >= expNumber)) ||
135 (minExpNum > expNumber)) {
136 minExpNum = expNumber;
137 minRunNum = runNumber;
139 if (((maxRunNum < runNumber) && (maxExpNum <= expNumber)) ||
140 (maxExpNum < expNumber))
143 maxExpNum = expNumber;
144 maxRunNum = runNumber;
148 string debugFilenameBase =
"ECLCrystalTimeOffsetMerged";
149 B2INFO(
"debugFilenameBase = " << debugFilenameBase);
150 string runNumsString = string(
"_") + to_string(minExpNum) +
"_" + to_string(minRunNum) + string(
"-") +
151 to_string(maxExpNum) +
"_" + to_string(maxRunNum);
152 string debugFilename = debugFilenameBase + runNumsString + string(
".root");
168 B2INFO(
"Loaded 'ECLCrystalTimeOffset*' calibrations");
173 B2INFO(
"Loaded 'ECLReferenceCrystalPerCrateCalib' calibration");
177 B2INFO(
"Loaded 'ECLCrateTimeOffset' calibration");
191 prevValuesCrys = customPrevCrystalTimeObject->getCalibVector();
192 prevValuesCrysUnc = customPrevCrystalTimeObject->getCalibUncVector();
194 prevBhabhaValuesCrys = customPrevBhabhaCrystalTimeObject->getCalibVector();
195 prevBhabhaValuesCrysUnc = customPrevBhabhaCrystalTimeObject->getCalibUncVector();
198 B2INFO(
"Previous values read from database. Write out for their values for comparison");
200 B2INFO(
"ts custom previous payload: cellID " << ic + 1 <<
" " << prevValuesCrys[ic]);
202 B2INFO(
"Previous bhabha values read from database. Write out for their values for comparison");
204 B2INFO(
"ts custom previous bhabha payload: cellID " << ic + 1 <<
" " << prevBhabhaValuesCrys[ic]);
242 vector<bool> bhabhaGammaCalibGoodQuality(
m_numCrystals,
false);
243 const int firstHighStatsCrysID = 673 - 1;
244 const int lastHighStatsCrysID = 8160 - 1;
253 if (bhabhaCalibUnc[ic] != 0
254 && fabs(bhabhaCalibUnc[ic])*TICKS_TO_NS < 2 and ic >= firstHighStatsCrysID and ic <= lastHighStatsCrysID) {
261 bhabhaCalibGoodQuality[ic] = true ;
272 if (bhabhaGammaCalibUnc[ic] != 0
273 && fabs(bhabhaGammaCalibUnc[ic])*TICKS_TO_NS <
275 bhabhaGammaCalibGoodQuality[ic] = true ;
285 vector<float> cosmicCalibShifted = cosmicCalib;
286 vector<float> cosmicCalibShiftedUnc = cosmicCalibUnc;
288 cosmicCalibShifted[ic] -= crateCalib[ic];
289 int crate_id_from_crystal = crystalMapper->getCrateID(ic + 1);
290 crateCalibShort[crate_id_from_crystal - 1] = crateCalib[ic];
293 for (
int icrate = 0; icrate <
m_numCrates; icrate++) {
294 B2INFO(
"crate time calibration for crate " <<
295 icrate + 1 <<
" = " << crateCalibShort[icrate]);
302 vector<float> meanGoodCrystalCalibPerCrate_bhabha(
m_numCrates, 0);
303 vector<float> meanGoodCrystalCalibPerCrate_cosmic(
m_numCrates, 0);
310 vector<short> numGoodCrystalCalibPerCrate_bhabha(
m_numCrates, 1);
315 for (
int ic_base1 = 1; ic_base1 <=
m_numCrystals; ic_base1++) {
316 int crate_id_from_crystal = crystalMapper->getCrateID(ic_base1);
318 if (!((bhabhaCalib[ic_base1 - 1] == 0) || (! bhabhaCalibGoodQuality[ic_base1 - 1]))) {
319 meanGoodCrystalCalibPerCrate_bhabha[crate_id_from_crystal - 1] += bhabhaCalib[ic_base1 - 1];
320 meanGoodCrystalCalibPerCrate_cosmic[crate_id_from_crystal - 1] += cosmicCalibShifted[ic_base1 - 1];
321 numGoodCrystalCalibPerCrate_bhabha[crate_id_from_crystal - 1]++ ;
326 for (
int icrate = 0; icrate <
m_numCrates; icrate++) {
327 meanGoodCrystalCalibPerCrate_bhabha[icrate] /= numGoodCrystalCalibPerCrate_bhabha[icrate] ;
328 meanGoodCrystalCalibPerCrate_cosmic[icrate] /= numGoodCrystalCalibPerCrate_bhabha[icrate] ;
329 B2INFO(
"Mean bhabha crystal calibration for crate " << icrate + 1 <<
" = " << meanGoodCrystalCalibPerCrate_bhabha[icrate]);
330 B2INFO(
"Mean cosmic crystal calibration for crate " << icrate + 1 <<
" = " << meanGoodCrystalCalibPerCrate_cosmic[icrate]);
331 B2INFO(
"Number of good crystal calibrations for crate" << icrate + 1 <<
" = " << numGoodCrystalCalibPerCrate_bhabha[icrate]);
339 for (
int ic_base1 = 1; ic_base1 <=
m_numCrystals; ic_base1++) {
340 int crate_id_from_crystal = crystalMapper->getCrateID(ic_base1);
341 cosmicCalibShifted[ic_base1 - 1] += meanGoodCrystalCalibPerCrate_bhabha[crate_id_from_crystal - 1] -
342 meanGoodCrystalCalibPerCrate_cosmic[crate_id_from_crystal - 1] ;
359 vector<float> newBhabhaMinusCustomPrevCalib__cid(
m_numCrystals);
360 vector<float> newBhabhaMinusCustomPrevBhabhaCalib__cid(
m_numCrystals);
361 vector<float> newBhabhaMinusCustomPrevCalib;
362 vector<float> newBhabhaMinusCustomPrevBhabhaCalib;
367 B2DEBUG(29,
"Merging crystal " << ic + 1);
368 int crate_id_from_crystal = crystalMapper->getCrateID(ic + 1);
371 bool isRefCrys = false ;
372 for (
int icrate = 0; icrate <
m_numCrates; icrate++) {
373 if (ic + 1 == refCrystalPerCrate[icrate]) {
375 B2INFO(
"Crystal " << ic + 1 <<
" is a reference crystal");
378 B2DEBUG(29,
"Checked reference crystal for crate " << icrate + 1);
380 B2DEBUG(29,
"Checked ref crystal");
382 string whichCalibUsed =
"bhabha";
385 newCalib[ic] = bhabhaCalib[ic];
386 newCalibUnc[ic] = fabs(bhabhaCalibUnc[ic]);
388 double newMinusMerged ;
389 double newMinusBhabha ;
397 ((bhabhaCalib[ic] == 0) || (! bhabhaCalibGoodQuality[ic]))) {
401 if (bhabhaGammaCalib[ic] != 0 || bhabhaGammaCalibGoodQuality[ic]) {
402 newCalib[ic] = bhabhaGammaCalib[ic] ;
403 newCalibUnc[ic] = fabs(bhabhaGammaCalibUnc[ic]);
404 whichCalibUsed =
"bhabhaGamma";
406 newCalib[ic] = cosmicCalibShifted[ic] ;
407 newCalibUnc[ic] = cosmicCalibShiftedUnc[ic];
408 whichCalibUsed =
"cosmic";
411 newMinusMerged = (newCalib[ic] - prevValuesCrys[ic]) * TICKS_TO_NS;
412 newMinusBhabha = (newCalib[ic] - prevBhabhaValuesCrys[ic]) * TICKS_TO_NS;
414 newBhabhaMinusCustomPrevCalib__cid[ic] = newMinusMerged;
415 newBhabhaMinusCustomPrevBhabhaCalib__cid[ic] = newMinusBhabha;
416 newBhabhaMinusCustomPrevCalib.push_back(newMinusMerged);
417 newBhabhaMinusCustomPrevBhabhaCalib.push_back(newMinusBhabha);
420 newMinusMerged = (newCalib[ic] - prevValuesCrys[ic]) * TICKS_TO_NS;
421 newMinusBhabha = (newCalib[ic] - prevBhabhaValuesCrys[ic]) * TICKS_TO_NS;
424 B2INFO(
"Crystal " << ic + 1 <<
", crate " << crate_id_from_crystal <<
425 "::: bhabha = " << bhabhaCalib[ic] <<
"+-" << bhabhaCalibUnc[ic] <<
426 " ticks, rad bhabha = " << bhabhaGammaCalib[ic] <<
"+-" << bhabhaGammaCalibUnc[ic] <<
427 " ticks, cosmic UNshifted = " << cosmicCalib[ic] <<
"+-" << cosmicCalibUnc[ic] <<
428 " ticks, cosmic shifted = " << cosmicCalibShifted[ic] <<
"+-" << cosmicCalibShiftedUnc[ic] <<
429 " ticks. ||| New calib = " << newCalib[ic] <<
" ticks, selected " << whichCalibUsed);
430 B2INFO(
" Crystal " << ic + 1 <<
", pre calib ts = " << prevValuesCrys[ic] <<
431 ", pre calib bhabha ts = " << prevBhabhaValuesCrys[ic] <<
432 " ticks ||| new - pre calib ts = " << newMinusMerged <<
433 ", new - pre calib bhabha ts = " << newMinusBhabha <<
" ns");
442 TDirectory* executeDir = gDirectory;
444 TString fname = debugFilename;
445 TFile hfile(fname,
"recreate");
447 TString htitle =
"ECLCrystalTimeOffsetBhabha;cellID;Bhabha ts values [ticks]";
448 TH1F* bhabhaPayload =
new TH1F(
"bhabhaPayload", htitle,
m_numCrystals, 1, 8737);
450 htitle =
"ECLCrystalTimeOffsetBhabhaGamma;cellID;Radiative bhabha ts values [ticks]";
451 TH1F* bhabhaGammaPayload =
new TH1F(
"bhabhaGammaPayload", htitle,
m_numCrystals, 1, 8737);
453 htitle =
"ECLCrystalTimeOffsetCosmic : unshifted;cellID;Unshifted cosmic ts values [ticks]";
454 TH1F* cosmicPayload =
new TH1F(
"cosmicUnshiftedPayload", htitle,
m_numCrystals, 1, 8737);
456 htitle =
"ECLCrystalTimeOffsetCosmic : shifted;cellID;Shifted cosmic ts values [ticks]";
457 TH1F* cosmicShiftedPayload =
new TH1F(
"cosmicShiftedPayload", htitle,
m_numCrystals, 1, 8737);
459 htitle =
"New ECLCrystalTimeOffset;cellID;New (merged) ts values [ticks]";
460 TH1F* newPayload =
new TH1F(
"newPayload", htitle,
m_numCrystals, 1, 8737);
463 htitle =
"ECLCrystalTimeOffsetBhabha : 'pre-calib' values;cellID;Pre-calibration bhabha ts values [ticks]";
464 TH1F* tsCustomPrevBhabha_payload =
new TH1F(
"tsCustomPrevBhabha_payload", htitle,
m_numCrystals, 1, 8737);
466 htitle =
"ECLCrystalTimeOffset : 'pre-calib' values;cellID;Pre-calibration merged ts values [ticks]";
467 TH1F* tsCustomPrev_payload =
new TH1F(
"tsCustomPrev_payload", htitle,
m_numCrystals, 1, 8737);
471 htitle =
"-Only for crystals where the new bhabha ts value is used-;cellID;ts(new | bhabha) - ts(old = 'pre-calib' | merged) [ns]";
472 TH1F* newBhabhaMinusCustomPrev__cid =
new TH1F(
"newBhabhaMinusCustomPrev__cid", htitle,
m_numCrystals, 1, 8737);
474 htitle =
"-Only for crystals where the new bhabha ts value is used-;cellID;ts(new | bhabha) - ts(old = 'pre-calib' | bhabha) [ns]";
475 TH1F* newBhabhaMinusCustomPrevBhabha__cid =
new TH1F(
"newBhabhaMinusCustomPrevBhabha__cid", htitle,
m_numCrystals, 1, 8737);
477 htitle =
"-Only for crystals where the new bhabha ts value is used-;ts(new | bhabha) - ts(old = 'pre-calib' | merged) [ns];Number of crystals";
478 auto tsNewBhabha_MINUS_tsCustomPrev =
new TH1F(
"TsNewBhabha_MINUS_TsCustomPrev", htitle, 285, -69.5801, 69.5801);
480 htitle =
"-Only for crystals where the new bhabha ts value is used-;ts(new | bhabha) - ts(old = 'pre-calib' | bhabha) [ns];Number of crystals";
481 auto tsNewBhabha_MINUS_tsCustomPrevBhabha =
new TH1F(
"TsNewBhabha_MINUS_TsCustomPrevBhabha", htitle, 285, -69.5801, 69.5801);
485 bhabhaPayload->SetBinContent(cellID, bhabhaCalib[cellID - 1]);
486 bhabhaPayload->SetBinError(cellID, fabs(bhabhaCalibUnc[cellID - 1]));
488 bhabhaGammaPayload->SetBinContent(cellID, bhabhaGammaCalib[cellID - 1]);
489 bhabhaGammaPayload->SetBinError(cellID, fabs(bhabhaGammaCalibUnc[cellID - 1]));
491 cosmicPayload->SetBinContent(cellID, cosmicCalib[cellID - 1]);
492 cosmicPayload->SetBinError(cellID, cosmicCalibUnc[cellID - 1]);
494 cosmicShiftedPayload->SetBinContent(cellID, cosmicCalibShifted[cellID - 1]);
495 cosmicShiftedPayload->SetBinError(cellID, cosmicCalibShiftedUnc[cellID - 1]);
497 newPayload->SetBinContent(cellID, newCalib[cellID - 1]);
498 newPayload->SetBinError(cellID, newCalibUnc[cellID - 1]);
502 newBhabhaMinusCustomPrev__cid->SetBinContent(cellID, newBhabhaMinusCustomPrevCalib__cid[cellID - 1]);
503 newBhabhaMinusCustomPrev__cid->SetBinError(cellID, 0);
505 newBhabhaMinusCustomPrevBhabha__cid->SetBinContent(cellID, newBhabhaMinusCustomPrevBhabhaCalib__cid[cellID - 1]);
506 newBhabhaMinusCustomPrevBhabha__cid->SetBinError(cellID, 0);
509 tsCustomPrev_payload->SetBinContent(cellID, prevValuesCrys[cellID - 1]);
510 tsCustomPrev_payload->SetBinError(cellID, prevValuesCrysUnc[cellID - 1]);
512 tsCustomPrevBhabha_payload->SetBinContent(cellID, prevBhabhaValuesCrys[cellID - 1]);
513 tsCustomPrevBhabha_payload->SetBinError(cellID, fabs(prevBhabhaValuesCrysUnc[cellID - 1]));
518 for (
long unsigned int ib = 0; ib < newBhabhaMinusCustomPrevCalib.size(); ib++) {
519 tsNewBhabha_MINUS_tsCustomPrev->Fill(newBhabhaMinusCustomPrevCalib[ib]);
522 for (
long unsigned int ib = 0; ib < newBhabhaMinusCustomPrevBhabhaCalib.size(); ib++) {
523 tsNewBhabha_MINUS_tsCustomPrevBhabha->Fill(newBhabhaMinusCustomPrevBhabhaCalib[ib]);
531 B2INFO(
"Debugging histograms written to " << fname);