 |
ATLAS Offline Software
|
ID seeded Stau reconstruction.
More...
#include <MuonStauRecoTool.h>
|
| MuonStauRecoTool (const std::string &type, const std::string &name, const IInterface *parent) |
| Default AlgTool functions. More...
|
|
virtual | ~MuonStauRecoTool ()=default |
|
virtual StatusCode | initialize () override |
|
virtual void | extend (const InDetCandidateCollection &inDetCandidates, InDetCandidateToTagMap *tagMap, TrackCollection *combTracks, TrackCollection *meTracks, Trk::SegmentCollection *segments, const EventContext &ctx) const override |
| IMuonCombinedInDetExtensionTool interface: extend ID candidate. More...
|
|
virtual void | extendWithPRDs (const InDetCandidateCollection &inDetCandidates, InDetCandidateToTagMap *tagMap, IMuonCombinedInDetExtensionTool::MuonPrdData prdData, TrackCollection *combTracks, TrackCollection *meTracks, Trk::SegmentCollection *segments, const EventContext &ctx) const override |
|
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 |
|
|
void | handleCandidate (const EventContext &ctx, const InDetCandidate &inDetCandidate, InDetCandidateToTagMap *tagMap, TrackCollection *combTracks, Trk::SegmentCollection *segments) const |
| handle a single candidate More...
|
|
void | associateHoughMaxima (const EventContext &ctx, LayerData &layerData) const |
| associate Hough maxima to intersection More...
|
|
void | extractRpcTimingFromMaximum (const Muon::MuonSystemExtension::Intersection &intersection, MaximumData &maximumData) const |
| extract RPC hit timing More...
|
|
void | createRpcTimeMeasurementsFromClusters (const Muon::MuonSystemExtension::Intersection &intersection, const std::vector< Muon::RpcClusterObj > &clusterObjects, RpcTimeMeasurementVec &rpcTimeMeasurements) const |
| create Rpc hit timing for a set of clusters More...
|
|
void | findSegments (const Muon::MuonSystemExtension::Intersection &intersection, MaximumData &maximumData, std::vector< std::shared_ptr< const Muon::MuonSegment >> &t0fittedSegments, const ToolHandle< Muon::IMuonPRDSelectionTool > &muonPRDSelectionTool, const ToolHandle< Muon::IMuonSegmentMaker > &segmentMaker, float beta=1.) const |
| find segments for a given maximum More...
|
|
bool | extractTimeMeasurements (const EventContext &ctx, const Muon::MuonSystemExtension &muonSystemExtension, AssociatedData &associatedData) const |
| associate Hough maxima and associate time measurements More...
|
|
bool | createCandidates (const AssociatedData &associatedData, CandidateVec &candidates) const |
| create candidates from the beta seeds More...
|
|
void | extendCandidates (CandidateVec &candidates, std::set< const MaximumData * > &usedMaximumData, LayerDataVec::const_iterator it, LayerDataVec::const_iterator it_end) const |
| extend a CandidateVec with the next LayerData More...
|
|
void | getBetaSeeds (MaximumData &maximumData) const |
| calculate the beta seeds for a give MaximumData More...
|
|
bool | extractTimeHits (const MaximumData &maximumData, Muon::TimePointBetaFitter::HitVec &hits, const BetaSeed *seed=0) const |
| extract hits for the beta fit, returns true if hits were added More...
|
|
bool | refineCandidates (const EventContext &ctx, CandidateVec &candidates) const |
| refine candidates: find segments for the given beta More...
|
|
bool | combineCandidates (const EventContext &ctx, const xAOD::TrackParticle &indetTrackParticle, CandidateVec &candidates) const |
| combine reconstruction More...
|
|
bool | resolveAmbiguities (CandidateVec &candidates) const |
| resolve ambiguities between the candidates More...
|
|
void | addTag (const InDetCandidate &inDetCandidate, Candidate &candidate, InDetCandidateToTagMap *tagMap, TrackCollection *combTracks, Trk::SegmentCollection *segments) const |
| create final tag object and add it to the inDetCandidate More...
|
|
void | extractTimeMeasurementsFromTrack (const EventContext &ctx, Candidate &candidate) const |
| extract time measurements from the track associated with the candidate More...
|
|
std::unique_ptr< TruthInfo > | getTruth (const xAOD::TrackParticle &indetTrackParticle) const |
| extract truth from the indetTrackParticle More...
|
|
bool | selectTruth (const TruthInfo *truthInfo) const |
| if truth tracking is enabled, return whether the pdg is selected More...
|
|
void | addCandidatesToNtuple (const xAOD::TrackParticle &indetTrackParticle, const CandidateVec &candidates, int stage) const |
| helper function to add Candidate to ntuple More...
|
|
bool | processMuonSystemExtension (const xAOD::TrackParticle &indetTrackParticle, const Muon::MuonSystemExtension &muonSystemExtension, CandidateVec &candidates) |
| match extension to Hough maxima, extract time measurements, create candidates, run segment finding More...
|
|
void | mdtTimeCalibration (const Identifier &id, float &time, float &error) const |
|
void | rpcTimeCalibration (const Identifier &id, float &time, float &error) const |
|
void | segmentTimeCalibration (const Identifier &id, float &time, float &error) const |
|
float | calculateTof (const float beta, const float dist) const |
| Calcualte for zero betas. More...
|
|
float | calculateBeta (const float time, const float dist) const |
| In cases of invalid times just return an phyisical value of 20 times the speed of light The subsequent checks remove the attempt by default then. More...
|
|
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::ReadHandleKey< Muon::HoughDataPerSectorVec > | m_houghDataPerSectorVecKey |
| storegate More...
|
|
ServiceHandle< Muon::IMuonIdHelperSvc > | m_idHelperSvc {this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"} |
|
ServiceHandle< Muon::IMuonEDMHelperSvc > | m_edmHelperSvc |
|
PublicToolHandle< Muon::MuonEDMPrinterTool > | m_printer {this, "MuonEDMPrinterTool", ""} |
|
ToolHandle< Muon::IMuonSegmentMaker > | m_segmentMaker {this, "MuonSegmentMaker", "Muon::DCMathSegmentMaker/DCMathSegmentMaker"} |
|
ToolHandle< Muon::IMuonSegmentMaker > | m_segmentMakerT0Fit |
|
ToolHandle< Muon::IMuonLayerSegmentMatchingTool > | m_segmentMatchingTool |
|
ToolHandle< Muon::IMuonRecoValidationTool > | m_recoValidationTool {this, "MuonRecoValidationTool", ""} |
|
ToolHandle< Trk::ITrackAmbiguityProcessorTool > | m_trackAmbibuityResolver |
|
ToolHandle< Muon::IMuonHitTimingTool > | m_hitTimingTool {this, "MuonHitTimingTool", "Muon::MuonHitTimingTool/MuonHitTimingTool"} |
|
ToolHandle< Muon::IMuonPRDSelectionTool > | m_muonPRDSelectionTool {this, "MuonPRDSelectionTool", ""} |
|
ToolHandle< Muon::IMuonPRDSelectionTool > | m_muonPRDSelectionToolStau {this, "MuonPRDSelectionToolStau", ""} |
|
ToolHandle< Muon::IMdtDriftCircleOnTrackCreator > | m_mdtCreator |
|
ToolHandle< Muon::IMdtDriftCircleOnTrackCreator > | m_mdtCreatorStau |
|
ToolHandle< MuonCombined::MuonInsideOutRecoTool > | m_insideOutRecoTool |
|
ToolHandle< Trk::IUpdator > | m_updator {this, "Updator", "Trk::KalmanUpdator/KalmanUpdator"} |
|
SG::ReadCondHandleKey< MuonCalib::MdtCalibDataContainer > | m_calibDbKey |
|
Muon::MuonSectorMapping | m_muonSectorMapping |
|
Gaudi::Property< bool > | m_doSummary {this, "DoSummary", false, "enable summary output"} |
|
Gaudi::Property< bool > | m_useTruthMatching {this, "UseTruthMatching", false, "enable usage of truth info for reconstruction"} |
|
Gaudi::Property< bool > | m_doTruth {this, "DoTruth", false, "enable truth matching"} |
|
Gaudi::Property< bool > | m_segmentMDTT {this, "UseSegmentMDTT", true} |
|
Gaudi::Property< bool > | m_ignoreSiAssocated {this, "IgnoreSiAssociatedCandidates", true} |
|
Gaudi::Property< std::vector< int > > | m_pdgsToBeConsidered {this, "ConsideredPDGs", {}, "PDG IDs considered in truth matching"} |
|
Gaudi::Property< double > | m_ptThreshold {this, "PtThreshold", 10000} |
|
Gaudi::Property< double > | m_houghAssociationPullCut {this, "HoughAssociationPullCut", 5} |
|
Gaudi::Property< double > | m_mdttBetaAssociationCut {this, "MDTTAssocationCut", 0.4} |
|
Gaudi::Property< double > | m_rpcBetaAssociationCut {this, "RPCAssocationCut", 0.2} |
|
Gaudi::Property< double > | m_segmentBetaAssociationCut {this, "SegmentAssocationCut", 0.2} |
|
Gaudi::Property< bool > | m_addMDTExtrasMuGirlLowBeta {this, "AddMDTExtrasMuGirlLowBeta", false} |
|
std::set< int > | m_selectedPdgs |
|
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 |
|
ID seeded Stau reconstruction.
Steps:
- Extrapolate ID track to muon system
- associate Hough maxima in road around ID track
Definition at line 54 of file MuonStauRecoTool.h.
◆ CandidateVec
◆ LayerDataVec
◆ MaximumDataVec
◆ MaximumVec
◆ PhiMaximumVec
◆ RpcTimeMeasurementVec
◆ StoreGateSvc_t
◆ MuonStauRecoTool()
MuonCombined::MuonStauRecoTool::MuonStauRecoTool |
( |
const std::string & |
type, |
|
|
const std::string & |
name, |
|
|
const IInterface * |
parent |
|
) |
| |
◆ ~MuonStauRecoTool()
virtual MuonCombined::MuonStauRecoTool::~MuonStauRecoTool |
( |
| ) |
|
|
virtualdefault |
◆ addCandidatesToNtuple()
helper function to add Candidate to ntuple
Definition at line 1441 of file MuonStauRecoTool.cxx.
1444 ATH_MSG_WARNING(
"You are calling the non thread-safe MuonRecoValidationTool with multiple threads, will most likely crash");
1452 float chi2ndof = -1.;
1453 if (candidate->finalBetaFitResult.status != 0) {
1454 ntimes = candidate->stauHits.size();
1455 beta = candidate->finalBetaFitResult.beta;
1456 chi2ndof = candidate->finalBetaFitResult.chi2PerDOF();
1457 }
else if (candidate->betaFitResult.status != 0) {
1458 ntimes = candidate->hits.size();
1459 beta = candidate->betaFitResult.beta;
1460 chi2ndof = candidate->betaFitResult.chi2PerDOF();
1463 beta = candidate->betaSeed.beta;
1466 if (candidate->combinedTrack)
ATH_MSG_DEBUG(
"candidate has combined track");
1467 m_recoValidationTool->addMuonCandidate(indetTrackParticle, candidate->muonCandidate.get(), candidate->combinedTrack.get(),
◆ addTag()
create final tag object and add it to the inDetCandidate
Definition at line 695 of file MuonStauRecoTool.cxx.
701 combTracks->push_back(candidate.combinedTrack.release());
703 std::vector<ElementLink<Trk::SegmentCollection>> segmentLinks;
704 for (
const auto&
layer : candidate.allLayers) {
708 segmentLinks.push_back(segLink);
716 tag->setMuBeta(candidate.betaFitResult.beta);
719 std::unique_ptr<MuGirlNS::StauExtras> stauExtras = std::make_unique<MuGirlNS::StauExtras>();
720 stauExtras->
betaAll = candidate.betaFitResult.beta;
721 stauExtras->
betaAllt = candidate.finalBetaFitResult.beta;
722 stauExtras->
hits = candidate.stauHits;
728 tag->setStauExtras(std::move(stauExtras));
734 <<
" candidate: beta fit result: beta " << candidate.betaFitResult.beta <<
" chi2/ndof "
735 << candidate.betaFitResult.chi2PerDOF() <<
" segments" << segmentLinks.size();
739 <<
" track " <<
m_printer->print(**comblink) << std::endl
745 tagMap->addEntry(&indetCandidate,
tag);
◆ associateHoughMaxima()
associate Hough maxima to intersection
Definition at line 1301 of file MuonStauRecoTool.cxx.
1313 if (!houghDataPerSectorVec.isValid()) {
1319 if (
static_cast<int>(houghDataPerSectorVec->vec.size()) <= sector - 1) {
1321 <<
" larger than the available sectors in the Hough tool: " << houghDataPerSectorVec->vec.size());
1330 if (houghDataPerSector.
maxVec.size() <= layHash) {
1331 ATH_MSG_WARNING(
" houghDataPerSector.maxVec.size() smaller than hash " << houghDataPerSector.
maxVec.size() <<
" hash "
1336 if (maxVec.empty())
return;
1348 float errx =
intersection.trackParameters->covariance() ?
1350 float x = barrelLike ?
z :
r;
1351 float y = barrelLike ?
r :
z;
1352 float theta = std::atan2(
y,
x);
1356 ATH_MSG_DEBUG(
" Got Phi Hough maxima " << phiMaxVec.size() <<
" phi " << phi);
1360 std::vector<std::shared_ptr<const Muon::MuonClusterOnTrack>>&
clusters) {
1362 if (cluster)
clusters.push_back(std::move(cluster));
1367 std::vector<std::shared_ptr<const Muon::MuonClusterOnTrack>> phiClusterOnTracks;
1368 Muon::MuonLayerHoughTool::PhiMaximumVec::const_iterator pit = phiMaxVec.begin();
1369 Muon::MuonLayerHoughTool::PhiMaximumVec::const_iterator pit_end = phiMaxVec.end();
1370 for (; pit != pit_end; ++pit) {
1372 for (
const std::shared_ptr<MuonHough::PhiHit>& hit : maximum.
hits) {
1388 <<
"," <<
y <<
") errorx " << errx <<
" "
1389 <<
" angle " << theta);
1392 for (
const auto& mit : maxVec) {
1394 if (std::find_if(maximum.
hits.begin(),maximum.
hits.end(),
1395 [](
const std::shared_ptr<MuonHough::Hit>& hit){
1396 return hit->prd && (hit->prd->type(Trk::PrepRawDataType::sTgcPrepData) ||
1397 hit->prd->type(Trk::PrepRawDataType::MMPrepData));
1398 }) != maximum.
hits.end())
continue;
1407 const float pullUncert = std::sqrt(errx * errx + maxwidth * maxwidth / 12.);
1408 float pull =
residual / (pullUncert > std::numeric_limits<float>::epsilon() ? pullUncert : 1.) ;
1411 <<
" pull " <<
pull <<
" angle " << maximum.
theta <<
" residual " << residualTheta);
1416 if (std::abs(
pull) > 5)
continue;
1417 layerData.maximumDataVec.emplace_back(std::make_shared<MaximumData>(
intersection, &maximum, phiClusterOnTracks));
◆ calculateBeta()
float MuonCombined::MuonStauRecoTool::calculateBeta |
( |
const float |
time, |
|
|
const float |
dist |
|
) |
| const |
|
private |
In cases of invalid times just return an phyisical value of 20 times the speed of light The subsequent checks remove the attempt by default then.
Definition at line 1438 of file MuonStauRecoTool.cxx.
1439 return time != 0. ? dist * inverseSpeedOfLight /
time : 20.;
◆ calculateTof()
float MuonCombined::MuonStauRecoTool::calculateTof |
( |
const float |
beta, |
|
|
const float |
dist |
|
) |
| const |
|
private |
◆ combineCandidates()
combine reconstruction
Definition at line 800 of file MuonStauRecoTool.cxx.
809 std::pair<std::unique_ptr<const Muon::MuonCandidate>, std::unique_ptr<Trk::Track>>
result =
817 candidate->muonCandidate = std::move(
result.first);
818 candidate->combinedTrack = std::move(
result.second);
822 combinedCandidates.push_back(candidate);
840 <<
" candidate: beta fit result: " << candidate->betaFitResult.beta <<
" chi2/ndof "
841 << candidate->betaFitResult.chi2PerDOF();
842 if (candidate->finalBetaFitResult.status != 0)
843 msg(
MSG::INFO) <<
" MDTT beta fit result: " << candidate->finalBetaFitResult.beta <<
" chi2/ndof "
844 << candidate->finalBetaFitResult.chi2PerDOF();
845 msg(
MSG::INFO) <<
" layers with segments" << candidate->allLayers.size() << std::endl
846 <<
" track " <<
m_printer->print(*candidate->combinedTrack) << std::endl
847 <<
m_printer->printStations(*candidate->combinedTrack);
◆ createCandidates()
create candidates from the beta seeds
Definition at line 855 of file MuonStauRecoTool.cxx.
859 LayerDataVec::const_iterator
it = associatedData.layerData.begin();
860 LayerDataVec::const_iterator it_end = associatedData.layerData.end();
861 for (;
it != it_end; ++
it) {
863 for (
const auto& maximumData :
it->maximumDataVec) {
865 if (!maximumData->betaSeeds.empty()) seedMaximumDataVec.push_back(maximumData);
868 ATH_MSG_DEBUG(
"Creating candidates from seeds " << seedMaximumDataVec.size());
870 if (seedMaximumDataVec.empty()) {
876 auto SortMaximumDataVec = [](
const std::shared_ptr<MaximumData>&
max1,
const std::shared_ptr<MaximumData>& max2) {
877 return max1->maximum->max < max2->maximum->max;
879 std::stable_sort(seedMaximumDataVec.begin(), seedMaximumDataVec.end(), SortMaximumDataVec);
883 std::set<const MaximumData*> usedMaximumData;
886 for (; sit != sit_end; ++sit) {
888 if (usedMaximumData.count(sit->get()))
continue;
889 usedMaximumData.insert(sit->get());
893 for (
const auto& betaSeed : (*sit)->betaSeeds) { newCandidates.push_back(std::make_shared<Candidate>(betaSeed)); }
895 extendCandidates(newCandidates, usedMaximumData, associatedData.layerData.begin(), associatedData.layerData.end());
898 for (
auto& newCandidate : newCandidates) {
900 newCandidate->betaFitResult =
fitter.fitWithOutlierLogic(newCandidate->hits);
902 << newCandidate->hits.size() <<
" status " << newCandidate->betaFitResult.status <<
" beta "
903 << newCandidate->betaFitResult.beta <<
" chi2/ndof " << newCandidate->betaFitResult.chi2PerDOF());
905 if (newCandidate->betaFitResult.status != 0) {
906 newCandidate->combinedTrack =
nullptr;
922 <<
" candidate: beta seed " << candidate->betaSeed.beta <<
" beta fit result: beta "
923 << candidate->betaFitResult.beta <<
" chi2/ndof " << candidate->betaFitResult.chi2PerDOF() <<
" layers "
924 << candidate->layerDataVec.size();
925 for (
const auto& layerData : candidate->layerDataVec)
928 << layerData.maximumDataVec.size();
◆ createRpcTimeMeasurementsFromClusters()
create Rpc hit timing for a set of clusters
Definition at line 1260 of file MuonStauRecoTool.cxx.
1264 for (
const auto& cluster : clusterObjects) {
1265 if (cluster.hitList.empty() || !cluster.hitList.front()) {
1270 << cluster.hitList.size());
1273 std::vector<const Muon::MuonClusterOnTrack*>
clusters;
1274 for (
const auto* rpc : cluster.hitList) {
1286 RpcTimeMeasurement rpcTimeMeasurement;
1287 rpcTimeMeasurement.time =
result.time;
1288 rpcTimeMeasurement.error =
result.error;
1291 if (rcl) rpcTimeMeasurement.rpcClusters.push_back(std::shared_ptr<const Muon::RpcClusterOnTrack>(rcl));
1293 rpcTimeMeasurements.push_back(rpcTimeMeasurement);
◆ 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]
◆ 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()
◆ evtStore() [1/2]
◆ evtStore() [2/2]
◆ extend()
◆ extendCandidates()
void MuonCombined::MuonStauRecoTool::extendCandidates |
( |
CandidateVec & |
candidates, |
|
|
std::set< const MaximumData * > & |
usedMaximumData, |
|
|
LayerDataVec::const_iterator |
it, |
|
|
LayerDataVec::const_iterator |
it_end |
|
) |
| const |
|
private |
extend a CandidateVec with the next LayerData
Definition at line 936 of file MuonStauRecoTool.cxx.
940 const LayerData& layerData = *
it;
942 << layerData.maximumDataVec.size());
947 unsigned int nextensions = 0;
954 for (
const auto& maximumData : layerData.maximumDataVec) {
960 if (nextensions == 0)
961 theCandidate = candidate.get();
963 std::shared_ptr<Candidate> newCandidate = std::make_shared<Candidate>(candidate->betaSeed);
966 theCandidate = newCandidate.get();
967 newCandidates.emplace_back(std::move(newCandidate));
971 LayerData newLayerData(layerData.intersection);
972 newLayerData.maximumDataVec.push_back(maximumData);
975 theCandidate->hits.insert(theCandidate->hits.end(), newhits.begin(), newhits.end());
976 theCandidate->layerDataVec.push_back(newLayerData);
977 usedMaximumData.insert(maximumData.get());
979 ATH_MSG_DEBUG(
" adding maximumData: candidate hits " << theCandidate->hits.size() <<
" LayerDataVec "
980 << theCandidate->layerDataVec.size() <<
" nextensions "
987 ATH_MSG_DEBUG(
" extendCandidates done, new candidates " << newCandidates.size());
◆ extendWithPRDs()
◆ extractRpcTimingFromMaximum()
extract RPC hit timing
Definition at line 1214 of file MuonStauRecoTool.cxx.
1218 std::map<Identifier, std::vector<const Muon::RpcPrepData*>> rpcPrdsPerChamber;
1225 rpcPrdsPerChamber[chamberId].push_back(rpcPrd);
1230 MuonHough::HitVec::const_iterator hit = maximum.
hits.begin();
1231 MuonHough::HitVec::const_iterator hit_end = maximum.
hits.end();
1232 for (; hit != hit_end; ++hit) {
1233 if ((*hit)->tgc || !(*hit)->prd || !
m_idHelperSvc->isRpc((*hit)->prd->identify()))
continue;
1234 addRpc((*hit)->prd);
1238 for (
const auto& rot : maximumData.phiClusterOnTracks) { addRpc(rot->prepRawData()); }
1241 if (rpcPrdsPerChamber.empty())
return;
1243 std::map<Identifier, std::vector<const Muon::RpcPrepData*>>
::iterator chit = rpcPrdsPerChamber.begin();
1244 std::map<Identifier, std::vector<const Muon::RpcPrepData*>>
::iterator chit_end = rpcPrdsPerChamber.end();
1245 for (; chit != chit_end; ++chit) {
1248 if (!clustering.cluster(chit->second)) {
1254 <<
" eta clusters " << clustering.clustersEta.size() <<
" phi clusters " << clustering.clustersPhi.size());
◆ extractTimeHits()
extract hits for the beta fit, returns true if hits were added
Definition at line 1054 of file MuonStauRecoTool.cxx.
1056 unsigned int nstart =
hits.size();
1072 for (
const auto& rpc : maximumData.rpcTimeMeasurements) {
1073 float time = rpc.time;
1074 float error = rpc.error;
1082 for (
const auto& seg : maximumData.t0fittedSegments) {
1083 if (!seg->hasFittedT0())
continue;
1084 float time = seg->time();
1085 float error = seg->errorTime();
1093 float smallestResidual = FLT_MAX;
1094 for (
const auto& seg : maximumData.t0fittedSegments) {
1095 if (!seg->hasFittedT0())
continue;
1096 float distance = seg->globalPosition().mag();
1097 float time = seg->time();
1103 bestSegment = seg.get();
1113 return nstart !=
hits.size();
◆ extractTimeMeasurements()
associate Hough maxima and associate time measurements
Definition at line 997 of file MuonStauRecoTool.cxx.
1004 LayerData layerData{iSect};
1008 if (layerData.maximumDataVec.empty())
continue;
1010 associatedData.layerData.push_back(layerData);
1013 for (
auto& maximum : layerData.maximumDataVec) {
1018 std::vector<std::shared_ptr<const Muon::MuonSegment>> t0fittedSegments;
1020 if (t0fittedSegments.empty())
continue;
1032 msg(
MSG::INFO) <<
" Summary::extractTimeMeasurements ";
1033 if (associatedData.layerData.empty())
1036 msg(
MSG::INFO) <<
" Associated layers " << associatedData.layerData.size();
1038 for (
const auto& layerData : associatedData.layerData) {
1039 unsigned int nmaxWithBeta = 0;
1040 for (
const auto& maximumData : layerData.maximumDataVec) {
1041 if (!maximumData->betaSeeds.empty()) ++nmaxWithBeta;
1045 << layerData.maximumDataVec.size() <<
" maxima with beta seeds " << nmaxWithBeta;
1051 return !associatedData.layerData.empty();
◆ extractTimeMeasurementsFromTrack()
void MuonCombined::MuonStauRecoTool::extractTimeMeasurementsFromTrack |
( |
const EventContext & |
ctx, |
|
|
Candidate & |
candidate |
|
) |
| const |
|
private |
extract time measurements from the track associated with the candidate
Definition at line 262 of file MuonStauRecoTool.cxx.
266 if (!mdtCalibConstants.isValid()) {
268 throw std::runtime_error(
"Failed to retrieve calibration constants");
270 ATH_MSG_VERBOSE(
"extractTimeMeasurementsFromTrack for candidate: beta seed " << candidate.betaSeed.beta);
275 float betaSeed = candidate.betaFitResult.beta;
284 ATH_MSG_WARNING(
" track without states, cannot extractTimeMeasurementsFromTrack ");
291 typedef std::vector<const Muon::MuonClusterOnTrack*> RpcClVec;
292 using RpcClPerChMap = std::map<Identifier, std::tuple<const Trk::TrackParameters*, RpcClVec, RpcClVec>>;
293 RpcClPerChMap rpcPrdsPerChamber;
295 using MdtTubeData = std::pair<const Trk::TrackParameters*, const Muon::MdtDriftCircleOnTrack*>;
296 using MdtTubeDataVec = std::vector<MdtTubeData>;
297 using MdtChamberLayerData = std::map<int, MdtTubeDataVec>;
298 MdtChamberLayerData mdtDataPerChamberLayer;
303 for (; tsit != tsit_end; ++tsit) {
325 if (
stName[2] ==
'R') { chIndexWithBIR += 1000; }
327 mdtDataPerChamberLayer[chIndexWithBIR].push_back(std::make_pair(
pars, mdt));
333 float ix =
pars->position().x();
334 float iy =
pars->position().y();
335 float iz =
pars->position().z();
347 auto data = mdtCalibConstants->getCalibData(
id, msgStream());
348 const auto& rtRelation =
data->rtRelation;
349 float drdt = rtRelation->rt()->driftVelocity(
driftTime);
350 float rres = rtRelation->rtRes()->resolution(
driftTime);
351 float tres = rres / drdt;
352 float TlocR = rtRelation->tr()->driftTime(std::abs(
locR)).value_or(0.);
353 float trackTimeRes = errR / drdt;
355 er = std::sqrt(
tres *
tres + trackTimeRes * trackTimeRes);
362 std::unique_ptr<const Trk::TrackParameters> unbiasedPars(
365 float locRu = unbiasedPars->parameters()[
Trk::locR];
366 float TlocRu = rtRelation->tr()->driftTime(std::abs(locRu)).value_or(0.);
367 float errRu = unbiasedPars->covariance() ?
Amg::error(*unbiasedPars->covariance(),
Trk::locR) : 0.3;
368 float trackTimeResu = errRu / drdt;
371 er = std::sqrt(
tres *
tres + trackTimeResu * trackTimeResu);
373 ATH_MSG_VERBOSE(
" Got unbiased parameters: r " <<
locR <<
" ur " << locRu <<
" err " << errR <<
" uerr "
374 << errRu <<
" terr " << trackTimeRes <<
" terru "
380 <<
" TlocR " << TlocR <<
" diff " <<
driftTime - TlocR <<
" tofShift " << tofShiftFromBeta
381 <<
" time " << time <<
" err " << er <<
" intrinsic " <<
tres <<
" track " << trackTimeRes);
385 <<
beta <<
" diff " << std::abs(
beta - betaSeed));
389 candidate.stauHits.emplace_back(
MuGirlNS::StauHit(tech, time + tof, ix, iy, iz,
id,
ie, er,
sh, isEta, propTime));
399 std::vector<const Muon::MuonClusterOnTrack*>
clusters;
409 auto pos = rpcPrdsPerChamber.find(chamberId);
410 if (
pos == rpcPrdsPerChamber.end()) {
412 rpcPrdsPerChamber[chamberId] = std::make_tuple(
pars,
clusters, RpcClVec());
414 rpcPrdsPerChamber[chamberId] = std::make_tuple(
pars, RpcClVec(),
clusters);
416 RpcClVec& clVec = measuresPhi ? std::get<1>(
pos->second) : std::
get<2>(
pos->
second);
426 float ix =
pars->position().x();
427 float iy =
pars->position().y();
428 float iz =
pars->position().z();
435 candidate.stauHits.push_back(
MuGirlNS::StauHit(tech, time + tof, ix, iy, iz,
id,
ie, er,
sh, isEta, propTime));
443 std::vector<const Muon::MuonClusterOnTrack*> calibratedClusters;
444 for (
const auto* cluster :
clusters) {
446 if (
cl) calibratedClusters.push_back(
cl);
448 if (calibratedClusters.empty())
return;
451 for (
const auto*
cl : calibratedClusters)
delete cl;
452 if (!
result.valid)
return;
459 float ix =
pars.position().x();
460 float iy =
pars.position().y();
461 float iz =
pars.position().z();
472 <<
" diff " << std::abs(
beta - betaSeed));
477 candidate.stauHits.push_back(
MuGirlNS::StauHit(tech, time + tof, ix, iy, iz,
id,
ie, er,
sh, isEta, propTime));
481 RpcClPerChMap::const_iterator chit = rpcPrdsPerChamber.begin();
482 RpcClPerChMap::const_iterator chit_end = rpcPrdsPerChamber.end();
485 for (; chit != chit_end; ++chit) {
487 const RpcClVec& phiClusters = std::get<1>(chit->second);
488 const RpcClVec& etaClusters = std::get<2>(chit->second);
489 insertRpcs(*
pars, phiClusters, candidate,
hits);
490 insertRpcs(*
pars, etaClusters, candidate,
hits);
505 MdtChamberLayerData::const_iterator mit = mdtDataPerChamberLayer.begin();
506 MdtChamberLayerData::const_iterator mit_end = mdtDataPerChamberLayer.end();
507 for (; mit != mit_end; ++mit) {
509 <<
" hits " << mit->second.size());
510 if (mit->second.size() < 4)
continue;
516 ATH_MSG_WARNING(
"MdtReadoutElement should always have a PlaneSurface as reference surface");
533 std::vector<std::pair<std::shared_ptr<const Muon::MdtDriftCircleOnTrack>,
const Trk::TrackParameters*>> indexLookUp;
535 for (
const auto&
entry : mit->second) {
540 std::unique_ptr<const Muon::MdtDriftCircleOnTrack> calibratedMdt(
542 if (!calibratedMdt) {
549 <<
" r_track " <<
pars.parameters()[
Trk::locR] <<
" residual "
561 double r = std::abs(calibratedMdt->driftRadius());
572 dcs.push_back(dcOnTrack);
573 indexLookUp.emplace_back(std::move(calibratedMdt), &
pars);
578 for (
unsigned int i = 0;
i < dcs.size(); ++
i) {
587 segment.hitsOnTrack(dcs.size());
588 unsigned int ndofFit =
segment.ndof();
589 if (ndofFit < 1)
continue;
590 double chi2NdofSegmentFit =
segment.chi2() / ndofFit;
591 bool hasDropHit =
false;
592 unsigned int dropDepth = 0;
594 ATH_MSG_DEBUG(
"DropHits failed, fit chi2/ndof " << chi2NdofSegmentFit);
603 if (
i >=
segment.dcs().size())
continue;
609 double rline = toLine.toLineY(dc.
position());
611 if (index < 0 || index >= (
int)indexLookUp.size()) {
612 ATH_MSG_WARNING(
" lookup of TrackParameters and MdtDriftCircleOnTrack failed " <<
index <<
" range: 0 - "
613 << indexLookUp.size() - 1);
621 std::shared_ptr<const Muon::MdtDriftCircleOnTrack> calibratedMdt(
623 if (!calibratedMdt.get()) {
630 float ix =
pars->position().x();
631 float iy =
pars->position().y();
632 float iz =
pars->position().z();
644 float driftTime = calibratedMdt->driftTime();
647 auto data = mdtCalibConstants->getCalibData(
id, msgStream());
648 const auto& rtRelation =
data->rtRelation;
649 float drdt = rtRelation->rt()->driftVelocity(
driftTime);
650 float rres = rtRelation->rtRes()->resolution(
driftTime);
651 float tres = rres / drdt;
652 float TlocR = rtRelation->tr()->driftTime(std::abs(
locR)).value_or(0.);
653 float trackTimeRes = errR / drdt;
654 float tofShiftFromBeta = 0.;
655 er = std::sqrt(
tres *
tres + trackTimeRes * trackTimeRes);
666 << chi2NdofSegmentFit <<
" ndof " << std::setw(2) << ndofFit;
668 msg(
MSG::DEBUG) <<
" after outlier " << std::setw(5) << chi2NdofSegmentFit <<
" ndof " << std::setw(2) << ndofFit;
669 msg(
MSG::DEBUG) <<
" driftR " << std::setw(4) << dc.
r() <<
" rline " << std::setw(5) << rline <<
" residual "
670 << std::setw(5) <<
res <<
" pull " << std::setw(4) <<
pull <<
" time " << std::setw(3) <<
time
671 <<
" beta" << std::setw(2) <<
beta <<
" err " << std::setw(3) << er <<
" intrinsic " << std::setw(3)
672 <<
tres <<
" track " << std::setw(3) << trackTimeRes;
677 if (!isSelected)
continue;
680 candidate.stauHits.emplace_back(
MuGirlNS::MDTT_STAU_HIT, time + tof, ix, iy, iz,
id,
ie, er,
sh, isEta, propTime);
688 ATH_MSG_DEBUG(
" extractTimeMeasurementsFromTrack: extracted " << candidate.stauHits.size() <<
" time measurements "
689 <<
" status fit " << betaFitResult.
status <<
" beta "
690 << betaFitResult.
beta <<
" chi2/ndof " << betaFitResult.
chi2PerDOF());
692 candidate.finalBetaFitResult = betaFitResult;
◆ 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
◆ findSegments()
find segments for a given maximum
Definition at line 1133 of file MuonStauRecoTool.cxx.
1139 const std::vector<std::shared_ptr<const Muon::MuonClusterOnTrack>>& phiClusterOnTracks = maximumData.phiClusterOnTracks;
1143 std::vector<const Muon::MdtDriftCircleOnTrack*>& mdts,
1146 if (mdt) mdts.push_back(mdt);
1151 std::vector<const Muon::MuonClusterOnTrack*>&
clusters) {
1153 if (cluster)
clusters.push_back(cluster);
1157 std::vector<const Muon::MdtDriftCircleOnTrack*> mdts;
1158 std::vector<const Muon::MuonClusterOnTrack*>
clusters;
1161 clusters.reserve(phiClusterOnTracks.size());
1163 for (
const auto& phiClusterOnTrack : phiClusterOnTracks) {
clusters.push_back(phiClusterOnTrack->clone()); }
1167 MuonHough::HitVec::const_iterator hit = maximum.
hits.begin();
1168 MuonHough::HitVec::const_iterator hit_end = maximum.
hits.end();
1169 for (; hit != hit_end; ++hit) {
1170 ATH_MSG_DEBUG(
"hit x,y_min,y_max,w = " << (*hit)->x <<
"," << (*hit)->ymin <<
"," << (*hit)->ymax <<
"," << (*hit)->w);
1173 for (
const auto& prd : (*hit)->tgc->etaCluster) handleCluster(*prd,
clusters);
1174 }
else if ((*hit)->prd) {
1192 if (mdts.size() > 2) {
1200 for (; sit != sit_end; ++sit) {
1205 segments.push_back(std::shared_ptr<const Muon::MuonSegment>(mseg));
1210 for (
const auto* hit : mdts)
delete hit;
1211 for (
const auto* hit :
clusters)
delete hit;
◆ getBetaSeeds()
void MuonCombined::MuonStauRecoTool::getBetaSeeds |
( |
MaximumData & |
maximumData | ) |
const |
|
private |
calculate the beta seeds for a give MaximumData
Definition at line 1116 of file MuonStauRecoTool.cxx.
1118 if (maximumData.rpcTimeMeasurements.empty() && maximumData.t0fittedSegments.empty())
return;
1126 float chi2ndof =
result.chi2PerDOF();
1128 ATH_MSG_DEBUG(
" fitting beta for maximum: time measurements " <<
hits.size() <<
" status " <<
result.status <<
" beta "
1129 <<
result.beta <<
" chi2/ndof " << chi2ndof);
1130 if (
result.status != 0) maximumData.betaSeeds.emplace_back(
result.beta, 1.);
◆ getTruth()
extract truth from the indetTrackParticle
Definition at line 92 of file MuonStauRecoTool.cxx.
95 truthParticleLinkAcc(
"truthParticleLink");
96 if (
m_doTruth && truthParticleLinkAcc.isAvailable(indetTrackParticle)) {
99 return std::make_unique<TruthInfo>((*truthLink)->pdgId(), (*truthLink)->m(), (*truthLink)->p4().Beta());
◆ handleCandidate()
handle a single candidate
STAGE 0 Preselection, preparation of truth related quantities, extrapolation in muon system
STAGE 1 process the muon system extension: loop over intersections, get associated data, time measurement, build beta seeds
STAGE 2 build candidates from seeds in the chamber layers
STAGE 3 refine candidates: find segments using the beta seed of the candidate
STAGE 4 combineCandidates: run the combined reconstruction
STAGE 5 resolve ambiguities
STAGE 6 create tag
Definition at line 105 of file MuonStauRecoTool.cxx.
108 ATH_MSG_DEBUG(
" skip silicon associated track for extension ");
121 std::unique_ptr<TruthInfo> truthInfo(
getTruth(indetTrackParticle));
125 ATH_MSG_DEBUG(
"Truth reconstruction enabled: skipping ID track with pdgId: " << (truthInfo ? truthInfo->pdgId : 0));
134 msg(
MSG::INFO) <<
" ID track: pt " << indetTrackParticle.
pt() <<
" eta " << indetTrackParticle.
eta() <<
" phi "
135 << indetTrackParticle.
phi();
137 if (!muonSystemExtension)
msg(
MSG::INFO) <<
" failed muonSystemExtension";
142 if (!muonSystemExtension) {
return; }
150 AssociatedData associatedData;
◆ initialize()
StatusCode MuonCombined::MuonStauRecoTool::initialize |
( |
| ) |
|
|
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.
◆ interfaceID()
static const InterfaceID& MuonCombined::IMuonCombinedInDetExtensionTool::interfaceID |
( |
| ) |
|
|
inlinestaticinherited |
Definition at line 37 of file IMuonCombinedInDetExtensionTool.h.
38 static const InterfaceID IID_IMuonCombinedInDetExtensionTool(
"MuonCombined::IMuonCombinedInDetExtensionTool", 1, 0);
39 return IID_IMuonCombinedInDetExtensionTool;
◆ mdtTimeCalibration()
void MuonCombined::MuonStauRecoTool::mdtTimeCalibration |
( |
const Identifier & |
id, |
|
|
float & |
time, |
|
|
float & |
error |
|
) |
| const |
|
private |
◆ msg() [1/2]
◆ msg() [2/2]
◆ msgLvl()
◆ 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.
◆ processMuonSystemExtension()
match extension to Hough maxima, extract time measurements, create candidates, run segment finding
◆ refineCandidates()
refine candidates: find segments for the given beta
Definition at line 190 of file MuonStauRecoTool.cxx.
197 ATH_MSG_DEBUG(
" candidate: betaseed beta" << candidate->betaSeed.beta <<
", error" << candidate->betaSeed.error
198 <<
" layerDataVec size" << candidate->layerDataVec.size() <<
" hits size"
199 << candidate->hits.size());
201 float beta = candidate->betaFitResult.beta;
203 for (
const auto& layerData : candidate->layerDataVec) {
205 std::vector<std::shared_ptr<const Muon::MuonSegment>> segments;
208 for (
const auto& maximumData : layerData.maximumDataVec) {
214 if (segments.empty())
continue;
222 std::vector<std::shared_ptr<const Muon::MuonSegment>> selectedSegments;
226 for (
const auto& seg : selectedSegments)
m_recoValidationTool->add(layerData.intersection, *seg, 3);
230 candidate->allLayers.emplace_back(layerData.intersection, std::move(selectedSegments));
234 if (!candidate->allLayers.empty()) refinedCandidates.push_back(candidate);
250 <<
" candidate: beta fit result: beta " << candidate->betaFitResult.beta <<
" chi2/ndof "
251 << candidate->betaFitResult.chi2PerDOF() <<
" layers with segments" << candidate->allLayers.size();
252 for (
const auto&
layer : candidate->allLayers)
◆ renounce()
◆ renounceArray()
◆ resolveAmbiguities()
resolve ambiguities between the candidates
Definition at line 748 of file MuonStauRecoTool.cxx.
753 std::map<const Trk::Track*, std::shared_ptr<Candidate>> trackCandidateLookup;
757 tracks.push_back(
track);
758 trackCandidateLookup[
track] = candidate;
763 if (tracks.empty())
return false;
764 if (tracks.size() == 1)
return true;
768 if (!resolvedTracks || resolvedTracks->empty()) {
772 const Trk::Track* selectedTrack = resolvedTracks->front();
775 auto pos = trackCandidateLookup.find(selectedTrack);
776 if (
pos == trackCandidateLookup.end()) {
782 std::shared_ptr<Candidate> candidate =
pos->second;
790 <<
" candidate: beta fit result: beta " << candidate->
betaFitResult.
beta <<
" chi2/ndof "
◆ rpcTimeCalibration()
void MuonCombined::MuonStauRecoTool::rpcTimeCalibration |
( |
const Identifier & |
id, |
|
|
float & |
time, |
|
|
float & |
error |
|
) |
| const |
|
private |
◆ segmentTimeCalibration()
void MuonCombined::MuonStauRecoTool::segmentTimeCalibration |
( |
const Identifier & |
id, |
|
|
float & |
time, |
|
|
float & |
error |
|
) |
| const |
|
private |
◆ selectTruth()
bool MuonCombined::MuonStauRecoTool::selectTruth |
( |
const TruthInfo * |
truthInfo | ) |
const |
|
inlineprivate |
if truth tracking is enabled, return whether the pdg is selected
Definition at line 206 of file MuonStauRecoTool.h.
208 if (truthInfo &&
m_selectedPdgs.count(truthInfo->pdgId))
return true;
◆ 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()
◆ m_addMDTExtrasMuGirlLowBeta
Gaudi::Property<bool> MuonCombined::MuonStauRecoTool::m_addMDTExtrasMuGirlLowBeta {this, "AddMDTExtrasMuGirlLowBeta", false} |
|
private |
◆ m_calibDbKey
Initial value:{this, "CalibDataKey", "MdtCalibConstants",
"Conditions object containing the calibrations"}
Definition at line 255 of file MuonStauRecoTool.h.
◆ m_detStore
◆ m_doSummary
Gaudi::Property<bool> MuonCombined::MuonStauRecoTool::m_doSummary {this, "DoSummary", false, "enable summary output"} |
|
private |
◆ m_doTruth
Gaudi::Property<bool> MuonCombined::MuonStauRecoTool::m_doTruth {this, "DoTruth", false, "enable truth matching"} |
|
private |
◆ m_edmHelperSvc
Initial value:{this, "edmHelper", "Muon::MuonEDMHelperSvc/MuonEDMHelperSvc",
"Handle to the service providing the IMuonEDMHelperSvc interface"}
Definition at line 232 of file MuonStauRecoTool.h.
◆ m_evtStore
◆ m_hitTimingTool
◆ m_houghAssociationPullCut
Gaudi::Property<double> MuonCombined::MuonStauRecoTool::m_houghAssociationPullCut {this, "HoughAssociationPullCut", 5} |
|
private |
◆ m_houghDataPerSectorVecKey
Initial value:{
this, "Key_MuonLayerHoughToolHoughDataPerSectorVec", "HoughDataPerSectorVec", "HoughDataPerSectorVec key"}
storegate
Definition at line 228 of file MuonStauRecoTool.h.
◆ m_idHelperSvc
◆ m_ignoreSiAssocated
Gaudi::Property<bool> MuonCombined::MuonStauRecoTool::m_ignoreSiAssocated {this, "IgnoreSiAssociatedCandidates", true} |
|
private |
◆ m_insideOutRecoTool
Initial value:{this, "MuonInsideOutRecoTool",
"MuonCombined::MuonInsideOutRecoTool/MuonInsideOutRecoTool"}
Definition at line 252 of file MuonStauRecoTool.h.
◆ m_mdtCreator
Initial value:{this, "MdtDriftCircleOnTrackCreator",
"Muon::MdtDriftCircleOnTrackCreator/MdtDriftCircleOnTrackCreator"}
Definition at line 248 of file MuonStauRecoTool.h.
◆ m_mdtCreatorStau
Initial value:{
this, "MdtDriftCircleOnTrackCreatorStau", "Muon::MdtDriftCircleOnTrackCreator/MdtDriftCircleOnTrackCreatorStau"}
Definition at line 250 of file MuonStauRecoTool.h.
◆ m_mdttBetaAssociationCut
Gaudi::Property<double> MuonCombined::MuonStauRecoTool::m_mdttBetaAssociationCut {this, "MDTTAssocationCut", 0.4} |
|
private |
◆ m_muonPRDSelectionTool
◆ m_muonPRDSelectionToolStau
ToolHandle<Muon::IMuonPRDSelectionTool> MuonCombined::MuonStauRecoTool::m_muonPRDSelectionToolStau {this, "MuonPRDSelectionToolStau", ""} |
|
private |
◆ m_muonSectorMapping
◆ m_pdgsToBeConsidered
Gaudi::Property<std::vector<int> > MuonCombined::MuonStauRecoTool::m_pdgsToBeConsidered {this, "ConsideredPDGs", {}, "PDG IDs considered in truth matching"} |
|
private |
◆ m_printer
◆ m_ptThreshold
Gaudi::Property<double> MuonCombined::MuonStauRecoTool::m_ptThreshold {this, "PtThreshold", 10000} |
|
private |
◆ m_recoValidationTool
◆ m_rpcBetaAssociationCut
Gaudi::Property<double> MuonCombined::MuonStauRecoTool::m_rpcBetaAssociationCut {this, "RPCAssocationCut", 0.2} |
|
private |
◆ m_segmentBetaAssociationCut
Gaudi::Property<double> MuonCombined::MuonStauRecoTool::m_segmentBetaAssociationCut {this, "SegmentAssocationCut", 0.2} |
|
private |
◆ m_segmentMaker
◆ m_segmentMakerT0Fit
Initial value:{this, "MuonSegmentMakerT0Fit",
"Muon::DCMathSegmentMaker/DCMathT0FitSegmentMaker"}
Definition at line 237 of file MuonStauRecoTool.h.
◆ m_segmentMatchingTool
Initial value:{
this, "MuonLayerSegmentMatchingTool", "Muon::MuonLayerSegmentMatchingTool/MuonLayerSegmentMatchingTool"}
Definition at line 239 of file MuonStauRecoTool.h.
◆ m_segmentMDTT
Gaudi::Property<bool> MuonCombined::MuonStauRecoTool::m_segmentMDTT {this, "UseSegmentMDTT", true} |
|
private |
◆ m_selectedPdgs
std::set<int> MuonCombined::MuonStauRecoTool::m_selectedPdgs |
|
private |
◆ m_trackAmbibuityResolver
Initial value:{this, "TrackAmbiguityProcessor",
"Trk::TrackSelectionProcessorTool/MuonAmbiProcessor"}
Definition at line 243 of file MuonStauRecoTool.h.
◆ m_updator
◆ m_useTruthMatching
Gaudi::Property<bool> MuonCombined::MuonStauRecoTool::m_useTruthMatching {this, "UseTruthMatching", false, "enable usage of truth info for reconstruction"} |
|
private |
◆ m_varHandleArraysDeclared
◆ m_vhka
The documentation for this class was generated from the following files:
JetConstituentVector::iterator iterator
float errorTime() const
access to the error on the measured time
LayerIndex
enum to classify the different layers in the muon spectrometer
virtual double pt() const override final
The transverse momentum ( ) of the particle.
const ShapeFitter * fitter
char data[hepevt_bytes_allocation_ATLAS]
simple struct holding the input to the fit
Const iterator class for DataVector/DataList.
unsigned int index() const
std::vector< DCOnTrack > DCOnTrackVec
void setChi2DropCut(double chi2)
virtual const MdtPrepData * prepRawData() const override final
Returns the PrepRawData used to create this corrected measurement.
RegionPhiMaximumVec phiMaxVec
double transformRToSector(double r, double phi, int sector, bool toSector=true) const
expresses a radial position from and to the sector coordinate frame, the phi position should always b...
@ VIEW_ELEMENTS
this data object is a view, it does not own its elmts
virtual bool fit(Segment &result, const Line &line, const DCOnTrackVec &dcs, double t0Seed=-99999.) const
const Amg::Vector3D & position() const
Access method for the position.
Eigen::Matrix< double, 2, 1 > Vector2D
virtual double eta() const override final
The pseudorapidity ( ) of the particle.
RegionDescriptor m_descriptor
unsigned int sectorLayerHash(DetectorRegionIndex detectorRegionIndex, LayerIndex layerIndex)
create a hash out of region and layer
std::vector< bool > HitSelection
const std::string & stName(StIndex index)
convert StIndex into a string
virtual Amg::Transform3D GlobalToAmdbLRSTransform() const
void setDeltaCut(double cut)
const LocVec2D & position() const
access to local position
StoreGateSvc_t m_evtStore
Pointer to StoreGate (event store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
double dr() const
access to error drift radius
void setMaxDropDepth(int max)
bool msgLvl(const MSG::Level lvl) const
float beta
status flag (0 = failed, 1 = ok)
float chi2PerDOF() const
chi2/ndof, return 0 if ndof == 0 or status == 0
Class to represent calibrated clusters formed from RPC strips.
Helper class to provide constant type-safe access to aux data.
This class represents a drift time measurement.
#define ATH_MSG_VERBOSE(x)
bool empty() const
Test if the key is blank.
double r() const
access to drift radius
int adc() const
Returns the ADC (typically range is 0 to 250)
std::vector< std::string > intersection(std::vector< std::string > &v1, std::vector< std::string > &v2)
void combinedTrack(long int ICH, double *pv0, double *covi, double BMAG, double *par, double *covo)
bool isValid() const
Test to see if the link can be dereferenced.
void stable_sort(std::reverse_iterator< DataModel_detail::iterator< DVL > > beg, std::reverse_iterator< DataModel_detail::iterator< DVL > > end, Compare comp)
Specialization of stable_sort for DataVector/List.
double driftTime() const
Returns the value of the drift time used to obtain the drift radius.
void errorTrack(double error)
set track error
Implementation of 2 dimensional vector class.
virtual void setOwner(IDataHandleHolder *o)=0
double angleYZ() const
access method for angle of local YZ projection
@ Outlier
This TSoS contains an outlier, that is, it contains a MeasurementBase/RIO_OnTrack which was not used ...
TagBase implementation for a combined fit.
simple struct holding the fit result
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
struct representing the maximum in the hough space
std::bitset< 23 > MuonDriftCircleErrorStrategyInput
const Muon::TgcClusterObj3D * tgc
(Non-const) Iterator class for DataVector/DataList.
DataVector< Trk::Track > TrackCollection
This typedef represents a collection of Trk::Track objects.
Class to represent RPC measurements.
const std::string & chName(ChIndex index)
convert ChIndex into a string
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
Tracking class to hold the extrapolation from a particle from the calo entry to the end of muon syste...
virtual bool type(PrepRawDataType type) const
Interface method checking the type.
Eigen::Affine3d Transform3D
std::pair< std::vector< unsigned int >, bool > res
cut
This script demonstrates how to call a C++ class from Python Also how to use PyROOT is shown.
double time() const
Returns the time.
void globalToLocalDirection(const Amg::Vector3D &glodir, Trk::LocalDirection &locdir) const
This method transforms the global direction to a local direction wrt the plane.
StoreGateSvc_t m_detStore
Pointer to StoreGate (detector store by default)
StatusCode initialize(bool used=true)
If this object is used as a property, then this should be called during the initialize phase.
double driftRadius() const
Returns the value of the drift radius.
const MuonLayerHough * hough
@ Segment
Treating a segment or a track.
represents the three-dimensional global direction with respect to a planar surface frame.
const Amg::MatrixX & localCovariance() const
Interface method to get the localError.
virtual void renounce()=0
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
std::string printIntersectionToString(const Muon::MuonSystemExtension::Intersection &intersection)
Identifier identify() const
return the identifier
void residual(double res)
set residual
const std::string selection
const Trk::PrepRawData * prd
access to assiciated hit, either the prd or the tgc pointer is set in athena
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 ...
constexpr int toInt(const ParamDefs p)
This class represents the corrected MDT measurements, where the corrections include the effects of wi...
virtual void localToGlobal(const Amg::Vector2D &locp, const Amg::Vector3D &mom, Amg::Vector3D &glob) const override final
Specified for StraightLineSurface: LocalToGlobal method without dynamic memory allocation.
float time() const
Return the time (ns)
value_type push_back(value_type pElem)
Add an element to the end of the collection.
StatusCode initialize(bool used=true)
Class to represent measurements from the Monitored Drift Tubes.
const std::vector< const MuonClusterOnTrack * > & containedROTs() const
returns the vector of SCT_ClusterOnTrack objects .
Eigen::Matrix< double, 3, 1 > Vector3D
virtual Intersection straightLineIntersection(const Amg::Vector3D &pos, const Amg::Vector3D &dir, bool forceDir, Trk::BoundaryCheck bchk) const override final
fast straight line intersection schema - standard: provides closest intersection and (signed) path le...
virtual const CscPrepData * prepRawData() const override final
Returns the CscPrepData - is a CscPrepData in this scope.
const LocalParameters & localParameters() const
Interface method to get the LocalParameters.
const Amg::Vector3D & momentum() const
Access method for the momentum.
Class to represent the calibrated clusters created from CSC strips.
std::vector< Hit > HitVec
DetectorRegionIndex
enum to classify the different layers in the muon spectrometer
def time(flags, cells_name, *args, **kw)
#define ATH_MSG_WARNING(x)
virtual const Trk::StraightLineSurface & associatedSurface() const override final
Returns the surface on which this measurement was taken.
Identifier identify() const
return the identifier -extends MeasurementBase
bool dropHits(Segment &segment, bool &hasDroppedHit, unsigned int &dropDepth) const
virtual const Trk::Surface & surface() const override final
Return surface associated with this detector element.
T * get(TKey *tobj)
get a TObject* from a TKey* (why can't a TObject be a TKey?)
const std::vector< Intersection > & layerIntersections() const
access to the intersections with the layers.
class representing a drift circle meaurement on segment
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
Class representing clusters in the muon system.
virtual const Amg::Vector3D & globalPosition() const override final
global position
ChIndex
enum to classify the different chamber layers in the muon spectrometer
Class describing a TrackParticle.
float time() const
access to the measured time
const Trk::Track * track() const
Returns a pointer (which can be NULL) to the Trk::Track which was used to make this TrackParticle.
float distance(const Amg::Vector3D &p1, const Amg::Vector3D &p2)
calculates the distance between two point in 3D space
cl
print [x.__class__ for x in toList(dqregion.getSubRegions()) ]
size_type size() const noexcept
Returns the number of elements in the collection.
Base class for Muon cluster RIO_OnTracks.
virtual double phi() const override final
The azimuthal angle ( ) of the particle (has range to .)
void debugLevel(int debugLevel)
Muon::NSW_PadTriggerSegment segment(const NSWL1::PadTrigger &data)
@ InTime
drift time too small to be compatible with drift spectrum