|
ATLAS Offline Software
|
#include <MuonRefitTool.h>
|
| MuonRefitTool (const std::string &ty, const std::string &na, const IInterface *pa) |
|
virtual | ~MuonRefitTool ()=default |
|
virtual StatusCode | initialize () override |
|
virtual StatusCode | finalize () override |
|
std::unique_ptr< Trk::Track > | refit (const Trk::Track &track, const EventContext &ctx, const Settings *settings) const override |
| refit a track More...
|
|
std::vector< std::unique_ptr< Trk::Track > > | refit (const std::vector< Trk::Track * > &tracks, const EventContext &ctx, const Settings *settings) const override |
| refit and back extrapolate a vector of track pairs More...
|
|
ServiceHandle< StoreGateSvc > & | evtStore () |
| The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc . More...
|
|
const ServiceHandle< StoreGateSvc > & | evtStore () const |
| The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc . More...
|
|
const ServiceHandle< StoreGateSvc > & | detStore () const |
| The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc . More...
|
|
virtual StatusCode | sysInitialize () override |
| Perform system initialization for an algorithm. More...
|
|
virtual StatusCode | sysStart () override |
| Handle START transition. More...
|
|
virtual std::vector< Gaudi::DataHandle * > | inputHandles () const override |
| Return this algorithm's input handles. More...
|
|
virtual std::vector< Gaudi::DataHandle * > | outputHandles () const override |
| Return this algorithm's output handles. More...
|
|
Gaudi::Details::PropertyBase & | declareProperty (Gaudi::Property< T > &t) |
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleKey &hndl, const std::string &doc, const SG::VarHandleKeyType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleBase &hndl, const std::string &doc, const SG::VarHandleType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleKeyArray &hndArr, const std::string &doc, const SG::VarHandleKeyArrayType &) |
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, T &property, const std::string &doc, const SG::NotHandleType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, T &property, const std::string &doc="none") |
| Declare a new Gaudi property. More...
|
|
void | updateVHKA (Gaudi::Details::PropertyBase &) |
|
MsgStream & | msg () const |
|
MsgStream & | msg (const MSG::Level lvl) const |
|
bool | msgLvl (const MSG::Level lvl) const |
|
|
std::unique_ptr< Trk::Track > | updateErrors (const Trk::Track &track, const EventContext &ctx, const Settings &settings) const |
| update errors on a muon track More...
|
|
std::unique_ptr< Trk::Track > | updateMdtErrors (const Trk::Track &track, const EventContext &ctx, const Settings &settings) const |
|
std::unique_ptr< Trk::Track > | updateAlignmentErrors (const Trk::Track &track, const EventContext &ctx, const Settings &settings) const |
|
std::unique_ptr< Trk::Track > | makeAEOTs (const Trk::Track &track) const |
|
std::unique_ptr< Trk::Track > | makeSimpleAEOTs (const Trk::Track &track) const |
|
std::unique_ptr< Trk::Track > | removeOutliers (const Trk::Track &track, const Settings &settings) const |
|
bool | removeMdtOutliers (const Trk::TrackParameters &pars, const std::vector< const MdtDriftCircleOnTrack * > &hits, std::set< Identifier > &removedIdentifiers, const Settings &settings) const |
|
void | renounceArray (SG::VarHandleKeyArray &handlesArray) |
| remove all handles from I/O resolution More...
|
|
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > | renounce (T &h) |
|
void | extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps) |
| Add StoreName to extra input/output deps as needed. More...
|
|
|
ServiceHandle< IMuonEDMHelperSvc > | m_edmHelperSvc |
|
ServiceHandle< Muon::IMuonIdHelperSvc > | m_idHelperSvc {this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"} |
|
ToolHandle< Trk::ITrkAlignmentDeviationTool > | m_alignErrorTool {this, "AlignmentErrorTool", "MuonAlign::AlignmentErrorTool"} |
| Does not provide any method with EventContext yet. More...
|
|
PublicToolHandle< MuonEDMPrinterTool > | m_printer {this, "Printer", "Muon::MuonEDMPrinterTool/MuonEDMPrinterTool"} |
|
ToolHandle< Trk::ITrackFitter > | m_trackFitter {this, "Fitter", "Trk::GlobalChi2Fitter/MCTBFitterMaterialFromTrack"} |
|
ToolHandle< Trk::IExtrapolator > | m_muonExtrapolator {this, "MuonExtrapolator", "Trk::Extrapolator/MuonExtrapolator"} |
|
ToolHandle< IMdtDriftCircleOnTrackCreator > | m_mdtRotCreator |
|
ToolHandle< IMuonCompetingClustersOnTrackCreator > | m_compClusterCreator |
|
ToolHandle< IDCSLFitProvider > | m_t0Fitter {this, "T0Fitter", ""} |
|
ToolHandle< Muon::IMuonTrackExtrapolationTool > | m_muonEntryTrackExtrapolator {this, "MuonEntryExtrapolationTool", ""} |
|
Gaudi::Property< int > | m_finderDebugLevel {this, "FinderDebugLevel", -1} |
|
Gaudi::Property< double > | m_minMuonMomentum {this, "MinMuonMom", 4000} |
|
Gaudi::Property< double > | m_fixedError {this, "UsedFixedError", 1} |
|
Gaudi::Property< double > | m_flagT0FitRange {this, "FlagT0FitRange", 0.00005} |
|
Gaudi::Property< float > | m_alignmentDelta {this, "AlignmentDelta", 0} |
|
Gaudi::Property< float > | m_alignmentAngle {this, "AlignmentAngle", 0} |
|
Gaudi::Property< float > | m_alignmentDeltaError {this, "AlignmentDeltaError", 0.1} |
|
Gaudi::Property< float > | m_alignmentAngleError {this, "AlignmentAngleError", 0.001} |
|
Gaudi::Property< bool > | m_alignmentErrors {this, "AlignmentErrors", false} |
|
Gaudi::Property< bool > | m_simpleAEOTs {this, "SimpleAEOTs", false} |
|
Gaudi::Property< bool > | m_addAll {this, "AddAll", false} |
|
Gaudi::Property< bool > | m_addInner {this, "AddInner", false} |
|
Gaudi::Property< bool > | m_addMiddle {this, "AddMiddle", false} |
|
Gaudi::Property< bool > | m_addTwo {this, "AddTwo", false} |
|
Gaudi::Property< bool > | m_deweightBEE {this, "DeweightBEE", false} |
|
Gaudi::Property< bool > | m_deweightEE {this, "DeweightEE", false} |
|
Gaudi::Property< bool > | m_deweightBIS78 {this, "DeweightBIS78", true} |
|
Gaudi::Property< bool > | m_deweightBME {this, "DeweightBME", true} |
|
Gaudi::Property< bool > | m_deweightBOE {this, "DeweightBOE", true} |
|
Gaudi::Property< bool > | m_deweightEEL1C05 {this, "DeweightEEL1C05", false} |
|
Gaudi::Property< bool > | m_deweightTwoStationTracks {this, "DeweightTwoStationTracks", false} |
|
MuonDriftCircleErrorStrategy | m_errorStrategyBEE |
|
MuonDriftCircleErrorStrategy | m_errorStrategyEE |
|
MuonDriftCircleErrorStrategy | m_errorStrategyBIS78 |
|
MuonDriftCircleErrorStrategy | m_errorStrategyBXE |
|
MuonDriftCircleErrorStrategy | m_errorStrategyEEL1C05 |
|
MuonDriftCircleErrorStrategy | m_errorStrategyBarEnd |
|
MuonDriftCircleErrorStrategy | m_errorStrategySL |
|
MuonDriftCircleErrorStrategy | m_errorStrategyTwoStations |
|
MuonDriftCircleErrorStrategy | m_errorStrategy |
|
MuonDriftCircleErrorStrategy | m_muonErrorStrategy |
|
Settings | m_defaultSettings |
|
std::atomic< unsigned int > | m_nrefits {0} |
|
std::atomic< unsigned int > | m_ngoodRefits {0} |
|
std::atomic< unsigned int > | m_failedOutlierRemoval {0} |
|
std::atomic< unsigned int > | m_failedErrorUpdate {0} |
|
std::atomic< unsigned int > | m_failedRefit {0} |
|
std::atomic< unsigned int > | m_failedExtrapolationMuonEntry {0} |
|
int | m_BME_station {0} |
|
StoreGateSvc_t | m_evtStore |
| Pointer to StoreGate (event store by default) More...
|
|
StoreGateSvc_t | m_detStore |
| Pointer to StoreGate (detector store by default) More...
|
|
std::vector< SG::VarHandleKeyArray * > | m_vhka |
|
bool | m_varHandleArraysDeclared |
|
Definition at line 34 of file MuonRefitTool.h.
◆ StoreGateSvc_t
◆ MuonRefitTool()
Muon::MuonRefitTool::MuonRefitTool |
( |
const std::string & |
ty, |
|
|
const std::string & |
na, |
|
|
const IInterface * |
pa |
|
) |
| |
◆ ~MuonRefitTool()
virtual Muon::MuonRefitTool::~MuonRefitTool |
( |
| ) |
|
|
virtualdefault |
◆ createPerigee()
Definition at line 1477 of file MuonRefitTool.cxx.
1478 std::unique_ptr<Trk::Perigee> perigee;
1481 std::unique_ptr<Trk::TrackParameters> exPars{
m_muonExtrapolator->extrapolateDirectly(ctx,
pars, persurf)};
1482 perigee.reset (
dynamic_cast<Trk::Perigee*
>(exPars.release()));
1484 ATH_MSG_WARNING(
" Extrapolation to Perigee surface did not return a perigee!! ");
◆ 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]
◆ 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
◆ finalize()
StatusCode Muon::MuonRefitTool::finalize |
( |
| ) |
|
|
overridevirtual |
◆ initialize()
StatusCode Muon::MuonRefitTool::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& Muon::IMuonRefitTool::interfaceID |
( |
| ) |
|
|
inlinestaticinherited |
access to tool interface
Definition at line 63 of file IMuonRefitTool.h.
64 static const InterfaceID IID_IMuonRefitTool(
"Muon::IMuonRefitTool", 1, 0);
65 return IID_IMuonRefitTool;
◆ makeAEOTs()
Where do these magic numbers come from?
Definition at line 232 of file MuonRefitTool.cxx.
240 std::map<std::vector<Identifier>, std::pair<double, double>> alignerrmap;
242 std::vector<Trk::AlignmentDeviation*> align_deviations;
246 bool isSmallChamber =
false;
247 bool isLargeChamber =
false;
248 bool isEndcap =
false;
250 std::vector<int> usedRotations;
254 double angleError = 0.;
255 double translationError = 0.;
256 bool differentChambers =
false;
258 isSmallChamber =
false;
259 isLargeChamber =
false;
264 translationError = std::sqrt(
it->getCovariance(0, 0));
266 std::vector<Identifier> hitids;
267 const auto& vec_riowithdev =
it->getListOfHits();
270 const Identifier id_riowithdev = riowithdev->identify();
277 isSmallChamber =
true;
279 isLargeChamber =
true;
281 hitids.push_back(id_riowithdev);
283 differentChambers =
true;
284 jdifferent = hitids.size() - 1;
287 bool matchFound =
false;
288 if (!hitids.empty()) {
293 if (itRot->hasValidHashOfHits() &&
it->hasValidHashOfHits()) {
294 if (itRot->getHashOfHits() ==
it->getHashOfHits()) {
295 angleError = std::sqrt(itRot->getCovariance(0, 0));
297 usedRotations.push_back(iRot);
300 ATH_MSG_ERROR(
"One of the alignment deviations has an invalid hash created from the hits.");
303 if (matchFound)
break;
310 alignerrmap.insert(std::pair<std::vector<Identifier>, std::pair<double, double>>(
311 hitids, std::pair<double, double>(translationError, angleError)));
314 ATH_MSG_DEBUG(
" AlignmentMap entry " << iok <<
" filled with nr hitids " << hitids.size() <<
" "
315 <<
m_idHelperSvc->toString(hitids[0]) <<
" translationError " << translationError
316 <<
" angleError " << angleError);
318 ATH_MSG_DEBUG(
" AlignmentMap entry No angleError" << iok <<
" filled with nr hitids " << hitids.size() <<
" "
319 <<
m_idHelperSvc->toString(hitids[0]) <<
" translationError "
320 << translationError <<
" angleError " << angleError);
321 if (isEndcap)
ATH_MSG_DEBUG(
" AlignmentMap Endcap Chamber ");
323 if (isSmallChamber)
ATH_MSG_DEBUG(
" AlignmentMap Small Chamber ");
324 if (isLargeChamber)
ATH_MSG_DEBUG(
" AlignmentMap Large Chamber ");
325 if (differentChambers)
326 ATH_MSG_DEBUG(
" AlignmentMap entry " << iok <<
" for different Chamber "
336 isSmallChamber =
false;
337 isLargeChamber =
false;
341 bool used =
std::find(usedRotations.begin(), usedRotations.end(), iRot) != usedRotations.end();
343 ATH_MSG_ERROR(
"This following code should not be reached anymore!");
344 const auto& vec_riowithdev = itRot->getListOfHits();
346 std::vector<Identifier> hitids;
349 Identifier id_riowithdev = riowithdev->identify();
356 isSmallChamber =
true;
358 isLargeChamber =
true;
360 hitids.push_back(id_riowithdev);
363 double translationError = 0.;
364 double angleError = std::sqrt(itRot->getCovariance(0, 0));
367 alignerrmap.insert(std::pair<std::vector<Identifier>, std::pair<double, double>>(
368 hitids, std::pair<double, double>(translationError, angleError)));
369 ATH_MSG_DEBUG(
" AlignmentMap entry No Translation Error " << iok <<
" filled with nr hitids " << hitids.size() <<
" "
370 <<
m_idHelperSvc->toString(hitids[0]) <<
" translationError "
371 << translationError <<
" angleError " << angleError);
374 if (isSmallChamber)
ATH_MSG_DEBUG(
" AlignmentMap Small Chamber ");
375 if (isLargeChamber)
ATH_MSG_DEBUG(
" AlignmentMap Large Chamber ");
380 for (
auto*
it : align_deviations)
delete it;
381 align_deviations.clear();
389 std::bitset<Trk::TrackStateOnSurface::NumberOfTrackStateOnSurfaceTypes> typePattern(0);
392 std::vector<int> indexAEOTs;
393 std::vector<std::unique_ptr<Trk::TrackStateOnSurface>> tsosAEOTs;
397 std::set<MuonStationIndex::ChIndex> stationIds;
399 for (
const auto& itAli : alignerrmap) {
400 unsigned int imiddle = (itAli.first.size()) / 2;
407 if (!meas) {
continue; }
409 if (!
id.is_valid())
continue;
415 if (idMiddle ==
id) {
417 const double deltaError =
std::max(itAli.second.first, 0.01);
418 const double angleError =
std::max(itAli.second.second, 0.000001);
419 auto aEOT = std::make_unique<Trk::AlignmentEffectsOnTrack>(
425 tsit->measurementOnTrack()->associatedSurface());
426 std::unique_ptr<Trk::TrackStateOnSurface> tsosAEOT =
427 std::make_unique<Trk::TrackStateOnSurface>(
429 tsit->trackParameters()->uniqueClone(),
433 indexAEOTs.push_back(
index);
434 tsosAEOTs.emplace_back(std::move(tsosAEOT));
439 if (!
found)
ATH_MSG_WARNING(
" This should not happen Identifier from AlignmentErrorTool is not found");
445 auto trackStateOnSurfaces = std::make_unique<Trk::TrackStates>();
446 trackStateOnSurfaces->reserve(
states->size() + indexAEOTs.size());
450 for (
unsigned int i = 0;
i < indexAEOTs.size();
i++) {
451 if (
index == indexAEOTs[
i]) {
453 trackStateOnSurfaces->push_back(std::move(tsosAEOTs[
i]));
455 ATH_MSG_WARNING(
"There's a trial to push back the same AEOT twice to the track...");
461 if (tsit->alignmentEffectsOnTrack()) {
465 trackStateOnSurfaces->push_back(tsit->clone());
468 if (indexAEOTs.empty() && stationIds.size() > 1)
ATH_MSG_WARNING(
" Track without AEOT ");
470 std::unique_ptr<Trk::Track> newTrack = std::make_unique<Trk::Track>(
track.info(), std::move(trackStateOnSurfaces),
471 track.fitQuality() ?
track.fitQuality()->uniqueClone() :
nullptr);
◆ makeSimpleAEOTs()
Definition at line 479 of file MuonRefitTool.cxx.
491 auto trackStateOnSurfaces = std::make_unique<Trk::TrackStates>();
492 trackStateOnSurfaces->reserve(
states->size() + 1);
496 std::vector<const Trk::TrackStateOnSurface*> indicesOfAffectedTSOS;
497 std::vector<const Trk::TrackStateOnSurface*> indicesOfAffectedTSOSInner;
498 std::vector<Identifier> indicesOfAffectedIds;
499 std::vector<Identifier> indicesOfAffectedIdsInner;
500 int index {-1}, indexFirst {-1}, indexFirstInner {-1};
510 if (!meas) {
continue; }
514 if (tsit->alignmentEffectsOnTrack()) {
515 ATH_MSG_WARNING(
" AlignmentEffectOnTrack is already on track skip it");
529 if (indexFirst == -1) indexFirst =
index;
530 indicesOfAffectedTSOS.push_back(tsit);
531 indicesOfAffectedIds.push_back(
id);
536 if (indexFirst == -1) indexFirst =
index;
537 indicesOfAffectedTSOS.push_back(tsit);
538 indicesOfAffectedIds.push_back(
id);
541 if (indexFirstInner == -1) indexFirstInner =
index;
542 indicesOfAffectedTSOSInner.push_back(tsit);
543 indicesOfAffectedIdsInner.push_back(
id);
547 if (indexFirstInner == -1) indexFirstInner =
index;
548 indicesOfAffectedTSOSInner.push_back(tsit);
549 indicesOfAffectedIdsInner.push_back(
id);
554 if (indicesOfAffectedTSOS.empty() && indicesOfAffectedTSOSInner.empty()) {
555 std::unique_ptr<Trk::Track> newTrack = std::make_unique<Trk::Track>(
track.info(), std::move(trackStateOnSurfaces),
556 track.fitQuality() ?
track.fitQuality()->uniqueClone() :
nullptr);
560 std::bitset<Trk::TrackStateOnSurface::NumberOfTrackStateOnSurfaceTypes> typePattern(0);
563 std::unique_ptr<Trk::TrackStateOnSurface> tsosAEOT;
565 int middle = indicesOfAffectedTSOS.size() / 2;
567 auto aEOT = std::make_unique<Trk::AlignmentEffectsOnTrack>(
572 indicesOfAffectedIds,
575 << aEOT->associatedSurface()
576 <<
" nr of tsos affected "
577 << indicesOfAffectedTSOS.size());
578 tsosAEOT = std::make_unique<Trk::TrackStateOnSurface>(
586 std::unique_ptr<Trk::TrackStateOnSurface> tsosAEOTInner;
588 int middle = indicesOfAffectedTSOSInner.size() / 2;
590 auto aEOTInner = std::make_unique<Trk::AlignmentEffectsOnTrack>(
595 indicesOfAffectedIdsInner,
597 tsosAEOTInner = std::make_unique<Trk::TrackStateOnSurface>(
602 std::move(aEOTInner));
605 auto trackStateOnSurfacesAEOT = std::make_unique<Trk::TrackStates>();
606 trackStateOnSurfacesAEOT->reserve(
states->size() + 2);
610 if (
index == indexFirst && tsosAEOT) {
611 trackStateOnSurfacesAEOT->push_back(std::move(tsosAEOT));
612 if (!
m_addAll)
ATH_MSG_DEBUG(
" AlignmentEffectsOnTrack for Middle added to trackStateOnSurfacesAEOT ");
613 if (
m_addAll)
ATH_MSG_DEBUG(
" AlignmentEffectsOnTrack for All stations added to trackStateOnSurfacesAEOT ");
615 if (
index == indexFirstInner && tsosAEOTInner) {
616 trackStateOnSurfacesAEOT->push_back(std::move(tsosAEOTInner));
617 ATH_MSG_DEBUG(
" AlignmentEffectsOnTrack for Inner added to trackStateOnSurfacesAEOT ");
618 if (
m_addTwo)
ATH_MSG_DEBUG(
" also AlignmentEffectsOnTrack for Middle added to trackStateOnSurfacesAEOT ");
620 trackStateOnSurfacesAEOT->push_back(tsit);
622 std::unique_ptr<Trk::Track> newTrack = std::make_unique<Trk::Track>(
track.info(), std::move(trackStateOnSurfacesAEOT),
623 track.fitQuality() ?
track.fitQuality()->uniqueClone() :
nullptr);
◆ 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.
◆ refit() [1/2]
refit and back extrapolate a vector of track pairs
Implements Muon::IMuonRefitTool.
Definition at line 212 of file MuonRefitTool.cxx.
214 std::vector<std::unique_ptr<Trk::Track>> refittedTracks;
215 refittedTracks.reserve(tracks.size());
218 return refittedTracks;
◆ refit() [2/2]
refit a track
Implements Muon::IMuonRefitTool.
Definition at line 146 of file MuonRefitTool.cxx.
151 std::unique_ptr<Trk::Track> newTrack;
153 if (settings.removeOutliers) {
158 return std::make_unique<Trk::Track>(
track);
163 newTrack.swap(cleanedTrack);
165 newTrack = std::make_unique<Trk::Track>(
track);
167 if (settings.updateErrors) {
169 std::unique_ptr<Trk::Track> updateErrorTrack =
171 if (!updateErrorTrack) {
176 newTrack.swap(updateErrorTrack);
179 if (settings.refit) {
184 std::unique_ptr<Trk::Track> refittedTrack;
185 if (
track.fitQuality() &&
track.fitQuality()->chiSquared() < 10000 *
track.fitQuality()->numberDoF())
187 if (!refittedTrack) {
191 return std::make_unique<Trk::Track>(
track);
195 newTrack.swap(refittedTrack);
198 if (settings.extrapolateToMuonEntry) {
200 if (!extrapolatedTrack) {
206 newTrack.swap(extrapolatedTrack);
◆ removeMdtOutliers()
Definition at line 1311 of file MuonRefitTool.cxx.
1313 if (
hits.size() < 3) {
1331 segFinder.setFitter(
fitter);
1334 segFinder.setRecoverMDT(
false);
1336 for (
const MdtDriftCircleOnTrack* mdt :
hits) {
1341 detEl = mdt->prepRawData()->detectorElement();
1349 Amg::Vector3D locPos = gToStation * mdt->prepRawData()->globalPosition();
1352 double r = std::abs(mdt->localParameters()[
Trk::locR]);
1363 dcsOnTrack.emplace_back(dc, 1., 1.);
1364 dcs.emplace_back(std::move(dc));
1367 if (!detEl)
return false;
1373 surfaceTransform.pretranslate(
pars.position());
1374 double surfDim = 500.;
1375 const std::unique_ptr<Trk::PlaneSurface> surf = std::make_unique<Trk::PlaneSurface>(surfaceTransform, surfDim, surfDim);
1378 if (
dir.y() *
pars.position().y() < 0.) {
dir *= -1.; }
1383 double track_angleYZ = std::atan2(locDirTrack.z(), locDirTrack.y());
1387 double chamber_angleYZ = std::atan2(dirCh.z(), dirCh.y());
1388 double angleYZ =
locDir.angleYZ();
1395 ATH_MSG_DEBUG(
"Seeding angles " << track_angleYZ <<
" from surf " << angleYZ <<
" ch angle " << chamber_angleYZ <<
" pos "
1397 segFinder.setPhiRoad(track_angleYZ, chamber_angleYZ, 0.14);
1401 if (dcslFitter.
fit(
segment, segPars, dcsOnTrack)) {
1402 segment.hitsOnTrack(dcsOnTrack.size());
1412 if (!segments.empty()) {
ATH_MSG_DEBUG(
"Found segments " << segments.size()); }
1414 if (segments.size() != 1) {
1415 if (
hits.size() > 3)
1419 double dthetaBest = 10000.;
1424 for (; sit != sit_end; ++sit, ++
index) {
1425 double dtheta = std::abs(sit->line().phi() - track_angleYZ);
1426 if (dtheta < dthetaBest) {
1427 dthetaBest = dtheta;
1430 if (sit->hitsOnTrack() > 4) {
ATH_MSG_DEBUG(
"Recoverable segment " << *sit); }
1432 if (indexBest != -1) {
1434 selectedSegments.push_back(segments[indexBest]);
1435 segments = selectedSegments;
1444 if (settings.discardNotCleanedTracks && !
segment.hasT0Shift())
return false;
1448 if (dcs.size() ==
segment.hitsOnTrack()) {
1451 }
else if (dcs.size() >
segment.hitsOnTrack() + 1) {
1453 if (
segment.hitsOnTrack() < 4)
return false;
1465 if (std::abs(dcit->r()) - std::abs(dcit->rot()->driftRadius()) > 0.1) {
1466 ATH_MSG_DEBUG(
"Large change in drift radius: r_old " << dcit->rot()->driftRadius() <<
" r_new " << dcit->r());
1470 removedIdentifiers.insert(dcit->rot()->identify());
◆ removeOutliers()
Definition at line 1203 of file MuonRefitTool.cxx.
1212 std::set<Identifier> removedIdentifiers;
1213 std::vector<const MdtDriftCircleOnTrack*> mdts;
1219 for (; tsit != tsit_end; ++tsit) {
1220 if (!*tsit)
continue;
1224 if (!
pars) {
continue; }
1230 if (!meas) {
continue; }
1235 if (!
id.is_valid()) {
continue; }
1238 const MdtDriftCircleOnTrack* mdt =
dynamic_cast<const MdtDriftCircleOnTrack*
>(meas);
1240 ATH_MSG_WARNING(
" Measurement with MDT identifier that is not a MdtDriftCircleOnTrack ");
1247 if (chId != currentMdtChId) {
1252 if (mdts.size() > 4)
1254 <<
" hits " << mdts.size());
1255 if (settings.discardNotCleanedTracks)
return nullptr;
1261 currentMdtChId = chId;
1264 mdts.push_back(mdt);
1271 if (mdts.size() > 4)
1274 if (settings.discardNotCleanedTracks)
return nullptr;
1278 if (removedIdentifiers.empty()) {
1280 return std::make_unique<Trk::Track>(
track);
1284 auto trackStateOnSurfaces = std::make_unique<Trk::TrackStates>();
1285 trackStateOnSurfaces->reserve(
states->size());
1287 ATH_MSG_DEBUG(
"Removing nhits: " << removedIdentifiers.size());
1290 if (!*tsit)
continue;
1297 if (removedIdentifiers.count(
id)) {
1299 trackStateOnSurfaces->push_back(std::move(new_tsos));
1303 trackStateOnSurfaces->push_back(tsos->clone());
1306 std::unique_ptr<Trk::Track> newTrack = std::make_unique<Trk::Track>(
track.info(), std::move(trackStateOnSurfaces),
1307 track.fitQuality() ?
track.fitQuality()->uniqueClone() :
nullptr);
◆ renounce()
◆ renounceArray()
◆ sysInitialize()
◆ sysStart()
Handle START transition.
We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.
◆ updateAlignmentErrors()
◆ updateErrors()
update errors on a muon track
default strategy
Definition at line 630 of file MuonRefitTool.cxx.
641 std::vector<std::unique_ptr<Trk::TrackStateOnSurface>> newStates;
642 newStates.reserve(
states->size() + 5);
645 std::map<int, std::set<MuonStationIndex::StIndex>> stationsPerSector;
667 if (!meas) {
continue; }
678 stationsPerSector[sector].insert(stIndex);
682 if (!
track.trackParameters() ||
track.trackParameters()->empty()) {
686 startPars =
track.trackParameters()->front();
691 std::vector<int> sectorsWithMostStations;
692 unsigned int nmaxStations = 0;
693 std::map<int, std::set<MuonStationIndex::StIndex>>
::iterator stit = stationsPerSector.begin();
694 std::map<int, std::set<MuonStationIndex::StIndex>>
::iterator stit_end = stationsPerSector.end();
695 for (; stit != stit_end; ++stit) {
702 if (stit->second.size() > nmaxStations) {
703 nmaxStations = stit->second.size();
704 sectorsWithMostStations.clear();
705 sectorsWithMostStations.push_back(stit->first);
706 }
else if (stit->second.size() == nmaxStations) {
707 sectorsWithMostStations.push_back(stit->first);
710 int selectedSector = -1;
711 if (sectorsWithMostStations.empty()) {
713 }
else if (sectorsWithMostStations.size() == 1) {
714 selectedSector = sectorsWithMostStations.front();
716 ATH_MSG_DEBUG(
"Found track with special sector configuration " << sectorsWithMostStations.size() <<
" ch per sector "
717 << nmaxStations <<
" using first sector");
718 selectedSector = sectorsWithMostStations.front();
719 if (selectedSector % 2 == 1 && sectorsWithMostStations.back() % 2 != 1) {
720 ATH_MSG_DEBUG(
"Revising sector choice, picking small sector ");
721 selectedSector = sectorsWithMostStations.back();
729 const std::set<MuonStationIndex::StIndex>& selected_set = stationsPerSector[selectedSector];
731 return (selected_set.count(idx) > 0) + n;
734 return (selected_set.count(idx) > 0) + n;
736 bool barrelEndcap {
false}, deweightBarrel{
false}, deweightEndcap{
false};
737 if (nbarrel > 0 && nendcap > 0) {
738 if (nbarrel < nendcap)
739 deweightBarrel =
true;
741 deweightEndcap =
true;
745 ATH_MSG_DEBUG(
" Selected sector " << selectedSector <<
" nstations " << nmaxStations <<
" barrel " << nbarrel <<
" endcap "
754 unsigned int deweightHits = 0;
755 unsigned int removedSectorHits = 0;
756 bool addedPerigee =
false;
763 if (settings.prepareForFit && !
pars) {
765 newStates.emplace_back(tsos->clone());
775 if (
pars == startPars) {
789 newStates.emplace_back(tsos->clone());
793 if (settings.prepareForFit && settings.recreateStartingParameters && !addedPerigee) {
795 double sign =
pars->position().dot(
pars->momentum()) > 0 ? 1. : -1.;
799 double phi =
pars->momentum().phi();
801 double qoverp =
pars->charge() /
pars->momentum().mag();
803 std::unique_ptr<Trk::Perigee> perigee = std::make_unique<Trk::Perigee>(0, 0, phi, theta, qoverp, persurf);
806 ATH_MSG_DEBUG(
"Adding perigee in front of first measurement");
813 newStates.emplace_back(tsos->clone());
817 if (!settings.updateErrors) {
818 newStates.emplace_back(tsos->clone());
823 const MdtDriftCircleOnTrack* mdt =
dynamic_cast<const MdtDriftCircleOnTrack*
>(meas);
825 ATH_MSG_WARNING(
" Measurement with MDT identifier that is not a MdtDriftCircleOnTrack ");
829 bool hasT0Fit =
false;
832 std::unique_ptr<MdtDriftCircleOnTrack> rot{};
848 }
else if (deweightBarrel &&
849 std::find(barel_stations.begin(),barel_stations.end(),stIndex) != barel_stations.end()) {
853 }
else if (deweightEndcap &&
854 std::find(endcap_stations.begin(), endcap_stations.end(), stIndex) != endcap_stations.end()) {
858 }
else if (settings.deweightOtherSectors && sector != selectedSector) {
896 rot.reset(mdt->clone());
899 if (settings.removeOtherSectors) {
900 if (sector != selectedSector) {
905 if (settings.chambersToBeremoved.count(chId) || settings.precisionLayersToBeremoved.count(stIndex)) {
911 <<
" radius " << rot->driftRadius() <<
" new err "
919 if (std::abs(rot->driftRadius() - mdt->driftRadius()) > 0.1)
920 ATH_MSG_DEBUG(
" Bad recalibration: old r " << mdt->driftRadius());
924 newStates.emplace_back(std::move(new_tsos));
926 if (settings.chambersToBeremoved.count(chId) || settings.precisionLayersToBeremoved.count(stIndex)) {
928 newStates.emplace_back(std::move(new_tsos));
931 newStates.emplace_back(tsos->clone());
937 if (settings.chambersToBeremoved.count(chId) || settings.phiLayersToBeremoved.count(
phiIndex)) {
939 newStates.emplace_back(std::move(new_tsos));
942 newStates.emplace_back(tsos->clone());
946 if (settings.updateTriggerErrors) {
947 newStates.emplace_back(tsos->clone());
950 newStates.emplace_back(tsos->clone());
954 newStates.emplace_back(tsos->clone());
962 if (deweightHits > 0)
ATH_MSG_DEBUG(
" de-weighted " << deweightHits <<
" MDT hits from neighbouring sectors");
963 if (removedSectorHits > 0)
ATH_MSG_DEBUG(
" removed " << removedSectorHits <<
" MDT hits from neighbouring sectors");
965 ATH_MSG_VERBOSE(
" original track had " <<
states->size() <<
" TSOS, adding " << newStates.size() -
states->size() <<
" new TSOS ");
968 auto trackStateOnSurfaces = std::make_unique<Trk::TrackStates>();
969 trackStateOnSurfaces->reserve(newStates.size());
970 for (std::unique_ptr<Trk::TrackStateOnSurface>& new_state : newStates) {
971 trackStateOnSurfaces->push_back(std::move(new_state));
973 std::unique_ptr<Trk::Track> newTrack = std::make_unique<Trk::Track>(
track.info(), std::move(trackStateOnSurfaces),
974 track.fitQuality() ?
track.fitQuality()->uniqueClone() :
nullptr);
◆ updateMdtErrors()
Definition at line 980 of file MuonRefitTool.cxx.
993 std::vector<std::unique_ptr<Trk::TrackStateOnSurface>> newStates;
994 newStates.reserve(
states->size() + 5);
1000 if (!tsos)
continue;
1003 if (!
pars)
continue;
1017 if (!meas) {
continue; }
1029 if (!
track.trackParameters() ||
track.trackParameters()->empty()) {
1033 startPars =
track.trackParameters()->front();
1037 bool addedPerigee =
false;
1040 if (!tsos)
continue;
1044 if (settings.prepareForFit && !
pars) {
1046 newStates.emplace_back(tsos->clone());
1057 if (
pars == startPars) {
1061 addedPerigee =
true;
1071 newStates.emplace_back(tsos->clone());
1075 if (settings.prepareForFit && settings.recreateStartingParameters && !addedPerigee) {
1077 double sign =
pars->position().dot(
pars->momentum()) > 0 ? 1. : -1.;
1081 double phi =
pars->momentum().phi();
1082 double theta =
pars->momentum().theta();
1083 double qoverp =
pars->charge() /
pars->momentum().mag();
1085 std::unique_ptr<Trk::Perigee> perigee = std::make_unique<Trk::Perigee>(0, 0, phi, theta, qoverp, persurf);
1087 addedPerigee =
true;
1088 ATH_MSG_DEBUG(
"Adding perigee in front of first measurement");
1095 newStates.emplace_back(tsos->clone());
1099 if (!settings.updateErrors) {
1100 newStates.emplace_back(tsos->clone());
1105 const MdtDriftCircleOnTrack* mdt =
dynamic_cast<const MdtDriftCircleOnTrack*
>(meas);
1107 ATH_MSG_WARNING(
" Measurement with MDT identifier that is not a MdtDriftCircleOnTrack ");
1111 bool hasT0Fit =
false;
1127 MdtDriftCircleOnTrack* newMdt = rot ?
dynamic_cast<MdtDriftCircleOnTrack*
>(rot) :
nullptr;
1129 newMdt = mdt->
clone();
1132 if (settings.chambersToBeremoved.count(chId) || settings.precisionLayersToBeremoved.count(stIndex)) {
1138 << newMdt->driftRadius() <<
" new err "
1146 if (std::abs(newMdt->driftRadius() - mdt->driftRadius()) > 0.1)
1147 ATH_MSG_DEBUG(
" Bad recalibration: old r " << mdt->driftRadius());
1149 std::unique_ptr<MdtDriftCircleOnTrack> newUniqueMdt {newMdt};
1151 newStates.emplace_back(std::move(new_tsos));
1153 if (settings.chambersToBeremoved.count(chId) || settings.precisionLayersToBeremoved.count(stIndex)) {
1155 newStates.emplace_back(std::move(new_tsos));
1158 newStates.emplace_back(tsos->clone());
1164 if (settings.chambersToBeremoved.count(chId) || settings.phiLayersToBeremoved.count(
phiIndex)) {
1166 newStates.emplace_back(std::move(new_tsos));
1169 newStates.emplace_back(tsos->clone());
1173 if (settings.updateTriggerErrors) {
1174 newStates.emplace_back(tsos->clone());
1177 newStates.emplace_back(tsos->clone());
1181 newStates.emplace_back(tsos->clone());
1189 ATH_MSG_VERBOSE(
" original track had " <<
states->size() <<
" TSOS, adding " << newStates.size() -
states->size() <<
" new TSOS ");
1192 auto trackStateOnSurfaces = std::make_unique<Trk::TrackStates>();
1193 trackStateOnSurfaces->reserve(newStates.size());
1194 for ( std::unique_ptr<Trk::TrackStateOnSurface>& state : newStates) {
1196 trackStateOnSurfaces->push_back(std::move(state));
1198 std::unique_ptr<Trk::Track> newTrack = std::make_unique<Trk::Track>(
track.info(), std::move(trackStateOnSurfaces),
1199 track.fitQuality() ?
track.fitQuality()->uniqueClone() :
nullptr);
◆ updateVHKA()
◆ m_addAll
Gaudi::Property<bool> Muon::MuonRefitTool::m_addAll {this, "AddAll", false} |
|
private |
◆ m_addInner
Gaudi::Property<bool> Muon::MuonRefitTool::m_addInner {this, "AddInner", false} |
|
private |
◆ m_addMiddle
Gaudi::Property<bool> Muon::MuonRefitTool::m_addMiddle {this, "AddMiddle", false} |
|
private |
◆ m_addTwo
Gaudi::Property<bool> Muon::MuonRefitTool::m_addTwo {this, "AddTwo", false} |
|
private |
◆ m_alignErrorTool
Does not provide any method with EventContext yet.
Definition at line 78 of file MuonRefitTool.h.
◆ m_alignmentAngle
Gaudi::Property<float> Muon::MuonRefitTool::m_alignmentAngle {this, "AlignmentAngle", 0} |
|
private |
◆ m_alignmentAngleError
Gaudi::Property<float> Muon::MuonRefitTool::m_alignmentAngleError {this, "AlignmentAngleError", 0.001} |
|
private |
◆ m_alignmentDelta
Gaudi::Property<float> Muon::MuonRefitTool::m_alignmentDelta {this, "AlignmentDelta", 0} |
|
private |
◆ m_alignmentDeltaError
Gaudi::Property<float> Muon::MuonRefitTool::m_alignmentDeltaError {this, "AlignmentDeltaError", 0.1} |
|
private |
◆ m_alignmentErrors
Gaudi::Property<bool> Muon::MuonRefitTool::m_alignmentErrors {this, "AlignmentErrors", false} |
|
private |
◆ m_BME_station
int Muon::MuonRefitTool::m_BME_station {0} |
|
private |
◆ m_compClusterCreator
Initial value:{
this, "CompClusterCreator", "Muon::TriggerChamberClusterOnTrackCreator/TriggerChamberClusterOnTrackCreator"}
Definition at line 85 of file MuonRefitTool.h.
◆ m_defaultSettings
Settings Muon::MuonRefitTool::m_defaultSettings |
|
private |
◆ m_detStore
◆ m_deweightBEE
Gaudi::Property<bool> Muon::MuonRefitTool::m_deweightBEE {this, "DeweightBEE", false} |
|
private |
◆ m_deweightBIS78
Gaudi::Property<bool> Muon::MuonRefitTool::m_deweightBIS78 {this, "DeweightBIS78", true} |
|
private |
◆ m_deweightBME
Gaudi::Property<bool> Muon::MuonRefitTool::m_deweightBME {this, "DeweightBME", true} |
|
private |
◆ m_deweightBOE
Gaudi::Property<bool> Muon::MuonRefitTool::m_deweightBOE {this, "DeweightBOE", true} |
|
private |
◆ m_deweightEE
Gaudi::Property<bool> Muon::MuonRefitTool::m_deweightEE {this, "DeweightEE", false} |
|
private |
◆ m_deweightEEL1C05
Gaudi::Property<bool> Muon::MuonRefitTool::m_deweightEEL1C05 {this, "DeweightEEL1C05", false} |
|
private |
◆ m_deweightTwoStationTracks
Gaudi::Property<bool> Muon::MuonRefitTool::m_deweightTwoStationTracks {this, "DeweightTwoStationTracks", false} |
|
private |
◆ m_edmHelperSvc
Initial value:{this, "edmHelper", "Muon::MuonEDMHelperSvc/MuonEDMHelperSvc",
"Handle to the service providing the IMuonEDMHelperSvc interface"}
Definition at line 73 of file MuonRefitTool.h.
◆ m_errorStrategy
◆ m_errorStrategyBarEnd
◆ m_errorStrategyBEE
◆ m_errorStrategyBIS78
◆ m_errorStrategyBXE
◆ m_errorStrategyEE
◆ m_errorStrategyEEL1C05
◆ m_errorStrategySL
◆ m_errorStrategyTwoStations
◆ m_evtStore
◆ m_failedErrorUpdate
std::atomic<unsigned int> Muon::MuonRefitTool::m_failedErrorUpdate {0} |
|
mutableprivate |
◆ m_failedExtrapolationMuonEntry
std::atomic<unsigned int> Muon::MuonRefitTool::m_failedExtrapolationMuonEntry {0} |
|
mutableprivate |
◆ m_failedOutlierRemoval
std::atomic<unsigned int> Muon::MuonRefitTool::m_failedOutlierRemoval {0} |
|
mutableprivate |
◆ m_failedRefit
std::atomic<unsigned int> Muon::MuonRefitTool::m_failedRefit {0} |
|
mutableprivate |
◆ m_finderDebugLevel
Gaudi::Property<int> Muon::MuonRefitTool::m_finderDebugLevel {this, "FinderDebugLevel", -1} |
|
private |
◆ m_fixedError
Gaudi::Property<double> Muon::MuonRefitTool::m_fixedError {this, "UsedFixedError", 1} |
|
private |
◆ m_flagT0FitRange
Gaudi::Property<double> Muon::MuonRefitTool::m_flagT0FitRange {this, "FlagT0FitRange", 0.00005} |
|
private |
◆ m_idHelperSvc
◆ m_mdtRotCreator
Initial value:{this, "MdtRotCreator",
"Muon::MdtDriftCircleOnTrackCreator/MdtDriftCircleOnTrackCreator"}
Definition at line 83 of file MuonRefitTool.h.
◆ m_minMuonMomentum
Gaudi::Property<double> Muon::MuonRefitTool::m_minMuonMomentum {this, "MinMuonMom", 4000} |
|
private |
◆ m_muonEntryTrackExtrapolator
◆ m_muonErrorStrategy
◆ m_muonExtrapolator
◆ m_ngoodRefits
std::atomic<unsigned int> Muon::MuonRefitTool::m_ngoodRefits {0} |
|
mutableprivate |
◆ m_nrefits
std::atomic<unsigned int> Muon::MuonRefitTool::m_nrefits {0} |
|
mutableprivate |
◆ m_printer
◆ m_simpleAEOTs
Gaudi::Property<bool> Muon::MuonRefitTool::m_simpleAEOTs {this, "SimpleAEOTs", false} |
|
private |
◆ m_t0Fitter
ToolHandle<IDCSLFitProvider> Muon::MuonRefitTool::m_t0Fitter {this, "T0Fitter", ""} |
|
private |
◆ m_trackFitter
◆ m_varHandleArraysDeclared
◆ m_vhka
The documentation for this class was generated from the following files:
JetConstituentVector::iterator iterator
static std::unique_ptr< Trk::TrackStateOnSurface > cloneTSOS(const Trk::TrackStateOnSurface &tsos, Trk::TrackStateOnSurface::TrackStateOnSurfaceType type)
clone input, update the type
static std::unique_ptr< Trk::TrackStateOnSurface > createPerigeeTSOS(std::unique_ptr< Trk::TrackParameters > perigee)
create a perigee TSOS, takes ownership of the Perigee
const ShapeFitter * fitter
const TrackParameters * trackParameters() const
return ptr to trackparameters const overload
@ Perigee
This represents a perigee, and so will contain a Perigee object only.
virtual Amg::Transform3D AmdbLRSToGlobalTransform() const
Const iterator class for DataVector/DataList.
std::vector< DCOnTrack > DCOnTrackVec
std::string find(const std::string &s)
return a remapped string
virtual const Amg::Vector3D & center(const Identifier &) const override final
Return the center of the surface associated with this identifier In the case of silicon it returns th...
double innerTubeRadius() const
Returns the inner tube radius excluding the aluminium walls.
virtual RIO_OnTrack * clone() const override=0
Pseudo-constructor, needed to avoid excessive RTTI.
virtual bool fit(Segment &result, const Line &line, const DCOnTrackVec &dcs, double t0Seed=-99999.) const
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
std::unique_ptr< ParametersBase< DIM, T > > uniqueClone() const
clone method for polymorphic deep copy returning unique_ptr; it is not overriden, but uses the existi...
Dummy class used to allow special convertors to be called for surfaces owned by a detector element.
bool accumulate(AccumulateMap &map, std::vector< module_t > const &modules, FPGATrackSimMatrixAccumulator const &acc)
Accumulates an accumulator (e.g.
Helper struct to overload the destructors of smart pointers.
virtual Amg::Transform3D GlobalToAmdbLRSTransform() const
StoreGateSvc_t m_evtStore
Pointer to StoreGate (event store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
bool msgLvl(const MSG::Level lvl) const
const MeasurementBase * measurementOnTrack() const
returns MeasurementBase const overload
This class represents a drift time measurement.
#define ATH_MSG_VERBOSE(x)
@ Alignment
This TSOS contains a Trk::AlignmentEffectsOnTrack.
PhiIndex
enum to classify the different phi layers in the muon spectrometer
@ PropCorrection
Propagation correction was applied in calibration.
@ TempCorrection
Temperature correction was applied in calibration.
Implementation of 2 dimensional vector class.
std::vector< DriftCircle > DCVec
@ T0Refit
A special error was applied to account for the T0 refit (user defined via jobProperties)
virtual void setOwner(IDataHandleHolder *o)=0
@ Outlier
This TSoS contains an outlier, that is, it contains a MeasurementBase/RIO_OnTrack which was not used ...
@ SlewCorrection
Slewing correction was applied in calibration.
std::bitset< 23 > MuonDriftCircleErrorStrategyInput
@ FixedError
A fixed error is given to this hit (user defined via jobProperties)
@ TofCorrection
Time of flight correction was applied in calibration.
Eigen::Affine3d Transform3D
@ BackgroundCorrection
Background correction was applied in calibration.
DCOnTrackVec::const_iterator DCOnTrackCit
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)
@ Segment
Treating a segment or a track.
@ ErrorAtPredictedPosition
represents the three-dimensional global direction with respect to a planar surface frame.
@ MagFieldCorrection
Magnetic field correction was applied in calibration.
An object decorating a track and holding degrees of freedom reflecting alignment accuracy.
constexpr std::enable_if_t< is_bitmask_v< E >, E & > set(E &lhs, E rhs)
Convenience function to set bits in a class enum bitmask.
virtual void renounce()=0
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
const Perigee * perigeeParameters() const
return Perigee.
@ StationError
A term is added to account for misaligned.
represents the track state (measurement, material, fit parameters and quality) at a surface.
virtual const Surface & associatedSurface() const =0
Interface method to get the associated Surface.
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 ...
Eigen::Matrix< double, 3, 1 > Vector3D
void setParameter(CreationParameter, bool value)
void setStrategy(Strategy)
Select the strategy to be used - only one can be set at a time.
unsigned int phiIndex(float phi, float binsize)
calculate phi index for a given phi
@ ParameterisedErrors
Use parameterised errors.
#define ATH_MSG_WARNING(x)
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
std::vector< Segment > SegVec
static const std::string & stName(StIndex index)
convert StIndex into a string
static std::unique_ptr< Trk::TrackStateOnSurface > createMeasTSOSWithUpdate(const Trk::TrackStateOnSurface &tsos, std::unique_ptr< Trk::MeasurementBase > meas, std::unique_ptr< Trk::TrackParameters > pars, Trk::TrackStateOnSurface::TrackStateOnSurfaceType type)
create a TSOS with a measurement, takes ownership of the pointers
StIndex
enum to classify the different station layers in the muon spectrometer
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
@ Measurement
This is a measurement, and will at least contain a Trk::MeasurementBase.
Muon::NSW_PadTriggerSegment segment(const NSWL1::PadTrigger &data)
@ InTime
drift time too small to be compatible with drift spectrum