|
ATLAS Offline Software
|
#include <MuonTrackQuery.h>
|
| MuonTrackQuery (const std::string &type, const std::string &name, const IInterface *parent) |
|
| ~MuonTrackQuery ()=default |
|
StatusCode | initialize () override |
|
const CaloEnergy * | caloEnergy (const Trk::Track &track) const override |
| IMuonTrackQuery interface: caloEnergy from appropriate TSOS. More...
|
|
double | caloEnergyDeposit (const Trk::Track &track, const EventContext &ctx) const override |
| IMuonTrackQuery interface: track energy deposit in calorimeters (as fitted or otherwise applied) More...
|
|
FieldIntegral | fieldIntegral (const Trk::Track &track, const EventContext &ctx) const override |
| IMuonTrackQuery interface: field integral along track from momentum kick between measurements. More...
|
|
bool | isCaloAssociated (const Trk::Track &track, const EventContext &ctx) const override |
| IMuonTrackQuery interface: does track have at least 3 TSOS's representing calorimeter ? More...
|
|
bool | isCombined (const Trk::Track &track, const EventContext &ctx) const override |
| IMuonTrackQuery interface: does track have measurements from indet and spectrometer ? More...
|
|
bool | isExtrapolated (const Trk::Track &track, const EventContext &ctx) const override |
| IMuonTrackQuery interface: does track have perigee inside indet ? More...
|
|
bool | isLineFit (const Trk::Track &track) const override |
| IMuonTrackQuery interface: does track have fitted curvature ? More...
|
|
bool | isProjective (const Trk::Track &track) const override |
| IMuonTrackQuery interface: is track (roughly) projective towards IP? More...
|
|
bool | isSectorOverlap (const Trk::Track &track) const override |
| IMuonTrackQuery interface: is there a long/short chamber overlap? More...
|
|
bool | isSlimmed (const Trk::Track &track) const override |
| IMuonTrackQuery interface: does track have TrackParameters at every TSOS ? More...
|
|
double | momentumBalanceSignificance (const Trk::Track &track, const EventContext &ctx) const override |
| IMuonTrackQuery interface: significance of momentum balance for combined tracks (biassed residual) More...
|
|
unsigned | numberPseudoMeasurements (const Trk::Track &track) const override |
| IMuonTrackQuery interface: number of PseudoMeasurements on track (counts one for any vertex measurement) More...
|
|
std::unique_ptr< const Trk::Perigee > | outgoingPerigee (const Trk::Track &track) const override |
| IMuonTrackQuery interface: perigee expressed outgoing from IP. More...
|
|
ScatteringAngleSignificance | scatteringAngleSignificance (const Trk::Track &track, const EventContext &ctx) const override |
| IMuonTrackQuery interface: significance of early scattering angle pattern for combined tracks (wider than gaussian) More...
|
|
std::unique_ptr< Trk::TrackParameters > | spectrometerParameters (const Trk::Track &track, const EventContext &ctx) const override |
| IMuonTrackQuery interface: trackParameters at innermost measurement TSOS in MS. More...
|
|
unsigned | spectrometerPhiQuality (const Trk::Track &track, const EventContext &ctx) const override |
| IMuonTrackQuery interface: assess the number of additional phi measurements needed for MS (or SA) track fit. More...
|
|
std::unique_ptr< const Trk::TrackParameters > | triggerStationParameters (const Trk::Track &track, const EventContext &ctx) const override |
| IMuonTrackQuery interface: trackParameters at innermost trigger chamber TSOS in MS. 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 |
|
Definition at line 20 of file MuonTrackQuery.h.
◆ StoreGateSvc_t
◆ MuonTrackQuery()
Rec::MuonTrackQuery::MuonTrackQuery |
( |
const std::string & |
type, |
|
|
const std::string & |
name, |
|
|
const IInterface * |
parent |
|
) |
| |
◆ ~MuonTrackQuery()
Rec::MuonTrackQuery::~MuonTrackQuery |
( |
| ) |
|
|
default |
◆ caloEnergy()
◆ caloEnergyDeposit()
double Rec::MuonTrackQuery::caloEnergyDeposit |
( |
const Trk::Track & |
track, |
|
|
const EventContext & |
ctx |
|
) |
| const |
|
overridevirtual |
IMuonTrackQuery interface: track energy deposit in calorimeters (as fitted or otherwise applied)
Implements Rec::IMuonTrackQuery.
Definition at line 98 of file MuonTrackQuery.cxx.
101 if (!calorimeterVolume) {
117 if (!tsos->trackParameters())
continue;
119 if (indetVolume->
inside(tsos->trackParameters()->position())) {
120 indetExitParameters = tsos->trackParameters();
124 if (!calorimeterVolume->
inside(tsos->trackParameters()->position()) && caloExitParameters) {
break; }
126 caloExitParameters = tsos->trackParameters();
129 if (!indetExitParameters || !caloExitParameters) {
return 0.; }
◆ 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
◆ fieldIntegral()
IMuonTrackQuery interface: field integral along track from momentum kick between measurements.
Implements Rec::IMuonTrackQuery.
Definition at line 138 of file MuonTrackQuery.cxx.
144 if (!calorimeterVolume) {
146 return FieldIntegral();
153 return FieldIntegral();
157 double betweenInDetMeasurements = 0.;
158 double betweenSpectrometerMeasurements = 0.;
160 bool haveInDet =
false;
161 bool haveSpectrometer =
false;
170 bool isPreciseHit = (tsos->measurementOnTrack() &&
dynamic_cast<const Trk::MeasurementBase*
>(tsos->measurementOnTrack()) &&
175 if (!tsos->trackParameters() ||
dynamic_cast<const Trk::Perigee*
>(tsos->trackParameters())) {
continue; }
178 if (isPreciseHit && !calorimeterVolume->
inside(tsos->trackParameters()->position())) {
180 isPreciseHit = (
id.is_valid() && !
m_idHelperSvc->measuresPhi(
id));
183 if (!tsos->materialEffectsOnTrack() && !isPreciseHit) {
continue; }
192 if (startMomentum.dot(endDirection) < 0.)
continue;
195 if (tsos->materialEffectsOnTrack()) {
202 endDirection =
Amg::Vector3D(sc_theta.sn * sc_phi.cs, sc_theta.sn * sc_phi.sn, sc_theta.cs);
207 integratedMomentumKick += momentumKick;
210 if (!isPreciseHit)
continue;
214 betweenInDetMeasurements += integratedMomentumKick.mag();
215 integratedMomentumKick = origin;
218 integratedMomentumKick = origin;
221 if (haveSpectrometer) {
222 betweenSpectrometerMeasurements += integratedMomentumKick.mag();
223 integratedMomentumKick = origin;
225 haveSpectrometer =
true;
226 integratedMomentumKick = origin;
232 <<
" field integrals for track at eta, phi " << std::setw(6) << std::setprecision(2)
233 <<
track.perigeeParameters()->momentum().eta() <<
"," << std::setw(6) << std::setprecision(2)
234 <<
track.perigeeParameters()->momentum().phi() <<
" : betweenInDetMeasurements " << std::setw(8)
235 << std::setprecision(3) << betweenInDetMeasurements <<
" betweenSpectrometerMeasurements " << std::setw(8)
236 << std::setprecision(3) << betweenSpectrometerMeasurements);
238 return FieldIntegral(betweenInDetMeasurements, betweenSpectrometerMeasurements, 0., 0.);
◆ flippedParameters()
◆ getVolume()
Tracking geometry is provided by the TrackingGeometryAlg
Definition at line 117 of file MuonTrackQuery.h.
120 if (!handle.isValid()) {
124 return handle->trackingVolume(vol_name);
◆ initialize()
StatusCode Rec::MuonTrackQuery::initialize |
( |
| ) |
|
|
override |
◆ 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& Rec::IMuonTrackQuery::interfaceID |
( |
| ) |
|
|
inlinestaticinherited |
AlgTool and IAlgTool interface methods.
Definition at line 33 of file IMuonTrackQuery.h.
34 static const InterfaceID IID_IMuonTrackQuery(
"IMuonTrackQuery", 1, 0);
35 return IID_IMuonTrackQuery;
◆ isCaloAssociated()
bool Rec::MuonTrackQuery::isCaloAssociated |
( |
const Trk::Track & |
track, |
|
|
const EventContext & |
ctx |
|
) |
| const |
|
overridevirtual |
IMuonTrackQuery interface: does track have at least 3 TSOS's representing calorimeter ?
Implements Rec::IMuonTrackQuery.
Definition at line 241 of file MuonTrackQuery.cxx.
244 if (!calorimeterVolume) {
256 bool haveCaloDeposit =
false;
257 int numberCaloTSOS = 0;
262 ATH_MSG_VERBOSE(
"haveCaloDeposit, " << numberCaloTSOS <<
" TSOS in calo volume");
263 haveCaloDeposit =
true;
267 if (!
s->materialEffectsOnTrack()) {
continue; }
269 Amg::Vector3D position =
s->materialEffectsOnTrack()->associatedSurface().globalReferencePoint();
271 if (indetVolume->
inside(position)) {
continue; }
272 if (!calorimeterVolume->
inside(position)) {
break; }
273 if (++numberCaloTSOS > 2 && haveCaloDeposit) {
return true; }
276 ATH_MSG_VERBOSE(
"association false, " << numberCaloTSOS <<
" TSOS in calo volume");
◆ isCombined()
IMuonTrackQuery interface: does track have measurements from indet and spectrometer ?
Implements Rec::IMuonTrackQuery.
Definition at line 281 of file MuonTrackQuery.cxx.
284 if (!calorimeterVolume) {
298 bool spectrometer =
false;
307 if (indetVolume->
inside(tsos->measurementOnTrack()->globalPosition())) {
310 }
else if (!calorimeterVolume->
inside(tsos->measurementOnTrack()->globalPosition())) {
318 for (; rs !=
track.trackStateOnSurfaces()->rend(); ++rs) {
324 if (indetVolume->
inside((**rs).measurementOnTrack()->globalPosition())) {
327 }
else if (!calorimeterVolume->
inside((**rs).measurementOnTrack()->globalPosition())) {
333 return indet && spectrometer;
◆ isExtrapolated()
bool Rec::MuonTrackQuery::isExtrapolated |
( |
const Trk::Track & |
track, |
|
|
const EventContext & |
ctx |
|
) |
| const |
|
overridevirtual |
IMuonTrackQuery interface: does track have perigee inside indet ?
Implements Rec::IMuonTrackQuery.
Definition at line 336 of file MuonTrackQuery.cxx.
339 if (!calorimeterVolume) {
358 bool spectrometer =
false;
367 if (indetVolume->
inside(tsos->measurementOnTrack()->globalPosition())) {
370 }
else if (!calorimeterVolume->
inside(tsos->measurementOnTrack()->globalPosition())) {
378 for (; rs !=
track.trackStateOnSurfaces()->rend(); ++rs) {
384 if (indetVolume->
inside((**rs).measurementOnTrack()->globalPosition())) {
387 }
else if (!calorimeterVolume->
inside((**rs).measurementOnTrack()->globalPosition())) {
393 return !indet && spectrometer;
◆ isLineFit()
IMuonTrackQuery interface: does track have fitted curvature ?
Implements Rec::IMuonTrackQuery.
Definition at line 396 of file MuonTrackQuery.cxx.
402 if (!measuredPerigee)
return false;
404 if (!measuredPerigee->covariance()) {
411 double relativeMomentumCovariance = momentumCovariance * measuredPerigee->momentum().mag2();
414 if (momentumCovariance < 1.
E-19 || relativeMomentumCovariance < 1.
E-6)
return true;
417 if (relativeMomentumCovariance > 100.)
return true;
◆ isProjective()
IMuonTrackQuery interface: is track (roughly) projective towards IP?
Implements Rec::IMuonTrackQuery.
Definition at line 422 of file MuonTrackQuery.cxx.
428 startPosition = tsos->measurementOnTrack()->globalPosition();
435 for (; rs !=
track.trackStateOnSurfaces()->rend(); ++rs) {
438 endPosition = (**rs).measurementOnTrack()->globalPosition();
444 double side = endPosition.dot(startPosition);
446 ATH_MSG_DEBUG(
"track is not projective: fails same-side check ");
453 constexpr
double PiOver8 =
M_PI / 8.;
454 if (std::abs(sc_dPhi.sn) > PiOver8) {
455 ATH_MSG_DEBUG(
"track is not projective: sinDeltaPhi " << sc_dPhi.sn);
460 if (sc_dPhi.cs < 0.) {
461 double cotTheta = startPosition.z() / startPosition.perp();
462 if (std::abs(startPosition.z()) > std::abs(endPosition.z())) {
cotTheta = endPosition.z() / endPosition.perp(); }
465 if (startPosition.z() * endPosition.z() < 0. || std::abs(
cotTheta) < 2.0) {
466 ATH_MSG_DEBUG(
"track is not projective: cosDeltaPhi " << sc_dPhi.cs);
◆ isSectorOverlap()
bool Rec::MuonTrackQuery::isSectorOverlap |
( |
const Trk::Track & |
track | ) |
const |
|
overridevirtual |
IMuonTrackQuery interface: is there a long/short chamber overlap?
Use the taylor expansion that sin(x) = x for small x
Implements Rec::IMuonTrackQuery.
Definition at line 477 of file MuonTrackQuery.cxx.
478 constexpr
double sectorOffset =
M_PI / 16.;
479 bool isOverlap =
true;
487 const Amg::Vector3D& position = tsos->measurementOnTrack()->associatedSurface().globalReferencePoint();
489 cosPhi = position.x() / position.perp();
490 sinPhi = position.y() / position.perp();
492 const Amg::Vector3D& position = tsos->measurementOnTrack()->associatedSurface().globalReferencePoint();
494 double sinDeltaPhi = (position.x() * sinPhi - position.y() * cosPhi) / position.perp();
496 if (std::abs(sinDeltaPhi) > sectorOffset) {
◆ isSlimmed()
◆ momentumBalanceSignificance()
double Rec::MuonTrackQuery::momentumBalanceSignificance |
( |
const Trk::Track & |
track, |
|
|
const EventContext & |
ctx |
|
) |
| const |
|
overridevirtual |
IMuonTrackQuery interface: significance of momentum balance for combined tracks (biassed residual)
Implements Rec::IMuonTrackQuery.
Definition at line 521 of file MuonTrackQuery.cxx.
527 double energyBalance = 0.;
533 if (!tsos->trackParameters())
continue;
535 if (tsos->materialEffectsOnTrack()) {
542 energyBalance = previousParameters->
momentum().mag() - energyLoss->
deltaE() - tsos->trackParameters()->momentum().mag();
544 if (std::abs(energyBalance) < energyLoss->
sigmaDeltaE()) {
546 <<
" momentum balance " << std::setw(6) << std::setprecision(2) << energyBalance /
Units::GeV
547 <<
" significance " << std::setw(6) << std::setprecision(1)
548 << energyBalance / energyLoss->
sigmaDeltaE() <<
" p before/after calo" << std::setw(7)
549 << std::setprecision(2) << previousParameters->
momentum().mag() /
Units::GeV <<
" /" << std::setw(7)
550 << std::setprecision(2) << tsos->trackParameters()->momentum().mag() /
Units::GeV
554 }
else if (energyBalance < 0.) {
556 <<
" momentum balance " << std::setw(6) << std::setprecision(2) << energyBalance /
Units::GeV
557 <<
" significance " << std::setw(6) << std::setprecision(1)
558 << energyBalance / energyLoss->
sigmaDeltaE() <<
" p before/after calo" << std::setw(7)
559 << std::setprecision(2) << previousParameters->
momentum().mag() /
Units::GeV <<
" /" << std::setw(7)
560 << std::setprecision(2) << tsos->trackParameters()->momentum().mag() /
Units::GeV
566 <<
" momentum balance " << std::setw(6) << std::setprecision(2) << energyBalance /
Units::GeV
567 <<
" significance " << std::setw(6) << std::setprecision(1)
568 << energyBalance / energyLoss->
sigmaDeltaE() <<
" p before/after calo" << std::setw(7)
569 << std::setprecision(2) << previousParameters->
momentum().mag() /
Units::GeV <<
" /" << std::setw(7)
570 << std::setprecision(2) << tsos->trackParameters()->momentum().mag() /
Units::GeV
580 previousParameters = tsos->trackParameters();
583 return energyBalance;
◆ msg() [1/2]
◆ msg() [2/2]
◆ msgLvl()
◆ numberPseudoMeasurements()
unsigned Rec::MuonTrackQuery::numberPseudoMeasurements |
( |
const Trk::Track & |
track | ) |
const |
|
overridevirtual |
◆ outgoingPerigee()
IMuonTrackQuery interface: perigee expressed outgoing from IP.
Implements Rec::IMuonTrackQuery.
Definition at line 601 of file MuonTrackQuery.cxx.
612 if (!perigee->covariance()) {
614 return std::make_unique<Trk::Perigee>(*perigee);
617 if (outerTSOS->
trackParameters() == perigee && perigee->momentum().dot(perigee->position()) <= 0.) {
618 const AmgSymMatrix(5)& perigeeCov = (*perigee->covariance());
621 return std::make_unique<Trk::Perigee>(perigee->position(), -perigee->momentum(), -perigee->charge(), surface, perigeeCov);
624 return std::make_unique<Trk::Perigee>(*perigee);
◆ 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.
◆ renounce()
◆ renounceArray()
◆ scatteringAngleSignificance()
IMuonTrackQuery interface: significance of early scattering angle pattern for combined tracks (wider than gaussian)
Implements Rec::IMuonTrackQuery.
Definition at line 626 of file MuonTrackQuery.cxx.
628 if (!calorimeterVolume) {
630 return ScatteringAngleSignificance{};
637 return ScatteringAngleSignificance{};
641 std::unique_ptr<const Trk::Track> refittedTrack;
648 if (!refittedTrack)
return ScatteringAngleSignificance(0);
650 refittedTrack = std::make_unique<Trk::Track>(
track);
655 bool haveMeasurement =
false;
656 unsigned scatterers = 0;
657 double totalSigma = 0.;
659 std::vector<bool> isMeasurement;
660 std::vector<double> sigmas;
661 std::vector<double> radii;
665 if (!haveMeasurement) {
666 if (tsos->measurementOnTrack()) { haveMeasurement =
true; }
671 if (!tsos->materialEffectsOnTrack())
continue;
677 if (!calorimeterVolume->
inside(position))
break;
683 if (!scattering)
continue;
687 if (tsos->measurementOnTrack()) {
688 isMeasurement.push_back(
true);
690 isMeasurement.push_back(
false);
693 radii.push_back(tsos->trackParameters()->position().perp());
696 sigmas.push_back(
sigma);
698 ATH_MSG_VERBOSE(scatterers <<
" radius " << tsos->trackParameters()->position().perp() <<
" deltaPhi "
699 << scattering->
deltaPhi() <<
" significance " <<
sigma <<
" totalSignificance " << totalSigma);
702 if (!scatterers) {
return ScatteringAngleSignificance(0); }
707 double curvatureSignificance = totalSigma;
708 double curvatureRadius = 0.;
709 double neighbourSignificance = 0.;
710 double neighbourRadius = 0.;
711 double previousSignificance = 0.;
712 double previousRadius = 0.;
713 unsigned index = scatterers - 1;
715 std::vector<double>::const_reverse_iterator rs = sigmas.rbegin();
716 for (; rs != sigmas.rend(); ++rs, --
index) {
717 totalSigma -= 2. * (*rs);
719 if (std::abs(totalSigma) > std::abs(curvatureSignificance)) {
720 curvatureSignificance = totalSigma;
721 curvatureRadius = radii[
index];
724 if (std::abs(sigmas[
index] + previousSignificance) > std::abs(neighbourSignificance)) {
725 neighbourSignificance = sigmas[
index] + previousSignificance;
727 if (std::abs(neighbourSignificance) > 0.) {
728 neighbourRadius = (sigmas[
index] * radii[
index] + previousSignificance * previousRadius) / neighbourSignificance;
730 neighbourRadius = 0.;
734 previousSignificance = sigmas[
index];
735 previousRadius = radii[
index];
739 curvatureSignificance /= std::sqrt(
static_cast<double>(scatterers));
740 neighbourSignificance *= OneOverSqrt2;
742 ATH_MSG_DEBUG(
" scatteringAngleSignificance " << curvatureSignificance <<
" at radius " << curvatureRadius
743 <<
" neighbourSignificance " << neighbourSignificance <<
" at radius "
744 << neighbourRadius <<
" from " << scatterers <<
" scatterers");
746 return ScatteringAngleSignificance(scatterers, curvatureRadius, curvatureSignificance, neighbourRadius, neighbourSignificance);
◆ spectrometerParameters()
IMuonTrackQuery interface: trackParameters at innermost measurement TSOS in MS.
Implements Rec::IMuonTrackQuery.
Definition at line 749 of file MuonTrackQuery.cxx.
752 if (!calorimeterVolume) {
762 !pThisTrackState->trackParameters() ||
764 calorimeterVolume->
inside(pThisTrackState->trackParameters()->position())) {
768 if (parametersView && pThisTrackState->trackParameters()->position().mag() > parametersView->position().mag()) {
break; }
769 parametersView = pThisTrackState->trackParameters();
772 if (!parametersView) { parametersView =
track.perigeeParameters(); }
775 if (parametersView->momentum().dot(parametersView->position()) > 0.) {
776 return parametersView->uniqueClone();
◆ spectrometerPhiQuality()
unsigned Rec::MuonTrackQuery::spectrometerPhiQuality |
( |
const Trk::Track & |
track, |
|
|
const EventContext & |
ctx |
|
) |
| const |
|
overridevirtual |
IMuonTrackQuery interface: assess the number of additional phi measurements needed for MS (or SA) track fit.
Implements Rec::IMuonTrackQuery.
Definition at line 785 of file MuonTrackQuery.cxx.
788 if (!calorimeterVolume) {
800 for (;
s !=
track.trackStateOnSurfaces()->
end(); ++
s) {
803 calorimeterVolume->
inside((**s).trackParameters()->position())) {
808 if (!
id.is_valid() || !
m_idHelperSvc->measuresPhi(
id)) {
continue; }
815 leadingPhiMeasurement = *
s;
819 if (!leadingPhiMeasurement)
return 2;
822 for (;
r !=
track.trackStateOnSurfaces()->rend(); ++
r) {
828 if (calorimeterVolume->
inside((**r).trackParameters()->position())) {
break; }
832 if (!
id.is_valid() || !
m_idHelperSvc->measuresPhi(
id)) {
continue; }
834 if (*
r != leadingPhiMeasurement) { trailingPhiMeasurement = *
r; }
839 if (!trailingPhiMeasurement) {
return 1; }
◆ 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.
◆ triggerStationParameters()
◆ updateVHKA()
◆ m_detStore
◆ m_edmHelperSvc
Initial value:{
this,
"edmHelper",
"Muon::MuonEDMHelperSvc/MuonEDMHelperSvc",
"Handle to the service providing the IMuonEDMHelperSvc interface",
}
Definition at line 102 of file MuonTrackQuery.h.
◆ m_evtStore
◆ m_fitter
◆ m_idHelperSvc
◆ m_mdtRotCreator
Initial value:{
this, "MdtRotCreator", "Muon::MdtDriftCircleOnTrackCreator/MdtDriftCircleOnTrackCreator", "MdtDriftCircleOnTrackCreator tool"}
Definition at line 111 of file MuonTrackQuery.h.
◆ m_trackingGeometryReadKey
Initial value:{this, "TrackingGeometryReadKey", "",
"Key of the TrackingGeometry conditions data."}
Definition at line 114 of file MuonTrackQuery.h.
◆ m_varHandleArraysDeclared
◆ m_vhka
The documentation for this class was generated from the following files:
double deltaPhi() const
returns the
double sigmaMinusDeltaE() const
returns the negative side
const TrackParameters * trackParameters() const
return ptr to trackparameters const overload
@ CaloDeposit
This TSOS contains a CaloEnergy object.
bool isSlimmed(const Trk::Track &track) const override
IMuonTrackQuery interface: does track have TrackParameters at every TSOS ?
Const iterator class for DataVector/DataList.
class extending the basic Trk::EnergyLoss to describe the measured or parameterised muon energy loss ...
bool inside(const Amg::Vector3D &gp, double tol=0.) const
Inside() method for checks.
const Amg::Vector3D & position() const
Access method for the position.
static std::unique_ptr< Trk::TrackParameters > flippedParameters(const Trk::TrackParameters ¶ms)
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T > &t)
const Trk::TrackStates * trackStateOnSurfaces() const
return a pointer to a const DataVector of const TrackStateOnSurfaces.
Dummy class used to allow special convertors to be called for surfaces owned by a detector element.
double sigmaDeltaE() const
returns the symmatric error
StoreGateSvc_t m_evtStore
Pointer to StoreGate (event store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
represents a deflection of the track caused through multiple scattering in material.
double deltaPhi(double phiA, double phiB)
delta Phi in range [-pi,pi[
virtual const Amg::Vector3D & globalReferencePoint() const
Returns a global reference point on the surface, for PlaneSurface, StraightLineSurface,...
#define ATH_MSG_VERBOSE(x)
bool empty() const
Test if the key is blank.
#define AmgSymMatrix(dim)
ToolHandle< Muon::IMdtDriftCircleOnTrackCreator > m_mdtRotCreator
virtual void setOwner(IDataHandleHolder *o)=0
@ Outlier
This TSoS contains an outlier, that is, it contains a MeasurementBase/RIO_OnTrack which was not used ...
@ StraightTrack
A straight track.
Class to handle pseudo-measurements in fitters and on track objects.
virtual const S & associatedSurface() const override final
Access to the Surface method.
virtual bool type(MeasurementBaseType::Type type) const override final
Extended method checking the type.
represents the full description of deflection and e-loss of a track in material.
const CaloEnergy * caloEnergy(const Trk::Track &track) const override
IMuonTrackQuery interface: caloEnergy from appropriate TSOS.
virtual ChargedTrackParametersUniquePtr createUniqueTrackParameters(double l1, double l2, double phi, double theat, double qop, std::optional< AmgSymMatrix(5)> cov=std::nullopt) const =0
Use the Surface as a ParametersBase constructor, from local parameters - charged.
ToolHandle< Trk::ITrackFitter > m_fitter
double deltaE() const
returns the
StoreGateSvc_t m_detStore
Pointer to StoreGate (detector store by default)
virtual void renounce()=0
std::conditional< std::is_base_of< SG::VarHandleKeyArray, T >::value, VarHandleKeyArrayType, type2 >::type type
const Perigee * perigeeParameters() const
return Perigee.
const Trk::TrackingVolume * getVolume(const std::string &&vol_name, const EventContext &ctx) const
represents the track state (measurement, material, fit parameters and quality) at a surface.
std::reverse_iterator< const_iterator > const_reverse_iterator
Standard const_reverse_iterator.
This class describes energy loss material effects in the ATLAS tracking EDM.
double charge(const T &p)
StatusCode initialize(bool used=true)
Eigen::Matrix< double, 3, 1 > Vector3D
bool isCombined(const Trk::Track &track, const EventContext &ctx) const override
IMuonTrackQuery interface: does track have measurements from indet and spectrometer ?
const Amg::Vector3D & momentum() const
Access method for the momentum.
const EnergyLoss * energyLoss() const
returns the energy loss object.
#define ATH_MSG_WARNING(x)
SG::ReadCondHandleKey< Trk::TrackingGeometry > m_trackingGeometryReadKey
const ScatteringAngles * scatteringAngles() const
returns the MCS-angles object.
double sigmaDeltaPhi() const
returns the
Helper to simultaneously calculate sin and cos of the same angle.
SG::VarHandleKey & vhKey()
Return a non-const reference to the HandleKey.
bool isLineFit(const Trk::Track &track) const override
IMuonTrackQuery interface: does track have fitted curvature ?
double deltaTheta() const
returns the
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>
const Surface & associatedSurface() const
returns the surface to which these m.eff. are associated.
double sigmaPlusDeltaE() const
returns the positive side
Scalar mag() const
mag method
ServiceHandle< Muon::IMuonEDMHelperSvc > m_edmHelperSvc