User will overwrite this function. Histogram booking is no longer done in C++. This function is called in execute once the filters are all passed.
54 {
55 using namespace Monitored;
56
58
59
60
61
62
63
67 0.
68 };
70 0.
71 };
73 0.
74 };
75 int phiMod(-99);
77 bool copyFEval(false);
78 AccumulatorArrays clusPerEventArray = {{{0}}, {{0}}, {{0}}, {{0}}, {{0}}, {{0}}};
79 VecAccumulator2DMap Map_Of_Modules_Status(*this, "MapOfModulesStatus", true);
80
81 VecAccumulator2DMap Map_Of_FEs_Status(*this, "MapOfFEsStatus");
82
86 Identifier waferID = *idIt;
87 IdentifierHash id_hash =
m_pixelid->wafer_hash(waferID);
88
90 if (pixlayer == 99) continue;
92
94 {
96 else {
102 }
103 }
104 else {
110 switch (pixlayer) {
112 clusPerEventArray.DA[phiMod][
etaMod] = -1;
113 break;
114
116 clusPerEventArray.DC[phiMod][
etaMod] = -1;
117 break;
118
120 clusPerEventArray.B0[phiMod][
etaMod] = -1;
121 break;
122
124 clusPerEventArray.B1[phiMod][
etaMod] = -1;
125 break;
126
128 clusPerEventArray.B2[phiMod][
etaMod] = -1;
129 break;
130
132 clusPerEventArray.IBL[phiMod][
etaMod] = -1;
133 if (copyFEval) clusPerEventArray.IBL[phiMod][++
etaMod] = -1;
134 break;
135 }
136 }
137
138 Map_Of_Modules_Status.add(pixlayer, waferID, index);
139
140
141
144 for (int iFE = 0; iFE < nFE; iFE++) {
145 Identifier pixelID =
m_pixelReadout->getPixelIdfromHash(id_hash, iFE, 1, 1);
146 if (not pixelID.
is_valid())
continue;
149 id_hash,
150 iFE);
151 if (is_active)
152 {
153 if (is_good)
index = 0;
155 }
157 Map_Of_FEs_Status.add(pixlayer, waferID, iFE, index);
158 }
159 }
160 }
161
165
166 for (
unsigned int ii = 0; ii <
PixLayers::COUNT; ii++) nBadAndDisabledMod[ii] = nBadMod[ii]+nDisabledMod[ii];
168
170
171
172
173
174
175
176
177
178
179
180
182
183 VecAccumulator2DMap TSOS_Outlier(*this, "TSOSOutlier");
184 VecAccumulator2DMap TSOS_Outlier_FE(*this, "TSOSOutlierFE");
185 VecAccumulator2DMap TSOS_Hole(*this, "TSOSHole");
186 VecAccumulator2DMap TSOS_Hole_FE(*this, "TSOSHoleFE");
187 VecAccumulator2DMap TSOS_Measurement(*this, "TSOSMeasurement");
188 VecAccumulator2DMap TSOS_Measurement_FE(*this, "TSOSMeasurementFE");
189 VecAccumulator2DMap HolesRatio(*this, "HolesRatio");
190 VecAccumulator2DMap MissIBLhit(*this, "MissIBLhit");
191 VecAccumulator2DMap MissIBLpresentBLhit(*this, "MissIBLpresentBLhit");
192 VecAccumulator2DMap MissHitsRatio(*this, "MissHitsRatio");
194
196
197 if (!(tracks.isValid())) {
200 fill(trackGroup, dataread_err);
201 return StatusCode::RECOVERABLE;
202 } else {
203 ATH_MSG_DEBUG(
"PixelMonitoring: Track container " << tracks.name() <<
" is found.");
204 }
205
206 int ntracksPerEvent = 0;
207 bool havePixelHits(false);
208 std::vector<std::pair<Identifier, double> > ClusterIDs;
209
210 auto lbval = Monitored::Scalar<int>(
"pixclusmontool_lb",
lb);
211
212 for (auto track: *tracks) {
213 if (track ==
nullptr ||
track->perigeeParameters() ==
nullptr ||
track->trackSummary() ==
nullptr ||
215 ATH_MSG_DEBUG(
"PixelMonitoring: Track either invalid or it does not contain pixel hits, continuing...");
216 continue;
217 }
218
221 bool passJOTrkTightCut =
static_cast<bool>(
m_trackSelTool->accept(*track));
222 bool pass1hole1GeVptTightCut = (passJOTrkTightCut && (measPerigee->
pT() / 1000.0 > 1.0));
223 bool pass1hole5GeVptTightCut = (passJOTrkTightCut && (measPerigee->
pT() / 1000.0 > 5.0));
224
225 if(measPerigee->
pT()<1000.)
continue;
226
227 const Trk::Track* trackWithHoles(track);
228 std::unique_ptr<const Trk::Track> trackWithHolesUnique = nullptr;
231 trackWithHoles = trackWithHolesUnique.get();
232 }
233 const Trk::TrackStates* trackStates = trackWithHoles->trackStateOnSurfaces();
234 for (auto trackStateOnSurface: *trackStates) {
235 const Trk::MeasurementBase* mesBase = trackStateOnSurface->measurementOnTrack();
236
237 const Trk::RIO_OnTrack* RIOOnTrack = nullptr;
239 RIOOnTrack = static_cast<const Trk::RIO_OnTrack*>(mesBase);
240 }
241
242 if (mesBase && !RIOOnTrack) continue;
243
244
245
247 Identifier surfaceID;
250 } else {
251 if (trkParameters) {
253 } else {
254 ATH_MSG_INFO(
"PixelMonitoring: pointer of TSOS to track parameters or associated surface is null");
255 continue;
256 }
257 }
258 if (!
m_atlasid->is_pixel(surfaceID))
continue;
260 if (pixlayer == 99) continue;
261
262 float nOutlier = 0.;
263 float nHole = 0.;
264 auto effval = Monitored::Scalar<float>("HitEffAll_val", 0.);
265 auto efflb = Monitored::Scalar<float>(
"HitEffAll_lb",
lb);
266 const InDetDD::SiDetectorElement *sde =
dynamic_cast<const InDetDD::SiDetectorElement *
>(trkParameters->
associatedSurface().associatedDetectorElement());
267 const InDetDD::SiLocalPosition trkLocalPos = trkParameters->
localPosition();
268 Identifier locPosID;
269
271 {
272 nOutlier = 1.0;
273 const InDet::SiClusterOnTrack *siclus = dynamic_cast<const InDet::SiClusterOnTrack *>(mesBase);
274 if ( mesBase && siclus) {
277 ATH_MSG_INFO(
"Pixel Monitoring: got invalid track local position on surface for an outlier.");
278 continue;
279 }
280 TSOS_Outlier.add(pixlayer, locPosID, 1.0);
282 TSOS_Outlier_FE.add(pixlayer, locPosID,
m_pixelReadout->getFE(locPosID, locPosID), 1.0);
283 }
284 }
285 }
287 {
288 nHole = 1.0;
291 ATH_MSG_INFO(
"Pixel Monitoring: got invalid track local position on surface for a hole.");
292 continue;
293 }
294 TSOS_Hole.add(pixlayer, locPosID, 1.0);
296 TSOS_Hole_FE.add(pixlayer, locPosID,
m_pixelReadout->getFE(locPosID, locPosID), 1.0);
297 }
298 }
300 {
301 if (not mesBase) continue;
302 const InDetDD::SiDetectorElement*
side =
303 dynamic_cast<const InDetDD::SiDetectorElement*>(mesBase->associatedSurface().associatedDetectorElement());
304 const InDet::SiClusterOnTrack* clus = dynamic_cast<const InDet::SiClusterOnTrack*>(mesBase);
305 if (!side || !clus) continue;
306 const InDet::SiCluster* RawDataClus =
dynamic_cast<const InDet::SiCluster*
>(clus->
prepRawData());
308
310
313 ATH_MSG_INFO(
"Pixel Monitoring: got invalid cluster on track ID.");
314 continue;
315 }
316 TSOS_Measurement.add(pixlayer, locPosID, 1.0);
318 TSOS_Measurement_FE.add(pixlayer, locPosID,
m_pixelReadout->getFE(locPosID, locPosID), 1.0);
319 }
320 effval = 1.;
321
323 if (trackAtPlane) {
325
326
327 const AmgSymMatrix(5) trackErrMat = (*trackAtPlane->covariance());
328 const Amg::MatrixX clusErrMat = clus->localCovariance();
329
330 double error_sum =
331 sqrt(
pow(Amg::error(trackErrMat, Trk::locX), 2) +
pow(Amg::error(clusErrMat, Trk::locX), 2));
332 auto resPhi = Monitored::Scalar<float>("res_phi", clus->localParameters()[Trk::locX] - localpos[0]);
333 fill(trackGroup, resPhi);
334 if (error_sum != 0) {
335 auto pullPhi = Monitored::Scalar<float>("pull_phi", resPhi / error_sum);
336 fill(trackGroup, pullPhi);
337 }
338
341 fill(trackGroup, resEta);
342 if (error_sum != 0) {
343 auto pullEta = Monitored::Scalar<float>("pull_eta", resEta / error_sum);
344 fill(trackGroup, pullEta);
345 }
346
347
348
351 double trknormcomp = mytrack.dot(mynormal);
352
353 double mytrack_mag = mytrack.mag();
354 double cosalpha = 0.;
355 if (mytrack_mag != 0) cosalpha = std::abs(trknormcomp / mytrack_mag);
356 ClusterIDs.emplace_back(clus->
identify(), cosalpha);
357 }
358 }
359 else continue;
360
361 if (pass1hole5GeVptTightCut) {
366 }
367
368 if (pass1hole1GeVptTightCut && locPosID.
is_valid()) {
369 HolesRatio.add(pixlayer, locPosID, nHole);
370 MissHitsRatio.add(pixlayer, locPosID, nOutlier + nHole);
371 }
372 }
373
374 auto etanoibl = Monitored::Scalar<float>(
"eta_noibl", measPerigee->
momentum().eta());
375 auto phinoibl = Monitored::Scalar<float>(
"phi_noibl", measPerigee->
momentum().phi());
376 auto missibl = Monitored::Scalar<float>("missIBLhit", 0.);
378 int nIBLHits=0, nBLHits=0;
379 const Trk::TrackSummary *trksumm =
track->trackSummary();
380 if (trksumm){
383 }
384 if(expectIBLHit && nIBLHits==0 && pass1hole1GeVptTightCut){
385 std::vector<InDet::TrackStateOnPixelLayerInfo> trackStateIBLlayer;
386 if(
m_testPixelLayerTool->getTrackStateOnInnermostPixelLayerInfo(measPerigee, trackStateIBLlayer)){
387 Identifier posid_prev;
388 for (auto &tstate : trackStateIBLlayer){
389 Identifier posid = tstate.pixelId();
390 if(posid==posid_prev)continue;
393 missibl=1.;
394 fill(trackGroup,etanoibl,phinoibl,missibl);
395 posid_prev=posid;
396 }
397 }
398 }
else if(expectIBLHit && pass1hole1GeVptTightCut)
fill(trackGroup,etanoibl,phinoibl,missibl);
399
400 ntracksPerEvent++;
401 auto nph = Monitored::Scalar<int>("npixhits_per_track", nPixelHits);
402 auto nphwgt = Monitored::Scalar<float>("npixhits_per_track_wgt", 1.0);
403 fill(trackGroup, lbval, nph, nphwgt);
404
405 int trkfitndf =
track->fitQuality()->numberDoF();
406 double trkfitchi2 =
track->fitQuality()->chiSquared();
407 if (trkfitndf != 0) {
408 auto trkChiN = Monitored::Scalar<float>("fit_chi2byndf", trkfitchi2 / trkfitndf);
409 fill(trackGroup, trkChiN);
410 }
411 havePixelHits = havePixelHits || (
nPixelHits > 0);
412 }
413
414 if (!havePixelHits) {
416 fill(trackGroup, dataread_err);
417 }
418
430 }
431
432 sort(ClusterIDs.begin(), ClusterIDs.end(),
433 [](const std::pair<Identifier, double>& left, const std::pair<Identifier, double>& right) {
434 return left.first < right.first;
435 });
436
437 auto nTrks = Monitored::Scalar<int>("ntrks_per_event", ntracksPerEvent);
438 fill(trackGroup, lbval, nTrks);
439
440
441
442
443
444
445
446
447
449
450
451 auto clToTcosAlphaLB = Monitored::Scalar<float>(
"ClusterToTxCosAlphaOnTrack_lb",
lb);
452
453 VecAccumulator2DMap Cluster_LVL1A_Mod(*this, "ClusterLVL1AMod");
454 VecAccumulator2DMap Cluster_LVL1A_SizeCut(*this, "ClusterLVL1ASizeCut");
455 VecAccumulator2DMap Cluster_LVL1A_Mod_OnTrack(*this, "ClusterLVL1AModOnTrack");
456 VecAccumulator2DMap Cluster_LVL1A_SizeCut_OnTrack(*this, "ClusterLVL1ASizeCutOnTrack");
457 VecAccumulator2DMap ClusterMap_Mon(*this, "ClusterMapMon");
458 VecAccumulator2DMap ClusterMap_Mon_OnTrack(*this, "ClusterMapMonOnTrack");
459 VecAccumulator2DMap Cluster_Size_Map_OnTrack(*this, "ClusterSizeMapOnTrack");
460 VecAccumulator2DMap Cluster_Occupancy(*this, "ClusterOccupancy");
461 VecAccumulator2DMap Cluster_Occupancy_OnTrack(*this, "ClusterOccupancyOnTrack");
462 VecAccumulator2DMap Clus_Occ_SizeCut(*this, "ClusOccSizeCut");
463 VecAccumulator2DMap Clus_Occ_SizeCut_OnTrack(*this, "ClusOccSizeCutOnTrack");
464 VecAccumulator2DMap Cluster_FE_Occupancy(*this, "ClusterFEOccupancy");
465 VecAccumulator2DMap Cluster_FE_Occupancy_OnTrack(*this, "ClusterFEOccupancyOnTrack");
466
468 auto clusterGroup_OnTrack =
getGroup(
"Cluster_OnTrack");
469
471
472 if (!(pixel_clcontainer.isValid())) {
475 fill(clusterGroup, dataread_err);
476 return StatusCode::RECOVERABLE;
477 } else {
478 ATH_MSG_DEBUG(
"Pixel Monitoring: Pixel Cluster container " << pixel_clcontainer.name() <<
" is found.");
479 }
480
481 int nclusters = 0;
482 int nclusters_ontrack = 0;
484 0.
485 };
487 0.
488 };
489
490 Identifier clusID;
491 for (auto colNext: *pixel_clcontainer) {
493 if (!ClusterCollection) {
494 ATH_MSG_DEBUG(
"Pixel Monitoring: Pixel Cluster container is empty.");
496 fill(clusterGroup, dataread_err);
497 continue;
498 }
499
500 for (auto p_clus: *ClusterCollection) {
501 clusID = p_clus->identify();
503 if (pixlayer == 99) continue;
505
506 const InDet::PixelCluster& cluster = *p_clus;
507 nclusters++;
508
509
510
511 auto clLVL1A = Monitored::Scalar<float>(
"Cluster_LVL1A_lvl1a", cluster.
LVL1A());
512 fill(clusterGroup, clLVL1A);
513 Cluster_LVL1A_Mod.add(pixlayer, clusID, cluster.
LVL1A() + 0.00001);
514 if (cluster.
rdoList().size() > 1) Cluster_LVL1A_SizeCut.add(pixlayer, clusID, cluster.
LVL1A() + 0.00001);
518 nclusters_mod[iblsublayer]++;
519 } else {
521 nclusters_mod[pixlayer]++;
522 }
523
524
525
526
527 if (
m_doOnline) ClusterMap_Mon.add(pixlayer, clusID);
528
529
530
531
532 Cluster_Occupancy.add(pixlayer, clusID);
534 Cluster_FE_Occupancy.add(pixlayer, clusID,
m_pixelReadout->getFE(clusID, clusID), 1.0);
535 }
536 if (cluster.
rdoList().size() > 1) Clus_Occ_SizeCut.add(pixlayer, clusID);
537
538
539 double cosalpha(0.);
541 nclusters_ontrack++;
542 switch (pixlayer) {
544 clusPerEventArray.DA[phiMod][
etaMod]++;
545 break;
546
548 clusPerEventArray.DC[phiMod][
etaMod]++;
549 break;
550
552 clusPerEventArray.B0[phiMod][
etaMod]++;
553 break;
554
556 clusPerEventArray.B1[phiMod][
etaMod]++;
557 break;
558
560 clusPerEventArray.B2[phiMod][
etaMod]++;
561 break;
562
564 clusPerEventArray.IBL[phiMod][
etaMod]++;
565 break;
566 }
567
568
569 clLVL1A = cluster.
LVL1A();
570 fill(clusterGroup_OnTrack, clLVL1A);
571 Cluster_LVL1A_Mod_OnTrack.add(pixlayer, clusID, cluster.
LVL1A() + 0.00001);
572 if (cluster.
rdoList().size() > 1) Cluster_LVL1A_SizeCut_OnTrack.add(pixlayer, clusID,
573 cluster.
LVL1A() + 0.00001);
574
575
576
577
578 auto clSize = Monitored::Scalar<float>(
"ClusterSizeOnTrack_clsize", cluster.
rdoList().size());
579 auto clSizeEtaModule = Monitored::Scalar<float>(
"ClusterSizeOnTrack_em",
m_pixelid->eta_module(clusID));
580 if (abs(
m_pixelid->barrel_ec(clusID)) != 0) clSizeEtaModule =
m_pixelid->layer_disk(clusID) + 1;
582
583 Cluster_Size_Map_OnTrack.add(pixlayer, clusID, cluster.
rdoList().size());
584
585
586
587
588 if (
m_doOnline) ClusterMap_Mon_OnTrack.add(pixlayer, clusID);
589
590
591
592
593 Cluster_Occupancy_OnTrack.add(pixlayer, clusID);
595 Cluster_FE_Occupancy_OnTrack.add(pixlayer, clusID,
m_pixelReadout->getFE(clusID, clusID), 1.0);
596 }
597 if (cluster.
rdoList().size() > 1) Clus_Occ_SizeCut_OnTrack.add(pixlayer, clusID);
598
599
600
601
603 {
605 }
607
608 auto clToTcosAlpha = Monitored::Scalar<float>(
"ClusterToTxCosAlphaOnTrack_val", cluster.
totalToT() * cosalpha);
610
612 auto clQcosAlpha = Monitored::Scalar<float>(
"ClusterQxCosAlphaOnTrack_val", cluster.
totalCharge() * cosalpha);
614 }
615 nclusters_ontrack_mod[pixlayer]++;
616
617
618 }
619 }
620 }
628 }
637 }
638
639
640 auto nCls = Monitored::Scalar<int>("ClustersPerEvent_val", nclusters);
641 fill(clusterGroup, lbval, nCls);
642 auto nClsOnTrk = Monitored::Scalar<int>("ClustersPerEventOnTrack_val", nclusters_ontrack);
643 fill(clusterGroup_OnTrack, lbval, nClsOnTrk);
645 auto vals = Monitored::Scalar<float>(
"ClustersPerEvent_val", nclusters_mod[ii]);
646 auto vals_ontrack = Monitored::Scalar<float>("ClustersPerEventOnTrack_val", nclusters_ontrack_mod[ii]);
648 }
649
650 if (nclusters > 0) {
651 auto clsFracOnTrack = Monitored::Scalar<float>("cls_frac_ontrack", (float) nclusters_ontrack / nclusters);
652 fill(clusterGroup_OnTrack, lbval, clsFracOnTrack);
653 } else {
655 fill(clusterGroup, dataread_err);
656 }
657
660
662
663 if (ntracksPerEvent > 0) {
664 for (
unsigned int ii = 0; ii <
PixLayers::COUNT; ii++) nclusters_ontrack_mod[ii] /= ntracksPerEvent;
666 }
667
668
669 ClusterIDs.clear();
670
671
672
673
674
675 return StatusCode::SUCCESS;
676}
#define AmgSymMatrix(dim)
void sort(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end)
Specialization of sort for DataVector/List.
const int clusterToTMinCut[PixLayers::COUNT]
const float inv_nmod_per_layer[PixLayers::COUNT]
constexpr int pow(int base, int exp) noexcept
const ToolHandle< GenericMonitoringTool > & getGroup(const std::string &name) const
Get a specific monitoring tool from the tool handle array.
SG::ReadHandle< xAOD::EventInfo > GetEventInfo(const EventContext &) const
Return a ReadHandle for an EventInfo object (get run/event numbers, etc.)
bool is_valid() const
Check if id is in a valid state.
Identifier identifierOfPosition(const Amg::Vector2D &localPos) const
Full identifier of the cell for a given position: assumes a raw local position (no Lorentz shift)
float totalCharge() const
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...
Trk::PrepRawDataCollection< PixelCluster > PixelClusterCollection
SG::ReadHandleKey< TrackCollection > m_tracksKey
ToolHandle< InDet::IInDetTestPixelLayerTool > m_testPixelLayerTool
tool to calculate expected hit information in innermost layers
SG::ReadHandleKey< InDet::PixelClusterContainer > m_clustersKey
void fill2DProfLayerAccum(const VecAccumulator2DMap &accumulator) const
take VecAccumulator2DMap and fill the corresponding group
SG::ReadHandleKey< InDet::SiDetectorElementStatus > m_pixelDetElStatusActiveOnly
Optional read handle to get status data to test whether a pixel detector element is active.
int getNumberOfFEs(int pixlayer, int etaMod) const
helper function to get number of FEs per module
bool isClusterOnTrack(Identifier id, std::vector< std::pair< Identifier, double > > const &ClusterIDs) const
checks if cluster is on track
void getPhiEtaMod(Identifier &id, int &phiMod, int &etaMod, bool ©FE) const
helper function to get eta phi coordinates of per-layer arrays
ServiceHandle< InDetDD::IPixelReadoutManager > m_pixelReadout
bool isGood(const InDet::SiDetectorElementStatus *element_status, const IdentifierHash &module_hash) const
void fill1DProfLumiLayers(const std::string &prof1Dname, int lb, float *weights, int nlayers=PixLayers::COUNT) const
filling 1DProf per-lumi per-layer histograms ["ECA","ECC","BLayer","Layer1","Layer2",...
int getPixLayersID(int ec, int ld) const
helper function to get layers ID
std::tuple< bool, bool > isChipGood(const IdentifierHash &module_hash, unsigned int chip_i) const
SG::ReadHandleKey< InDet::SiDetectorElementStatus > m_pixelDetElStatus
Optional read handle to get status data to test whether a pixel detector element is good.
bool isActive(const InDet::SiDetectorElementStatus *element_status, const IdentifierHash &module_hash) const
void fillFromArrays(const std::string &namePP0, AccumulatorArrays &pixarrays, const std::string &name2DMap="") const
filling 1DProfile per-pp0(ROD) histograms for ["ECA","ECC","BLayer","Layer1","Layer2",...
SG::ReadHandle< InDet::SiDetectorElementStatus > getPixelDetElStatus(const SG::ReadHandleKey< InDet::SiDetectorElementStatus > &key, const EventContext &ctx) const
const PixelID * m_pixelid
const_pointer_type cptr()
Dereference the pointer.
const LocalParameters & localParameters() const
Interface method to get the LocalParameters.
virtual const Surface & associatedSurface() const =0
Interface method to get the associated Surface.
virtual bool type(MeasurementBaseType::Type type) const =0
Interface method checking the type.
const Amg::Vector3D & momentum() const
Access method for the momentum.
virtual const Surface & associatedSurface() const override=0
Access to the Surface associated to the Parameters.
double pT() const
Access method for transverse momentum.
Amg::Vector2D localPosition() const
Access method for the local coordinates, local parameter definitions differ for each surface type.
const std::vector< Identifier > & rdoList() const
return the List of rdo identifiers (pointers)
virtual const Trk::PrepRawData * prepRawData() const =0
returns the PrepRawData (also known as RIO) object to which this RIO_OnTrack is associated.
Identifier identify() const
return the identifier -extends MeasurementBase
const TrkDetElementBase * associatedDetectorElement() const
return associated Detector Element
Identifier associatedDetectorElementIdentifier() const
return Identifier of the associated Detector Element
@ Measurement
This is a measurement, and will at least contain a Trk::MeasurementBase.
@ Outlier
This TSoS contains an outlier, that is, it contains a MeasurementBase/RIO_OnTrack which was not used ...
@ Hole
A hole on the track - this is defined in the following way.
int get(const SummaryType &type) const
returns the summary information for the passed SummaryType.
virtual Identifier identify() const =0
Identifier.
void fill(const ToolHandle< GenericMonitoringTool > &groupHandle, std::vector< std::reference_wrapper< Monitored::IMonitoredVariable > > &&variables) const
Fills a vector of variables to a group by reference.
double error(const Amg::MatrixX &mat, int index)
return diagonal error of the matrix caller should ensure the matrix is symmetric and the index is in ...
Eigen::Matrix< double, 2, 1 > Vector2D
Eigen::Matrix< double, 3, 1 > Vector3D
float nPixelHits(const U &p)
dict clusterGroup
begin cluster timing
SG::ReadCondHandle< T > makeHandle(const SG::ReadCondHandleKey< T > &key, const EventContext &ctx=Gaudi::Hive::currentContext())
DataVector< const Trk::TrackStateOnSurface > TrackStates
ParametersT< TrackParametersDim, Charged, PerigeeSurface > Perigee
ParametersBase< TrackParametersDim, Charged > TrackParameters
ParametersT< TrackParametersDim, Charged, PlaneSurface > AtaPlane
@ numberOfPixelHits
number of pixel layers on track with absence of hits
@ numberOfNextToInnermostPixelLayerHits
these are the pixel hits, including the b-layer
@ numberOfInnermostPixelLayerHits
these are the hits in the 1st pixel layer
@ numberOfPixelHoles
number of pixels which have a ganged ambiguity.