From b6bd757820b3ea7511203900feeaba1f3372f8d2 Mon Sep 17 00:00:00 2001
From: Pavol Strizenec <Pavol.Strizenec@cern.ch>
Date: Sun, 29 May 2016 17:13:31 +0200
Subject: [PATCH] adding LArNoisyROSummary_p4 (LArTPCnv-00-06-07)

        * Creating LArNoisyROSummaryCnv_p4.cxx  with additional MNB information.
        * Creating LArNoisyROSummary_p4.h
        * Creating LArNoisyROSummaryCnv_p4.h
        * Modifying LArTPCnv.cxx to include the new TP convertor.
        * Modifying selection.xml to include the new class and corresponding ID.
        * tag LArTPCnv-00-06-07


Former-commit-id: d2794e7e6aaba8a8e4ef2741a8504837e06f1fec
---
 LArCalorimeter/LArCnv/LArTPCnv/CMakeLists.txt |   6 ++
 .../LArTPCnv/LArNoisyROSummaryCnv_p4.h        |  26 +++++
 .../LArTPCnv/LArTPCnv/LArNoisyROSummary_p4.h  |  46 ++++++++
 .../LArCnv/LArTPCnv/LArTPCnv/LArTPCnvDict.h   |   1 +
 .../LArCnv/LArTPCnv/LArTPCnv/selection.xml    |   1 +
 .../LArCnv/LArTPCnv/cmt/requirements          |   1 +
 .../LArTPCnv/src/LArNoisyROSummaryCnv_p4.cxx  | 102 ++++++++++++++++++
 .../LArCnv/LArTPCnv/src/LArTPCnv.cxx          |  10 +-
 .../test/LArNoisyROSummaryCnv_p4_test.cxx     |  78 ++++++++++++++
 9 files changed, 270 insertions(+), 1 deletion(-)
 create mode 100644 LArCalorimeter/LArCnv/LArTPCnv/LArTPCnv/LArNoisyROSummaryCnv_p4.h
 create mode 100644 LArCalorimeter/LArCnv/LArTPCnv/LArTPCnv/LArNoisyROSummary_p4.h
 create mode 100644 LArCalorimeter/LArCnv/LArTPCnv/src/LArNoisyROSummaryCnv_p4.cxx
 create mode 100644 LArCalorimeter/LArCnv/LArTPCnv/test/LArNoisyROSummaryCnv_p4_test.cxx

diff --git a/LArCalorimeter/LArCnv/LArTPCnv/CMakeLists.txt b/LArCalorimeter/LArCnv/LArTPCnv/CMakeLists.txt
index 942791f7771..8e6d874474f 100644
--- a/LArCalorimeter/LArCnv/LArTPCnv/CMakeLists.txt
+++ b/LArCalorimeter/LArCnv/LArTPCnv/CMakeLists.txt
@@ -68,6 +68,12 @@ atlas_add_test( LArNoisyROSummaryCnv_p3_test
                 INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
                 LINK_LIBRARIES ${ROOT_LIBRARIES} AthenaPoolCnvSvcLib LArRawEvent LArRecEvent TestTools CaloIdentifier AthenaKernel Identifier LArTPCnv )
 
+atlas_add_test( LArNoisyROSummaryCnv_p4_test
+                SOURCES
+                test/LArNoisyROSummaryCnv_p4_test.cxx
+                INCLUDE_DIRS ${ROOT_INCLUDE_DIRS}
+                LINK_LIBRARIES ${ROOT_LIBRARIES} AthenaPoolCnvSvcLib LArRawEvent LArRecEvent TestTools CaloIdentifier AthenaKernel Identifier LArTPCnv )
+
 atlas_add_test( LArRawChannelCnv_p2_test
                 SOURCES
                 test/LArRawChannelCnv_p2_test.cxx
diff --git a/LArCalorimeter/LArCnv/LArTPCnv/LArTPCnv/LArNoisyROSummaryCnv_p4.h b/LArCalorimeter/LArCnv/LArTPCnv/LArTPCnv/LArNoisyROSummaryCnv_p4.h
new file mode 100644
index 00000000000..9f906610eef
--- /dev/null
+++ b/LArCalorimeter/LArCnv/LArTPCnv/LArTPCnv/LArNoisyROSummaryCnv_p4.h
@@ -0,0 +1,26 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef LARTPCNV_LARNOISYROSUMMARYCNV_P4_H
+#define LARTPCNV_LARNOISYROSUMMARYCNV_P4_H
+
+#include "LArRecEvent/LArNoisyROSummary.h"
+#include "LArTPCnv/LArNoisyROSummary_p4.h"
+#include "AthenaPoolCnvSvc/T_AthenaPoolTPConverter.h"
+
+
+class MsgStream;
+
+class LArNoisyROSummaryCnv_p4: public T_AthenaPoolTPCnvBase<LArNoisyROSummary,LArNoisyROSummary_p4>
+{
+ public:
+  LArNoisyROSummaryCnv_p4() {};
+
+  virtual void   persToTrans(const LArNoisyROSummary_p4* pers, LArNoisyROSummary* trans, MsgStream &log) ;
+  virtual void   transToPers(const LArNoisyROSummary* trans, LArNoisyROSummary_p4* pers, MsgStream &log) ;
+  
+};
+
+
+#endif
diff --git a/LArCalorimeter/LArCnv/LArTPCnv/LArTPCnv/LArNoisyROSummary_p4.h b/LArCalorimeter/LArCnv/LArTPCnv/LArTPCnv/LArNoisyROSummary_p4.h
new file mode 100644
index 00000000000..4d73de7c529
--- /dev/null
+++ b/LArCalorimeter/LArCnv/LArTPCnv/LArTPCnv/LArNoisyROSummary_p4.h
@@ -0,0 +1,46 @@
+// This file's extension implies that it's C, but it's really -*- C++ -*-.
+
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#ifndef LARNOISYROSUMMARY_P4_H
+#define LARNOISYROSUMMARY_P4_H
+
+#include <vector>
+#include <utility>
+#include <stdint.h>
+
+class LArNoisyROSummary_p4
+{
+ public:
+  friend class LArNoisyROSummaryCnv_p4;
+
+  LArNoisyROSummary_p4():
+    m_noisy_febs(),
+    m_MNBTight_febs(),
+    m_MNBLoose_febs(),
+    m_noisy_preamps(), 
+    m_BadFEBFlaggedPartitions(0),
+    m_BadFEB_WFlaggedPartitions(0),
+    m_SatMediumFlaggedPartitions(0),
+    m_SatTightFlaggedPartitions(0),
+    m_MNBLooseFlaggedPartitions(0),
+    m_MNBTightFlaggedPartitions(0)
+  {};
+
+ private:
+  std::vector<unsigned int> m_noisy_febs;
+  std::vector<unsigned int> m_MNBTight_febs;
+  std::vector<unsigned int> m_MNBLoose_febs;
+  std::vector< std::pair<unsigned int, std::vector<int> > > m_noisy_preamps;
+  uint8_t m_BadFEBFlaggedPartitions;
+  uint8_t m_BadFEB_WFlaggedPartitions;
+  uint8_t m_SatMediumFlaggedPartitions;
+  uint8_t m_SatTightFlaggedPartitions;
+  uint8_t m_MNBLooseFlaggedPartitions;
+  uint8_t m_MNBTightFlaggedPartitions;
+  
+};
+
+#endif
diff --git a/LArCalorimeter/LArCnv/LArTPCnv/LArTPCnv/LArTPCnvDict.h b/LArCalorimeter/LArCnv/LArTPCnv/LArTPCnv/LArTPCnvDict.h
index 7a3b5a6230a..bb39a5234a8 100644
--- a/LArCalorimeter/LArCnv/LArTPCnv/LArTPCnv/LArTPCnvDict.h
+++ b/LArCalorimeter/LArCnv/LArTPCnv/LArTPCnv/LArTPCnvDict.h
@@ -21,6 +21,7 @@
 #include "LArTPCnv/LArNoisyROSummary_p1.h" 
 #include "LArTPCnv/LArNoisyROSummary_p2.h" 
 #include "LArTPCnv/LArNoisyROSummary_p3.h" 
+#include "LArTPCnv/LArNoisyROSummary_p4.h" 
 
 #include "Identifier/HWIdentifier.h"
 
diff --git a/LArCalorimeter/LArCnv/LArTPCnv/LArTPCnv/selection.xml b/LArCalorimeter/LArCnv/LArTPCnv/LArTPCnv/selection.xml
index e81df9f1f72..f936de4d449 100644
--- a/LArCalorimeter/LArCnv/LArTPCnv/LArTPCnv/selection.xml
+++ b/LArCalorimeter/LArCnv/LArTPCnv/LArTPCnv/selection.xml
@@ -9,6 +9,7 @@
   <class name="LArNoisyROSummary_p1" id="4681BC21-3C00-4540-BED6-58E37700D9B9"/>
   <class name="LArNoisyROSummary_p2" id="C33CED2C-2101-4B0C-9BCB-739B004639F4"/>
   <class name="LArNoisyROSummary_p3" id="7801CF21-F2F2-4E87-9B87-744F31A37D1B"/>
+  <class name="LArNoisyROSummary_p4" id="8F9E9A44-699E-4056-96CC-555ADA1179D4"/>
   <class name="std::pair<unsigned int, std::vector<int> >" />
   <class name="std::vector<std::pair<unsigned int, std::vector<int> > >" />
 
diff --git a/LArCalorimeter/LArCnv/LArTPCnv/cmt/requirements b/LArCalorimeter/LArCnv/LArTPCnv/cmt/requirements
index 4da4dbda337..167af4f5c41 100644
--- a/LArCalorimeter/LArCnv/LArTPCnv/cmt/requirements
+++ b/LArCalorimeter/LArCnv/LArTPCnv/cmt/requirements
@@ -31,5 +31,6 @@ apply_pattern UnitTest_run unit_test=LArFebErrorSummaryCnv_p1
 apply_pattern UnitTest_run unit_test=LArNoisyROSummaryCnv_p1
 apply_pattern UnitTest_run unit_test=LArNoisyROSummaryCnv_p2
 apply_pattern UnitTest_run unit_test=LArNoisyROSummaryCnv_p3
+apply_pattern UnitTest_run unit_test=LArNoisyROSummaryCnv_p4
 apply_pattern UnitTest_run unit_test=LArRawChannelCnv_p2
 apply_pattern UnitTest_run unit_test=LArRawChannelContainerCnv_p4
diff --git a/LArCalorimeter/LArCnv/LArTPCnv/src/LArNoisyROSummaryCnv_p4.cxx b/LArCalorimeter/LArCnv/LArTPCnv/src/LArNoisyROSummaryCnv_p4.cxx
new file mode 100644
index 00000000000..cdbafe1e179
--- /dev/null
+++ b/LArCalorimeter/LArCnv/LArTPCnv/src/LArNoisyROSummaryCnv_p4.cxx
@@ -0,0 +1,102 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+#define private public
+#define protected public
+#include "LArRecEvent/LArNoisyROSummary.h"
+#undef private
+#undef protected
+
+#include "LArTPCnv/LArNoisyROSummaryCnv_p4.h"
+
+void LArNoisyROSummaryCnv_p4::transToPers(const LArNoisyROSummary* trans, LArNoisyROSummary_p4* pers, MsgStream & log) 
+{
+  typedef std::vector< std::pair<HWIdentifier, std::vector<int> > > PAcont;
+  log << MSG::DEBUG << " in LArNoisyROSummaryCnv_p4::transToPers " << endreq;
+
+  size_t sfebs = trans->m_noisy_febs.size();
+  pers->m_noisy_febs.resize(sfebs);
+  for ( size_t i = 0; i < sfebs; i++ )
+  {
+    pers->m_noisy_febs[i] = trans->m_noisy_febs[i].get_identifier32().get_compact();
+  }
+
+  size_t smnbtightfebs = trans->m_MNBTight_febs.size();
+  pers->m_MNBTight_febs.resize(smnbtightfebs);
+  for ( size_t i = 0; i < smnbtightfebs; i++ )
+    {
+      pers->m_MNBTight_febs[i] = trans->m_MNBTight_febs[i].get_identifier32().get_compact();
+    }
+
+  size_t smnbloosefebs = trans->m_MNBLoose_febs.size();
+  pers->m_MNBLoose_febs.resize(smnbloosefebs);
+  for ( size_t i = 0; i < smnbloosefebs; i++ )
+    {
+      pers->m_MNBLoose_febs[i] = trans->m_MNBLoose_febs[i].get_identifier32().get_compact();
+    }
+
+  pers->m_noisy_preamps.clear();
+  pers->m_noisy_preamps.reserve(trans->m_noisy_preamps.size());
+  for ( PAcont::const_iterator it = trans->m_noisy_preamps.begin(); it != trans->m_noisy_preamps.end(); it++)
+  {
+    pers->m_noisy_preamps.push_back(std::make_pair(it->first.get_identifier32().get_compact(), it->second));
+  }
+
+  pers->m_BadFEBFlaggedPartitions = trans->m_BadFEBFlaggedPartitions;
+  pers->m_SatMediumFlaggedPartitions = trans->m_SatMediumFlaggedPartitions;
+  pers->m_SatTightFlaggedPartitions = trans->m_SatTightFlaggedPartitions;
+  pers->m_BadFEB_WFlaggedPartitions = trans->m_BadFEB_WFlaggedPartitions ;
+  pers->m_MNBLooseFlaggedPartitions = trans->m_MNBLooseFlaggedPartitions;
+  pers->m_MNBTightFlaggedPartitions = trans->m_MNBTightFlaggedPartitions;
+  
+}
+
+void LArNoisyROSummaryCnv_p4::persToTrans(const LArNoisyROSummary_p4* pers, LArNoisyROSummary* trans, MsgStream & log ) 
+{
+  log << MSG::DEBUG << " in  LArNoisyROSummaryCnv_p4::persToTrans " << endreq;
+  trans->m_noisy_febs.clear();
+  trans->m_MNBTight_febs.clear();
+  trans->m_MNBLoose_febs.clear();
+  trans->m_noisy_preamps.clear();
+
+  size_t sfebs =  pers->m_noisy_febs.size();
+  for ( size_t i = 0; i < sfebs; i++)
+  {
+    HWIdentifier febId(Identifier32(pers->m_noisy_febs[i]));
+    trans->add_noisy_feb(febId);
+  }
+
+  size_t smnbtightfebs =  pers->m_MNBTight_febs.size();
+  for ( size_t i = 0; i < smnbtightfebs; i++)
+    {
+      HWIdentifier febId(Identifier32(pers->m_MNBTight_febs[i]));
+      trans->add_MNBTight_feb(febId);
+    }
+
+  size_t smnbloosefebs =  pers->m_MNBLoose_febs.size();
+  for ( size_t i = 0; i < smnbloosefebs; i++)
+    {
+      HWIdentifier febId(Identifier32(pers->m_MNBLoose_febs[i]));
+      trans->add_MNBLoose_feb(febId);
+    }
+
+  size_t spas =  pers->m_noisy_preamps.size();
+  for ( size_t i = 0; i < spas; i++)
+  {
+    size_t schan = pers->m_noisy_preamps[i].second.size();
+    for ( size_t j = 0; j < schan; j++ )
+    {
+      HWIdentifier febId(Identifier32(pers->m_noisy_preamps[i].first));
+      trans->add_noisy_preamp(febId,pers->m_noisy_preamps[i].second[j]);
+    }
+  }
+
+  trans->m_BadFEBFlaggedPartitions = pers->m_BadFEBFlaggedPartitions;
+  trans->m_SatMediumFlaggedPartitions = pers->m_SatMediumFlaggedPartitions;
+  trans->m_SatTightFlaggedPartitions = pers->m_SatTightFlaggedPartitions;
+  trans->m_BadFEB_WFlaggedPartitions = pers->m_BadFEB_WFlaggedPartitions;  
+  trans->m_MNBLooseFlaggedPartitions = pers->m_MNBLooseFlaggedPartitions;
+  trans->m_MNBTightFlaggedPartitions = pers->m_MNBTightFlaggedPartitions;
+
+}
diff --git a/LArCalorimeter/LArCnv/LArTPCnv/src/LArTPCnv.cxx b/LArCalorimeter/LArCnv/LArTPCnv/src/LArTPCnv.cxx
index ad69702ba0e..7f94639d87c 100644
--- a/LArCalorimeter/LArCnv/LArTPCnv/src/LArTPCnv.cxx
+++ b/LArCalorimeter/LArCnv/LArTPCnv/src/LArTPCnv.cxx
@@ -36,6 +36,9 @@
 #include "LArTPCnv/LArNoisyROSummaryCnv_p2.h" 
 #include "LArTPCnv/LArNoisyROSummary_p3.h" 
 #include "LArTPCnv/LArNoisyROSummaryCnv_p3.h" 
+#include "LArTPCnv/LArNoisyROSummary_p4.h"
+#include "LArTPCnv/LArNoisyROSummaryCnv_p4.h"
+
 
 DECLARE_TPCNV_FACTORY(LArDigitContainerCnv_p1,
                       LArDigitContainer,
@@ -60,8 +63,13 @@ DECLARE_TPCNV_FACTORY(LArNoisyROSummaryCnv_p2,
 DECLARE_TPCNV_FACTORY(LArNoisyROSummaryCnv_p3,
                       LArNoisyROSummary,
                       LArNoisyROSummary_p3,
-                      Athena::TPCnvVers::Current)
+                      Athena::TPCnvVers::Old)
                       
+DECLARE_TPCNV_FACTORY(LArNoisyROSummaryCnv_p4,
+                      LArNoisyROSummary,
+                      LArNoisyROSummary_p4,
+                      Athena::TPCnvVers::Current)
+
 DECLARE_TPCNV_FACTORY(LArRawChannelContainerCnv_p1,
                       LArRawChannelContainer,
                       LArRawChannelContainer_p1,
diff --git a/LArCalorimeter/LArCnv/LArTPCnv/test/LArNoisyROSummaryCnv_p4_test.cxx b/LArCalorimeter/LArCnv/LArTPCnv/test/LArNoisyROSummaryCnv_p4_test.cxx
new file mode 100644
index 00000000000..0d888fd4798
--- /dev/null
+++ b/LArCalorimeter/LArCnv/LArTPCnv/test/LArNoisyROSummaryCnv_p4_test.cxx
@@ -0,0 +1,78 @@
+/*
+  Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
+*/
+
+// $Id$
+/**
+ * @file LArTPCnv/test/LArNoisyROSSummaryCnv_p3_test.cxx
+ * @author scott snyder <snyder@bnl.gov>
+ * @date Mar, 2016
+ * @brief Tests for LArNoisyROSSummaryCnv_p3.
+ */
+
+
+#undef NDEBUG
+#include "LArTPCnv/LArNoisyROSummaryCnv_p4.h"
+#include <cassert>
+#include <iostream>
+
+
+void compare (const LArNoisyROSummary& p1,
+              const LArNoisyROSummary& p2)
+{
+  assert (p1.get_noisy_febs() == p2.get_noisy_febs());
+  assert (p1.get_noisy_preamps() == p2.get_noisy_preamps());
+  assert (p1.BadFEBFlaggedPartitions() == p2.BadFEBFlaggedPartitions());
+  assert (p1.BadFEB_WFlaggedPartitions() == p2.BadFEB_WFlaggedPartitions());
+  assert (p1.SatMediumFlaggedPartitions() == p2.SatMediumFlaggedPartitions());
+  assert (p1.SatTightFlaggedPartitions() == p2.SatTightFlaggedPartitions());
+  assert (p1.MNBLooseFlaggedPartitions() == p2.MNBLooseFlaggedPartitions());
+  assert (p1.MNBTightFlaggedPartitions() == p2.MNBTightFlaggedPartitions());
+  assert (p1.get_MNBTight_febs() == p2.get_MNBTight_febs());
+  assert (p1.get_MNBLoose_febs() == p2.get_MNBLoose_febs());
+}
+
+
+void testit (const LArNoisyROSummary& trans1)
+{
+  MsgStream log (0, "test");
+  LArNoisyROSummaryCnv_p4 cnv;
+  LArNoisyROSummary_p4 pers;
+  cnv.transToPers (&trans1, &pers, log);
+  LArNoisyROSummary trans2;
+  cnv.persToTrans (&pers, &trans2, log);
+
+  compare (trans1, trans2);
+}
+
+
+void test1()
+{
+  std::cout << "test1\n";
+
+  LArNoisyROSummary trans1;
+  trans1.add_noisy_feb (HWIdentifier (0x1234));
+  trans1.add_noisy_feb (HWIdentifier (0x1235));
+  trans1.add_noisy_feb (HWIdentifier (0x1236));
+  trans1.add_noisy_preamp (HWIdentifier (0x2134), 10);
+  trans1.add_noisy_preamp (HWIdentifier (0x2135), 11);
+  trans1.SetBadFEBFlaggedPartitions (0x12);
+  trans1.SetBadFEB_WFlaggedPartitions (0x23);
+  trans1.SetSatMediumFlaggedPartitions (0x34);
+  trans1.SetSatTightFlaggedPartitions (0x45);
+  trans1.SetMNBTightFlaggedPartitions (0x56);
+  trans1.SetMNBLooseFlaggedPartitions (0x67);
+  trans1.add_MNBTight_feb(HWIdentifier (0xF1234));
+  trans1.add_MNBTight_feb(HWIdentifier (0xF1235));
+  trans1.add_MNBLoose_feb(HWIdentifier (0xF4321));
+  trans1.add_MNBLoose_feb(HWIdentifier (0xF4322));
+    
+  testit (trans1);
+}
+
+
+int main()
+{
+  test1();
+  return 0;
+}
-- 
GitLab