Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions offline/packages/CaloReco/CaloTowerCalib.cc
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,12 @@ int CaloTowerCalib::InitRun(PHCompositeNode *topNode)
}
else
{
if (m_doAbortNoEnergyCalib)
{
std::cout << "CaloTowerCalib::InitRun: No energy calibration found for " << m_calibName << " and abort mode is set. Exiting." << std::endl;
gSystem->Exit(1);
}

calibdir = CDBInterface::instance()->getUrl(default_time_independent_calib);

if (calibdir.empty())
Expand Down Expand Up @@ -151,6 +157,11 @@ int CaloTowerCalib::InitRun(PHCompositeNode *topNode)
}
else
{
if (m_doAbortNoTimeCalib)
{
std::cout << "CaloTowerCalib::InitRun: No time calibration found for " << m_calibName_time << " and abort mode is set. Exiting." << std::endl;
gSystem->Exit(1);
}
m_dotimecalib = false;
Comment on lines +160 to 165
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

m_doAbortNoTimeCalib fires even when time calibration is intentionally disabled.

The ZS calibration block (line 178) is wrapped in if (m_doZScrosscalib), so its abort check is never reached when ZS is disabled. The time calibration block has no equivalent guard. If a user calls set_doCalibOnly(true) (which sets m_dotimecalib = false) and then set_doAbortMissingCalib(true), InitRun will still enter the time calibration block, find an empty CDB URL, and hit gSystem->Exit(1) — even though the time calibration was intentionally turned off.

🐛 Proposed fix: guard the time calibration block analogously to the ZS block
-  if (m_giveDirectURL_time)
+  if (m_dotimecalib && m_giveDirectURL_time)
   {
     calibdir = m_directURL_time;
     std::cout << "CaloTowerCalib::InitRun: Using setted url " << calibdir << std::endl;
     cdbttree_time = new CDBTTree(calibdir);
   }
-  else
+  else if (m_dotimecalib)
   {
     calibdir = CDBInterface::instance()->getUrl(m_calibName_time);
     if (!calibdir.empty())
     {
       cdbttree_time = new CDBTTree(calibdir);
       ...
     }
     else
     {
       if (m_doAbortNoTimeCalib)
       {
         ...
       }
       m_dotimecalib = false;
       ...
     }
   }

if (Verbosity() > 0)
{
Expand Down Expand Up @@ -185,6 +196,11 @@ int CaloTowerCalib::InitRun(PHCompositeNode *topNode)
}
else
{
if (m_doAbortNoZSCalib)
{
std::cout << "CaloTowerCalib::InitRun: No ZS cross calibration found for " << m_calibName_ZScrosscalib << " and abort mode is set. Exiting." << std::endl;
gSystem->Exit(1);
}
m_doZScrosscalib = false;
if (Verbosity() > 0)
{
Expand Down
30 changes: 30 additions & 0 deletions offline/packages/CaloReco/CaloTowerCalib.h
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,32 @@ class CaloTowerCalib : public SubsysReco
}
}

void set_doAbortNoEnergyCalib(bool doAbort = true)
{
m_doAbortNoEnergyCalib = doAbort;
return;
}

void set_doAbortNoTimeCalib(bool doAbort = true)
{
m_doAbortNoTimeCalib = doAbort;
return;
}

void set_doAbortNoZSCalib(bool doAbort = true)
{
m_doAbortNoZSCalib = doAbort;
return;
}

void set_doAbortMissingCalib(bool doAbort = true)
{
m_doAbortNoEnergyCalib = doAbort;
m_doAbortNoTimeCalib = doAbort;
m_doAbortNoZSCalib = doAbort;
return;
}

void set_use_TowerInfov2(bool use) { m_use_TowerInfov2 = use; }

private:
Expand Down Expand Up @@ -125,6 +151,10 @@ class CaloTowerCalib : public SubsysReco
std::string m_directURL_ZScrosscalib = "";
bool m_doZScrosscalib = true;

bool m_doAbortNoEnergyCalib{false};
bool m_doAbortNoTimeCalib{false};
bool m_doAbortNoZSCalib{false};

CDBTTree *cdbttree = nullptr;
CDBTTree *cdbttree_time = nullptr;
CDBTTree *cdbttree_ZScrosscalib = nullptr;
Expand Down
12 changes: 11 additions & 1 deletion offline/packages/CaloReco/CaloTowerStatus.cc
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,11 @@ int CaloTowerStatus::InitRun(PHCompositeNode *topNode)
}
else
{
if (m_doAbortNoChi2)
{
std::cout << "CaloTowerStatus::InitRun: No chi2 calibration found for " << m_calibName_chi2 << " and abort mode is set. Exiting." << std::endl;
gSystem->Exit(1);
}
m_doHotChi2 = false;
if (Verbosity() > 0)
{
Expand Down Expand Up @@ -135,6 +140,11 @@ int CaloTowerStatus::InitRun(PHCompositeNode *topNode)
}
else
{
if (m_doAbortNoTime)
{
std::cout << "CaloTowerStatus::InitRun: No time calibration found for " << m_calibName_time << " and abort mode is set. Exiting." << std::endl;
gSystem->Exit(1);
}
m_doTime = false;
if (Verbosity() > 1)
{
Expand Down Expand Up @@ -164,7 +174,7 @@ int CaloTowerStatus::InitRun(PHCompositeNode *topNode)
{
if (m_doAbortNoHotMap)
{
std::cout << "CaloTowerStatus::InitRun: No hot map.. exiting" << std::endl;
std::cout << "CaloTowerStatus::InitRun: No hot map found for " << m_calibName_hotMap << " and abort mode is set. Exiting." << std::endl;
gSystem->Exit(1);
}
if (use_directURL_hotMap)
Expand Down
19 changes: 19 additions & 0 deletions offline/packages/CaloReco/CaloTowerStatus.h
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,23 @@ class CaloTowerStatus : public SubsysReco
m_doAbortNoHotMap = status;
return;
}
void set_doAbortNoTime(bool status = true)
{
m_doAbortNoTime = status;
return;
}
void set_doAbortNoChi2(bool status = true)
{
m_doAbortNoChi2 = status;
return;
}
void set_doAbortMissingCalib(bool status = true)
{
m_doAbortNoHotMap = status;
m_doAbortNoTime = status;
m_doAbortNoChi2 = status;
return;
}

private:
TowerInfoContainer *m_raw_towers{nullptr};
Expand All @@ -103,6 +120,8 @@ class CaloTowerStatus : public SubsysReco
bool m_doTime{true};
bool m_doHotMap{true};
bool m_doAbortNoHotMap{false};
bool m_doAbortNoTime{false};
bool m_doAbortNoChi2{false};

CaloTowerDefs::DetectorSystem m_dettype{CaloTowerDefs::DETECTOR_INVALID};

Expand Down