 |
ATLAS Offline Software
|
#include <MSVertexRecoTool.h>
|
| MSVertexRecoTool (const std::string &type, const std::string &name, const IInterface *parent) |
|
virtual | ~MSVertexRecoTool ()=default |
|
virtual StatusCode | initialize (void) override |
|
StatusCode | findMSvertices (const std::vector< Tracklet > &tracklets, std::vector< std::unique_ptr< MSVertex >> &vertices, const EventContext &ctx) const override |
|
| DeclareInterfaceID (Muon::IMSVertexRecoTool, 1, 0) |
| access to tool interface More...
|
|
ServiceHandle< StoreGateSvc > & | evtStore () |
| The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc . More...
|
|
const ServiceHandle< StoreGateSvc > & | evtStore () const |
| The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc . More...
|
|
const ServiceHandle< StoreGateSvc > & | detStore () const |
| The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc . More...
|
|
virtual StatusCode | sysInitialize () override |
| Perform system initialization for an algorithm. More...
|
|
virtual StatusCode | sysStart () override |
| Handle START transition. More...
|
|
virtual std::vector< Gaudi::DataHandle * > | inputHandles () const override |
| Return this algorithm's input handles. More...
|
|
virtual std::vector< Gaudi::DataHandle * > | outputHandles () const override |
| Return this algorithm's output handles. More...
|
|
Gaudi::Details::PropertyBase & | declareProperty (Gaudi::Property< T, V, H > &t) |
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleKey &hndl, const std::string &doc, const SG::VarHandleKeyType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleBase &hndl, const std::string &doc, const SG::VarHandleType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleKeyArray &hndArr, const std::string &doc, const SG::VarHandleKeyArrayType &) |
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, T &property, const std::string &doc, const SG::NotHandleType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, T &property, const std::string &doc="none") |
| Declare a new Gaudi property. More...
|
|
void | updateVHKA (Gaudi::Details::PropertyBase &) |
|
MsgStream & | msg () const |
|
MsgStream & | msg (const MSG::Level lvl) const |
|
bool | msgLvl (const MSG::Level lvl) const |
|
|
std::vector< TrkCluster > | findTrackClusters (const std::vector< Tracklet > &tracklets) const |
|
std::optional< TrkCluster > | ClusterizeTracks (std::vector< Tracklet > &tracks) const |
|
void | MSVxFinder (const std::vector< Tracklet > &tracklets, std::unique_ptr< MSVertex > &vtx, const EventContext &ctx) const |
|
void | MSStraightLineVx (const std::vector< Tracklet > &trks, std::unique_ptr< MSVertex > &vtx, const EventContext &ctx) const |
|
void | MSStraightLineVx_oldMethod (const std::vector< Tracklet > &trks, std::unique_ptr< MSVertex > &vtx, const EventContext &ctx) const |
|
std::vector< Tracklet > | RemoveBadTrk (const std::vector< Tracklet > &tracklets, const Amg::Vector3D &Vx) const |
|
bool | EndcapHasBadTrack (const std::vector< Tracklet > &tracklets, const Amg::Vector3D &Vx) const |
|
void | HitCounter (MSVertex *MSRecoVx, const EventContext &ctx) const |
|
double | vxPhiFinder (const double theta, const double phi, const EventContext &ctx) const |
|
std::vector< Tracklet > | getTracklets (const std::vector< Tracklet > &trks, const std::set< int > &tracklet_subset) const |
|
void | dressVtxHits (xAOD::Vertex *xAODVx, const std::vector< SG::AuxElement::Accessor< int >> &accs, const std::vector< int > &hits) const |
|
StatusCode | FillOutputContainer (const std::vector< std::unique_ptr< MSVertex >> &, SG::WriteHandle< xAOD::VertexContainer > &xAODVxContainer) const |
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &) |
| specialization for handling Gaudi::Property<SG::VarHandleKey> More...
|
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyArrayType &) |
| specialization for handling Gaudi::Property<SG::VarHandleKeyArray> More...
|
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleType &) |
| specialization for handling Gaudi::Property<SG::VarHandleBase> More...
|
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T, V, H > &t, const SG::NotHandleType &) |
| specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray> More...
|
|
|
SG::WriteHandleKey< xAOD::VertexContainer > | m_xAODContainerKey {this, "xAODVertexContainer", "MSDisplacedVertex"} |
|
SG::ReadHandleKey< Muon::RpcPrepDataContainer > | m_rpcTESKey {this, "RPCKey", "RPC_Measurements"} |
|
SG::ReadHandleKey< Muon::TgcPrepDataContainer > | m_tgcTESKey {this, "TGCKey", "TGC_Measurements"} |
|
SG::ReadHandleKey< Muon::MdtPrepDataContainer > | m_mdtTESKey {this, "MDTKey", "MDT_DriftCircles"} |
|
const std::vector< std::string > | m_accMDT_str = {"nMDT", "nMDT_inwards", "nMDT_I", "nMDT_E", "nMDT_M", "nMDT_O"} |
|
const std::vector< std::string > | m_accRPC_str = {"nRPC", "nRPC_inwards", "nRPC_I", "nRPC_E", "nRPC_M", "nRPC_O"} |
|
const std::vector< std::string > | m_accTGC_str = {"nTGC", "nTGC_inwards", "nTGC_I", "nTGC_E", "nTGC_M", "nTGC_O"} |
|
std::vector< SG::AuxElement::Accessor< int > > | m_nMDT_accs |
|
std::vector< SG::AuxElement::Accessor< int > > | m_nRPC_accs |
|
std::vector< SG::AuxElement::Accessor< int > > | m_nTGC_accs |
|
ServiceHandle< Muon::IMuonIdHelperSvc > | m_idHelperSvc {this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"} |
|
ServiceHandle< IAthRNGSvc > | m_rndmSvc {this, "RndmSvc", "AthRNGSvc", "Random Number Service"} |
|
ToolHandle< Trk::IExtrapolator > | m_extrapolator {this, "MyExtrapolator", "Trk::Extrapolator/AtlasExtrapolator"} |
|
Gaudi::Property< unsigned int > | m_maxGlobalTracklets {this, "MaxGlobalTracklets", 40, "maximal number of tracklets in an event"} |
|
Gaudi::Property< unsigned int > | m_maxClusterTracklets {this, "MaxClusterTracklets", 50, "maximal number of tracklets in a cluster"} |
|
Gaudi::Property< double > | m_ChamberOccupancyMin {this, "MinimumHighOccupancy", 0.25, "minimum occupancy to be considered 'high occupancy'"} |
|
Gaudi::Property< int > | m_minHighOccupancyChambers {this, "MinimumNumberOfHighOccupancy", 2, "number of high occupancy chambers required to be signal like"} |
|
Gaudi::Property< double > | m_ClusterdEta {this, "ClusterdEta", 0.7, "eta extend of cluster"} |
|
Gaudi::Property< double > | m_ClusterdPhi {this, "ClusterdPhi", M_PI / 3.*Gaudi::Units::radian, "phi extend of cluster"} |
|
Gaudi::Property< bool > | m_doSystematics {this, "DoSystematicUncertainty", false, "find vertex systematic uncertainty"} |
|
Gaudi::Property< double > | m_BarrelTrackletUncert {this, "BarrelTrackletUncertainty", 0.1, "probability of considering a barrel tracklet in the clustering for the systematics reconstruction"} |
|
Gaudi::Property< double > | m_EndcapTrackletUncert {this, "EndcapTrackletUncertainty", 0.1, "probability of considering a endcap tracklet in the clustering for the systematics reconstruction"} |
|
Gaudi::Property< double > | m_TrackPhiAngle {this, "TrackPhiAngle", 0.0*Gaudi::Units::radian, "nominal phi angle for tracklets in rad"} |
|
Gaudi::Property< double > | m_TrackPhiRotation {this, "TrackPhiRotation", 0.2*Gaudi::Units::radian, "angle to rotate tracklets by for uncertainty estimate in rad"} |
|
Gaudi::Property< double > | m_MaxTrackUncert {this, "MaxTrackUncert", 200.*Gaudi::Units::millimeter, "maximal tracklet uncertainty in mm"} |
|
Gaudi::Property< double > | m_VxChi2ProbCUT {this, "VxChi2ProbabilityCut", 0.05, "chi^2 probability cut"} |
|
Gaudi::Property< double > | m_VertexMinRadialPlane {this, "VertexMinRadialPlane", 3500.*Gaudi::Units::millimeter, "position of first radial plane in mm"} |
|
Gaudi::Property< double > | m_VertexMaxRadialPlane {this, "VertexMaxRadialPlane", 7000.*Gaudi::Units::millimeter, "position of last radial plane in mm"} |
|
Gaudi::Property< double > | m_VxPlaneDist {this, "VertexPlaneDist", 200.*Gaudi::Units::millimeter, "distance between two adjacent planes in mm"} |
|
Gaudi::Property< double > | m_MaxTollDist {this, "MaxTollDist", 300.*Gaudi::Units::millimeter, "maximal distance between tracklet and endcap vertex in mm"} |
|
Gaudi::Property< bool > | m_useOldMSVxEndcapMethod {this, "UseOldMSVxEndcapMethod", false, "use old vertex reconstruction in the endcaps "} |
|
Gaudi::Property< double > | m_nMDTHitsEta {this, "nMDTHitsEta", 0.6, "max eta extend between vertex and MDT hit"} |
|
Gaudi::Property< double > | m_nMDTHitsPhi {this, "nMDTHitsPhi", 0.6*Gaudi::Units::radian, "max phi extend between vertex and MDT hit"} |
|
Gaudi::Property< double > | m_nTrigHitsdR {this, "nTrigHitsdR", 0.6*Gaudi::Units::radian, "max delta R between vertex and trigger chamber (RPC or TGC) hit"} |
|
Gaudi::Property< int > | m_MinMDTHits {this, "MinMDTHits", 250, "minimal number of MDT hits"} |
|
Gaudi::Property< int > | m_MinTrigHits {this, "MinTrigHits", 200, "minimal number of trigger chamber (RPC+TGC) hits"} |
|
Gaudi::Property< double > | m_MaxLxyEndcap {this, "MaxLxyEndcap", 10000*Gaudi::Units::millimeter, "maximal transverse distance for endcap vertex in mm"} |
|
Gaudi::Property< double > | m_MinZEndcap {this, "MinZEndcap", 8000*Gaudi::Units::millimeter, "minimal longitudinal distance for endcap vertex in mm"} |
|
Gaudi::Property< double > | m_MaxZEndcap {this, "MaxZEndcap", 14000*Gaudi::Units::millimeter, "maximal longitudinal distance for endcap vertex in mm"} |
|
StoreGateSvc_t | m_evtStore |
| Pointer to StoreGate (event store by default) More...
|
|
StoreGateSvc_t | m_detStore |
| Pointer to StoreGate (detector store by default) More...
|
|
std::vector< SG::VarHandleKeyArray * > | m_vhka |
|
bool | m_varHandleArraysDeclared |
|
Definition at line 41 of file MSVertexRecoTool.h.
◆ StoreGateSvc_t
◆ MSVertexRecoTool()
Muon::MSVertexRecoTool::MSVertexRecoTool |
( |
const std::string & |
type, |
|
|
const std::string & |
name, |
|
|
const IInterface * |
parent |
|
) |
| |
◆ ~MSVertexRecoTool()
virtual Muon::MSVertexRecoTool::~MSVertexRecoTool |
( |
| ) |
|
|
virtualdefault |
◆ ClusterizeTracks()
Definition at line 178 of file MSVertexRecoTool.cxx.
182 ATH_MSG_DEBUG(
"Too many tracks found, returning empty cluster");
186 std::vector<TrkCluster> trkClu;
187 std::vector<TrkCluster> trkClu0;
190 for (
const Tracklet& trk : tracks) {
192 clu.eta = trk.globalPosition().eta();
193 clu.phi = trk.globalPosition().phi();
195 trkClu.push_back(clu);
196 trkClu0.push_back(clu);
198 if (ncluster >= 99) {
204 for (TrkCluster& clu : trkClu) {
207 for (
const TrkCluster& trk : trkClu0) {
208 double dEta = clu.eta - trk.eta;
212 clu.eta = clu.eta -
dEta / ntracks;
220 double eta_best = clu.eta;
221 double phi_best = clu.phi;
223 bool improvement =
true;
224 while (improvement) {
225 unsigned int ntracks_new = 0;
226 double eta_new = 0.0;
227 double phi_new = 0.0;
228 double cosPhi_new = 0.0;
229 double sinPhi_new = 0.0;
231 for (
const TrkCluster& trk : trkClu0) {
232 double dEta = clu.eta - trk.eta;
242 eta_new = eta_new / ntracks_new;
243 phi_new = std::atan2(sinPhi_new / ntracks_new, cosPhi_new / ntracks_new);
245 if (ntracks_new > clu.ntrks) {
249 clu.ntrks = ntracks_new;
268 TrkCluster& BestCluster = trkClu[0];
269 for (
const TrkCluster& clu : trkClu) {
270 if (clu.ntrks > BestCluster.ntrks) BestCluster = clu;
274 std::vector<Tracklet> unusedTracks;
275 for (
const Tracklet& trk : tracks) {
276 double dEta = BestCluster.eta - trk.globalPosition().eta();
279 BestCluster.tracks.push_back(trk);
281 unusedTracks.push_back(trk);
284 tracks = std::move(unusedTracks);
◆ declareGaudiProperty() [1/4]
specialization for handling Gaudi::Property<SG::VarHandleKeyArray>
Definition at line 170 of file AthCommonDataStore.h.
175 hndl.documentation());
◆ declareGaudiProperty() [2/4]
specialization for handling Gaudi::Property<SG::VarHandleKey>
Definition at line 156 of file AthCommonDataStore.h.
161 hndl.documentation());
◆ declareGaudiProperty() [3/4]
specialization for handling Gaudi::Property<SG::VarHandleBase>
Definition at line 184 of file AthCommonDataStore.h.
189 hndl.documentation());
◆ declareGaudiProperty() [4/4]
◆ DeclareInterfaceID()
◆ declareProperty() [1/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
hndl | Object holding the property value. |
doc | Documentation string for the property. |
This is the version for types that derive from SG::VarHandleBase
. The property value object is put on the input and output lists as appropriate; then we forward to the base class.
Definition at line 245 of file AthCommonDataStore.h.
250 this->declare(hndl.
vhKey());
251 hndl.
vhKey().setOwner(
this);
253 return PBASE::declareProperty(
name,hndl,
doc);
◆ declareProperty() [2/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
hndl | Object holding the property value. |
doc | Documentation string for the property. |
This is the version for types that derive from SG::VarHandleKey
. The property value object is put on the input and output lists as appropriate; then we forward to the base class.
Definition at line 221 of file AthCommonDataStore.h.
229 return PBASE::declareProperty(
name,hndl,
doc);
◆ declareProperty() [3/6]
◆ declareProperty() [4/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
property | Object holding the property value. |
doc | Documentation string for the property. |
This is the generic version, for types that do not derive from SG::VarHandleKey
. It just forwards to the base class version of declareProperty
.
Definition at line 333 of file AthCommonDataStore.h.
338 return PBASE::declareProperty(
name, property,
doc);
◆ declareProperty() [5/6]
Declare a new Gaudi property.
- Parameters
-
name | Name of the property. |
property | Object holding the property value. |
doc | Documentation string for the property. |
This dispatches to either the generic declareProperty
or the one for VarHandle/Key/KeyArray.
Definition at line 352 of file AthCommonDataStore.h.
◆ declareProperty() [6/6]
◆ detStore()
◆ dressVtxHits()
◆ EndcapHasBadTrack()
Definition at line 782 of file MSVertexRecoTool.cxx.
783 if (Vx.x() == 0 && Vx.z() == 0)
return true;
787 double TrkInter =
track.getML1seg().globalPosition().perp() -
track.getML1seg().globalPosition().z() * TrkSlope;
788 double dist = std::abs((TrkSlope * Vx.z() - Vx.x() + TrkInter) / std::hypot(TrkSlope, 1));
◆ evtStore() [1/2]
◆ evtStore() [2/2]
◆ extraDeps_update_handler()
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
◆ FillOutputContainer()
Definition at line 810 of file MSVertexRecoTool.cxx.
812 for (
const std::unique_ptr<MSVertex> &vtx : vertices){
817 xAODVx->
setFitQuality(vtx->getChi2(), vtx->getNTracks() - 1);
834 return StatusCode::SUCCESS;
◆ findMSvertices()
StatusCode Muon::MSVertexRecoTool::findMSvertices |
( |
const std::vector< Tracklet > & |
tracklets, |
|
|
std::vector< std::unique_ptr< MSVertex >> & |
vertices, |
|
|
const EventContext & |
ctx |
|
) |
| const |
|
overridevirtual |
Implements Muon::IMSVertexRecoTool.
Definition at line 55 of file MSVertexRecoTool.cxx.
59 CLHEP::HepRandomEngine* rndmEngine = rngWrapper->
getEngine(ctx);
62 ATH_CHECK(xAODVxContainer.record(std::make_unique<xAOD::VertexContainer>(), std::make_unique<xAOD::VertexAuxContainer>()));
64 if (tracklets.size() < 3) {
65 ATH_MSG_DEBUG(
"Fewer than 3 tracks found, vertexing not possible. Exiting...");
66 return StatusCode::SUCCESS;
70 ATH_MSG_DEBUG(
"Too many tracklets found globally. Exiting...");
71 return StatusCode::SUCCESS;
75 std::vector<Tracklet> BarrelTracklets;
76 std::vector<Tracklet> EndcapTracklets;
77 for (
const Tracklet &tracklet : tracklets){
78 if (
m_idHelperSvc->mdtIdHelper().isBarrel(tracklet.muonIdentifier()))
79 BarrelTracklets.push_back(tracklet);
80 else if (
m_idHelperSvc->mdtIdHelper().isEndcap(tracklet.muonIdentifier()))
81 EndcapTracklets.push_back(tracklet);
85 ATH_MSG_DEBUG(
"Too many tracklets found in barrel or endcap for clustering. Exiting...");
86 return StatusCode::SUCCESS;
89 ATH_MSG_DEBUG(
"Running on event with " << BarrelTracklets.size() <<
" barrel tracklets, " << EndcapTracklets.size()
90 <<
" endcap tracklets.");
93 std::vector<Muon::MSVertexRecoTool::TrkCluster> BarrelClusters =
findTrackClusters(BarrelTracklets);
94 std::vector<Muon::MSVertexRecoTool::TrkCluster> EndcapClusters =
findTrackClusters(EndcapTracklets);
98 std::vector<Tracklet> BarrelSystTracklets, EndcapSystTracklets;
99 for (
const Tracklet &BarrelTracklet : BarrelTracklets) {
100 double prob = CLHEP::RandFlat::shoot(rndmEngine, 0, 1);
103 if (BarrelSystTracklets.size() >= 3) {
104 std::vector<Muon::MSVertexRecoTool::TrkCluster> BarrelSystClusters =
findTrackClusters(BarrelSystTracklets);
106 BarrelSystCluster.isSystematic =
true;
107 BarrelClusters.push_back(BarrelSystCluster);
111 for (
const Tracklet &EndcapTracklet : EndcapTracklets) {
112 double prob = CLHEP::RandFlat::shoot(rndmEngine, 0, 1);
115 if (EndcapSystTracklets.size() >= 3) {
116 std::vector<Muon::MSVertexRecoTool::TrkCluster> EndcapSystClusters =
findTrackClusters(EndcapSystTracklets);
118 EndcapSystCluster.isSystematic =
true;
119 EndcapClusters.push_back(EndcapSystCluster);
127 if (BarrelCluster.ntrks < 3)
continue;
128 ATH_MSG_DEBUG(
"Attempting to build vertex from " << BarrelCluster.ntrks <<
" tracklets in the barrel");
129 std::unique_ptr<MSVertex> barvertex(
nullptr);
130 MSVxFinder(BarrelCluster.tracks, barvertex, ctx);
131 if (!barvertex)
continue;
136 ATH_MSG_DEBUG(
"Vertex found in the barrel with n_trk = " << barvertex->getNTracks() <<
" located at (eta,phi) = ("
137 << barvertex->getPosition().eta() <<
", "
138 << barvertex->getPosition().phi() <<
")");
139 if (BarrelCluster.isSystematic) barvertex->setAuthor(3);
140 vertices.push_back(std::move(barvertex));
147 if (EndcapCluster.ntrks < 3)
continue;
148 ATH_MSG_DEBUG(
"Attempting to build vertex from " << EndcapCluster.ntrks <<
" tracklets in the endcap");
150 std::unique_ptr<MSVertex> endvertex(
nullptr);
156 if (!endvertex)
continue;
159 std::abs(endvertex->getPosition().z()) >
m_MinZEndcap && endvertex->getNTracks() >= 3) {
162 ATH_MSG_DEBUG(
"Vertex found in the endcap with n_trk = " << endvertex->getNTracks() <<
" located at (eta,phi) = ("
163 << endvertex->getPosition().eta() <<
", "
164 << endvertex->getPosition().phi() <<
")");
165 if (EndcapCluster.isSystematic) endvertex->setAuthor(4);
166 vertices.push_back(std::move(endvertex));
173 return StatusCode::SUCCESS;
◆ findTrackClusters()
Definition at line 290 of file MSVertexRecoTool.cxx.
292 std::vector<Tracklet> trks = tracks;
296 if (trks.size() < 3)
break;
298 if (clust && clust->ntrks>=3)
clusters.push_back(clust.value());
◆ getTracklets()
std::vector< Tracklet > Muon::MSVertexRecoTool::getTracklets |
( |
const std::vector< Tracklet > & |
trks, |
|
|
const std::set< int > & |
tracklet_subset |
|
) |
| const |
|
private |
Definition at line 770 of file MSVertexRecoTool.cxx.
771 std::vector<Tracklet> returnVal;
772 for (std::set<int>::const_iterator itr = tracklet_subset.cbegin(); itr != tracklet_subset.cend(); ++itr) {
773 if ((
unsigned int)*itr > trks.size())
ATH_MSG_ERROR(
"ERROR - Index out of bounds in getTracklets");
774 returnVal.push_back(trks.at(*itr));
◆ HitCounter()
void Muon::MSVertexRecoTool::HitCounter |
( |
MSVertex * |
MSRecoVx, |
|
|
const EventContext & |
ctx |
|
) |
| const |
|
private |
Definition at line 932 of file MSVertexRecoTool.cxx.
934 int nHighOccupancy(0);
935 int stationRegion(-1);
939 if (msVtxPos.x() == 0 && msVtxPos.y() == 0 && msVtxPos.z() != 0) {
940 ATH_MSG_WARNING(
"given MSVertex has position x=y=0 and z!=0, eta() method will cause FPE, returning...");
946 if (!mdtTES.isValid())
ATH_MSG_ERROR(
"Unable to retrieve the MDT hits");
947 int nmdt(0), nmdt_inwards(0), nmdt_I(0), nmdt_E(0), nmdt_M(0), nmdt_O(0);
950 if (MDT_coll->empty())
continue;
952 Amg::Vector3D ChamberCenter = (*mdtItr)->detectorElement()->center();
953 double deta = msVtxPos.eta() - ChamberCenter.eta();
959 stationRegion =
m_idHelperSvc->mdtIdHelper().stationRegion(
id);
960 auto [tubeLayerMin, tubeLayerMax] =
m_idHelperSvc->mdtIdHelper().tubeLayerMinMax(
id);
962 double nTubes = (tubeLayerMax - tubeLayerMin + 1) * (
tubeMax - tubeMin + 1);
964 int nChHits(0), nChHits_inwards(0);
967 if (mdt->adc() < 50)
continue;
968 if (mdt->status() != 1)
continue;
969 if (mdt->localPosition()[
Trk::locR] == 0.)
continue;
971 if (mdt->globalPosition().mag() < msVtxPos.mag()) ++nChHits_inwards;
974 nmdt_inwards += nChHits_inwards;
975 double ChamberOccupancy = nChHits / nTubes;
978 if (stationRegion == 0) nmdt_I += nChHits;
979 else if (stationRegion == 1) nmdt_E += nChHits;
980 else if (stationRegion == 2) nmdt_M += nChHits;
981 else if (stationRegion == 3) nmdt_O += nChHits;
988 if (!rpcTES.isValid())
ATH_MSG_ERROR(
"Unable to retrieve the RPC hits");
989 int nrpc(0), nrpc_inwards(0), nrpc_I(0), nrpc_E(0), nrpc_M(0), nrpc_O(0);
992 stationRegion =
m_idHelperSvc->rpcIdHelper().stationRegion((*rpcItr)->identify());
993 int nChHits(0), nChHits_inwards(0);
995 double rpcEta = rpc->globalPosition().eta();
996 double rpcPhi = rpc->globalPosition().phi();
1000 if (rpc->globalPosition().mag() < msVtxPos.mag()) ++nChHits_inwards;
1002 if (DR > 1.2)
break;
1005 nrpc_inwards += nChHits_inwards;
1006 if (stationRegion == 0) nrpc_I += nChHits;
1007 else if (stationRegion == 1) nrpc_E += nChHits;
1008 else if (stationRegion == 2) nrpc_M += nChHits;
1009 else if (stationRegion == 3) nrpc_O += nChHits;
1014 if (!tgcTES.isValid())
ATH_MSG_ERROR(
"Unable to retrieve the TGC hits");
1015 int ntgc(0), ntgc_inwards(0), ntgc_I(0), ntgc_E(0), ntgc_M(0), ntgc_O(0);
1018 stationRegion =
m_idHelperSvc->tgcIdHelper().stationRegion((*tgcItr)->identify());
1019 int nChHits(0), nChHits_inwards(0);
1021 double tgcEta = tgc->globalPosition().eta();
1022 double tgcPhi = tgc->globalPosition().phi();
1026 if (tgc->globalPosition().mag() < msVtxPos.mag()) ++nChHits_inwards;
1028 if (DR > 1.2)
break;
1031 ntgc_inwards += nChHits_inwards;
1032 if (stationRegion == 0) ntgc_I += nChHits;
1033 else if (stationRegion == 1) ntgc_E += nChHits;
1034 else if (stationRegion == 2) ntgc_M += nChHits;
1035 else if (stationRegion == 3) ntgc_O += nChHits;
1039 MSRecoVx->
setNMDT(nmdt, nmdt_inwards, nmdt_I, nmdt_E, nmdt_M, nmdt_O);
1040 MSRecoVx->
setNRPC(nrpc, nrpc_inwards, nrpc_I, nrpc_E, nrpc_M, nrpc_O);
1041 MSRecoVx->
setNTGC(ntgc, ntgc_inwards, ntgc_I, ntgc_E, ntgc_M, ntgc_O);
◆ initialize()
StatusCode Muon::MSVertexRecoTool::initialize |
( |
void |
| ) |
|
|
overridevirtual |
◆ inputHandles()
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.
◆ msg() [1/2]
◆ msg() [2/2]
◆ msgLvl()
◆ MSStraightLineVx()
void Muon::MSVertexRecoTool::MSStraightLineVx |
( |
const std::vector< Tracklet > & |
trks, |
|
|
std::unique_ptr< MSVertex > & |
vtx, |
|
|
const EventContext & |
ctx |
|
) |
| const |
|
private |
Definition at line 607 of file MSVertexRecoTool.cxx.
610 std::set<std::set<int> > prelim_vx;
614 if (trks.size() > 40) {
621 for (
unsigned int i = 0;
i < trks.size() - 2; ++
i) {
622 for (
unsigned int j =
i + 1; j < trks.size() - 1; ++j) {
623 for (
unsigned int k = j + 1;
k < trks.size(); ++
k) {
624 std::set<int> tmpTracks;
631 if (MyVx.perp() < 10000 && std::abs(MyVx.z()) > 7000 && std::abs(MyVx.z()) < 15000 &&
633 prelim_vx.insert(tmpTracks);
639 if (prelim_vx.empty())
return;
643 if (trks.size() <= 20) {
644 std::set<std::set<int> > new_prelim_vx = prelim_vx;
645 std::set<std::set<int> > old_prelim_vx;
647 int foundNewVx =
true;
651 old_prelim_vx = new_prelim_vx;
652 new_prelim_vx.clear();
654 for (
std::set<std::set<int> >::
iterator itr = old_prelim_vx.begin(); itr != old_prelim_vx.end(); ++itr) {
655 for (
unsigned int i_trks = 0; i_trks < trks.size(); ++i_trks) {
656 std::set<int> tempCluster = *itr;
657 if (tempCluster.insert(i_trks).second) {
659 if (MyVx.perp() < 10000 && std::abs(MyVx.z()) > 7000 && std::abs(MyVx.z()) < 15000 &&
661 new_prelim_vx.insert(tempCluster);
662 prelim_vx.insert(tempCluster);
679 std::set<std::set<int> >
::iterator prelim_vx_max = prelim_vx.begin();
680 for (
std::set<std::set<int> >::
iterator itr = prelim_vx.begin(); itr != prelim_vx.end(); ++itr) {
681 if ((*itr).size() > (*prelim_vx_max).size()) prelim_vx_max = itr;
684 std::vector<Tracklet> tracklets =
getTracklets(trks, *prelim_vx_max);
688 for (
const Tracklet &trk : tracklets) {
689 aveX += trk.globalPosition().x();
690 aveY += trk.globalPosition().y();
694 double vxtheta = std::atan2(MyVx.x(), MyVx.z());
695 double tracklet_vxphi = std::atan2(aveY, aveX);
696 double vxphi =
vxPhiFinder(std::abs(vxtheta), tracklet_vxphi, ctx);
700 std::vector<const xAOD::TrackParticle*> vxTrackParticles;
701 for (
const Tracklet &trk : tracklets) vxTrackParticles.push_back(trk.getTrackParticle());
703 vtx = std::make_unique<MSVertex>(2, vxpos, vxTrackParticles, 1, vxTrackParticles.size(), 0, 0, 0);
◆ MSStraightLineVx_oldMethod()
void Muon::MSVertexRecoTool::MSStraightLineVx_oldMethod |
( |
const std::vector< Tracklet > & |
trks, |
|
|
std::unique_ptr< MSVertex > & |
vtx, |
|
|
const EventContext & |
ctx |
|
) |
| const |
|
private |
Definition at line 709 of file MSVertexRecoTool.cxx.
712 double aveX(0), aveY(0);
714 aveX += trk.globalPosition().x();
715 aveY += trk.globalPosition().y();
717 double vxphi = std::atan2(aveY, aveX);
720 std::vector<Tracklet> tracks =
RemoveBadTrk(trks, MyVx);
721 if (tracks.size() < 2)
return;
727 if (tracks.size() ==
Tracks.size())
break;
728 tracks = std::move(
Tracks);
731 if (tracks.size() >= 3 && MyVx.x() > 0) {
732 double vxtheta = std::atan2(MyVx.x(), MyVx.z());
733 vxphi =
vxPhiFinder(std::abs(vxtheta), vxphi, ctx);
736 std::vector<const xAOD::TrackParticle*> vxTrackParticles;
737 for (
const Tracklet &trk : tracks) vxTrackParticles.push_back(trk.getTrackParticle());
739 vtx = std::make_unique<MSVertex>(2, vxpos, vxTrackParticles, 1, (
double)vxTrackParticles.size(), 0, 0, 0);
◆ MSVxFinder()
void Muon::MSVertexRecoTool::MSVxFinder |
( |
const std::vector< Tracklet > & |
tracklets, |
|
|
std::unique_ptr< MSVertex > & |
vtx, |
|
|
const EventContext & |
ctx |
|
) |
| const |
|
private |
Definition at line 307 of file MSVertexRecoTool.cxx.
313 for (
const Tracklet &trk : tracklets) aveTrkPos += trk.globalPosition();
314 aveTrkPos /= tracklets.size();
317 double avePhi = aveTrkPos.phi();
318 double LoF = std::atan2(aveTrkPos.perp(), aveTrkPos.z());
322 std::vector<double> Rpos;
324 double LoFdist = std::abs(RadialDist /
std::sin(LoF));
330 std::array< std::vector<std::unique_ptr<Trk::TrackParameters>>, MAXPLANES> TracksForVertexing{};
331 std::array< std::vector<std::unique_ptr<Trk::TrackParameters>>, MAXPLANES> TracksForErrors{};
332 std::array< std::vector<bool>, MAXPLANES> isNeutralTrack{};
334 for (
const Tracklet &trk : tracklets) {
339 trk.globalPosition().perp() *
std::sin(avePhi),
340 trk.globalPosition().z());
341 double x0 = trkgpos.x();
342 double y0 = trkgpos.y();
343 double r0 = trkgpos.perp();
347 double NominalTrkAng = anglesign * NominalAngle;
348 double MaxTrkAng = anglesign * RotationAngle;
351 for (
int k = 0;
k < nplanes; ++
k) {
353 if (Rpos[
k] > trk.globalPosition().perp())
break;
360 double DelR = std::hypot(x0 - Xp, y0 - Yp) /
std::cos(NominalAngle);
361 double X1 = DelR *
std::cos(NominalTrkAng + avePhi) + Xp;
362 double Y1 = DelR *
std::sin(NominalTrkAng + avePhi) + Yp;
363 double R1 = std::hypot(X1, Y1);
367 double Dirmag = std::hypot(X1 - Xp, Y1 - Yp);
368 double Xdir = (X1 - Xp) / Dirmag;
369 double Ydir = (Y1 - Yp) / Dirmag;
370 double trkpx = Xdir * trk.momentum().perp();
371 double trkpy = Ydir * trk.momentum().perp();
372 double trkpz = trk.momentum().z();
375 double charge = trk.charge();
376 if (std::abs(
charge) < 0.1) {
378 isNeutralTrack[
k].push_back(
true);
380 isNeutralTrack[
k].push_back(
false);
386 TracksForVertexing[
k].push_back(std::
make_unique<
Trk::Perigee>(0., 0., trkmomentum.phi(), trkmomentum.theta(),
charge / trkmomentum.
mag(),
Trk::PerigeeSurface(trkgpos), covariance));
389 double xp = Rpos[
k] * std::
cos(avePhi);
390 double yp = Rpos[
k] * std::
sin(avePhi);
391 double delR = std::hypot(x0 - xp, y0 - yp) / std::
cos(RotationAngle);
392 double x1 = delR * std::
cos(MaxTrkAng + avePhi) + xp;
393 double y1 = delR * std::
sin(MaxTrkAng + avePhi) + yp;
394 double r1 = std::hypot(
x1,
y1);
395 double norm = r0 / r1;
398 double dirmag = std::hypot(
x1 - xp,
y1 - yp);
399 double xdir = (
x1 - xp) / dirmag;
400 double ydir = (
y1 - yp) / dirmag;
409 TracksForErrors[
k].push_back(std::
make_unique<
Trk::Perigee>(0., 0., trkerrmom.phi(), trkerrmom.theta(),
charge / trkerrmom.
mag(),
Trk::PerigeeSurface(trkerrpos), covariance2));
414 if (nTrkToVertex < 3) return;
417 bool boundaryCheck = true;
418 std::
array<std::
vector<
double>, MAXPLANES> ExtrapZ{};
419 std::array<std::vector<double>, MAXPLANES> dlength{};
420 std::array<std::vector<std::pair<unsigned int, unsigned int>>, MAXPLANES> UsedTracks{};
421 std::array<std::vector<bool>, MAXPLANES> ExtrapSuc{};
422 std::vector<std::unique_ptr<MSVertex>> vertices; vertices.reserve(nplanes);
423 std::array<std::vector<double>, MAXPLANES>
sigmaZ{};
424 std::array<std::vector<Amg::Vector3D>, MAXPLANES> pAtVx{};
427 for (
int k = 0;
k < nplanes; ++
k) {
428 double rpos = Rpos[
k];
429 for (
unsigned int i = 0;
i < TracksForVertexing[
k].size(); ++
i) {
431 if (TracksForVertexing[
k].
size() < 3)
break;
434 surfaceTransformMatrix.setIdentity();
437 std::unique_ptr<const Trk::TrackParameters> extrap_par(
445 if (isNeutralTrack[
k].at(
i)) {
448 double extrapRdist = TracksForVertexing[
k].at(
i)->position().perp() - Rpos[
k];
450 double ExtrapErr =
sz;
452 ExtrapSuc[
k].push_back(
false);
454 ExtrapSuc[
k].push_back(
true);
455 std::pair<unsigned int, unsigned int> trkmap(ExtrapZ[
k].
size(),
i);
456 UsedTracks[
k].push_back(trkmap);
457 ExtrapZ[
k].push_back(extrap->localPosition().y());
459 pAtVx[
k].push_back(extrap->momentum());
460 dlength[
k].push_back(0);
467 srfTransMat2.setIdentity();
469 std::unique_ptr<const Trk::TrackParameters> extrap_par2(
476 double zdiff = extrap->localPosition().y() - extrap2->localPosition().y();
477 double ExtrapErr = std::hypot(
sz, zdiff);
479 ExtrapSuc[
k].push_back(
false);
482 ExtrapSuc[
k].push_back(
true);
483 std::pair<unsigned int, unsigned int> trkmap(ExtrapZ[
k].
size(),
i);
484 UsedTracks[
k].push_back(trkmap);
485 ExtrapZ[
k].push_back(extrap->localPosition().y());
487 pAtVx[
k].push_back(extrap->momentum());
488 dlength[
k].push_back(zdiff);
491 ExtrapSuc[
k].push_back(
false);
496 ExtrapSuc[
k].push_back(
false);
502 std::array<std::vector<Amg::Vector3D>, MAXPLANES> trkp{};
504 for (
int k = 0;
k < nplanes; ++
k) {
505 if (ExtrapZ[
k].
size() < 3)
continue;
509 double aveZpos(0), posWeight(0);
510 for (
unsigned int i = 0;
i < ExtrapZ[
k].size(); ++
i) {
511 double ExtrapErr = std::hypot(
sigmaZ[
k][
i], dlength[
k][
i], dzLoF);
512 if (isNeutralTrack[
k][
i]) ExtrapErr = std::hypot(
sigmaZ[
k][
i], dzLoF);
513 aveZpos += ExtrapZ[
k][
i] /
std::pow(ExtrapErr,2);
514 posWeight += 1. /
std::pow(ExtrapErr,2);
517 zLoF = aveZpos / posWeight;
518 double zpossigma(dzLoF), Chi2(0), Chi2Prob(-1);
519 unsigned int Nitr(0);
520 std::vector<unsigned int> vxtracks;
521 std::vector<bool> blocklist(ExtrapZ[
k].
size(),
false);
525 vxtracks.clear(); trkp[
k].clear();
527 double tmpzLoF(0), tmpzpossigma(0), tmpchi2(0), posWeight(0), worstdelz(0);
528 unsigned int iworst(0);
530 for (
unsigned int i = 0;
i < ExtrapZ[
k].size(); ++
i) {
531 if (blocklist[
i])
continue;
532 trkp[
k].push_back(pAtVx[
k][
i]);
533 double delz = zLoF - ExtrapZ[
k][
i];
534 double ExtrapErr = std::hypot(
sigmaZ[
k][
i], dlength[
k][
i], dzLoF);
536 if (trkchi2 > worstdelz) {
540 tmpzLoF += ExtrapZ[
k][
i] /
std::pow(ExtrapErr,2);
541 posWeight += 1. /
std::pow(ExtrapErr,2);
547 if (tmpnTrks < 3)
break;
548 tmpzpossigma = std::sqrt(tmpzpossigma / (
double)tmpnTrks);
549 zLoF = tmpzLoF / posWeight;
550 zpossigma = tmpzpossigma;
551 double testChi2 = TMath::Prob(tmpchi2, tmpnTrks - 1);
553 blocklist[iworst] =
true;
558 for (
unsigned int i = 0;
i < ExtrapZ[
k].size(); ++
i) {
559 double delz = zLoF - ExtrapZ[
k][
i];
560 double ExtrapErr = std::hypot(
sigmaZ[
k][
i], dlength[
k][
i], dzLoF);
561 double trkErr = std::hypot(ExtrapErr, zpossigma) + 0.001;
562 double trkNsigma = std::abs(delz / trkErr);
563 if (trkNsigma < 3) vxtracks.push_back(
i);
567 if (Nitr >= (ExtrapZ[
k].
size() - 3))
break;
571 if (vxtracks.size() < 3)
continue;
574 std::vector<const xAOD::TrackParticle*> vxTrackParticles;
575 vxTrackParticles.reserve(vxtracks.size());
577 for (
unsigned int i = 0;
i < UsedTracks[
k].size(); ++
i) {
578 if ((*vxtrk) != UsedTracks[
k].at(
i).
first)
continue;
585 vertices.push_back(std::make_unique<MSVertex>(1, position, vxTrackParticles, Chi2Prob, Chi2, 0, 0, 0));
588 if (vertices.empty())
return;
592 unsigned int bestVx(0);
593 for (
unsigned int k = 1;
k < vertices.size(); ++
k) {
594 if (vertices[
k]->getChi2Probability() <
m_VxChi2ProbCUT || vertices[
k]->getNTracks() < 3)
continue;
595 if (vertices[
k]->getNTracks() < vertices[bestVx]->getNTracks())
continue;
596 if (vertices[
k]->getNTracks() == vertices[bestVx]->getNTracks() &&
597 vertices[
k]->getChi2Probability() < vertices[bestVx]->getChi2Probability())
601 vtx = std::make_unique<MSVertex>(*vertices[bestVx]);
◆ outputHandles()
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.
◆ RemoveBadTrk()
Definition at line 745 of file MSVertexRecoTool.cxx.
748 if (Vx.x() == 0 && Vx.z() == 0)
return tracks;
751 unsigned int iWorstTrk = -1;
752 for (
unsigned int i = 0;
i < tracks.size(); ++
i) {
753 double TrkSlope =
std::tan(tracks.at(
i).getML1seg().alpha());
754 double TrkInter = tracks.at(
i).getML1seg().globalPosition().perp() - tracks.at(
i).getML1seg().globalPosition().z() * TrkSlope;
755 double dist = std::abs((TrkSlope * Vx.z() - Vx.x() + TrkInter) / std::hypot(TrkSlope, 1));
763 std::vector<Tracklet>
Tracks;
764 for (
unsigned int i = 0;
i < tracks.size(); ++
i) {
765 if (
i != iWorstTrk)
Tracks.push_back(tracks.at(
i));
◆ renounce()
◆ renounceArray()
◆ sysInitialize()
◆ sysStart()
Handle START transition.
We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.
◆ updateVHKA()
◆ VxMinQuad()
Definition at line 840 of file MSVertexRecoTool.cxx.
841 double s(0.),
sx(0.),
sy(0.), sxy(0.), sxx(0.),
d(0.);
845 double TrkInter =
track.getML1seg().globalPosition().perp() -
track.getML1seg().globalPosition().z() * TrkSlope;
858 double Rpos = (sxx *
sy -
sx * sxy) /
d;
859 double Zpos = (
sx *
sy -
s * sxy) /
d;
◆ vxPhiFinder()
double Muon::MSVertexRecoTool::vxPhiFinder |
( |
const double |
theta, |
|
|
const double |
phi, |
|
|
const EventContext & |
ctx |
|
) |
| const |
|
private |
Definition at line 869 of file MSVertexRecoTool.cxx.
870 double nmeas(0), sinphi(0), cosphi(0);
872 ATH_MSG_WARNING(
"vxPhiFinder() called with theta=" << theta <<
" and phi=" << phi <<
", return 0");
874 }
else if (theta >
M_PI) {
875 ATH_MSG_WARNING(
"vxPhiFinder() called with theta=" << std::setprecision(15) << theta <<
" and phi=" << phi
876 <<
", (theta>M_PI), return 0");
879 double tanThetaHalf =
std::tan(0.5 * theta);
880 if (tanThetaHalf <= 0) {
881 ATH_MSG_WARNING(
"vxPhiFinder() called with theta=" << std::setprecision(15) << theta <<
" and phi=" << phi
882 <<
", resulting in tan(0.5*theta)<=0, return 0");
886 if (std::abs(eta) < 1.5) {
888 if (!rpcTES.isValid()) {
894 if (!
m_idHelperSvc->rpcIdHelper().measuresPhi(rpc->identify()))
continue;
895 double rpcEta = rpc->globalPosition().eta();
896 double rpcPhi = rpc->globalPosition().phi();
898 if (DR >= 0.6)
continue;
905 if (std::abs(eta) > 0.5) {
907 if (!tgcTES.isValid()) {
913 if (!
m_idHelperSvc->tgcIdHelper().isStrip(tgc->identify()))
continue;
914 double tgcEta = tgc->globalPosition().eta();
915 double tgcPhi = tgc->globalPosition().phi();
917 if (DR >= 0.6)
continue;
926 if (nmeas > 0) vxphi = std::atan2(sinphi / nmeas, cosphi / nmeas);
◆ m_accMDT_str
const std::vector<std::string> Muon::MSVertexRecoTool::m_accMDT_str = {"nMDT", "nMDT_inwards", "nMDT_I", "nMDT_E", "nMDT_M", "nMDT_O"} |
|
private |
◆ m_accRPC_str
const std::vector<std::string> Muon::MSVertexRecoTool::m_accRPC_str = {"nRPC", "nRPC_inwards", "nRPC_I", "nRPC_E", "nRPC_M", "nRPC_O"} |
|
private |
◆ m_accTGC_str
const std::vector<std::string> Muon::MSVertexRecoTool::m_accTGC_str = {"nTGC", "nTGC_inwards", "nTGC_I", "nTGC_E", "nTGC_M", "nTGC_O"} |
|
private |
◆ m_BarrelTrackletUncert
Gaudi::Property<double> Muon::MSVertexRecoTool::m_BarrelTrackletUncert {this, "BarrelTrackletUncertainty", 0.1, "probability of considering a barrel tracklet in the clustering for the systematics reconstruction"} |
|
private |
◆ m_ChamberOccupancyMin
Gaudi::Property<double> Muon::MSVertexRecoTool::m_ChamberOccupancyMin {this, "MinimumHighOccupancy", 0.25, "minimum occupancy to be considered 'high occupancy'"} |
|
private |
◆ m_ClusterdEta
Gaudi::Property<double> Muon::MSVertexRecoTool::m_ClusterdEta {this, "ClusterdEta", 0.7, "eta extend of cluster"} |
|
private |
◆ m_ClusterdPhi
Gaudi::Property<double> Muon::MSVertexRecoTool::m_ClusterdPhi {this, "ClusterdPhi", M_PI / 3.*Gaudi::Units::radian, "phi extend of cluster"} |
|
private |
◆ m_detStore
◆ m_doSystematics
Gaudi::Property<bool> Muon::MSVertexRecoTool::m_doSystematics {this, "DoSystematicUncertainty", false, "find vertex systematic uncertainty"} |
|
private |
◆ m_EndcapTrackletUncert
Gaudi::Property<double> Muon::MSVertexRecoTool::m_EndcapTrackletUncert {this, "EndcapTrackletUncertainty", 0.1, "probability of considering a endcap tracklet in the clustering for the systematics reconstruction"} |
|
private |
◆ m_evtStore
◆ m_extrapolator
◆ m_idHelperSvc
◆ m_maxClusterTracklets
Gaudi::Property<unsigned int> Muon::MSVertexRecoTool::m_maxClusterTracklets {this, "MaxClusterTracklets", 50, "maximal number of tracklets in a cluster"} |
|
private |
◆ m_maxGlobalTracklets
Gaudi::Property<unsigned int> Muon::MSVertexRecoTool::m_maxGlobalTracklets {this, "MaxGlobalTracklets", 40, "maximal number of tracklets in an event"} |
|
private |
◆ m_MaxLxyEndcap
Gaudi::Property<double> Muon::MSVertexRecoTool::m_MaxLxyEndcap {this, "MaxLxyEndcap", 10000*Gaudi::Units::millimeter, "maximal transverse distance for endcap vertex in mm"} |
|
private |
◆ m_MaxTollDist
Gaudi::Property<double> Muon::MSVertexRecoTool::m_MaxTollDist {this, "MaxTollDist", 300.*Gaudi::Units::millimeter, "maximal distance between tracklet and endcap vertex in mm"} |
|
private |
◆ m_MaxTrackUncert
Gaudi::Property<double> Muon::MSVertexRecoTool::m_MaxTrackUncert {this, "MaxTrackUncert", 200.*Gaudi::Units::millimeter, "maximal tracklet uncertainty in mm"} |
|
private |
◆ m_MaxZEndcap
Gaudi::Property<double> Muon::MSVertexRecoTool::m_MaxZEndcap {this, "MaxZEndcap", 14000*Gaudi::Units::millimeter, "maximal longitudinal distance for endcap vertex in mm"} |
|
private |
◆ m_mdtTESKey
◆ m_minHighOccupancyChambers
Gaudi::Property<int> Muon::MSVertexRecoTool::m_minHighOccupancyChambers {this, "MinimumNumberOfHighOccupancy", 2, "number of high occupancy chambers required to be signal like"} |
|
private |
◆ m_MinMDTHits
Gaudi::Property<int> Muon::MSVertexRecoTool::m_MinMDTHits {this, "MinMDTHits", 250, "minimal number of MDT hits"} |
|
private |
◆ m_MinTrigHits
Gaudi::Property<int> Muon::MSVertexRecoTool::m_MinTrigHits {this, "MinTrigHits", 200, "minimal number of trigger chamber (RPC+TGC) hits"} |
|
private |
◆ m_MinZEndcap
Gaudi::Property<double> Muon::MSVertexRecoTool::m_MinZEndcap {this, "MinZEndcap", 8000*Gaudi::Units::millimeter, "minimal longitudinal distance for endcap vertex in mm"} |
|
private |
◆ m_nMDT_accs
◆ m_nMDTHitsEta
Gaudi::Property<double> Muon::MSVertexRecoTool::m_nMDTHitsEta {this, "nMDTHitsEta", 0.6, "max eta extend between vertex and MDT hit"} |
|
private |
◆ m_nMDTHitsPhi
Gaudi::Property<double> Muon::MSVertexRecoTool::m_nMDTHitsPhi {this, "nMDTHitsPhi", 0.6*Gaudi::Units::radian, "max phi extend between vertex and MDT hit"} |
|
private |
◆ m_nRPC_accs
◆ m_nTGC_accs
◆ m_nTrigHitsdR
Gaudi::Property<double> Muon::MSVertexRecoTool::m_nTrigHitsdR {this, "nTrigHitsdR", 0.6*Gaudi::Units::radian, "max delta R between vertex and trigger chamber (RPC or TGC) hit"} |
|
private |
◆ m_rndmSvc
◆ m_rpcTESKey
◆ m_tgcTESKey
◆ m_TrackPhiAngle
Gaudi::Property<double> Muon::MSVertexRecoTool::m_TrackPhiAngle {this, "TrackPhiAngle", 0.0*Gaudi::Units::radian, "nominal phi angle for tracklets in rad"} |
|
private |
◆ m_TrackPhiRotation
Gaudi::Property<double> Muon::MSVertexRecoTool::m_TrackPhiRotation {this, "TrackPhiRotation", 0.2*Gaudi::Units::radian, "angle to rotate tracklets by for uncertainty estimate in rad"} |
|
private |
◆ m_useOldMSVxEndcapMethod
Gaudi::Property<bool> Muon::MSVertexRecoTool::m_useOldMSVxEndcapMethod {this, "UseOldMSVxEndcapMethod", false, "use old vertex reconstruction in the endcaps "} |
|
private |
◆ m_varHandleArraysDeclared
◆ m_VertexMaxRadialPlane
Gaudi::Property<double> Muon::MSVertexRecoTool::m_VertexMaxRadialPlane {this, "VertexMaxRadialPlane", 7000.*Gaudi::Units::millimeter, "position of last radial plane in mm"} |
|
private |
◆ m_VertexMinRadialPlane
Gaudi::Property<double> Muon::MSVertexRecoTool::m_VertexMinRadialPlane {this, "VertexMinRadialPlane", 3500.*Gaudi::Units::millimeter, "position of first radial plane in mm"} |
|
private |
◆ m_vhka
◆ m_VxChi2ProbCUT
Gaudi::Property<double> Muon::MSVertexRecoTool::m_VxChi2ProbCUT {this, "VxChi2ProbabilityCut", 0.05, "chi^2 probability cut"} |
|
private |
◆ m_VxPlaneDist
Gaudi::Property<double> Muon::MSVertexRecoTool::m_VxPlaneDist {this, "VertexPlaneDist", 200.*Gaudi::Units::millimeter, "distance between two adjacent planes in mm"} |
|
private |
◆ m_xAODContainerKey
The documentation for this class was generated from the following files:
JetConstituentVector::iterator iterator
void setSeed(const std::string &algName, const EventContext &ctx)
Set the random seed using a string (e.g.
std::vector< const xAOD::TrackParticle * > Tracks
void setPosition(const Amg::Vector3D &position)
Sets the 3-position.
Const iterator class for DataVector/DataList.
const xAOD::TrackParticle * getTrackParticle() const
void setFitQuality(float chiSquared, float numberDoF)
Set the 'Fit Quality' information.
Vertex_v1 Vertex
Define the latest version of the vertex class.
void setNTGC(const int, const int, const int, const int, const int, const int)
Helper class to provide type-safe access to aux data.
Scalar perp() const
perp method - perpenticular length
Dummy class used to allow special convertors to be called for surfaces owned by a detector element.
StoreGateSvc_t m_evtStore
Pointer to StoreGate (event store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
void setNMDT(const int, const int, const int, const int, const int, const int)
double deltaPhi(double phiA, double phiB)
delta Phi in range [-pi,pi[
#define AmgSymMatrix(dim)
virtual void setOwner(IDataHandleHolder *o)=0
void setVertexType(VxType::VertexType vType)
Set the type of the vertex.
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
void addTrackAtVertex(const ElementLink< TrackParticleContainer > &tr, float weight=1.0)
Add a new track to the vertex.
Class to represent RPC measurements.
double deltaR(double rapidity1, double phi1, double rapidity2, double phi2)
from bare bare rapidity,phi
@ SecVtx
Secondary vertex.
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
bool dPhi(const xAOD::TauJet &tau, const xAOD::TauTrack &track, double &out)
Eigen::Affine3d Transform3D
void setNRPC(const int, const int, const int, const int, const int, const int)
const double r0
electron radius{cm}
Point Norm(const Point &a)
StoreGateSvc_t m_detStore
Pointer to StoreGate (detector store by default)
Template to hold collections of MuonPrepRawData objects.
constexpr std::enable_if_t< is_bitmask_v< E >, E & > set(E &lhs, E rhs)
Convenience function to set bits in a class enum bitmask.
virtual void renounce()=0
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
Ensure that the ATLAS eigen extensions are properly loaded.
Definition of ATLAS Math & Geometry primitives (Amg)
A wrapper class for event-slot-local random engines.
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 ...
double charge(const T &p)
value_type push_back(value_type pElem)
Add an element to the end of the collection.
void makePrivateStore()
Create a new (empty) private store for this object.
Class to represent measurements from the Monitored Drift Tubes.
Eigen::Matrix< double, 3, 1 > Vector3D
CLHEP::HepRandomEngine * getEngine(const EventContext &ctx) const
Retrieve the random engine corresponding to the provided EventContext.
Class describing a Vertex.
#define ATH_MSG_WARNING(x)
Class to represent TGC measurements.
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
Class describing a TrackParticle.
bool dEta(const xAOD::TauJet &tau, const xAOD::TauTrack &track, double &out)
constexpr int pow(int base, int exp) noexcept
Scalar mag() const
mag method
const Amg::Vector3D & getPosition() const