|
ATLAS Offline Software
|
Cluster splitter algorithm to be run on GPUs, using the same cellular automaton-based approach as Topo-Automaton Clustering.
More...
#include <TopoAutomatonSplitting.h>
|
| TopoAutomatonSplitting (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 | ~TopoAutomatonSplitting ()=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_samplingNames {this, "SamplingNames", {}, "Name(s) of Calorimeter Samplings to consider for local maxima"} |
| vector of names of the calorimeter samplings to consider for seeds. More...
|
|
Gaudi::Property< std::vector< std::string > > | m_secondarySamplingNames {this, "SecondarySamplingNames", {}, "Name(s) of secondary Calorimeter Samplings to consider for local maxima"} |
| vector of names of the secondary calorimeter samplings to consider. More...
|
|
Gaudi::Property< int > | m_nCells {this, "NumberOfCellsCut", 4, "Local maxima need at least this number of neighbors to become seeds. Must be a non-negative number (obviously)."} |
| local maxima need at least this number of neighbors to become seeds More...
|
|
Gaudi::Property< float > | m_minEnergy {this, "EnergyCut", 500 * CLHEP::MeV, "Minimal energy for a local max"} |
| local maxima need at least this energy content More...
|
|
Gaudi::Property< bool > | m_shareBorderCells {this, "ShareBorderCells", false, "Whether or not to share cells at the boundary between two clusters"} |
| share cells at the border between two local maxima More...
|
|
Gaudi::Property< float > | m_emShowerScale {this, "EMShowerScale", 5 * CLHEP::cm, "Typical EM shower distance for which the energy density should drop to 1/e"} |
| typical EM shower scale to use for distance criteria in shared cells More...
|
|
Gaudi::Property< bool > | m_absOpt {this, "WeightingOfNegClusters", false, "Should absolute value be used to identify potential seed cells"} |
| if set to true, splitter only looks at absolute value of Energy in order to identify potential seed cells 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< 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...
|
|
TASplitting::TASOptionsHolder | 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 |
|
Cluster splitter algorithm to be run on GPUs, using the same cellular automaton-based approach as Topo-Automaton Clustering.
- 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
- 25 August 2022
Definition at line 31 of file TopoAutomatonSplitting.h.
◆ StoreGateSvc_t
◆ TopoAutomatonSplitting()
TopoAutomatonSplitting::TopoAutomatonSplitting |
( |
const std::string & |
type, |
|
|
const std::string & |
name, |
|
|
const IInterface * |
parent |
|
) |
| |
◆ ~TopoAutomatonSplitting()
virtual TopoAutomatonSplitting::~TopoAutomatonSplitting |
( |
| ) |
|
|
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 210 of file TopoAutomatonSplitting.cxx.
214 using clock_type = boost::chrono::thread_clock;
215 auto time_cast = [](
const auto & before,
const auto & after)
217 return boost::chrono::duration_cast<boost::chrono::microseconds>(after - before).count();
248 time_cast(
start, preprocessing_end),
249 time_cast(preprocessing_end, after_neighs),
250 time_cast(after_neighs, after_maxima),
251 time_cast(after_maxima, after_secondary_maxima),
252 time_cast(after_secondary_maxima, after_growing),
253 time_cast(after_growing,
end)
257 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 TopoAutomatonSplitting::finalize |
( |
| ) |
|
|
overridevirtual |
Definition at line 263 of file TopoAutomatonSplitting.cxx.
267 print_times(
"Preprocessing Fill_List_of_Intra-Cluster_Neighbours Find_Local_Maxima Find_Secondary_Maxima Splitter_Tag_Propagation Cell_Weighting_And_Finalization", 6);
269 return StatusCode::SUCCESS;
◆ 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 TopoAutomatonSplitting::initialize |
( |
| ) |
|
|
inlineoverridevirtual |
◆ initialize_CUDA()
StatusCode TopoAutomatonSplitting::initialize_CUDA |
( |
| ) |
|
|
overridevirtual |
◆ initialize_non_CUDA()
StatusCode TopoAutomatonSplitting::initialize_non_CUDA |
( |
| ) |
|
|
overridevirtual |
Initialization that does not invoke CUDA functions.
Reimplemented from CaloGPUCUDAInitialization.
Definition at line 32 of file TopoAutomatonSplitting.cxx.
40 auto get_option_from_string = [](
const std::string &
str,
bool & failed)
79 auto process_sampling = [&get_option_from_string](
const std::vector<std::string> & sampling_names, std::string & invalid_names, PackType & sampling_option)
82 for (
const std::string & samp_name : sampling_names)
85 const PackType sampling = (PackType) get_option_from_string(samp_name, failed);
89 if (invalid_names.size() == 0)
91 invalid_names =
"'" + samp_name +
"'";
95 invalid_names +=
", '" + samp_name +
"'";
100 sampling_option |= ((PackType) 1) << sampling;
105 std::string invalid_names;
109 if (invalid_names.size() > 0)
112 <<
" are not a valid Calorimeter sampling name and will be ignored! "
113 <<
"Valid names are: "
114 <<
"PreSamplerB, EMB1, EMB2, EMB3, "
115 <<
"PreSamplerE, EME1, EME2, EME3, "
116 <<
"HEC0, HEC1, HEC2, HEC3, "
117 <<
"TileBar0, TileBar1, TileBar2, "
118 <<
"TileGap1, TileGap2, TileGap3, "
119 <<
"TileExt0, TileExt1, TileExt2, "
120 <<
"FCAL0, FCAL1, FCAL2." );
123 invalid_names.clear();
127 if (invalid_names.size() > 0)
130 <<
" are not a valid Calorimeter sampling name and will be ignored! "
131 <<
"Valid names are: "
132 <<
"PreSamplerB, EMB1, EMB2, EMB3, "
133 <<
"PreSamplerE, EME1, EME2, EME3, "
134 <<
"HEC0, HEC1, HEC2, HEC3, "
135 <<
"TileBar0, TileBar1, TileBar2, "
136 <<
"TileGap1, TileGap2, TileGap3, "
137 <<
"TileExt0, TileExt1, TileExt2, "
138 <<
"FCAL0, FCAL1, FCAL2." );
141 auto get_neighbour_option_from_string = [](
const std::string &
str,
bool & failed)
175 bool neigh_failed =
false;
199 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_absOpt
Gaudi::Property<bool> TopoAutomatonSplitting::m_absOpt {this, "WeightingOfNegClusters", false, "Should absolute value be used to identify potential seed cells"} |
|
private |
if set to true, splitter only looks at absolute value of Energy in order to identify potential seed cells
Definition at line 134 of file TopoAutomatonSplitting.h.
◆ m_detStore
◆ m_emShowerScale
Gaudi::Property<float> TopoAutomatonSplitting::m_emShowerScale {this, "EMShowerScale", 5 * CLHEP::cm, "Typical EM shower distance for which the energy density should drop to 1/e"} |
|
private |
typical EM shower scale to use for distance criteria in shared cells
a shared cell is included in both clusters neighboring the cell with weights depending on the cluster energies and the distance of the shared cell to the cluster centroids. The distance is measured in units of this property to roughly describe the exponential slope of the energy density distribution for em showers. The exact choice of this property is not critical but should roughly match the Moliere radius in the LArEM since here the sharing of cells has the biggest use case.
Definition at line 129 of file TopoAutomatonSplitting.h.
◆ m_evtStore
◆ 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_minEnergy
Gaudi::Property<float> TopoAutomatonSplitting::m_minEnergy {this, "EnergyCut", 500 * CLHEP::MeV, "Minimal energy for a local max"} |
|
private |
local maxima need at least this energy content
potential seed cells have to pass this cut on the energy content.
Definition at line 93 of file TopoAutomatonSplitting.h.
◆ m_nCells
Gaudi::Property<int> TopoAutomatonSplitting::m_nCells {this, "NumberOfCellsCut", 4, "Local maxima need at least this number of neighbors to become seeds. Must be a non-negative number (obviously)."} |
|
private |
local maxima need at least this number of neighbors to become seeds
each cell above the energy cut having at least this many neighbors in the parent cluster and only neighbors with smaller energy seed a split cluster.
Definition at line 86 of file TopoAutomatonSplitting.h.
◆ m_neighborOptionString
Gaudi::Property<std::string> TopoAutomatonSplitting::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 165 of file TopoAutomatonSplitting.h.
◆ m_options
◆ m_restrictHECIWandFCalNeighbors
Gaudi::Property<bool> TopoAutomatonSplitting::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 177 of file TopoAutomatonSplitting.h.
◆ m_restrictPSNeighbors
Gaudi::Property<bool> TopoAutomatonSplitting::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 187 of file TopoAutomatonSplitting.h.
◆ m_samplingNames
Gaudi::Property<std::vector<std::string> > TopoAutomatonSplitting::m_samplingNames {this, "SamplingNames", {}, "Name(s) of Calorimeter Samplings to consider for local maxima"} |
|
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 68 of file TopoAutomatonSplitting.h.
◆ m_secondarySamplingNames
Gaudi::Property<std::vector<std::string> > TopoAutomatonSplitting::m_secondarySamplingNames {this, "SecondarySamplingNames", {}, "Name(s) of secondary Calorimeter Samplings to consider for local maxima"} |
|
private |
vector of names of the secondary calorimeter samplings to consider.
Samplings in this list will be considered for local maxima only if no local max in the primary list is overlapping. By default this list is empty
Definition at line 77 of file TopoAutomatonSplitting.h.
◆ m_shareBorderCells
Gaudi::Property<bool> TopoAutomatonSplitting::m_shareBorderCells {this, "ShareBorderCells", false, "Whether or not to share cells at the boundary between two clusters"} |
|
private |
share cells at the border between two local maxima
this property needs to be set to true in order to treat cells which would be included in 2 clusters (for more then 2 the 2 with the largest E for the current seed cells are used) as shared cells. Shared cells are first excluded from the clustering and then clustered after all normal cells are clustered. The shared clusters are added to the 2 clusters they neighbor with the weights \(w_1 = E_1/(E_1+r E_2)\) and \(w_2 = 1-w_1\), where \(E_{1,2}\) are the current energies of the 2 neighboring clusters without the shared cells and \(r=\exp(d_1-d_2)\) is the ratio of the expected dependencies on the distances \(d_i\) (in units of a typical em shower scale) of each shared cell to the cluster centers. If the property is set to false the border cells are included in the normal clustering and the cluster with the largest E for the current seed cells gets the current border cell.
Definition at line 114 of file TopoAutomatonSplitting.h.
◆ 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_treatL1PredictedCellsAsGood
Gaudi::Property<bool> TopoAutomatonSplitting::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 139 of file TopoAutomatonSplitting.h.
◆ m_varHandleArraysDeclared
◆ m_vhka
The documentation for this class was generated from the following files:
void sendToGPU(const bool clear_CPU=false)
Gaudi::Property< std::string > m_neighborOptionString
type of neighbor relations to use.
std::shared_mutex m_timeMutex
Mutex that is locked when recording times.
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
std::pair< long int, long int > indices
Gaudi::Property< std::vector< std::string > > m_secondarySamplingNames
vector of names of the secondary calorimeter samplings to consider.
void splitClusterGrowing(CaloRecGPU::EventDataHolder &holder, const CaloRecGPU::ConstantDataHolder &instance_data, const TASOptionsHolder &options, const IGPUKernelSizeOptimizer &optimizer, const bool synchronize=false, CaloRecGPU::CUDA_Helpers::CUDAStreamPtrHolder stream_to_use={})
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
CaloRecGPU::Helpers::CPU_object< TopoAutomatonSplittingOptions > m_options
Gaudi::Property< std::vector< std::string > > m_samplingNames
vector of names of the calorimeter samplings to consider for seeds.
virtual void setOwner(IDataHandleHolder *o)=0
#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< bool > m_restrictHECIWandFCalNeighbors
if set to true limit the neighbors in HEC IW and FCal2&3.
TASplitting::TASOptionsHolder m_options
Options for the algorithm, held in a GPU-friendly way.
#define CRGPU_RECURSIVE_MACRO(...)
Expands recursive macros.
void print_times(const std::string &header, const size_t time_size) const
ServiceHandle< IGPUKernelSizeOptimizerSvc > m_kernelSizeOptimizer
Handle to the CUDA kernel block and grid size optimization service.
void cellWeightingAndFinalization(CaloRecGPU::EventDataHolder &holder, const CaloRecGPU::ConstantDataHolder &instance_data, const TASOptionsHolder &options, const IGPUKernelSizeOptimizer &optimizer, const bool synchronize=false, CaloRecGPU::CUDA_Helpers::CUDAStreamPtrHolder stream_to_use={})
void excludeSecondaryMaxima(CaloRecGPU::EventDataHolder &holder, const CaloRecGPU::ConstantDataHolder &instance_data, const TASOptionsHolder &options, const IGPUKernelSizeOptimizer &optimizer, const bool synchronize=false, CaloRecGPU::CUDA_Helpers::CUDAStreamPtrHolder stream_to_use={})
Gaudi::Property< bool > m_shareBorderCells
share cells at the border between two local maxima
StoreGateSvc_t m_detStore
Pointer to StoreGate (detector store by default)
Gaudi::Property< float > m_emShowerScale
typical EM shower scale to use for distance criteria in shared cells
Gaudi::Property< bool > m_restrictPSNeighbors
if set to true limit the neighbors in presampler Barrel and Endcap.
virtual void renounce()=0
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
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
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.
void findLocalMaxima(CaloRecGPU::EventDataHolder &holder, const CaloRecGPU::ConstantDataHolder &instance_data, const TASOptionsHolder &options, const IGPUKernelSizeOptimizer &optimizer, const bool synchronize=false, CaloRecGPU::CUDA_Helpers::CUDAStreamPtrHolder stream_to_use={})
Gaudi::Property< bool > m_measureTimes
If true, times are recorded to the file given by m_timeFileName.
Gaudi::Property< bool > m_absOpt
if set to true, splitter only looks at absolute value of Energy in order to identify potential seed c...
void register_kernels(IGPUKernelSizeOptimizer &optimizer)
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
Gaudi::Property< float > m_minEnergy
local maxima need at least this energy content
Gaudi::Property< int > m_nCells
local maxima need at least this number of neighbors to become seeds
void fillNeighbours(CaloRecGPU::EventDataHolder &holder, const CaloRecGPU::ConstantDataHolder &instance_data, const TASOptionsHolder &options, const IGPUKernelSizeOptimizer &optimizer, const bool synchronize=false, CaloRecGPU::CUDA_Helpers::CUDAStreamPtrHolder stream_to_use={})
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>