ATLAS Offline Software
Loading...
Searching...
No Matches
ITk::PixelClusterOnTrackTool Class Referencefinal

#include <ITkPixelClusterOnTrackTool.h>

Inheritance diagram for ITk::PixelClusterOnTrackTool:
Collaboration diagram for ITk::PixelClusterOnTrackTool:

Public Member Functions

 PixelClusterOnTrackTool (const std::string &, const std::string &, const IInterface *)
 AlgTool constructor.
virtual ~PixelClusterOnTrackTool ()=default
virtual StatusCode initialize () override
 AlgTool initialisation.
virtual InDet::PixelClusterOnTrack * correct (const Trk::PrepRawData &, const Trk::TrackParameters &, const EventContext &ctx) const override
 produces a PixelClusterOnTrack (object factory!).
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
virtual StatusCode sysInitialize () override
 Perform system initialization for an algorithm.
virtual StatusCode sysStart () override
 Handle START transition.
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles.
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles.
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T, V, H > &t)
void updateVHKA (Gaudi::Details::PropertyBase &)
MsgStream & msg () const
bool msgLvl (const MSG::Level lvl) const

Static Public Member Functions

static const InterfaceID & interfaceID ()
 The AlgTool InterfaceID.

Protected Member Functions

InDet::PixelClusterOnTrack * correctDefault (const Trk::PrepRawData &, const Trk::TrackParameters &, const EventContext &) const
 The correct method produces a PixelClusterOnTrack using the measured PixelCluster and the track prediction.
InDet::PixelClusterOnTrack * correctNN (const Trk::PrepRawData &, const Trk::TrackParameters &, const EventContext &) const
bool getErrorsDefaultAmbi (const InDet::PixelCluster *, const Trk::TrackParameters &, Amg::Vector2D &, Amg::MatrixX &, const EventContext &) const
bool getErrorsTIDE_Ambi (const InDet::PixelCluster *, const Trk::TrackParameters &, Amg::Vector2D &, Amg::MatrixX &, const EventContext &) const
InDet::PixelClusterOnTrack * correct (const Trk::PrepRawData &, const Trk::TrackParameters &, const ITk::PixelClusterStrategy, const EventContext &) const
const Trk::ClusterSplitProbabilityContainer::ProbabilityInfo & getClusterSplittingProbability (const InDet::PixelCluster *pix, const EventContext &ctx) const
void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce (T &h)
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed.

Private Types

typedef ServiceHandle< StoreGateSvc > StoreGateSvc_t

Private Member Functions

Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

ToolHandle< ISiLorentzAngleTool > m_lorentzAngleTool {this, "LorentzAngleTool", "SiLorentzAngleTool", "Tool to retreive Lorentz angle"}
SG::ReadCondHandleKey< ITk::PixelOfflineCalibData > m_clusterITkErrorKey {this, "ITkPixelOfflineCalibData", "ITkPixelOfflineCalibData", "Output key of ITk pixel cluster"}
SG::ReadCondHandleKey< RIO_OnTrackErrorScaling > m_pixelErrorScalingKey {this,"PixelErrorScalingKey", "/Indet/TrkErrorScalingPixel", "Key for pixel error scaling conditions data."}
IntegerProperty m_positionStrategy
 toolhandle for central error scaling flag storing if errors need scaling or should be kept nominal
std::atomic_int m_errorStrategy {2}
IntegerProperty m_errorStrategyProperty
const PixelID * m_pixelid = nullptr
 Flag controlling how module distortions are taken into account:
bool m_applyNNcorrection {false}
 Enable NN based calibration (do only if NN calibration is applied).
BooleanProperty m_applyNNcorrectionProperty {this, "applyNNcorrection", false}
ToolHandle< InDet::NnClusterizationFactory > m_NnClusterizationFactory
 NN clusterizationi factory for NN based positions and errors.
BooleanProperty m_doNotRecalibrateNN {this, "doNotRecalibrateNN", false}
BooleanProperty m_noNNandBroadErrors {this, "noNNandBroadErrors", false}
BooleanProperty m_usingTIDE_Ambi {this, "RunningTIDE_Ambi", false}
 Enable different treatment of cluster errors based on NN information (do only if TIDE ambi is run).
SG::ReadHandleKey< InDet::PixelGangedClusterAmbiguities > m_splitClusterMapKey {this, "SplitClusterAmbiguityMap", ""}
SG::ReadHandleKey< Trk::ClusterSplitProbabilityContainer > m_clusterSplitProbContainer {this, "ClusterSplitProbabilityName", "",""}
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default).
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default).
std::vector< SG::VarHandleKeyArray * > m_vhka
bool m_varHandleArraysDeclared

Detailed Description

Definition at line 58 of file ITkPixelClusterOnTrackTool.h.

Member Typedef Documentation

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< AlgTool > >::StoreGateSvc_t
privateinherited

Definition at line 376 of file AthCommonDataStore.h.

Constructor & Destructor Documentation

◆ PixelClusterOnTrackTool()

ITk::PixelClusterOnTrackTool::PixelClusterOnTrackTool ( const std::string & t,
const std::string & n,
const IInterface * p )

AlgTool constructor.

Definition at line 59 of file ITkPixelClusterOnTrackTool.cxx.

60 :
61 ::AthAlgTool(t, n, p)
62{
63 declareInterface<IRIO_OnTrackCreator>(this);
64}
AthAlgTool()
Default constructor:

◆ ~PixelClusterOnTrackTool()

virtual ITk::PixelClusterOnTrackTool::~PixelClusterOnTrackTool ( )
virtualdefault

Member Function Documentation

◆ correct() [1/2]

InDet::PixelClusterOnTrack * ITk::PixelClusterOnTrackTool::correct ( const Trk::PrepRawData & rio,
const Trk::TrackParameters & trackPar,
const EventContext & ctx ) const
overridevirtual

produces a PixelClusterOnTrack (object factory!).

Depending on job options it changes the pixel cluster position and error according to the parameters (in particular, the angle) of the intersecting track.

Implements Trk::IRIO_OnTrackCreator.

Definition at line 106 of file ITkPixelClusterOnTrackTool.cxx.

107 {
108
109 if (not m_applyNNcorrection){
110 return correctDefault(rio, trackPar, ctx);
111 }else {
112 if (m_errorStrategy == 0 || m_errorStrategy == 1) {
113 // version from Giacinto
115 return nullptr;
116 }
117 // if we try broad errors, get Pixel Cluster to test if it is split
118 const InDet::PixelCluster *pix = nullptr;
120 pix = static_cast<const InDet::PixelCluster *>(&rio);
121 }
122 if (!pix) {
123 return nullptr;
124 }
125 const Trk::ClusterSplitProbabilityContainer::ProbabilityInfo &splitProb = getClusterSplittingProbability(pix, ctx);
126 if (splitProb.isSplit()) {
127 return correctNN(rio, trackPar, ctx);
128 } else {
129 return correctDefault(rio, trackPar, ctx);
130 }
131 } else {
132 return correctNN(rio, trackPar, ctx);
133 }
134 }
135}
InDet::PixelClusterOnTrack * correctNN(const Trk::PrepRawData &, const Trk::TrackParameters &, const EventContext &) const
InDet::PixelClusterOnTrack * correctDefault(const Trk::PrepRawData &, const Trk::TrackParameters &, const EventContext &) const
The correct method produces a PixelClusterOnTrack using the measured PixelCluster and the track predi...
const Trk::ClusterSplitProbabilityContainer::ProbabilityInfo & getClusterSplittingProbability(const InDet::PixelCluster *pix, const EventContext &ctx) const
bool m_applyNNcorrection
Enable NN based calibration (do only if NN calibration is applied).
virtual bool type(PrepRawDataType type) const
Interface method checking the type.

◆ correct() [2/2]

InDet::PixelClusterOnTrack * ITk::PixelClusterOnTrackTool::correct ( const Trk::PrepRawData & rio,
const Trk::TrackParameters & trackPar,
const ITk::PixelClusterStrategy strategy,
const EventContext & ctx ) const
protected

Definition at line 347 of file ITkPixelClusterOnTrackTool.cxx.

349 {
350 int initial_errorStrategy;
351 InDet::PixelClusterOnTrack *newROT;
352
353 switch (strategy) {
354 case PixelClusterStrategy::OUTLIER: // if cluster is outlier, increase errors
356 initial_errorStrategy = m_errorStrategy;
357 m_errorStrategy = 0; // error as size of cluster /sqrt(12)
358 newROT = correct(rio, trackPar, ctx);
359 m_errorStrategy = initial_errorStrategy;
360 return newROT;
361
362 default:
363 return correct(rio, trackPar, ctx);
364 }
365}
virtual InDet::PixelClusterOnTrack * correct(const Trk::PrepRawData &, const Trk::TrackParameters &, const EventContext &ctx) const override
produces a PixelClusterOnTrack (object factory!).

◆ correctDefault()

InDet::PixelClusterOnTrack * ITk::PixelClusterOnTrackTool::correctDefault ( const Trk::PrepRawData & rio,
const Trk::TrackParameters & trackPar,
const EventContext & ctx ) const
protected

The correct method produces a PixelClusterOnTrack using the measured PixelCluster and the track prediction.

Definition at line 143 of file ITkPixelClusterOnTrackTool.cxx.

144 {
145
146 const double TOPHAT_SIGMA = 1. / std::sqrt(12.);
147 const InDet::PixelCluster *pix = nullptr;
149 pix = static_cast<const InDet::PixelCluster *>(&rio);
150 }
151 else{
152 return nullptr;
153 }
154
155 ATH_MSG_VERBOSE("Correct called with Error strategy " << m_errorStrategy);
156
157 // PixelClusterOnTrack production
158 //
159 Trk::LocalParameters locpar;
160 Amg::Vector3D glob(pix->globalPosition());
161
162
163 // Get pointer to detector element
164 const InDetDD::SiDetectorElement *element = pix->detectorElement();
165 if (!element) {
166 return nullptr;
167 }
168 IdentifierHash idHash = element->identifyHash();
169
170 double errphi = -1;
171 double erreta = -1;
172
173 if (pix->rdoList().empty()) {
174 ATH_MSG_WARNING("Pixel RDO-list size is 0, check integrity of pixel clusters! stop ROT creation.");
175 return nullptr;
176 } else {
177 const InDetDD::PixelModuleDesign *design =
178 static_cast<const InDetDD::PixelModuleDesign *>(&element->design());
179
180 // get candidate track angle in module local frame
181 const Amg::Vector3D& my_track = trackPar.momentum();
182 const Amg::Vector3D& my_normal = element->normal();
183 const Amg::Vector3D& my_phiax = element->phiAxis();
184 const Amg::Vector3D& my_etaax = element->etaAxis();
185 float trkphicomp = my_track.dot(my_phiax);
186 float trketacomp = my_track.dot(my_etaax);
187 float trknormcomp = my_track.dot(my_normal);
188 double bowphi = std::atan2(trkphicomp, trknormcomp);
189 double boweta = std::atan2(trketacomp, trknormcomp);
190
191 float tanl = m_lorentzAngleTool->getTanLorentzAngle(idHash, ctx);
192 int readoutside = element->design().readoutSide();
193
194 // map the angles of inward-going tracks onto [-PI/2, PI/2]
195 if (bowphi > M_PI *0.5) {
196 bowphi -= M_PI;
197 }
198 if (bowphi < -M_PI *0.5) {
199 bowphi += M_PI;
200 }
201 // finally, subtract the Lorentz angle effect
202 // the readoutside term is needed because of a bug in old
203 // geometry versions (CSC-01-* and CSC-02-*)
204 double angle = std::atan(std::tan(bowphi) - readoutside * tanl);
205
206 // settle the sign/pi periodicity issues
207 double thetaloc = -999.;
208 if (boweta > -0.5 * M_PI && boweta < M_PI / 2.) { //M_PI_2 in cmath
209 thetaloc = M_PI_2 - boweta;
210 }else if (boweta > M_PI_2 && boweta < M_PI) {
211 thetaloc = 1.5 * M_PI - boweta;
212 } else { // 3rd quadrant
213 thetaloc = -M_PI_2 - boweta;
214 }
215 double etaloc = -1 * log(tan(thetaloc * 0.5));
216
217 // try to understand...
218 const Identifier element_id = element->identify();
219 int PixEtaModule = m_pixelid->eta_module(element_id);
220 int PixPhiModule = m_pixelid->phi_module(element_id);
221 double PixTrkPt = trackPar.pT();
222 double PixTrkEta = trackPar.eta();
223 ATH_MSG_VERBOSE("tanl = " << tanl << " readout side is " << readoutside <<
224 " module " << PixEtaModule << " " << PixPhiModule <<
225 " track pt, eta = " << PixTrkPt << " " << PixTrkEta <<
226 " track momentum phi, norm = " << trkphicomp << " " <<
227 trknormcomp << " bowphi = " << bowphi << " angle = " << angle);
228
229 float omegaphi = pix->omegax();
230 float omegaeta = pix->omegay();
231 double localphi = -9999.;
232 double localeta = -9999.;
233
234 const std::vector<Identifier> & rdos = pix->rdoList();
235 InDetDD::SiLocalPosition meanpos(0, 0, 0);
236 int rowmin = 9999;
237 int rowmax = -9999;
238 int colmin = 9999;
239 int colmax = -9999;
240 for (const auto & rId:rdos) {
241 const int row = m_pixelid->phi_index(rId);
242 const int col = m_pixelid->eta_index(rId);
243 rowmin = std::min(rowmin, row);
244 rowmax = std::max(rowmax,row);
245 colmin = std::min(colmin, col);
246 colmax = std::max(colmax, col);
247 meanpos += design->positionFromColumnRow(col, row);
248 }
249 meanpos = meanpos / rdos.size();
250 InDetDD::SiLocalPosition pos1 =
251 design->positionFromColumnRow(colmin, rowmin);
252 InDetDD::SiLocalPosition pos2 =
253 design->positionFromColumnRow(colmax, rowmin);
254 InDetDD::SiLocalPosition pos3 =
255 design->positionFromColumnRow(colmin, rowmax);
256 InDetDD::SiLocalPosition pos4 =
257 design->positionFromColumnRow(colmax, rowmax);
258
259 InDetDD::SiLocalPosition centroid = 0.25 * (pos1 + pos2 + pos3 + pos4);
260 double shift = m_lorentzAngleTool->getLorentzShift(idHash, ctx);
261 int nrows = rowmax - rowmin + 1;
262 int ncol = colmax - colmin + 1;
263
264 // TOT interpolation for collision data
265 SG::ReadCondHandle<ITk::PixelOfflineCalibData> offlineITkCalibDataHandle(m_clusterITkErrorKey, ctx);
266
267 if (m_positionStrategy > 0 && omegaphi > -0.5 && omegaeta > -0.5) {
268 localphi = centroid.xPhi() + shift;
269 localeta = centroid.xEta();
270
271 std::pair<double,double> delta = offlineITkCalibDataHandle->getClusterErrorData()->getDelta(idHash,nrows,angle,ncol,etaloc);
272 double delta_phi = nrows != 1 ? delta.first : 0.;
273 double delta_eta = ncol != 1 ? delta.second : 0.;
274 localphi += delta_phi*(omegaphi-0.5);
275 localeta += delta_eta*(omegaeta-0.5);
276 }
277 // digital
278 else {
279 localphi = meanpos.xPhi() + shift;
280 localeta = meanpos.xEta();
281 }
282
283 const InDet::SiWidth& width = pix->width();
284
285 // Error strategies
286
287 // For very shallow tracks the cluster can easily break as
288 // the average charge per pixel is of the order of the threshold
289 // In this case, an error equal to the geometrical projection
290 // of the track path in silicon onto the module surface seems
291 // appropriate
292 if (std::abs(angle) > 1) {
293 const double thickness = element->thickness();
294 errphi = thickness * std::tan(std::abs(angle)) * TOPHAT_SIGMA;
295 erreta = width.z() > thickness * std::tan(std::abs(boweta)) ?
296 width.z() * TOPHAT_SIGMA : thickness * std::tan(std::abs(boweta)) * TOPHAT_SIGMA;
297 ATH_MSG_VERBOSE("Shallow track with tanl = " << tanl << " bowphi = " <<
298 bowphi << " angle = " << angle << " width.z = " << width.z() <<
299 " errphi = " << errphi << " erreta = " << erreta);
300 }else if (m_errorStrategy == 0) {
301 errphi = width.phiR() * TOPHAT_SIGMA;
302 erreta = width.z() * TOPHAT_SIGMA;
303 }else if (m_errorStrategy == 1) {
304 errphi = (width.phiR() / nrows) * TOPHAT_SIGMA;
305 erreta = (width.z() / ncol) * TOPHAT_SIGMA;
306 }else if (m_errorStrategy == 2) {
307 std::pair<double,double> delta_err = offlineITkCalibDataHandle->getClusterErrorData()->getDeltaError(idHash);
308 errphi = nrows != 1 ? delta_err.first : width.phiR()*TOPHAT_SIGMA;
309 erreta = ncol != 1 ? delta_err.second : width.z()*TOPHAT_SIGMA;
310 }
311
312 Amg::Vector2D locpos = Amg::Vector2D(localphi, localeta);
313 locpar = Trk::LocalParameters(locpos);
314 centroid = InDetDD::SiLocalPosition(localeta, localphi, 0.);
315 glob = element->globalPosition(centroid);
316 }
317
318 // Error matrix production
319
321
322 // corrected phi error
323 if (errphi > 0) {
324 cov(0, 0) = errphi * errphi;
325 }
326 if (erreta > 0) {
327 cov(1, 1) = erreta * erreta;
328 }
329
330 ATH_MSG_VERBOSE(" errphi = " << errphi << " erreta = " << erreta);
331
332 // create new copy of error matrix
333 if (!m_pixelErrorScalingKey.key().empty()) {
334 SG::ReadCondHandle<RIO_OnTrackErrorScaling> error_scaling( m_pixelErrorScalingKey, ctx );
336 ->getScaledCovariance(std::move(cov), *m_pixelid,
337 element->identify());
338 }
339 bool isbroad = m_errorStrategy == 0;
340 return new InDet::PixelClusterOnTrack(pix, std::move(locpar),
341 std::move(cov),
342 idHash, glob, pix->gangedPixel(), isbroad);
343}
#define M_PI
#define ATH_MSG_WARNING(x,...)
#define ATH_MSG_VERBOSE(x,...)
double angle(const GeoTrf::Vector2D &a, const GeoTrf::Vector2D &b)
const double width
IntegerProperty m_positionStrategy
toolhandle for central error scaling flag storing if errors need scaling or should be kept nominal
const PixelID * m_pixelid
Flag controlling how module distortions are taken into account:
SG::ReadCondHandleKey< ITk::PixelOfflineCalibData > m_clusterITkErrorKey
ToolHandle< ISiLorentzAngleTool > m_lorentzAngleTool
SG::ReadCondHandleKey< RIO_OnTrackErrorScaling > m_pixelErrorScalingKey
int readoutSide() const
ReadoutSide.
SiLocalPosition positionFromColumnRow(const int column, const int row) const
Given row and column index of a diode, return position of diode center ALTERNATIVE/PREFERED way is to...
virtual const SiDetectorDesign & design() const override final
access to the local description (inline):
double xPhi() const
position along phi direction:
double xEta() const
position along eta direction:
virtual const Amg::Vector3D & normal() const override final
Get reconstruction local normal axes in global frame.
virtual IdentifierHash identifyHash() const override final
identifier hash (inline)
HepGeom::Point3D< double > globalPosition(const HepGeom::Point3D< double > &localPos) const
transform a reconstruction local position into a global position (inline):
virtual Identifier identify() const override final
identifier of this detector element (inline)
const Amg::Vector3D & globalPosition() const
return global position reference
bool gangedPixel() const
return the flag of this cluster containing a gangedPixel
const InDet::SiWidth & width() const
return width class reference
virtual const InDetDD::SiDetectorElement * detectorElement() const override final
return the detector element corresponding to this PRD The pointer will be zero if the det el is not d...
double eta() const
Access method for pseudorapidity - from momentum.
const Amg::Vector3D & momentum() const
Access method for the momentum.
double pT() const
Access method for transverse momentum.
const Amg::MatrixX & localCovariance() const
return const ref to the error matrix
const std::vector< Identifier > & rdoList() const
return the List of rdo identifiers (pointers)
Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > MatrixX
Dynamic Matrix - dynamic allocation.
Eigen::Matrix< double, 2, 1 > Vector2D
Eigen::Matrix< double, 3, 1 > Vector3D
row
Appending html table to final .html summary file.
virtual void shift(size_t pos, ptrdiff_t offs) override
Shift the elements of the container.
const T_res * ErrorScalingCast(const T_src *src)
delta_phi(phi1, phi2)
Definition eFEXNTuple.py:14

◆ correctNN()

InDet::PixelClusterOnTrack * ITk::PixelClusterOnTrackTool::correctNN ( const Trk::PrepRawData & rio,
const Trk::TrackParameters & trackPar,
const EventContext & ctx ) const
protected

Definition at line 369 of file ITkPixelClusterOnTrackTool.cxx.

372 {
373
374 const InDet::PixelCluster *pixelPrepCluster = nullptr;
376 pixelPrepCluster = static_cast<const InDet::PixelCluster *>(&rio);
377 }
378
379 if (pixelPrepCluster == nullptr) {
380 ATH_MSG_WARNING("This is not a pixel cluster, return 0.");
381 return nullptr;
382 }
383
384 const InDetDD::SiDetectorElement *element = pixelPrepCluster->detectorElement();
385 if (!element) {
386 ATH_MSG_WARNING("Cannot access detector element. Aborting cluster correction...");
387 return nullptr;
388 }
389
390 IdentifierHash idHash = element->identifyHash();
391
393 Amg::Vector3D glob(pixelPrepCluster->globalPosition());
394
395 Amg::Vector2D locpos = pixelPrepCluster->localPosition();
396 Trk::LocalParameters locpar = Trk::LocalParameters(locpos);
397 Amg::MatrixX cov = pixelPrepCluster->localCovariance();
398
399 return new InDet::PixelClusterOnTrack(pixelPrepCluster, std::move(locpar),
400 std::move(cov), idHash, glob,
401 pixelPrepCluster->gangedPixel(), false);
402 }
403
404
405
406 Amg::Vector2D finalposition;
407 Amg::MatrixX finalerrormatrix;
408
409 if (m_usingTIDE_Ambi) {
410 if (!getErrorsTIDE_Ambi(pixelPrepCluster, trackPar, finalposition, finalerrormatrix, ctx)) {
411 return correctDefault(rio, trackPar, ctx);
412 }
413 }else {
414 if (!getErrorsDefaultAmbi(pixelPrepCluster, trackPar, finalposition, finalerrormatrix, ctx)) {
415 return correctDefault(rio, trackPar, ctx);
416 }
417 }
418
419 ATH_MSG_DEBUG( " Old position x: " << pixelPrepCluster->localPosition()[0]
420 << " +/- " << std::sqrt(pixelPrepCluster->localCovariance()(0, 0))
421 << " y: " << pixelPrepCluster->localPosition()[1]
422 << " +/- " << std::sqrt(pixelPrepCluster->localCovariance()(1, 1)) <<"\n"
423 << " Final position x: " << finalposition[0]
424 << " +/- " << std::sqrt(finalerrormatrix(0, 0))
425 << " y: " << finalposition[1] << " +/- "
426 <<std::sqrt(finalerrormatrix(1, 1)) );
427
428 Amg::MatrixX cov = std::move(finalerrormatrix);
429 // create new copy of error matrix
430 if (!m_pixelErrorScalingKey.key().empty()) {
431 SG::ReadCondHandle<RIO_OnTrackErrorScaling> error_scaling( m_pixelErrorScalingKey, ctx );
433 ->getScaledCovariance(std::move(cov), *m_pixelid,
434 element->identify());
435 }
436
437 InDetDD::SiLocalPosition centroid = InDetDD::SiLocalPosition(finalposition[1],
438 finalposition[0],
439 0);
440 Trk::LocalParameters locpar = Trk::LocalParameters(finalposition);
441
442 const Amg::Vector3D &glob = element->globalPosition(centroid);
443
444
445 return new InDet::PixelClusterOnTrack(pixelPrepCluster,
446 std::move(locpar),
447 std::move(cov), idHash,
448 glob,
449 pixelPrepCluster->gangedPixel(),
450 false);
451}
#define ATH_MSG_DEBUG(x,...)
BooleanProperty m_usingTIDE_Ambi
Enable different treatment of cluster errors based on NN information (do only if TIDE ambi is run).
bool getErrorsDefaultAmbi(const InDet::PixelCluster *, const Trk::TrackParameters &, Amg::Vector2D &, Amg::MatrixX &, const EventContext &) const
bool getErrorsTIDE_Ambi(const InDet::PixelCluster *, const Trk::TrackParameters &, Amg::Vector2D &, Amg::MatrixX &, const EventContext &) const
const Amg::Vector2D & localPosition() const
return the local position reference

◆ declareGaudiProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< AlgTool > >::declareGaudiProperty ( Gaudi::Property< T, V, H > & hndl,
const SG::VarHandleKeyType &  )
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158 {
160 hndl.value(),
161 hndl.documentation());
162
163 }
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)

◆ declareProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< AlgTool > >::declareProperty ( Gaudi::Property< T, V, H > & t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145 {
146 typedef typename SG::HandleClassifier<T>::type htype;
148 }
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>

◆ detStore()

const ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< AlgTool > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

◆ evtStore()

ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< AlgTool > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase & ExtraDeps)
protectedinherited

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

◆ getClusterSplittingProbability()

const Trk::ClusterSplitProbabilityContainer::ProbabilityInfo & ITk::PixelClusterOnTrackTool::getClusterSplittingProbability ( const InDet::PixelCluster * pix,
const EventContext & ctx ) const
inlineprotected

Definition at line 110 of file ITkPixelClusterOnTrackTool.h.

110 {
111 if (!pix || m_clusterSplitProbContainer.key().empty())
113
114 SG::ReadHandle<Trk::ClusterSplitProbabilityContainer> splitProbContainer(
116 if (!splitProbContainer.isValid()) {
117 ATH_MSG_FATAL("Failed to get cluster splitting probability container "
119 }
120 return splitProbContainer->splitProbability(pix);
121 }
#define ATH_MSG_FATAL(x,...)
SG::ReadHandleKey< Trk::ClusterSplitProbabilityContainer > m_clusterSplitProbContainer
static const ProbabilityInfo & getNoSplitProbability()

◆ getErrorsDefaultAmbi()

bool ITk::PixelClusterOnTrackTool::getErrorsDefaultAmbi ( const InDet::PixelCluster * pixelPrepCluster,
const Trk::TrackParameters & trackPar,
Amg::Vector2D & finalposition,
Amg::MatrixX & finalerrormatrix,
const EventContext & ctx ) const
protected

Definition at line 454 of file ITkPixelClusterOnTrackTool.cxx.

458 {
459 std::vector<Amg::Vector2D> vectorOfPositions;
460 int numberOfSubclusters = 1;
461 vectorOfPositions.push_back(pixelPrepCluster->localPosition());
462
464 SG::ReadHandle<InDet::PixelGangedClusterAmbiguities> splitClusterMap(m_splitClusterMapKey, ctx);
465 InDet::PixelGangedClusterAmbiguities::const_iterator mapBegin = splitClusterMap->begin();
466 InDet::PixelGangedClusterAmbiguities::const_iterator mapEnd = splitClusterMap->end();
467 for (InDet::PixelGangedClusterAmbiguities::const_iterator mapIter = mapBegin; mapIter != mapEnd; ++mapIter) {
468 const InDet::SiCluster *first = (*mapIter).first;
469 const InDet::SiCluster *second = (*mapIter).second;
470 if (first == pixelPrepCluster && second != pixelPrepCluster) {
471 ATH_MSG_DEBUG("Found additional split cluster in ambiguity map (+=1).");
472 numberOfSubclusters += 1;
473 const InDet::SiCluster *otherOne = second;
474 const InDet::PixelCluster *pixelAddCluster = nullptr;
476 pixelAddCluster = static_cast<const InDet::PixelCluster *>(otherOne);
477 }
478 if (pixelAddCluster == nullptr) {
479 ATH_MSG_WARNING("Pixel ambiguity map has empty pixel cluster. Please DEBUG!");
480 continue;
481 }
482 vectorOfPositions.push_back(pixelAddCluster->localPosition());
483
484 ATH_MSG_DEBUG( "Found one more pixel cluster. Position x: "
485 << pixelAddCluster->localPosition()[0] << "y: " << pixelAddCluster->localPosition()[1]);
486 }// find relevant element of map
487 }// iterate over map
488 }
489
490 // now you have numberOfSubclusters and the vectorOfPositions (Amg::Vector2D)
491
492 if (trackPar.surfaceType() != Trk::SurfaceType::Plane ||
493 trackPar.type() != Trk::AtaSurface) {
495 "Parameters are not at a plane ! Aborting cluster correction... ");
496 return false;
497 }
498
499 std::vector<Amg::Vector2D> allLocalPositions;
500 std::vector<Amg::MatrixX> allErrorMatrix;
501 allLocalPositions =
502 m_NnClusterizationFactory->estimatePositions(*pixelPrepCluster,
503 trackPar.associatedSurface(),
504 trackPar,
505 allErrorMatrix,
506 numberOfSubclusters);
507
508 if (allLocalPositions.empty()) {
509 ATH_MSG_DEBUG( " Cluster cannot be treated by NN. Giving back to default clusterization " );
510
511 return false;
512 }
513
514 if (allLocalPositions.size() != size_t(numberOfSubclusters)) {
515 ATH_MSG_WARNING( "Returned position vector size " << allLocalPositions.size() <<
516 " not according to expected number of subclusters: " << numberOfSubclusters << ". Abort cluster correction..." );
517 return false;
518 }
519
520
521 // GP: now the not so nice part of matching the new result with the old one...
522 // Takes the error into account to improve the matching
523
524 if (numberOfSubclusters == 1) {
525 finalposition = allLocalPositions[0];
526 finalerrormatrix = allErrorMatrix[0];
527 }
528
529 else if (numberOfSubclusters == 2) {
530 double distancesq1 =
531 square(vectorOfPositions[0][0] - allLocalPositions[0][0]) / allErrorMatrix[0](0, 0) +
532 square(vectorOfPositions[1][0] - allLocalPositions[1][0]) / allErrorMatrix[1](0, 0) +
533 square(vectorOfPositions[0][1] - allLocalPositions[0][1]) / allErrorMatrix[0](1, 1) +
534 square(vectorOfPositions[1][1] - allLocalPositions[1][1]) / allErrorMatrix[1](1, 1);
535
536 double distancesq2 =
537 square(vectorOfPositions[1][0] - allLocalPositions[0][0]) / allErrorMatrix[0](0, 0) +
538 square(vectorOfPositions[0][0] - allLocalPositions[1][0]) / allErrorMatrix[1](0, 0) +
539 square(vectorOfPositions[1][1] - allLocalPositions[0][1]) / allErrorMatrix[0](1, 1) +
540 square(vectorOfPositions[0][1] - allLocalPositions[1][1]) / allErrorMatrix[1](1, 1);
541
543 " Old pix (1) x: " << vectorOfPositions[0][0] << " y: " << vectorOfPositions[0][1] << "\n"
544 << " Old pix (2) x: " << vectorOfPositions[1][0] << " y: " << vectorOfPositions[1][1] << "\n"
545 << " Pix (1) x: " << allLocalPositions[0][0] << " +/- " << std::sqrt(allErrorMatrix[0](0, 0))
546 << " y: " << allLocalPositions[0][1] << " +/- " << std::sqrt(allErrorMatrix[0](1, 1)) <<"\n"
547 << " Pix (2) x: " << allLocalPositions[1][0] << " +/- " << std::sqrt(allErrorMatrix[1](0, 0))
548 << " y: " << allLocalPositions[1][1] << " +/- " << std::sqrt(allErrorMatrix[1](1, 1)) << "\n"
549 << " Old (1) new (1) dist: " << std::sqrt(distancesq1) << " Old (1) new (2) " << std::sqrt(distancesq2) );
550
551
552 if (distancesq1 < distancesq2) {
553 finalposition = allLocalPositions[0];
554 finalerrormatrix = allErrorMatrix[0];
555 }else {
556 finalposition = allLocalPositions[1];
557 finalerrormatrix = allErrorMatrix[1];
558 }
559 }
560
561
562 else if (numberOfSubclusters == 3) {
563 double distances[6];
564
565 distances[0] = distance(vectorOfPositions, allLocalPositions, allErrorMatrix, 0, 1, 2);
566 distances[1] = distance(vectorOfPositions, allLocalPositions, allErrorMatrix, 0, 2, 1);
567 distances[2] = distance(vectorOfPositions, allLocalPositions, allErrorMatrix, 1, 0, 2);
568 distances[3] = distance(vectorOfPositions, allLocalPositions, allErrorMatrix, 1, 2, 0);
569 distances[4] = distance(vectorOfPositions, allLocalPositions, allErrorMatrix, 2, 0, 1);
570 distances[5] = distance(vectorOfPositions, allLocalPositions, allErrorMatrix, 2, 1, 0);
571
572 int smallestDistanceIndex = -10;
573 double minDistance = 1e10;
574
575 for (int i = 0; i < 6; i++) {
576 ATH_MSG_VERBOSE(" distance n.: " << i << " distance is: " << distances[i]);
577
578 if (distances[i] < minDistance) {
579 minDistance = distances[i];
580 smallestDistanceIndex = i;
581 }
582 }
583
584 ATH_MSG_DEBUG(" The minimum distance is : " << minDistance << " for index: " << smallestDistanceIndex);
585
586 if (smallestDistanceIndex == 0 || smallestDistanceIndex == 1) {
587 finalposition = allLocalPositions[0];
588 finalerrormatrix = allErrorMatrix[0];
589 }
590 if (smallestDistanceIndex == 2 || smallestDistanceIndex == 4) {
591 finalposition = allLocalPositions[1];
592 finalerrormatrix = allErrorMatrix[1];
593 }
594 if (smallestDistanceIndex == 3 || smallestDistanceIndex == 5) {
595 finalposition = allLocalPositions[2];
596 finalerrormatrix = allErrorMatrix[2];
597 }
598 }
599 return true;
600}
SG::ReadHandleKey< InDet::PixelGangedClusterAmbiguities > m_splitClusterMapKey
ToolHandle< InDet::NnClusterizationFactory > m_NnClusterizationFactory
NN clusterizationi factory for NN based positions and errors.
virtual const Surface & associatedSurface() const =0
Access to the Surface associated to the Parameters.
virtual constexpr SurfaceType surfaceType() const =0
Returns the Surface Type enum for the surface used to define the derived class.
virtual constexpr ParametersType type() const =0
Return the ParametersType enum.
float distance(const Amg::Vector3D &p1, const Amg::Vector3D &p2)
calculates the distance between two point in 3D space
bool first
Definition DeMoScan.py:534

◆ getErrorsTIDE_Ambi()

bool ITk::PixelClusterOnTrackTool::getErrorsTIDE_Ambi ( const InDet::PixelCluster * pixelPrepCluster,
const Trk::TrackParameters & trackPar,
Amg::Vector2D & finalposition,
Amg::MatrixX & finalerrormatrix,
const EventContext & ctx ) const
protected

Definition at line 603 of file ITkPixelClusterOnTrackTool.cxx.

607 {
608 const Trk::ClusterSplitProbabilityContainer::ProbabilityInfo &splitProb = getClusterSplittingProbability(pixelPrepCluster, ctx);
609 std::vector<Amg::Vector2D> vectorOfPositions;
610 int numberOfSubclusters = 1;
612 SG::ReadHandle<InDet::PixelGangedClusterAmbiguities> splitClusterMap(m_splitClusterMapKey, ctx);
613 numberOfSubclusters = 1 + splitClusterMap->count(pixelPrepCluster);
614
615 if (splitClusterMap->count(pixelPrepCluster) == 0 && splitProb.isSplit()) {
616 numberOfSubclusters = 2;
617 }
618 if (splitClusterMap->count(pixelPrepCluster) != 0 && !splitProb.isSplit()) {
619 numberOfSubclusters = 1;
620 }
621 }
622
623 // now you have numberOfSubclusters and the vectorOfPositions (Amg::Vector2D)
624 if (trackPar.surfaceType() != Trk::SurfaceType::Plane ||
625 trackPar.type() != Trk::AtaSurface) {
626 ATH_MSG_WARNING("Parameters are not at a plane surface ! Aborting cluster "
627 "correction... ");
628 return false;
629 }
630
631 std::vector<Amg::Vector2D> allLocalPositions;
632 std::vector<Amg::MatrixX> allErrorMatrix;
633 allLocalPositions = m_NnClusterizationFactory->estimatePositions(
634 *pixelPrepCluster,
635 trackPar.associatedSurface(),
636 trackPar,
637 allErrorMatrix,
638 numberOfSubclusters);
639
640 if (allLocalPositions.empty()) {
642 " Cluster cannot be treated by NN. Giving back to default clusterization, too big: " <<
643 splitProb.isTooBigToBeSplit());
644 return false;
645 }
646
647 if (allLocalPositions.size() != size_t(numberOfSubclusters)) {
649 "Returned position vector size " << allLocalPositions.size() << " not according to expected number of subclusters: " << numberOfSubclusters <<
650 ". Abort cluster correction...");
651 return false;
652 }
653
654 // AKM: now the not so nice part find the best match position option
655 // Takes the error into account to scale the importance of the measurement
656
657 if (numberOfSubclusters == 1) {
658 finalposition = allLocalPositions[0];
659 finalerrormatrix = allErrorMatrix[0];
660 return true;
661 }
662
663 // Get the track parameters local position
664 const Amg::Vector2D localpos = trackPar.localPosition();
665 // Use the track parameters cov to weight distcances
666 Amg::Vector2D localerr(0.01, 0.05);
667 if (trackPar.covariance()) {
668 localerr = Amg::Vector2D(std::sqrt((*trackPar.covariance())(0, 0)), std::sqrt((*trackPar.covariance())(1, 1)));
669 }
670
671 double minDistance(1e300);
672 int index(0);
673
674 for (unsigned int i(0); i < allLocalPositions.size(); ++i) {
675 double distance =
676 square(localpos[0] - allLocalPositions[i][0]) / localerr[0]
677 + square(localpos[1] - allLocalPositions[i][1]) / localerr[1];
678
679 if (distance < minDistance) {
680 index = i;
681 minDistance = distance;
682 }
683 }
684
685 finalposition = allLocalPositions[index];
686 finalerrormatrix = allErrorMatrix[index];
687 return true;
688}
Amg::Vector2D localPosition() const
Access method for the local coordinates, local parameter definitions differ for each surface type.
str index
Definition DeMoScan.py:362

◆ initialize()

StatusCode ITk::PixelClusterOnTrackTool::initialize ( )
overridevirtual

AlgTool initialisation.

Definition at line 72 of file ITkPixelClusterOnTrackTool.cxx.

72 {
73
74 ATH_MSG_DEBUG(name() << " initialize()");
75
77 ATH_MSG_DEBUG("Error strategy is" << m_errorStrategy);
78
80
81 ATH_CHECK(m_clusterITkErrorKey.initialize());
82
84
85 // get the error scaling tool
87 if (!m_pixelErrorScalingKey.key().empty()) ATH_MSG_DEBUG("Detected need for scaling Pixel errors.");
88
89 ATH_CHECK (detStore()->retrieve(m_pixelid, "PixelID"));
90
93 ATH_CHECK(m_NnClusterizationFactory.retrieve( DisableTool{!m_applyNNcorrection} ));
94
95 ATH_CHECK(m_lorentzAngleTool.retrieve());
96 return StatusCode::SUCCESS;
97}
#define ATH_CHECK
Evaluate an expression and check for errors.
const ServiceHandle< StoreGateSvc > & detStore() const

◆ inputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< AlgTool > >::inputHandles ( ) const
overridevirtualinherited

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.

◆ interfaceID()

const InterfaceID & Trk::IRIO_OnTrackCreator::interfaceID ( )
inlinestaticinherited

The AlgTool InterfaceID.

Definition at line 43 of file IRIO_OnTrackCreator.h.

◆ msg()

MsgStream & AthCommonMsg< AlgTool >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24 {
25 return this->msgStream();
26 }

◆ msgLvl()

bool AthCommonMsg< AlgTool >::msgLvl ( const MSG::Level lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30 {
31 return this->msgLevel(lvl);
32 }

◆ outputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< AlgTool > >::outputHandles ( ) const
overridevirtualinherited

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.

◆ renounce()

std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > AthCommonDataStore< AthCommonMsg< AlgTool > >::renounce ( T & h)
inlineprotectedinherited

Definition at line 368 of file AthCommonDataStore.h.

369 {
370 h.renounce();
372 }
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::renounceArray ( SG::VarHandleKeyArray & handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 352 of file AthCommonDataStore.h.

352 {
354 }

◆ sysInitialize()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysInitialize ( )
overridevirtualinherited

Perform system initialization for an algorithm.

We override this to declare all the elements of handle key arrays at the end of initialization. See comments on updateVHKA.

Reimplemented in asg::AsgMetadataTool, AthCheckedComponent< AthAlgTool >, and AthCheckedComponent<::AthAlgTool >.

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< AlgTool > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< AlgTool > >::updateVHKA ( Gaudi::Details::PropertyBase & )
inlineinherited

Definition at line 298 of file AthCommonDataStore.h.

298 {
299 for (auto &a : m_vhka) {
301 for (auto k : keys) {
302 k->setOwner(this);
303 }
304 }
305 }
std::vector< SG::VarHandleKeyArray * > m_vhka

Member Data Documentation

◆ m_applyNNcorrection

bool ITk::PixelClusterOnTrackTool::m_applyNNcorrection {false}
private

Enable NN based calibration (do only if NN calibration is applied).

Definition at line 161 of file ITkPixelClusterOnTrackTool.h.

161{false};

◆ m_applyNNcorrectionProperty

BooleanProperty ITk::PixelClusterOnTrackTool::m_applyNNcorrectionProperty {this, "applyNNcorrection", false}
private

Definition at line 162 of file ITkPixelClusterOnTrackTool.h.

162{this, "applyNNcorrection", false};

◆ m_clusterITkErrorKey

SG::ReadCondHandleKey<ITk::PixelOfflineCalibData> ITk::PixelClusterOnTrackTool::m_clusterITkErrorKey {this, "ITkPixelOfflineCalibData", "ITkPixelOfflineCalibData", "Output key of ITk pixel cluster"}
private

Definition at line 131 of file ITkPixelClusterOnTrackTool.h.

131{this, "ITkPixelOfflineCalibData", "ITkPixelOfflineCalibData", "Output key of ITk pixel cluster"};

◆ m_clusterSplitProbContainer

SG::ReadHandleKey<Trk::ClusterSplitProbabilityContainer> ITk::PixelClusterOnTrackTool::m_clusterSplitProbContainer {this, "ClusterSplitProbabilityName", "",""}
private

Definition at line 176 of file ITkPixelClusterOnTrackTool.h.

177{this, "ClusterSplitProbabilityName", "",""};

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default).

Definition at line 381 of file AthCommonDataStore.h.

◆ m_doNotRecalibrateNN

BooleanProperty ITk::PixelClusterOnTrackTool::m_doNotRecalibrateNN {this, "doNotRecalibrateNN", false}
private

Definition at line 169 of file ITkPixelClusterOnTrackTool.h.

169{this, "doNotRecalibrateNN", false};

◆ m_errorStrategy

std::atomic_int ITk::PixelClusterOnTrackTool::m_errorStrategy {2}
mutableprivate

Definition at line 140 of file ITkPixelClusterOnTrackTool.h.

140{2};

◆ m_errorStrategyProperty

IntegerProperty ITk::PixelClusterOnTrackTool::m_errorStrategyProperty
private
Initial value:
{this, "ErrorStrategy", 2,
"Which calibration of cluster position errors"}

Definition at line 141 of file ITkPixelClusterOnTrackTool.h.

141 {this, "ErrorStrategy", 2,
142 "Which calibration of cluster position errors"};

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< AlgTool > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default).

Definition at line 378 of file AthCommonDataStore.h.

◆ m_lorentzAngleTool

ToolHandle<ISiLorentzAngleTool> ITk::PixelClusterOnTrackTool::m_lorentzAngleTool {this, "LorentzAngleTool", "SiLorentzAngleTool", "Tool to retreive Lorentz angle"}
private

Definition at line 129 of file ITkPixelClusterOnTrackTool.h.

129{this, "LorentzAngleTool", "SiLorentzAngleTool", "Tool to retreive Lorentz angle"};

◆ m_NnClusterizationFactory

ToolHandle<InDet::NnClusterizationFactory> ITk::PixelClusterOnTrackTool::m_NnClusterizationFactory
private
Initial value:
{this, "NnClusterizationFactory",
"InDet::NnClusterizationFactory/NnClusterizationFactory"}

NN clusterizationi factory for NN based positions and errors.

Definition at line 165 of file ITkPixelClusterOnTrackTool.h.

166 {this, "NnClusterizationFactory",
167 "InDet::NnClusterizationFactory/NnClusterizationFactory"};

◆ m_noNNandBroadErrors

BooleanProperty ITk::PixelClusterOnTrackTool::m_noNNandBroadErrors {this, "noNNandBroadErrors", false}
private

Definition at line 170 of file ITkPixelClusterOnTrackTool.h.

170{this, "noNNandBroadErrors", false};

◆ m_pixelErrorScalingKey

SG::ReadCondHandleKey<RIO_OnTrackErrorScaling> ITk::PixelClusterOnTrackTool::m_pixelErrorScalingKey {this,"PixelErrorScalingKey", "/Indet/TrkErrorScalingPixel", "Key for pixel error scaling conditions data."}
private

Definition at line 133 of file ITkPixelClusterOnTrackTool.h.

134{this,"PixelErrorScalingKey", "/Indet/TrkErrorScalingPixel", "Key for pixel error scaling conditions data."};

◆ m_pixelid

const PixelID* ITk::PixelClusterOnTrackTool::m_pixelid = nullptr
private

Flag controlling how module distortions are taken into account:

case 0 -----> No distorsions implemented;

case 1 -----> Set curvature (in 1/meter) and twist (in radiant) equal for all modules;

case 2 -----> Read curvatures and twists from textfile containing Survey data;

case 3 -----> Set curvature and twist from Gaussian random generator with mean and RMS coming from Survey data;

case 4 -----> Read curvatures and twists from database (not ready yet); identifier-helper

Definition at line 158 of file ITkPixelClusterOnTrackTool.h.

◆ m_positionStrategy

IntegerProperty ITk::PixelClusterOnTrackTool::m_positionStrategy
private
Initial value:
{this, "PositionStrategy", 1,
"Which calibration of cluster positions"}

toolhandle for central error scaling flag storing if errors need scaling or should be kept nominal

Definition at line 138 of file ITkPixelClusterOnTrackTool.h.

138 {this, "PositionStrategy", 1,
139 "Which calibration of cluster positions"};

◆ m_splitClusterMapKey

SG::ReadHandleKey<InDet::PixelGangedClusterAmbiguities> ITk::PixelClusterOnTrackTool::m_splitClusterMapKey {this, "SplitClusterAmbiguityMap", ""}
private

Definition at line 173 of file ITkPixelClusterOnTrackTool.h.

174{this, "SplitClusterAmbiguityMap", ""};

◆ m_usingTIDE_Ambi

BooleanProperty ITk::PixelClusterOnTrackTool::m_usingTIDE_Ambi {this, "RunningTIDE_Ambi", false}
private

Enable different treatment of cluster errors based on NN information (do only if TIDE ambi is run).

Definition at line 172 of file ITkPixelClusterOnTrackTool.h.

172{this, "RunningTIDE_Ambi", false};

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< AlgTool > >::m_varHandleArraysDeclared
privateinherited

Definition at line 387 of file AthCommonDataStore.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< AlgTool > >::m_vhka
privateinherited

Definition at line 386 of file AthCommonDataStore.h.


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