Loading [MathJax]/extensions/tex2jax.js
 |
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 > &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 > &hndl, const SG::VarHandleKeyType &) |
| specialization for handling Gaudi::Property<SG::VarHandleKey> More...
|
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleKeyArrayType &) |
| specialization for handling Gaudi::Property<SG::VarHandleKeyArray> More...
|
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T > &hndl, const SG::VarHandleType &) |
| specialization for handling Gaudi::Property<SG::VarHandleBase> More...
|
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T > &t, const SG::NotHandleType &) |
| specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray> More...
|
|
|
SG::ReadHandleKey< Muon::MuonLayerHoughTool::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 1440 of file MuonStauRecoTool.cxx.
1443 ATH_MSG_WARNING(
"You are calling the non thread-safe MuonRecoValidationTool with multiple threads, will most likely crash");
1451 float chi2ndof = -1.;
1452 if (candidate->finalBetaFitResult.status != 0) {
1453 ntimes = candidate->stauHits.size();
1454 beta = candidate->finalBetaFitResult.beta;
1455 chi2ndof = candidate->finalBetaFitResult.chi2PerDOF();
1456 }
else if (candidate->betaFitResult.status != 0) {
1457 ntimes = candidate->hits.size();
1458 beta = candidate->betaFitResult.beta;
1459 chi2ndof = candidate->betaFitResult.chi2PerDOF();
1462 beta = candidate->betaSeed.beta;
1465 if (candidate->combinedTrack)
ATH_MSG_DEBUG(
"candidate has combined track");
1466 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));
732 msg(MSG::INFO) <<
" Summary::addTag ";
733 msg(MSG::INFO) << std::endl
734 <<
" candidate: beta fit result: beta " << candidate.betaFitResult.beta <<
" chi2/ndof "
735 << candidate.betaFitResult.chi2PerDOF() <<
" segments" << segmentLinks.size();
738 msg(MSG::INFO) << std::endl
739 <<
" track " <<
m_printer->print(**comblink) << std::endl
745 tagMap->addEntry(&indetCandidate,
tag);
◆ associateHoughMaxima()
associate Hough maxima to intersection
Definition at line 1300 of file MuonStauRecoTool.cxx.
1312 if (!houghDataPerSectorVec.isValid()) {
1318 if (
static_cast<int>(houghDataPerSectorVec->vec.size()) <= sector - 1) {
1320 <<
" larger than the available sectors in the Hough tool: " << houghDataPerSectorVec->vec.size());
1329 if (houghDataPerSector.
maxVec.size() <= sectorLayerHash) {
1330 ATH_MSG_WARNING(
" houghDataPerSector.maxVec.size() smaller than hash " << houghDataPerSector.
maxVec.size() <<
" hash "
1331 << sectorLayerHash);
1335 if (maxVec.empty())
return;
1347 float errx =
intersection.trackParameters->covariance() ?
1349 float x = barrelLike ?
z :
r;
1350 float y = barrelLike ?
r :
z;
1351 float theta = std::atan2(
y,
x);
1355 ATH_MSG_DEBUG(
" Got Phi Hough maxima " << phiMaxVec.size() <<
" phi " << phi);
1359 std::vector<std::shared_ptr<const Muon::MuonClusterOnTrack>>&
clusters) {
1361 if (cluster)
clusters.push_back(std::move(cluster));
1366 std::vector<std::shared_ptr<const Muon::MuonClusterOnTrack>> phiClusterOnTracks;
1367 Muon::MuonLayerHoughTool::PhiMaximumVec::const_iterator pit = phiMaxVec.begin();
1368 Muon::MuonLayerHoughTool::PhiMaximumVec::const_iterator pit_end = phiMaxVec.end();
1369 for (; pit != pit_end; ++pit) {
1371 for (
const std::shared_ptr<MuonHough::PhiHit>& hit : maximum.
hits) {
1387 <<
"," <<
y <<
") errorx " << errx <<
" "
1388 <<
" angle " << theta);
1391 for (
const auto& mit : maxVec) {
1393 if (std::find_if(maximum.
hits.begin(),maximum.
hits.end(),
1394 [](
const std::shared_ptr<MuonHough::Hit>& hit){
1395 return hit->prd && (hit->prd->type(Trk::PrepRawDataType::sTgcPrepData) ||
1396 hit->prd->type(Trk::PrepRawDataType::MMPrepData));
1397 }) != maximum.
hits.end())
continue;
1406 const float pullUncert = std::sqrt(errx * errx + maxwidth * maxwidth / 12.);
1407 float pull =
residual / (pullUncert > std::numeric_limits<float>::epsilon() ? pullUncert : 1.) ;
1410 <<
" pull " <<
pull <<
" angle " << maximum.
theta <<
" residual " << residualTheta);
1415 if (std::abs(
pull) > 5)
continue;
1416 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 1437 of file MuonStauRecoTool.cxx.
1438 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);
832 msg(MSG::INFO) <<
" Summary::combineCandidates ";
834 msg(MSG::INFO) <<
" No candidated found ";
839 msg(MSG::INFO) << std::endl
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;
914 msg(MSG::INFO) <<
" Summary::createCandidates ";
916 msg(MSG::INFO) <<
" No candidated found ";
921 msg(MSG::INFO) << std::endl
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)
926 msg(MSG::INFO) << std::endl
928 << layerData.maximumDataVec.size();
◆ createRpcTimeMeasurementsFromClusters()
create Rpc hit timing for a set of clusters
Definition at line 1259 of file MuonStauRecoTool.cxx.
1263 for (
const auto& cluster : clusterObjects) {
1272 std::vector<const Muon::MuonClusterOnTrack*>
clusters;
1273 for (
const auto* rpc :
cluster.hitList) {
1285 RpcTimeMeasurement rpcTimeMeasurement;
1286 rpcTimeMeasurement.time =
result.time;
1287 rpcTimeMeasurement.error =
result.error;
1290 if (rcl) rpcTimeMeasurement.rpcClusters.push_back(std::shared_ptr<const Muon::RpcClusterOnTrack>(rcl));
1292 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_unique<Candidate>(candidate->betaSeed);
966 newCandidates.push_back(newCandidate);
967 theCandidate = newCandidate.get();
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 1213 of file MuonStauRecoTool.cxx.
1217 std::map<Identifier, std::vector<const Muon::RpcPrepData*>> rpcPrdsPerChamber;
1224 rpcPrdsPerChamber[chamberId].push_back(rpcPrd);
1229 MuonHough::HitVec::const_iterator hit = maximum.
hits.begin();
1230 MuonHough::HitVec::const_iterator hit_end = maximum.
hits.end();
1231 for (; hit != hit_end; ++hit) {
1232 if ((*hit)->tgc || !(*hit)->prd || !
m_idHelperSvc->isRpc((*hit)->prd->identify()))
continue;
1233 addRpc((*hit)->prd);
1237 for (
const auto& rot : maximumData.phiClusterOnTracks) { addRpc(rot->prepRawData()); }
1240 if (rpcPrdsPerChamber.empty())
return;
1242 std::map<Identifier, std::vector<const Muon::RpcPrepData*>>
::iterator chit = rpcPrdsPerChamber.begin();
1243 std::map<Identifier, std::vector<const Muon::RpcPrepData*>>
::iterator chit_end = rpcPrdsPerChamber.end();
1244 for (; chit != chit_end; ++chit) {
1247 if (!clustering.cluster(chit->second)) {
1253 <<
" 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())
1034 msg(MSG::INFO) <<
" No layers associated ";
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;
1043 msg(MSG::INFO) << std::endl
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) {
1204 segments.push_back(std::shared_ptr<const Muon::MuonSegment>(mseg));
1209 for (
const auto* hit : mdts)
delete hit;
1210 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();
136 if (truthInfo)
msg(MSG::INFO) << truthInfo->toString();
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);
242 msg(MSG::INFO) <<
" Summary::refineCandidates ";
244 msg(MSG::INFO) <<
" No candidated found ";
249 msg(MSG::INFO) << std::endl
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)
253 msg(MSG::INFO) << std::endl
◆ 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;
788 msg(MSG::INFO) <<
" Summary::resolveAmbiguities ";
789 msg(MSG::INFO) << std::endl
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
static const std::string & chName(ChIndex index)
convert ChIndex into a string
float errorTime() const
access to the error on the measured time
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
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
virtual double eta() const override final
The pseudorapidity ( ) of the particle.
RegionDescriptor m_descriptor
std::vector< bool > HitSelection
virtual Amg::Transform3D GlobalToAmdbLRSTransform() const
void setDeltaCut(double cut)
LayerIndex
enum to classify the different layers in the muon spectrometer
static unsigned int sectorLayerHash(DetectorRegionIndex detectorRegionIndex, LayerIndex layerIndex)
create a hash out of region and layer
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)
virtual bool type(PrepRawDataType type) const =0
Interface method checking the type.
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)
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
struct representing the maximum in the hough space
std::bitset< 23 > MuonDriftCircleErrorStrategyInput
const Muon::TgcClusterObj3D * tgc
(Non-const) Iterator class for DataVector/DataList.
Class to represent RPC measurements.
Tracking class to hold the extrapolation from a particle from the calo entry to the end of muon syste...
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)
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)
DetectorRegionIndex
enum to classify the different layers in the muon spectrometer
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 ...
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
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.
ChIndex
enum to classify the different chamber layers in the muon spectrometer
Class representing clusters in the muon system.
virtual const Amg::Vector3D & globalPosition() const override final
global position
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.
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
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