From a87985ee04f0f1e471a98273c53bfad4160d3e2f Mon Sep 17 00:00:00 2001
From: Soshi Tsuno <soshi.tsuno@cern.ch>
Date: Sun, 18 Dec 2016 10:34:56 +0100
Subject: [PATCH] Bug fix ATLASRECTS-3778. And fix covarity checks.
 (PixelDigitization-02-03-23)

  * Bug fix ATLASRECTS-3778.
	* Fix covarity checks.
	* Tagging PixelDigitization-02-03-23.
---
 .../python/PixelDigitizationConfig.py         |  1 -
 .../PixelDigitization/src/BichselSimTool.cxx  | 55 +++++--------------
 .../src/PixelBarrelBichselChargeTool.cxx      | 45 ++++++++-------
 .../src/PixelCellDiscriminator.cxx            | 10 +---
 .../src/PixelDigitizationTool.cxx             | 17 ++----
 .../src/PixelNoisyCellGenerator.cxx           | 18 ++----
 .../src/SpecialPixelGenerator.cxx             | 10 +---
 .../src/SurfaceChargesTool.cxx                | 16 +++---
 8 files changed, 60 insertions(+), 112 deletions(-)

diff --git a/InnerDetector/InDetDigitization/PixelDigitization/python/PixelDigitizationConfig.py b/InnerDetector/InDetDigitization/PixelDigitization/python/PixelDigitizationConfig.py
index 47502a73776..718ae7e8347 100644
--- a/InnerDetector/InDetDigitization/PixelDigitization/python/PixelDigitizationConfig.py
+++ b/InnerDetector/InDetDigitization/PixelDigitization/python/PixelDigitizationConfig.py
@@ -232,7 +232,6 @@ def BasicPixelDigitizationTool(name="PixelDigitizationTool", **kwargs):
     # Start of special cosmics tuning:
     if jobproperties.Beam.beamType == "cosmics" :
         kwargs.setdefault("UseComTime", True)
-        kwargs.setdefault("PixelConditionsSummarySvc", "")
     if GeometryFlags.isSLHC():
         LVL1Latency = [255, 255, 255, 255, 255, 16, 255]
         ToTMinCut = [0, 0, 0, 0, 0, 0, 0]
diff --git a/InnerDetector/InDetDigitization/PixelDigitization/src/BichselSimTool.cxx b/InnerDetector/InDetDigitization/PixelDigitization/src/BichselSimTool.cxx
index 0d156fd84dd..709fb2f0a64 100644
--- a/InnerDetector/InDetDigitization/PixelDigitization/src/BichselSimTool.cxx
+++ b/InnerDetector/InDetDigitization/PixelDigitization/src/BichselSimTool.cxx
@@ -53,31 +53,20 @@ BichselSimTool::~BichselSimTool()
 // Initialize
 //----------------------------------------------------------------------
 StatusCode BichselSimTool::initialize() {
-  StatusCode sc = AthAlgTool::initialize();
-  if (sc.isFailure()) {
-    ATH_MSG_FATAL("BichselSimTool::initialize() failed");
-    return sc;
-  } 
-
-  
-  //** define your initialize below **//
+  CHECK(AthAlgTool::initialize());
 
   // random svc
-  if ( m_rndmSvc.retrieve().isFailure() ) {
-    ATH_MSG_ERROR ( " Can't get RndmSvc " );
-    return StatusCode::FAILURE;
-  } else { 
-    ATH_MSG_DEBUG ( "Retrieved RndmSvc" );
-  }
+  CHECK(m_rndmSvc.retrieve());
 
   // get the random stream
   ATH_MSG_DEBUG ( "Getting random number engine : <" << m_rndmEngineName << ">" );
   m_rndmEngine = m_rndmSvc->GetEngine(m_rndmEngineName);
-  if (m_rndmEngine==0) {
-    ATH_MSG_ERROR ( "Could not find RndmEngine : " << m_rndmEngineName );
+  if (!m_rndmEngine) {
+    ATH_MSG_ERROR("Could not find RndmEngine : " << m_rndmEngineName);
     return StatusCode::FAILURE;
-  } else { 
-    ATH_MSG_DEBUG ( " Found RndmEngine : " << m_rndmEngineName ); 
+  }
+  else {
+    ATH_MSG_DEBUG("Found RndmEngine : " << m_rndmEngineName);
   }
 
   // clear data table
@@ -104,8 +93,8 @@ StatusCode BichselSimTool::initialize() {
 
     if(!inputFile.is_open()){
       ATH_MSG_FATAL("Fail to load file " << inputFileName.Data() << " !");
-      sc = StatusCode::FAILURE;
-      continue;
+      ATH_MSG_FATAL("BichselSimTool::initialize() failed");
+      return StatusCode::FAILURE;
     }
 
     // prepare data
@@ -152,24 +141,15 @@ StatusCode BichselSimTool::initialize() {
 
   ATH_MSG_INFO("Finish Loading Data File");
 
-  return sc; 
+  return StatusCode::SUCCESS;
 }
 
 //----------------------------------------------------------------------
 // finalize
 //----------------------------------------------------------------------
 StatusCode BichselSimTool::finalize() {
-  StatusCode sc = AthAlgTool::finalize();
-  if (sc.isFailure()) {
-    ATH_MSG_FATAL ( "BichselSimTool::finalize() failed");
-    return sc ;
-  }
-
-  //** define your finalize below **//
-
-
   ATH_MSG_DEBUG ( "BichselSimTool::finalize()");
-  return sc ;
+  return StatusCode::SUCCESS;
 }
 
 //-----------------------------------------------------------
@@ -478,8 +458,8 @@ double BichselSimTool::GetColE(std::pair<int,int> indices_BetaGammaLog10, double
 
   // BetaGammaLog10_2 then
   std::pair<int,int> indices_IntXLog10_x2 = FastSearch(iData.Array_BetaGammaLog10_IntXLog10[indices_BetaGammaLog10.second], IntXLog10);
-  if( (indices_IntXLog10_x2.first==-1) && (indices_IntXLog10_x2.second==-1) )
-    return -1;
+  if (indices_IntXLog10_x2.first<0)  { return -1; }
+  if (indices_IntXLog10_x2.second<0) { return -1; }
   double y21 = iData.Array_BetaGammaLog10_IntXLog10[indices_BetaGammaLog10.second][indices_IntXLog10_x2.first];
   double y22 = iData.Array_BetaGammaLog10_IntXLog10[indices_BetaGammaLog10.second][indices_IntXLog10_x2.second];
   double Est_x2 = ((y22 - IntXLog10)*iData.Array_BetaGammaLog10_ColELog10[indices_BetaGammaLog10.second][indices_IntXLog10_x2.first] + (IntXLog10 - y21)*iData.Array_BetaGammaLog10_ColELog10[indices_BetaGammaLog10.second][indices_IntXLog10_x2.second])/(y22-y21);
@@ -508,13 +488,8 @@ double BichselSimTool::GetUpperBound(std::pair<int,int> indices_BetaGammaLog10,
   //   indices_BetaGammaLog10 = FastSearch(iData.Array_BetaGammaLog10, BetaGammaLog10);
   // }
 
-  if( (indices_BetaGammaLog10.first==-1) && (indices_BetaGammaLog10.second==-1) ){
-    // std::cout << "++++++++++++++" << std::endl;
-    // std::cout << BetaGammaLog10 << std::endl;
-    // std::cout << iData.Array_BetaGammaLog10[0] << " , " << iData.Array_BetaGammaLog10.back() << std::endl;
-
-    return -1.;
-  }
+  if (indices_BetaGammaLog10.first<0)  { return -1; }
+  if (indices_BetaGammaLog10.second<0) { return -1; }
   double BetaGammaLog10_1 = iData.Array_BetaGammaLog10[indices_BetaGammaLog10.first];
   double BetaGammaLog10_2 = iData.Array_BetaGammaLog10[indices_BetaGammaLog10.second];
 
diff --git a/InnerDetector/InDetDigitization/PixelDigitization/src/PixelBarrelBichselChargeTool.cxx b/InnerDetector/InDetDigitization/PixelDigitization/src/PixelBarrelBichselChargeTool.cxx
index 94446f96226..ca6a7a31458 100644
--- a/InnerDetector/InDetDigitization/PixelDigitization/src/PixelBarrelBichselChargeTool.cxx
+++ b/InnerDetector/InDetDigitization/PixelDigitization/src/PixelBarrelBichselChargeTool.cxx
@@ -46,7 +46,24 @@ PixelBarrelBichselChargeTool::PixelBarrelBichselChargeTool(const std::string& ty
   m_doPU(true),                        
   m_BichselSimTool("BichselSimTool"),
   m_OutputFileName("EnergyDeposition.root"),
-  m_doHITPlots(false)
+  m_doHITPlots(false),
+  f_output(0),
+  h_Length(0),
+  h_hitTime(0),
+  h_EnergyDepositionBichsel(0),
+  h_EnergyDepositionNominal(0),
+  h_EnergyDepositionDeltaRay(0),
+  h_EnergyDepositionDeltaRay_Bichsel(0),
+  h_EnergyDepositionDeltaRay_Nominal(0),
+  h_isRealBichsel_DeltaRay(0),
+  h_isRealBichsel_Primary(0),
+  h_largestEnergyDeposition(0),
+  h_twolargestEnergyDeposition(0),
+  h_timer_execute(0),
+  h_timer_BichselSim(0),
+  h_timer_DigiLayer(0),
+  h_timer_diffuse(0),
+  h_hitCategory(0)
 { 
 	declareProperty("numberOfSteps",m_numberOfSteps,"Geant4:number of steps for PixelBarrel");
 	declareProperty("numberOfCharges",m_numberOfCharges,"Geant4:number of charges for PixelBarrel");
@@ -72,24 +89,15 @@ PixelBarrelBichselChargeTool::~PixelBarrelBichselChargeTool()
 // Initialize
 //----------------------------------------------------------------------
 StatusCode PixelBarrelBichselChargeTool::initialize() {
-  StatusCode sc = SubChargesTool::initialize(); 
-  if (sc.isFailure()) {
-    ATH_MSG_FATAL ( "PixelBarrelBichselChargeTool::initialize() failed");
-    return sc ;
-  }
 
+  CHECK(SubChargesTool::initialize()); 
   ATH_MSG_INFO("You are using PixelBarrelBichselChargeTool, not PixelBarrelChargeTool");
 
-  if(m_doBichsel){
+  if (m_doBichsel) {
     ATH_MSG_INFO("Bichsel Digitization is turned ON in PixelBarrelBichselChargeTool!");
-
-    sc = m_BichselSimTool.retrieve();
-    if(sc.isFailure()){
-      ATH_MSG_FATAL("Fail to retrieve BichselSimTool in PixelBarrelBichselChargeTool!");
-      return sc;
-    }
+    CHECK(m_BichselSimTool.retrieve());
   }
-  else{
+  else {
     ATH_MSG_INFO("Bichsel Digitization is turned OFF in PixelBarrelBichselChargeTool!");
   }
 
@@ -172,25 +180,20 @@ StatusCode PixelBarrelBichselChargeTool::initialize() {
   }
 
   ATH_MSG_DEBUG ( "PixelBarrelBichselChargeTool::initialize()");
-  return sc ;
+  return StatusCode::SUCCESS;
 }
 
 //----------------------------------------------------------------------
 // finalize
 //----------------------------------------------------------------------
 StatusCode PixelBarrelBichselChargeTool::finalize() {
-  StatusCode sc = AthAlgTool::finalize();
-  if (sc.isFailure()) {
-    ATH_MSG_FATAL ( "PixelBarrelBichselChargeTool::finalize() failed");
-    return sc ;
-  }
 
   if(m_doHITPlots){
     f_output->Write();
   }
 
   ATH_MSG_DEBUG ( "PixelBarrelBichselChargeTool::finalize()");
-  return sc ;
+  return StatusCode::SUCCESS;
 }
 
 //----------------------------------------------------------------------
diff --git a/InnerDetector/InDetDigitization/PixelDigitization/src/PixelCellDiscriminator.cxx b/InnerDetector/InDetDigitization/PixelDigitization/src/PixelCellDiscriminator.cxx
index 154da889c96..6b6fef7182b 100644
--- a/InnerDetector/InDetDigitization/PixelDigitization/src/PixelCellDiscriminator.cxx
+++ b/InnerDetector/InDetDigitization/PixelDigitization/src/PixelCellDiscriminator.cxx
@@ -75,20 +75,14 @@ StatusCode PixelCellDiscriminator::initialize() {
 // finalize
 //----------------------------------------------------------------------
 StatusCode PixelCellDiscriminator::finalize() {
-  StatusCode sc = AthAlgTool::finalize();
-  if (sc.isFailure()) {
-    ATH_MSG_FATAL ( "PixelCellDiscriminator::finalize() failed");
-    return sc ;
-  }
-  ATH_MSG_DEBUG ( "PixelCellDiscriminator::finalize()");
-  return sc ;
+  return StatusCode::SUCCESS;
 }
 
 // process the collection of charged diodes
 void PixelCellDiscriminator::process(SiChargedDiodeCollection &collection) const
 {   
   bool ComputeTW = false;
-  const PixelModuleDesign *p_design = dynamic_cast<const PixelModuleDesign*>(&(collection.element()->design()));
+  const PixelModuleDesign *p_design = static_cast<const PixelModuleDesign*>(&(collection.element()->design()));
   if (p_design->getReadoutTechnology()==PixelModuleDesign::FEI3) {
     ComputeTW = true;
   }
diff --git a/InnerDetector/InDetDigitization/PixelDigitization/src/PixelDigitizationTool.cxx b/InnerDetector/InDetDigitization/PixelDigitization/src/PixelDigitizationTool.cxx
index 6d60c3d92fe..f7fda5a013d 100644
--- a/InnerDetector/InDetDigitization/PixelDigitization/src/PixelDigitizationTool.cxx
+++ b/InnerDetector/InDetDigitization/PixelDigitization/src/PixelDigitizationTool.cxx
@@ -403,11 +403,8 @@ bool PixelDigitizationTool::digitizeElement(SiChargedDiodeCollection* chargedDio
 
   // create the identifier for the collection:
   ATH_MSG_DEBUG ( "create ID for the hit collection" );
-  const PixelID* PID = dynamic_cast<const PixelID*>(m_detID);
-  if (PID==0) {
-    ATH_MSG_ERROR ( "expected a PixelID but failed..." );
-    return false;
-  }
+  const PixelID* PID = static_cast<const PixelID*>(m_detID);
+
   const TimedHitPtr<SiHit>& firstHit = *i;
   int Barrel = firstHit->getBarrelEndcap();
   Identifier id = PID->wafer_id(Barrel,firstHit->getLayerDisk(),firstHit->getPhiModule(),firstHit->getEtaModule());
@@ -692,10 +689,6 @@ StatusCode PixelDigitizationTool::initTools() {
     }
     if (m_diodesProcsTool[itool].name()=="SpecialPixelGenerator") {
       m_specialPixelGenerator = dynamic_cast<SpecialPixelGenerator*>(m_diodesProcsTool[itool].operator->());
-      if (m_specialPixelGenerator) {
-        m_specialPixelGenerator->setnPixTot(m_detID->pixel_hash_max());
-        m_specialPixelGenerator->setnModTot(m_detID->wafer_hash_max());
-      }
     }
 
   }
@@ -775,7 +768,7 @@ PixelDigitizationTool::createRDO(SiChargedDiodeCollection *collection)
   // Determine the Pixel Region (IBL, BL, L1, L2, EC, DBM, ITk 5th layer), to be used for latency, ToT cut and duplication:
   //
 
-  const PixelID* pixelId = dynamic_cast<const PixelID *>(collection->element()->getIdHelper());
+  const PixelID* pixelId = static_cast<const PixelID *>(collection->element()->getIdHelper());
   int barrel_ec  = pixelId->barrel_ec(collection->element()->identify());
 
   int layerIndex = pixelId->layer_disk(collection->element()->identify());
@@ -783,7 +776,7 @@ PixelDigitizationTool::createRDO(SiChargedDiodeCollection *collection)
   if (abs(barrel_ec)==2) { layerIndex=4; }  // disks
   if (abs(barrel_ec)==4) { layerIndex=5; }  // DBM
 
-  const PixelModuleDesign *p_design = dynamic_cast<const PixelModuleDesign*>(&(collection->element())->design());
+  const PixelModuleDesign *p_design = static_cast<const PixelModuleDesign*>(&(collection->element())->design());
   std::vector<Pixel1RawData*> p_rdo_small_fei4;
   int maxFEI4SmallHit = 2;
   int nSmallHitsFEI4 = 0;
@@ -854,7 +847,7 @@ PixelDigitizationTool::createRDO(SiChargedDiodeCollection *collection)
       // - ToT for that reference value
 
       if (p_design->getReadoutTechnology()==PixelModuleDesign::FEI4) {
-        const PixelID* pixelId = dynamic_cast<const PixelID *>(collection->element()->getIdHelper());
+        const PixelID* pixelId = static_cast<const PixelID *>(collection->element()->getIdHelper());
         if (pixelId->is_dbm(collection->element()->identify())) {
           nToT = 8*((*i_chargedDiode).second.charge() - 1200. )/(8000. - 1200.);
         }
diff --git a/InnerDetector/InDetDigitization/PixelDigitization/src/PixelNoisyCellGenerator.cxx b/InnerDetector/InDetDigitization/PixelDigitization/src/PixelNoisyCellGenerator.cxx
index 5900fa6efbd..124f51da28e 100644
--- a/InnerDetector/InDetDigitization/PixelDigitization/src/PixelNoisyCellGenerator.cxx
+++ b/InnerDetector/InDetDigitization/PixelDigitization/src/PixelNoisyCellGenerator.cxx
@@ -98,21 +98,13 @@ StatusCode PixelNoisyCellGenerator::initialize() {
 
   ATH_MSG_DEBUG ( "PixelNoisyCellGenerator::initialize()");
   return StatusCode::SUCCESS;
-
-
 }
 
 //----------------------------------------------------------------------
 // finalize
 //----------------------------------------------------------------------
 StatusCode PixelNoisyCellGenerator::finalize() {
-  StatusCode sc = AthAlgTool::finalize();
-  if (sc.isFailure()) {
-    ATH_MSG_FATAL ( "PixelNoisyCellGenerator::finalize() failed");
-    return sc ;
-  }
-  ATH_MSG_DEBUG ( "PixelNoisyCellGenerator::finalize()");
-  return sc ;
+  return StatusCode::SUCCESS;
 }
 
 // process the collection of diode collection
@@ -154,8 +146,7 @@ void PixelNoisyCellGenerator::addNoisyPixels(SiChargedDiodeCollection &collectio
   //
   // get pixel module design and check it
   //
-  const PixelModuleDesign *p_design = dynamic_cast<const PixelModuleDesign*>(&(collection.design()));
-  if (!p_design) return;
+  const PixelModuleDesign *p_design = static_cast<const PixelModuleDesign*>(&(collection.design()));
 
   //
   // compute number of noisy cells
@@ -210,7 +201,7 @@ void PixelNoisyCellGenerator::addNoisyPixels(SiChargedDiodeCollection &collectio
     ATH_MSG_DEBUG ( "**********************");
     
     const InDetDD::SiDetectorElement* element = m_pixMgr->getDetectorElement(moduleHash);
-    const InDetDD::PixelModuleDesign* p_design = dynamic_cast<const InDetDD::PixelModuleDesign*>(&element->design());
+    const InDetDD::PixelModuleDesign* p_design = static_cast<const InDetDD::PixelModuleDesign*>(&element->design());
     
     unsigned int FE_Type = 0;
     if ( p_design->getReadoutTechnology()!=PixelModuleDesign::FEI3 ) FE_Type = 1; // FE_Type = 1 for FEI4. ITK ?
@@ -258,8 +249,7 @@ void PixelNoisyCellGenerator::addRandomNoise(SiChargedDiodeCollection &collectio
   //
   // get pixel module design and check it
   //
-  const PixelModuleDesign *p_design = dynamic_cast<const PixelModuleDesign *>(&(collection.design()));
-  if (!p_design) return;
+  const PixelModuleDesign *p_design = static_cast<const PixelModuleDesign *>(&(collection.design()));
 
   //
   // compute number of noisy cells
diff --git a/InnerDetector/InDetDigitization/PixelDigitization/src/SpecialPixelGenerator.cxx b/InnerDetector/InDetDigitization/PixelDigitization/src/SpecialPixelGenerator.cxx
index 0816288223c..79dc4055a73 100644
--- a/InnerDetector/InDetDigitization/PixelDigitization/src/SpecialPixelGenerator.cxx
+++ b/InnerDetector/InDetDigitization/PixelDigitization/src/SpecialPixelGenerator.cxx
@@ -108,13 +108,7 @@ StatusCode SpecialPixelGenerator::initialize() {
 // finalize
 //----------------------------------------------------------------------
 StatusCode SpecialPixelGenerator::finalize() {
-  StatusCode sc = AthAlgTool::finalize();
-  if (sc.isFailure()) {
-    ATH_MSG_FATAL ( "SpecialPixelGenerator::finalize() failed" );
-    return sc ;
-  }
-  ATH_MSG_DEBUG ( "SpecialPixelGenerator::finalize()" );
-  return sc ;
+  return StatusCode::SUCCESS;
 }
 
 void SpecialPixelGenerator::updatePixelMap(){
@@ -232,7 +226,7 @@ int SpecialPixelGenerator::fillSpecialPixels( double prob, unsigned int status,
 //     }
 
     const InDetDD::SiDetectorElement* element = m_pixMgr->getDetectorElement(idHash);
-    const InDetDD::PixelModuleDesign* p_design = dynamic_cast<const InDetDD::PixelModuleDesign*>(&element->design());
+    const InDetDD::PixelModuleDesign* p_design = static_cast<const InDetDD::PixelModuleDesign*>(&element->design());
     
     int nChips = p_design->numberOfCircuits();
     int nCols  = p_design->columnsPerCircuit();
diff --git a/InnerDetector/InDetDigitization/PixelDigitization/src/SurfaceChargesTool.cxx b/InnerDetector/InDetDigitization/PixelDigitization/src/SurfaceChargesTool.cxx
index 170a011a853..a32f6b3da46 100644
--- a/InnerDetector/InDetDigitization/PixelDigitization/src/SurfaceChargesTool.cxx
+++ b/InnerDetector/InDetDigitization/PixelDigitization/src/SurfaceChargesTool.cxx
@@ -42,14 +42,14 @@ SurfaceChargesTool::SurfaceChargesTool(const std::string& type, const std::strin
   m_IblPlanarChargeTool("IblPlanarChargeTool"),
   m_Ibl3DChargeTool("Ibl3DChargeTool"),
   m_IBLParameterSvc("IBLParameterSvc",name)
-  { 
-	declareInterface< SurfaceChargesTool >( this );
-	declareProperty("PixelBarrelChargeTool", m_PixelBarrelChargeTool,   "PixelBarrelChargeTool");
-	declareProperty("PixelECChargeTool", m_PixelECChargeTool,   "PixelECChargeTool");
-	declareProperty("IblPlanarChargeTool", m_IblPlanarChargeTool,   "IblPlanarChargeTool");
-	declareProperty("Ibl3DChargeTool", m_Ibl3DChargeTool,   "Ibl3DChargeTool");
-	declareProperty("DBMChargeTool", m_DBMChargeTool,   "DBMChargeTool");
-        declareProperty("doITk", m_doITk,   "Phase-II upgrade ITk flag");
+{ 
+  declareInterface< SurfaceChargesTool >( this );
+  declareProperty("PixelBarrelChargeTool", m_PixelBarrelChargeTool,   "PixelBarrelChargeTool");
+  declareProperty("PixelECChargeTool", m_PixelECChargeTool,   "PixelECChargeTool");
+  declareProperty("IblPlanarChargeTool", m_IblPlanarChargeTool,   "IblPlanarChargeTool");
+  declareProperty("Ibl3DChargeTool", m_Ibl3DChargeTool,   "Ibl3DChargeTool");
+  declareProperty("DBMChargeTool", m_DBMChargeTool,   "DBMChargeTool");
+  declareProperty("doITk", m_doITk,   "Phase-II upgrade ITk flag");
 }
 
 class DetCondCFloat;
-- 
GitLab