|
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) 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} |
|
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 56 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 1420 of file MuonStauRecoTool.cxx.
1423 ATH_MSG_WARNING(
"You are calling the non thread-safe MuonRecoValidationTool with multiple threads, will most likely crash");
1431 float chi2ndof = -1.;
1432 if (candidate->finalBetaFitResult.status != 0) {
1433 ntimes = candidate->stauHits.size();
1434 beta = candidate->finalBetaFitResult.beta;
1435 chi2ndof = candidate->finalBetaFitResult.chi2PerDOF();
1436 }
else if (candidate->betaFitResult.status != 0) {
1437 ntimes = candidate->hits.size();
1438 beta = candidate->betaFitResult.beta;
1439 chi2ndof = candidate->betaFitResult.chi2PerDOF();
1442 beta = candidate->betaSeed.beta;
1445 if (candidate->combinedTrack)
ATH_MSG_DEBUG(
"candidate has combined track");
1446 m_recoValidationTool->addMuonCandidate(indetTrackParticle, candidate->muonCandidate.get(), candidate->combinedTrack.get(),
◆ addTag()
create final tag object and add it to the inDetCandidate
Definition at line 682 of file MuonStauRecoTool.cxx.
688 combTracks->
push_back(candidate.combinedTrack.release());
690 std::vector<ElementLink<Trk::SegmentCollection>> segmentLinks;
691 for (
const auto&
layer : candidate.allLayers) {
695 segmentLinks.push_back(segLink);
703 tag->setMuBeta(candidate.betaFitResult.beta);
706 std::unique_ptr<MuGirlNS::StauExtras> stauExtras = std::make_unique<MuGirlNS::StauExtras>();
707 stauExtras->
betaAll = candidate.betaFitResult.beta;
708 stauExtras->
betaAllt = candidate.finalBetaFitResult.beta;
709 stauExtras->
hits = candidate.stauHits;
710 tag->setStauExtras(std::move(stauExtras));
714 msg(MSG::INFO) <<
" Summary::addTag ";
715 msg(MSG::INFO) << std::endl
716 <<
" candidate: beta fit result: beta " << candidate.betaFitResult.beta <<
" chi2/ndof "
717 << candidate.betaFitResult.chi2PerDOF() <<
" segments" << segmentLinks.size();
720 msg(MSG::INFO) << std::endl
721 <<
" track " <<
m_printer->print(**comblink) << std::endl
727 tagMap->addEntry(&indetCandidate,
tag);
◆ associateHoughMaxima()
associate Hough maxima to intersection
Definition at line 1280 of file MuonStauRecoTool.cxx.
1292 if (!houghDataPerSectorVec.isValid()) {
1298 if (
static_cast<int>(houghDataPerSectorVec->vec.size()) <= sector - 1) {
1300 <<
" larger than the available sectors in the Hough tool: " << houghDataPerSectorVec->vec.size());
1309 if (houghDataPerSector.
maxVec.size() <= sectorLayerHash) {
1310 ATH_MSG_WARNING(
" houghDataPerSector.maxVec.size() smaller than hash " << houghDataPerSector.
maxVec.size() <<
" hash "
1311 << sectorLayerHash);
1315 if (maxVec.empty())
return;
1327 float errx =
intersection.trackParameters->covariance() ?
1329 float x = barrelLike ?
z :
r;
1330 float y = barrelLike ?
r :
z;
1331 float theta = std::atan2(
y,
x);
1335 ATH_MSG_DEBUG(
" Got Phi Hough maxima " << phiMaxVec.size() <<
" phi " << phi);
1339 std::vector<std::shared_ptr<const Muon::MuonClusterOnTrack>>&
clusters) {
1341 if (cluster)
clusters.push_back(std::move(cluster));
1346 std::vector<std::shared_ptr<const Muon::MuonClusterOnTrack>> phiClusterOnTracks;
1347 Muon::MuonLayerHoughTool::PhiMaximumVec::const_iterator pit = phiMaxVec.begin();
1348 Muon::MuonLayerHoughTool::PhiMaximumVec::const_iterator pit_end = phiMaxVec.end();
1349 for (; pit != pit_end; ++pit) {
1351 for (
const std::shared_ptr<MuonHough::PhiHit>& hit : maximum.
hits) {
1367 <<
"," <<
y <<
") errorx " << errx <<
" "
1368 <<
" angle " << theta);
1371 for (
const auto& mit : maxVec) {
1373 if (std::find_if(maximum.
hits.begin(),maximum.
hits.end(),
1374 [](
const std::shared_ptr<MuonHough::Hit>& hit){
1375 return hit->prd && (hit->prd->type(Trk::PrepRawDataType::sTgcPrepData) ||
1376 hit->prd->type(Trk::PrepRawDataType::MMPrepData));
1377 }) != maximum.
hits.end())
continue;
1386 const float pullUncert = std::sqrt(errx * errx + maxwidth * maxwidth / 12.);
1387 float pull =
residual / (pullUncert > std::numeric_limits<float>::epsilon() ? pullUncert : 1.) ;
1390 <<
" pull " <<
pull <<
" angle " << maximum.
theta <<
" residual " << residualTheta);
1395 if (std::abs(
pull) > 5)
continue;
1396 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 1417 of file MuonStauRecoTool.cxx.
1418 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 782 of file MuonStauRecoTool.cxx.
791 std::pair<std::unique_ptr<const Muon::MuonCandidate>, std::unique_ptr<Trk::Track>>
result =
799 candidate->muonCandidate = std::move(
result.first);
800 candidate->combinedTrack = std::move(
result.second);
804 combinedCandidates.push_back(candidate);
814 msg(MSG::INFO) <<
" Summary::combineCandidates ";
816 msg(MSG::INFO) <<
" No candidated found ";
821 msg(MSG::INFO) << std::endl
822 <<
" candidate: beta fit result: " << candidate->betaFitResult.beta <<
" chi2/ndof "
823 << candidate->betaFitResult.chi2PerDOF();
824 if (candidate->finalBetaFitResult.status != 0)
825 msg(MSG::INFO) <<
" MDTT beta fit result: " << candidate->finalBetaFitResult.beta <<
" chi2/ndof "
826 << candidate->finalBetaFitResult.chi2PerDOF();
827 msg(MSG::INFO) <<
" layers with segments" << candidate->allLayers.size() << std::endl
828 <<
" track " <<
m_printer->print(*candidate->combinedTrack) << std::endl
829 <<
m_printer->printStations(*candidate->combinedTrack);
◆ createCandidates()
create candidates from the beta seeds
Definition at line 837 of file MuonStauRecoTool.cxx.
841 LayerDataVec::const_iterator
it = associatedData.layerData.begin();
842 LayerDataVec::const_iterator it_end = associatedData.layerData.end();
843 for (;
it != it_end; ++
it) {
845 for (
const auto& maximumData :
it->maximumDataVec) {
847 if (!maximumData->betaSeeds.empty()) seedMaximumDataVec.push_back(maximumData);
850 ATH_MSG_DEBUG(
"Creating candidates from seeds " << seedMaximumDataVec.size());
852 if (seedMaximumDataVec.empty()) {
858 auto SortMaximumDataVec = [](
const std::shared_ptr<MaximumData>&
max1,
const std::shared_ptr<MaximumData>& max2) {
859 return max1->maximum->max < max2->maximum->max;
861 std::stable_sort(seedMaximumDataVec.begin(), seedMaximumDataVec.end(), SortMaximumDataVec);
865 std::set<const MaximumData*> usedMaximumData;
868 for (; sit != sit_end; ++sit) {
870 if (usedMaximumData.count(sit->get()))
continue;
871 usedMaximumData.insert(sit->get());
875 for (
const auto& betaSeed : (*sit)->betaSeeds) { newCandidates.push_back(std::make_shared<Candidate>(betaSeed)); }
877 extendCandidates(newCandidates, usedMaximumData, associatedData.layerData.begin(), associatedData.layerData.end());
880 for (
auto& newCandidate : newCandidates) {
882 newCandidate->betaFitResult =
fitter.fitWithOutlierLogic(newCandidate->hits);
884 << newCandidate->hits.size() <<
" status " << newCandidate->betaFitResult.status <<
" beta "
885 << newCandidate->betaFitResult.beta <<
" chi2/ndof " << newCandidate->betaFitResult.chi2PerDOF());
887 if (newCandidate->betaFitResult.status != 0) {
888 newCandidate->combinedTrack =
nullptr;
896 msg(MSG::INFO) <<
" Summary::createCandidates ";
898 msg(MSG::INFO) <<
" No candidated found ";
903 msg(MSG::INFO) << std::endl
904 <<
" candidate: beta seed " << candidate->betaSeed.beta <<
" beta fit result: beta "
905 << candidate->betaFitResult.beta <<
" chi2/ndof " << candidate->betaFitResult.chi2PerDOF() <<
" layers "
906 << candidate->layerDataVec.size();
907 for (
const auto& layerData : candidate->layerDataVec)
908 msg(MSG::INFO) << std::endl
910 << layerData.maximumDataVec.size();
◆ createRpcTimeMeasurementsFromClusters()
create Rpc hit timing for a set of clusters
Definition at line 1239 of file MuonStauRecoTool.cxx.
1243 for (
const auto& cluster : clusterObjects) {
1244 if (cluster.hitList.empty() || !cluster.hitList.front()) {
1249 << cluster.hitList.size());
1252 std::vector<const Muon::MuonClusterOnTrack*>
clusters;
1253 for (
const auto* rpc : cluster.hitList) {
1265 RpcTimeMeasurement rpcTimeMeasurement;
1266 rpcTimeMeasurement.time =
result.time;
1267 rpcTimeMeasurement.error =
result.error;
1270 if (rcl) rpcTimeMeasurement.rpcClusters.push_back(std::shared_ptr<const Muon::RpcClusterOnTrack>(rcl));
1272 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 918 of file MuonStauRecoTool.cxx.
922 const LayerData& layerData = *
it;
924 << layerData.maximumDataVec.size());
929 unsigned int nextensions = 0;
936 for (
const auto& maximumData : layerData.maximumDataVec) {
942 if (nextensions == 0)
943 theCandidate = candidate.get();
945 std::shared_ptr<Candidate> newCandidate = std::make_unique<Candidate>(candidate->betaSeed);
948 newCandidates.push_back(newCandidate);
949 theCandidate = newCandidate.get();
953 LayerData newLayerData(layerData.intersection);
954 newLayerData.maximumDataVec.push_back(maximumData);
957 theCandidate->hits.insert(theCandidate->hits.end(), newhits.begin(), newhits.end());
958 theCandidate->layerDataVec.push_back(newLayerData);
959 usedMaximumData.insert(maximumData.get());
961 ATH_MSG_DEBUG(
" adding maximumData: candidate hits " << theCandidate->hits.size() <<
" LayerDataVec "
962 << theCandidate->layerDataVec.size() <<
" nextensions "
969 ATH_MSG_DEBUG(
" extendCandidates done, new candidates " << newCandidates.size());
◆ extendWithPRDs()
◆ extractRpcTimingFromMaximum()
extract RPC hit timing
Definition at line 1193 of file MuonStauRecoTool.cxx.
1197 std::map<Identifier, std::vector<const Muon::RpcPrepData*>> rpcPrdsPerChamber;
1204 rpcPrdsPerChamber[chamberId].push_back(rpcPrd);
1209 MuonHough::HitVec::const_iterator hit = maximum.
hits.begin();
1210 MuonHough::HitVec::const_iterator hit_end = maximum.
hits.end();
1211 for (; hit != hit_end; ++hit) {
1212 if ((*hit)->tgc || !(*hit)->prd || !
m_idHelperSvc->isRpc((*hit)->prd->identify()))
continue;
1213 addRpc((*hit)->prd);
1217 for (
const auto& rot : maximumData.phiClusterOnTracks) { addRpc(rot->prepRawData()); }
1220 if (rpcPrdsPerChamber.empty())
return;
1222 std::map<Identifier, std::vector<const Muon::RpcPrepData*>>
::iterator chit = rpcPrdsPerChamber.begin();
1223 std::map<Identifier, std::vector<const Muon::RpcPrepData*>>
::iterator chit_end = rpcPrdsPerChamber.end();
1224 for (; chit != chit_end; ++chit) {
1227 if (!clustering.cluster(chit->second)) {
1233 <<
" 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 1036 of file MuonStauRecoTool.cxx.
1038 unsigned int nstart =
hits.size();
1054 for (
const auto& rpc : maximumData.rpcTimeMeasurements) {
1055 float time = rpc.time;
1056 float error = rpc.error;
1064 for (
const auto& seg : maximumData.t0fittedSegments) {
1065 if (!seg->hasFittedT0())
continue;
1066 float time = seg->time();
1067 float error = seg->errorTime();
1075 float smallestResidual = FLT_MAX;
1076 for (
const auto& seg : maximumData.t0fittedSegments) {
1077 if (!seg->hasFittedT0())
continue;
1078 float distance = seg->globalPosition().mag();
1079 float time = seg->time();
1085 bestSegment = seg.get();
1095 return nstart !=
hits.size();
◆ extractTimeMeasurements()
associate Hough maxima and associate time measurements
Definition at line 979 of file MuonStauRecoTool.cxx.
986 LayerData layerData{iSect};
990 if (layerData.maximumDataVec.empty())
continue;
992 associatedData.layerData.push_back(layerData);
995 for (
auto& maximum : layerData.maximumDataVec) {
1000 std::vector<std::shared_ptr<const Muon::MuonSegment>> t0fittedSegments;
1002 if (t0fittedSegments.empty())
continue;
1014 msg(MSG::INFO) <<
" Summary::extractTimeMeasurements ";
1015 if (associatedData.layerData.empty())
1016 msg(MSG::INFO) <<
" No layers associated ";
1018 msg(MSG::INFO) <<
" Associated layers " << associatedData.layerData.size();
1020 for (
const auto& layerData : associatedData.layerData) {
1021 unsigned int nmaxWithBeta = 0;
1022 for (
const auto& maximumData : layerData.maximumDataVec) {
1023 if (!maximumData->betaSeeds.empty()) ++nmaxWithBeta;
1025 msg(MSG::INFO) << std::endl
1027 << layerData.maximumDataVec.size() <<
" maxima with beta seeds " << nmaxWithBeta;
1033 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 261 of file MuonStauRecoTool.cxx.
265 if (!mdtCalibConstants.isValid()) {
267 throw std::runtime_error(
"Failed to retrieve calibration constants");
269 ATH_MSG_VERBOSE(
"extractTimeMeasurementsFromTrack for candidate: beta seed " << candidate.betaSeed.beta);
274 float betaSeed = candidate.betaFitResult.beta;
283 ATH_MSG_WARNING(
" track without states, cannot extractTimeMeasurementsFromTrack ");
290 typedef std::vector<const Muon::MuonClusterOnTrack*> RpcClVec;
291 using RpcClPerChMap = std::map<Identifier, std::tuple<const Trk::TrackParameters*, RpcClVec, RpcClVec>>;
292 RpcClPerChMap rpcPrdsPerChamber;
294 using MdtTubeData = std::pair<const Trk::TrackParameters*, const Muon::MdtDriftCircleOnTrack*>;
295 using MdtTubeDataVec = std::vector<MdtTubeData>;
296 using MdtChamberLayerData = std::map<int, MdtTubeDataVec>;
297 MdtChamberLayerData mdtDataPerChamberLayer;
302 for (; tsit != tsit_end; ++tsit) {
324 if (stName[2] ==
'R') { chIndexWithBIR += 1000; }
326 mdtDataPerChamberLayer[chIndexWithBIR].push_back(std::make_pair(
pars, mdt));
332 float ix =
pars->position().x();
333 float iy =
pars->position().y();
334 float iz =
pars->position().z();
346 auto data = mdtCalibConstants->getCalibData(
id, msgStream());
347 const auto& rtRelation =
data->rtRelation;
348 float drdt = rtRelation->rt()->driftVelocity(
driftTime);
349 float rres = rtRelation->rtRes()->resolution(
driftTime);
350 float tres = rres / drdt;
351 float TlocR = rtRelation->tr()->driftTime(std::abs(
locR)).value_or(0.);
352 float trackTimeRes = errR / drdt;
354 er = std::sqrt(
tres *
tres + trackTimeRes * trackTimeRes);
361 std::unique_ptr<const Trk::TrackParameters> unbiasedPars(
364 float locRu = unbiasedPars->parameters()[
Trk::locR];
365 float TlocRu = rtRelation->tr()->driftTime(std::abs(locRu)).value_or(0.);
366 float errRu = unbiasedPars->covariance() ?
Amg::error(*unbiasedPars->covariance(),
Trk::locR) : 0.3;
367 float trackTimeResu = errRu / drdt;
370 er = std::sqrt(
tres *
tres + trackTimeResu * trackTimeResu);
372 ATH_MSG_VERBOSE(
" Got unbiased parameters: r " <<
locR <<
" ur " << locRu <<
" err " << errR <<
" uerr "
373 << errRu <<
" terr " << trackTimeRes <<
" terru "
379 <<
" TlocR " << TlocR <<
" diff " <<
driftTime - TlocR <<
" tofShift " << tofShiftFromBeta
380 <<
" time " << time <<
" err " << er <<
" intrinsic " <<
tres <<
" track " << trackTimeRes);
384 <<
beta <<
" diff " << std::abs(
beta - betaSeed));
388 candidate.stauHits.push_back(
MuGirlNS::StauHit(tech, time + tof, ix, iy, iz,
id,
ie, er,
sh, isEta, propTime));
392 std::vector<const Muon::MuonClusterOnTrack*>
clusters;
402 auto pos = rpcPrdsPerChamber.find(chamberId);
403 if (
pos == rpcPrdsPerChamber.end()) {
405 rpcPrdsPerChamber[chamberId] = std::make_tuple(
pars,
clusters, RpcClVec());
407 rpcPrdsPerChamber[chamberId] = std::make_tuple(
pars, RpcClVec(),
clusters);
409 RpcClVec& clVec = measuresPhi ? std::get<1>(
pos->second) : std::
get<2>(
pos->
second);
419 float ix =
pars->position().x();
420 float iy =
pars->position().y();
421 float iz =
pars->position().z();
428 candidate.stauHits.push_back(
MuGirlNS::StauHit(tech, time + tof, ix, iy, iz,
id,
ie, er,
sh, isEta, propTime));
436 std::vector<const Muon::MuonClusterOnTrack*> calibratedClusters;
437 for (
const auto* cluster :
clusters) {
439 if (
cl) calibratedClusters.push_back(
cl);
441 if (calibratedClusters.empty())
return;
444 for (
const auto*
cl : calibratedClusters)
delete cl;
445 if (!
result.valid)
return;
452 float ix =
pars.position().x();
453 float iy =
pars.position().y();
454 float iz =
pars.position().z();
465 <<
" diff " << std::abs(
beta - betaSeed));
470 candidate.stauHits.push_back(
MuGirlNS::StauHit(tech, time + tof, ix, iy, iz,
id,
ie, er,
sh, isEta, propTime));
474 RpcClPerChMap::const_iterator chit = rpcPrdsPerChamber.begin();
475 RpcClPerChMap::const_iterator chit_end = rpcPrdsPerChamber.end();
478 for (; chit != chit_end; ++chit) {
480 const RpcClVec& phiClusters = std::get<1>(chit->second);
481 const RpcClVec& etaClusters = std::get<2>(chit->second);
482 insertRpcs(*
pars, phiClusters, candidate,
hits);
483 insertRpcs(*
pars, etaClusters, candidate,
hits);
498 MdtChamberLayerData::const_iterator mit = mdtDataPerChamberLayer.begin();
499 MdtChamberLayerData::const_iterator mit_end = mdtDataPerChamberLayer.end();
500 for (; mit != mit_end; ++mit) {
502 <<
" hits " << mit->second.size());
503 if (mit->second.size() < 4)
continue;
509 ATH_MSG_WARNING(
"MdtReadoutElement should always have a PlaneSurface as reference surface");
526 std::vector<std::pair<std::shared_ptr<const Muon::MdtDriftCircleOnTrack>,
const Trk::TrackParameters*>> indexLookUp;
528 for (
const auto&
entry : mit->second) {
533 std::unique_ptr<const Muon::MdtDriftCircleOnTrack> calibratedMdt(
535 if (!calibratedMdt) {
542 <<
" r_track " <<
pars.parameters()[
Trk::locR] <<
" residual "
554 double r = std::abs(calibratedMdt->driftRadius());
565 dcs.push_back(dcOnTrack);
566 indexLookUp.emplace_back(std::move(calibratedMdt), &
pars);
571 for (
unsigned int i = 0;
i < dcs.size(); ++
i) {
580 segment.hitsOnTrack(dcs.size());
581 unsigned int ndofFit =
segment.ndof();
582 if (ndofFit < 1)
continue;
583 double chi2NdofSegmentFit =
segment.chi2() / ndofFit;
584 bool hasDropHit =
false;
585 unsigned int dropDepth = 0;
587 ATH_MSG_DEBUG(
"DropHits failed, fit chi2/ndof " << chi2NdofSegmentFit);
596 if (
i >=
segment.dcs().size())
continue;
602 double rline = toLine.toLineY(dc.
position());
604 if (index < 0 || index >= (
int)indexLookUp.size()) {
605 ATH_MSG_WARNING(
" lookup of TrackParameters and MdtDriftCircleOnTrack failed " <<
index <<
" range: 0 - "
606 << indexLookUp.size() - 1);
614 std::shared_ptr<const Muon::MdtDriftCircleOnTrack> calibratedMdt(
616 if (!calibratedMdt.get()) {
623 float ix =
pars->position().x();
624 float iy =
pars->position().y();
625 float iz =
pars->position().z();
634 float driftTime = calibratedMdt->driftTime();
637 auto data = mdtCalibConstants->getCalibData(
id, msgStream());
638 const auto& rtRelation =
data->rtRelation;
639 float drdt = rtRelation->rt()->driftVelocity(
driftTime);
640 float rres = rtRelation->rtRes()->resolution(
driftTime);
641 float tres = rres / drdt;
642 float TlocR = rtRelation->tr()->driftTime(std::abs(
locR)).value_or(0.);
643 float trackTimeRes = errR / drdt;
644 float tofShiftFromBeta = 0.;
645 er = std::sqrt(
tres *
tres + trackTimeRes * trackTimeRes);
656 << chi2NdofSegmentFit <<
" ndof " << std::setw(2) << ndofFit;
658 msg(
MSG::DEBUG) <<
" after outlier " << std::setw(5) << chi2NdofSegmentFit <<
" ndof " << std::setw(2) << ndofFit;
659 msg(
MSG::DEBUG) <<
" driftR " << std::setw(4) << dc.
r() <<
" rline " << std::setw(5) << rline <<
" residual "
660 << std::setw(5) <<
res <<
" pull " << std::setw(4) <<
pull <<
" time " << std::setw(3) <<
time
661 <<
" beta" << std::setw(2) <<
beta <<
" err " << std::setw(3) << er <<
" intrinsic " << std::setw(3)
662 <<
tres <<
" track " << std::setw(3) << trackTimeRes;
667 if (!isSelected)
continue;
670 candidate.stauHits.emplace_back(
MuGirlNS::MDTT_STAU_HIT, time + tof, ix, iy, iz,
id,
ie, er,
sh, isEta, propTime);
675 ATH_MSG_DEBUG(
" extractTimeMeasurementsFromTrack: extracted " << candidate.stauHits.size() <<
" time measurements "
676 <<
" status fit " << betaFitResult.
status <<
" beta "
677 << betaFitResult.
beta <<
" chi2/ndof " << betaFitResult.
chi2PerDOF());
679 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 1115 of file MuonStauRecoTool.cxx.
1120 const std::vector<std::shared_ptr<const Muon::MuonClusterOnTrack>>& phiClusterOnTracks = maximumData.phiClusterOnTracks;
1124 std::vector<const Muon::MdtDriftCircleOnTrack*>& mdts) {
1126 if (mdt) mdts.push_back(mdt);
1131 std::vector<const Muon::MuonClusterOnTrack*>&
clusters) {
1133 if (cluster)
clusters.push_back(cluster);
1137 std::vector<const Muon::MdtDriftCircleOnTrack*> mdts;
1138 std::vector<const Muon::MuonClusterOnTrack*>
clusters;
1141 clusters.reserve(phiClusterOnTracks.size());
1143 for (
const auto& phiClusterOnTrack : phiClusterOnTracks) {
clusters.push_back(phiClusterOnTrack->clone()); }
1147 MuonHough::HitVec::const_iterator hit = maximum.
hits.begin();
1148 MuonHough::HitVec::const_iterator hit_end = maximum.
hits.end();
1149 for (; hit != hit_end; ++hit) {
1150 ATH_MSG_DEBUG(
"hit x,y_min,y_max,w = " << (*hit)->x <<
"," << (*hit)->ymin <<
"," << (*hit)->ymax <<
"," << (*hit)->w);
1153 for (
const auto& prd : (*hit)->tgc->etaCluster) handleCluster(*prd,
clusters);
1154 }
else if ((*hit)->prd) {
1172 if (mdts.size() > 2) {
1180 for (; sit != sit_end; ++sit) {
1184 segments.push_back(std::shared_ptr<const Muon::MuonSegment>(mseg));
1189 for (
const auto* hit : mdts)
delete hit;
1190 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 1098 of file MuonStauRecoTool.cxx.
1100 if (maximumData.rpcTimeMeasurements.empty() && maximumData.t0fittedSegments.empty())
return;
1108 float chi2ndof =
result.chi2PerDOF();
1110 ATH_MSG_DEBUG(
" fitting beta for maximum: time measurements " <<
hits.size() <<
" status " <<
result.status <<
" beta "
1111 <<
result.beta <<
" chi2/ndof " << chi2ndof);
1112 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());
202 for (
const auto& layerData : candidate->layerDataVec) {
204 std::vector<std::shared_ptr<const Muon::MuonSegment>> segments;
207 for (
const auto& maximumData : layerData.maximumDataVec) {
213 if (segments.empty())
continue;
221 std::vector<std::shared_ptr<const Muon::MuonSegment>> selectedSegments;
225 for (
const auto& seg : selectedSegments)
m_recoValidationTool->add(layerData.intersection, *seg, 3);
229 candidate->allLayers.emplace_back(layerData.intersection, std::move(selectedSegments));
233 if (!candidate->allLayers.empty()) refinedCandidates.push_back(candidate);
241 msg(MSG::INFO) <<
" Summary::refineCandidates ";
243 msg(MSG::INFO) <<
" No candidated found ";
248 msg(MSG::INFO) << std::endl
249 <<
" candidate: beta fit result: beta " << candidate->betaFitResult.beta <<
" chi2/ndof "
250 << candidate->betaFitResult.chi2PerDOF() <<
" layers with segments" << candidate->allLayers.size();
251 for (
const auto&
layer : candidate->allLayers)
252 msg(MSG::INFO) << std::endl
◆ renounce()
◆ renounceArray()
◆ resolveAmbiguities()
resolve ambiguities between the candidates
Definition at line 730 of file MuonStauRecoTool.cxx.
735 std::map<const Trk::Track*, std::shared_ptr<Candidate>> trackCandidateLookup;
739 tracks.push_back(
track);
740 trackCandidateLookup[
track] = candidate;
745 if (tracks.empty())
return false;
746 if (tracks.size() == 1)
return true;
750 if (!resolvedTracks || resolvedTracks->empty()) {
754 const Trk::Track* selectedTrack = resolvedTracks->front();
757 auto pos = trackCandidateLookup.find(selectedTrack);
758 if (
pos == trackCandidateLookup.end()) {
764 std::shared_ptr<Candidate> candidate =
pos->second;
770 msg(MSG::INFO) <<
" Summary::resolveAmbiguities ";
771 msg(MSG::INFO) << std::endl
772 <<
" 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_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
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