From 5ebfc18883a7ea960f26e0bae928fc9b7dae2152 Mon Sep 17 00:00:00 2001
From: Shaun Roe <shaun.roe@cern.ch>
Date: Fri, 28 Jan 2022 14:51:26 +0100
Subject: [PATCH] 22.0-cleanup-PixelConditionsData

---
 .../src/PixelOfflineCalibCondAlg.cxx          | 10 +--
 .../PixelOfflineCalibData.h                   | 73 ++++++-------------
 .../src/PixelOfflineCalibData.cxx             | 44 +++++------
 3 files changed, 45 insertions(+), 82 deletions(-)

diff --git a/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelOfflineCalibCondAlg.cxx b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelOfflineCalibCondAlg.cxx
index 345bb22341c..aa17222fdb0 100644
--- a/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelOfflineCalibCondAlg.cxx
+++ b/InnerDetector/InDetConditions/PixelConditionsAlgorithms/src/PixelOfflineCalibCondAlg.cxx
@@ -76,7 +76,7 @@ StatusCode PixelOfflineCalibCondAlg::execute(const EventContext& ctx) const {
 
     // First constants are info on the number of bins of parametrizations
     ATH_MSG_DEBUG("Get error constants");
-    std::vector<float> constants = calibData->GetConstants();
+    std::vector<float> constants = calibData->getConstants();
     if (!constants.empty()) { ATH_MSG_VERBOSE("constants are defined"); }
     else                  { ATH_MSG_ERROR("constants size is NULL!!!"); } 
 
@@ -88,7 +88,7 @@ StatusCode PixelOfflineCalibCondAlg::execute(const EventContext& ctx) const {
 
     if (!constants.empty()) {
       ATH_MSG_DEBUG("Found constants with new-style Identifier key");
-      writeCdo->SetConstants(constants);
+      writeCdo->setConstants(constants);
     }
 
     if (writeHandle.record(rangeW, std::move(writeCdo)).isFailure()) {
@@ -99,7 +99,7 @@ StatusCode PixelOfflineCalibCondAlg::execute(const EventContext& ctx) const {
 
     if (m_dump!=0) {
       ATH_MSG_DEBUG("Dump the constants to file");
-      calibData->Dump();
+      calibData->dump();
     }
     delete calibData;
 
@@ -127,7 +127,7 @@ for (int i=0; i<readCdo->size(); i++) { constants.push_back(readCdo->get(Identif
 
     if (!constants.empty()) {
       ATH_MSG_DEBUG("Found constants with new-style Identifier key");
-      writeCdo->SetConstants(constants);
+      writeCdo->setConstants(constants);
     }
     else {
       Identifier key;
@@ -140,7 +140,7 @@ for (int i=0; i<readCdo->size(); i++) { const2.push_back(readCdo->get(key.set_li
 
       if (!const2.empty()) {
         ATH_MSG_DEBUG("Found constants with old-style Identifier key");
-        writeCdo->SetConstants(const2);
+        writeCdo->setConstants(const2);
       }
       else {
         ATH_MSG_ERROR("Could not get the constants!");
diff --git a/InnerDetector/InDetConditions/PixelConditionsData/PixelConditionsData/PixelOfflineCalibData.h b/InnerDetector/InDetConditions/PixelConditionsData/PixelConditionsData/PixelOfflineCalibData.h
index c77c29d0da4..5b01aab755b 100644
--- a/InnerDetector/InDetConditions/PixelConditionsData/PixelConditionsData/PixelOfflineCalibData.h
+++ b/InnerDetector/InDetConditions/PixelConditionsData/PixelConditionsData/PixelOfflineCalibData.h
@@ -22,9 +22,6 @@
     The PixelOfflineCalibData is a class that designed to hold the 
     data used by pixel offline algorithms. This includes 
     Pixel Cluster error parametrizations, and other stuff will follow
-
-    The details can be found at 
-    https://twiki.cern.ch/twiki/bin/view/Atlas/AWikiPageNotExistingYet
     
     @author Tommaso Lari <lari@mi.infn.it>
 */  
@@ -36,13 +33,12 @@ class PixelOfflineCalibData{
   public:
   /** Constructor:*/
   PixelOfflineCalibData(); 
-  PixelOfflineCalibData(const PixelOfflineCalibData& rhs);
-  PixelOfflineCalibData& operator=(const PixelOfflineCalibData& rhs);
-  // PixelOfflineCalibData(const Identifier & ident); 
-  // PixelOfflineCalibData(Identifier & ident);  
+  PixelOfflineCalibData(const PixelOfflineCalibData& rhs) = delete;
+  PixelOfflineCalibData& operator=(const PixelOfflineCalibData& rhs) = delete;
+ 
 
   /** default destructor */
-  ~PixelOfflineCalibData ();
+  ~PixelOfflineCalibData () = default;
 
   bool update(const PixelClusterErrorData& idat);
   bool update(const PixelChargeInterpolationParameters& idat);
@@ -50,7 +46,7 @@ class PixelOfflineCalibData{
   
   int size() const;
   
-  // get the pointer to pixel cluster error data
+  // get the pointer to pixel cluster error data (observer only)
   PixelClusterErrorData* getPixelClusterErrorData();
   PixelChargeInterpolationParameters* getPixelChargeInterpolationParameters();
   PixelClusterOnTrackErrorData* getPixelClusterOnTrackErrorData();
@@ -59,50 +55,32 @@ class PixelOfflineCalibData{
   const PixelClusterOnTrackErrorData* getPixelClusterOnTrackErrorData() const;
 
   // Get/Set the numerical constants 
-  int GetNumberOfConstants() const;
+  int getNumberOfConstants() const;
 
-  std::vector<float> GetConstants() const;
-  void SetConstants(const std::vector<float> &constants);
+  std::vector<float> getConstants() const;
+  void setConstants(const std::vector<float> &constants);
 
-  void Dump();
+  void dump();
 
  private: 
-  //  Identifier m_ident; 
-  PixelClusterErrorData* m_clustererrordata; 
-  PixelChargeInterpolationParameters* m_chargeinterpolationparameters; 
-  PixelClusterOnTrackErrorData* m_clusterontrackerrordata;
+  std::unique_ptr<PixelClusterErrorData> m_clustererrordata{}; 
+  std::unique_ptr<PixelChargeInterpolationParameters> m_chargeinterpolationparameters{}; 
+  std::unique_ptr<PixelClusterOnTrackErrorData> m_clusterontrackerrordata{};
 }; 
 
-//CLASS_DEF(PixelOfflineCalibData, 27089939, 1)
 
 inline PixelOfflineCalibData::PixelOfflineCalibData() {
-  m_clustererrordata = new PixelClusterErrorData();
-  m_clusterontrackerrordata = new PixelClusterOnTrackErrorData();
-  m_chargeinterpolationparameters = new PixelChargeInterpolationParameters();
+  m_clustererrordata = std::make_unique<PixelClusterErrorData>();
+  m_clusterontrackerrordata = std::make_unique<PixelClusterOnTrackErrorData>();
+  m_chargeinterpolationparameters = std::make_unique<PixelChargeInterpolationParameters>();
 } 
 
-inline PixelOfflineCalibData::PixelOfflineCalibData(const PixelOfflineCalibData& rhs){
-  m_clustererrordata = rhs.m_clustererrordata;
-  m_clusterontrackerrordata = rhs.m_clusterontrackerrordata;
-  m_chargeinterpolationparameters = rhs.m_chargeinterpolationparameters;
-}
-
-inline PixelOfflineCalibData& PixelOfflineCalibData::operator=(const PixelOfflineCalibData& rhs){
-  if(this != &rhs){
-    m_clustererrordata = rhs.m_clustererrordata;
-    m_clusterontrackerrordata = rhs.m_clusterontrackerrordata;
-    m_chargeinterpolationparameters = rhs.m_chargeinterpolationparameters;
-  }
-  return (*this);
-}
-
 inline bool PixelOfflineCalibData::update(const PixelClusterErrorData& idat){
   *m_clustererrordata = idat;
   return true;
 }
 
-inline bool PixelOfflineCalibData::update(
-  const PixelChargeInterpolationParameters& idat){
+inline bool PixelOfflineCalibData::update(const PixelChargeInterpolationParameters& idat){
   *m_chargeinterpolationparameters = idat;
   return true;
 }
@@ -113,39 +91,32 @@ inline bool PixelOfflineCalibData::update(const PixelClusterOnTrackErrorData& id
 }
 
 inline PixelClusterErrorData* PixelOfflineCalibData::getPixelClusterErrorData() {
-  return m_clustererrordata;
+  return m_clustererrordata.get();
 }
 
 inline PixelChargeInterpolationParameters* PixelOfflineCalibData::getPixelChargeInterpolationParameters() {
-  return m_chargeinterpolationparameters;
+  return m_chargeinterpolationparameters.get();
 }
 
 inline PixelClusterOnTrackErrorData* 
     PixelOfflineCalibData::getPixelClusterOnTrackErrorData() {
-  return m_clusterontrackerrordata;
+  return m_clusterontrackerrordata.get();
 }
 
 inline const PixelClusterErrorData* PixelOfflineCalibData::getPixelClusterErrorData() const {
-  return m_clustererrordata;
+  return m_clustererrordata.get();
 }
 
 inline const PixelChargeInterpolationParameters* PixelOfflineCalibData::getPixelChargeInterpolationParameters() const {
-  return m_chargeinterpolationparameters;
+  return m_chargeinterpolationparameters.get();
 }
 
 inline const PixelClusterOnTrackErrorData* 
     PixelOfflineCalibData::getPixelClusterOnTrackErrorData() const {
-  return m_clusterontrackerrordata;
+  return m_clusterontrackerrordata.get();
 }
 
 
-//================ Destructor =================================================
-inline PixelOfflineCalibData::~PixelOfflineCalibData(){
-delete m_clustererrordata;
-delete m_chargeinterpolationparameters;
-delete m_clusterontrackerrordata;
-}
-
 }
 
 CLASS_DEF(PixelCalib::PixelOfflineCalibData, 209342487, 1)
diff --git a/InnerDetector/InDetConditions/PixelConditionsData/src/PixelOfflineCalibData.cxx b/InnerDetector/InDetConditions/PixelConditionsData/src/PixelOfflineCalibData.cxx
index c5062503525..4d4995d61b4 100644
--- a/InnerDetector/InDetConditions/PixelConditionsData/src/PixelOfflineCalibData.cxx
+++ b/InnerDetector/InDetConditions/PixelConditionsData/src/PixelOfflineCalibData.cxx
@@ -12,12 +12,13 @@ namespace PixelCalib{
 
   // PixelCalibData::~PixelCalibData(){}
 
-std::vector<float> PixelOfflineCalibData::GetConstants() const { 
+std::vector<float> PixelOfflineCalibData::getConstants() const { 
 
   // format version of parametrizations (note it is an increasing NEGATIVE number)
   int v1 = m_clustererrordata->getVersion(); 
   int v2 = m_clusterontrackerrordata->getVersion(); 
-  int v3 = m_chargeinterpolationparameters->getVersion(); 
+  int v3 = m_chargeinterpolationparameters->getVersion();
+  const bool includesIBL = (v1< -1) or (v2< -1) or (v3< -1);
 
   int n1 = m_clustererrordata->getNumberOfBarrelBins(); 
   int n2 = m_clustererrordata->getNumberOfEndcapBins();
@@ -78,27 +79,15 @@ std::vector<float> PixelOfflineCalibData::GetConstants() const {
     +n4+n5; // number of ChargeInterpolation values
 
   int offset = 13;
-  if(v1<-1||v2<-1||v3<-1) { // including IBL
+  if(includesIBL) { 
     offset +=8;
     datasize +=2*n1 + netaibl+1 + nalphaibl+1 + n3c +n3d + netaibl2+1 + nalphaibl2+1 + n6 + n7;
   }
 
   std::vector<float> constants;
-  constants.resize(datasize+offset);
-
-  constants.push_back(v1);
-  constants.push_back(v2);
-  constants.push_back(v3); 
-  constants.push_back(n1);
-  constants.push_back(n2);
-  constants.push_back(ncsx);
-  constants.push_back(ncsy);
-  constants.push_back(neta);
-  constants.push_back(nalpha);
-  constants.push_back(ncsx2);
-  constants.push_back(ncsy2);
-  constants.push_back(neta2);
-  constants.push_back(nalpha2);
+  constants.reserve(datasize+offset);// NOTE: this was 'resize' before; may change output
+  constants = {float(v1),float(v2), float(v3), float(n1), float(n2), float(ncsx), float(ncsy), float(neta), 
+    float(nalpha), float(ncsx2),float(ncsy2), float(neta2), float(nalpha2)};
   if(offset>13){
     constants.push_back(ncsx_ibl);
     constants.push_back(ncsx_ibl); 
@@ -111,19 +100,22 @@ std::vector<float> PixelOfflineCalibData::GetConstants() const {
   }
 
   // set bins of cluster error on track parametrization (uppermost value implicit)
-  for(int i=0; i<ncsx; i++){ constants.push_back(csx[i]); }
-  for(int i=0; i<ncsy; i++){ constants.push_back(csy[i]); }
+  auto insert = [&constants](const std::vector<float> & v)->void{
+    if (not v.empty()) constants.insert(constants.end(), v.begin(), v.end());
+  };
+  insert(csx);
+  insert(csy);
   if(netaibl>0){
     for(int i=0; i<netaibl+1; i++){ constants.push_back(etaibl[i]); }
   }
   if(nalphaibl>0){
     for(int i=0; i<nalphaibl+1; i++){ constants.push_back(alphaibl[i]); }
   }
-  for(int i=0; i<neta; i++){ constants.push_back(eta[i]); }
-  for(int i=0; i<nalpha; i++){ constants.push_back(alpha[i]); }
+  insert(eta);
+  insert(alpha);
   // set bins of charge interpolation parametrization (uppermost value stored)
-  for(int i=0; i<ncsx2+1; i++){ constants.push_back(csx2[i]); }
-  for(int i=0; i<ncsy2+1; i++){ constants.push_back(csy2[i]); }
+  insert(csx2);
+  insert(csy2);
   if(netaibl2>0){
     for(int i=0; i<netaibl2+1; i++){ constants.push_back(etaibl2[i]); }
   }
@@ -156,13 +148,13 @@ std::vector<float> PixelOfflineCalibData::GetConstants() const {
   return constants;
 }
 
-void PixelOfflineCalibData::Dump(){
+void PixelOfflineCalibData::dump(){
   m_clustererrordata->Print("PixelClusterDump.txt");
   m_clusterontrackerrordata->Print("PixelClusterOnTrackDump.txt");
   m_chargeinterpolationparameters->Print("PixelChargeInterpolationParametersDump.txt");
 }
 
-void PixelOfflineCalibData::SetConstants(const std::vector<float> &constants){ 
+void PixelOfflineCalibData::setConstants(const std::vector<float> &constants){ 
 
   if(constants.at(0) > 0){    // old format
     m_clustererrordata->setVersion(0);
-- 
GitLab