|
ATLAS Offline Software
|
Topological cluster maker algorithm to be run on GPUs.
More...
#include <TopoAutomatonClustering.h>
|
| 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 |
| Process the clusters on GPU. More...
|
|
virtual StatusCode | finalize () override |
|
virtual | ~TopoAutomatonClustering ()=default |
|
ServiceHandle< StoreGateSvc > & | evtStore () |
| The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc . More...
|
|
const ServiceHandle< StoreGateSvc > & | evtStore () const |
| The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc . More...
|
|
const ServiceHandle< StoreGateSvc > & | detStore () const |
| The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc . More...
|
|
virtual StatusCode | sysInitialize () override |
| Perform system initialization for an algorithm. More...
|
|
virtual StatusCode | sysStart () override |
| Handle START transition. More...
|
|
virtual std::vector< Gaudi::DataHandle * > | inputHandles () const override |
| Return this algorithm's input handles. More...
|
|
virtual std::vector< Gaudi::DataHandle * > | outputHandles () const override |
| Return this algorithm's output handles. More...
|
|
Gaudi::Details::PropertyBase & | declareProperty (Gaudi::Property< T > &t) |
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleKey &hndl, const std::string &doc, const SG::VarHandleKeyType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleBase &hndl, const std::string &doc, const SG::VarHandleType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleKeyArray &hndArr, const std::string &doc, const SG::VarHandleKeyArrayType &) |
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, T &property, const std::string &doc, const SG::NotHandleType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, T &property, const std::string &doc="none") |
| Declare a new Gaudi property. More...
|
|
void | updateVHKA (Gaudi::Details::PropertyBase &) |
|
MsgStream & | msg () const |
|
MsgStream & | msg (const MSG::Level lvl) const |
|
bool | msgLvl (const MSG::Level lvl) const |
|
virtual size_t | size_of_temporaries () const |
| The size (in bytes) of the temporary object(s) that the algorithm will use. More...
|
|
| DeclareInterfaceID (CaloClusterGPUProcessor, 1, 0) |
|
void | handle (const Incident &incident) override |
|
|
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...
|
|
StoreGateSvc_t | m_evtStore |
| Pointer to StoreGate (event store by default) More...
|
|
StoreGateSvc_t | m_detStore |
| Pointer to StoreGate (detector store by default) More...
|
|
std::vector< SG::VarHandleKeyArray * > | m_vhka |
|
bool | m_varHandleArraysDeclared |
|
Topological cluster maker algorithm to be run on GPUs.
- Author
- Nuno Fernandes nuno..nosp@m.dos..nosp@m.santo.nosp@m.s.fe.nosp@m.rnand.nosp@m.es@c.nosp@m.ern.c.nosp@m.h
- Date
- 31 May 2022
Definition at line 36 of file TopoAutomatonClustering.h.
◆ StoreGateSvc_t
◆ TopoAutomatonClustering()
TopoAutomatonClustering::TopoAutomatonClustering |
( |
const std::string & |
type, |
|
|
const std::string & |
name, |
|
|
const IInterface * |
parent |
|
) |
| |
◆ ~TopoAutomatonClustering()
virtual TopoAutomatonClustering::~TopoAutomatonClustering |
( |
| ) |
|
|
virtualdefault |
◆ declareGaudiProperty() [1/4]
specialization for handling Gaudi::Property<SG::VarHandleKeyArray>
Definition at line 170 of file AthCommonDataStore.h.
175 hndl.documentation());
◆ declareGaudiProperty() [2/4]
specialization for handling Gaudi::Property<SG::VarHandleKey>
Definition at line 156 of file AthCommonDataStore.h.
161 hndl.documentation());
◆ declareGaudiProperty() [3/4]
specialization for handling Gaudi::Property<SG::VarHandleBase>
Definition at line 184 of file AthCommonDataStore.h.
189 hndl.documentation());
◆ declareGaudiProperty() [4/4]
◆ DeclareInterfaceID()
◆ declareProperty() [1/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
hndl | Object holding the property value. |
doc | Documentation string for the property. |
This is the version for types that derive from SG::VarHandleBase
. The property value object is put on the input and output lists as appropriate; then we forward to the base class.
Definition at line 245 of file AthCommonDataStore.h.
250 this->declare(hndl.
vhKey());
251 hndl.
vhKey().setOwner(
this);
253 return PBASE::declareProperty(
name,hndl,
doc);
◆ declareProperty() [2/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
hndl | Object holding the property value. |
doc | Documentation string for the property. |
This is the version for types that derive from SG::VarHandleKey
. The property value object is put on the input and output lists as appropriate; then we forward to the base class.
Definition at line 221 of file AthCommonDataStore.h.
229 return PBASE::declareProperty(
name,hndl,
doc);
◆ declareProperty() [3/6]
◆ declareProperty() [4/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
property | Object holding the property value. |
doc | Documentation string for the property. |
This is the generic version, for types that do not derive from SG::VarHandleKey
. It just forwards to the base class version of declareProperty
.
Definition at line 333 of file AthCommonDataStore.h.
338 return PBASE::declareProperty(
name, property,
doc);
◆ declareProperty() [5/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
property | Object holding the property value. |
doc | Documentation string for the property. |
This dispatches to either the generic declareProperty
or the one for VarHandle/Key/KeyArray.
Definition at line 352 of file AthCommonDataStore.h.
◆ declareProperty() [6/6]
◆ detStore()
◆ evtStore() [1/2]
◆ evtStore() [2/2]
◆ execute()
Process the clusters on GPU.
- Parameters
-
ctx | The event context. |
constant_data | Data held in GPU memory that is common to all events (cell noise and geometry). |
event_data | Data held in GPU memory that is specific to this event (including the description of the clusters themselves). |
temporary_buffer | A pointer to an \array in GPU memory that is at least as large as size_of_temporaries() , to hold temporary information for the algorithms. Given the way CUDA memory allocations work, casting this to a pointer (or a CaloRecGPU::Helpers::CUDA_kernel_object ) to the intended type and then using it will be perfectly valid. |
Implements CaloClusterGPUProcessor.
Definition at line 255 of file TopoAutomatonClustering.cxx.
259 using clock_type = boost::chrono::thread_clock;
260 auto time_cast = [](
const auto & before,
const auto & after)
262 return boost::chrono::duration_cast<boost::chrono::microseconds>(after - before).count();
287 time_cast(
start, before_snr),
288 time_cast(before_snr, before_pairs),
289 time_cast(before_pairs, before_growing),
290 time_cast(before_growing,
end)
294 return StatusCode::SUCCESS;
◆ extraDeps_update_handler()
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
◆ finalize()
StatusCode TopoAutomatonClustering::finalize |
( |
| ) |
|
|
overridevirtual |
◆ handle()
void CaloGPUCUDAInitialization::handle |
( |
const Incident & |
incident | ) |
|
|
inlineoverrideinherited |
Definition at line 66 of file CaloGPUCUDAInitialization.h.
68 const bool is_multiprocess = (Gaudi::Concurrency::ConcurrencyFlags::numProcs() > 0);
73 throw GaudiException(
"Failed to perform the CUDA initialization!",
74 "CaloGPUCUDAInitialization::handle",
◆ initialize()
virtual StatusCode TopoAutomatonClustering::initialize |
( |
| ) |
|
|
inlineoverridevirtual |
◆ initialize_CUDA()
StatusCode TopoAutomatonClustering::initialize_CUDA |
( |
| ) |
|
|
overridevirtual |
◆ initialize_non_CUDA()
StatusCode TopoAutomatonClustering::initialize_non_CUDA |
( |
| ) |
|
|
overridevirtual |
Initialization that does not invoke CUDA functions.
Reimplemented from CaloGPUCUDAInitialization.
Definition at line 31 of file TopoAutomatonClustering.cxx.
46 auto get_sampling_from_string = [](
const std::string &
str,
bool & failed)
92 const PackType sampling = (PackType) get_sampling_from_string(samp_name, failed);
97 <<
" is not a valid Calorimeter sampling name and will be ignored! "
98 <<
"Valid names are: "
99 <<
"PreSamplerB, EMB1, EMB2, EMB3, "
100 <<
"PreSamplerE, EME1, EME2, EME3, "
101 <<
"HEC0, HEC1, HEC2, HEC3, "
102 <<
"TileBar0, TileBar1, TileBar2, "
103 <<
"TileGap1, TileGap2, TileGap3, "
104 <<
"TileExt0, TileExt1, TileExt2, "
105 <<
"FCAL0, FCAL1, FCAL2." );
109 seed_samplings |= ((PackType) 1) << sampling;
113 auto get_calo_from_string = [](
const std::string &
str,
bool & failed)
165 const PackType sample_mask = calo_to_sampling_mask(get_calo_from_string(calo_name, failed));
170 <<
" is not a valid Calorimeter name and will be ignored! "
171 <<
"Valid names are: LAREM, LARHEC, LARFCAL, and TILE." );
175 calo_samplings |= sample_mask;
179 auto get_neighbour_option_from_string = [](
const std::string &
str,
bool & failed)
211 bool neigh_failed =
false;
242 return StatusCode::SUCCESS;
◆ inputHandles()
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() [1/2]
◆ msg() [2/2]
◆ msgLvl()
◆ outputHandles()
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.
◆ print_times()
void CaloGPUTimed::print_times |
( |
const std::string & |
header, |
|
|
const size_t |
time_size |
|
) |
| const |
|
inlineprotectedinherited |
Definition at line 143 of file CaloGPUTimed.h.
145 std::shared_lock<std::shared_mutex> lock(
m_timeMutex);
152 std::vector<size_t>
indices(m_eventNumbers.size());
157 return m_eventNumbers[a] < m_eventNumbers[b];
162 out <<
"Event_Number Total " <<
header <<
"\n";
166 out << m_eventNumbers[
idx] <<
" ";
170 for (
size_t i = 0;
i < time_size; ++
i)
172 total += m_times[
idx * time_size +
i];
177 for (
size_t i = 0;
i < time_size; ++
i)
179 out << m_times[
idx * time_size +
i] <<
" ";
◆ record_times() [1/3]
template<class ... Args>
void CaloGPUTimed::record_times |
( |
const size_t |
event_num, |
|
|
const size_t & |
value |
|
) |
| const |
|
inlineprotectedinherited |
Definition at line 105 of file CaloGPUTimed.h.
107 const size_t time_size = 1;
112 std::unique_lock<std::shared_mutex> lock(
m_timeMutex);
113 old_size = m_times.size();
114 m_times.resize(old_size + time_size);
115 m_eventNumbers.push_back(event_num);
118 std::shared_lock<std::shared_mutex> lock(
m_timeMutex);
◆ record_times() [2/3]
template<class ... Args>
void CaloGPUTimed::record_times |
( |
const size_t |
event_num, |
|
|
const size_t & |
value, |
|
|
Args &&... |
args |
|
) |
| const |
|
inlineprotectedinherited |
Definition at line 124 of file CaloGPUTimed.h.
126 const size_t time_size =
sizeof...(args) + 1;
131 std::unique_lock<std::shared_mutex> lock(
m_timeMutex);
132 old_size = m_times.size();
133 m_times.resize(old_size + time_size);
134 m_eventNumbers.push_back(event_num);
137 std::shared_lock<std::shared_mutex> lock(
m_timeMutex);
◆ record_times() [3/3]
void CaloGPUTimed::record_times |
( |
const size_t |
event_num, |
|
|
const std::vector< size_t > & |
times |
|
) |
| const |
|
inlineprotectedinherited |
Definition at line 86 of file CaloGPUTimed.h.
90 std::unique_lock<std::shared_mutex> lock(
m_timeMutex);
91 old_size = m_times.size();
92 m_times.resize(old_size +
times.size());
93 m_eventNumbers.push_back(event_num);
96 std::shared_lock<std::shared_mutex> lock(
m_timeMutex);
97 for (
size_t i = 0;
i <
times.size(); ++
i)
99 m_times[old_size +
i] =
times[
i];
◆ record_times_helper() [1/3]
template<class Arg >
void CaloGPUTimed::record_times_helper |
( |
const size_t |
index, |
|
|
Arg && |
arg |
|
) |
| const |
|
inlineprivateinherited |
◆ record_times_helper() [2/3]
void CaloGPUTimed::record_times_helper |
( |
const |
size_t | ) |
const |
|
inlineprivateinherited |
◆ record_times_helper() [3/3]
template<class ... Args>
void CaloGPUTimed::record_times_helper |
( |
size_t |
index, |
|
|
Args &&... |
args |
|
) |
| const |
|
inlineprivateinherited |
◆ renounce()
◆ renounceArray()
◆ size_of_temporaries()
virtual size_t CaloClusterGPUProcessor::size_of_temporaries |
( |
| ) |
const |
|
inlinevirtualinherited |
◆ sysInitialize()
◆ sysStart()
Handle START transition.
We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.
◆ updateVHKA()
◆ ATLAS_THREAD_SAFE [1/2]
std::vector<size_t> m_times CaloGPUTimed::ATLAS_THREAD_SAFE |
|
mutableprotectedinherited |
Vector to hold execution times to be recorded if necessary.
Definition at line 35 of file CaloGPUTimed.h.
◆ ATLAS_THREAD_SAFE [2/2]
std::vector<size_t> m_eventNumbers CaloGPUTimed::ATLAS_THREAD_SAFE |
|
mutableprotectedinherited |
Vector to hold the event numbers to be recorded if necessary.
Definition at line 40 of file CaloGPUTimed.h.
◆ m_caloNames
Gaudi::Property<std::vector<std::string> > TopoAutomatonClustering::m_caloNames {this, "CalorimeterNames", {}, "Name(s) of Calorimeters to use for clustering"} |
|
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.
◆ m_cellCutsInAbsE
Gaudi::Property<bool> TopoAutomatonClustering::m_cellCutsInAbsE {this, "CellCutsInAbsE", true, "Cell (terminal) cuts in Abs E instead of E"} |
|
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.
◆ m_cellThresholdOnEorAbsEinSigma
Gaudi::Property<float> TopoAutomatonClustering::m_cellThresholdOnEorAbsEinSigma {this, "CellThresholdOnEorAbsEinSigma", 0., "Cell (terminal) threshold (in units of noise Sigma)"} |
|
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.
◆ m_cutCellsInTime
Gaudi::Property<bool> TopoAutomatonClustering::m_cutCellsInTime {this, "SeedCutsInT", false, "Do seed cuts in time"} |
|
private |
◆ m_detStore
◆ m_evtStore
◆ m_excludeCutSeedsFromClustering
Gaudi::Property<bool> TopoAutomatonClustering::m_excludeCutSeedsFromClustering {this, "CutOOTseed", true, "Exclude out-of-time seeds from neighbouring and cell stage"} |
|
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.
◆ m_keepSignificantCells
Gaudi::Property<bool> TopoAutomatonClustering::m_keepSignificantCells {this, "UseTimeCutUpperLimit", false, "Do not apply time cut on cells of large significance"} |
|
private |
◆ m_kernelSizeOptimizer
◆ m_measureTimes
Gaudi::Property<bool> CaloGPUTimed::m_measureTimes |
|
protectedinherited |
If true
, times are recorded to the file given by m_timeFileName
.
Defaults to false
.
Definition at line 46 of file CaloGPUTimed.h.
◆ m_neighborCutsInAbsE
Gaudi::Property<bool> TopoAutomatonClustering::m_neighborCutsInAbsE {this, "NeighborCutsInAbsE", true, "Neighbor (grow) cuts in Abs E instead of E"} |
|
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.
◆ m_neighborOptionString
Gaudi::Property<std::string> TopoAutomatonClustering::m_neighborOptionString |
|
private |
Initial value:{this, "NeighborOption", "super3D",
"Neighbor option to be used for cell neighborhood relations"}
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 214 of file TopoAutomatonClustering.h.
◆ m_neighborThresholdOnEorAbsEinSigma
Gaudi::Property<float> TopoAutomatonClustering::m_neighborThresholdOnEorAbsEinSigma {this, "NeighborThresholdOnEorAbsEinSigma", 2., "Neighbor (grow) threshold (in units of noise Sigma)"} |
|
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.
◆ m_options
◆ m_restrictHECIWandFCalNeighbors
Gaudi::Property<bool> TopoAutomatonClustering::m_restrictHECIWandFCalNeighbors |
|
private |
Initial value:{this, "RestrictHECIWandFCalNeighbors",
false, "Limit the neighbors in HEC IW and FCal2&3"}
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.
◆ m_restrictPSNeighbors
Gaudi::Property<bool> TopoAutomatonClustering::m_restrictPSNeighbors |
|
private |
Initial value:{this, "RestrictPSNeighbors",
false, "Limit the neighbors in presampler Barrel and Endcap"}
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.
◆ m_samplingNames
Gaudi::Property<std::vector<std::string> > TopoAutomatonClustering::m_samplingNames {this, "SeedSamplingNames", {}, "Name(s) of Calorimeter Samplings to consider for seeds"} |
|
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.
◆ m_seedCutsInAbsE
Gaudi::Property<bool> TopoAutomatonClustering::m_seedCutsInAbsE {this, "SeedCutsInAbsE", true, "Seed cuts in Abs E instead of E"} |
|
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.
◆ m_seedThresholdOnEorAbsEinSigma
Gaudi::Property<float> TopoAutomatonClustering::m_seedThresholdOnEorAbsEinSigma {this, "SeedThresholdOnEorAbsEinSigma", 4., "Seed threshold (in units of noise Sigma)"} |
|
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.
◆ m_thresholdForKeeping
Gaudi::Property<float> TopoAutomatonClustering::m_thresholdForKeeping {this, "TimeCutUpperLimit", 20., "Significance upper limit for applying time cut"} |
|
private |
◆ m_timeFileName
Gaudi::Property<std::string> CaloGPUTimed::m_timeFileName |
|
protectedinherited |
File to which times should be saved.
Definition at line 50 of file CaloGPUTimed.h.
◆ m_timeMutex
std::shared_mutex CaloGPUTimed::m_timeMutex |
|
mutableprotectedinherited |
Mutex that is locked when recording times.
Definition at line 32 of file CaloGPUTimed.h.
◆ m_timeThreshold
Gaudi::Property<float> TopoAutomatonClustering::m_timeThreshold {this, "SeedThresholdOnTAbs", 12.5 * CLHEP::ns, "Time thresholds (in abs. val.)"} |
|
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.
◆ m_treatL1PredictedCellsAsGood
Gaudi::Property<bool> TopoAutomatonClustering::m_treatL1PredictedCellsAsGood {this, "TreatL1PredictedCellsAsGood", true, "Treat bad cells with dead OTX if predicted from L1 as good"} |
|
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.
◆ m_twoGaussianNoise
Gaudi::Property<bool> TopoAutomatonClustering::m_twoGaussianNoise {this, "TwoGaussianNoise", false, "Use 2-gaussian noise description for TileCal"} |
|
private |
◆ m_varHandleArraysDeclared
◆ m_vhka
◆ m_xtalkDeltaT
Gaudi::Property<float> TopoAutomatonClustering::m_xtalkDeltaT |
|
private |
Initial value:{this, "XTalkDeltaT",
15 *
CLHEP::ns,
"Delta T to add to upper time threshold for EM2 cells affected by xtalk."}
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.
◆ m_xtalkEM2
Gaudi::Property<bool> TopoAutomatonClustering::m_xtalkEM2 |
|
private |
Initial value:{this, "XTalkEM2",
false, "Relax time window (if timing is used) in EM2 when xTalk is present"}
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.
The documentation for this class was generated from the following files:
Gaudi::Property< bool > m_cutCellsInTime
if set to true, time cut is applied to seed cells, no cut otherwise
Gaudi::Property< bool > m_restrictHECIWandFCalNeighbors
if set to true limit the neighbors in HEC IW and FCal2&3.
Gaudi::Property< std::vector< std::string > > m_caloNames
vector of names of the calorimeters to consider.
Gaudi::Property< bool > m_cellCutsInAbsE
if set to true cell cuts are on and .
Gaudi::Property< float > m_xtalkDeltaT
Additional maximum delta t added to the upper limit time window in case crosstalk in EM2 should be ac...
void cellPairs(CaloRecGPU::EventDataHolder &holder, const CaloRecGPU::ConstantDataHolder &instance_data, const TACOptionsHolder &options, const IGPUKernelSizeOptimizer &optimizer, const bool synchronize=false, CaloRecGPU::CUDA_Helpers::CUDAStreamPtrHolder stream_to_use={})
std::shared_mutex m_timeMutex
Mutex that is locked when recording times.
CaloRecGPU::Helpers::CPU_object< TopoAutomatonOptions > m_options
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
std::pair< long int, long int > indices
StoreGateSvc_t m_evtStore
Pointer to StoreGate (event store by default)
Gaudi::Property< std::string > m_timeFileName
File to which times should be saved.
std::vector< SG::VarHandleKeyArray * > m_vhka
void clusterGrowing(CaloRecGPU::EventDataHolder &holder, const CaloRecGPU::ConstantDataHolder &instance_data, const TACOptionsHolder &options, const IGPUKernelSizeOptimizer &optimizer, const bool synchronize=false, CaloRecGPU::CUDA_Helpers::CUDAStreamPtrHolder stream_to_use={})
virtual void setOwner(IDataHandleHolder *o)=0
Gaudi::Property< bool > m_seedCutsInAbsE
if set to true seed cuts are on and .
#define CRGPU_CHEAP_STRING_TO_ENUM(VAR, PREFIX, ONE,...)
Checks a string variable, VAR, for matching enum identifiers (ONE and the remaining variadic argument...
virtual StatusCode initialize()
Gaudi::Property< float > m_seedThresholdOnEorAbsEinSigma
cells with start a cluster
Gaudi::Property< bool > m_restrictPSNeighbors
if set to true limit the neighbors in presampler Barrel and Endcap.
void signalToNoise(CaloRecGPU::EventDataHolder &holder, const CaloRecGPU::ConstantDataHolder &instance_data, const TACOptionsHolder &options, const IGPUKernelSizeOptimizer &optimizer, const bool synchronize=false, CaloRecGPU::CUDA_Helpers::CUDAStreamPtrHolder stream_to_use={})
Gaudi::Property< bool > m_excludeCutSeedsFromClustering
if set to true, seed cells failing the time cut are also excluded from cluster at all
#define CRGPU_RECURSIVE_MACRO(...)
Expands recursive macros.
Gaudi::Property< std::vector< std::string > > m_samplingNames
vector of names of the calorimeter samplings to consider for seeds.
ServiceHandle< IGPUKernelSizeOptimizerSvc > m_kernelSizeOptimizer
Handle to the CUDA kernel block and grid size optimization service.
SUBCALO
enumeration of sub calorimeters
void print_times(const std::string &header, const size_t time_size) const
Gaudi::Property< float > m_thresholdForKeeping
upper limit on the energy significance, for applying the cell time cut
Gaudi::Property< float > m_cellThresholdOnEorAbsEinSigma
all cells have to satisfy
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 neig...
StoreGateSvc_t m_detStore
Pointer to StoreGate (detector store by default)
TAGrowing::TACOptionsHolder m_options
Options for the algorithm, held in a GPU-friendly way.
virtual void renounce()=0
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
void sendToGPU(const bool clear_CPU=false)
Gaudi::Property< float > m_timeThreshold
threshold used for timing cut on seed cells.
static constexpr unsigned int getNumberOfSamplings()
Get number of available samplings.
static const std::string & type()
Incident type.
void record_times_helper(const size_t) const
Gaudi::Property< std::string > m_neighborOptionString
type of neighbor relations to use.
virtual StatusCode initialize_CUDA()
Initialization that invokes CUDA functions.
void record_times(const size_t event_num, const std::vector< size_t > ×) const
void sort(typename std::reverse_iterator< DataModel_detail::iterator< DVL > > beg, typename std::reverse_iterator< DataModel_detail::iterator< DVL > > end, const Compare &comp)
Specialization of sort for DataVector/List.
Gaudi::Property< bool > m_measureTimes
If true, times are recorded to the file given by m_timeFileName.
void register_kernels(IGPUKernelSizeOptimizer &optimizer)
Gaudi::Property< bool > m_neighborCutsInAbsE
if set to true neighbor cuts are on and .
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
Gaudi::Property< bool > m_keepSignificantCells
if set to true, the time cut is not applied on cell of large significance
Gaudi::Property< bool > m_treatL1PredictedCellsAsGood
if set to true treat cells with a dead OTX which can be predicted by L1 trigger info as good instead ...
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
Gaudi::Property< bool > m_twoGaussianNoise
if set to true use 2-gaussian noise description for TileCal
Gaudi::Property< float > m_neighborThresholdOnEorAbsEinSigma
cells with extend the cluster