From 1c6d0fef86c3824fd781d5495acb5f9f1566b351 Mon Sep 17 00:00:00 2001 From: Tobias Bockh <tobias.boeckh@cern.ch> Date: Wed, 17 Mar 2021 21:07:43 +0000 Subject: [PATCH] TP converter for space points --- .../TrackerEventAthenaPool/CMakeLists.txt | 3 + .../src/SpacePointContainerCnv.cxx | 35 ++++++++++++ .../src/SpacePointContainerCnv.h | 31 ++++++++++ .../TrackerEventTPCnv/CMakeLists.txt | 2 + .../TrackerEventTPCnv/SpacePointCnv_p0.h | 26 +++++++++ .../SpacePointCollection_p0.h | 22 ++++++++ .../SpacePointContainerCnv_p0.h | 26 +++++++++ .../SpacePointContainer_p0.h | 26 +++++++++ .../TrackerEventTPCnv/SpacePoint_p0.h | 44 +++++++++++++++ .../TrackerEventTPCnv/TrackerEventTPCnvDict.h | 5 ++ .../TrackerEventTPCnv/selection.xml | 8 +++ .../src/SpacePointCnv_p0.cxx | 33 +++++++++++ .../src/SpacePointContainerCnv_p0.cxx | 56 +++++++++++++++++++ .../TrackerSpacePointFormationConfig.py | 3 +- 14 files changed, 319 insertions(+), 1 deletion(-) create mode 100644 Tracker/TrackerEventCnv/TrackerEventAthenaPool/src/SpacePointContainerCnv.cxx create mode 100644 Tracker/TrackerEventCnv/TrackerEventAthenaPool/src/SpacePointContainerCnv.h create mode 100644 Tracker/TrackerEventCnv/TrackerEventTPCnv/TrackerEventTPCnv/SpacePointCnv_p0.h create mode 100644 Tracker/TrackerEventCnv/TrackerEventTPCnv/TrackerEventTPCnv/SpacePointCollection_p0.h create mode 100644 Tracker/TrackerEventCnv/TrackerEventTPCnv/TrackerEventTPCnv/SpacePointContainerCnv_p0.h create mode 100644 Tracker/TrackerEventCnv/TrackerEventTPCnv/TrackerEventTPCnv/SpacePointContainer_p0.h create mode 100644 Tracker/TrackerEventCnv/TrackerEventTPCnv/TrackerEventTPCnv/SpacePoint_p0.h create mode 100644 Tracker/TrackerEventCnv/TrackerEventTPCnv/src/SpacePointCnv_p0.cxx create mode 100644 Tracker/TrackerEventCnv/TrackerEventTPCnv/src/SpacePointContainerCnv_p0.cxx diff --git a/Tracker/TrackerEventCnv/TrackerEventAthenaPool/CMakeLists.txt b/Tracker/TrackerEventCnv/TrackerEventAthenaPool/CMakeLists.txt index ece9e410..4f948521 100644 --- a/Tracker/TrackerEventCnv/TrackerEventAthenaPool/CMakeLists.txt +++ b/Tracker/TrackerEventCnv/TrackerEventAthenaPool/CMakeLists.txt @@ -12,6 +12,7 @@ atlas_add_poolcnv_library( TrackerEventAthenaPoolPoolCnv FILES TrackerRawData/FaserSCT_RDO_Container.h TrackerPrepRawData/FaserSCT_ClusterContainer.h TrackerSimData/TrackerSimDataCollection.h + TrkSpacePoint/SpacePointContainer.h # FaserSCT_ConditionsData/FaserSCT_FlaggedCondData.h LINK_LIBRARIES Identifier GeneratorObjectsTPCnv AthAllocators AthContainers AthenaBaseComps AthenaKernel SGTools StoreGateLib AthenaPoolCnvSvcLib @@ -19,6 +20,8 @@ atlas_add_poolcnv_library( TrackerEventAthenaPoolPoolCnv TrackerReadoutGeometry TrackerEventTPCnv TrackerRawData TrackerSimData TrackerPrepRawData TrkTrack + TrkSpacePoint + TrackerSpacePoint # FaserSCT_ConditionsData ) diff --git a/Tracker/TrackerEventCnv/TrackerEventAthenaPool/src/SpacePointContainerCnv.cxx b/Tracker/TrackerEventCnv/TrackerEventAthenaPool/src/SpacePointContainerCnv.cxx new file mode 100644 index 00000000..4ea69f69 --- /dev/null +++ b/Tracker/TrackerEventCnv/TrackerEventAthenaPool/src/SpacePointContainerCnv.cxx @@ -0,0 +1,35 @@ +/* + Copyright (C) 2021 CERN for the benefit of the FASER collaboration +*/ + +#include "SpacePointContainerCnv.h" + +SpacePointContainer_PERS* +SpacePointContainerCnv::createPersistent (SpacePointContainer* transObj) { + ATH_MSG_INFO("SpacePointContainerCnv::createPersistent()"); + + SpacePointContainerCnv_PERS converter; + + SpacePointContainer_PERS* persObj(nullptr); + persObj = converter.createPersistent(transObj, msg()); + return persObj; +} + + +SpacePointContainer* +SpacePointContainerCnv::createTransient() { + ATH_MSG_INFO("SpacePointContainerCnv::createTransient()"); + + static const pool::Guid p0_guid("DB0397F9-A163-496F-BC17-C7E507A1FA50"); + SpacePointContainer* transObj(nullptr); + + if (compareClassGuid(p0_guid)) { + std::unique_ptr<SpacePointContainer_PERS> col_vect(poolReadObject<SpacePointContainer_PERS>()); + SpacePointContainerCnv_PERS converter; + transObj = converter.createTransient( col_vect.get(), msg()); + } else { + throw std::runtime_error("Unsupported persistent version of SpacePointContainer"); + } + + return transObj; +} diff --git a/Tracker/TrackerEventCnv/TrackerEventAthenaPool/src/SpacePointContainerCnv.h b/Tracker/TrackerEventCnv/TrackerEventAthenaPool/src/SpacePointContainerCnv.h new file mode 100644 index 00000000..9537ce3a --- /dev/null +++ b/Tracker/TrackerEventCnv/TrackerEventAthenaPool/src/SpacePointContainerCnv.h @@ -0,0 +1,31 @@ +/* + Copyright 2021 CERN for the benefit of the FASER collaboration +*/ + +#ifndef SPACEPOINTCONTAINERCNV_H +#define SPACEPOINTCONTAINERCNV_H + +#include "AthenaPoolCnvSvc/T_AthenaPoolCustomCnv.h" + +#include "TrackerEventTPCnv/SpacePointContainerCnv_p0.h" + +#include "TrkSpacePoint/SpacePointContainer.h" +#include "TrackerEventTPCnv/SpacePointContainer_p0.h" + +typedef SpacePointContainer_p0 SpacePointContainer_PERS; +typedef SpacePointContainerCnv_p0 SpacePointContainerCnv_PERS; + +typedef T_AthenaPoolCustomCnv<SpacePointContainer, SpacePointContainer_PERS> SpacePointContainerCnvBase; + +class SpacePointContainerCnv : public SpacePointContainerCnvBase { + friend class CnvFactory<SpacePointContainerCnv>; + + public: + SpacePointContainerCnv (ISvcLocator* svcloc) : SpacePointContainerCnvBase(svcloc) {} + + protected: + virtual SpacePointContainer_PERS* createPersistent (SpacePointContainer* transObj); + virtual SpacePointContainer* createTransient (); +}; + +#endif // SPACEPOINTCONTAINERCNV_H diff --git a/Tracker/TrackerEventCnv/TrackerEventTPCnv/CMakeLists.txt b/Tracker/TrackerEventCnv/TrackerEventTPCnv/CMakeLists.txt index d60ff6dd..1a1a269b 100644 --- a/Tracker/TrackerEventCnv/TrackerEventTPCnv/CMakeLists.txt +++ b/Tracker/TrackerEventCnv/TrackerEventTPCnv/CMakeLists.txt @@ -17,6 +17,8 @@ atlas_add_tpcnv_library( TrackerEventTPCnv TrackerPrepRawData TrkEventTPCnv TrkPrepRawData + TrkSpacePoint + TrackerSpacePoint PRIVATE_LINK_LIBRARIES AthenaBaseComps AthenaKernel EventPrimitives TrackerReadoutGeometry TrkSurfaces TrkEventPrimitives TrkMeasurementBase TrkRIO_OnTrack EventContainers ) diff --git a/Tracker/TrackerEventCnv/TrackerEventTPCnv/TrackerEventTPCnv/SpacePointCnv_p0.h b/Tracker/TrackerEventCnv/TrackerEventTPCnv/TrackerEventTPCnv/SpacePointCnv_p0.h new file mode 100644 index 00000000..10c3090e --- /dev/null +++ b/Tracker/TrackerEventCnv/TrackerEventTPCnv/TrackerEventTPCnv/SpacePointCnv_p0.h @@ -0,0 +1,26 @@ +/* + Copyright (C) 2021 CERN for the benefit of the FASER collaboration +*/ + +#ifndef SPACEPOINTCNV_P0_H +#define SPACEPOINTCNV_P0_H + +#include "TrackerSpacePoint/FaserSCT_SpacePoint.h" +#include "TrackerEventTPCnv/SpacePoint_p0.h" + +#include "AthenaPoolCnvSvc/T_AthenaPoolTPConverter.h" + +class SpacePointCnv_p0 : public T_AthenaPoolTPCnvBase<Tracker::FaserSCT_SpacePoint, SpacePoint_p0> { + public: + SpacePointCnv_p0() {}; + + virtual void persToTrans(const SpacePoint_p0* persObj, + Tracker::FaserSCT_SpacePoint* transObj, + MsgStream& log); + + virtual void transToPers(const Tracker::FaserSCT_SpacePoint* transObj, + SpacePoint_p0* persObj, + MsgStream& log); +}; + +#endif // SPACEPOINTCNV_P0_H diff --git a/Tracker/TrackerEventCnv/TrackerEventTPCnv/TrackerEventTPCnv/SpacePointCollection_p0.h b/Tracker/TrackerEventCnv/TrackerEventTPCnv/TrackerEventTPCnv/SpacePointCollection_p0.h new file mode 100644 index 00000000..3d71dcf8 --- /dev/null +++ b/Tracker/TrackerEventCnv/TrackerEventTPCnv/TrackerEventTPCnv/SpacePointCollection_p0.h @@ -0,0 +1,22 @@ +/* + Copyright 2021 CERN for the benefit of the FASER collaboration +*/ + +#ifndef SPACEPOINTCOLLECTION_P0_H +#define SPACEPOINTCOLLECTION_P0_H + +#include <vector> + +class SpacePointCollection_p0 { + public: + SpacePointCollection_p0(); + friend class SpacePointClusterCnv_p0; + + unsigned short m_idHash; + unsigned short m_size; +}; + +inline +SpacePointCollection_p0::SpacePointCollection_p0() : m_idHash(0) { } + +#endif // SPACEPOINTCOLLECTION_P0_H diff --git a/Tracker/TrackerEventCnv/TrackerEventTPCnv/TrackerEventTPCnv/SpacePointContainerCnv_p0.h b/Tracker/TrackerEventCnv/TrackerEventTPCnv/TrackerEventTPCnv/SpacePointContainerCnv_p0.h new file mode 100644 index 00000000..2da19a3c --- /dev/null +++ b/Tracker/TrackerEventCnv/TrackerEventTPCnv/TrackerEventTPCnv/SpacePointContainerCnv_p0.h @@ -0,0 +1,26 @@ +/* + Copyright 2021 CERN for the benefit of the FASER collaboration +*/ + +#ifndef SPACEPOINTCONTAINERCNV_P0_H +#define SPACEPOINTCONTAINERCNV_P0_H + +#include "AthenaPoolCnvSvc/T_AthenaPoolTPConverter.h" + +#include "TrkSpacePoint/SpacePointContainer.h" +#include "TrackerEventTPCnv/SpacePointContainer_p0.h" + +class SpacePointContainerCnv_p0 : public T_AthenaPoolTPCnvBase<SpacePointContainer, SpacePointContainer_p0> { + public: + SpacePointContainerCnv_p0() {}; + + virtual void persToTrans(const SpacePointContainer_p0* persObj, + SpacePointContainer* transObj, + MsgStream& log); + + virtual void transToPers(const SpacePointContainer* transObj, + SpacePointContainer_p0* persObj, + MsgStream& log); +}; + +#endif // SPACEPOINTCONTAINERCNV_P0_H diff --git a/Tracker/TrackerEventCnv/TrackerEventTPCnv/TrackerEventTPCnv/SpacePointContainer_p0.h b/Tracker/TrackerEventCnv/TrackerEventTPCnv/TrackerEventTPCnv/SpacePointContainer_p0.h new file mode 100644 index 00000000..0a9cdbe4 --- /dev/null +++ b/Tracker/TrackerEventCnv/TrackerEventTPCnv/TrackerEventTPCnv/SpacePointContainer_p0.h @@ -0,0 +1,26 @@ +/* + Copyright (C) 2021 CERN for the benefit of the FASER collaboration +*/ + +#ifndef SPACEPOINTCONTAINER_P0_H +#define SPACEPOINTCONTAINER_P0_H + +#include <vector> +#include "TrackerEventTPCnv/SpacePoint_p0.h" +#include "TrackerEventTPCnv/SpacePointCollection_p0.h" + +class SpacePointContainer_p0 { + public: + SpacePointContainer_p0(); + friend class SpacePointContainerCnv_p0; + private: + std::vector<SpacePoint_p0> m_spacepoints; + std::vector<SpacePointCollection_p0> m_spacepoint_collections; +}; + +inline SpacePointContainer_p0::SpacePointContainer_p0() { + m_spacepoints.clear(); + m_spacepoint_collections.clear(); +} + +#endif // SPACEPOINTCONTAINER_P0_H diff --git a/Tracker/TrackerEventCnv/TrackerEventTPCnv/TrackerEventTPCnv/SpacePoint_p0.h b/Tracker/TrackerEventCnv/TrackerEventTPCnv/TrackerEventTPCnv/SpacePoint_p0.h new file mode 100644 index 00000000..4a648fa5 --- /dev/null +++ b/Tracker/TrackerEventCnv/TrackerEventTPCnv/TrackerEventTPCnv/SpacePoint_p0.h @@ -0,0 +1,44 @@ +/* + Copyright 2021 CERN for the benefit of the FASER collaboration +*/ + +#ifndef SPACEPOINT_P0_H +#define SPACEPOINT_P0_H + +class SpacePoint_p0 { + public: + SpacePoint_p0(); + friend class SpacePointCnv_p0; + + private: + unsigned int m_idHash0; + unsigned int m_idHash1; + + float m_pos_x; + float m_pos_y; + float m_pos_z; + + float m_cov00; + float m_cov01; + float m_cov02; + float m_cov11; + float m_cov12; + float m_cov22; +}; + +inline +SpacePoint_p0::SpacePoint_p0() : + m_idHash0(0), + m_idHash1(0), + m_pos_x(0), + m_pos_y(0), + m_pos_z(0), + m_cov00(0), + m_cov01(0), + m_cov02(0), + m_cov11(0), + m_cov12(0), + m_cov22(0) +{} + +#endif // SPACEPOINT_P0_H diff --git a/Tracker/TrackerEventCnv/TrackerEventTPCnv/TrackerEventTPCnv/TrackerEventTPCnvDict.h b/Tracker/TrackerEventCnv/TrackerEventTPCnv/TrackerEventTPCnv/TrackerEventTPCnvDict.h index a99bf84e..11d25251 100644 --- a/Tracker/TrackerEventCnv/TrackerEventTPCnv/TrackerEventTPCnv/TrackerEventTPCnvDict.h +++ b/Tracker/TrackerEventCnv/TrackerEventTPCnv/TrackerEventTPCnv/TrackerEventTPCnvDict.h @@ -40,6 +40,9 @@ // #include "InDetEventTPCnv/InDetLowBetaInfo/InDetLowBetaContainer_p1.h" // #include "InDetEventTPCnv/InDetLowBetaInfo/InDetLowBetaCandidate_tlp1.h" // #include "InDetEventTPCnv/InDetLowBetaInfo/InDetLowBetaContainer_tlp1.h" +#include "TrackerEventTPCnv/SpacePoint_p0.h" +#include "TrackerEventTPCnv/SpacePointCollection_p0.h" +#include "TrackerEventTPCnv/SpacePointContainer_p0.h" namespace TrackerEventTPCnvDict { struct tmp @@ -56,6 +59,8 @@ namespace TrackerEventTPCnvDict { // std::vector< InDet::CompetingSCT_ClustersOnTrack_p1> m_v10; // std::vector< InDet::CompetingTRT_DriftCirclesOnTrack_p1> m_v11; // std::vector< InDetLowBetaCandidate_p1> m_v12; + std::vector<SpacePoint_p0> m_v13; + std::vector<SpacePointCollection_p0> m_v14; }; } //> namespace TrackerEventTPCnvDict diff --git a/Tracker/TrackerEventCnv/TrackerEventTPCnv/TrackerEventTPCnv/selection.xml b/Tracker/TrackerEventCnv/TrackerEventTPCnv/TrackerEventTPCnv/selection.xml index 9f926718..d74ef582 100644 --- a/Tracker/TrackerEventCnv/TrackerEventTPCnv/TrackerEventTPCnv/selection.xml +++ b/Tracker/TrackerEventCnv/TrackerEventTPCnv/TrackerEventTPCnv/selection.xml @@ -73,3 +73,11 @@ <!-- <class name="std::pair<unsigned int,std::vector<unsigned int> >" /> --> <class name="std::vector< std::pair<unsigned int, std::vector<unsigned int> > >" /> + <!-- SpacePoint --> + <class name="SpacePoint_p0" /> + <class name="std::vector<SpacePoint_p0>" /> + <class name="SpacePointCollection_p0" /> + <class name="std::vector<SpacePointCollection_p0>" /> + <class name="SpacePointContainer_p0" id="DB0397F9-A163-496F-BC17-C7E507A1FA50" /> + +</lcgdict> \ No newline at end of file diff --git a/Tracker/TrackerEventCnv/TrackerEventTPCnv/src/SpacePointCnv_p0.cxx b/Tracker/TrackerEventCnv/TrackerEventTPCnv/src/SpacePointCnv_p0.cxx new file mode 100644 index 00000000..63dba185 --- /dev/null +++ b/Tracker/TrackerEventCnv/TrackerEventTPCnv/src/SpacePointCnv_p0.cxx @@ -0,0 +1,33 @@ +/* + Copyright (C) 2021 CERN for the benefit of the FASER collaboration +*/ + +#include "TrackerEventTPCnv/SpacePointCnv_p0.h" + +void +SpacePointCnv_p0::persToTrans(const SpacePoint_p0* persObj, Tracker::FaserSCT_SpacePoint* transObj, MsgStream& /*log*/) { + + // TODO + +} + +void +SpacePointCnv_p0::transToPers(const Tracker::FaserSCT_SpacePoint* transObj, SpacePoint_p0* persObj, MsgStream& /*log*/) { + + auto idHashs = transObj->elementIdList(); + persObj->m_idHash0 = idHashs.first; + persObj->m_idHash1 = idHashs.second; + + auto globalPosition = transObj->globalPosition(); + persObj->m_pos_x = globalPosition.x(); + persObj->m_pos_y = globalPosition.y(); + persObj->m_pos_z = globalPosition.z(); + + auto cov = transObj->globCovariance(); + persObj->m_cov00 = cov(0,0); + persObj->m_cov01 = cov(0,1); + persObj->m_cov02 = cov(0,2); + persObj->m_cov11 = cov(1,1); + persObj->m_cov12 = cov(2,2); + persObj->m_cov22 = cov(2,2); +} diff --git a/Tracker/TrackerEventCnv/TrackerEventTPCnv/src/SpacePointContainerCnv_p0.cxx b/Tracker/TrackerEventCnv/TrackerEventTPCnv/src/SpacePointContainerCnv_p0.cxx new file mode 100644 index 00000000..88c0f0b2 --- /dev/null +++ b/Tracker/TrackerEventCnv/TrackerEventTPCnv/src/SpacePointContainerCnv_p0.cxx @@ -0,0 +1,56 @@ +/* + Copyright (C) 2021 CERN for the benefit of the FASER collaboration +*/ + +#include "TrackerEventTPCnv/SpacePointContainerCnv_p0.h" + +#include "TrackerEventTPCnv/SpacePoint_p0.h" +#include "TrackerEventTPCnv/SpacePointCollection_p0.h" +#include "TrackerEventTPCnv/SpacePointCnv_p0.h" + +void SpacePointContainerCnv_p0::persToTrans(const SpacePointContainer_p0* /*persObj*/, SpacePointContainer* /*transObj*/, MsgStream& /*log*/) { + + // TODO + +} + +void SpacePointContainerCnv_p0::transToPers(const SpacePointContainer* transObj, SpacePointContainer_p0* persObj, MsgStream& log) { + log << MSG::INFO << "SpacePointContainerCnv_p0::transToPers()" << endmsg; + + SpacePointCnv_p0 spCnv; + typedef SpacePointContainer TRANS; + + TRANS::const_iterator spColl; + TRANS::const_iterator spCollEnd = transObj->end(); + unsigned int spCollId; + unsigned int spId = 0; + unsigned int nextSpId = 0; + unsigned int lastIdHash = 0; + + // resize data vectors + persObj->m_spacepoint_collections.resize(transObj->numberOfCollections()); + int n_spacepoints = 0; + for (spColl = transObj->begin(); spColl != spCollEnd; spColl++) { + n_spacepoints += (*spColl)->size(); + } + persObj->m_spacepoints.resize(n_spacepoints); + + for (spColl = transObj->begin(), spCollId = 0; spColl != spCollEnd; ++spCollId, ++spColl) { + // create persitent representation of SpacePointCollections + const SpacePointCollection& collection = **spColl; + SpacePointCollection_p0& pcollection = persObj->m_spacepoint_collections[spCollId]; + pcollection.m_size = collection.size(); + pcollection.m_idHash = collection.identifyHash() - lastIdHash; + lastIdHash = collection.identifyHash(); + + spId = nextSpId; + nextSpId += collection.size(); + + // create persitent representation of SpacePoints + for (std::size_t i = 0; i < collection.size(); ++i) { + SpacePoint_p0* persSP = &(persObj->m_spacepoints[i + spId]); + const Tracker::FaserSCT_SpacePoint* transSP = dynamic_cast<const Tracker::FaserSCT_SpacePoint*>(collection[i]); + spCnv.transToPers(transSP, persSP, log); + } + } +} diff --git a/Tracker/TrackerRecAlgs/TrackerSpacePointFormation/python/TrackerSpacePointFormationConfig.py b/Tracker/TrackerRecAlgs/TrackerSpacePointFormation/python/TrackerSpacePointFormationConfig.py index 9760e362..e3859d6d 100644 --- a/Tracker/TrackerRecAlgs/TrackerSpacePointFormation/python/TrackerSpacePointFormationConfig.py +++ b/Tracker/TrackerRecAlgs/TrackerSpacePointFormation/python/TrackerSpacePointFormationConfig.py @@ -55,7 +55,8 @@ def StatisticsBasicCfg(flags, **kwargs): def TrackerSpacePointFinder_OutputCfg(flags): """Return ComponentAccumulator with Output for SCT. Not standalone.""" acc = ComponentAccumulator() - acc.merge(OutputStreamCfg(flags, "ESD")) + itemList = [ "SpacePointContainer#*"] + acc.merge(OutputStreamCfg(flags, "ESD", itemList)) ostream = acc.getEventAlgo("OutputStreamESD") ostream.TakeItemsFromInput = True return acc -- GitLab