 |
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, V, H > &t) |
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleKey &hndl, const std::string &doc, const SG::VarHandleKeyType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleBase &hndl, const std::string &doc, const SG::VarHandleType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, SG::VarHandleKeyArray &hndArr, const std::string &doc, const SG::VarHandleKeyArrayType &) |
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, T &property, const std::string &doc, const SG::NotHandleType &) |
| Declare a new Gaudi property. More...
|
|
Gaudi::Details::PropertyBase * | declareProperty (const std::string &name, T &property, const std::string &doc="none") |
| Declare a new Gaudi property. More...
|
|
void | updateVHKA (Gaudi::Details::PropertyBase &) |
|
MsgStream & | msg () const |
|
MsgStream & | msg (const MSG::Level lvl) const |
|
bool | msgLvl (const MSG::Level lvl) const |
|
|
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...
|
|
|
std::unique_ptr< Trk::Perigee > | createPerigee (const Trk::TrackParameters &pars, const EventContext &ctx) const |
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &) |
| specialization for handling Gaudi::Property<SG::VarHandleKey> More...
|
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyArrayType &) |
| specialization for handling Gaudi::Property<SG::VarHandleKeyArray> More...
|
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleType &) |
| specialization for handling Gaudi::Property<SG::VarHandleBase> More...
|
|
Gaudi::Details::PropertyBase & | declareGaudiProperty (Gaudi::Property< T, V, H > &t, const SG::NotHandleType &) |
| specialization for handling everything that's not a Gaudi::Property<SG::VarHandleKey> or a <SG::VarHandleKeyArray> More...
|
|
|
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 1471 of file MuonRefitTool.cxx.
1472 std::unique_ptr<Trk::Perigee> perigee;
1475 std::unique_ptr<Trk::TrackParameters> exPars{
m_muonExtrapolator->extrapolateDirectly(ctx,
pars, persurf)};
1476 perigee.reset (
dynamic_cast<Trk::Perigee*
>(exPars.release()));
1478 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<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);
546 if (indexFirstInner == -1) indexFirstInner =
index;
547 indicesOfAffectedTSOSInner.push_back(tsit);
548 indicesOfAffectedIdsInner.push_back(
id);
553 if (indicesOfAffectedTSOS.empty() && indicesOfAffectedTSOSInner.empty()) {
554 std::unique_ptr<Trk::Track> newTrack = std::make_unique<Trk::Track>(
track.info(), std::move(trackStateOnSurfaces),
555 track.fitQuality() ?
track.fitQuality()->uniqueClone() :
nullptr);
559 std::bitset<Trk::TrackStateOnSurface::NumberOfTrackStateOnSurfaceTypes> typePattern(0);
562 std::unique_ptr<Trk::TrackStateOnSurface> tsosAEOT;
564 int middle = indicesOfAffectedTSOS.size() / 2;
566 auto aEOT = std::make_unique<Trk::AlignmentEffectsOnTrack>(
571 indicesOfAffectedIds,
574 << aEOT->associatedSurface()
575 <<
" nr of tsos affected "
576 << indicesOfAffectedTSOS.size());
577 tsosAEOT = std::make_unique<Trk::TrackStateOnSurface>(
585 std::unique_ptr<Trk::TrackStateOnSurface> tsosAEOTInner;
587 int middle = indicesOfAffectedTSOSInner.size() / 2;
589 auto aEOTInner = std::make_unique<Trk::AlignmentEffectsOnTrack>(
594 indicesOfAffectedIdsInner,
596 tsosAEOTInner = std::make_unique<Trk::TrackStateOnSurface>(
601 std::move(aEOTInner));
604 auto trackStateOnSurfacesAEOT = std::make_unique<Trk::TrackStates>();
605 trackStateOnSurfacesAEOT->reserve(
states->size() + 2);
609 if (
index == indexFirst && tsosAEOT) {
610 trackStateOnSurfacesAEOT->push_back(std::move(tsosAEOT));
611 if (!
m_addAll)
ATH_MSG_DEBUG(
" AlignmentEffectsOnTrack for Middle added to trackStateOnSurfacesAEOT ");
612 if (
m_addAll)
ATH_MSG_DEBUG(
" AlignmentEffectsOnTrack for All stations added to trackStateOnSurfacesAEOT ");
614 if (
index == indexFirstInner && tsosAEOTInner) {
615 trackStateOnSurfacesAEOT->push_back(std::move(tsosAEOTInner));
616 ATH_MSG_DEBUG(
" AlignmentEffectsOnTrack for Inner added to trackStateOnSurfacesAEOT ");
617 if (
m_addTwo)
ATH_MSG_DEBUG(
" also AlignmentEffectsOnTrack for Middle added to trackStateOnSurfacesAEOT ");
619 trackStateOnSurfacesAEOT->push_back(tsit);
621 std::unique_ptr<Trk::Track> newTrack = std::make_unique<Trk::Track>(
track.info(), std::move(trackStateOnSurfacesAEOT),
622 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 1305 of file MuonRefitTool.cxx.
1307 if (
hits.size() < 3) {
1325 segFinder.setFitter(
fitter);
1328 segFinder.setRecoverMDT(
false);
1330 for (
const MdtDriftCircleOnTrack* mdt :
hits) {
1335 detEl = mdt->prepRawData()->detectorElement();
1343 Amg::Vector3D locPos = gToStation * mdt->prepRawData()->globalPosition();
1346 double r = std::abs(mdt->localParameters()[
Trk::locR]);
1357 dcsOnTrack.emplace_back(dc, 1., 1.);
1358 dcs.emplace_back(std::move(dc));
1361 if (!detEl)
return false;
1367 surfaceTransform.pretranslate(
pars.position());
1368 double surfDim = 500.;
1369 const std::unique_ptr<Trk::PlaneSurface> surf = std::make_unique<Trk::PlaneSurface>(surfaceTransform, surfDim, surfDim);
1372 if (
dir.y() *
pars.position().y() < 0.) {
dir *= -1.; }
1377 double track_angleYZ = std::atan2(locDirTrack.z(), locDirTrack.y());
1381 double chamber_angleYZ = std::atan2(dirCh.z(), dirCh.y());
1382 double angleYZ =
locDir.angleYZ();
1389 ATH_MSG_DEBUG(
"Seeding angles " << track_angleYZ <<
" from surf " << angleYZ <<
" ch angle " << chamber_angleYZ <<
" pos "
1391 segFinder.setPhiRoad(track_angleYZ, chamber_angleYZ, 0.14);
1395 if (dcslFitter.
fit(
segment, segPars, dcsOnTrack)) {
1396 segment.hitsOnTrack(dcsOnTrack.size());
1406 if (!segments.empty()) {
ATH_MSG_DEBUG(
"Found segments " << segments.size()); }
1408 if (segments.size() != 1) {
1409 if (
hits.size() > 3)
1413 double dthetaBest = 10000.;
1418 for (; sit != sit_end; ++sit, ++
index) {
1419 double dtheta = std::abs(sit->line().phi() - track_angleYZ);
1420 if (dtheta < dthetaBest) {
1421 dthetaBest = dtheta;
1424 if (sit->hitsOnTrack() > 4) {
ATH_MSG_DEBUG(
"Recoverable segment " << *sit); }
1426 if (indexBest != -1) {
1428 selectedSegments.push_back(segments[indexBest]);
1429 segments = selectedSegments;
1438 if (settings.discardNotCleanedTracks && !
segment.hasT0Shift())
return false;
1442 if (dcs.size() ==
segment.hitsOnTrack()) {
1445 }
else if (dcs.size() >
segment.hitsOnTrack() + 1) {
1447 if (
segment.hitsOnTrack() < 4)
return false;
1459 if (std::abs(dcit->r()) - std::abs(dcit->rot()->driftRadius()) > 0.1) {
1460 ATH_MSG_DEBUG(
"Large change in drift radius: r_old " << dcit->rot()->driftRadius() <<
" r_new " << dcit->r());
1464 removedIdentifiers.insert(dcit->rot()->identify());
◆ removeOutliers()
Definition at line 1197 of file MuonRefitTool.cxx.
1206 std::set<Identifier> removedIdentifiers;
1207 std::vector<const MdtDriftCircleOnTrack*> mdts;
1213 for (; tsit != tsit_end; ++tsit) {
1214 if (!*tsit)
continue;
1218 if (!
pars) {
continue; }
1224 if (!meas) {
continue; }
1229 if (!
id.is_valid()) {
continue; }
1232 const MdtDriftCircleOnTrack* mdt =
dynamic_cast<const MdtDriftCircleOnTrack*
>(meas);
1234 ATH_MSG_WARNING(
" Measurement with MDT identifier that is not a MdtDriftCircleOnTrack ");
1241 if (chId != currentMdtChId) {
1246 if (mdts.size() > 4)
1248 <<
" hits " << mdts.size());
1249 if (settings.discardNotCleanedTracks)
return nullptr;
1255 currentMdtChId = chId;
1258 mdts.push_back(mdt);
1265 if (mdts.size() > 4)
1268 if (settings.discardNotCleanedTracks)
return nullptr;
1272 if (removedIdentifiers.empty()) {
1274 return std::make_unique<Trk::Track>(
track);
1278 auto trackStateOnSurfaces = std::make_unique<Trk::TrackStates>();
1279 trackStateOnSurfaces->reserve(
states->size());
1281 ATH_MSG_DEBUG(
"Removing nhits: " << removedIdentifiers.size());
1284 if (!*tsit)
continue;
1291 if (removedIdentifiers.count(
id)) {
1293 trackStateOnSurfaces->push_back(std::move(new_tsos));
1297 trackStateOnSurfaces->push_back(tsos->clone());
1300 std::unique_ptr<Trk::Track> newTrack = std::make_unique<Trk::Track>(
track.info(), std::move(trackStateOnSurfaces),
1301 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 629 of file MuonRefitTool.cxx.
640 std::vector<std::unique_ptr<Trk::TrackStateOnSurface>> newStates;
641 newStates.reserve(
states->size() + 5);
644 std::map<int, std::set<StIndex>> stationsPerSector;
666 if (!meas) {
continue; }
677 stationsPerSector[sector].insert(stIndex);
681 if (!
track.trackParameters() ||
track.trackParameters()->empty()) {
685 startPars =
track.trackParameters()->front();
690 std::vector<int> sectorsWithMostStations;
691 unsigned int nmaxStations = 0;
692 std::map<int, std::set<StIndex>>
::iterator stit = stationsPerSector.begin();
693 std::map<int, std::set<StIndex>>
::iterator stit_end = stationsPerSector.end();
694 for (; stit != stit_end; ++stit) {
701 if (stit->second.size() > nmaxStations) {
702 nmaxStations = stit->second.size();
703 sectorsWithMostStations.clear();
704 sectorsWithMostStations.push_back(stit->first);
705 }
else if (stit->second.size() == nmaxStations) {
706 sectorsWithMostStations.push_back(stit->first);
709 int selectedSector = -1;
710 if (sectorsWithMostStations.empty()) {
712 }
else if (sectorsWithMostStations.size() == 1) {
713 selectedSector = sectorsWithMostStations.front();
715 ATH_MSG_DEBUG(
"Found track with special sector configuration " << sectorsWithMostStations.size() <<
" ch per sector "
716 << nmaxStations <<
" using first sector");
717 selectedSector = sectorsWithMostStations.front();
718 if (selectedSector % 2 == 1 && sectorsWithMostStations.back() % 2 != 1) {
719 ATH_MSG_DEBUG(
"Revising sector choice, picking small sector ");
720 selectedSector = sectorsWithMostStations.back();
728 const std::set<StIndex>& selected_set = stationsPerSector[selectedSector];
729 const int nbarrel =
std::accumulate(barel_stations.begin(),barel_stations.end(),0, [&selected_set](
int n,
const StIndex&
idx){
730 return (selected_set.count(idx) > 0) + n;
732 const int nendcap =
std::accumulate(endcap_stations.begin(),endcap_stations.end(),0, [&selected_set](
int n,
const StIndex&
idx){
733 return (selected_set.count(idx) > 0) + n;
735 bool barrelEndcap {
false}, deweightBarrel{
false}, deweightEndcap{
false};
736 if (nbarrel > 0 && nendcap > 0) {
737 if (nbarrel < nendcap)
738 deweightBarrel =
true;
740 deweightEndcap =
true;
744 ATH_MSG_DEBUG(
" Selected sector " << selectedSector <<
" nstations " << nmaxStations <<
" barrel " << nbarrel <<
" endcap "
753 unsigned int deweightHits = 0;
754 unsigned int removedSectorHits = 0;
755 bool addedPerigee =
false;
762 if (settings.prepareForFit && !
pars) {
764 newStates.emplace_back(tsos->clone());
774 if (
pars == startPars) {
788 newStates.emplace_back(tsos->clone());
792 if (settings.prepareForFit && settings.recreateStartingParameters && !addedPerigee) {
794 double sign =
pars->position().dot(
pars->momentum()) > 0 ? 1. : -1.;
798 double phi =
pars->momentum().phi();
800 double qoverp =
pars->charge() /
pars->momentum().mag();
802 std::unique_ptr<Trk::Perigee> perigee = std::make_unique<Trk::Perigee>(0, 0, phi, theta, qoverp, persurf);
805 ATH_MSG_DEBUG(
"Adding perigee in front of first measurement");
812 newStates.emplace_back(tsos->clone());
816 if (!settings.updateErrors) {
817 newStates.emplace_back(tsos->clone());
822 const MdtDriftCircleOnTrack* mdt =
dynamic_cast<const MdtDriftCircleOnTrack*
>(meas);
824 ATH_MSG_WARNING(
" Measurement with MDT identifier that is not a MdtDriftCircleOnTrack ");
828 bool hasT0Fit =
false;
831 std::unique_ptr<MdtDriftCircleOnTrack> rot{};
846 }
else if (deweightBarrel &&
847 std::find(barel_stations.begin(),barel_stations.end(),stIndex) != barel_stations.end()) {
851 }
else if (deweightEndcap &&
852 std::find(endcap_stations.begin(), endcap_stations.end(), stIndex) != endcap_stations.end()) {
856 }
else if (settings.deweightOtherSectors && sector != selectedSector) {
894 rot.reset(mdt->clone());
897 if (settings.removeOtherSectors) {
898 if (sector != selectedSector) {
903 if (settings.chambersToBeremoved.count(chId) || settings.precisionLayersToBeremoved.count(stIndex)) {
909 <<
" radius " << rot->driftRadius() <<
" new err "
917 if (std::abs(rot->driftRadius() - mdt->driftRadius()) > 0.1)
918 ATH_MSG_DEBUG(
" Bad recalibration: old r " << mdt->driftRadius());
922 newStates.emplace_back(std::move(new_tsos));
924 if (settings.chambersToBeremoved.count(chId) || settings.precisionLayersToBeremoved.count(stIndex)) {
926 newStates.emplace_back(std::move(new_tsos));
929 newStates.emplace_back(tsos->clone());
933 if (settings.chambersToBeremoved.count(chId) || settings.phiLayersToBeremoved.count(
m_idHelperSvc->phiIndex(
id))) {
935 newStates.emplace_back(std::move(new_tsos));
938 newStates.emplace_back(tsos->clone());
942 if (settings.updateTriggerErrors) {
943 newStates.emplace_back(tsos->clone());
946 newStates.emplace_back(tsos->clone());
950 newStates.emplace_back(tsos->clone());
958 if (deweightHits > 0)
ATH_MSG_DEBUG(
" de-weighted " << deweightHits <<
" MDT hits from neighbouring sectors");
959 if (removedSectorHits > 0)
ATH_MSG_DEBUG(
" removed " << removedSectorHits <<
" MDT hits from neighbouring sectors");
961 ATH_MSG_VERBOSE(
" original track had " <<
states->size() <<
" TSOS, adding " << newStates.size() -
states->size() <<
" new TSOS ");
964 auto trackStateOnSurfaces = std::make_unique<Trk::TrackStates>();
965 trackStateOnSurfaces->reserve(newStates.size());
966 for (std::unique_ptr<Trk::TrackStateOnSurface>& new_state : newStates) {
967 trackStateOnSurfaces->push_back(std::move(new_state));
969 std::unique_ptr<Trk::Track> newTrack = std::make_unique<Trk::Track>(
track.info(), std::move(trackStateOnSurfaces),
970 track.fitQuality() ?
track.fitQuality()->uniqueClone() :
nullptr);
◆ updateMdtErrors()
Definition at line 976 of file MuonRefitTool.cxx.
989 std::vector<std::unique_ptr<Trk::TrackStateOnSurface>> newStates;
990 newStates.reserve(
states->size() + 5);
1013 if (!meas) {
continue; }
1025 if (!
track.trackParameters() ||
track.trackParameters()->empty()) {
1029 startPars =
track.trackParameters()->front();
1033 bool addedPerigee =
false;
1036 if (!tsos)
continue;
1040 if (settings.prepareForFit && !
pars) {
1042 newStates.emplace_back(tsos->clone());
1053 if (
pars == startPars) {
1057 addedPerigee =
true;
1067 newStates.emplace_back(tsos->clone());
1071 if (settings.prepareForFit && settings.recreateStartingParameters && !addedPerigee) {
1073 double sign =
pars->position().dot(
pars->momentum()) > 0 ? 1. : -1.;
1077 double phi =
pars->momentum().phi();
1078 double theta =
pars->momentum().theta();
1079 double qoverp =
pars->charge() /
pars->momentum().mag();
1081 std::unique_ptr<Trk::Perigee> perigee = std::make_unique<Trk::Perigee>(0, 0, phi, theta, qoverp, persurf);
1083 addedPerigee =
true;
1084 ATH_MSG_DEBUG(
"Adding perigee in front of first measurement");
1091 newStates.emplace_back(tsos->clone());
1095 if (!settings.updateErrors) {
1096 newStates.emplace_back(tsos->clone());
1101 const MdtDriftCircleOnTrack* mdt =
dynamic_cast<const MdtDriftCircleOnTrack*
>(meas);
1103 ATH_MSG_WARNING(
" Measurement with MDT identifier that is not a MdtDriftCircleOnTrack ");
1107 bool hasT0Fit =
false;
1123 MdtDriftCircleOnTrack* newMdt = rot ?
dynamic_cast<MdtDriftCircleOnTrack*
>(rot) :
nullptr;
1125 newMdt = mdt->
clone();
1128 if (settings.chambersToBeremoved.count(chId) || settings.precisionLayersToBeremoved.count(stIndex)) {
1134 << newMdt->driftRadius() <<
" new err "
1142 if (std::abs(newMdt->driftRadius() - mdt->driftRadius()) > 0.1)
1143 ATH_MSG_DEBUG(
" Bad recalibration: old r " << mdt->driftRadius());
1145 std::unique_ptr<MdtDriftCircleOnTrack> newUniqueMdt {newMdt};
1147 newStates.emplace_back(std::move(new_tsos));
1149 if (settings.chambersToBeremoved.count(chId) || settings.precisionLayersToBeremoved.count(stIndex)) {
1151 newStates.emplace_back(std::move(new_tsos));
1154 newStates.emplace_back(tsos->clone());
1158 if (settings.chambersToBeremoved.count(chId) || settings.phiLayersToBeremoved.count(
m_idHelperSvc->phiIndex(
id))) {
1160 newStates.emplace_back(std::move(new_tsos));
1163 newStates.emplace_back(tsos->clone());
1167 if (settings.updateTriggerErrors) {
1168 newStates.emplace_back(tsos->clone());
1171 newStates.emplace_back(tsos->clone());
1175 newStates.emplace_back(tsos->clone());
1183 ATH_MSG_VERBOSE(
" original track had " <<
states->size() <<
" TSOS, adding " << newStates.size() -
states->size() <<
" new TSOS ");
1186 auto trackStateOnSurfaces = std::make_unique<Trk::TrackStates>();
1187 trackStateOnSurfaces->reserve(newStates.size());
1188 for ( std::unique_ptr<Trk::TrackStateOnSurface>& state : newStates) {
1190 trackStateOnSurfaces->push_back(std::move(state));
1192 std::unique_ptr<Trk::Track> newTrack = std::make_unique<Trk::Track>(
track.info(), std::move(trackStateOnSurfaces),
1193 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
const float EO[NO]
Energy levels for Oxygen.
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.
Helper struct to overload the destructors of smart pointers.
const std::string & stName(StIndex index)
convert StIndex into a string
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.
@ 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 ...
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
@ 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.
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)
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.
@ ParameterisedErrors
Use parameterised errors.
accumulate
Update flags based on parser line args.
#define ATH_MSG_WARNING(x)
MuonStationIndex::StIndex StIndex
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
std::vector< Segment > SegVec
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
@ 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