ATLAS Offline Software
Loading...
Searching...
No Matches
CaloClusterStoreHelper.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3*/
4
11
12
13std::unique_ptr<xAOD::CaloCluster> CaloClusterStoreHelper::makeCluster(const CaloCellContainer* cellCont) {
14 return makeCluster (DataLink<CaloCellContainer> (cellCont));
15}
16
17
18std::unique_ptr<xAOD::CaloCluster> CaloClusterStoreHelper::makeCluster(const DataLink<CaloCellContainer>& cellCont) {
19 std::unique_ptr<xAOD::CaloCluster> cluster = std::make_unique<xAOD::CaloCluster>();
20 cluster->makePrivateStore();
21 if (cellCont) cluster->addCellLink(std::make_unique<CaloClusterCellLink>(cellCont));
22 return cluster;
23}
24
25
26std::unique_ptr<xAOD::CaloCluster> CaloClusterStoreHelper::makeCluster(const CaloCellContainer* cellCont,
27 const double eta0, const double phi0,
28 const xAOD::CaloCluster_v1::ClusterSize clusterSize) {
29 std::unique_ptr<xAOD::CaloCluster> cluster=CaloClusterStoreHelper::makeCluster(cellCont);
30 cluster->setEta0(eta0);
31 cluster->setPhi0(phi0);
32 cluster->setClusterSize(clusterSize);
33 return cluster;
34}
35
36
42
43
45 const DataLink<CaloCellContainer>& cellCont) {
46
47 xAOD::CaloCluster* cluster=cont->push_back(std::make_unique<xAOD::CaloCluster>());
48 if (cellCont) cluster->addCellLink(std::make_unique<CaloClusterCellLink>(cellCont));
49 return cluster;
50}
51
52
54
55 // Create the xAOD container and its auxiliary store:
56 StatusCode sc =
57 clusColl.record (std::make_unique<xAOD::CaloClusterContainer>(),
58 std::make_unique<xAOD::CaloClusterAuxContainer>());
59 return sc;
60}
61
62
63StatusCode
65 xAOD::CaloClusterContainer* pClusterColl)
66{
67 auto cellLinks = std::make_unique<CaloClusterCellLinkContainer>();
68
69 //Loop on clusters and call setLink to transfer ownership of CaloClusterCellLink object to
70 //CaloClusterCellLinkContainer
72 for (xAOD::CaloCluster* cl : *pClusterColl) {
73 cl->setLink(cellLinks.get(), sg);
74 }
75
76 return h.record (std::move (cellLinks));
77}
78
79void
81 const EventContext& ctx,
83 SG::WriteHandle<CaloClusterCellLinkContainer>& outClusterContainerCellLink)
84{
85 for (xAOD::CaloCluster* cl : *outClusterContainer) {
86 cl->setLink(outClusterContainerCellLink.ptr(), ctx);
87 }
88}
89
90 //Moved to here from CaloRunClusterCorrection
92 // make a Cluster Container
93 newColl->clear();
94 newColl->reserve (oldColl->size());
95 for (const xAOD::CaloCluster* oldCluster : *oldColl) {
96 xAOD::CaloCluster* newClu=newColl->push_back(std::make_unique<xAOD::CaloCluster>());
97 *newClu=*oldCluster;
98 //new xAOD::CaloCluster (*oldCluster)); //Copy c'tor creates a private AuxStore and a private ClusterCellLink obj
99 }
100 }
Helpers for checking error return status codes and reporting errors.
static Double_t sc
Hold a pointer to the current event store.
Header file for AthHistogramAlgorithm.
Container class for CaloCell.
static std::unique_ptr< xAOD::CaloCluster > makeCluster(const CaloCellContainer *cellCont)
Creates a valid CaloCluster with a private Aux-Store and CellLink container.
static void copyContainer(const xAOD::CaloClusterContainer *oldColl, xAOD::CaloClusterContainer *newColl)
Deep copy of a cluster container.
static StatusCode AddContainerWriteHandle(SG::WriteHandle< xAOD::CaloClusterContainer > &clusColl)
Creates a new xAOD::CaloClusterContainer in the given WriteHandle + CaloClusterAuxContainer and recor...
static StatusCode finalizeClusters(SG::WriteHandle< CaloClusterCellLinkContainer > &h, xAOD::CaloClusterContainer *pClusterColl)
Finalize clusters (move CaloClusterCellLink to a separate container).
void reserve(size_type n)
Attempt to preallocate enough memory for a specified number of elements.
value_type push_back(value_type pElem)
Add an element to the end of the collection.
size_type size() const noexcept
Returns the number of elements in the collection.
void clear()
Erase all the elements in the collection.
static IProxyDict * store()
Fetch the current store.
StatusCode record(std::unique_ptr< T > data)
Record a const object to the store.
pointer_type ptr()
Dereference the pointer.
void addCellLink(CaloClusterCellLink *CCCL)
ClusterSize
Enumeration to identify different cluster sizes.
CaloCluster_v1 CaloCluster
Define the latest version of the calorimeter cluster class.
CaloClusterContainer_v1 CaloClusterContainer
Define the latest version of the calorimeter cluster container.