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::Cell > unpackRDOs (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< ISiLorentzAngleTool > m_lorentzAngleTool
SG::ReadHandleKey< InDet::SiDetectorElementStatus > m_stripDetElStatus
Gaudi::Property< bool > m_checkBadModules
Gaudi::Property< unsigned int > m_maxFiredStrips
SG::ReadCondHandleKey< InDetDD::SiDetectorElementCollection > m_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 StripID * m_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 &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_WARNING(x,...)
#define ATH_MSG_FATAL(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 381 of file StripClusteringTool.cxx.

384{
385 if (stripDetElStatus) {
386 return not stripDetElStatus->isCellGood(waferHash.value(), strip) ;
387 }
388 return false;
389}
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 307 of file StripClusteringTool.cxx.

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

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

◆ 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 393 of file StripClusteringTool.cxx.

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