|
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 1422 of file MuonStauRecoTool.cxx.
1425 ATH_MSG_WARNING(
"You are calling the non thread-safe MuonRecoValidationTool with multiple threads, will most likely crash");
1433 float chi2ndof = -1.;
1434 if (candidate->finalBetaFitResult.status != 0) {
1435 ntimes = candidate->stauHits.size();
1436 beta = candidate->finalBetaFitResult.beta;
1437 chi2ndof = candidate->finalBetaFitResult.chi2PerDOF();
1438 }
else if (candidate->betaFitResult.status != 0) {
1439 ntimes = candidate->hits.size();
1440 beta = candidate->betaFitResult.beta;
1441 chi2ndof = candidate->betaFitResult.chi2PerDOF();
1444 beta = candidate->betaSeed.beta;
1447 if (candidate->combinedTrack)
ATH_MSG_DEBUG(
"candidate has combined track");
1448 m_recoValidationTool->addMuonCandidate(indetTrackParticle, candidate->muonCandidate.get(), candidate->combinedTrack.get(),
◆ addTag()
create final tag object and add it to the inDetCandidate
Definition at line 684 of file MuonStauRecoTool.cxx.
690 combTracks->
push_back(candidate.combinedTrack.release());
692 std::vector<ElementLink<Trk::SegmentCollection>> segmentLinks;
693 for (
const auto&
layer : candidate.allLayers) {
697 segmentLinks.push_back(segLink);
705 tag->setMuBeta(candidate.betaFitResult.beta);
708 std::unique_ptr<MuGirlNS::StauExtras> stauExtras = std::make_unique<MuGirlNS::StauExtras>();
709 stauExtras->
betaAll = candidate.betaFitResult.beta;
710 stauExtras->
betaAllt = candidate.finalBetaFitResult.beta;
711 stauExtras->
hits = candidate.stauHits;
712 tag->setStauExtras(std::move(stauExtras));
716 msg(MSG::INFO) <<
" Summary::addTag ";
717 msg(MSG::INFO) << std::endl
718 <<
" candidate: beta fit result: beta " << candidate.betaFitResult.beta <<
" chi2/ndof "
719 << candidate.betaFitResult.chi2PerDOF() <<
" segments" << segmentLinks.size();
722 msg(MSG::INFO) << std::endl
723 <<
" track " <<
m_printer->print(**comblink) << std::endl
729 tagMap->addEntry(&indetCandidate,
tag);
◆ associateHoughMaxima()
associate Hough maxima to intersection
Definition at line 1282 of file MuonStauRecoTool.cxx.
1294 if (!houghDataPerSectorVec.isValid()) {
1300 if (
static_cast<int>(houghDataPerSectorVec->vec.size()) <= sector - 1) {
1302 <<
" larger than the available sectors in the Hough tool: " << houghDataPerSectorVec->vec.size());
1311 if (houghDataPerSector.
maxVec.size() <= sectorLayerHash) {
1312 ATH_MSG_WARNING(
" houghDataPerSector.maxVec.size() smaller than hash " << houghDataPerSector.
maxVec.size() <<
" hash "
1313 << sectorLayerHash);
1317 if (maxVec.empty())
return;
1329 float errx =
intersection.trackParameters->covariance() ?
1331 float x = barrelLike ?
z :
r;
1332 float y = barrelLike ?
r :
z;
1333 float theta = std::atan2(
y,
x);
1337 ATH_MSG_DEBUG(
" Got Phi Hough maxima " << phiMaxVec.size() <<
" phi " << phi);
1341 std::vector<std::shared_ptr<const Muon::MuonClusterOnTrack>>&
clusters) {
1343 if (cluster)
clusters.push_back(std::move(cluster));
1348 std::vector<std::shared_ptr<const Muon::MuonClusterOnTrack>> phiClusterOnTracks;
1349 Muon::MuonLayerHoughTool::PhiMaximumVec::const_iterator pit = phiMaxVec.begin();
1350 Muon::MuonLayerHoughTool::PhiMaximumVec::const_iterator pit_end = phiMaxVec.end();
1351 for (; pit != pit_end; ++pit) {
1353 for (
const std::shared_ptr<MuonHough::PhiHit>& hit : maximum.
hits) {
1369 <<
"," <<
y <<
") errorx " << errx <<
" "
1370 <<
" angle " << theta);
1373 for (
const auto& mit : maxVec) {
1375 if (std::find_if(maximum.
hits.begin(),maximum.
hits.end(),
1376 [](
const std::shared_ptr<MuonHough::Hit>& hit){
1377 return hit->prd && (hit->prd->type(Trk::PrepRawDataType::sTgcPrepData) ||
1378 hit->prd->type(Trk::PrepRawDataType::MMPrepData));
1379 }) != maximum.
hits.end())
continue;
1388 const float pullUncert = std::sqrt(errx * errx + maxwidth * maxwidth / 12.);
1389 float pull =
residual / (pullUncert > std::numeric_limits<float>::epsilon() ? pullUncert : 1.) ;
1392 <<
" pull " <<
pull <<
" angle " << maximum.
theta <<
" residual " << residualTheta);
1397 if (std::abs(
pull) > 5)
continue;
1398 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 1419 of file MuonStauRecoTool.cxx.
1420 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 784 of file MuonStauRecoTool.cxx.
793 std::pair<std::unique_ptr<const Muon::MuonCandidate>, std::unique_ptr<Trk::Track>>
result =
801 candidate->muonCandidate = std::move(
result.first);
802 candidate->combinedTrack = std::move(
result.second);
806 combinedCandidates.push_back(candidate);
816 msg(MSG::INFO) <<
" Summary::combineCandidates ";
818 msg(MSG::INFO) <<
" No candidated found ";
823 msg(MSG::INFO) << std::endl
824 <<
" candidate: beta fit result: " << candidate->betaFitResult.beta <<
" chi2/ndof "
825 << candidate->betaFitResult.chi2PerDOF();
826 if (candidate->finalBetaFitResult.status != 0)
827 msg(MSG::INFO) <<
" MDTT beta fit result: " << candidate->finalBetaFitResult.beta <<
" chi2/ndof "
828 << candidate->finalBetaFitResult.chi2PerDOF();
829 msg(MSG::INFO) <<
" layers with segments" << candidate->allLayers.size() << std::endl
830 <<
" track " <<
m_printer->print(*candidate->combinedTrack) << std::endl
831 <<
m_printer->printStations(*candidate->combinedTrack);
◆ createCandidates()
create candidates from the beta seeds
Definition at line 839 of file MuonStauRecoTool.cxx.
843 LayerDataVec::const_iterator
it = associatedData.layerData.begin();
844 LayerDataVec::const_iterator it_end = associatedData.layerData.end();
845 for (;
it != it_end; ++
it) {
847 for (
const auto& maximumData :
it->maximumDataVec) {
849 if (!maximumData->betaSeeds.empty()) seedMaximumDataVec.push_back(maximumData);
852 ATH_MSG_DEBUG(
"Creating candidates from seeds " << seedMaximumDataVec.size());
854 if (seedMaximumDataVec.empty()) {
860 auto SortMaximumDataVec = [](
const std::shared_ptr<MaximumData>&
max1,
const std::shared_ptr<MaximumData>& max2) {
861 return max1->maximum->max < max2->maximum->max;
863 std::stable_sort(seedMaximumDataVec.begin(), seedMaximumDataVec.end(), SortMaximumDataVec);
867 std::set<const MaximumData*> usedMaximumData;
870 for (; sit != sit_end; ++sit) {
872 if (usedMaximumData.count(sit->get()))
continue;
873 usedMaximumData.insert(sit->get());
877 for (
const auto& betaSeed : (*sit)->betaSeeds) { newCandidates.push_back(std::make_shared<Candidate>(betaSeed)); }
879 extendCandidates(newCandidates, usedMaximumData, associatedData.layerData.begin(), associatedData.layerData.end());
882 for (
auto& newCandidate : newCandidates) {
884 newCandidate->betaFitResult =
fitter.fitWithOutlierLogic(newCandidate->hits);
886 << newCandidate->hits.size() <<
" status " << newCandidate->betaFitResult.status <<
" beta "
887 << newCandidate->betaFitResult.beta <<
" chi2/ndof " << newCandidate->betaFitResult.chi2PerDOF());
889 if (newCandidate->betaFitResult.status != 0) {
890 newCandidate->combinedTrack =
nullptr;
898 msg(MSG::INFO) <<
" Summary::createCandidates ";
900 msg(MSG::INFO) <<
" No candidated found ";
905 msg(MSG::INFO) << std::endl
906 <<
" candidate: beta seed " << candidate->betaSeed.beta <<
" beta fit result: beta "
907 << candidate->betaFitResult.beta <<
" chi2/ndof " << candidate->betaFitResult.chi2PerDOF() <<
" layers "
908 << candidate->layerDataVec.size();
909 for (
const auto& layerData : candidate->layerDataVec)
910 msg(MSG::INFO) << std::endl
912 << layerData.maximumDataVec.size();
◆ createRpcTimeMeasurementsFromClusters()
create Rpc hit timing for a set of clusters
Definition at line 1241 of file MuonStauRecoTool.cxx.
1245 for (
const auto& cluster : clusterObjects) {
1246 if (cluster.hitList.empty() || !cluster.hitList.front()) {
1251 << cluster.hitList.size());
1254 std::vector<const Muon::MuonClusterOnTrack*>
clusters;
1255 for (
const auto* rpc : cluster.hitList) {
1267 RpcTimeMeasurement rpcTimeMeasurement;
1268 rpcTimeMeasurement.time =
result.time;
1269 rpcTimeMeasurement.error =
result.error;
1272 if (rcl) rpcTimeMeasurement.rpcClusters.push_back(std::shared_ptr<const Muon::RpcClusterOnTrack>(rcl));
1274 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 920 of file MuonStauRecoTool.cxx.
924 const LayerData& layerData = *
it;
926 << layerData.maximumDataVec.size());
931 unsigned int nextensions = 0;
938 for (
const auto& maximumData : layerData.maximumDataVec) {
944 if (nextensions == 0)
945 theCandidate = candidate.get();
947 std::shared_ptr<Candidate> newCandidate = std::make_unique<Candidate>(candidate->betaSeed);
950 newCandidates.push_back(newCandidate);
951 theCandidate = newCandidate.get();
955 LayerData newLayerData(layerData.intersection);
956 newLayerData.maximumDataVec.push_back(maximumData);
959 theCandidate->hits.insert(theCandidate->hits.end(), newhits.begin(), newhits.end());
960 theCandidate->layerDataVec.push_back(newLayerData);
961 usedMaximumData.insert(maximumData.get());
963 ATH_MSG_DEBUG(
" adding maximumData: candidate hits " << theCandidate->hits.size() <<
" LayerDataVec "
964 << theCandidate->layerDataVec.size() <<
" nextensions "
971 ATH_MSG_DEBUG(
" extendCandidates done, new candidates " << newCandidates.size());
◆ extendWithPRDs()
◆ extractRpcTimingFromMaximum()
extract RPC hit timing
Definition at line 1195 of file MuonStauRecoTool.cxx.
1199 std::map<Identifier, std::vector<const Muon::RpcPrepData*>> rpcPrdsPerChamber;
1206 rpcPrdsPerChamber[chamberId].push_back(rpcPrd);
1211 MuonHough::HitVec::const_iterator hit = maximum.
hits.begin();
1212 MuonHough::HitVec::const_iterator hit_end = maximum.
hits.end();
1213 for (; hit != hit_end; ++hit) {
1214 if ((*hit)->tgc || !(*hit)->prd || !
m_idHelperSvc->isRpc((*hit)->prd->identify()))
continue;
1215 addRpc((*hit)->prd);
1219 for (
const auto& rot : maximumData.phiClusterOnTracks) { addRpc(rot->prepRawData()); }
1222 if (rpcPrdsPerChamber.empty())
return;
1224 std::map<Identifier, std::vector<const Muon::RpcPrepData*>>
::iterator chit = rpcPrdsPerChamber.begin();
1225 std::map<Identifier, std::vector<const Muon::RpcPrepData*>>
::iterator chit_end = rpcPrdsPerChamber.end();
1226 for (; chit != chit_end; ++chit) {
1229 if (!clustering.cluster(chit->second)) {
1235 <<
" 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 1038 of file MuonStauRecoTool.cxx.
1040 unsigned int nstart =
hits.size();
1056 for (
const auto& rpc : maximumData.rpcTimeMeasurements) {
1057 float time = rpc.time;
1058 float error = rpc.error;
1066 for (
const auto& seg : maximumData.t0fittedSegments) {
1067 if (!seg->hasFittedT0())
continue;
1068 float time = seg->time();
1069 float error = seg->errorTime();
1077 float smallestResidual = FLT_MAX;
1078 for (
const auto& seg : maximumData.t0fittedSegments) {
1079 if (!seg->hasFittedT0())
continue;
1080 float distance = seg->globalPosition().mag();
1081 float time = seg->time();
1087 bestSegment = seg.get();
1097 return nstart !=
hits.size();
◆ extractTimeMeasurements()
associate Hough maxima and associate time measurements
Definition at line 981 of file MuonStauRecoTool.cxx.
988 LayerData layerData{iSect};
992 if (layerData.maximumDataVec.empty())
continue;
994 associatedData.layerData.push_back(layerData);
997 for (
auto& maximum : layerData.maximumDataVec) {
1002 std::vector<std::shared_ptr<const Muon::MuonSegment>> t0fittedSegments;
1004 if (t0fittedSegments.empty())
continue;
1016 msg(MSG::INFO) <<
" Summary::extractTimeMeasurements ";
1017 if (associatedData.layerData.empty())
1018 msg(MSG::INFO) <<
" No layers associated ";
1020 msg(MSG::INFO) <<
" Associated layers " << associatedData.layerData.size();
1022 for (
const auto& layerData : associatedData.layerData) {
1023 unsigned int nmaxWithBeta = 0;
1024 for (
const auto& maximumData : layerData.maximumDataVec) {
1025 if (!maximumData->betaSeeds.empty()) ++nmaxWithBeta;
1027 msg(MSG::INFO) << std::endl
1029 << layerData.maximumDataVec.size() <<
" maxima with beta seeds " << nmaxWithBeta;
1035 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 bool out_of_bound_flag =
false;
349 float drdt = rtRelation->rt()->driftVelocity(
driftTime);
350 float rres = rtRelation->rtRes()->resolution(
driftTime);
351 float tres = rres / drdt;
352 float TlocR = rtRelation->tr()->tFromR(std::abs(
locR), out_of_bound_flag);
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()->tFromR(std::abs(locRu), out_of_bound_flag);
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.push_back(
MuGirlNS::StauHit(tech, time + tof, ix, iy, iz,
id,
ie, er,
sh, isEta, propTime));
393 std::vector<const Muon::MuonClusterOnTrack*>
clusters;
403 auto pos = rpcPrdsPerChamber.find(chamberId);
404 if (
pos == rpcPrdsPerChamber.end()) {
406 rpcPrdsPerChamber[chamberId] = std::make_tuple(
pars,
clusters, RpcClVec());
408 rpcPrdsPerChamber[chamberId] = std::make_tuple(
pars, RpcClVec(),
clusters);
410 RpcClVec& clVec = measuresPhi ? std::get<1>(
pos->second) : std::
get<2>(
pos->
second);
420 float ix =
pars->position().x();
421 float iy =
pars->position().y();
422 float iz =
pars->position().z();
429 candidate.stauHits.push_back(
MuGirlNS::StauHit(tech, time + tof, ix, iy, iz,
id,
ie, er,
sh, isEta, propTime));
437 std::vector<const Muon::MuonClusterOnTrack*> calibratedClusters;
438 for (
const auto* cluster :
clusters) {
440 if (
cl) calibratedClusters.push_back(
cl);
442 if (calibratedClusters.empty())
return;
445 for (
const auto*
cl : calibratedClusters)
delete cl;
446 if (!
result.valid)
return;
453 float ix =
pars.position().x();
454 float iy =
pars.position().y();
455 float iz =
pars.position().z();
466 <<
" diff " << std::abs(
beta - betaSeed));
471 candidate.stauHits.push_back(
MuGirlNS::StauHit(tech, time + tof, ix, iy, iz,
id,
ie, er,
sh, isEta, propTime));
475 RpcClPerChMap::const_iterator chit = rpcPrdsPerChamber.begin();
476 RpcClPerChMap::const_iterator chit_end = rpcPrdsPerChamber.end();
479 for (; chit != chit_end; ++chit) {
481 const RpcClVec& phiClusters = std::get<1>(chit->second);
482 const RpcClVec& etaClusters = std::get<2>(chit->second);
483 insertRpcs(*
pars, phiClusters, candidate,
hits);
484 insertRpcs(*
pars, etaClusters, candidate,
hits);
499 MdtChamberLayerData::const_iterator mit = mdtDataPerChamberLayer.begin();
500 MdtChamberLayerData::const_iterator mit_end = mdtDataPerChamberLayer.end();
501 for (; mit != mit_end; ++mit) {
503 <<
" hits " << mit->second.size());
504 if (mit->second.size() < 4)
continue;
510 ATH_MSG_WARNING(
"MdtReadoutElement should always have a PlaneSurface as reference surface");
527 std::vector<std::pair<std::shared_ptr<const Muon::MdtDriftCircleOnTrack>,
const Trk::TrackParameters*>> indexLookUp;
529 for (
const auto&
entry : mit->second) {
534 std::unique_ptr<const Muon::MdtDriftCircleOnTrack> calibratedMdt(
536 if (!calibratedMdt) {
543 <<
" r_track " <<
pars.parameters()[
Trk::locR] <<
" residual "
555 double r = std::abs(calibratedMdt->driftRadius());
566 dcs.push_back(dcOnTrack);
567 indexLookUp.emplace_back(std::move(calibratedMdt), &
pars);
572 for (
unsigned int i = 0;
i < dcs.size(); ++
i) {
581 segment.hitsOnTrack(dcs.size());
582 unsigned int ndofFit =
segment.ndof();
583 if (ndofFit < 1)
continue;
584 double chi2NdofSegmentFit =
segment.chi2() / ndofFit;
585 bool hasDropHit =
false;
586 unsigned int dropDepth = 0;
588 ATH_MSG_DEBUG(
"DropHits failed, fit chi2/ndof " << chi2NdofSegmentFit);
597 if (
i >=
segment.dcs().size())
continue;
605 if (index < 0 || index >= (
int)indexLookUp.size()) {
606 ATH_MSG_WARNING(
" lookup of TrackParameters and MdtDriftCircleOnTrack failed " <<
index <<
" range: 0 - "
607 << indexLookUp.size() - 1);
615 std::shared_ptr<const Muon::MdtDriftCircleOnTrack> calibratedMdt(
617 if (!calibratedMdt.get()) {
624 float ix =
pars->position().x();
625 float iy =
pars->position().y();
626 float iz =
pars->position().z();
635 float driftTime = calibratedMdt->driftTime();
638 auto data = mdtCalibConstants->getCalibData(
id, msgStream());
639 const auto& rtRelation =
data->rtRelation;
640 bool out_of_bound_flag =
false;
641 float drdt = rtRelation->rt()->driftVelocity(
driftTime);
642 float rres = rtRelation->rtRes()->resolution(
driftTime);
643 float tres = rres / drdt;
644 float TlocR = rtRelation->tr()->tFromR(std::abs(
locR), out_of_bound_flag);
645 float trackTimeRes = errR / drdt;
646 float tofShiftFromBeta = 0.;
647 er = std::sqrt(
tres *
tres + trackTimeRes * trackTimeRes);
658 << chi2NdofSegmentFit <<
" ndof " << std::setw(2) << ndofFit;
660 msg(
MSG::DEBUG) <<
" after outlier " << std::setw(5) << chi2NdofSegmentFit <<
" ndof " << std::setw(2) << ndofFit;
661 msg(
MSG::DEBUG) <<
" driftR " << std::setw(4) << dc.
r() <<
" rline " << std::setw(5) <<
rline <<
" residual "
662 << std::setw(5) <<
res <<
" pull " << std::setw(4) <<
pull <<
" time " << std::setw(3) <<
time
663 <<
" beta" << std::setw(2) <<
beta <<
" err " << std::setw(3) << er <<
" intrinsic " << std::setw(3)
664 <<
tres <<
" track " << std::setw(3) << trackTimeRes;
669 if (!isSelected)
continue;
672 candidate.stauHits.emplace_back(
MuGirlNS::MDTT_STAU_HIT, time + tof, ix, iy, iz,
id,
ie, er,
sh, isEta, propTime);
677 ATH_MSG_DEBUG(
" extractTimeMeasurementsFromTrack: extracted " << candidate.stauHits.size() <<
" time measurements "
678 <<
" status fit " << betaFitResult.
status <<
" beta "
679 << betaFitResult.
beta <<
" chi2/ndof " << betaFitResult.
chi2PerDOF());
681 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 1117 of file MuonStauRecoTool.cxx.
1122 const std::vector<std::shared_ptr<const Muon::MuonClusterOnTrack>>& phiClusterOnTracks = maximumData.phiClusterOnTracks;
1126 std::vector<const Muon::MdtDriftCircleOnTrack*>& mdts) {
1128 if (mdt) mdts.push_back(mdt);
1133 std::vector<const Muon::MuonClusterOnTrack*>&
clusters) {
1135 if (cluster)
clusters.push_back(cluster);
1139 std::vector<const Muon::MdtDriftCircleOnTrack*> mdts;
1140 std::vector<const Muon::MuonClusterOnTrack*>
clusters;
1143 clusters.reserve(phiClusterOnTracks.size());
1145 for (
const auto& phiClusterOnTrack : phiClusterOnTracks) {
clusters.push_back(phiClusterOnTrack->clone()); }
1149 MuonHough::HitVec::const_iterator hit = maximum.
hits.begin();
1150 MuonHough::HitVec::const_iterator hit_end = maximum.
hits.end();
1151 for (; hit != hit_end; ++hit) {
1152 ATH_MSG_DEBUG(
"hit x,y_min,y_max,w = " << (*hit)->x <<
"," << (*hit)->ymin <<
"," << (*hit)->ymax <<
"," << (*hit)->w);
1155 for (
const auto& prd : (*hit)->tgc->etaCluster) handleCluster(*prd,
clusters);
1156 }
else if ((*hit)->prd) {
1174 if (mdts.size() > 2) {
1182 for (; sit != sit_end; ++sit) {
1186 segments.push_back(std::shared_ptr<const Muon::MuonSegment>(mseg));
1191 for (
const auto* hit : mdts)
delete hit;
1192 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 1100 of file MuonStauRecoTool.cxx.
1102 if (maximumData.rpcTimeMeasurements.empty() && maximumData.t0fittedSegments.empty())
return;
1110 float chi2ndof =
result.chi2PerDOF();
1112 ATH_MSG_DEBUG(
" fitting beta for maximum: time measurements " <<
hits.size() <<
" status " <<
result.status <<
" beta "
1113 <<
result.beta <<
" chi2/ndof " << chi2ndof);
1114 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 732 of file MuonStauRecoTool.cxx.
737 std::map<const Trk::Track*, std::shared_ptr<Candidate>> trackCandidateLookup;
741 tracks.push_back(
track);
742 trackCandidateLookup[
track] = candidate;
747 if (tracks.empty())
return false;
748 if (tracks.size() == 1)
return true;
752 if (!resolvedTracks || resolvedTracks->empty()) {
756 const Trk::Track* selectedTrack = resolvedTracks->front();
759 auto pos = trackCandidateLookup.find(selectedTrack);
760 if (
pos == trackCandidateLookup.end()) {
766 std::shared_ptr<Candidate> candidate =
pos->second;
772 msg(MSG::INFO) <<
" Summary::resolveAmbiguities ";
773 msg(MSG::INFO) << std::endl
774 <<
" 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 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