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

topological cluster maker. More...

#include <CaloTopoClusterMaker.h>

Inheritance diagram for CaloTopoClusterMaker:

Public Member Functions

 CaloTopoClusterMaker (const std::string &type, const std::string &name, const IInterface *parent)
virtual StatusCode execute (const EventContext &ctx, xAOD::CaloClusterContainer *theClusters) const override
 Execute on an entire collection of clusters.
virtual StatusCode initialize () override
void getClusterSize ()
virtual StatusCode execute (xAOD::CaloClusterContainer *collection) final
 Execute on an entire collection of clusters.
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 sysInitialize () override
 Perform system initialization for an algorithm.
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
 DeclareInterfaceID (CaloClusterCollectionProcessor, 1, 0)

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.

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

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

Private Attributes

const CaloCell_IDm_calo_id
SG::ReadHandleKey< CaloCellContainerm_cellsKey
 vector of names of the cell containers to use as input.
std::vector< std::string > m_caloNames
 vector of names of the calorimeters to consider.
bool m_subcaloUsed [CaloCell_ID::NSUBCALO]
 Flag which subdetectors are to be used.
float m_cellThresholdOnEorAbsEinSigma
 all cells have to satisfy \(|E| > N_{\rm cell}\,\sigma\)
float m_neighborThresholdOnEorAbsEinSigma
 cells with \(|E| > N_{\rm neighbor}\,\sigma\) extend the cluster
float m_seedThresholdOnEorAbsEinSigma
 cells with \(|E| > N_{\rm seed}\,\sigma\) start a cluster
float m_seedThresholdOnTAbs
 threshold used for timing cut on seed cells.
float m_timeCutUpperLimit
 upper limit on the energy significance, for applying the cell time cut
float m_xtalkDeltaT
 additional max.
float m_xtalk2Eratio1
 cut on Eneighbor/E to revover out of time cell close to energetic first phi neighbor cell
float m_xtalk2Eratio2
 cut on Eneighbor/E to revover out of time cell close to energetic second phi neighbor cell
float m_xtalk3Eratio
 cut on Eneighbor/E to revover out of time layer 3cell close to energetic previous sampling neighbor
float m_xtalkEtaEratio
 cut on Eneighbor/E to revover out of time layer 2 cell close in eta to energetic neighor cell
float m_xtalk2DEratio
 cut on Eneighbor/E to remove out of time layer layer2 all 2D neighbors
SG::ReadCondHandleKey< CaloNoisem_noiseCDOKey {this,"CaloNoiseKey","totalNoise","SG Key of CaloNoise data object"}
 Key of the CaloNoise Conditions data object.
std::string m_neighborOption
 type of neighbor relations to use.
LArNeighbours::neighbourOption m_nOption
bool m_restrictHECIWandFCalNeighbors
 if set to true limit the neighbors in HEC IW and FCal2&3.
bool m_restrictPSNeighbors
 if set to true limit the neighbors in presampler Barrel and Endcap.
bool m_seedCutsInAbsE
 if set to true seed cuts are on \(|E|\) and \(|E|_\perp\).
bool m_neighborCutsInAbsE
 if set to true neighbor cuts are on \(|E|\) and \(|E|_\perp\).
bool m_cellCutsInAbsE
 if set to true cell cuts are on \(|E|\) and \(|E|_\perp\).
bool m_clusterCutsInAbsE
 if set to true final cluster cuts are on \(|E|_\perp\).
float m_clusterEtorAbsEtCut
 \(E_\perp\) cut on the final cluster.
bool m_twogaussiannoise
 if set to true use 2-gaussian noise description for TileCal
bool m_treatL1PredictedCellsAsGood
 if set to true treat cells with a dead OTX which can be predicted by L1 trigger info as good instead of bad cells
bool m_seedCutsInT
 if set to true, time cut is applied to seed cells, no cut otherwise
bool m_cutOOTseed
 if set to true, seed cells failing the time cut are also excluded from cluster at all
bool m_useTimeCutUpperLimit
 if set to true, the time cut is not applied on cell of large significance
bool m_xtalkEM2
 if set to true, the time window is softened in the EMB2 and EME2_OW due to xtalk from direct neighbour cells in phi
bool m_xtalkEM2D
 if set to true, the time window is softened in the EMB2 and EME2_OW due to xtalk from all 2D neighors
bool m_xtalkEM2n
 if set to true (together with m_xtalkEM2) we also extend the time window for 2nd phi neighbors
bool m_xtalkEM3
 if set to true we extend the time window for direct layer 3 neighbors of high energy layer 2 cells
bool m_xtalkEMEta
 if set to true, the time window is softened in the EMB2 and EME2_OW due to xtalk from direct neighbour cells in eta
std::vector< std::string > m_samplingNames
 vector of names of the calorimeter samplings to consider for seeds.
std::set< int > m_validSamplings
 actual set of samplings to be used for seeds
int m_minSampling
 smallest valid seed sampling found
int m_maxSampling
 largest valid seed sampling found
std::vector< bool > m_useSampling
 flag for all samplings - true for used ones, false for excluded ones
IdentifierHash m_hashMin
IdentifierHash m_hashMax
xAOD::CaloCluster::ClusterSize m_clusterSize
 Cluster size enum. Set based on energy cut jobO.
Gaudi::Property< bool > m_useGPUCriteria {this, "UseGPUCriteria", false, "Adopt a set of criteria that is consistent with the GPU implementation."}
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

topological cluster maker.

Version
$Id: CaloTopoClusterMaker.h,v 1.24 2009-05-15 12:09:48 artamono Exp $
Author
Sven Menke menke.nosp@m.@mpp.nosp@m.mu.mp.nosp@m.g.de
Date
23-December-2003

Make clusters from CaloCells based on topological neighboring and noise motivated thresholds in units of sigma applied to the absolute value of the energy for each cell. The clusters will have at least one cell with \( E > N_{\rm seed}\,\sigma \) (or \(|E| > N_{\rm seed}\,\sigma \) if SeedCutsInAbsE is true). Cells with \( |E| > N_{\rm neighbor}\,\sigma \) will expand the cluster by means of their neighbors. All cells in the cluster must fulfill \( |E| > N_{\rm cell}\,\sigma \). The actual clustering is performed by expanding around seed cells. The neighboring cells above neighbor threshold (if not used so far) are stored in a list and used in the next expansion step. The algorithm terminates if no more unused neighbor cells are found. The final clusters are copied to the cluster collection if they pass the \(E_\perp\) (or \(|E|_\perp\) if SeedCutsInAbsE is true) cut.

Like all other cluster maker tools this class derives from CaloClusterCollectionProcessor.

Definition at line 48 of file CaloTopoClusterMaker.h.

Member Typedef Documentation

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< AlgTool > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Constructor & Destructor Documentation

◆ CaloTopoClusterMaker()

CaloTopoClusterMaker::CaloTopoClusterMaker ( const std::string & type,
const std::string & name,
const IInterface * parent )

Definition at line 51 of file CaloTopoClusterMaker.cxx.

55 : AthAlgTool(type, name, parent),
56 m_calo_id(nullptr),
57 m_cellsKey(""),
62 m_seedThresholdOnTAbs ( 12.5*ns),
64 m_xtalkDeltaT ( 15.*ns),
65 m_xtalk2Eratio1 ( 4.),
66 m_xtalk2Eratio2 ( 25.),
67 m_xtalk3Eratio ( 10.),
69 m_xtalk2DEratio (4.),
70 m_neighborOption ("super3D"),
74 m_seedCutsInAbsE (false),
76 m_cellCutsInAbsE (true),
78 m_clusterEtorAbsEtCut ( 0.*MeV),
79 m_twogaussiannoise (false),
81 m_seedCutsInT (false),
82 m_cutOOTseed (false),
84 m_xtalkEM2 (false),
85 m_xtalkEM2D (false),
86 m_xtalkEM2n (false),
87 m_xtalkEM3 (false),
88 m_xtalkEMEta (false),
89 m_minSampling (0),
90 m_maxSampling (0),
91 m_hashMin (999999),
92 m_hashMax (0),
94{
95 declareInterface<CaloClusterCollectionProcessor> (this);
96 // Name(s) of Cell Containers
97 declareProperty("CellsName",m_cellsKey);
98
99 // Name(s) of Calorimeters to consider
100 declareProperty("CalorimeterNames",m_caloNames);
101
102 // Name(s) of Calorimeter Samplings to consider for seeds
103 declareProperty("SeedSamplingNames",m_samplingNames);
104
105 // Energy thresholds (in units of noise Sigma)
106 declareProperty("SeedThresholdOnEorAbsEinSigma",
108 declareProperty("NeighborThresholdOnEorAbsEinSigma",
110 declareProperty("CellThresholdOnEorAbsEinSigma",
112
113 // Seed and cluster cuts are in E or Abs E
114 declareProperty("SeedCutsInAbsE",m_seedCutsInAbsE);
115
116 // Time thresholds (in abs. val.)
117 declareProperty("SeedThresholdOnTAbs",m_seedThresholdOnTAbs);
118
119 // Significance upper limit for applying time cut
120 declareProperty("TimeCutUpperLimit",m_timeCutUpperLimit);
121
122 //do Seed cuts on Time
123 declareProperty("SeedCutsInT",m_seedCutsInT);
124 //exclude out-of-time seeds from neighbouring and cell stage
125 declareProperty("CutOOTseed",m_cutOOTseed);
126 //do not apply time cut on cells of large significance
127 declareProperty("UseTimeCutUpperLimit",m_useTimeCutUpperLimit);
128 //relax time window (if timing is used) in EM2 when xTalk is present
129 declareProperty("XTalkEM2",m_xtalkEM2);
130 //relax time window (if timing is used) in EM2 when xTalk is present for all 2D neighbirs
131 declareProperty("XTalkEM2D",m_xtalkEM2D);
132 //relax time window (if timing is used) in EM2 Eta directionwhen xTalk is present
133 declareProperty("XTalkEMEta",m_xtalkEMEta);
134 //relax time window (if timing is used) in EM2 when xTalk is present also for 2nd phi neighbors (if XTalkEM2 is also set)
135 declareProperty("XTalkEM2n",m_xtalkEM2n);
136 //relax time window (if timing is used) in EM3 when xTalk is present for layer 3 neighbor of high energy layer 2 cells
137 declareProperty("XTalkEM3",m_xtalkEM3);
138 //delta T to add to upper time threshold for EM2 cells affected by xtalk
139 declareProperty("XTalkDeltaT",m_xtalkDeltaT);
140 //Eratio for first phi neighbor in layer2
141 declareProperty("XTalk2Eratio1",m_xtalk2Eratio1);
142 //Eratio for second phi neighbor in layer2
143 declareProperty("XTalk2Eratio2",m_xtalk2Eratio2);
144 //Eratio for previous sampling neighbor in layer 3
145 declareProperty("XTalk3Eratio",m_xtalk3Eratio);
146 //Eratio for cross-talk in eta layer 2
147 declareProperty("XTalkEtaEratio",m_xtalkEtaEratio);
148 //Eratio for cross-talk in all 2D layer 2 neighbors
149 declareProperty("XTalk2DEratio",m_xtalk2DEratio);
150
151 // Neighbor cuts are in E or Abs E
152 declareProperty("NeighborCutsInAbsE",m_neighborCutsInAbsE);
153
154 // Cell cuts are in E or Abs E
155 declareProperty("CellCutsInAbsE",m_cellCutsInAbsE);
156
157 // Neighbor Option
158 declareProperty("NeighborOption",m_neighborOption);
159
160 // Restrict HEC IW and FCal Neighbors
161 declareProperty("RestrictHECIWandFCalNeighbors",m_restrictHECIWandFCalNeighbors);
162
163 // Restrict PS Neighbors
164 declareProperty("RestrictPSNeighbors",m_restrictPSNeighbors);
165
166 //Cluster cuts are in E_t or Abs E_t
167 declareProperty("ClusterCutsInAbsEt",m_clusterCutsInAbsE);
168
169 // Cluster E_t or Abs E_t cut
170 declareProperty("ClusterEtorAbsEtCut",m_clusterEtorAbsEtCut);
171
172 // use 2-gaussian noise for Tile
173 declareProperty("TwoGaussianNoise",m_twogaussiannoise);
174
175 // Treat bad cells with dead OTX if predicted from L1 as good
176 declareProperty("TreatL1PredictedCellsAsGood",m_treatL1PredictedCellsAsGood);
177}
AthAlgTool()
Default constructor:
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
float m_xtalkDeltaT
additional max.
float m_seedThresholdOnEorAbsEinSigma
cells with start a cluster
bool m_xtalkEM2D
if set to true, the time window is softened in the EMB2 and EME2_OW due to xtalk from all 2D neighors
bool m_subcaloUsed[CaloCell_ID::NSUBCALO]
Flag which subdetectors are to be used.
float m_xtalkEtaEratio
cut on Eneighbor/E to revover out of time layer 2 cell close in eta to energetic neighor cell
bool m_twogaussiannoise
if set to true use 2-gaussian noise description for TileCal
bool m_xtalkEM3
if set to true we extend the time window for direct layer 3 neighbors of high energy layer 2 cells
bool m_treatL1PredictedCellsAsGood
if set to true treat cells with a dead OTX which can be predicted by L1 trigger info as good instead ...
bool m_cellCutsInAbsE
if set to true cell cuts are on and .
float m_neighborThresholdOnEorAbsEinSigma
cells with extend the cluster
std::string m_neighborOption
type of neighbor relations to use.
bool m_clusterCutsInAbsE
if set to true final cluster cuts are on .
bool m_xtalkEMEta
if set to true, the time window is softened in the EMB2 and EME2_OW due to xtalk from direct neighbou...
float m_xtalk2Eratio2
cut on Eneighbor/E to revover out of time cell close to energetic second phi neighbor cell
SG::ReadHandleKey< CaloCellContainer > m_cellsKey
vector of names of the cell containers to use as input.
bool m_useTimeCutUpperLimit
if set to true, the time cut is not applied on cell of large significance
int m_maxSampling
largest valid seed sampling found
const CaloCell_ID * m_calo_id
float m_cellThresholdOnEorAbsEinSigma
all cells have to satisfy
bool m_neighborCutsInAbsE
if set to true neighbor cuts are on and .
float m_timeCutUpperLimit
upper limit on the energy significance, for applying the cell time cut
float m_seedThresholdOnTAbs
threshold used for timing cut on seed cells.
float m_clusterEtorAbsEtCut
cut on the final cluster.
std::vector< std::string > m_caloNames
vector of names of the calorimeters to consider.
float m_xtalk2Eratio1
cut on Eneighbor/E to revover out of time cell close to energetic first phi neighbor cell
bool m_xtalkEM2
if set to true, the time window is softened in the EMB2 and EME2_OW due to xtalk from direct neighbou...
LArNeighbours::neighbourOption m_nOption
std::vector< std::string > m_samplingNames
vector of names of the calorimeter samplings to consider for seeds.
bool m_restrictPSNeighbors
if set to true limit the neighbors in presampler Barrel and Endcap.
bool m_xtalkEM2n
if set to true (together with m_xtalkEM2) we also extend the time window for 2nd phi neighbors
int m_minSampling
smallest valid seed sampling found
bool m_seedCutsInT
if set to true, time cut is applied to seed cells, no cut otherwise
bool m_seedCutsInAbsE
if set to true seed cuts are on and .
float m_xtalk3Eratio
cut on Eneighbor/E to revover out of time layer 3cell close to energetic previous sampling neighbor
float m_xtalk2DEratio
cut on Eneighbor/E to remove out of time layer layer2 all 2D neighbors
bool m_restrictHECIWandFCalNeighbors
if set to true limit the neighbors in HEC IW and FCal2&3.
bool m_cutOOTseed
if set to true, seed cells failing the time cut are also excluded from cluster at all
xAOD::CaloCluster::ClusterSize m_clusterSize
Cluster size enum. Set based on energy cut jobO.

Member Function Documentation

◆ declareGaudiProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< AlgTool > >::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 }

◆ DeclareInterfaceID()

CaloClusterCollectionProcessor::DeclareInterfaceID ( CaloClusterCollectionProcessor ,
1 ,
0  )
inherited

◆ declareProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< AlgTool > >::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< AlgTool > >::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< AlgTool > >::evtStore ( )
inlineinherited

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

Definition at line 85 of file AthCommonDataStore.h.

◆ execute() [1/2]

StatusCode CaloTopoClusterMaker::execute ( const EventContext & ctx,
xAOD::CaloClusterContainer * collection ) const
overridevirtual

Execute on an entire collection of clusters.

Parameters
collectionThe container of clusters. param ctx The event context.

Implements CaloClusterCollectionProcessor.

Definition at line 362 of file CaloTopoClusterMaker.cxx.

364{
365 // minimal significance - should be > 0 in order to avoid
366 // throwing away of bad cells
367 const float epsilon = 0.00001;
368
369 //ATH_MSG_DEBUG( "Executing " << name());
370
371 using HashCell = CaloTopoTmpHashCell<CaloTopoTmpClusterCell>;
372 using HashCluster = CaloTopoTmpHashCluster;
373
374 CaloPrefetch::ArenaHandlePrefetch<CaloTopoTmpClusterCell, SG::ArenaPoolAllocator, 2> tmpcell_pool;
375 CaloPrefetch::ArenaHandlePrefetch<HashCluster, SG::ArenaPoolAllocator, 2> tmpclus_pool;
377
378 // create cell list for cells above seed cut (for seed growing algo)
379 std::vector<HashCell> mySeedCells;
380 mySeedCells.reserve (2000);
381 // create initial cluster list (one cell per cluster)
382 std::vector<HashCluster *> myHashClusters;
383 myHashClusters.reserve (10000);
384
385 // create vector to hold all cells.
386 std::vector<HashCell> cellVector (m_hashMax - m_hashMin);
387 HashCell* hashCells = cellVector.data() - m_hashMin;
388
389
390 SG::ReadCondHandle<CaloNoise> noiseHdl{m_noiseCDOKey,ctx};
391 const CaloNoise* noiseCDO=*noiseHdl;
392
393 //---- Get the CellContainers ----------------
394
395 // for (const std::string& cellsName : m_cellsNames) {
396 SG::ReadHandle<CaloCellContainer> cellColl(m_cellsKey, ctx);
397 if( !cellColl.isValid()){
398 ATH_MSG_ERROR( " Can not retrieve CaloCellContainer: "
399 << cellColl.name() );
400 return StatusCode::RECOVERABLE;
401 }
402
403 const DataLink<CaloCellContainer> cellCollLink (cellColl.name(),ctx);
404
405 //ATH_MSG_DEBUG("CaloCell container: "<< cellsName
406 // <<" contains " << cellColl->size() << " cells");
407
408 for (int isubdet = 0; isubdet < CaloCell_ID::NSUBCALO; ++isubdet) {
410 if (m_subcaloUsed[subdet] && cellColl->hasCalo(subdet)) {
411 auto cellIter = cellColl->beginConstCalo (subdet);
412 auto cellIterEnd = cellColl->endConstCalo (subdet);
413 for (int iCell = cellColl->indexFirstCellCalo(subdet);
414 cellIter != cellIterEnd;
415 ++iCell, ++cellIter)
416 {
417 CaloPrefetch::nextDDE(cellIter, cellIterEnd, 2);
418 const CaloCell* pCell = *cellIter;
419 const float noiseSigma = m_twogaussiannoise ? \
420 noiseCDO->getEffectiveSigma(pCell->ID(),pCell->gain(),pCell->energy()) : \
421 noiseCDO->getNoise(pCell->ID(),pCell->gain());
422
423 float signedE = pCell->energy();
424 float signedEt = pCell->et();
425 float signedRatio = epsilon; // not 0 in order to keep bad cells
426 if ( finite(noiseSigma) && noiseSigma > 0 && !CaloBadCellHelper::isBad(pCell,m_treatL1PredictedCellsAsGood) )
427 signedRatio = signedE/noiseSigma;
428
429 bool passedCellCut = (m_cellCutsInAbsE?std::abs(signedRatio):signedRatio) > m_cellThresholdOnEorAbsEinSigma;
430 bool passedNeighborCut = (m_neighborCutsInAbsE?std::abs(signedRatio):signedRatio) > m_neighborThresholdOnEorAbsEinSigma;
431 bool passedSeedCut = (m_seedCutsInAbsE?std::abs(signedRatio):signedRatio) > m_seedThresholdOnEorAbsEinSigma;
432
433 bool applyTimeCut = m_seedCutsInT && (!m_useTimeCutUpperLimit || signedRatio <= m_timeCutUpperLimit);
434 bool passTimeCut_seedCell = (!applyTimeCut || passCellTimeCut(pCell,cellColl.cptr()));
435 bool passedSeedAndTimeCut = (passedSeedCut && passTimeCut_seedCell);
436
437 bool passedNeighborAndTimeCut = passedNeighborCut;
438 if(m_cutOOTseed && passedSeedCut && !passTimeCut_seedCell) passedNeighborAndTimeCut=false; //exclude Out-Of-Time seeds from neighbouring stage as well (if required)
439
440 bool passedCellAndTimeCut = passedCellCut;
441 if(m_cutOOTseed && passedSeedCut && !passTimeCut_seedCell) passedCellAndTimeCut=false; //exclude Out-Of-Time seeds from cluster (if required)
442
443 if ( passedCellAndTimeCut || passedNeighborAndTimeCut || passedSeedAndTimeCut ) {
444 const CaloDetDescrElement* dde = pCell->caloDDE();
445 IdentifierHash hashid = dde ? dde->calo_hash() : m_calo_id->calo_cell_hash(pCell->ID());
446 CaloTopoTmpClusterCell *tmpClusterCell =
447 new (tmpcell_pool.allocate())
448 CaloTopoTmpClusterCell(hashid,subdet,iCell,signedRatio,signedEt);
449#if 0
450 // some debug printout - can also be used to construct neighbor
451 // tables offline ...
452 if ( m_doALotOfPrintoutInFirstEvent ) {
453 ATH_MSG_DEBUG( " [ExtId|Id|SubDet|HashId|eta|phi|E/noise|Et]: "
454 << "[" << m_calo_id->show_to_string(pCell->ID(),0,'/')
455 << "|" << mypCell->ID().getString()
456 << "|" << subdet
457 << "|" << (unsigned int)hashid
458 << "|" << pCell->eta()
459 << "|" << pCell->phi()
460 << "|" << signedRatio
461 << "|" << signedEt
462 << "]");
463
464 }
465#endif
466 HashCell hashCell(tmpClusterCell);
467 if ( passedNeighborAndTimeCut || passedSeedAndTimeCut ) {
468 HashCluster *tmpCluster =
469 new (tmpclus_pool.allocate()) HashCluster (tmplist_pool);
470 tmpClusterCell->setCaloTopoTmpHashCluster(tmpCluster);
471 tmpCluster->add(hashCell);
472 myHashClusters.push_back(tmpCluster);
473 int caloSample = dde ? dde->getSampling() : m_calo_id->calo_sample(pCell->ID());
474 if ( passedSeedAndTimeCut
475 && caloSample >= m_minSampling
476 && caloSample <= m_maxSampling
477 && m_useSampling[caloSample-m_minSampling]) {
478 tmpClusterCell->setUsed();
479 mySeedCells.push_back(hashCell);
480 }
481 }
482 hashCells[hashid] = hashCell;
483 }
484 }//end loop over cells
485 }//end if use subcalo
486 }//end loop over subcalos
487
488
489 // sort initial seed cells to start with the cell of largest S/N
490 // this makes the resulting clusters independent of the initial
491 // ordering of the cells
492 if ( m_useGPUCriteria) {
493 if ( m_seedCutsInAbsE) {
494 CaloTopoTmpHashCellSort::compareAbsWithIndex<CaloTopoTmpClusterCell> compareSoverN;
495 std::sort(mySeedCells.begin(),mySeedCells.end(),compareSoverN);
496 }
497 else {
498 CaloTopoTmpHashCellSort::compareWithIndex<CaloTopoTmpClusterCell> compareSoverN;
499 std::sort(mySeedCells.begin(),mySeedCells.end(),compareSoverN);
500 }
501 }
502 else {
503 if ( m_seedCutsInAbsE) {
504 CaloTopoTmpHashCellSort::compareAbs<CaloTopoTmpClusterCell> compareSoverN;
505 std::sort(mySeedCells.begin(),mySeedCells.end(),compareSoverN);
506 }
507 else {
508 CaloTopoTmpHashCellSort::compare<CaloTopoTmpClusterCell> compareSoverN;
509 std::sort(mySeedCells.begin(),mySeedCells.end(),compareSoverN);
510 }
511 }
512
513#if 1
514 if (msgLvl(MSG::DEBUG)) {
515 for (const HashCell& hc : mySeedCells) {
516 ATH_MSG_DEBUG( " SeedCell ["
517 << hc.getCaloTopoTmpClusterCell()->getSubDet()
518 << "|"
519 << (unsigned int)hc.getCaloTopoTmpClusterCell()->getID()
520 << "] has S/N = "
521 << hc.getCaloTopoTmpClusterCell()->getSignedRatio()
522 );
523 }
524 }
525#endif
526
527 std::vector<HashCell> myNextCells;
528 myNextCells.reserve (1000);
529
530 std::vector<IdentifierHash> theNeighbors;
531 theNeighbors.reserve(22);
532#if 0
533 std::vector<IdentifierHash> theNNeighbors;
534 theNNeighbors.reserve(22);
535#endif
536
537 bool doRestrictHECIWandFCal = m_restrictHECIWandFCalNeighbors &&
539
540 bool doRestrictPS = m_restrictPSNeighbors &&
542
543 while ( !mySeedCells.empty() ) {
544 // create cell list for next neighbor cells to consider
545 myNextCells.clear();
546
547 // loop over all current neighbor cells (for Seed Growing Algo)
548 for (HashCell& hc : mySeedCells) {
549 CaloTopoTmpClusterCell* pCell= hc.getCaloTopoTmpClusterCell();
550 IdentifierHash hashid = pCell->getID();
551 HashCluster *myCluster = pCell->getCaloTopoTmpHashCluster();
552 CaloCell_ID::SUBCALO mySubDet = pCell->getSubDet();
553 // in case we use all3d or super3D and the current cell is in the
554 // HEC IW or FCal2 & 3 or PS and we want to restrict their neighbors,
555 // use only next in sampling neighbors
557 if (( mySubDet != CaloCell_ID::LAREM &&
558 doRestrictHECIWandFCal &&
559 ( ( mySubDet == CaloCell_ID::LARHEC &&
560 m_calo_id->region(m_calo_id->cell_id(hashid)) == 1 ) ||
561 ( mySubDet == CaloCell_ID::LARFCAL &&
562 m_calo_id->sampling(m_calo_id->cell_id(hashid)) > 1 ) ) ) ||
563 ( doRestrictPS &&
564 ( ( mySubDet == CaloCell_ID::LAREM &&
565 m_calo_id->sampling(m_calo_id->cell_id(hashid)) == 0 ) ) ) ) {
567 }
568 m_calo_id->get_neighbours(hashid,opt,theNeighbors);
569 // loop over all neighbors of that cell (Seed Growing Algo)
570 for (IdentifierHash nId : theNeighbors) {
571 CaloCell_ID::SUBCALO otherSubDet =
572 (CaloCell_ID::SUBCALO)m_calo_id->sub_calo(nId);
573 if ( otherSubDet < CaloCell_ID::NSUBCALO &&
574 m_subcaloUsed[otherSubDet] )
575 {
576 HashCell neighborCell = hashCells[nId];
577 if ( neighborCell.getCaloTopoTmpClusterCell() ) {
578 CaloTopoTmpClusterCell* pNCell = neighborCell.getCaloTopoTmpClusterCell();
579 // check neighbor threshold only since seed cells are already in
580 // the original list
581 bool isAboveNeighborThreshold =
582 (m_neighborCutsInAbsE?std::abs(pNCell->getSignedRatio()):pNCell->getSignedRatio()) > m_neighborThresholdOnEorAbsEinSigma;
583 // checking the neighbors
584 if ( isAboveNeighborThreshold && !pNCell->getUsed() ) {
585 pNCell->setUsed();
586 myNextCells.push_back(neighborCell);
587 }
588 HashCluster *otherCluster = pNCell->getCaloTopoTmpHashCluster();
589 if ( myCluster != otherCluster ) {
590 HashCluster *toKill = nullptr;
591 HashCluster *toKeep = nullptr;
592 if ( !otherCluster || isAboveNeighborThreshold ) {
593
594 auto compareClusters = [&](const auto & c1, const auto & c2) {
595 if (m_useGPUCriteria) {
596 //The seed cell with the largest SNR wins
597 if (m_seedCutsInAbsE) {
598 CaloTopoTmpHashCellSort::compareAbsWithIndex<CaloTopoTmpClusterCell> compare;
599 return compare(*(c1->begin()), *(c2->begin()));
600 }
601 else {
602 CaloTopoTmpHashCellSort::compareWithIndex<CaloTopoTmpClusterCell> compare;
603 return compare(*(c1->begin()), *(c2->begin()));
604 }
605 }
606 else {
607 //We merge the smallest cluster to the largest...
608 return c1->size() > c2->size();
609 }
610 };
611
612 if ( !otherCluster || compareClusters(myCluster, otherCluster) ) {
613 toKill = otherCluster;
614 toKeep = myCluster;
615 }
616 else {
617 toKill = myCluster;
618 toKeep = otherCluster;
619 }
620 if ( toKill ) {
621 for (auto *hc : *toKill)
622 hc->setCaloTopoTmpHashCluster(toKeep);
623 toKeep->add(*toKill);
624 toKill->removeAll();
625 }
626 else {
627 toKeep->add(neighborCell);
628 pNCell->setCaloTopoTmpHashCluster(toKeep);
629 }
630 myCluster = toKeep;
631 }
632 }
633 }
634 }
635 }
636 }
637 mySeedCells.swap (myNextCells);
638 }
639
640
641 //Create temporary list of proto-clusters
642 //Clusters below Et cut will be dropped.
643 //The remaining clusters will be sorted in E_t before storing
644 std::vector<std::unique_ptr<CaloProtoCluster> > sortClusters;
645 sortClusters.reserve (myHashClusters.size());
646
647 for (HashCluster* tmpCluster : myHashClusters) {
648 bool addCluster(false);
649 if ( tmpCluster->size() > 1 )
650 addCluster = true;
651 else if ( tmpCluster->size() == 1 ) {
652 // need to check if seed cell was good
653 HashCluster::iterator clusCellIter=tmpCluster->begin();
654 if ( clusCellIter->getUsed() )
655 addCluster = true;
656 }
657 if ( addCluster) {
658 std::unique_ptr<CaloProtoCluster> myCluster = std::make_unique<CaloProtoCluster>(cellCollLink);
659 //CaloProtoCluster* myCluster = new CaloProtoCluster(cellCollLink);
660 myCluster->getCellLinks()->reserve(tmpCluster->size());
661
662 for (CaloTopoTmpClusterCell* cell : *tmpCluster) {
663 const size_t iCell = cell->getCaloCell();
664 myCluster->addCell(iCell,1.);
665 }
666 const float cl_et = myCluster->et();
667 if ( (m_clusterCutsInAbsE ? std::abs(cl_et) : cl_et) > m_clusterEtorAbsEtCut ) {
668 sortClusters.push_back(std::move(myCluster));
669 }
670 }
671 }
672
673 // Sort the clusters according to Et
674 std::sort(sortClusters.begin(),sortClusters.end(),[](const std::unique_ptr<CaloProtoCluster>& pc1,
675 const std::unique_ptr<CaloProtoCluster>& pc2) {
676 //As in CaloUtils/CaloClusterEtSort.
677 //assign to volatile to avoid excess precison on in FP unit on x386 machines
678 volatile double et1(pc1->et());
679 volatile double et2(pc2->et());
680 //return (et1 < et2); //This is the order we had from CaloRec-02-13-11 to CaloRec-03-00-31
681 return (et1 > et2); //This is the order we should have
682 }
683 );
684 // add to cluster container
685 clusColl->reserve(sortClusters.size());
686
687 for (const auto& protoCluster: sortClusters) {
688 xAOD::CaloCluster* xAODCluster=new xAOD::CaloCluster();
689 clusColl->push_back(xAODCluster);
690 xAODCluster->addCellLink(protoCluster->releaseCellLinks());//Hand over ownership to xAOD::CaloCluster
691 xAODCluster->setClusterSize(m_clusterSize);
692 CaloClusterKineHelper::calculateKine(xAODCluster,false,true, m_useGPUCriteria); //No weight at this point!
693 }
694
695 tmpclus_pool.erase();
696 tmpcell_pool.erase();
697
698 return StatusCode::SUCCESS;
699}
#define ATH_MSG_ERROR(x)
#define ATH_MSG_DEBUG(x)
if(febId1==febId2)
bool msgLvl(const MSG::Level lvl) const
CaloCell_Base_ID::SUBCALO SUBCALO
Definition CaloCell_ID.h:50
virtual double phi() const override final
get phi (through CaloDetDescrElement)
Definition CaloCell.h:375
double energy() const
get energy (data member)
Definition CaloCell.h:327
const CaloDetDescrElement * caloDDE() const
get pointer to CaloDetDescrElement (data member)
Definition CaloCell.h:321
virtual double eta() const override final
get eta (through CaloDetDescrElement)
Definition CaloCell.h:382
CaloGain::CaloGain gain() const
get gain (data member )
Definition CaloCell.h:361
virtual double et() const override final
get et
Definition CaloCell.h:423
Identifier ID() const
get ID (from cached data member) non-virtual and inline for fast access
Definition CaloCell.h:295
static void calculateKine(xAOD::CaloCluster *clu, const bool useweight=true, const bool updateLayers=true, const bool useGPUCriteria=false)
Helper class to calculate cluster kinematics based on cells.
CaloCell_ID::CaloSample getSampling() const
cell sampling
float getNoise(const IdentifierHash h, const int gain) const
Accessor by IdentifierHash and gain.
Definition CaloNoise.h:34
float getEffectiveSigma(const Identifier id, const int gain, const float energy) const
Definition CaloNoise.h:55
void * allocate()
Return space for new element, then allocate and prefetch one more.
void erase()
Free all allocated elements.
Gaudi::Property< bool > m_useGPUCriteria
SG::ReadCondHandleKey< CaloNoise > m_noiseCDOKey
Key of the CaloNoise Conditions data object.
bool passCellTimeCut(const CaloCell *, const CaloCellContainer *) const
std::vector< bool > m_useSampling
flag for all samplings - true for used ones, false for excluded ones
CaloCell_ID::SUBCALO getSubDet() const
const IdentifierHash & getID() const
void setCaloTopoTmpHashCluster(CaloTopoTmpHashCluster *cluster)
const CaloTopoTmpHashCluster * getCaloTopoTmpHashCluster() const
void addCellLink(CaloClusterCellLink *CCCL)
void setClusterSize(const ClusterSize)
Get cluster size.
std::pair< int, int > compare(const AmgSymMatrix(N) &m1, const AmgSymMatrix(N) &m2, double precision=1e-9, bool relative=false)
compare two matrices, returns the indices of the first element that fails the condition,...
void nextDDE(Iter iter, Iter endIter)
Prefetch next CaloDDE.
void sortClusters(CaloRecGPU::EventDataHolder &holder, const CaloRecGPU::ConstantDataHolder &instance_data, const IGPUKernelSizeOptimizer &optimizer, const bool synchronize=false, CaloRecGPU::CUDA_Helpers::CUDAStreamPtrHolder stream_to_use={})
void sort(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of sort for DataVector/List.
CaloCluster_v1 CaloCluster
Define the latest version of the calorimeter cluster class.
static bool isBad(const CaloCell *pCell, bool treatL1PredictedCellsAsGood)

◆ execute() [2/2]

virtual StatusCode CaloClusterCollectionProcessor::execute ( xAOD::CaloClusterContainer * collection)
inlinefinalvirtual

Execute on an entire collection of clusters.

Parameters
collectionThe container of clusters. (deprecated)

Reimplemented from CaloClusterCollectionProcessor.

Definition at line 50 of file CaloClusterCollectionProcessor.h.

51 {
52 return execute (Gaudi::Hive::currentContext(), collection);
53 }
virtual StatusCode execute(const EventContext &ctx, xAOD::CaloClusterContainer *theClusters) const override
Execute on an entire collection of clusters.

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::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

◆ getClusterSize()

◆ initialize()

StatusCode CaloTopoClusterMaker::initialize ( )
overridevirtual

Definition at line 181 of file CaloTopoClusterMaker.cxx.

182{
183 ATH_MSG_INFO( "Initializing " << name() );
184 ATH_MSG_INFO( "Treat L1 Predicted Bad Cells as Good set to" << ((m_treatL1PredictedCellsAsGood) ? "true" : "false") );
185 ATH_MSG_INFO( "Two-Gaussian noise for Tile set to " << ((m_twogaussiannoise) ? "true" : "false") );
186 ATH_CHECK( m_cellsKey.initialize() );
188
189 ATH_CHECK( detStore()->retrieve (m_calo_id, "CaloCell_ID") );
190
191 ATH_MSG_INFO( "Threshold choices:"
192 << (m_seedCutsInAbsE?" SeedThresholdOnAbsEinSigma=":
193 " SeedThresholdOnEinSigma=")
195 << (m_neighborCutsInAbsE?", NeighborThresholdOnAbsEinSigma=":
196 ", NeighborThresholdOnEinSigma=")
198 << (m_cellCutsInAbsE?", CellThresholdOnAbsEinSigma=":
199 ", CellThresholdOnEinSigma=")
201 );
202
203 ATH_MSG_INFO( "Time cut option: " << ((!m_seedCutsInT) ? "None" : (m_cutOOTseed ? "Seed Extended" : "Seed")));
204 ATH_MSG_INFO( "E/sigma veto on T cut: m_useTimeCutUpperLimit=" << (m_useTimeCutUpperLimit ? "true" : "false") << ", m_timeCutUpperLimit=" << m_timeCutUpperLimit);
205
206 //--- set Neighbor Option
207
208 if ( m_neighborOption == "all2D" )
210 else if ( m_neighborOption == "all3D" )
212 else if ( m_neighborOption == "super3D" )
214 else {
215 ATH_MSG_ERROR( "Invalid Neighbor Option "
216 << m_neighborOption << ", exiting ..." );
217 return StatusCode::FAILURE;
218 }
219
220 ATH_MSG_INFO( "Neighbor Option "
221 << m_neighborOption << " is selected!" );
222
223 //--- check calorimeter names to use
224 for (const std::string& caloName : m_caloNames) {
225 if ( caloName == "LAREM" )
227 else if ( caloName == "LARHEC" )
229 else if ( caloName == "LARFCAL" )
231 else if ( caloName == "TILE" )
233 else
234 ATH_MSG_ERROR( "Calorimeter " << caloName
235 << " is not a valid Calorimeter name and will be ignored! "
236 << "Valid names are: LAREM, LARHEC, LARFCAL, and TILE." );
237 }
238
239 //--- check sampling names to use for seeds
240 for (const std::string& sampName : m_samplingNames) {
241 if ( sampName == "PreSamplerB" )
242 m_validSamplings.insert(CaloCell_ID::PreSamplerB);
243 else if ( sampName == "EMB1" )
244 m_validSamplings.insert(CaloCell_ID::EMB1);
245 else if ( sampName == "EMB2" )
246 m_validSamplings.insert(CaloCell_ID::EMB2);
247 else if ( sampName == "EMB3" )
248 m_validSamplings.insert(CaloCell_ID::EMB3);
249 else if ( sampName == "PreSamplerE" )
250 m_validSamplings.insert(CaloCell_ID::PreSamplerE);
251 else if ( sampName == "EME1" )
252 m_validSamplings.insert(CaloCell_ID::EME1);
253 else if ( sampName == "EME2" )
254 m_validSamplings.insert(CaloCell_ID::EME2);
255 else if ( sampName == "EME3" )
256 m_validSamplings.insert(CaloCell_ID::EME3);
257 else if ( sampName == "HEC0" )
258 m_validSamplings.insert(CaloCell_ID::HEC0);
259 else if ( sampName == "HEC1" )
260 m_validSamplings.insert(CaloCell_ID::HEC1);
261 else if ( sampName == "HEC2" )
262 m_validSamplings.insert(CaloCell_ID::HEC2);
263 else if ( sampName == "HEC3" )
264 m_validSamplings.insert(CaloCell_ID::HEC3);
265 else if ( sampName == "TileBar0" )
266 m_validSamplings.insert(CaloCell_ID::TileBar0);
267 else if ( sampName == "TileBar1" )
268 m_validSamplings.insert(CaloCell_ID::TileBar1);
269 else if ( sampName == "TileBar2" )
270 m_validSamplings.insert(CaloCell_ID::TileBar2);
271 else if ( sampName == "TileGap1" )
272 m_validSamplings.insert(CaloCell_ID::TileGap1);
273 else if ( sampName == "TileGap2" )
274 m_validSamplings.insert(CaloCell_ID::TileGap2);
275 else if ( sampName == "TileGap3" )
276 m_validSamplings.insert(CaloCell_ID::TileGap3);
277 else if ( sampName == "TileExt0" )
278 m_validSamplings.insert(CaloCell_ID::TileExt0);
279 else if ( sampName == "TileExt1" )
280 m_validSamplings.insert(CaloCell_ID::TileExt1);
281 else if ( sampName == "TileExt2" )
282 m_validSamplings.insert(CaloCell_ID::TileExt2);
283 else if ( sampName == "FCAL0" )
284 m_validSamplings.insert(CaloCell_ID::FCAL0);
285 else if ( sampName == "FCAL1" )
286 m_validSamplings.insert(CaloCell_ID::FCAL1);
287 else if ( sampName == "FCAL2" )
288 m_validSamplings.insert(CaloCell_ID::FCAL2);
289 else
290 ATH_MSG_ERROR( "Calorimeter sampling" << sampName
291 << " is not a valid Calorimeter sampling name and will be ignored! "
292 << "Valid names are: "
293 << "PreSamplerB, EMB1, EMB2, EMB3, "
294 << "PreSamplerE, EME1, EME2, EME3, "
295 << "HEC0, HEC1, HEC2, HEC3, "
296 << "TileBar0, TileBar1, TileBar2, "
297 << "TileGap1, TileGap2, TileGap3, "
298 << "TileExt0, TileExt1, TileExt2, "
299 << "FCAL0, FCAL1, FCAL2." );
300 }
301
302 msg(MSG::INFO) << "Samplings to consider for seeds:";
303 for (const std::string& sampName : m_samplingNames)
304 msg() << " " << sampName;
305 msg() << endmsg;
306
309 for (int s : m_validSamplings) {
310 if ( s > m_maxSampling )
312 if ( s < m_minSampling )
314 }
315
317
318 for (int s : m_validSamplings) {
320 }
321
322 ATH_MSG_INFO( "CellCollection to use: " << m_cellsKey.key() );
323
324 msg(MSG::INFO) << "Calorimeters to consider:";
325 for (const std::string& caloName : m_caloNames)
326 msg() << " " << caloName;
327 msg() << endmsg;
328
329 //---- retrieve the noise CDO ----------------
330
331 ATH_CHECK(m_noiseCDOKey.initialize());
332
333 ATH_MSG_INFO( (m_clusterCutsInAbsE?"ClusterAbsEtCut= ":"ClusterEtCut= ")
334 << m_clusterEtorAbsEtCut << " MeV" );
335
336 m_hashMin = 999999;
337 m_hashMax = 0;
338 for (int subdet = 0; subdet < CaloCell_ID::NSUBCALO; ++subdet) {
339 if (m_subcaloUsed[subdet]) {
340 IdentifierHash thismin, thismax;
341 m_calo_id->calo_cell_hash_range ((CaloCell_ID::SUBCALO)subdet,
342 thismin, thismax);
343 m_hashMin = std::min (m_hashMin, thismin);
344 m_hashMax = std::max (m_hashMax, thismax);
345 }
346 }
347
348 //ATH_CHECK( m_cablingKey.initialize() );
349
350 // silence possible warnings from AuxSelection (ATLASRECTS-7180)
351 xAOD::CaloCluster dummyCluster;
352 static const SG::ConstAccessor<ElementLink<CaloClusterCellLinkContainer> > accCellLinks("CellLink");
353 (void) accCellLinks.isAvailable(dummyCluster);
354
355 return StatusCode::SUCCESS;
356
357}
#define endmsg
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_INFO(x)
const ServiceHandle< StoreGateSvc > & detStore() const
MsgStream & msg() const
std::set< int > m_validSamplings
actual set of samplings to be used for seeds

◆ inputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< AlgTool > >::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.

◆ msg()

MsgStream & AthCommonMsg< AlgTool >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

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

◆ msgLvl()

bool AthCommonMsg< AlgTool >::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< AlgTool > >::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.

◆ passCellTimeCut()

bool CaloTopoClusterMaker::passCellTimeCut ( const CaloCell * pCell,
const CaloCellContainer * cellColl ) const
inlineprivate

Definition at line 720 of file CaloTopoClusterMaker.cxx.

720 {
721 // get the cell time to cut on (the same as in CaloEvent/CaloCluster.h)
722 bool isInTime = true;
723 // need sampling number already for time
725 // check for unknown sampling
726 if (sam != CaloSampling::PreSamplerB && sam != CaloSampling::PreSamplerE && sam != CaloSampling::Unknown) {
727 const unsigned pmask= pCell->caloDDE()->is_tile() ? 0x8080 : 0x2000;
728 //0x2000 is used to tell that time and quality information are available for this channel
729 //(from TWiki: https://twiki.cern.ch/twiki/bin/viewauth/AtlasComputing/CaloEventDataModel#The_Raw_Data_Model)
730 // Is time defined?
731 if(pCell->provenance() & pmask) {
732 isInTime = (std::abs(pCell->time())<m_seedThresholdOnTAbs);
733 if ( m_xtalkEM2 && (!isInTime) && (pCell->energy() > 0 && (sam == CaloSampling::EMB2 || (sam == CaloSampling::EME2 && std::abs(pCell->eta()) < 2.5)))) {
734 // relax time constraints in EMB2 and EME2_OW due to xTalk from direct phi neighbours
735 // check if |E| is less than 0.25 times one of the |E| values of direct
736 // phi-neighbours. In case that phi-neigbour is in-time, expand upper limit by m_xtalkDeltaT
737 IdentifierHash hashid = pCell->caloDDE()->calo_hash();
738 std::vector<IdentifierHash> theNeighbors;
739 LArNeighbours::neighbourOption opt = (LArNeighbours::neighbourOption)(((int)LArNeighbours::prevInPhi)|((int)LArNeighbours::nextInPhi)); // shoud make a proper enum in LarNeighbours.h for this one ...
740 m_calo_id->get_neighbours(hashid,opt,theNeighbors);
741 // loop over all neighbors of that cell (Seed Growing Algo)
742 for (IdentifierHash nId : theNeighbors) {
743 const CaloCell * pNCell = cellColl->findCell(nId);
744 if ( pNCell ) {
745 if ( pNCell->energy() > m_xtalk2Eratio1*pCell->energy() ) {
746 if ( (!(pNCell->provenance() & pmask)) || std::abs(pNCell->time()) < m_seedThresholdOnTAbs) {
747 isInTime = ((pCell->time() > -m_seedThresholdOnTAbs) && (pCell->time() < m_seedThresholdOnTAbs + m_xtalkDeltaT));
748 if ( isInTime ) {
749 // exit after first phi neighbour in case that already made
750 // the time-cut pass
751 break;
752 }
753 }
754 }
755
756 // check second neighbor
757 if (m_xtalkEM2n) {
758 std::vector<IdentifierHash> theNextNeighbors;
759 m_calo_id->get_neighbours(nId,opt,theNextNeighbors);
760 for (IdentifierHash n2Id : theNextNeighbors) {
761 if (n2Id != hashid) {
762 const CaloCell * p2NCell = cellColl->findCell(n2Id);
763 if (p2NCell) {
764 if (p2NCell->energy() > m_xtalk2Eratio2*pCell->energy()) {
765 if ( (!(p2NCell->provenance() & pmask)) || std::abs(p2NCell->time()) < m_seedThresholdOnTAbs) {
766 isInTime = ((pCell->time() > -m_seedThresholdOnTAbs) && (pCell->time() < m_seedThresholdOnTAbs + m_xtalkDeltaT));
767 if (isInTime) break;
768 }
769 }
770 }
771 }
772 } // loop over 2nd neighbors
773 }
774 } // if (pNcell)
775 } // loop over first neighbors
776 } // special case for layer 2
777
778 // check cross talk in eta
779 if ( m_xtalkEMEta && (!isInTime) && (pCell->energy() > 0 && (sam == CaloSampling::EMB2 || (sam == CaloSampling::EME2 && std::abs(pCell->eta()) < 2.5)))) {
780 IdentifierHash hashid = pCell->caloDDE()->calo_hash();
781 std::vector<IdentifierHash> theNeighbors;
783 m_calo_id->get_neighbours(hashid,opt,theNeighbors);
784 for (IdentifierHash nId : theNeighbors) {
785 const CaloCell * pNCell = cellColl->findCell(nId);
786 if ( pNCell ) {
787 if ( pNCell->energy() > m_xtalkEtaEratio*pCell->energy() ) {
788 if ( (!(pNCell->provenance() & pmask)) || std::abs(pNCell->time()) < m_seedThresholdOnTAbs) {
789 isInTime = ((pCell->time() > -m_seedThresholdOnTAbs) && (pCell->time() < m_seedThresholdOnTAbs + m_xtalkDeltaT));
790 if ( isInTime ) {
791 // exit after first phi neighbour in case that already made
792 // the time-cut pass
793 break;
794 }
795 }
796 }
797 }
798 }
799 }
800
801 // option for all2D
802 if ( m_xtalkEM2D && (!isInTime) && (pCell->energy() > 0 && (sam == CaloSampling::EMB2 || (sam == CaloSampling::EME2 && std::abs(pCell->eta()) < 2.5)))) {
803 IdentifierHash hashid = pCell->caloDDE()->calo_hash();
804 std::vector<IdentifierHash> theNeighbors;
806 m_calo_id->get_neighbours(hashid,opt,theNeighbors);
807 for (IdentifierHash nId : theNeighbors) {
808 const CaloCell * pNCell = cellColl->findCell(nId);
809 if ( pNCell ) {
810 if ( pNCell->energy() > m_xtalk2DEratio*pCell->energy() ) {
811 if ( (!(pNCell->provenance() & pmask)) || std::abs(pNCell->time()) < m_seedThresholdOnTAbs) {
812 isInTime = ((pCell->time() > -m_seedThresholdOnTAbs) && (pCell->time() < m_seedThresholdOnTAbs + m_xtalkDeltaT));
813 if ( isInTime ) break;
814 }
815 }
816 }
817 }
818 }
819
820 // relax also time constraint for EMB3 and EME2_OW
821 if ( m_xtalkEM3 && (!isInTime) && (pCell->energy() > 0 && (sam == CaloSampling::EMB3 || (sam == CaloSampling::EME3 && std::abs(pCell->eta()) < 2.5)))) {
822 // check previous sampling cell, should be >10 times more (TBC)
823 IdentifierHash hashid = pCell->caloDDE()->calo_hash();
824 std::vector<IdentifierHash> theNeighbors;
826 m_calo_id->get_neighbours(hashid,opt,theNeighbors);
827 for (IdentifierHash nId : theNeighbors) {
828 const CaloCell * pNCell = cellColl->findCell(nId);
829 if ( pNCell ) {
830 if ( pNCell->energy() > m_xtalk3Eratio*pCell->energy() ) {
831 if ( (!(pNCell->provenance() & pmask)) || std::abs(pNCell->time()) < m_seedThresholdOnTAbs) {
832 isInTime = ((pCell->time() > -m_seedThresholdOnTAbs) && (pCell->time() < m_seedThresholdOnTAbs + m_xtalkDeltaT));
833 if (isInTime) break;
834 }
835 } // Eratio cut at 10
836 }
837 } // loop over neighors
838 } // cell is layer 3 EM
839
840 }
841 }
842 return isInTime;
843}
const CaloCell * findCell(const IdentifierHash theHash) const
fast find method given identifier hash.
float time() const
get time (data member)
Definition CaloCell.h:368
uint16_t provenance() const
get provenance (data member)
Definition CaloCell.h:354

◆ 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< AlgTool > >::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< AlgTool > >::renounceArray ( SG::VarHandleKeyArray & handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364 {
366 }

◆ sysInitialize()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysInitialize ( )
overridevirtualinherited

Perform system initialization for an algorithm.

We override this to declare all the elements of handle key arrays at the end of initialization. See comments on updateVHKA.

Reimplemented in asg::AsgMetadataTool, AthCheckedComponent< AthAlgTool >, AthCheckedComponent<::AthAlgTool >, and DerivationFramework::CfAthAlgTool.

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::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< AlgTool > >::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 }
std::vector< SG::VarHandleKeyArray * > m_vhka

Member Data Documentation

◆ m_calo_id

const CaloCell_ID* CaloTopoClusterMaker::m_calo_id
private

Definition at line 65 of file CaloTopoClusterMaker.h.

◆ m_caloNames

std::vector<std::string> CaloTopoClusterMaker::m_caloNames
private

vector of names of the calorimeters to consider.

The default is to use all calorimeters (i.e. LAREM, LARHEC, LARFCAL, TILE). Cells which belong to one of the input cell containers and to one of the calorimeters in this vector are used as input for the cluster maker. This property is used in order to ignore a certain subsystem (e.g. for LAREM only clusters specify only LAREM in the jobOptions).

Definition at line 81 of file CaloTopoClusterMaker.h.

◆ m_cellCutsInAbsE

bool CaloTopoClusterMaker::m_cellCutsInAbsE
private

if set to true cell cuts are on \(|E|\) and \(|E|_\perp\).

The cell cuts will be on absolute energy and absolute transverse energy if this is set to true. If set to false the cuts will be on energy and transverse energy instead.

Definition at line 243 of file CaloTopoClusterMaker.h.

◆ m_cellsKey

SG::ReadHandleKey<CaloCellContainer> CaloTopoClusterMaker::m_cellsKey
private

vector of names of the cell containers to use as input.

Definition at line 70 of file CaloTopoClusterMaker.h.

◆ m_cellThresholdOnEorAbsEinSigma

float CaloTopoClusterMaker::m_cellThresholdOnEorAbsEinSigma
private

all cells have to satisfy \(|E| > N_{\rm cell}\,\sigma\)

This cut determines how much the cluster will extend beyond the last cell passing the neighbor threshold. The smaller this cut is the more cells will be allowed in the tail of the cluster. It should be smaller or equal to the neighbor threshold. If a cell passing this cut is neighbor of two or more cells passing the neighbor cut it will be inserted in the cluster which has the neighbor cell that was asked first for its neighbors. Since the original list of seed cells is ordered in descending order of \(E/\sigma\) (or \(|E|/\sigma\)) the distance of the cell (in number of cell generations passing the neighbor cut until this cell will be reached) usually determines in which cluster the cell will end up in. The cell cut should be lower or equal to the neighbor cut.

Definition at line 106 of file CaloTopoClusterMaker.h.

◆ m_clusterCutsInAbsE

bool CaloTopoClusterMaker::m_clusterCutsInAbsE
private

if set to true final cluster cuts are on \(|E|_\perp\).

The final cluster cuts will be on absolute transverse energy if this is set to true. If set to false the cuts will be on transverse energy instead.

Definition at line 251 of file CaloTopoClusterMaker.h.

◆ m_clusterEtorAbsEtCut

float CaloTopoClusterMaker::m_clusterEtorAbsEtCut
private

\(E_\perp\) cut on the final cluster.

The final cluster has to pass this cut (which is on \(E_\perp\) or \(|E|_\perp\) of the cluster depending on the above switch) in order to be inserted into the CaloClusterContainer.

Definition at line 259 of file CaloTopoClusterMaker.h.

◆ m_clusterSize

xAOD::CaloCluster::ClusterSize CaloTopoClusterMaker::m_clusterSize
private

Cluster size enum. Set based on energy cut jobO.

Definition at line 360 of file CaloTopoClusterMaker.h.

◆ m_cutOOTseed

bool CaloTopoClusterMaker::m_cutOOTseed
private

if set to true, seed cells failing the time cut are also excluded from cluster at all

Definition at line 279 of file CaloTopoClusterMaker.h.

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_hashMax

IdentifierHash CaloTopoClusterMaker::m_hashMax
private

Definition at line 356 of file CaloTopoClusterMaker.h.

◆ m_hashMin

IdentifierHash CaloTopoClusterMaker::m_hashMin
private

Definition at line 355 of file CaloTopoClusterMaker.h.

◆ m_maxSampling

int CaloTopoClusterMaker::m_maxSampling
private

largest valid seed sampling found

This is needed to adjust the range of the vector<bool> for a quick lookup if a cell belongs to a valid sampling for seeds or not.

Definition at line 346 of file CaloTopoClusterMaker.h.

◆ m_minSampling

int CaloTopoClusterMaker::m_minSampling
private

smallest valid seed sampling found

This is needed to adjust the range of the vector<bool> for a quick lookup if a cell belongs to a valid sampling for seeds or not.

Definition at line 338 of file CaloTopoClusterMaker.h.

◆ m_neighborCutsInAbsE

bool CaloTopoClusterMaker::m_neighborCutsInAbsE
private

if set to true neighbor cuts are on \(|E|\) and \(|E|_\perp\).

The neighbor cuts will be on absolute energy and absolute transverse energy if this is set to true. If set to false the cuts will be on energy and transverse energy instead.

Definition at line 235 of file CaloTopoClusterMaker.h.

◆ m_neighborOption

std::string CaloTopoClusterMaker::m_neighborOption
private

type of neighbor relations to use.

The CaloIdentifier package defines different types of neighbors for the calorimeter cells. Currently supported neighbor relations for topological clustering are:

  • "all2D" for all cells in the same layer (sampling or module) of one calorimeter subsystem. Note that endcap and barrel will be unconnected in this case even for the LAREM.
  • "all3D" for all cells in the same calorimeter. This means all the "all2D" neighbors for each cell plus the cells in adjacent samplings overlapping at least partially in \(\eta\) and \(\phi\) with the cell. Note that endcap and barrel will be connected in this case for the LAREM.
  • "super3D" for all cells. This means all the "all3D" neighbors for each cell plus the cells in adjacent samplings from other subsystems overlapping at least partially in \(\eta\) and \(\phi\) with the cell. All calorimeters are connected in this case.

The default setting is "super3D".

Definition at line 196 of file CaloTopoClusterMaker.h.

◆ m_neighborThresholdOnEorAbsEinSigma

float CaloTopoClusterMaker::m_neighborThresholdOnEorAbsEinSigma
private

cells with \(|E| > N_{\rm neighbor}\,\sigma\) extend the cluster

This cut determines how many cells are asked for their neighbors to expand the cluster. The smaller this cut is the more cells will be asked for their neighbors. If a cell passing this cut is neighbor of two other cells passing this cut from different clusters, the two clusters are merged. The neighbor cut should be lower or equal to the seed cut.

Definition at line 117 of file CaloTopoClusterMaker.h.

◆ m_noiseCDOKey

SG::ReadCondHandleKey<CaloNoise> CaloTopoClusterMaker::m_noiseCDOKey {this,"CaloNoiseKey","totalNoise","SG Key of CaloNoise data object"}
private

Key of the CaloNoise Conditions data object.

Typical values are '"electronicNoise', 'pileupNoise', or '"totalNoise' (default)

Definition at line 167 of file CaloTopoClusterMaker.h.

167{this,"CaloNoiseKey","totalNoise","SG Key of CaloNoise data object"};

◆ m_nOption

LArNeighbours::neighbourOption CaloTopoClusterMaker::m_nOption
private

Definition at line 197 of file CaloTopoClusterMaker.h.

◆ m_restrictHECIWandFCalNeighbors

bool CaloTopoClusterMaker::m_restrictHECIWandFCalNeighbors
private

if set to true limit the neighbors in HEC IW and FCal2&3.

The cells in HEC IW and FCal2&3 get very large in terms of eta and phi. Since this might pose problems on certain jet algorithms one might need to avoid expansion in eta and phi for those cells. If this property is set to true the 2d neighbors of these cells are not used - only the next sampling neighbors are probed.

Definition at line 208 of file CaloTopoClusterMaker.h.

◆ m_restrictPSNeighbors

bool CaloTopoClusterMaker::m_restrictPSNeighbors
private

if set to true limit the neighbors in presampler Barrel and Endcap.

The presampler cells add a lot of PileUp in the Hilum samples. With this option set to true the presampler cells do not expand the cluster in the presampler layer. Only the next sampling is used as valid neighbor source.

Definition at line 217 of file CaloTopoClusterMaker.h.

◆ m_samplingNames

std::vector<std::string> CaloTopoClusterMaker::m_samplingNames
private

vector of names of the calorimeter samplings to consider for seeds.

The default is to use all calorimeter samplings. Excluding a sampling from this vector prevents the definition of a seed cell in this sampling. Cells in those samplings are still used and incorporated in the topo clusters (both on the neighbor and the cell level) they can therefore even expand a cluster but not seed one ...

Definition at line 323 of file CaloTopoClusterMaker.h.

◆ m_seedCutsInAbsE

bool CaloTopoClusterMaker::m_seedCutsInAbsE
private

if set to true seed cuts are on \(|E|\) and \(|E|_\perp\).

The seed cuts and the \(E_\perp\) cut on the final clusters before insertion to the CaloClusterContainer will be on absolute energy and absolute transverse energy if this is set to true. If set to false the cuts will be on energy and transverse energy instead.

Definition at line 227 of file CaloTopoClusterMaker.h.

◆ m_seedCutsInT

bool CaloTopoClusterMaker::m_seedCutsInT
private

if set to true, time cut is applied to seed cells, no cut otherwise

Definition at line 274 of file CaloTopoClusterMaker.h.

◆ m_seedThresholdOnEorAbsEinSigma

float CaloTopoClusterMaker::m_seedThresholdOnEorAbsEinSigma
private

cells with \(|E| > N_{\rm seed}\,\sigma\) start a cluster

This cut determines how many clusters are formed initially. The smaller this cut is the more clusters will be created. During the accumulation of cells inside the clusters it can happen that clusters are merged if a cell passing the neighbor threshold would be included in both clusters.

Definition at line 127 of file CaloTopoClusterMaker.h.

◆ m_seedThresholdOnTAbs

float CaloTopoClusterMaker::m_seedThresholdOnTAbs
private

threshold used for timing cut on seed cells.

Implemented as |seed_cell_time|<m_seedThresholdOnTAbs. No such cut on neighbouring cells.

Definition at line 132 of file CaloTopoClusterMaker.h.

◆ m_subcaloUsed

bool CaloTopoClusterMaker::m_subcaloUsed[CaloCell_ID::NSUBCALO]
private

Flag which subdetectors are to be used.

This is initialized according to the names given in the property m_caloNames.

Definition at line 88 of file CaloTopoClusterMaker.h.

◆ m_timeCutUpperLimit

float CaloTopoClusterMaker::m_timeCutUpperLimit
private

upper limit on the energy significance, for applying the cell time cut

Definition at line 136 of file CaloTopoClusterMaker.h.

◆ m_treatL1PredictedCellsAsGood

bool CaloTopoClusterMaker::m_treatL1PredictedCellsAsGood
private

if set to true treat cells with a dead OTX which can be predicted by L1 trigger info as good instead of bad cells

Definition at line 269 of file CaloTopoClusterMaker.h.

◆ m_twogaussiannoise

bool CaloTopoClusterMaker::m_twogaussiannoise
private

if set to true use 2-gaussian noise description for TileCal

Definition at line 264 of file CaloTopoClusterMaker.h.

◆ m_useGPUCriteria

Gaudi::Property<bool> CaloTopoClusterMaker::m_useGPUCriteria {this, "UseGPUCriteria", false, "Adopt a set of criteria that is consistent with the GPU implementation."}
private

Definition at line 362 of file CaloTopoClusterMaker.h.

362{this, "UseGPUCriteria", false, "Adopt a set of criteria that is consistent with the GPU implementation."};

◆ m_useSampling

std::vector<bool> CaloTopoClusterMaker::m_useSampling
private

flag for all samplings - true for used ones, false for excluded ones

This vector serves as a quick lookup table to find out if a cell belongs to a sampling that should be used for seeds.

Definition at line 353 of file CaloTopoClusterMaker.h.

◆ m_useTimeCutUpperLimit

bool CaloTopoClusterMaker::m_useTimeCutUpperLimit
private

if set to true, the time cut is not applied on cell of large significance

Definition at line 284 of file CaloTopoClusterMaker.h.

◆ m_validSamplings

std::set<int> CaloTopoClusterMaker::m_validSamplings
private

actual set of samplings to be used for seeds

This set is created according to the names given in the property m_samplingNames.

Definition at line 330 of file CaloTopoClusterMaker.h.

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< AlgTool > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

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

Definition at line 398 of file AthCommonDataStore.h.

◆ m_xtalk2DEratio

float CaloTopoClusterMaker::m_xtalk2DEratio
private

cut on Eneighbor/E to remove out of time layer layer2 all 2D neighbors

Definition at line 161 of file CaloTopoClusterMaker.h.

◆ m_xtalk2Eratio1

float CaloTopoClusterMaker::m_xtalk2Eratio1
private

cut on Eneighbor/E to revover out of time cell close to energetic first phi neighbor cell

Definition at line 145 of file CaloTopoClusterMaker.h.

◆ m_xtalk2Eratio2

float CaloTopoClusterMaker::m_xtalk2Eratio2
private

cut on Eneighbor/E to revover out of time cell close to energetic second phi neighbor cell

Definition at line 149 of file CaloTopoClusterMaker.h.

◆ m_xtalk3Eratio

float CaloTopoClusterMaker::m_xtalk3Eratio
private

cut on Eneighbor/E to revover out of time layer 3cell close to energetic previous sampling neighbor

Definition at line 153 of file CaloTopoClusterMaker.h.

◆ m_xtalkDeltaT

float CaloTopoClusterMaker::m_xtalkDeltaT
private

additional max.

delta t added to the upper limit time window in case of xtalk in EM2 should be accounted for

Definition at line 141 of file CaloTopoClusterMaker.h.

◆ m_xtalkEM2

bool CaloTopoClusterMaker::m_xtalkEM2
private

if set to true, the time window is softened in the EMB2 and EME2_OW due to xtalk from direct neighbour cells in phi

Definition at line 289 of file CaloTopoClusterMaker.h.

◆ m_xtalkEM2D

bool CaloTopoClusterMaker::m_xtalkEM2D
private

if set to true, the time window is softened in the EMB2 and EME2_OW due to xtalk from all 2D neighors

Definition at line 294 of file CaloTopoClusterMaker.h.

◆ m_xtalkEM2n

bool CaloTopoClusterMaker::m_xtalkEM2n
private

if set to true (together with m_xtalkEM2) we also extend the time window for 2nd phi neighbors

Definition at line 299 of file CaloTopoClusterMaker.h.

◆ m_xtalkEM3

bool CaloTopoClusterMaker::m_xtalkEM3
private

if set to true we extend the time window for direct layer 3 neighbors of high energy layer 2 cells

Definition at line 304 of file CaloTopoClusterMaker.h.

◆ m_xtalkEMEta

bool CaloTopoClusterMaker::m_xtalkEMEta
private

if set to true, the time window is softened in the EMB2 and EME2_OW due to xtalk from direct neighbour cells in eta

Definition at line 310 of file CaloTopoClusterMaker.h.

◆ m_xtalkEtaEratio

float CaloTopoClusterMaker::m_xtalkEtaEratio
private

cut on Eneighbor/E to revover out of time layer 2 cell close in eta to energetic neighor cell

Definition at line 157 of file CaloTopoClusterMaker.h.


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