11#include "Identifier/Identifier.h"
19#include "GaudiKernel/StatusCode.h"
20#include "GaudiKernel/ThreadLocalContext.h"
30 ONE_D_LOCATION=1, TWO_D_LOCATION=3, TRACK_SEGMENT=11, OLD_PARAMETERS_VECTOR=31
35 etaRegion(
const float eta) {
37 static const float etaBoundary(1.0);
39 if (
eta < -etaBoundary) {
42 if (
eta > etaBoundary) {
76 std::bitset<N_TRIGGER_TYPES> firedTriggers{0};
83 return StatusCode::SUCCESS;
87 ATH_MSG_DEBUG(
"Begin loop over " << tracks->size() <<
" tracks");
96 int scthits_on_trk{0};
97 std::unique_ptr<const Trk::TrackSummary> trkSum =
m_trackSummaryTool->summary (ctx, *track);
98 if (trkSum==
nullptr) {
112 if (track->fitQuality()->numberDoF() > 0.) {
113 auto trk_chi2Acc{
Monitored::Scalar<float>(
"trk_chi2", track->fitQuality()->chiSquared() / track->fitQuality()->numberDoF())};
114 fill(
"SCTTracksMonitor", trk_chi2Acc);
116 if (track->perigeeParameters() ==
nullptr) {
119 double trackPerigeeTheta{track->perigeeParameters()->parameters()[
Trk::theta]};
120 double trackPerigeeEta{-log(tan(0.5 * trackPerigeeTheta))};
123 fill(
"SCTTracksMonitor", tracksPerRegionAcc);
126 fill(
"SCTTracksMonitor", trk_etaAcc);
128 if (track->perigeeParameters()->parameters()[
Trk::qOverP] != 0.) {
130 fill(
"SCTTracksMonitor", trk_ptAcc);
133 fill(
"SCTTracksMonitor", trk_d0Acc);
135 fill(
"SCTTracksMonitor", trk_z0Acc);
137 fill(
"SCTTracksMonitor", trk_phiAcc);
143 fill(
"SCTTracksMonitor", trackTriggerAcc);
152 if (not trackStates) {
153 ATH_MSG_ERROR(
"for current track, TrackStateOnSurfaces == Null, no data will be written for this track");
161 if (RawDataClus==
nullptr) {
167 const unsigned int subsystemIndex{
bec2Index(bec)};
168 const bool doThisDetector{doThisSubsystem[subsystemIndex]};
169 hasHits[subsystemIndex] =
true;
170 std::unique_ptr<const Trk::TrackParameters> trkParameters(
nullptr);
179 trkParameters =
m_updator->removeFromState(*trkParam,
185 trkParam = trkParameters.get();
193 const AmgVector(5) LocalTrackParameters{trkParam->parameters()};
199 std::optional<Trk::ResidualPull> residualPull{
204 if (not residualPull) {
206 return StatusCode::SUCCESS;
208 double local_residual{residualPull->residual()[
Trk::locX]};
209 double local_pull{residualPull->pull()[
Trk::locX]};
210 if (doThisDetector) {
212 fill(
"SCTTracksMonitor", residualAcc);
215 fill(
"SCTTracksMonitor", pullAcc);
221 ATH_MSG_WARNING(
"No measured local parameters, pull won't be calculated");
229 fill(
"SCTTracksMonitor", local_hitsAcc);
232 for (
unsigned int region{0}; region <
N_REGIONS; ++region) {
235 fill(
"SCTTracksMonitor", regionAcc,hitsAcc);
240 fill(
"SCTTracksMonitor", goodTrks_NAcc);
241 return StatusCode::SUCCESS;
250 float ErrorSum{std::sqrt(trkErr * trkErr + hitErr * hitErr)};
252 if (ErrorSum > 1.0e-20) {
253 return residual / ErrorSum;
255 ATH_MSG_DEBUG(
"Error on Track and Cluster are 0. Returning Pull value 0.");
263 const EventContext& ctx = Gaudi::Hive::currentContext();
266 firedTriggers = evtInfo->level1TriggerType();
268 return StatusCode::SUCCESS;
270 return StatusCode::FAILURE;
275 return ((trigger <
N_TRIGGER_TYPES) ? firedTriggers.test(trigger) :
false);
Scalar eta() const
pseudorapidity method
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_WARNING(x)
Helpers for checking error return status codes and reporting errors.
An STL vector of pointers that by default owns its pointed-to elements.
Header file to be included by clients of the Monitored infrastructure.
unsigned int bec2Index(const int becVal)
Conversion bec->index.
This is an Identifier helper class for the SCT subdetector.
Handle class for reading from StoreGate.
const ServiceHandle< StoreGateSvc > & detStore() const
virtual StatusCode initialize() override
initialize
SG::ReadHandle< xAOD::EventInfo > GetEventInfo(const EventContext &) const
Return a ReadHandle for an EventInfo object (get run/event numbers, etc.)
AthMonitorAlgorithm(const std::string &name, ISvcLocator *pSvcLocator)
Constructor.
RIO_OnTrack base class for Silicon detector in the InnerDetector.
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...
Declare a monitored scalar variable.
SG::ReadHandleKey< TrackCollection > m_tracksName
Name of the Track collection to use.
const std::string m_regionNames[3]
ToolHandle< Trk::IUpdator > m_updator
BooleanProperty m_doTrigger
SCTTracksMonAlg(const std::string &name, ISvcLocator *pSvcLocator)
ToolHandle< Trk::ITrackSummaryTool > m_trackSummaryTool
bool hasTriggerFired(const unsigned int trigger, const std::bitset< N_TRIGGER_TYPES > &firedTriggers) const
Get the status of a particular trigger bit (trigger bit 0-7)
ToolHandle< Trk::IResidualPullCalculator > m_residualPullCalculator
Kalman Updator for SCT Unbiased states in Residual calculation.
IntegerProperty m_trackHitCut
Cut on number of SCT hits on track.
BooleanProperty m_doNegativeEndcap
BooleanProperty m_doUnbiasedCalc
StatusCode checkTriggers(std::bitset< N_TRIGGER_TYPES > &firedTriggers) const
Fill the m_firedTriggers bitset according to event information.
virtual StatusCode initialize() override final
initialize
BooleanProperty m_doPositiveEndcap
virtual StatusCode fillHistograms(const EventContext &ctx) const override final
adds event to the monitoring histograms
const SCT_ID * m_pSCTHelper
SCT Helper class.
float calculatePull(const float, const float, const float) const
Calculate Pull value for MeasuredAtPlane TrackStates.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
const LocalParameters & localParameters() const
Interface method to get the LocalParameters.
const Amg::MatrixX & localCovariance() const
Interface method to get the localError.
Class to handle RIO On Tracks ROT) for InDet and Muons, it inherits from the common MeasurementBase.
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
@ Biased
RP with track state including the hit.
@ Unbiased
RP with track state that has measurement not included.
represents the track state (measurement, material, fit parameters and quality) at a surface.
@ Measurement
This is a measurement, and will at least contain a Trk::MeasurementBase.
unsigned int bec2Index(const int becVal)
Conversion bec->index.
DataVector< const Trk::TrackStateOnSurface > TrackStates
ParametersBase< TrackParametersDim, Charged > TrackParameters
@ numberOfSCTHits
number of SCT holes
void fill(H5::Group &out_file, size_t iterations)