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

Tool that outputs certain cell and cluster properties with implications for performance to a text file. More...

#include <CaloPerformancePropertiesOutput.h>

Inheritance diagram for CaloPerformancePropertiesOutput:
Collaboration diagram for CaloPerformancePropertiesOutput:

Classes

struct  EventPerformanceInfo

Public Member Functions

 CaloPerformancePropertiesOutput (const std::string &type, const std::string &name, const IInterface *parent)
virtual StatusCode initialize () override
virtual StatusCode execute (const EventContext &ctx, xAOD::CaloClusterContainer *cluster_collection) const override
virtual StatusCode finalize () override
virtual ~CaloPerformancePropertiesOutput ()=default
virtual StatusCode execute (xAOD::CaloClusterContainer *collection) final
 Execute on an entire collection of clusters.

Private Attributes

Gaudi::Property< std::string > m_fileName {this, "FileName", "event_properties.txt", "File to save the performance-related info."}
 The path specifying the folder to which the files should be saved.
SG::ReadHandleKey< CaloCellContainerm_cellsKey {this, "CellsName", "", "Name(s) of Cell Containers"}
 vector of names of the cell containers to use as input.
SG::ReadCondHandleKey< CaloNoisem_noiseCDOKey {this, "CaloNoiseKey", "totalNoise", "SG Key of CaloNoise data object"}
 Key of the CaloNoise Conditions data object.
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
Gaudi::Property< float > m_seedThreshold {this, "SeedThresholdOnEorAbsEinSigma", 4., "Seed threshold (in units of noise Sigma)"}
 Value to consider for the seed threshold.
Gaudi::Property< float > m_growThreshold {this, "NeighborThresholdOnEorAbsEinSigma", 2., "Neighbor (grow) threshold (in units of noise Sigma)"}
 Value to consider for the seed threshold.
Gaudi::Property< float > m_cellThreshold {this, "CellThresholdOnEorAbsEinSigma", 0., "Cell (terminal) threshold (in units of noise Sigma)"}
 Value to consider for the seed threshold.
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\).
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\).
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\).
Gaudi::Property< std::string > m_growNeighborOptionString
 type of neighbor relations to use for cluster growing.
LArNeighbours::neighbourOption m_growNeighborOption
Gaudi::Property< std::string > m_splitNeighborOptionString
 type of neighbor relations to use for cluster splitting.
LArNeighbours::neighbourOption m_splitNeighborOption
Gaudi::Property< bool > m_growRestrictHECIWandFCalNeighbors
 if set to true limit the neighbors in HEC IW and FCal2&3 during growing.
Gaudi::Property< bool > m_splitRestrictHECIWandFCalNeighbors
 if set to true limit the neighbors in HEC IW and FCal2&3 during splitting.
Gaudi::Property< bool > m_growRestrictPSNeighbors
 if set to true limit the neighbors in presampler Barrel and Endcap during growing.
Gaudi::Property< bool > m_splitRestrictPSNeighbors
 if set to true limit the neighbors in presampler Barrel and Endcap during splitting.
const CaloCell_IDm_calo_id {nullptr}
 Pointer to Calo ID Helper.
std::mutex m_mutex
 Mutex that is locked when recording info.
std::vector< EventPerformanceInfo > m_eventInfo ATLAS_THREAD_SAFE
 Vector to hold the information.
std::vector< size_t > m_eventNumbers ATLAS_THREAD_SAFE
 Vector to hold the event numbers to be recorded if necessary.

Detailed Description

Tool that outputs certain cell and cluster properties with implications for performance to a text file.

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
17 September 2025

Definition at line 33 of file CaloPerformancePropertiesOutput.h.

Constructor & Destructor Documentation

◆ CaloPerformancePropertiesOutput()

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

Definition at line 21 of file CaloPerformancePropertiesOutput.cxx.

21 :
22 base_class(type, name, parent)
23{
24}

◆ ~CaloPerformancePropertiesOutput()

virtual CaloPerformancePropertiesOutput::~CaloPerformancePropertiesOutput ( )
virtualdefault

Member Function Documentation

◆ execute() [1/2]

StatusCode CaloPerformancePropertiesOutput::execute ( const EventContext & ctx,
xAOD::CaloClusterContainer * cluster_collection ) const
overridevirtual

Definition at line 86 of file CaloPerformancePropertiesOutput.cxx.

87{
88 SG::ReadHandle<CaloCellContainer> cell_collection(m_cellsKey, ctx);
89 if ( !cell_collection.isValid() )
90 {
91 ATH_MSG_ERROR( " Cannot retrieve CaloCellContainer: " << cell_collection.name() );
92 return StatusCode::FAILURE;
93 }
94
95 SG::ReadCondHandle<CaloNoise> noise_handle(m_noiseCDOKey, ctx);
96 const CaloNoise * noise_tool = *noise_handle;
97
98 std::vector<unsigned char> cell_classification(NCaloCells, 0);
99 //0 for invalid, 1 for terminal, 2 for growing, 3 for seed...
100
101
102 EventPerformanceInfo ev_perf_info;
103
104 ev_perf_info.num_clusters = cluster_collection->size();
105
106 for (const auto & cell_ptr : *cell_collection)
107 {
108 const float energy = cell_ptr->energy();
109 const float noise = m_twoGaussianNoise ?
110 noise_tool->getEffectiveSigma(cell_ptr->ID(), cell_ptr->gain(), energy) :
111 noise_tool->getNoise(cell_ptr->ID(), cell_ptr->gain());
112 const float s_n_r = (noise > 0 ? energy / noise : 0.00001f);
113 const float abs_s_n_r = fabsf(s_n_r);
114
115 const int this_hash_ID = cell_ptr->caloDDE()->calo_hash();
116
117 if (s_n_r >= m_seedThreshold || (m_seedCutsInAbsE && abs_s_n_r >= m_seedThreshold))
118 {
119 cell_classification[this_hash_ID] = 3;
120 ++ev_perf_info.total_seed;
121 }
122 else if (s_n_r >= m_growThreshold || (m_neighborCutsInAbsE && abs_s_n_r >= m_growThreshold))
123 {
124 cell_classification[this_hash_ID] = 2;
125 ++ev_perf_info.total_grow;
126 }
127 else if (s_n_r >= m_cellThreshold || (m_cellCutsInAbsE && abs_s_n_r >= m_cellThreshold))
128 {
129 cell_classification[this_hash_ID] = 1;
130 ++ev_perf_info.total_term;
131 }
132 else
133 {
134 cell_classification[this_hash_ID] = 0;
135 ++ev_perf_info.total_invalid;
136 }
137 }
138
139 auto accumulate_stats = [&](EventPerformanceInfo::Stats & s, const double v)
140 {
141 s.min = std::min(s.min, v);
142 s.max = std::max(s.max, v);
143 s.avg += v;
144 s.stddev += v * v;
145 };
146
147 int cluster_count = 0;
148
149 std::vector<int> cluster_assignment(NCaloCells, -1);
150
151 constexpr int check_seed_flag = 0x40000000;
152 constexpr int check_first_flag = 0x20000000;
153 //Since we only have 187652 cells, this works...
154
155 constexpr int check_mask = ~(check_seed_flag | check_first_flag);
156
157 std::vector<int> cells_to_check;
158 std::vector<int> new_cells_to_check;
159 std::vector<IdentifierHash> neighs;
160
161 auto check_for_restrict = [&] (const auto & hash_ID, const bool restrict_HECIWandFCal, const bool restrict_PS)
162 {
163 const Identifier cell_identifier = m_calo_id->cell_id(hash_ID);
164
165 const auto sub_calo = m_calo_id->sub_calo(cell_identifier);
166 const auto region = m_calo_id->region(cell_identifier);
167 const auto intra_calo_sampling = m_calo_id->sampling(cell_identifier);
168
169 const bool is_PS = (sub_calo == CaloCell_ID::LAREM && intra_calo_sampling == 0);
170
171 const bool is_HECIW_or_FCAL = ( (sub_calo == CaloCell_ID::LARHEC && region == 1 ) ||
172 (sub_calo == CaloCell_ID::LARFCAL && intra_calo_sampling > 1 ) );
173
174 return (is_HECIW_or_FCAL && restrict_HECIWandFCal) || (is_PS && restrict_PS);
175 };
176
177 for (const auto & cluster_ptr : *cluster_collection)
178 {
179 int this_seed = 0, this_grow = 0, this_term = 0;
180
181 cells_to_check.clear();
182
183 bool first = true;
184
185 for (const CaloCell * cell_ptr : *cluster_ptr)
186 {
187 const int this_hash_ID = cell_ptr->caloDDE()->calo_hash();
188
189 cluster_assignment[this_hash_ID] = cluster_count | check_seed_flag | (first ? 0 : check_first_flag);
190
191 const unsigned char this_classification = cell_classification[this_hash_ID];
192
193 switch (this_classification)
194 {
195 case 3:
196 ++this_seed;
197 cluster_assignment[this_hash_ID] = cluster_count | (first ? 0 : check_first_flag);
198 cells_to_check.push_back(this_hash_ID);
199 break;
200 case 2:
201 ++this_grow;
202 break;
203 case 1:
204 ++this_term;
205 break;
206 default:
207 ATH_MSG_WARNING("Invalid cell " << this_hash_ID << " in cluster " << cluster_count << ".");
208 break;
209 }
210
211 first = false;
212 }
213
214 ev_perf_info.seed_in_cluster += this_seed;
215 ev_perf_info.grow_in_cluster += this_grow;
216 ev_perf_info.term_in_cluster += this_term;
217
218 accumulate_stats(ev_perf_info.cluster_size, cluster_ptr->size());
219 accumulate_stats(ev_perf_info.cluster_num_seed, this_seed);
220 accumulate_stats(ev_perf_info.cluster_num_grow, this_grow);
221 accumulate_stats(ev_perf_info.cluster_num_term, this_term);
222
223 //Now for the complicated part: the radius...
224
225
226 int min_radius = -1, radius = -1;
227
228 while (cells_to_check.size() > 0)
229 {
230 ++radius;
231
232 new_cells_to_check.clear();
233
234 for (const auto & hash_ID : cells_to_check)
235 {
236 if (min_radius < 0 && cell_classification[hash_ID] <= 1)
237 {
238 min_radius = radius;
239 //We have reached a terminal cell: this is the minimum radius.
240 }
241
242 const bool restrict = check_for_restrict(hash_ID,
245
246 neighs.clear();
247
249 {
250 m_calo_id->get_neighbours(hash_ID, LArNeighbours::nextInSamp, neighs);
251 }
252 else
253 {
254 m_calo_id->get_neighbours(hash_ID, m_growNeighborOption, neighs);
255 }
256
257 for (const auto & neigh_hash : neighs)
258 {
259 int & neigh_assignment = cluster_assignment[neigh_hash];
260 if ((neigh_assignment & check_seed_flag) && ((neigh_assignment & check_mask) == cluster_count))
261 {
262 new_cells_to_check.push_back(neigh_hash) ;
263 neigh_assignment = (neigh_assignment & ~check_seed_flag);
264 }
265 }
266 }
267
268 cells_to_check.swap(new_cells_to_check);
269 }
270
271 accumulate_stats(ev_perf_info.cluster_seed_min_radius, min_radius);
272 accumulate_stats(ev_perf_info.cluster_seed_max_radius, radius);
273
274 //And now the radius from the first cell
275 //(for split clusters)
276
277 if (cluster_ptr->size() > 0)
278 {
279 cells_to_check.clear();
280 cells_to_check.push_back(cluster_ptr->begin()->caloDDE()->calo_hash());
281
282 radius = -1;
283 min_radius = -1;
284
285 while (cells_to_check.size() > 0)
286 {
287 ++radius;
288
289 new_cells_to_check.clear();
290
291 for (const auto & hash_ID : cells_to_check)
292 {
293 const bool restrict = check_for_restrict(hash_ID,
296
297
298 neighs.clear();
299
301 {
302 m_calo_id->get_neighbours(hash_ID, LArNeighbours::nextInSamp, neighs);
303 }
304 else
305 {
306 m_calo_id->get_neighbours(hash_ID, m_splitNeighborOption, neighs);
307 }
308
309 for (const auto & neigh_hash : neighs)
310 {
311 int & neigh_assignment = cluster_assignment[neigh_hash];
312 if ((neigh_assignment & check_first_flag) && ((neigh_assignment & check_mask) == cluster_count))
313 {
314 new_cells_to_check.push_back(neigh_hash) ;
315 neigh_assignment = (neigh_assignment & ~check_first_flag);
316 }
317 }
318 }
319
320 cells_to_check.swap(new_cells_to_check);
321 }
322
323 accumulate_stats(ev_perf_info.cluster_first_max_radius, radius);
324 }
325
326 ++cluster_count;
327 }
328
329
330 auto finalize_stats = [&](EventPerformanceInfo::Stats & s)
331 {
332 s.avg /= cluster_collection->size();
333 s.stddev /= cluster_collection->size();
334 s.stddev -= s.avg * s.avg;
335 //Sure, floating point accuracy issues may ensue,
336 //but not the most relevant anyway...
337 };
338
339 finalize_stats(ev_perf_info.cluster_size);
340 finalize_stats(ev_perf_info.cluster_num_seed);
341 finalize_stats(ev_perf_info.cluster_num_grow);
342 finalize_stats(ev_perf_info.cluster_num_term);
343 finalize_stats(ev_perf_info.cluster_seed_min_radius);
344 finalize_stats(ev_perf_info.cluster_seed_max_radius);
345 finalize_stats(ev_perf_info.cluster_first_max_radius);
346
347 {
348 std::lock_guard<std::mutex> lock_guard(m_mutex);
349
350 m_eventInfo.push_back(ev_perf_info);
351 m_eventNumbers.push_back(ctx.evt());
352 }
353
354 return StatusCode::SUCCESS;
355}
#define ATH_MSG_ERROR(x)
#define ATH_MSG_WARNING(x)
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
Gaudi::Property< float > m_growThreshold
Value to consider for the seed threshold.
Gaudi::Property< bool > m_growRestrictHECIWandFCalNeighbors
if set to true limit the neighbors in HEC IW and FCal2&3 during growing.
Gaudi::Property< bool > m_seedCutsInAbsE
if set to true seed cuts are on and .
Gaudi::Property< bool > m_cellCutsInAbsE
if set to true cell cuts are on and .
Gaudi::Property< bool > m_growRestrictPSNeighbors
if set to true limit the neighbors in presampler Barrel and Endcap during growing.
Gaudi::Property< bool > m_neighborCutsInAbsE
if set to true neighbor cuts are on and .
Gaudi::Property< bool > m_splitRestrictPSNeighbors
if set to true limit the neighbors in presampler Barrel and Endcap during splitting.
LArNeighbours::neighbourOption m_splitNeighborOption
std::mutex m_mutex
Mutex that is locked when recording info.
const CaloCell_ID * m_calo_id
Pointer to Calo ID Helper.
SG::ReadCondHandleKey< CaloNoise > m_noiseCDOKey
Key of the CaloNoise Conditions data object.
Gaudi::Property< bool > m_twoGaussianNoise
if set to true use 2-gaussian noise description for TileCal
LArNeighbours::neighbourOption m_growNeighborOption
Gaudi::Property< float > m_seedThreshold
Value to consider for the seed threshold.
Gaudi::Property< bool > m_splitRestrictHECIWandFCalNeighbors
if set to true limit the neighbors in HEC IW and FCal2&3 during splitting.
Gaudi::Property< float > m_cellThreshold
Value to consider for the seed threshold.
SG::ReadHandleKey< CaloCellContainer > m_cellsKey
vector of names of the cell containers to use as input.
size_type size() const noexcept
Returns the number of elements in the collection.
constexpr int NCaloCells
bool first
Definition DeMoScan.py:534

◆ execute() [2/2]

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

Execute on an entire collection of clusters.

Parameters
collectionThe container of clusters. (deprecated)

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 *cluster_collection) const override

◆ finalize()

StatusCode CaloPerformancePropertiesOutput::finalize ( )
overridevirtual

Definition at line 358 of file CaloPerformancePropertiesOutput.cxx.

359{
360 if (m_fileName.size() > 0)
361 {
362 std::ofstream out(m_fileName);
363
364 std::vector<size_t> indices(m_eventNumbers.size());
365
366 std::iota(indices.begin(), indices.end(), 0);
367 std::sort(indices.begin(), indices.end(), [&](size_t a, size_t b)
368 {
369 return m_eventNumbers[a] < m_eventNumbers[b];
370 }
371 );
372
373 out << "Event_Number Number_Clusters "
374 << "Total_Seed Total_Grow Total_Term Total_Invalid "
375 << "Seed_In_Cluster Term_In_Cluster";
376
377 auto print_stat_name = [&](const auto & name)
378 {
379 out << " " << name << "_Min " << name << "_Max " << name << "_Avg " << name << "_Stddev";
380 };
381
382 print_stat_name("Size");
383 print_stat_name("Num_Seed");
384 print_stat_name("Num_Grow");
385 print_stat_name("Num_Term");
386 print_stat_name("Radius_Seed_Min");
387 print_stat_name("Radius_Seed_Max");
388 print_stat_name("Radius_First");
389
390 out << "\n";
391
392 auto print_stat = [&](const EventPerformanceInfo::Stats & s)
393 {
394 out << " " << s.min << " " << s.max << " " << s.avg << " " << s.stddev;
395 };
396
397 for (const auto & idx : indices)
398 {
399 out << m_eventNumbers[idx] << " ";
400
401 const auto & info = m_eventInfo[idx];
402
403 out << info.num_clusters << " " << info.total_seed << " " << info.total_grow << " "
404 << info.total_term << " " << info.total_invalid << " " << info.seed_in_cluster << " "
405 << info.grow_in_cluster << " " << info.term_in_cluster;
406
407 print_stat(info.cluster_size);
408 print_stat(info.cluster_num_seed);
409 print_stat(info.cluster_num_grow);
410 print_stat(info.cluster_num_term);
411 print_stat(info.cluster_seed_min_radius);
412 print_stat(info.cluster_seed_max_radius);
413 print_stat(info.cluster_first_max_radius);
414
415 out << "\n";
416 }
417
418 out << std::endl;
419
420 out.close();
421
422 }
423
424 return StatusCode::SUCCESS;
425}
static Double_t a
Gaudi::Property< std::string > m_fileName
The path specifying the folder to which the files should be saved.
std::pair< long int, long int > indices
void sort(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of sort for DataVector/List.

◆ initialize()

StatusCode CaloPerformancePropertiesOutput::initialize ( )
overridevirtual

Definition at line 27 of file CaloPerformancePropertiesOutput.cxx.

28{
29 ATH_CHECK( m_cellsKey.initialize() );
30
31 ATH_CHECK( m_noiseCDOKey.initialize() );
32
33 ATH_CHECK( detStore()->retrieve(m_calo_id, "CaloCell_ID") );
34
35 auto get_neighbour_option_from_string = [](const std::string & str, bool & failed)
36 {
37 failed = false;
39 CRGPU_CHEAP_STRING_TO_ENUM( str, LArNeighbours,
40 prevInPhi,
41 nextInPhi,
42 prevInEta,
43 nextInEta,
44 faces2D,
45 corners2D,
46 all2D,
47 prevInSamp,
48 nextInSamp,
49 upAndDown,
50 prevSubDet,
51 nextSubDet,
52 all3D,
53 corners3D,
54 all3DwithCorners,
55 prevSuperCalo,
56 nextSuperCalo,
57 super3D
58 )
59 )
60 else
61 {
62 failed = true;
64 }
65 };
66
67 bool neigh_failed = false;
68 m_growNeighborOption = get_neighbour_option_from_string(m_growNeighborOptionString, neigh_failed);
69
70 if (neigh_failed)
71 {
72 ATH_MSG_ERROR("Invalid Grow Neighbour Option: " << m_growNeighborOptionString);
73 }
74
75 neigh_failed = false;
76 m_growNeighborOption = get_neighbour_option_from_string(m_splitNeighborOptionString, neigh_failed);
77
78 if (neigh_failed)
79 {
80 ATH_MSG_ERROR("Invalid Split Neighbour Option: " << m_splitNeighborOption);
81 }
82
83 return StatusCode::SUCCESS;
84}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define CRGPU_RECURSIVE_MACRO(...)
Expands recursive macros.
#define CRGPU_CHEAP_STRING_TO_ENUM(VAR, PREFIX, ONE,...)
Checks a string variable, VAR, for matching enum identifiers (ONE and the remaining variadic argument...
Gaudi::Property< std::string > m_splitNeighborOptionString
type of neighbor relations to use for cluster splitting.
Gaudi::Property< std::string > m_growNeighborOptionString
type of neighbor relations to use for cluster growing.
retrieve(aClass, aKey=None)
Definition PyKernel.py:110

Member Data Documentation

◆ ATLAS_THREAD_SAFE [1/2]

std::vector<EventPerformanceInfo> m_eventInfo CaloPerformancePropertiesOutput::ATLAS_THREAD_SAFE
mutableprivate

Vector to hold the information.

Definition at line 257 of file CaloPerformancePropertiesOutput.h.

◆ ATLAS_THREAD_SAFE [2/2]

std::vector<size_t> m_eventNumbers CaloPerformancePropertiesOutput::ATLAS_THREAD_SAFE
mutableprivate

Vector to hold the event numbers to be recorded if necessary.

Definition at line 262 of file CaloPerformancePropertiesOutput.h.

◆ m_calo_id

const CaloCell_ID* CaloPerformancePropertiesOutput::m_calo_id {nullptr}
private

Pointer to Calo ID Helper.

Definition at line 219 of file CaloPerformancePropertiesOutput.h.

219{nullptr};

◆ m_cellCutsInAbsE

Gaudi::Property<bool> CaloPerformancePropertiesOutput::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 113 of file CaloPerformancePropertiesOutput.h.

113{this, "CellCutsInAbsE", true, "Cell (terminal) cuts in Abs E instead of E"};

◆ m_cellsKey

SG::ReadHandleKey<CaloCellContainer> CaloPerformancePropertiesOutput::m_cellsKey {this, "CellsName", "", "Name(s) of Cell Containers"}
private

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

Definition at line 61 of file CaloPerformancePropertiesOutput.h.

61{this, "CellsName", "", "Name(s) of Cell Containers"};

◆ m_cellThreshold

Gaudi::Property<float> CaloPerformancePropertiesOutput::m_cellThreshold {this, "CellThresholdOnEorAbsEinSigma", 0., "Cell (terminal) threshold (in units of noise Sigma)"}
private

Value to consider for the seed threshold.

Should be consistent with the one used in Topological Clustering to ensure cell classification is correct.

Definition at line 87 of file CaloPerformancePropertiesOutput.h.

87{this, "CellThresholdOnEorAbsEinSigma", 0., "Cell (terminal) threshold (in units of noise Sigma)"};

◆ m_fileName

Gaudi::Property<std::string> CaloPerformancePropertiesOutput::m_fileName {this, "FileName", "event_properties.txt", "File to save the performance-related info."}
private

The path specifying the folder to which the files should be saved.

Default "event_properties.txt"

Definition at line 56 of file CaloPerformancePropertiesOutput.h.

56{this, "FileName", "event_properties.txt", "File to save the performance-related info."};

◆ m_growNeighborOption

LArNeighbours::neighbourOption CaloPerformancePropertiesOutput::m_growNeighborOption
private

Definition at line 141 of file CaloPerformancePropertiesOutput.h.

◆ m_growNeighborOptionString

Gaudi::Property<std::string> CaloPerformancePropertiesOutput::m_growNeighborOptionString
private
Initial value:
{this, "GrowingNeighborOption", "super3D",
"Neighbor option to be used for cell neighborhood relations during growing"}

type of neighbor relations to use for cluster growing.

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 139 of file CaloPerformancePropertiesOutput.h.

139 {this, "GrowingNeighborOption", "super3D",
140 "Neighbor option to be used for cell neighborhood relations during growing"};

◆ m_growRestrictHECIWandFCalNeighbors

Gaudi::Property<bool> CaloPerformancePropertiesOutput::m_growRestrictHECIWandFCalNeighbors
private
Initial value:
{this, "GrowingRestrictHECIWandFCalNeighbors",
false, "Limit the neighbors in HEC IW and FCal2&3 for growing"}

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

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 180 of file CaloPerformancePropertiesOutput.h.

180 {this, "GrowingRestrictHECIWandFCalNeighbors",
181 false, "Limit the neighbors in HEC IW and FCal2&3 for growing"};

◆ m_growRestrictPSNeighbors

Gaudi::Property<bool> CaloPerformancePropertiesOutput::m_growRestrictPSNeighbors
private
Initial value:
{this, "GrowingRestrictPSNeighbors",
false, "Limit the neighbors in presampler Barrel and Endcap for growing"}

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

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 202 of file CaloPerformancePropertiesOutput.h.

202 {this, "GrowingRestrictPSNeighbors",
203 false, "Limit the neighbors in presampler Barrel and Endcap for growing"};

◆ m_growThreshold

Gaudi::Property<float> CaloPerformancePropertiesOutput::m_growThreshold {this, "NeighborThresholdOnEorAbsEinSigma", 2., "Neighbor (grow) threshold (in units of noise Sigma)"}
private

Value to consider for the seed threshold.

Should be consistent with the one used in Topological Clustering to ensure cell classification is correct.

Definition at line 82 of file CaloPerformancePropertiesOutput.h.

82{this, "NeighborThresholdOnEorAbsEinSigma", 2., "Neighbor (grow) threshold (in units of noise Sigma)"};

◆ m_mutex

std::mutex CaloPerformancePropertiesOutput::m_mutex
mutableprivate

Mutex that is locked when recording info.

Definition at line 253 of file CaloPerformancePropertiesOutput.h.

◆ m_neighborCutsInAbsE

Gaudi::Property<bool> CaloPerformancePropertiesOutput::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 105 of file CaloPerformancePropertiesOutput.h.

105{this, "NeighborCutsInAbsE", true, "Neighbor (grow) cuts in Abs E instead of E"};

◆ m_noiseCDOKey

SG::ReadCondHandleKey<CaloNoise> CaloPerformancePropertiesOutput::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 66 of file CaloPerformancePropertiesOutput.h.

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

◆ m_seedCutsInAbsE

Gaudi::Property<bool> CaloPerformancePropertiesOutput::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 97 of file CaloPerformancePropertiesOutput.h.

97{this, "SeedCutsInAbsE", true, "Seed cuts in Abs E instead of E"};

◆ m_seedThreshold

Gaudi::Property<float> CaloPerformancePropertiesOutput::m_seedThreshold {this, "SeedThresholdOnEorAbsEinSigma", 4., "Seed threshold (in units of noise Sigma)"}
private

Value to consider for the seed threshold.

Should be consistent with the one used in Topological Clustering to ensure cell classification is correct.

Definition at line 77 of file CaloPerformancePropertiesOutput.h.

77{this, "SeedThresholdOnEorAbsEinSigma", 4., "Seed threshold (in units of noise Sigma)"};

◆ m_splitNeighborOption

LArNeighbours::neighbourOption CaloPerformancePropertiesOutput::m_splitNeighborOption
private

Definition at line 169 of file CaloPerformancePropertiesOutput.h.

◆ m_splitNeighborOptionString

Gaudi::Property<std::string> CaloPerformancePropertiesOutput::m_splitNeighborOptionString
private
Initial value:
{this, "SplittingNeighborOption", "super3D",
"Neighbor option to be used for cell neighborhood relations during splitting"}

type of neighbor relations to use for cluster splitting.

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 167 of file CaloPerformancePropertiesOutput.h.

167 {this, "SplittingNeighborOption", "super3D",
168 "Neighbor option to be used for cell neighborhood relations during splitting"};

◆ m_splitRestrictHECIWandFCalNeighbors

Gaudi::Property<bool> CaloPerformancePropertiesOutput::m_splitRestrictHECIWandFCalNeighbors
private
Initial value:
{this, "SplittingRestrictHECIWandFCalNeighbors",
false, "Limit the neighbors in HEC IW and FCal2&3 for splitting"}

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

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 192 of file CaloPerformancePropertiesOutput.h.

192 {this, "SplittingRestrictHECIWandFCalNeighbors",
193 false, "Limit the neighbors in HEC IW and FCal2&3 for splitting"};

◆ m_splitRestrictPSNeighbors

Gaudi::Property<bool> CaloPerformancePropertiesOutput::m_splitRestrictPSNeighbors
private
Initial value:
{this, "SplittingRestrictPSNeighbors",
false, "Limit the neighbors in presampler Barrel and Endcap for splitting"}

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

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 212 of file CaloPerformancePropertiesOutput.h.

212 {this, "SplittingRestrictPSNeighbors",
213 false, "Limit the neighbors in presampler Barrel and Endcap for splitting"};

◆ m_twoGaussianNoise

Gaudi::Property<bool> CaloPerformancePropertiesOutput::m_twoGaussianNoise {this, "TwoGaussianNoise", false, "Use 2-gaussian noise description for TileCal"}
private

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

Definition at line 71 of file CaloPerformancePropertiesOutput.h.

71{this, "TwoGaussianNoise", false, "Use 2-gaussian noise description for TileCal"};

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