![]() |
ATLAS Offline Software
|
Topological cluster maker algorithm to be run on GPUs. More...
#include <TopoAutomatonClustering.h>
Public Member Functions | |
TopoAutomatonClustering (const std::string &type, const std::string &name, const IInterface *parent) | |
virtual StatusCode | initialize () override |
virtual StatusCode | initialize_non_CUDA () override |
Initialization that does not invoke CUDA functions. More... | |
virtual StatusCode | initialize_CUDA () override |
Initialization that invokes CUDA functions. More... | |
virtual StatusCode | execute (const EventContext &ctx, const CaloRecGPU::ConstantDataHolder &constant_data, CaloRecGPU::EventDataHolder &event_data, void *temporary_buffer) const override |
virtual StatusCode | finalize () override |
virtual | ~TopoAutomatonClustering ()=default |
void | handle (const Incident &incident) override |
Protected Member Functions | |
void | record_times (const size_t event_num, const std::vector< size_t > ×) const |
template<class ... Args> | |
void | record_times (const size_t event_num, const size_t &value) const |
template<class ... Args> | |
void | record_times (const size_t event_num, const size_t &value, Args &&... args) const |
void | print_times (const std::string &header, const size_t time_size) const |
Protected Attributes | |
std::shared_mutex | m_timeMutex |
Mutex that is locked when recording times. More... | |
std::vector< size_t > m_times | ATLAS_THREAD_SAFE |
Vector to hold execution times to be recorded if necessary. More... | |
std::vector< size_t > m_eventNumbers | ATLAS_THREAD_SAFE |
Vector to hold the event numbers to be recorded if necessary. More... | |
Gaudi::Property< bool > | m_measureTimes |
If true , times are recorded to the file given by m_timeFileName . More... | |
Gaudi::Property< std::string > | m_timeFileName |
File to which times should be saved. More... | |
Private Member Functions | |
void | record_times_helper (const size_t) const |
template<class Arg > | |
void | record_times_helper (const size_t index, Arg &&arg) const |
template<class ... Args> | |
void | record_times_helper (size_t index, Args &&... args) const |
Private Attributes | |
Gaudi::Property< std::vector< std::string > > | m_caloNames {this, "CalorimeterNames", {}, "Name(s) of Calorimeters to use for clustering"} |
vector of names of the calorimeters to consider. More... | |
Gaudi::Property< std::vector< std::string > > | m_samplingNames {this, "SeedSamplingNames", {}, "Name(s) of Calorimeter Samplings to consider for seeds"} |
vector of names of the calorimeter samplings to consider for seeds. More... | |
Gaudi::Property< float > | m_cellThresholdOnEorAbsEinSigma {this, "CellThresholdOnEorAbsEinSigma", 0., "Cell (terminal) threshold (in units of noise Sigma)"} |
all cells have to satisfy \(|E| > N_{\rm cell}\,\sigma\) More... | |
Gaudi::Property< float > | m_neighborThresholdOnEorAbsEinSigma {this, "NeighborThresholdOnEorAbsEinSigma", 2., "Neighbor (grow) threshold (in units of noise Sigma)"} |
cells with \(|E| > N_{\rm neighbor}\,\sigma\) extend the cluster More... | |
Gaudi::Property< float > | m_seedThresholdOnEorAbsEinSigma {this, "SeedThresholdOnEorAbsEinSigma", 4., "Seed threshold (in units of noise Sigma)"} |
cells with \(|E| > N_{\rm seed}\,\sigma\) start a cluster More... | |
Gaudi::Property< bool > | m_seedCutsInAbsE {this, "SeedCutsInAbsE", true, "Seed cuts in Abs E instead of E"} |
if set to true seed cuts are on \(|E|\) and \(|E|_\perp\). More... | |
Gaudi::Property< bool > | m_neighborCutsInAbsE {this, "NeighborCutsInAbsE", true, "Neighbor (grow) cuts in Abs E instead of E"} |
if set to true neighbor cuts are on \(|E|\) and \(|E|_\perp\). More... | |
Gaudi::Property< bool > | m_cellCutsInAbsE {this, "CellCutsInAbsE", true, "Cell (terminal) cuts in Abs E instead of E"} |
if set to true cell cuts are on \(|E|\) and \(|E|_\perp\). More... | |
Gaudi::Property< bool > | m_cutCellsInTime {this, "SeedCutsInT", false, "Do seed cuts in time"} |
if set to true, time cut is applied to seed cells, no cut otherwise More... | |
Gaudi::Property< float > | m_timeThreshold {this, "SeedThresholdOnTAbs", 12.5 * CLHEP::ns, "Time thresholds (in abs. val.)"} |
threshold used for timing cut on seed cells. More... | |
Gaudi::Property< float > | m_thresholdForKeeping {this, "TimeCutUpperLimit", 20., "Significance upper limit for applying time cut"} |
upper limit on the energy significance, for applying the cell time cut More... | |
Gaudi::Property< bool > | m_treatL1PredictedCellsAsGood {this, "TreatL1PredictedCellsAsGood", true, "Treat bad cells with dead OTX if predicted from L1 as good"} |
if set to true treat cells with a dead OTX which can be predicted by L1 trigger info as good instead of bad cells More... | |
Gaudi::Property< bool > | m_excludeCutSeedsFromClustering {this, "CutOOTseed", true, "Exclude out-of-time seeds from neighbouring and cell stage"} |
if set to true, seed cells failing the time cut are also excluded from cluster at all More... | |
Gaudi::Property< bool > | m_keepSignificantCells {this, "UseTimeCutUpperLimit", false, "Do not apply time cut on cells of large significance"} |
if set to true, the time cut is not applied on cell of large significance More... | |
Gaudi::Property< bool > | m_twoGaussianNoise {this, "TwoGaussianNoise", false, "Use 2-gaussian noise description for TileCal"} |
if set to true use 2-gaussian noise description for TileCal More... | |
Gaudi::Property< std::string > | m_neighborOptionString |
type of neighbor relations to use. More... | |
Gaudi::Property< bool > | m_restrictHECIWandFCalNeighbors |
if set to true limit the neighbors in HEC IW and FCal2&3. More... | |
Gaudi::Property< bool > | m_restrictPSNeighbors |
if set to true limit the neighbors in presampler Barrel and Endcap. More... | |
Gaudi::Property< bool > | m_xtalkEM2 |
If set to true, the time window is softened in the EMB2 and EME2_OW due to crosstalk from direct neighbour cells in phi. More... | |
Gaudi::Property< float > | m_xtalkDeltaT |
Additional maximum delta t added to the upper limit time window in case crosstalk in EM2 should be accounted for. More... | |
TAGrowing::TACOptionsHolder | m_options |
Options for the algorithm, held in a GPU-friendly way. More... | |
ServiceHandle< IGPUKernelSizeOptimizerSvc > | m_kernelSizeOptimizer { this, "KernelSizeOptimizer", "GPUKernelSizeOptimizerSvc", "CUDA kernel size optimization service." } |
Handle to the CUDA kernel block and grid size optimization service. More... | |
Topological cluster maker algorithm to be run on GPUs.
Definition at line 36 of file TopoAutomatonClustering.h.
TopoAutomatonClustering::TopoAutomatonClustering | ( | const std::string & | type, |
const std::string & | name, | ||
const IInterface * | parent | ||
) |
Definition at line 24 of file TopoAutomatonClustering.cxx.
|
virtualdefault |
|
overridevirtual |
Definition at line 254 of file TopoAutomatonClustering.cxx.
|
overridevirtual |
Definition at line 299 of file TopoAutomatonClustering.cxx.
|
inlineoverrideinherited |
Definition at line 66 of file CaloGPUCUDAInitialization.h.
|
inlineoverridevirtual |
Reimplemented from CaloGPUCUDAInitialization.
Definition at line 43 of file TopoAutomatonClustering.h.
|
overridevirtual |
Initialization that invokes CUDA functions.
Reimplemented from CaloGPUCUDAInitialization.
Definition at line 244 of file TopoAutomatonClustering.cxx.
|
overridevirtual |
Initialization that does not invoke CUDA functions.
Reimplemented from CaloGPUCUDAInitialization.
Definition at line 30 of file TopoAutomatonClustering.cxx.
|
inlineprotectedinherited |
Definition at line 143 of file CaloGPUTimed.h.
|
inlineprotectedinherited |
Definition at line 105 of file CaloGPUTimed.h.
|
inlineprotectedinherited |
Definition at line 124 of file CaloGPUTimed.h.
|
inlineprotectedinherited |
Definition at line 86 of file CaloGPUTimed.h.
|
inlineprivateinherited |
Definition at line 70 of file CaloGPUTimed.h.
|
inlineprivateinherited |
Definition at line 64 of file CaloGPUTimed.h.
|
inlineprivateinherited |
Definition at line 79 of file CaloGPUTimed.h.
|
mutableprotectedinherited |
Vector to hold execution times to be recorded if necessary.
Definition at line 35 of file CaloGPUTimed.h.
|
mutableprotectedinherited |
Vector to hold the event numbers to be recorded if necessary.
Definition at line 40 of file CaloGPUTimed.h.
|
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 72 of file TopoAutomatonClustering.h.
|
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 150 of file TopoAutomatonClustering.h.
|
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 102 of file TopoAutomatonClustering.h.
|
private |
if set to true, time cut is applied to seed cells, no cut otherwise
Definition at line 155 of file TopoAutomatonClustering.h.
|
private |
if set to true, seed cells failing the time cut are also excluded from cluster at all
Definition at line 174 of file TopoAutomatonClustering.h.
|
private |
if set to true, the time cut is not applied on cell of large significance
Definition at line 179 of file TopoAutomatonClustering.h.
|
private |
Handle to the CUDA kernel block and grid size optimization service.
Definition at line 259 of file TopoAutomatonClustering.h.
|
protectedinherited |
If true
, times are recorded to the file given by m_timeFileName
.
Defaults to false
.
Definition at line 46 of file CaloGPUTimed.h.
|
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 142 of file TopoAutomatonClustering.h.
|
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:
The default setting is "super3D".
Definition at line 214 of file TopoAutomatonClustering.h.
|
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 113 of file TopoAutomatonClustering.h.
|
private |
Options for the algorithm, held in a GPU-friendly way.
Definition at line 256 of file TopoAutomatonClustering.h.
|
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 226 of file TopoAutomatonClustering.h.
|
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 236 of file TopoAutomatonClustering.h.
|
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 84 of file TopoAutomatonClustering.h.
|
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 134 of file TopoAutomatonClustering.h.
|
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 123 of file TopoAutomatonClustering.h.
|
private |
upper limit on the energy significance, for applying the cell time cut
Definition at line 163 of file TopoAutomatonClustering.h.
|
protectedinherited |
File to which times should be saved.
Definition at line 50 of file CaloGPUTimed.h.
|
mutableprotectedinherited |
Mutex that is locked when recording times.
Definition at line 32 of file CaloGPUTimed.h.
|
private |
threshold used for timing cut on seed cells.
Implemented as |seed_cell_time|<m_timeThreshold. No such cut on neighbouring cells.
Definition at line 159 of file TopoAutomatonClustering.h.
|
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 169 of file TopoAutomatonClustering.h.
|
private |
if set to true use 2-gaussian noise description for TileCal
Definition at line 187 of file TopoAutomatonClustering.h.
|
private |
Additional maximum delta t added to the upper limit time window in case crosstalk in EM2 should be accounted for.
Definition at line 250 of file TopoAutomatonClustering.h.
|
private |
If set to true, the time window is softened in the EMB2 and EME2_OW due to crosstalk from direct neighbour cells in phi.
Definition at line 244 of file TopoAutomatonClustering.h.