From e2061ce2f07fba245aee9efdc4a8487eb983225b Mon Sep 17 00:00:00 2001
From: Atlas-Software Librarian <Atlas-Software.Librarian@cern.ch>
Date: Fri, 8 Apr 2016 17:31:41 +0200
Subject: [PATCH] 'CMakeLists.txt' (TileL2Algs-00-02-04)

	* Tagging TileL2Algs-00-02-04.
	* src/TileL2Builder.cxx: Avoid repeated divisions and divisions by
	constants.
	* Tagging TileL2Algs-00-02-03.
	* src/TileL2Builder.cxx: Avoid gcc5 warnings about potentially
	out-of-bounds array references.
---
 TileCalorimeter/TileL2Algs/CMakeLists.txt     | 36 +++++++++++++++++++
 .../TileL2Algs/src/TileL2Builder.cxx          | 21 ++++++-----
 2 files changed, 48 insertions(+), 9 deletions(-)
 create mode 100644 TileCalorimeter/TileL2Algs/CMakeLists.txt

diff --git a/TileCalorimeter/TileL2Algs/CMakeLists.txt b/TileCalorimeter/TileL2Algs/CMakeLists.txt
new file mode 100644
index 00000000000..0d2d01069ab
--- /dev/null
+++ b/TileCalorimeter/TileL2Algs/CMakeLists.txt
@@ -0,0 +1,36 @@
+################################################################################
+# Package: TileL2Algs
+################################################################################
+
+# Declare the package name:
+atlas_subdir( TileL2Algs )
+
+# Declare the package's dependencies:
+atlas_depends_on_subdirs( PUBLIC
+                          Control/AthenaBaseComps
+                          GaudiKernel
+                          TileCalorimeter/TileEvent
+                          TileCalorimeter/TileIdentifier
+                          PRIVATE
+                          Calorimeter/CaloDetDescr
+                          Calorimeter/CaloIdentifier
+                          Control/AthenaKernel
+                          TileCalorimeter/TileCalib/TileCalibBlobObjs
+                          TileCalorimeter/TileConditions
+                          TileCalorimeter/TileDetDescr )
+
+# Component(s) in the package:
+atlas_add_library( TileL2AlgsLib
+                   src/*.cxx
+                   PUBLIC_HEADERS TileL2Algs
+                   LINK_LIBRARIES AthenaBaseComps GaudiKernel TileEvent TileIdentifier CaloDetDescrLib TileConditionsLib
+                   PRIVATE_LINK_LIBRARIES CaloIdentifier AthenaKernel TileCalibBlobObjs TileDetDescr )
+
+atlas_add_component( TileL2Algs
+                     src/components/*.cxx
+                     LINK_LIBRARIES AthenaBaseComps GaudiKernel TileEvent TileIdentifier CaloDetDescrLib CaloIdentifier AthenaKernel TileCalibBlobObjs TileConditionsLib TileDetDescr TileL2AlgsLib )
+
+# Install files from the package:
+atlas_install_python_modules( python/*.py )
+atlas_install_joboptions( share/*.py )
+
diff --git a/TileCalorimeter/TileL2Algs/src/TileL2Builder.cxx b/TileCalorimeter/TileL2Algs/src/TileL2Builder.cxx
index e78b3564893..16eea444216 100644
--- a/TileCalorimeter/TileL2Algs/src/TileL2Builder.cxx
+++ b/TileCalorimeter/TileL2Algs/src/TileL2Builder.cxx
@@ -386,6 +386,7 @@ void TileL2Builder::MTagLB(int partition
 
   /* Repair for muons splitted */
 
+  if (cand >= 4) std::abort();
   for (int i = 0; i < cand; i++) {
     for (int j = 0; j < i; j++) {
       if ((cquality[i] + cquality[j]) == 0) {
@@ -444,11 +445,11 @@ void TileL2Builder::MTagLB(int partition
 
             // LBC partition
             if (partition == 1)
-              EtaMuons.push_back((eta_LB_D[eta[i]] + eta_LB_BC[k2] + eta_LB_A[k2]) / 3);
+              EtaMuons.push_back((eta_LB_D[eta[i]] + eta_LB_BC[k2] + eta_LB_A[k2]) * (1. / 3));
 
             // LBA partition
             if (partition == 2)
-              EtaMuons.push_back(-(eta_LB_D[eta[i]] + eta_LB_BC[k2] + eta_LB_A[k2]) / 3);
+              EtaMuons.push_back(-(eta_LB_D[eta[i]] + eta_LB_BC[k2] + eta_LB_A[k2]) * (1. / 3));
 
             if (eta[i] == 0 && k2 == 0) pattern = 0;  // D0, BC1, A1
             if (eta[i] == 1 && k2 == 1) pattern = 1;  // D1, BC2, A2
@@ -566,6 +567,7 @@ void TileL2Builder::MTagEB(int partition
 
   /* Repair for muons splitted */
 
+  if (cand >= 4) std::abort();
   for (int i = 0; i < cand; i++) {
     for (int j = 0; j < i; j++) {
       if ((cquality[i] + cquality[j]) == 0) {
@@ -626,11 +628,11 @@ void TileL2Builder::MTagEB(int partition
 
               // EBC partition
               if (partition == 3)
-                EtaMuons.push_back((eta_EB_D[eta[i]] + eta_EB_BC[k2] + eta_EB_A[k1]) / 3);
+                EtaMuons.push_back((eta_EB_D[eta[i]] + eta_EB_BC[k2] + eta_EB_A[k1]) * (1. / 3));
 
               // EBA partition
               if (partition == 4)
-                EtaMuons.push_back(-(eta_EB_D[eta[i]] + eta_EB_BC[k2] + eta_EB_A[k1]) / 3);
+                EtaMuons.push_back(-(eta_EB_D[eta[i]] + eta_EB_BC[k2] + eta_EB_A[k1]) * (1. / 3));
 
               if (eta[i] == 0 && k2 == 0 && k1 == 0) pattern = 0;   // D5, B11, A12
               if (eta[i] == 0 && k2 == 1 && k1 == 0) pattern = 1;   // D5, B12, A12
@@ -681,8 +683,8 @@ void TileL2Builder::SumE(int ros, int /* drawer */, int unit, float *E, int *gai
   }
 
   unit &= 3; // keep last 2 bits, remove online offset
-  float scaleHG = AMPLITUDE_FACTOR_HG[unit];
-  float scaleLG = AMPLITUDE_FACTOR_LG[unit];
+  const float scaleHG = AMPLITUDE_FACTOR_HG[unit];
+  const float scaleLG = AMPLITUDE_FACTOR_LG[unit];
   int ros1 = ros - 1;
   float* wt = m_sinThRound[ros1];
   float* wz = m_cosThRound[ros1];
@@ -711,9 +713,10 @@ void TileL2Builder::SumE(int ros, int /* drawer */, int unit, float *E, int *gai
     ++wz;
   }
 
-  sumE[0] = Et / scaleHG;
-  sumE[1] = Ez / scaleHG;
-  sumE[2] = Es / scaleHG;
+  const float inv_scaleHG = 1. / scaleHG;
+  sumE[0] = Et * inv_scaleHG;
+  sumE[1] = Ez * inv_scaleHG;
+  sumE[2] = Es * inv_scaleHG;
 }
 
 void TileL2Builder::SumE(int ros, int /* drawer */, float *E, std::vector<float> &sumE) {
-- 
GitLab