ATLAS Offline Software
Loading...
Searching...
No Matches
CaloCell2ClusterMapper Class Reference

create a map of CaloCluster objects each CaloCell belongs to. More...

#include <CaloCell2ClusterMapper.h>

Inheritance diagram for CaloCell2ClusterMapper:
Collaboration diagram for CaloCell2ClusterMapper:

Public Member Functions

 CaloCell2ClusterMapper (const std::string &name, ISvcLocator *pSvcLocator)
virtual ~CaloCell2ClusterMapper ()
virtual StatusCode initialize () override
virtual StatusCode execute (const EventContext &ctx) const override
virtual StatusCode finalize () override
virtual StatusCode sysInitialize () override
 Override sysInitialize.
virtual bool isClonable () const override
 Specify if the algorithm is clonable.
virtual unsigned int cardinality () const override
 Cardinality (Maximum number of clones that can exist) special value 0 means that algorithm is reentrant.
virtual StatusCode sysExecute (const EventContext &ctx) override
 Execute an algorithm.
virtual const DataObjIDColl & extraOutputDeps () const override
 Return the list of extra output dependencies.
virtual bool filterPassed (const EventContext &ctx) const
virtual void setFilterPassed (bool state, const EventContext &ctx) const
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
virtual StatusCode sysStart () override
 Handle START transition.
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles.
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles.
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T, V, H > &t)
void updateVHKA (Gaudi::Details::PropertyBase &)
MsgStream & msg () const
bool msgLvl (const MSG::Level lvl) const

Protected Member Functions

void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce (T &h)
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed.

Protected Attributes

SG::WriteHandleKey< CaloCell2ClusterMapm_mapOutputKey
 Name of the CaloCell2ClusterMap in StoreGate.
SG::ReadHandleKey< CaloClusterContainerm_clusterKey
 Name of the CaloClusterContainer to use.

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

DataObjIDColl m_extendedExtraObjects
 Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default)
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
bool m_varHandleArraysDeclared

Detailed Description

create a map of CaloCluster objects each CaloCell belongs to.

Version
$Id: CaloCell2ClusterMapper.h,v 1.3 2008-07-16 09:22:59 cbourdar Exp $
Author
Sven Menke menke.nosp@m.@mpp.nosp@m.mu.mp.nosp@m.g.de
Date
25-June-2004

This class is an Algorithm which creates a map pointing for each CaloCell to all CaloCluster objects from a given CaloClusterContainer it belongs to. Only the member cells of each CaloCluster in the CaloClusterContainer are considered in the map.

Definition at line 29 of file CaloCell2ClusterMapper.h.

Member Typedef Documentation

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Constructor & Destructor Documentation

◆ CaloCell2ClusterMapper()

CaloCell2ClusterMapper::CaloCell2ClusterMapper ( const std::string & name,
ISvcLocator * pSvcLocator )

Definition at line 42 of file CaloCell2ClusterMapper.cxx.

44 : AthReentrantAlgorithm(name, pSvcLocator),
46 m_clusterKey("")
47{
48
49 // Name of Cell2Cluster Map to be registered in TDS
50 declareProperty("MapOutputName",m_mapOutputKey);
51
52 // Name of CaloClusterContainer to use as input
53 declareProperty("ClustersName",m_clusterKey);
54}
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
SG::ReadHandleKey< CaloClusterContainer > m_clusterKey
Name of the CaloClusterContainer to use.
SG::WriteHandleKey< CaloCell2ClusterMap > m_mapOutputKey
Name of the CaloCell2ClusterMap in StoreGate.

◆ ~CaloCell2ClusterMapper()

CaloCell2ClusterMapper::~CaloCell2ClusterMapper ( )
virtualdefault

Member Function Documentation

◆ cardinality()

unsigned int AthCommonReentrantAlgorithm< Gaudi::Algorithm >::cardinality ( ) const
overridevirtualinherited

Cardinality (Maximum number of clones that can exist) special value 0 means that algorithm is reentrant.

Override this to return 0 for reentrant algorithms.

Definition at line 75 of file AthCommonReentrantAlgorithm.cxx.

64{
65 return 0;
66}

◆ declareGaudiProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareGaudiProperty ( Gaudi::Property< T, V, H > & hndl,
const SG::VarHandleKeyType &  )
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158 {
160 hndl.value(),
161 hndl.documentation());
162
163 }

◆ declareProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::declareProperty ( Gaudi::Property< T, V, H > & t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145 {
146 typedef typename SG::HandleClassifier<T>::type htype;
148 }
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>

◆ detStore()

const ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

◆ evtStore()

ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

◆ execute()

StatusCode CaloCell2ClusterMapper::execute ( const EventContext & ctx) const
overridevirtual

Definition at line 76 of file CaloCell2ClusterMapper.cxx.

76 {
77
78 // make a DataVector of Navigable CaloClusterContainer
79 ATH_MSG_DEBUG(" Recording Cell2Cluster Map " << m_mapOutputKey.key());
80
81 SG::WriteHandle<CaloCell2ClusterMap> cell2ClusterMap ( m_mapOutputKey, ctx );
82 ATH_CHECK( cell2ClusterMap.record(std::make_unique<CaloCell2ClusterMap>
84
85 const CaloCell_ID* calo_id = nullptr;
86 ATH_CHECK(detStore()->retrieve(calo_id,"CaloCell_ID"));
87
88 // resize it to total range of IdentifierHash for all calos
89 Identifier::size_type maxRange = calo_id->calo_cell_hash_max();
90 cell2ClusterMap->resize(maxRange);
91
92 SG::ReadHandle<CaloClusterContainer> clusColl(m_clusterKey, ctx);
93
94
95 ATH_MSG_DEBUG("CaloCluster container: " << clusColl.name()
96 <<" contains " << clusColl->size() << " clusters");
97
98 std::vector<double> weightedESum;
99 weightedESum.resize(clusColl->size());
100
101 std::vector<int> numberOfCells;
102 numberOfCells.resize(clusColl->size());
103
104 DataPool<Navigable<CaloClusterContainer> > navPool(maxRange);
105
106 // loop over cluster collection and add each cluster to the map for
107 // each member cell
108 unsigned int iClus = 0;
109 for (const CaloCluster* clus : *clusColl) {
110 // loop over its cell members
111 CaloCluster::cell_iterator cellIter = clus->cell_begin();
112 CaloCluster::cell_iterator cellIterEnd = clus->cell_end();
113 for (; cellIter != cellIterEnd; cellIter++) {
114 // look up the IdentifierHash for the current cell
115 IdentifierHash myHashId = calo_id->calo_cell_hash((*cellIter)->ID());
116 // get the existing? Navigable for this cell
117 Navigable<CaloClusterContainer> *theNav = (*cell2ClusterMap)[myHashId];
118 if (!theNav) {
119 // create a new Navigable if it doesn't exist
120 theNav = navPool.nextElementPtr();
121 theNav->removeAll();
122 // and store it in the vector
123 (*cell2ClusterMap)[myHashId] = theNav;
124 }
125 // add the current cluster to the list of clusters for this cell
126 theNav->putElement(clusColl.cptr(), clus);
127 // add the energy*weight for this cell to the weightedESum
128 //if ( messageService()->outputLevel(name()) <= MSG::DEBUG) {
129 if (msgLvl(MSG::DEBUG)) {
130 weightedESum[iClus] += (clus->getCellWeight(*cellIter))
131 * ((*cellIter)->energy());
132 numberOfCells[iClus]++;
133 }
134 }
135 }
136
137 // compare weighted sums per cluster from the map with cluster energies
138 if (msgLvl(MSG::DEBUG)) {
139 double epsilon = 0.001;
140 unsigned int iClus = 0;
141 for (const CaloCluster* clus : *clusColl) {
142 if (fabs(weightedESum[iClus] - clus->e())
143 > epsilon * fabs(clus->e()))
144 {
145 //FIXME: WARNING printed only if msglevel <=
146 ATH_MSG_WARNING( "CaloCluster has E = " << clus->e()
147 << " MeV, while weighted sum of cells gives E = "
148 << weightedESum[iClus]
149 << " MeV! Complain with the creator of the CaloClusterContainer named "
150 << m_clusterKey.key() );
151 } else {
152 ATH_MSG_DEBUG( "CaloCluster and weighted sum of cell members have E = "
153 << clus->e() << " MeV, good!" );
154 }
155 if (numberOfCells[iClus] != static_cast<int>(clus->getNumberOfCells())) {
156 //FIXME: WARNING printed only if msglevel <=
157 ATH_MSG_WARNING( "CaloCluster has N = "
158 << clus->getNumberOfCells() << " cells, while N = "
159 << numberOfCells[iClus]
160 << " cells are in the map! Something is wrong with the creation of the Map!" );
161 } else {
162 ATH_MSG_DEBUG( "CaloCluster with N = "
163 << clus->getNumberOfCells() << " cells is in the map, good!" );
164 }
165 } //end loop over clusters
166 } //end if DEBUG
167
168 // print the Map
169 if (msgLvl(MSG::VERBOSE)) {
170 for (unsigned int iHash = 0; iHash < maxRange; iHash++) {
171 // get the existing? Navigable for this cell
172 Navigable<CaloClusterContainer> *theNav = (*cell2ClusterMap)[iHash];
173 if (theNav) {
174 msg(MSG::VERBOSE) << "CaloCell with hashID " << iHash << " belongs to";
175 for (const CaloCluster* pClus : *theNav) {
176 // the next line assumes all cells of the cluster belong to the same
177 // cell container ...
178 const CaloCellContainer *cellColl = pClus->getCellContainer(
179 *(pClus->cell_begin()));
180 const CaloCell* pCell = cellColl->findCell(iHash);
181 if (!pCell) {
182 // need to find the cell in clusters member list because the
183 // cluster is made of more than one cell container
184 CaloCluster::cell_iterator cellIter = pClus->cell_begin();
185 CaloCluster::cell_iterator cellIterEnd = pClus->cell_end();
186 for (; cellIter != cellIterEnd; cellIter++) {
187 pCell = (*cellIter);
188 // look up the IdentifierHash for the current cell
189 IdentifierHash myHashId = calo_id->calo_cell_hash(pCell->ID());
190 if (((unsigned int) myHashId) == iHash)
191 break;
192 else
193 pCell = nullptr;
194 }
195 }
196 if (pCell)
197 msg() << " Cluster with E_clus = " << pClus->e()
198 << " MeV with weight w_cell = " << pClus->getCellWeight(pCell)
199 << " ";
200 }
201 msg() << endmsg;
202 }
203 }
204 }
205
206 return StatusCode::SUCCESS;
207}
#define endmsg
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_WARNING(x)
#define ATH_MSG_DEBUG(x)
CaloCluster_v1 CaloCluster
Define the latest version of the calorimeter cluster class.
const ServiceHandle< StoreGateSvc > & detStore() const
bool msgLvl(const MSG::Level lvl) const
const CaloCell * findCell(const IdentifierHash theHash) const
fast find method given identifier hash.
size_type calo_cell_hash_max() const
cell 'global' hash table max size
IdentifierHash calo_cell_hash(const Identifier cellId) const
create hash id from 'global' cell id
Identifier ID() const
get ID (from cached data member) non-virtual and inline for fast access
Definition CaloCell.h:295
CaloCompositeCellBase< CaloClusterNavigable >::cell_iterator cell_iterator
Iterator on CaloCell s.
cell_iterator cell_end() const
Retrieve a STL-type end() iterator for the cell store.
cell_iterator cell_begin() const
Retrieve a STL-type begin() iterator for the cell store.
bool removeAll()
Definition Navigable.h:237
void putElement(const CONT *objectContainer, const constituent_type *constituentObject, const RPAR &objectParameter=RPAR(), size_t sizeHint=0)
@ VIEW_ELEMENTS
this data object is a view, it does not own its elmts
retrieve(aClass, aKey=None)
Definition PyKernel.py:110

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase & ExtraDeps)
protectedinherited

Add StoreName to extra input/output deps as needed.

use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given

◆ extraOutputDeps()

const DataObjIDColl & AthCommonReentrantAlgorithm< Gaudi::Algorithm >::extraOutputDeps ( ) const
overridevirtualinherited

Return the list of extra output dependencies.

This list is extended to include symlinks implied by inheritance relations.

Definition at line 94 of file AthCommonReentrantAlgorithm.cxx.

90{
91 // If we didn't find any symlinks to add, just return the collection
92 // from the base class. Otherwise, return the extended collection.
93 if (!m_extendedExtraObjects.empty()) {
95 }
97}
An algorithm that can be simultaneously executed in multiple threads.

◆ filterPassed()

virtual bool AthCommonReentrantAlgorithm< Gaudi::Algorithm >::filterPassed ( const EventContext & ctx) const
inlinevirtualinherited

Definition at line 96 of file AthCommonReentrantAlgorithm.h.

96 {
97 return execState( ctx ).filterPassed();
98 }
virtual bool filterPassed(const EventContext &ctx) const

◆ finalize()

StatusCode CaloCell2ClusterMapper::finalize ( )
overridevirtual

Definition at line 69 of file CaloCell2ClusterMapper.cxx.

70{
71 return StatusCode::SUCCESS;
72}

◆ initialize()

StatusCode CaloCell2ClusterMapper::initialize ( )
overridevirtual

Definition at line 63 of file CaloCell2ClusterMapper.cxx.

63 {
64 return StatusCode::SUCCESS;
65}

◆ inputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::inputHandles ( ) const
overridevirtualinherited

Return this algorithm's input handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ isClonable()

◆ msg()

MsgStream & AthCommonMsg< Gaudi::Algorithm >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24 {
25 return this->msgStream();
26 }

◆ msgLvl()

bool AthCommonMsg< Gaudi::Algorithm >::msgLvl ( const MSG::Level lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30 {
31 return this->msgLevel(lvl);
32 }

◆ outputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::outputHandles ( ) const
overridevirtualinherited

Return this algorithm's output handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ renounce()

std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::renounce ( T & h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381 {
382 h.renounce();
384 }
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::renounceArray ( SG::VarHandleKeyArray & handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364 {
366 }

◆ setFilterPassed()

virtual void AthCommonReentrantAlgorithm< Gaudi::Algorithm >::setFilterPassed ( bool state,
const EventContext & ctx ) const
inlinevirtualinherited

Definition at line 100 of file AthCommonReentrantAlgorithm.h.

100 {
102 }
virtual void setFilterPassed(bool state, const EventContext &ctx) const

◆ sysExecute()

StatusCode AthCommonReentrantAlgorithm< Gaudi::Algorithm >::sysExecute ( const EventContext & ctx)
overridevirtualinherited

Execute an algorithm.

We override this in order to work around an issue with the Algorithm base class storing the event context in a member variable that can cause crashes in MT jobs.

Definition at line 85 of file AthCommonReentrantAlgorithm.cxx.

77{
78 return BaseAlg::sysExecute (ctx);
79}

◆ sysInitialize()

StatusCode AthCommonReentrantAlgorithm< Gaudi::Algorithm >::sysInitialize ( )
overridevirtualinherited

Override sysInitialize.

Override sysInitialize from the base class.

Loop through all output handles, and if they're WriteCondHandles, automatically register them and this Algorithm with the CondSvc

Scan through all outputHandles, and if they're WriteCondHandles, register them with the CondSvc

Reimplemented from AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >.

Reimplemented in HypoBase, and InputMakerBase.

Definition at line 61 of file AthCommonReentrantAlgorithm.cxx.

107 {
109
110 if (sc.isFailure()) {
111 return sc;
112 }
113
114 ServiceHandle<ICondSvc> cs("CondSvc",name());
115 for (auto h : outputHandles()) {
116 if (h->isCondition() && h->mode() == Gaudi::DataHandle::Writer) {
117 // do this inside the loop so we don't create the CondSvc until needed
118 if ( cs.retrieve().isFailure() ) {
119 ATH_MSG_WARNING("no CondSvc found: won't autoreg WriteCondHandles");
120 return StatusCode::SUCCESS;
121 }
122 if (cs->regHandle(this,*h).isFailure()) {
124 ATH_MSG_ERROR("unable to register WriteCondHandle " << h->fullKey()
125 << " with CondSvc");
126 }
127 }
128 }
129 return sc;
130}
#define ATH_MSG_ERROR(x)
virtual std::vector< Gaudi::DataHandle * > outputHandles() const override

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::updateVHKA ( Gaudi::Details::PropertyBase & )
inlineinherited

Definition at line 308 of file AthCommonDataStore.h.

308 {
309 // debug() << "updateVHKA for property " << p.name() << " " << p.toString()
310 // << " size: " << m_vhka.size() << endmsg;
311 for (auto &a : m_vhka) {
313 for (auto k : keys) {
314 k->setOwner(this);
315 }
316 }
317 }

Member Data Documentation

◆ m_clusterKey

SG::ReadHandleKey<CaloClusterContainer> CaloCell2ClusterMapper::m_clusterKey
protected

Name of the CaloClusterContainer to use.

the map is filled with all CaloCell objects which are member of at least one CaloCluster in this CaloClusterContainer.

Definition at line 52 of file CaloCell2ClusterMapper.h.

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_extendedExtraObjects

DataObjIDColl AthCommonReentrantAlgorithm< Gaudi::Algorithm >::m_extendedExtraObjects
privateinherited

Extra output dependency collection, extended by AthAlgorithmDHUpdate to add symlinks.

Empty if no symlinks were found.

Definition at line 114 of file AthCommonReentrantAlgorithm.h.

◆ m_mapOutputKey

SG::WriteHandleKey<CaloCell2ClusterMap> CaloCell2ClusterMapper::m_mapOutputKey
protected

Name of the CaloCell2ClusterMap in StoreGate.

the map can be retrieved with this key from StoreGate.

Definition at line 45 of file CaloCell2ClusterMapper.h.

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< Gaudi::Algorithm > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.


The documentation for this class was generated from the following files: