From ada5b3923c7a7452b5de17d7cc7676fb285b6120 Mon Sep 17 00:00:00 2001 From: Roland Jansky <roland.jansky@cern.ch> Date: Thu, 28 Mar 2019 11:18:18 +0100 Subject: [PATCH] adding StripRawData to the EDM --- EDM/calypso/xAOD/xAODTracking/CMakeLists.txt | 4 ++ .../xAOD/xAODTracking/Root/StripRawData.cxx | 54 +++++++++++++++ .../Root/StripRawDataAuxContainer.cxx | 21 ++++++ .../Root/dict/ContainerProxies.cxx | 4 +- .../xAODTracking/Root/xAODTrackingCLIDs.cxx | 4 ++ .../test/xAODTracking_StripRawData_test.cxx | 63 ++++++++++++++++++ .../xAODTracking/xAODTracking/StripRawData.h | 65 +++++++++++++++++++ .../xAODTracking/StripRawDataAuxContainer.h | 27 ++++++++ .../xAODTracking/StripRawDataContainer.h | 19 ++++++ .../xAODTracking/xAODTracking/selection.xml | 26 ++++---- .../xAODTracking/xAODTrackingDict.h | 26 ++++---- 11 files changed, 283 insertions(+), 30 deletions(-) create mode 100644 EDM/calypso/xAOD/xAODTracking/Root/StripRawData.cxx create mode 100644 EDM/calypso/xAOD/xAODTracking/Root/StripRawDataAuxContainer.cxx create mode 100644 EDM/calypso/xAOD/xAODTracking/Root/xAODTrackingCLIDs.cxx create mode 100644 EDM/calypso/xAOD/xAODTracking/test/xAODTracking_StripRawData_test.cxx create mode 100644 EDM/calypso/xAOD/xAODTracking/xAODTracking/StripRawData.h create mode 100644 EDM/calypso/xAOD/xAODTracking/xAODTracking/StripRawDataAuxContainer.h create mode 100644 EDM/calypso/xAOD/xAODTracking/xAODTracking/StripRawDataContainer.h diff --git a/EDM/calypso/xAOD/xAODTracking/CMakeLists.txt b/EDM/calypso/xAOD/xAODTracking/CMakeLists.txt index 8ab80d67..4a647f87 100755 --- a/EDM/calypso/xAOD/xAODTracking/CMakeLists.txt +++ b/EDM/calypso/xAOD/xAODTracking/CMakeLists.txt @@ -36,3 +36,7 @@ atlas_add_dictionary( xAODTrackingDict atlas_add_test( xAODTracking_StripCluster_test SOURCES test/xAODTracking_StripCluster_test.cxx LINK_LIBRARIES xAODTracking ) + +atlas_add_test( xAODTracking_StripRawData_test + SOURCES test/xAODTracking_StripRawData_test.cxx + LINK_LIBRARIES xAODTracking ) diff --git a/EDM/calypso/xAOD/xAODTracking/Root/StripRawData.cxx b/EDM/calypso/xAOD/xAODTracking/Root/StripRawData.cxx new file mode 100644 index 00000000..0070ae0f --- /dev/null +++ b/EDM/calypso/xAOD/xAODTracking/Root/StripRawData.cxx @@ -0,0 +1,54 @@ +#include "xAODTracking/StripRawData.h" + +// EDM include(s): +#include "xAODCore/AuxStoreAccessorMacros.h" + +namespace xAOD { + StripRawData::StripRawData() { } + + AUXSTORE_PRIMITIVE_SETTER_AND_GETTER(StripRawData, uint64_t, id, setId) + + static const SG::AuxElement::Accessor<uint32_t> word_acc("dataword"); + void StripRawData::setWord(uint32_t new_word) { + word_acc(*this) = new_word; + } + + uint32_t StripRawData::getWord() const { + return word_acc(*this); + } + + // decode size of group of strips information + int StripRawData::getGroupSize() const { + return getWord() & 0x7FF; + } + + // decode strip information + int StripRawData::getStrip() const { + return (getWord() >> 11) & 0x7FF; + } + + // decode time bin information + int StripRawData::getTimeBin() const { + return (getWord() >> 22) & 0x7; + } + + // returns a word incoding the errors + int StripRawData::getErrors() const { + return (getWord() >> 25) & 0x7; + } + + // returns true if the time bin corresponding to the present BC is on + bool StripRawData::OnTime() const { + return (getWord() >> 23) & 0x1; + } + + // returns true if there is an error in the first hit's data + bool StripRawData::FirstHitError() const { + return (getWord() >> 29) & 0x1; + } + + // returns true if there is an error in the second hit's data + bool StripRawData::SecondHitError() const { + return (getWord() >> 30) & 0x1; + } +} // namespace xAOD \ No newline at end of file diff --git a/EDM/calypso/xAOD/xAODTracking/Root/StripRawDataAuxContainer.cxx b/EDM/calypso/xAOD/xAODTracking/Root/StripRawDataAuxContainer.cxx new file mode 100644 index 00000000..ecb4c5ec --- /dev/null +++ b/EDM/calypso/xAOD/xAODTracking/Root/StripRawDataAuxContainer.cxx @@ -0,0 +1,21 @@ +#include "xAODTracking/StripRawDataAuxContainer.h" + +namespace xAOD { + StripRawDataAuxContainer::StripRawDataAuxContainer() + : AuxContainerBase() + { + AUX_VARIABLE(id); + AUX_VARIABLE(dataword); + } + + void StripRawDataAuxContainer::dump() const { + std::cout<<" Dumping StripRawDataAuxContainer"<<std::endl; + std::cout<<"id:"; + std::copy(id.begin(), id.end(), + std::ostream_iterator<float>(std::cout, ", ")); + std::cout<<"dataword:"; + std::copy(dataword.begin(), dataword.end(), + std::ostream_iterator<float>(std::cout, ", ")); + std::cout<<std::endl; + } +} \ No newline at end of file diff --git a/EDM/calypso/xAOD/xAODTracking/Root/dict/ContainerProxies.cxx b/EDM/calypso/xAOD/xAODTracking/Root/dict/ContainerProxies.cxx index 5e9ce433..a1279874 100644 --- a/EDM/calypso/xAOD/xAODTracking/Root/dict/ContainerProxies.cxx +++ b/EDM/calypso/xAOD/xAODTracking/Root/dict/ContainerProxies.cxx @@ -3,8 +3,8 @@ // Local include(s): #include "xAODTracking/StripClusterContainer.h" -//#include "xAODTracking/versions/SCTRawHitValidationContainer_v1.h" +#include "xAODTracking/StripRawDataContainer.h" // Set up the collection proxies: ADD_NS_DV_PROXY( xAOD, StripClusterContainer ); -//ADD_NS_DV_PROXY( xAOD, SCTRawHitValidationContainer_v1 ); \ No newline at end of file +ADD_NS_DV_PROXY( xAOD, StripRawDataContainer ); \ No newline at end of file diff --git a/EDM/calypso/xAOD/xAODTracking/Root/xAODTrackingCLIDs.cxx b/EDM/calypso/xAOD/xAODTracking/Root/xAODTrackingCLIDs.cxx new file mode 100644 index 00000000..0a30f7e2 --- /dev/null +++ b/EDM/calypso/xAOD/xAODTracking/Root/xAODTrackingCLIDs.cxx @@ -0,0 +1,4 @@ +#include "xAODTracking/StripClusterContainer.h" +#include "xAODTracking/StripClusterAuxContainer.h" +#include "xAODTracking/StripRawDataContainer.h" +#include "xAODTracking/StripRawDataAuxContainer.h" \ No newline at end of file diff --git a/EDM/calypso/xAOD/xAODTracking/test/xAODTracking_StripRawData_test.cxx b/EDM/calypso/xAOD/xAODTracking/test/xAODTracking_StripRawData_test.cxx new file mode 100644 index 00000000..4ea0a213 --- /dev/null +++ b/EDM/calypso/xAOD/xAODTracking/test/xAODTracking_StripRawData_test.cxx @@ -0,0 +1,63 @@ +// System include(s): +#include <iostream> + +// Local include(s): +#include "xAODTracking/StripRawDataContainer.h" +#include "xAODTracking/StripRawDataAuxContainer.h" + +template< typename T > +std::ostream& operator<< ( std::ostream& out, + const std::vector< T >& vec ) { + + out << "["; + for( size_t i = 0; i < vec.size(); ++i ) { + out << vec[ i ]; + if( i < vec.size() - 1 ) { + out << ", "; + } + } + out << "]"; + return out; +} + +/// Function filling one Strip RDO with information +void fill( xAOD::StripRawData& sc ) { + + sc.setWord( (uint32_t) 1010111); + sc.setId( (uint64_t) 1111111111111); + + return; +} + +/// Function printing the properties of a StripCluster +void print( const xAOD::StripRawData& sc ) { + + std::cout << "id = " << sc.id() << std::endl; + std::cout << "word = " << sc.getWord() << std::endl; + + return; +} + +int main() { + + // Create the main containers to test: + xAOD::StripRawDataAuxContainer aux; + xAOD::StripRawDataContainer tpc; + tpc.setStore( &aux ); + + // Add one strip cluster to the container: + xAOD::StripRawData* p = new xAOD::StripRawData(); + tpc.push_back( p ); + + // Fill it with information: + fill( *p ); + + // Print the information: + print( *p ); + + // Print the contents of the auxiliary store: + aux.dump(); + + // Return gracefully: + return 0; +} \ No newline at end of file diff --git a/EDM/calypso/xAOD/xAODTracking/xAODTracking/StripRawData.h b/EDM/calypso/xAOD/xAODTracking/xAODTracking/StripRawData.h new file mode 100644 index 00000000..0ce9d312 --- /dev/null +++ b/EDM/calypso/xAOD/xAODTracking/xAODTracking/StripRawData.h @@ -0,0 +1,65 @@ +#ifndef XAODTRACKING_STRIPRAWDATA_H +#define XAODTRACKING_STRIPRAWDATA_H + +// System include(s): +#include <vector> + +// Core include(s): +#include "AthContainers/AuxElement.h" + +namespace xAOD { + + /** Class describing an Strip Raw Data Object (RDO). + * + * @author Roland Jansky <roland.jansky@cern.ch> + */ + class StripRawData : public SG::AuxElement { + public: + StripRawData(); + + /// set identifier of this RDO + void setId(uint64_t new_identifier); + + /// return identifier of this RDO + uint64_t id() const; + + /// set data word of this RDO + void setWord(uint32_t new_word); + + /** access data word of this RDO and properties encoded therein + * @{ + */ + /// return the data word + uint32_t getWord() const; + + /// return number of strips in this RDO (typically just 1) + int getGroupSize() const; + + /// return ID of (first) strip + int getStrip() const; + + /** Decode time bin information for the 3 consecutive bunch crossings. + * + * This information is stored in 3 bits where the most significant bit + * corresponds to BC-1. So the 3 bit pattern is: (BC-1), BC, (BC+1). + */ + int getTimeBin() const; + + /// return bitmask representing hit errors + int getErrors() const; + + /// check if the time bin corresponding to the present BC is on + bool OnTime() const; + + /// check if there is an error in the first hit's data + bool FirstHitError() const; + + /// check if there is an error in the second hit's data + bool SecondHitError() const; + /// @} + + }; // end of the StripRawData class definition + +} // end of the xAOD namespace + +#endif // XAODTRACKING_STRIPRAWDATA_H \ No newline at end of file diff --git a/EDM/calypso/xAOD/xAODTracking/xAODTracking/StripRawDataAuxContainer.h b/EDM/calypso/xAOD/xAODTracking/xAODTracking/StripRawDataAuxContainer.h new file mode 100644 index 00000000..98026173 --- /dev/null +++ b/EDM/calypso/xAOD/xAODTracking/xAODTracking/StripRawDataAuxContainer.h @@ -0,0 +1,27 @@ +#ifndef XAODTRACKING_STRIPRAWDATAAUXCONTAINER_H +#define XAODTRACKING_STRIPRAWDATAAUXCONTAINER_H + +// System include(s): +#include <vector> + +// Core include(s): +#include "xAODCore/AuxContainerBase.h" +#include "AthLinks/ElementLink.h" + +namespace xAOD { + class StripRawDataAuxContainer : public AuxContainerBase { + public: + StripRawDataAuxContainer(); + /// Dumps contents (for debugging) + void dump() const; + private: + std::vector<uint64_t> id; + std::vector<uint32_t> dataword; + }; +} + +// Set up a CLID for the container: +#include "xAODCore/CLASS_DEF.h" +CLASS_DEF( xAOD::StripRawDataAuxContainer , 1171743595 , 1 ) + +#endif // XAODTRACKING_STRIPRAWDATAAUXCONTAINER_H \ No newline at end of file diff --git a/EDM/calypso/xAOD/xAODTracking/xAODTracking/StripRawDataContainer.h b/EDM/calypso/xAOD/xAODTracking/xAODTracking/StripRawDataContainer.h new file mode 100644 index 00000000..4dd5eb79 --- /dev/null +++ b/EDM/calypso/xAOD/xAODTracking/xAODTracking/StripRawDataContainer.h @@ -0,0 +1,19 @@ +#ifndef XAODTRACKING_STRIPRAWDATACONTAINER_H +#define XAODTRACKING_STRIPRAWDATACONTAINER_H + +// Core include(s): +#include "AthContainers/DataVector.h" + +// Local include(s): +#include "xAODTracking/StripRawData.h" + +namespace xAOD { + /// The container is a simple typedef for now + typedef DataVector<xAOD::StripRawData> StripRawDataContainer; +} + +// Set up a CLID for the container: +#include "xAODCore/CLASS_DEF.h" +CLASS_DEF(xAOD::StripRawDataContainer, 1314367244, 1) + +#endif // XAODTRACKING_STRIPRAWDATACONTAINER_H \ No newline at end of file diff --git a/EDM/calypso/xAOD/xAODTracking/xAODTracking/selection.xml b/EDM/calypso/xAOD/xAODTracking/xAODTracking/selection.xml index c3eb20ca..585d32b4 100644 --- a/EDM/calypso/xAOD/xAODTracking/xAODTracking/selection.xml +++ b/EDM/calypso/xAOD/xAODTracking/xAODTracking/selection.xml @@ -1,16 +1,16 @@ <lcgdict> - <!-- SCTRawHitValidation_v1 dictionaries: --> - <!-- <class name="xAOD::SCTRawHitValidationAuxContainer_v1" --> - <!-- id="788781DA-FE8A-414A-A72B-6E846094FCF8" /> --> - <!-- <class name="xAOD::SCTRawHitValidationContainer_v1" --> - <!-- id="4F8042A1-64B0-42AB-B0A4-C9716C15336A" /> --> - <!-- --> - <!-- <class name="DataLink<xAOD::SCTRawHitValidationContainer_v1>" /> --> - <!-- <class name="std::vector<DataLink<xAOD::SCTRawHitValidationContainer_v1> >" /> --> - <!-- --> - <!-- <class name="ElementLink<xAOD::SCTRawHitValidationContainer_v1>" /> --> - <!-- <class name="std::vector<ElementLink<xAOD::SCTRawHitValidationContainer_v1> >" /> --> - <!-- <class name="std::vector<std::vector<ElementLink<xAOD::SCTRawHitValidationContainer_v1> > >" /> --> + <!-- StripRawData dictionaries: --> + <class name="xAOD::StripRawDataAuxContainer" + id="788781DA-FE8A-414A-A72B-6E846094FCF8" /> + <class name="xAOD::StripRawDataContainer" + id="4F8042A1-64B0-42AB-B0A4-C9716C15336A" /> + <!-- Smart pointers to objects: --> + <class name="DataLink<xAOD::StripRawDataContainer>" /> + <class name="std::vector<DataLink<xAOD::StripRawDataContainer> >" /> + + <class name="ElementLink<xAOD::StripRawDataContainer>" /> + <class name="std::vector<ElementLink<xAOD::StripRawDataContainer> >" /> + <class name="std::vector<std::vector<ElementLink<xAOD::StripRawDataContainer> > >" /> <!-- StripCluster dictionaries: --> <class name="xAOD::StripCluster"/> @@ -19,7 +19,7 @@ <class name="xAOD::StripClusterContainer" id="868F1FD8-AFE7-4B40-B12E-73716C37A6B0"/> - <!-- Smart pointers to objects: --> + <!-- Smart pointers to objects: --> <class name="DataLink<xAOD::StripClusterContainer>" /> <class name="std::vector<DataLink<xAOD::StripClusterContainer> >" /> diff --git a/EDM/calypso/xAOD/xAODTracking/xAODTracking/xAODTrackingDict.h b/EDM/calypso/xAOD/xAODTracking/xAODTracking/xAODTrackingDict.h index 6d8fe7ef..00d1f615 100644 --- a/EDM/calypso/xAOD/xAODTracking/xAODTracking/xAODTrackingDict.h +++ b/EDM/calypso/xAOD/xAODTracking/xAODTracking/xAODTrackingDict.h @@ -23,12 +23,8 @@ #include "xAODTracking/StripClusterContainer.h" #include "xAODTracking/StripClusterAuxContainer.h" -//#include "xAODTracking/SCTRawHitValidation.h" -//#include "xAODTracking/SCTRawHitValidationContainer.h" -//#include "xAODTracking/SCTRawHitValidationAuxContainer.h" -//#include "xAODTracking/versions/SCTRawHitValidation_v1.h" -//#include "xAODTracking/versions/SCTRawHitValidationContainer_v1.h" -//#include "xAODTracking/versions/SCTRawHitValidationAuxContainer_v1.h" +#include "xAODTracking/StripRawDataContainer.h" +#include "xAODTracking/StripRawDataAuxContainer.h" namespace { struct GCCXML_DUMMY_INSTANTIATION_XAODTRACKING { @@ -43,15 +39,15 @@ namespace { std::vector< ElementLink< xAOD::StripClusterContainer > > pel2; std::vector< std::vector< ElementLink< xAOD::StripClusterContainer > > > pel3; - // // Container(s): - // xAOD::SCTRawHitValidationContainer_v1 c6; - // // Data link(s): - // DataLink< xAOD::SCTRawHitValidationContainer_v1 > rdodl1; - // std::vector< DataLink< xAOD::SCTRawHitValidationContainer_v1 > > rdodl2; - // // Element link(s): - // ElementLink< xAOD::SCTRawHitValidationContainer > rdoel1; - // std::vector< ElementLink< xAOD::SCTRawHitValidationContainer_v1 > > rdoel2; - // std::vector< std::vector< ElementLink< xAOD::SCTRawHitValidationContainer_v1 > > > rdoel3; + // Container(s): + xAOD::StripRawDataContainer c6; + // Data link(s): + DataLink< xAOD::StripRawDataContainer > rdodl1; + std::vector< DataLink< xAOD::StripRawDataContainer > > rdodl2; + // Element link(s): + ElementLink< xAOD::StripRawDataContainer > rdoel1; + std::vector< ElementLink< xAOD::StripRawDataContainer > > rdoel2; + std::vector< std::vector< ElementLink< xAOD::StripRawDataContainer > > > rdoel3; }; } -- GitLab