ATLAS Offline Software
Loading...
Searching...
No Matches
ActsTrk::StripClusteringTool Class Reference

#include <StripClusteringTool.h>

Inheritance diagram for ActsTrk::StripClusteringTool:
Collaboration diagram for ActsTrk::StripClusteringTool:

Public Types

using StripRDORawData = SCT_RDORawData
using StripID = SCT_ID

Public Member Functions

 StripClusteringTool (const std::string &type, const std::string &name, const IInterface *parent)
virtual StatusCode initialize () override
virtual std::pair< unsigned int, unsigned int > countCells (const RDOContainer &rdo_collection, const std::vector< IdentifierHash > &listOfIds, const InDetDD::SiDetectorElementCollection &detector_elements) const override
virtual StatusCode clusterize (const EventContext &ctx, const RawDataCollection &RDOs, const InDet::SiDetectorElementStatus &stripDetElStatus, const InDetDD::SiDetectorElement &element, IStripClusteringTool::CellContainer &cellContainer) const override
virtual std::any createEventDataCache (xAOD::StripClusterContainer &cont, std::size_t nClusterRDOs) const override
virtual StatusCode makeClusters (const EventContext &ctx, const RDOContainer &rdo_container, const IStripClusteringTool::CellContainer &cellContainer, unsigned int module_i, const InDetDD::SiDetectorElement &element, unsigned int icluster, xAOD::StripClusterContainer &cont, std::any &vars) const override

Private Types

using ClusterProxy = InPlaceClusterization::ClusterProxy<const IStripClusteringTool::CellContainer>
using Cell = IStripClusteringTool::CellContainer::Cell

Private Member Functions

std::span< IStripClusteringTool::CellContainer::CellunpackRDOs (const RawDataCollection &RDOs, const InDet::SiDetectorElementStatus &stripDetElStatus, const InDetDD::SiDetectorElement &element, IStripClusteringTool::CellContainer &cellContainer) const
bool passTiming (const std::bitset< 3 > &timePattern) const
StatusCode decodeTimeBins ()
StatusCode makeCluster (size_t icluster, xAOD::StripCluster &cl, const ClusterProxy &cluster_proxy, const InDetDD::SiDetectorElement &element, const InDetDD::SiDetectorDesign &design, const double lorentzShift, Eigen::Matrix< float, 1, 1 > &localCov, StripAuxDataCache &auxDataCache) const

Static Private Member Functions

static bool isBadStrip (const InDet::SiDetectorElementStatus *sctDetElStatus, IdentifierHash waferHash, std::int16_t strip)

Private Attributes

StringProperty m_timeBinStr {this, "timeBins", ""}
ToolHandle< ISiLorentzAngleToolm_lorentzAngleTool
SG::ReadHandleKey< InDet::SiDetectorElementStatusm_stripDetElStatus
Gaudi::Property< bool > m_checkBadModules
Gaudi::Property< unsigned int > m_maxFiredStrips
SG::ReadCondHandleKey< InDetDD::SiDetectorElementCollectionm_stripDetEleCollKey
Gaudi::Property< bool > m_isITk
Gaudi::Property< unsigned int > m_errorStrategy {this, "errorStrategy", 0, "Use different error strategies for the strip clusters"}
int m_timeBinBits [3] {-1, -1, -1}
const StripIDm_stripID {nullptr}

Detailed Description

Definition at line 29 of file StripClusteringTool.h.

Member Typedef Documentation

◆ Cell

◆ ClusterProxy

◆ StripID

◆ StripRDORawData

Constructor & Destructor Documentation

◆ StripClusteringTool()

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

Definition at line 23 of file StripClusteringTool.cxx.

25 : base_class(type,name,parent)
26{
27}

Member Function Documentation

◆ clusterize()

StatusCode ActsTrk::StripClusteringTool::clusterize ( const EventContext & ctx,
const RawDataCollection & RDOs,
const InDet::SiDetectorElementStatus & stripDetElStatus,
const InDetDD::SiDetectorElement & element,
IStripClusteringTool::CellContainer & cellContainer ) const
overridevirtual

Definition at line 118 of file StripClusteringTool.cxx.

123{
124 IdentifierHash idHash = RDOs.identifyHash();
125 IStripClusteringTool::CellContainer::ModuleRangeGuard rangeGuard(cellContainer.startNewModule(idHash));
126
127 // At least an empty cluster collection needs to be always added because the
128 // assumption is that there is one element per element RawDataCollection.
129 bool goodModule = true;
130 if (m_checkBadModules.value()) {
131 goodModule = stripDetElStatus.isGood(idHash);
132 }
133
134 // If more than a certain number of RDOs set module to bad
135 // in this case we skip clusterization
136 if (!goodModule && m_maxFiredStrips != 0u) {
137 unsigned int nFiredStrips = 0u;
138 for (const SCT_RDORawData* rdo : RDOs) {
139 nFiredStrips += rdo->getGroupSize();
140 }
141 goodModule |= (nFiredStrips <m_maxFiredStrips);
142 }
143
144 if (goodModule) {
145 std::span<IStripClusteringTool::CellContainer::Cell>
146 cellRange = unpackRDOs(RDOs, stripDetElStatus, element, cellContainer);
147
148 static constexpr unsigned int SORT_BY_LOCAL_X=0u;
149 namespace CL=Acts::InPlaceClusterization;
150 CL::clusterize<SORT_BY_LOCAL_X, std::uint16_t>(cellRange,
151 CL::defaultConnectionHelper<CL::EConnectionType::CommonEdgeOrCorner>(cellRange));
152
153 // set the cell range per cluster
155 [&cellContainer](std::span<IStripClusteringTool::CellContainer::Cell> &,
156 unsigned int idx_begin,
157 unsigned int idx_end) {
158 cellContainer.registerNewCluster(idx_begin,idx_end);
159 });
160 }
161 // must add a range for every call otherwise the cell container and
162 // the list of processed modules get out of sync.
163 cellContainer.registerClustersForNewModule(rangeGuard.range());
164 return StatusCode::SUCCESS;
165}
Gaudi::Property< unsigned int > m_maxFiredStrips
Gaudi::Property< bool > m_checkBadModules
std::span< IStripClusteringTool::CellContainer::Cell > unpackRDOs(const RawDataCollection &RDOs, const InDet::SiDetectorElementStatus &stripDetElStatus, const InDetDD::SiDetectorElement &element, IStripClusteringTool::CellContainer &cellContainer) const
bool isGood(IdentifierHash hash) const
void for_each_cluster(cell_collection_t &cells, func_t func)
call the given function for each cluster of a label sorted cell collection.
@ u
Enums for curvilinear frames.
Definition ParamDefs.h:77

◆ countCells()

std::pair< unsigned int, unsigned int > ActsTrk::StripClusteringTool::countCells ( const RDOContainer & rdo_collection,
const std::vector< IdentifierHash > & listOfIds,
const InDetDD::SiDetectorElementCollection & detector_elements ) const
overridevirtual

Definition at line 52 of file StripClusteringTool.cxx.

54 {
55 auto getNHits =[](const InDetRawDataCollection<SCT_RDORawData> &RDOs,
56 [[maybe_unused]] const InDetDD::SiDetectorElementCollection &detector_elements )
57 -> unsigned int
58 {
59 unsigned int n_hits = 0u;
60 for (const SCT_RDORawData* rdo : RDOs) {
61 n_hits += rdo->getGroupSize();
62 }
63 return n_hits;
64 };
65 unsigned int n_hits=0;
66 if (listOfIds.empty()) {
67 for (const InDetRawDataCollection<SCT_RDORawData> *RDOs : rdoContainer) {
68 assert( RDOs);
69 n_hits += getNHits(*RDOs, detector_elements);
70 }
71 }
72 else {
73 for (const IdentifierHash& id : listOfIds) {
74 if (not id.is_valid()) continue;
75 const InDetRawDataCollection<SCT_RDORawData> *RDOs = rdoContainer.indexFindPtr(id);
76 if (RDOs) { // necessary ?
77 n_hits += getNHits(*RDOs, detector_elements);
78 }
79 }
80 }
81 return {n_hits,n_hits};
82}

◆ createEventDataCache()

std::any ActsTrk::StripClusteringTool::createEventDataCache ( xAOD::StripClusterContainer & cont,
std::size_t nClusterRDOs ) const
overridevirtual

Definition at line 92 of file StripClusteringTool.cxx.

94{
95 return std::any (StripAuxDataCache (cont, nClusterRDOs));
96}

◆ decodeTimeBins()

StatusCode ActsTrk::StripClusteringTool::decodeTimeBins ( )
private

Definition at line 98 of file StripClusteringTool.cxx.

99{
100 for (size_t i = 0; i < m_timeBinStr.size(); i++) {
101 if (i >= 3) {
102 ATH_MSG_WARNING("Time bin string has excess characters");
103 break;
104 }
105 switch (std::toupper(m_timeBinStr[i])) {
106 case 'X': m_timeBinBits[i] = -1; break;
107 case '0': m_timeBinBits[i] = 0; break;
108 case '1': m_timeBinBits[i] = 1; break;
109 default:
110 ATH_MSG_FATAL("Invalid time bin string: " << m_timeBinStr);
111 return StatusCode::FAILURE;
112 }
113 }
114 return StatusCode::SUCCESS;
115}
#define ATH_MSG_FATAL(x)
#define ATH_MSG_WARNING(x)

◆ initialize()

StatusCode ActsTrk::StripClusteringTool::initialize ( )
overridevirtual

Definition at line 29 of file StripClusteringTool.cxx.

30{
31 ATH_MSG_DEBUG("Initializing " << name() << "...");
32
39
40 ATH_CHECK(m_lorentzAngleTool.retrieve());
42
43 ATH_CHECK(m_stripDetElStatus.initialize(not m_stripDetElStatus.empty()));
44 ATH_CHECK(m_stripDetEleCollKey.initialize());
45
46 ATH_CHECK( detStore()->retrieve(m_stripID, "SCT_ID") );
47
48 return StatusCode::SUCCESS;
49}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_DEBUG(x)
Gaudi::Property< bool > m_isITk
ToolHandle< ISiLorentzAngleTool > m_lorentzAngleTool
SG::ReadCondHandleKey< InDetDD::SiDetectorElementCollection > m_stripDetEleCollKey
Gaudi::Property< unsigned int > m_errorStrategy
SG::ReadHandleKey< InDet::SiDetectorElementStatus > m_stripDetElStatus

◆ isBadStrip()

bool ActsTrk::StripClusteringTool::isBadStrip ( const InDet::SiDetectorElementStatus * sctDetElStatus,
IdentifierHash waferHash,
std::int16_t strip )
staticprivate

Definition at line 379 of file StripClusteringTool.cxx.

382{
383 if (stripDetElStatus) {
384 return not stripDetElStatus->isCellGood(waferHash.value(), strip) ;
385 }
386 return false;
387}
constexpr value_type value() const

◆ makeCluster()

StatusCode ActsTrk::StripClusteringTool::makeCluster ( size_t icluster,
xAOD::StripCluster & cl,
const ClusterProxy & cluster_proxy,
const InDetDD::SiDetectorElement & element,
const InDetDD::SiDetectorDesign & design,
const double lorentzShift,
Eigen::Matrix< float, 1, 1 > & localCov,
StripAuxDataCache & auxDataCache ) const
private

Definition at line 305 of file StripClusteringTool.cxx.

313{
314 auto [localPos, globalPos]
315 = computePosition(clusterProxy, element, design, lorentzShift, m_isITk);
316
317 // For Strip Clusters the identifier is taken from the front rod list object
318 // This is the same strategy used in Athena:
319 // Since clusterId is arbitary (it only needs to be unique) just use ID of first strip
320 // For strip Cluster it has been found that "identifierOfPosition" does not produces unique values
321
322
323 // If requiring broad errors, use the cluster size as error -
324 // TODO use SiWidth to get the right cluster size as I'm assuming equal strip pitch
325 std::size_t size = clusterProxy.size();
326 if (m_errorStrategy == 1) {// use width
327
328 localCov *= size*size;
329
330 } else if (m_errorStrategy == 2) { //use tuned error as function of size
331
332 if (size == 1)
333 localCov *= oneStripSF;
334 else if (size == 2)
335 localCov *= twoStripSF*size*size;
336 else
337 localCov *= size*size;
338
339 }
340
341 if (not m_isITk) {
342 localCov(0,0) = computeRotatedLocalCov(clusterProxy, localPos(0,0), localCov(0,0), element, design);
343 }
344
345 cl.setMeasurement<1>(element.identifyHash(), localPos, localCov);
346 Identifier frontRDOId = m_stripID->strip_id(element.identify(), clusterProxy.front().coordinates()[0]);
347 cl.setIdentifier( frontRDOId.get_compact() );
348
349 // Do I really need the global position in fast tracking?
350 cl.globalPosition() = globalPos;
351
352 cl.setChannelsInPhi(size);
353
354 unsigned int n_rdos = auxDataCache.rdoList.getBeginIndex(icluster);
355 Identifier waferId=element.identify();
356 using CellProxy = InPlaceClusterization::CellProxy<const StripClusteringTool::CellContainer>;
357 for (CellProxy cellProxy : clusterProxy) {
358 Identifier rdoId = m_stripID->strip_id(waferId, cellProxy.coordinates()[0]);
359 auxDataCache.rdoList.setValue(n_rdos,rdoId.get_compact());
360 ++n_rdos;
361 }
362 auxDataCache.rdoList.updateEndIndex(icluster,n_rdos);
363
364 return StatusCode::SUCCESS;
365}
size_t size() const
Number of registered mappings.
value_type get_compact() const
Get the compact id.
virtual IdentifierHash identifyHash() const override final
identifier hash (inline)
virtual Identifier identify() const override final
identifier of this detector element (inline)
constexpr float oneStripSF
static float computeRotatedLocalCov(const InPlaceClusterization::ClusterProxy< const IStripClusteringTool::CellContainer > &cluster, float localPos, float localCov, const InDetDD::SiDetectorElement &element, const InDetDD::SiDetectorDesign &design)
constexpr float twoStripSF
static std::pair< Eigen::Matrix< float, 1, 1 >, Eigen::Matrix< float, 3, 1 > > computePosition(const InPlaceClusterization::ClusterProxy< const IStripClusteringTool::CellContainer > &cluster, const InDetDD::SiDetectorElement &element, const InDetDD::SiDetectorDesign &design, double lorentzShift, bool isITk)
cl
print [x.__class__ for x in toList(dqregion.getSubRegions()) ]

◆ makeClusters()

StatusCode ActsTrk::StripClusteringTool::makeClusters ( const EventContext & ctx,
const RDOContainer & rdo_container,
const IStripClusteringTool::CellContainer & cellContainer,
unsigned int module_i,
const InDetDD::SiDetectorElement & element,
unsigned int icluster,
xAOD::StripClusterContainer & cont,
std::any & vars ) const
overridevirtual

Definition at line 169 of file StripClusteringTool.cxx.

177{
178 const IdentifierHash idHash = element.identifyHash();
179 double lorentzShift = m_lorentzAngleTool->getLorentzShift(idHash, ctx);
180
181 const InDetDD::SiDetectorDesign& design = element.design();
182 // get the pitch, this will be the local covariance for the cluster
183
184 assert((not m_isITk) || element.isBarrel() || dynamic_cast<const InDetDD::StripStereoAnnulusDesign*>(&element.design()) !=nullptr);
185 float pitch = (element.isBarrel() or (not m_isITk))
186 ? design.phiPitch()
187 : static_cast<const InDetDD::StripStereoAnnulusDesign&>(element.design()).phiPitchPhi();
188 Eigen::Matrix<float,1,1> localCov(pitch * pitch * ONE_TWELFTH);
189
190 StripAuxDataCache* auxDataCache = std::any_cast<StripAuxDataCache> (&cache);
191 if (!auxDataCache) throw std::bad_any_cast();
192
193 using CellContainerProxy = InPlaceClusterization::CellContainerProxy<const IStripClusteringTool::CellContainer>;
194 using ModuleProxy = InPlaceClusterization::ModuleProxy<const IStripClusteringTool::CellContainer>;
195 using ClusterProxy = InPlaceClusterization::ClusterProxy<const IStripClusteringTool::CellContainer>;
196 CellContainerProxy cellContainerProxy(&cellContainer);
197 ModuleProxy moduleProxy(cellContainerProxy[imodule]);
198
199 for (ClusterProxy clusterProxy: moduleProxy) {
200 assert( icluster< cont.size() && cont[icluster]);
201 xAOD::StripCluster &stripCluster= *cont[icluster];
202 ATH_CHECK(makeCluster(icluster++,
203 stripCluster,
204 clusterProxy,
205 element,
206 design,
207 lorentzShift,
208 localCov,
209 *auxDataCache));
210 }
211 return StatusCode::SUCCESS;
212}
StatusCode makeCluster(size_t icluster, xAOD::StripCluster &cl, const ClusterProxy &cluster_proxy, const InDetDD::SiDetectorElement &element, const InDetDD::SiDetectorDesign &design, const double lorentzShift, Eigen::Matrix< float, 1, 1 > &localCov, StripAuxDataCache &auxDataCache) const
InPlaceClusterization::ClusterProxy< const IStripClusteringTool::CellContainer > ClusterProxy
size_type size() const noexcept
Returns the number of elements in the collection.
virtual double phiPitch() const =0
Pitch in phi direction.
virtual const SiDetectorDesign & design() const override final
access to the local description (inline):
constexpr double ONE_TWELFTH
@ stripCluster
StripCluster_v1 StripCluster
Define the version of the strip cluster class.

◆ passTiming()

bool ActsTrk::StripClusteringTool::passTiming ( const std::bitset< 3 > & timePattern) const
private

Definition at line 368 of file StripClusteringTool.cxx.

368 {
369 // Convert the given timebin to a bit set and test each bit
370 // if bit is -1 (i.e. X) it always passes, other wise require exact match of 0/1
371 // N.B bitset has opposite order to the bit pattern we define
372 if (m_timeBinBits[0] != -1 and timePattern.test(2) != static_cast<bool>(m_timeBinBits[0])) return false;
373 if (m_timeBinBits[1] != -1 and timePattern.test(1) != static_cast<bool>(m_timeBinBits[1])) return false;
374 if (m_timeBinBits[2] != -1 and timePattern.test(0) != static_cast<bool>(m_timeBinBits[2])) return false;
375 return true;
376}

◆ unpackRDOs()

std::span< IStripClusteringTool::CellContainer::Cell > ActsTrk::StripClusteringTool::unpackRDOs ( const RawDataCollection & RDOs,
const InDet::SiDetectorElementStatus & stripDetElStatus,
const InDetDD::SiDetectorElement & element,
IStripClusteringTool::CellContainer & cellContainer ) const
private

Definition at line 391 of file StripClusteringTool.cxx.

395{
396 const InDetDD::SiDetectorDesign& design = element.design();
397
398 //Check type in debug build otherwise assume it is correct
399 assert(dynamic_cast<const InDetDD::SCT_ModuleSideDesign*>(&design)!=nullptr);
400 std::size_t ncells = static_cast<size_t>(static_cast<const InDetDD::SCT_ModuleSideDesign&>(design).cells());
401
402 IStripClusteringTool::CellContainer::ModuleRangeGuard rangeGuard(cellContainer, RDOs.identifyHash() );
403 // Simple single-entry cache
404 IdentifierHash waferHash=RDOs.identifyHash();
405
406 for (unsigned int rdo_i=0; rdo_i<RDOs.size(); ++rdo_i) {
407 const StripRDORawData *raw=RDOs[rdo_i];
408
409 //Check type in debug build otherwise assume it is correct
410 assert(dynamic_cast<const SCT3_RawData*>(raw)!=nullptr);
411 const SCT3_RawData* raw3 = static_cast<const SCT3_RawData*>(raw);
412
413 std::bitset<3> timePattern(raw3->getTimeBin());
414 if (!passTiming(timePattern)) {
415 ATH_MSG_DEBUG("Strip failed timing check");
416 continue;
417 }
418
419 Identifier firstStripId = raw->identify();
420 Identifier waferId = m_stripID->wafer_id(firstStripId);
421
422 assert( waferHash == m_stripID->wafer_hash(waferId) );
423
424 std::int16_t iFirstStrip = static_cast<std::int16_t>(m_stripID->strip(firstStripId));
425 assert(m_stripID->strip(firstStripId)==iFirstStrip);
426
427 assert( ncells == static_cast<std::uint16_t>(ncells) );
428 std::int16_t iMaxStrip = std::min(
429 static_cast<std::int16_t>(iFirstStrip + raw->getGroupSize()),
430 static_cast<std::int16_t>(ncells));
431
432 for (std::int16_t strip_i = iFirstStrip; strip_i < iMaxStrip; strip_i++) {
433 if (isBadStrip(&stripDetElStatus, waferHash, strip_i)) {
434 // Bad strip, throw it out to minimize useless work.
435 ATH_MSG_DEBUG("Bad strip encountered on module " << waferHash << " : "
436 << m_stripID->strip_id(waferId, strip_i)
437 << ", wafer is: " << waferId << " strip is "<< strip_i
438 << " hash " << m_stripID->wafer_hash(waferId));
439 } else {
440 // Good strip!
441
442 std::array<std::int16_t,1> coordinates{strip_i};
443 cellContainer.emplace_back_cell(coordinates, rdo_i);
444 }
445 }
446 }
447
448 return rangeGuard.moduleCellSpan();
449}
static bool isBadStrip(const InDet::SiDetectorElementStatus *sctDetElStatus, IdentifierHash waferHash, std::int16_t strip)
bool passTiming(const std::bitset< 3 > &timePattern) const
int getTimeBin() const

Member Data Documentation

◆ m_checkBadModules

Gaudi::Property<bool> ActsTrk::StripClusteringTool::m_checkBadModules
private
Initial value:
{this, "checkBadModules", true,
"Check bad modules using the conditions summary tool"}

Definition at line 102 of file StripClusteringTool.h.

102 {this, "checkBadModules", true,
103 "Check bad modules using the conditions summary tool"};

◆ m_errorStrategy

Gaudi::Property<unsigned int> ActsTrk::StripClusteringTool::m_errorStrategy {this, "errorStrategy", 0, "Use different error strategies for the strip clusters"}
private

Definition at line 114 of file StripClusteringTool.h.

114{this, "errorStrategy", 0, "Use different error strategies for the strip clusters"};

◆ m_isITk

Gaudi::Property<bool> ActsTrk::StripClusteringTool::m_isITk
private
Initial value:
{this, "isITk", true,
"True if running in ITk"}

Definition at line 111 of file StripClusteringTool.h.

111 {this, "isITk", true,
112 "True if running in ITk"};

◆ m_lorentzAngleTool

ToolHandle<ISiLorentzAngleTool> ActsTrk::StripClusteringTool::m_lorentzAngleTool
private
Initial value:
{this, "LorentzAngleTool", "",
"Tool to retreive Lorentz angle of Si detector module"
}

Definition at line 94 of file StripClusteringTool.h.

94 {this, "LorentzAngleTool", "",
95 "Tool to retreive Lorentz angle of Si detector module"
96 };

◆ m_maxFiredStrips

Gaudi::Property<unsigned int> ActsTrk::StripClusteringTool::m_maxFiredStrips
private
Initial value:
{this, "maxFiredStrips", 384u,
"Threshold of number of fired strips per wafer. 0 disables the per-wafer cut."}

Definition at line 105 of file StripClusteringTool.h.

105 {this, "maxFiredStrips", 384u,
106 "Threshold of number of fired strips per wafer. 0 disables the per-wafer cut."};

◆ m_stripDetEleCollKey

SG::ReadCondHandleKey<InDetDD::SiDetectorElementCollection> ActsTrk::StripClusteringTool::m_stripDetEleCollKey
private
Initial value:
{this, "StripDetEleCollKey", "ITkStripDetectorElementCollection",
"SiDetectorElementCollection key for strip"}

Definition at line 108 of file StripClusteringTool.h.

108 {this, "StripDetEleCollKey", "ITkStripDetectorElementCollection",
109 "SiDetectorElementCollection key for strip"};

◆ m_stripDetElStatus

SG::ReadHandleKey<InDet::SiDetectorElementStatus> ActsTrk::StripClusteringTool::m_stripDetElStatus
private
Initial value:
{this, "StripDetElStatus", "",
"SiDetectorElementStatus for strip"}

Definition at line 99 of file StripClusteringTool.h.

99 {this, "StripDetElStatus", "",
100 "SiDetectorElementStatus for strip"};

◆ m_stripID

const StripID* ActsTrk::StripClusteringTool::m_stripID {nullptr}
private

Definition at line 119 of file StripClusteringTool.h.

119{nullptr};

◆ m_timeBinBits

int ActsTrk::StripClusteringTool::m_timeBinBits[3] {-1, -1, -1}
private

Definition at line 116 of file StripClusteringTool.h.

116{-1, -1, -1};

◆ m_timeBinStr

StringProperty ActsTrk::StripClusteringTool::m_timeBinStr {this, "timeBins", ""}
private

Definition at line 92 of file StripClusteringTool.h.

92{this, "timeBins", ""};

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