5#ifndef MUON_MUONTRACKCLEANER_H
6#define MUON_MUONTRACKCLEANER_H
9#include "GaudiKernel/ServiceHandle.h"
10#include "GaudiKernel/ToolHandle.h"
37 class TrackStateOnSurface;
38 class MeasurementBase;
59 std::optional<Trk::ResidualPull>
resPull{std::nullopt};
60 std::unique_ptr<MdtDriftCircleOnTrack>
flippedMdt{
nullptr};
93 typedef std::vector<MCTBCleaningInfo>
InfoVec;
96 typedef std::set<const Trk::MeasurementBase*>
MeasSet;
109 return sortTracks(r1.track.get(), r2.track.get());
131 typedef std::vector<std::pair<double, Identifier>>
PullChVec;
135 bool operator()(
const std::pair<double, Identifier>& entry1,
const std::pair<double, Identifier>& entry2)
const {
136 return entry1.first > entry2.first;
201 using base_class::base_class;
212 std::unique_ptr<Trk::Track>
clean(
const Trk::Track& track,
const EventContext& ctx)
const override;
219 std::unique_ptr<Trk::Track>
clean(
const Trk::Track& track,
const std::set<Identifier>& chamberRemovalExclusionList,
220 const EventContext& ctx)
const override;
230 double calcPull(
const double residual,
const double locMesCov,
const double locTrkCov,
const bool& trkStateIsUnbiased)
const;
233 std::unique_ptr<Trk::Track>
cleanCompROTs(
const EventContext& ctx, std::unique_ptr<Trk::Track> track,
CleaningState& state)
const;
236 std::unique_ptr<Trk::Track>
recoverFlippedMdt(
const EventContext& ctx, std::unique_ptr<Trk::Track> track,
240 std::unique_ptr<Trk::Track>
hitCleaning(
const EventContext& ctx, std::unique_ptr<Trk::Track> track,
CleaningState& state)
const;
282 "Trk::GlobalChi2Fitter/MCTBFitterMaterialFromTrack",
284 ToolHandle<Trk::ITrackFitter>
m_slTrackFitter{
this,
"SLFitter",
"Trk::GlobalChi2Fitter/MCTBSLFitterMaterialFromTrack"};
285 ToolHandle<Trk::IUpdator>
m_measurementUpdator{
this,
"MeasurementUpdator",
"Trk::KalmanUpdator/MuonMeasUpdator"};
286 ToolHandle<Muon::IMdtDriftCircleOnTrackCreator>
m_mdtRotCreator{
this,
"MdtRotCreator",
287 "Muon::MdtDriftCircleOnTrackCreator/MdtDriftCircleOnTrackCreator"};
289 this,
"CompRotCreator",
"Muon::TriggerChamberClusterOnTrackCreator/TriggerChamberClusterOnTrackCreator"};
291 "Trk::ResidualPullCalculator/ResidualPullCalculator"};
293 "Handle to the service providing the IMuonEDMHelperSvc interface"};
294 PublicToolHandle<Muon::MuonEDMPrinterTool>
m_printer{
this,
"Printer",
"Muon::MuonEDMPrinterTool/MuonEDMPrinterTool"};
296 ToolHandle<Trk::IExtrapolator>
m_extrapolator{
this,
"Extrapolator",
"Trk::Extrapolator/AtlasExtrapolator"};
299 "Name of the Magnetic Field conditions object key"};
302 Gaudi::Property<double>
m_chi2Cut{
this,
"Chi2Cut", 100.};
307 Gaudi::Property<unsigned int>
m_ncycles{
this,
"CleaningCycles", 5};
313 Gaudi::Property<double>
m_adcCut{
this,
"AdcCut", 50.};
318 bool extractChambersToBeRemoved(CleaningState& state, std::set<Identifier>& chambersToBeRemovedSet,
bool usePhi =
false)
const;
320 static std::string
print(ChamberLayerStatistics& statistics) ;
std::pair< std::vector< unsigned int >, bool > res
Define macros for attributes used to control the static checker.
#define ATLAS_CHECK_FILE_THREAD_SAFETY
ToolHandle< Trk::IExtrapolator > m_extrapolator
ServiceHandle< Muon::IMuonEDMHelperSvc > m_edmHelperSvc
PullChamberMap::const_iterator PullChamberCit
bool checkPhiConstraint(CleaningState &state) const
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
void init(const EventContext &ctx, const Trk::Track &track, CleaningState &state) const
init cleaner
bool extractChambersToBeRemoved(CleaningState &state, std::set< Identifier > &chambersToBeRemovedSet, bool usePhi=false) const
helper function to extract chambers that are to be removed
bool checkStations(CleaningState &state) const
std::unique_ptr< Trk::Track > outlierRecovery(const EventContext &ctx, std::unique_ptr< Trk::Track > track, CleaningState &state, const MuonStationIndex::ChIndex *currentIndex=nullptr) const
recover outliers that are within the cuts.
std::map< Identifier, EtaPhiHits > EtaPhiPerChamberMap
ToolHandle< IMuonCompetingClustersOnTrackCreator > m_compRotCreator
Gaudi::Property< double > m_avePullSumPerChamberCut
ToolHandle< Muon::IMdtDriftCircleOnTrackCreator > m_mdtRotCreator
bool checkInnerConstraint(CleaningState &state) const
~MuonTrackCleaner()=default
destructor
std::unique_ptr< Trk::Track > cleanCompROTs(const EventContext &ctx, std::unique_ptr< Trk::Track > track, CleaningState &state) const
clean up competing ROTs that consist out of two clusters
ToolHandle< Trk::IResidualPullCalculator > m_pullCalculator
std::unique_ptr< Trk::Track > clean(const Trk::Track &track, const EventContext &ctx) const override
clean a track, returns a pointer to a new track if successfull.
std::map< Identifier, ChamberPullInfo > PullChamberMap
std::unique_ptr< Trk::Track > fitTrack(const EventContext &ctx, Trk::Track &track, Trk::ParticleHypothesis pHyp, bool slFit) const
Gaudi::Property< bool > m_cleanCompROTs
Gaudi::Property< double > m_associationScaleFactor
EtaPhiPerChamberMap::iterator EtaPhiPerChamberIt
static void unremoveHits(ChamberRemovalOutput &result)
StatusCode initialize() override
AlgTool initialize.
Gaudi::Property< bool > m_onlyUseHitErrorInRecovery
std::unique_ptr< Trk::Track > chamberCleaning(const EventContext &ctx, std::unique_ptr< Trk::Track > track, CleaningState &state) const
remove bad chamber from track.
std::vector< std::pair< double, Identifier > > PullChVec
std::unique_ptr< Trk::Track > cleanTrack(const EventContext &ctx, const Trk::Track *track, CleaningState &state) const
clean a track, actual implementation
SG::ReadCondHandleKey< AtlasFieldCacheCondObj > m_fieldCacheCondObjInputKey
ToolHandle< Trk::ITrackFitter > m_trackFitter
std::vector< MCTBCleaningInfo > InfoVec
Gaudi::Property< double > m_pullCutPhi
PublicToolHandle< Muon::MuonEDMPrinterTool > m_printer
bool isOutsideOnTrackCut(const Identifier &id, double res, double pull, double cutScaleFactor) const
check whether hit is an outlier
std::unique_ptr< Trk::Track > hitCleaning(const EventContext &ctx, std::unique_ptr< Trk::Track > track, CleaningState &state) const
remove bad hits from track.
Gaudi::Property< bool > m_iterate
Gaudi::Property< bool > m_flipMdtDriftRadii
const Trk::ResidualPull * calculateResPul(const Trk::MeasurementBase &meas, const Trk::TrackParameters &pars) const
calculate Residual/Pull for a given MeasurementBase + TrackParameters, ownership is transfered to use...
ToolHandle< Trk::ITrackFitter > m_slTrackFitter
Gaudi::Property< double > m_adcCut
void printStates(Trk::Track *track) const
double calcPull(const double residual, const double locMesCov, const double locTrkCov, const bool &trkStateIsUnbiased) const
calculate the pull given measurement error and track error
ToolHandle< Trk::IUpdator > m_measurementUpdator
PullChamberMap::iterator PullChamberIt
Gaudi::Property< double > m_mdtResiCut
static std::string print(ChamberLayerStatistics &statistics)
Gaudi::Property< bool > m_recoverOutliers
ChamberRemovalOutput removeChamber(const EventContext &ctx, const std::unique_ptr< Trk::Track > &track, Identifier chId, bool removePhi, bool removeEta, CleaningState &state) const
remove chamber from track
Gaudi::Property< unsigned int > m_ncycles
PullChVec::iterator PullChIt
std::set< const Trk::MeasurementBase * > MeasSet
Gaudi::Property< double > m_pullCut
std::unique_ptr< Trk::Track > recoverFlippedMdt(const EventContext &ctx, std::unique_ptr< Trk::Track > track, CleaningState &state) const
flip signs of MDT hits with large pull if pull if the oppositely signed radius is small
Gaudi::Property< double > m_chi2Cut
Gaudi::Property< bool > m_useMdtResiCut
Gaudi::Property< bool > m_use_slFit
Class to represent and store fit qualities from track reconstruction in terms of and number of degre...
This class is the pure abstract base class for all fittable tracking measurements.
This class containes residual and pull information.
represents the track state (measurement, material, fit parameters and quality) at a surface.
ChIndex
enum to classify the different chamber layers in the muon spectrometer
NRpcCablingAlg reads raw condition data and writes derived condition data to the condition store.
Ensure that the ATLAS eigen extensions are properly loaded.
ParticleHypothesis
Enumeration for Particle hypothesis respecting the interaction with material.
ParametersBase< TrackParametersDim, Charged > TrackParameters
ChamberLayerStatistics()=default
MuonStationIndex::ChIndex chIndex
unsigned int nrecoverableOutliers
ChamberPullInfo()=default
struct to store return values of chamber removal, contains the new track plus a list the removed hits
std::unique_ptr< Trk::Track > track
std::vector< MCTBCleaningInfo * > removedHits
ChamberRemovalOutput()=default
PullChamberMap pullSumPerChamberPhi
PullChVec chambersToBeRemoved
ChamberPullInfo pullSumTrigEta
std::set< MuonStationIndex::PhiIndex > phiLayers
PullChamberMap pullSumPerChamberEta
EtaPhiPerChamberMap hitsPerChamber
ChamberPullInfo pullSumPhi
std::map< MuonStationIndex::ChIndex, ChamberLayerStatistics > chamberLayerStatistics
unsigned int nPseudoMeasurements
MeasSet largePullPseudoMeasurements
EtaPhiPerChamberMap outBoundsPerChamber
std::set< MuonStationIndex::StIndex > stations
unsigned int numberOfCleanedCompROTs
unsigned int numberOfFlippedMdts
unsigned int nPhiConstraints
PullChVec chambersToBeRemovedPhi
std::set< Identifier > chamberRemovalExclusionList
MeasSet largePullMeasurements
PullChamberMap pullSumPerChamber
std::vector< std::unique_ptr< Trk::TrackParameters > > parsToBeDeleted
std::optional< Trk::ResidualPull > resPull
MCTBCleaningInfo(const Identifier &i, const Identifier &chi, MuonStationIndex::ChIndex chIn, bool inB, double r, double p, const Trk::TrackStateOnSurface *orState)
const Trk::TrackParameters * pars
MCTBCleaningInfo(const Identifier &i, const Identifier &chi, MuonStationIndex::ChIndex chIn, bool inB, double r, double p, const Trk::TrackStateOnSurface *orState, const Trk::MeasurementBase *me, const Trk::TrackParameters *par, std::optional< Trk::ResidualPull > &&resP, const Trk::FitQuality *fq)
MuonStationIndex::ChIndex chIndex
const Trk::TrackStateOnSurface * originalState
std::unique_ptr< MdtDriftCircleOnTrack > flippedMdt
MCTBCleaningInfo(const Trk::TrackStateOnSurface *orState)
const Trk::FitQuality * fitQ
std::unique_ptr< const CompetingMuonClustersOnTrack > cleanedCompROT
const Trk::MeasurementBase * meas
bool operator()(const std::pair< double, Identifier > &entry1, const std::pair< double, Identifier > &entry2) const
bool operator()(const ChamberRemovalOutput &r1, const ChamberRemovalOutput &r2) const