diff --git a/LArCalorimeter/LArCnv/LArTPCnv/CMakeLists.txt b/LArCalorimeter/LArCnv/LArTPCnv/CMakeLists.txt index 942791f777150c1d43336daa04cd8c8eb3fb7307..8e6d874474f47660182e2aba80ffdb815056853e 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 0000000000000000000000000000000000000000..9f906610eefb625a002b9059f38f310ba92b3665 --- /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 0000000000000000000000000000000000000000..4d73de7c52999b762f638952536e28f1e9db178d --- /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 7a3b5a6230ade5577d8df4996099a2a6361b6bcf..bb39a5234a8a844fd174b628c23f2bb7e9f0310d 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 e81df9f1f72748fbbb626075cfc7ff3202bada47..f936de4d449aa3b7f56356a013dcb97689ea6830 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 4da4dbda33793c821d4bdc92ede8668984c3dfd7..167af4f5c41de0a30dbe1f576d8ea003eb014b7f 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 0000000000000000000000000000000000000000..cdbafe1e179b34c01285092730f8cb3e02840243 --- /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 ad69702ba0e17164e7a162391b0f4b3fbaf91454..7f94639d87c45c890933eb72d88c47a8d3d6fe0d 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 0000000000000000000000000000000000000000..0d888fd4798ddaa32bde47b8d0de36dd56c04820 --- /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; +}