ATLAS Offline Software
Loading...
Searching...
No Matches
MSVertexTrackletTool.h
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
5#pragma once
6
7#include <utility>
8#include <vector>
9
11
14
15#include "GaudiKernel/SystemOfUnits.h"
16#include "GaudiKernel/ServiceHandle.h"
19
22
27
31
32
33namespace Muon {
34
35 class MSVertexTrackletTool : virtual public IMSVertexTrackletTool, public AthAlgTool {
36 public:
37 MSVertexTrackletTool(const std::string& type, const std::string& name, const IInterface* parent);
38 virtual ~MSVertexTrackletTool() = default;
39
40 virtual StatusCode initialize() override;
41
42 StatusCode findTracklets(std::vector<Tracklet>& tracklets, const EventContext& ctx) const override;
43
44 private:
46 SG::WriteHandleKey<xAOD::TrackParticleContainer> m_TPContainer{this, "xAODTrackParticleContainer", "MSonlyTracklets"};
47
48 ServiceHandle<Muon::IMuonIdHelperSvc> m_idHelperSvc{this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"};
49
50 // hit properties
51 // longitudinal (transverse) separation used in the barrel (endcaps)
52 Gaudi::Property<double> m_d12_max{this, "d12_max", 50.*Gaudi::Units::millimeter, "max separation in mm between hits in tube 1 and 2"};
53 Gaudi::Property<double> m_d13_max{this, "d13_max", 80.*Gaudi::Units::millimeter, "max separation in mm between hits in tube 1 and 3"};
54 Gaudi::Property<double> m_errorCutOff{this, "errorCutOff", 0.001, "minimal hit error"};
55 // tracklet segment properties
56 Gaudi::Property<double> m_SeedResidual{this, "SeedResidual", 5., "max residual for tracklet seeds"};
57 Gaudi::Property<double> m_minSegFinderChi2{this, "MinSegFinderChi2Prob", 0.05, "tracklet segment fitter chi^2 probability cut"};
58 // tracklet properties
59 Gaudi::Property<double> m_BarrelDeltaAlphaCut{this, "BarrelDeltaAlphaCut", 0.2*Gaudi::Units::radian, "maximum delta_alpha allowed in barrel MS chambers"};
60 Gaudi::Property<double> m_EndcapDeltaAlphaCut{this, "EndcapDeltaAlphaCut", 0.015*Gaudi::Units::radian, "maximum delta_alpha allowed in the endcap MS chambers"};
61 Gaudi::Property<double> m_maxDeltabCut{this, "maxDeltabCut", 3*Gaudi::Units::millimeter, "maximum delta_b allowed"};
62 Gaudi::Property<double> m_minpTot{this, "minpTot", 800.*Gaudi::Units::MeV, "minimum measurable total momentum in MeV"};
63 Gaudi::Property<double> m_maxpTot{this, "maxpTot", 10000.*Gaudi::Units::MeV, "maximum measurable total momentum in MeV beyond which tracklets are assumed to be straight"};
64 Gaudi::Property<double> m_straightTrackletpTot{this, "straightTrackletpTot", 1.0e5*Gaudi::Units::MeV, "total momentum in MeV assigned to straight tracklets"};
65 Gaudi::Property<double> m_straightTrackletInvPerr{this, "straightTrackletInvPerr", 5.0e-5/Gaudi::Units::MeV, "error in the inverse momentum in MeV^-1 assigned to straight tracklets"};
66 Gaudi::Property<bool> m_tightTrackletRequirement{this, "tightTrackletRequirement", false, "tight tracklet requirement (affects efficiency - disabled by default)"};
67
68 // MDT routines
69 bool IgnoreMDTChamber(const Muon::MdtPrepData* mdtHit) const;
70 int SortMDThits(std::vector<std::vector<const Muon::MdtPrepData*> >& SortedMdt, const EventContext& ctx) const;
71 void addMDTHits(std::vector<const Muon::MdtPrepData*>& hits, std::vector<std::vector<const Muon::MdtPrepData*> >& SortedMdt) const;
72 // single multilayer segment fitting, residuals, and cleaning
73 std::vector<TrackletSegment> TrackletSegmentFitter(const std::vector<const Muon::MdtPrepData*>& mdts) const;
74 std::vector<std::pair<double, double> > SegSeeds(const std::vector<const Muon::MdtPrepData*>& mdts) const;
75 std::vector<TrackletSegment> TrackletSegmentFitterCore(const std::vector<const Muon::MdtPrepData*>& mdts, const std::vector<std::pair<double, double> >& SeedParams) const;
76 static double SeedResiduals(const std::vector<const Muon::MdtPrepData*>& mdts, double slope, double inter) ;
77 std::vector<TrackletSegment> CleanSegments(const std::vector<TrackletSegment>& segs) const;
78 // Tracklet routines
79 bool DeltabCalc(const TrackletSegment& ML1seg, const TrackletSegment& ML2seg) const;
80 double TrackMomentum(const Identifier trkID, const double deltaAlpha) const ;
81 double TrackMomentumError(const TrackletSegment& ml1, const TrackletSegment& ml2) const;
82 double TrackMomentumError(const TrackletSegment& ml1) const;
83 std::vector<Tracklet> ResolveAmbiguousTracklets(std::vector<Tracklet>& tracks) const;
84 static void convertToTrackParticles(std::vector<Tracklet>& tracklets, SG::WriteHandle<xAOD::TrackParticleContainer>& container) ;
85 };
86
87} // namespace Muon
Property holding a SG store/key/clid from which a ReadHandle is made.
Property holding a SG store/key/clid from which a WriteHandle is made.
AthAlgTool(const std::string &type, const std::string &name, const IInterface *parent)
Constructor with parameters:
The IMSVertexTrackletTool is a pure virtual interface.
MSVertexTrackletTool(const std::string &type, const std::string &name, const IInterface *parent)
int SortMDThits(std::vector< std::vector< const Muon::MdtPrepData * > > &SortedMdt, const EventContext &ctx) const
Gaudi::Property< bool > m_tightTrackletRequirement
static double SeedResiduals(const std::vector< const Muon::MdtPrepData * > &mdts, double slope, double inter)
Gaudi::Property< double > m_straightTrackletpTot
SG::WriteHandleKey< xAOD::TrackParticleContainer > m_TPContainer
double TrackMomentumError(const TrackletSegment &ml1, const TrackletSegment &ml2) const
static void convertToTrackParticles(std::vector< Tracklet > &tracklets, SG::WriteHandle< xAOD::TrackParticleContainer > &container)
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
SG::ReadHandleKey< Muon::MdtPrepDataContainer > m_mdtTESKey
Gaudi::Property< double > m_maxDeltabCut
std::vector< std::pair< double, double > > SegSeeds(const std::vector< const Muon::MdtPrepData * > &mdts) const
bool DeltabCalc(const TrackletSegment &ML1seg, const TrackletSegment &ML2seg) const
double TrackMomentum(const Identifier trkID, const double deltaAlpha) const
Gaudi::Property< double > m_minSegFinderChi2
bool IgnoreMDTChamber(const Muon::MdtPrepData *mdtHit) const
std::vector< TrackletSegment > TrackletSegmentFitter(const std::vector< const Muon::MdtPrepData * > &mdts) const
Gaudi::Property< double > m_d13_max
std::vector< Tracklet > ResolveAmbiguousTracklets(std::vector< Tracklet > &tracks) const
std::vector< TrackletSegment > TrackletSegmentFitterCore(const std::vector< const Muon::MdtPrepData * > &mdts, const std::vector< std::pair< double, double > > &SeedParams) const
Gaudi::Property< double > m_errorCutOff
void addMDTHits(std::vector< const Muon::MdtPrepData * > &hits, std::vector< std::vector< const Muon::MdtPrepData * > > &SortedMdt) const
Gaudi::Property< double > m_SeedResidual
Gaudi::Property< double > m_minpTot
Gaudi::Property< double > m_straightTrackletInvPerr
StatusCode findTracklets(std::vector< Tracklet > &tracklets, const EventContext &ctx) const override
virtual StatusCode initialize() override
std::vector< TrackletSegment > CleanSegments(const std::vector< TrackletSegment > &segs) const
Gaudi::Property< double > m_EndcapDeltaAlphaCut
Gaudi::Property< double > m_BarrelDeltaAlphaCut
Gaudi::Property< double > m_d12_max
Gaudi::Property< double > m_maxpTot
virtual ~MSVertexTrackletTool()=default
Class to represent measurements from the Monitored Drift Tubes.
Definition MdtPrepData.h:33
Property holding a SG store/key/clid from which a ReadHandle is made.
Property holding a SG store/key/clid from which a WriteHandle is made.
New segment class for single ML segments.
NRpcCablingAlg reads raw condition data and writes derived condition data to the condition store.